Merge branch 'master' into newssl
This commit is contained in:
commit
859dce2449
4 changed files with 133 additions and 8 deletions
|
@ -6,9 +6,17 @@ find_package(XTest REQUIRED)
|
||||||
find_package(X11 REQUIRED)
|
find_package(X11 REQUIRED)
|
||||||
find_package(LibFakeKey REQUIRED)
|
find_package(LibFakeKey REQUIRED)
|
||||||
find_package(Qt5X11Extras REQUIRED)
|
find_package(Qt5X11Extras REQUIRED)
|
||||||
|
find_package(KF5Wayland)
|
||||||
|
|
||||||
|
set(HAVE_WAYLAND ${KF5Wayland_FOUND})
|
||||||
|
configure_file(config-mousepad.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-mousepad.h )
|
||||||
|
|
||||||
kdeconnect_add_plugin(kdeconnect_mousepad JSON kdeconnect_mousepad.json SOURCES ${kdeconnect_mousepad_SRCS})
|
kdeconnect_add_plugin(kdeconnect_mousepad JSON kdeconnect_mousepad.json SOURCES ${kdeconnect_mousepad_SRCS})
|
||||||
|
|
||||||
include_directories(${XTEST_INCLUDE_DIRS} ${X11_INCLUDE_DIR} ${LibFakeKey_INCLUDE_DIRS})
|
include_directories(${XTEST_INCLUDE_DIRS} ${X11_INCLUDE_DIR} ${LibFakeKey_INCLUDE_DIRS})
|
||||||
|
|
||||||
target_link_libraries(kdeconnect_mousepad kdeconnectcore Qt5::Gui Qt5::X11Extras ${X11_LIBRARIES} ${XTEST_LIBRARIES} ${LibFakeKey_LIBRARIES})
|
target_link_libraries(kdeconnect_mousepad kdeconnectcore Qt5::Gui Qt5::X11Extras ${X11_LIBRARIES} ${XTEST_LIBRARIES} ${LibFakeKey_LIBRARIES} KF5::I18n)
|
||||||
|
|
||||||
|
if(HAVE_WAYLAND)
|
||||||
|
target_link_libraries(kdeconnect_mousepad KF5::WaylandClient)
|
||||||
|
endif()
|
||||||
|
|
1
plugins/mousepad/config-mousepad.h.cmake
Normal file
1
plugins/mousepad/config-mousepad.h.cmake
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#cmakedefine01 HAVE_WAYLAND
|
|
@ -1,5 +1,6 @@
|
||||||
/**
|
/**
|
||||||
* Copyright 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
|
* Copyright 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
|
||||||
|
* Copyright 2015 Martin Gräßlin <mgraesslin@kde.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License as
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
@ -20,12 +21,20 @@
|
||||||
|
|
||||||
#include "mousepadplugin.h"
|
#include "mousepadplugin.h"
|
||||||
#include <KPluginFactory>
|
#include <KPluginFactory>
|
||||||
|
#include <KLocalizedString>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QGuiApplication>
|
||||||
#include <QX11Info>
|
#include <QX11Info>
|
||||||
#include <X11/extensions/XTest.h>
|
#include <X11/extensions/XTest.h>
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
#include <fakekey/fakekey.h>
|
#include <fakekey/fakekey.h>
|
||||||
|
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
#include <KWayland/Client/connection_thread.h>
|
||||||
|
#include <KWayland/Client/fakeinput.h>
|
||||||
|
#include <KWayland/Client/registry.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
K_PLUGIN_FACTORY_WITH_JSON( KdeConnectPluginFactory, "kdeconnect_mousepad.json", registerPlugin< MousepadPlugin >(); )
|
K_PLUGIN_FACTORY_WITH_JSON( KdeConnectPluginFactory, "kdeconnect_mousepad.json", registerPlugin< MousepadPlugin >(); )
|
||||||
|
|
||||||
enum MouseButtons {
|
enum MouseButtons {
|
||||||
|
@ -78,8 +87,14 @@ size_t arraySize(T(&arr)[N]) { (void)arr; return N; }
|
||||||
|
|
||||||
MousepadPlugin::MousepadPlugin(QObject* parent, const QVariantList& args)
|
MousepadPlugin::MousepadPlugin(QObject* parent, const QVariantList& args)
|
||||||
: KdeConnectPlugin(parent, args), m_fakekey(0), m_x11(QX11Info::isPlatformX11())
|
: KdeConnectPlugin(parent, args), m_fakekey(0), m_x11(QX11Info::isPlatformX11())
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
, m_waylandInput(nullptr)
|
||||||
|
, m_waylandAuthenticationRequested(false)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
setupWaylandIntegration();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
MousepadPlugin::~MousepadPlugin()
|
MousepadPlugin::~MousepadPlugin()
|
||||||
|
@ -91,6 +106,23 @@ MousepadPlugin::~MousepadPlugin()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MousepadPlugin::receivePackage(const NetworkPackage& np)
|
bool MousepadPlugin::receivePackage(const NetworkPackage& np)
|
||||||
|
{
|
||||||
|
if (m_x11) {
|
||||||
|
return handlePackageX11(np);
|
||||||
|
}
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
if (m_waylandInput) {
|
||||||
|
if (!m_waylandAuthenticationRequested) {
|
||||||
|
m_waylandInput->authenticate(i18n("KDE Connect"), i18n("Use your phone as a touchpad and keyboard"));
|
||||||
|
m_waylandAuthenticationRequested = true;
|
||||||
|
}
|
||||||
|
handPackageWayland(np);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MousepadPlugin::handlePackageX11(const NetworkPackage &np)
|
||||||
{
|
{
|
||||||
//qDebug() << np.serialize();
|
//qDebug() << np.serialize();
|
||||||
|
|
||||||
|
@ -110,10 +142,6 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np)
|
||||||
int specialKey = np.get<int>("specialKey", 0);
|
int specialKey = np.get<int>("specialKey", 0);
|
||||||
|
|
||||||
if (isSingleClick || isDoubleClick || isMiddleClick || isRightClick || isSingleHold || isScroll || !key.isEmpty() || specialKey) {
|
if (isSingleClick || isDoubleClick || isMiddleClick || isRightClick || isSingleHold || isScroll || !key.isEmpty() || specialKey) {
|
||||||
|
|
||||||
if (!m_x11) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Display *display = QX11Info::display();
|
Display *display = QX11Info::display();
|
||||||
if(!display) {
|
if(!display) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -199,4 +227,72 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
void MousepadPlugin::setupWaylandIntegration()
|
||||||
|
{
|
||||||
|
if (!QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
|
||||||
|
// not wayland
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
using namespace KWayland::Client;
|
||||||
|
ConnectionThread *connection = ConnectionThread::fromApplication(this);
|
||||||
|
if (!connection) {
|
||||||
|
// failed to get the Connection from Qt
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Registry *registry = new Registry(this);
|
||||||
|
registry->create(connection);
|
||||||
|
connect(registry, &Registry::fakeInputAnnounced, this,
|
||||||
|
[this, registry] (quint32 name, quint32 version) {
|
||||||
|
m_waylandInput = registry->createFakeInput(name, version, this);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
registry->setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MousepadPlugin::handPackageWayland(const NetworkPackage &np)
|
||||||
|
{
|
||||||
|
const float dx = np.get<float>("dx", 0);
|
||||||
|
const float dy = np.get<float>("dy", 0);
|
||||||
|
|
||||||
|
const bool isSingleClick = np.get<bool>("singleclick", false);
|
||||||
|
const bool isDoubleClick = np.get<bool>("doubleclick", false);
|
||||||
|
const bool isMiddleClick = np.get<bool>("middleclick", false);
|
||||||
|
const bool isRightClick = np.get<bool>("rightclick", false);
|
||||||
|
const bool isSingleHold = np.get<bool>("singlehold", false);
|
||||||
|
const bool isSingleRelease = np.get<bool>("singlerelease", false);
|
||||||
|
const bool isScroll = np.get<bool>("scroll", false);
|
||||||
|
const QString key = np.get<QString>("key", "");
|
||||||
|
const int specialKey = np.get<int>("specialKey", 0);
|
||||||
|
|
||||||
|
if (isSingleClick || isDoubleClick || isMiddleClick || isRightClick || isSingleHold || isScroll || !key.isEmpty() || specialKey) {
|
||||||
|
|
||||||
|
if (isSingleClick) {
|
||||||
|
m_waylandInput->requestPointerButtonClick(Qt::LeftButton);
|
||||||
|
} else if (isDoubleClick) {
|
||||||
|
m_waylandInput->requestPointerButtonClick(Qt::LeftButton);
|
||||||
|
m_waylandInput->requestPointerButtonClick(Qt::LeftButton);
|
||||||
|
} else if (isMiddleClick) {
|
||||||
|
m_waylandInput->requestPointerButtonClick(Qt::MiddleButton);
|
||||||
|
} else if (isRightClick) {
|
||||||
|
m_waylandInput->requestPointerButtonClick(Qt::RightButton);
|
||||||
|
} else if (isSingleHold){
|
||||||
|
//For drag'n drop
|
||||||
|
m_waylandInput->requestPointerButtonPress(Qt::LeftButton);
|
||||||
|
} else if (isSingleRelease){
|
||||||
|
//For drag'n drop. NEVER USED (release is done by tapping, which actually triggers a isSingleClick). Kept here for future-proofnes.
|
||||||
|
m_waylandInput->requestPointerButtonRelease(Qt::LeftButton);
|
||||||
|
} else if (isScroll) {
|
||||||
|
m_waylandInput->requestPointerAxis(Qt::Vertical, dy);
|
||||||
|
} else if (!key.isEmpty() || specialKey) {
|
||||||
|
// TODO: implement key support
|
||||||
|
}
|
||||||
|
|
||||||
|
} else { //Is a mouse move event
|
||||||
|
m_waylandInput->requestPointerMove(QSizeF(dx, dy));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "mousepadplugin.moc"
|
#include "mousepadplugin.moc"
|
||||||
|
|
|
@ -23,11 +23,22 @@
|
||||||
|
|
||||||
#include <QtGui/QCursor>
|
#include <QtGui/QCursor>
|
||||||
#include <core/kdeconnectplugin.h>
|
#include <core/kdeconnectplugin.h>
|
||||||
|
#include <config-mousepad.h>
|
||||||
|
|
||||||
#define PACKAGE_TYPE_MOUSEPAD QLatin1String("kdeconnect.mousepad")
|
#define PACKAGE_TYPE_MOUSEPAD QLatin1String("kdeconnect.mousepad")
|
||||||
|
|
||||||
struct FakeKey;
|
struct FakeKey;
|
||||||
|
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
namespace KWayland
|
||||||
|
{
|
||||||
|
namespace Client
|
||||||
|
{
|
||||||
|
class FakeInput;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
class MousepadPlugin
|
class MousepadPlugin
|
||||||
: public KdeConnectPlugin
|
: public KdeConnectPlugin
|
||||||
{
|
{
|
||||||
|
@ -41,9 +52,18 @@ public:
|
||||||
virtual void connected() { }
|
virtual void connected() { }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FakeKey* m_fakekey;
|
bool handlePackageX11(const NetworkPackage& np);
|
||||||
bool m_x11;
|
#if HAVE_WAYLAND
|
||||||
|
void setupWaylandIntegration();
|
||||||
|
bool handPackageWayland(const NetworkPackage& np);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FakeKey* m_fakekey;
|
||||||
|
const bool m_x11;
|
||||||
|
#if HAVE_WAYLAND
|
||||||
|
KWayland::Client::FakeInput *m_waylandInput;
|
||||||
|
bool m_waylandAuthenticationRequested;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue