diff --git a/app/org.kde.kdeconnect.app.desktop b/app/org.kde.kdeconnect.app.desktop index 5de31f4ec..838f8ff71 100644 --- a/app/org.kde.kdeconnect.app.desktop +++ b/app/org.kde.kdeconnect.app.desktop @@ -36,6 +36,7 @@ GenericName[x-test]=xxDevice Synchronizationxx Comment=Make all your devices one Comment[ca]=Fa que tots els vostres dispositius siguin un Comment[cs]=Sjednoťte svá zařízení +Comment[de]=Gleichen Sie alle Ihre Geräte ab Comment[es]=Convertir todos sus dispositivos en uno Comment[fi]=Yhdistä kaikki laitteesi toisiinsa Comment[gl]=Unifique os seus dispositivos. diff --git a/kdeconnect-non-plasma.desktop b/kdeconnect-non-plasma.desktop index 00847aeec..888608c23 100755 --- a/kdeconnect-non-plasma.desktop +++ b/kdeconnect-non-plasma.desktop @@ -30,6 +30,7 @@ Comment=Reach out to your devices Comment[bg]=Достигане до устройствата ви Comment[ca]=Connecteu amb els vostres dispositius Comment[cs]=Dosáhněte na svá zařízení +Comment[de]=Zugriff auf Ihre Geräte Comment[en_GB]=Reach out to your devices Comment[es]=Contactar con sus dispositivos Comment[fi]=Tavoitettavuutta laitteillesi diff --git a/plugins/mousepad/CMakeLists.txt b/plugins/mousepad/CMakeLists.txt index 823b54b8b..88716c719 100644 --- a/plugins/mousepad/CMakeLists.txt +++ b/plugins/mousepad/CMakeLists.txt @@ -5,9 +5,10 @@ set(kdeconnect_mousepad_SRCS find_package(XTest REQUIRED) find_package(X11 REQUIRED) find_package(LibFakeKey REQUIRED) +find_package(Qt5X11Extras REQUIRED) kdeconnect_add_plugin(kdeconnect_mousepad JSON kdeconnect_mousepad.json SOURCES ${kdeconnect_mousepad_SRCS}) include_directories(${XTEST_INCLUDE_DIRS} ${X11_INCLUDE_DIR} ${LibFakeKey_INCLUDE_DIRS}) -target_link_libraries(kdeconnect_mousepad kdeconnectcore Qt5::Gui ${X11_LIBRARIES} ${XTEST_LIBRARIES} ${LibFakeKey_LIBRARIES}) +target_link_libraries(kdeconnect_mousepad kdeconnectcore Qt5::Gui Qt5::X11Extras ${X11_LIBRARIES} ${XTEST_LIBRARIES} ${LibFakeKey_LIBRARIES}) diff --git a/plugins/mousepad/fixx11h.h b/plugins/mousepad/fixx11h.h deleted file mode 100644 index 8d69e156d..000000000 --- a/plugins/mousepad/fixx11h.h +++ /dev/null @@ -1,301 +0,0 @@ -/**************************************************************************** - - Copyright (C) 2003 Lubos Lunak - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - -****************************************************************************/ - -//#ifdef don't do this, this file is supposed to be included -//#define multiple times - -#include - -/* Usage: - - If you get compile errors caused by X11 includes (the line - where first error appears contains word like None, Unsorted, - Below, etc.), put #include in the .cpp file - (not .h file!) between the place where X11 headers are - included and the place where the file with compile - error is included (or the place where the compile error - in the .cpp file occurs). - - This file remaps X11 #defines to const variables or - inline functions. The side effect may be that these - symbols may now refer to different variables - (e.g. if X11 #defined NoButton, after this file - is included NoButton would no longer be X11's - NoButton, but Qt::NoButton instead). At this time, - there's no conflict known that could cause problems. - - The original X11 symbols are still accessible - (e.g. for None) as X::None, XNone, and also still - None, unless name lookup finds different None - first (in the current class, etc.) - - Use 'Unsorted', 'Bool' and 'index' as templates. - -*/ - -namespace X -{ - -// template ---> -// Affects: Should be without side effects. -#ifdef Unsorted -#ifndef FIXX11H_Unsorted -#define FIXX11H_Unsorted -const int XUnsorted = Unsorted; -#undef Unsorted -const int Unsorted = XUnsorted; -#endif -#undef Unsorted -#endif -// template <--- - -// Affects: Should be without side effects. -#ifdef None -#ifndef FIXX11H_None -#define FIXX11H_None -const XID XNone = None; -#undef None -const XID None = XNone; -#endif -#undef None -#endif - -// template ---> -// Affects: Should be without side effects. -#ifdef Bool -#ifndef FIXX11H_Bool -#define FIXX11H_Bool -#ifdef _XTYPEDEF_BOOL /* Xdefs.h has typedef'ed Bool already */ -#undef Bool -#else -typedef Bool XBool; -#undef Bool -typedef XBool Bool; -#endif -#endif -#undef Bool -#define _XTYPEDEF_BOOL -#endif -// template <--- - -// Affects: Should be without side effects. -#ifdef KeyPress -#ifndef FIXX11H_KeyPress -#define FIXX11H_KeyPress -const int XKeyPress = KeyPress; -#undef KeyPress -const int KeyPress = XKeyPress; -#endif -#undef KeyPress -#endif - -// Affects: Should be without side effects. -#ifdef KeyRelease -#ifndef FIXX11H_KeyRelease -#define FIXX11H_KeyRelease -const int XKeyRelease = KeyRelease; -#undef KeyRelease -const int KeyRelease = XKeyRelease; -#endif -#undef KeyRelease -#endif - -// Affects: Should be without side effects. -#ifdef Above -#ifndef FIXX11H_Above -#define FIXX11H_Above -const int XAbove = Above; -#undef Above -const int Above = XAbove; -#endif -#undef Above -#endif - -// Affects: Should be without side effects. -#ifdef Below -#ifndef FIXX11H_Below -#define FIXX11H_Below -const int XBelow = Below; -#undef Below -const int Below = XBelow; -#endif -#undef Below -#endif - -// Affects: Should be without side effects. -#ifdef FocusIn -#ifndef FIXX11H_FocusIn -#define FIXX11H_FocusIn -const int XFocusIn = FocusIn; -#undef FocusIn -const int FocusIn = XFocusIn; -#endif -#undef FocusIn -#endif - -// Affects: Should be without side effects. -#ifdef FocusOut -#ifndef FIXX11H_FocusOut -#define FIXX11H_FocusOut -const int XFocusOut = FocusOut; -#undef FocusOut -const int FocusOut = XFocusOut; -#endif -#undef FocusOut -#endif - -// Affects: Should be without side effects. -#ifdef Always -#ifndef FIXX11H_Always -#define FIXX11H_Always -const int XAlways = Always; -#undef Always -const int Always = XAlways; -#endif -#undef Always -#endif - -// Affects: Should be without side effects. -#ifdef Expose -#ifndef FIXX11H_Expose -#define FIXX11H_Expose -const int XExpose = Expose; -#undef Expose -const int Expose = XExpose; -#endif -#undef Expose -#endif - -// Affects: Should be without side effects. -#ifdef Success -#ifndef FIXX11H_Success -#define FIXX11H_Success -const int XSuccess = Success; -#undef Success -const int Success = XSuccess; -#endif -#undef Success -#endif - -// Affects: Should be without side effects. -#ifdef GrayScale -#ifndef FIXX11H_GrayScale -#define FIXX11H_GrayScale -const int XGrayScale = GrayScale; -#undef GrayScale -const int GrayScale = XGrayScale; -#endif -#undef GrayScale -#endif - -// Affects: Should be without side effects. -#ifdef Status -#ifndef FIXX11H_Status -#define FIXX11H_Status -typedef Status XStatus; -#undef Status -typedef XStatus Status; -#endif -#undef Status -#endif - -// template ---> -// Affects: Should be without side effects. -#ifdef CursorShape -#ifndef FIXX11H_CursorShape -#define FIXX11H_CursorShape -const int XCursorShape = CursorShape; -#undef CursorShape -const int CursorShape = XCursorShape; -#endif -#undef CursorShape -#endif -// template <--- - -// template ---> -// Affects: Should be without side effects. -#ifdef FontChange -#ifndef FIXX11H_FontChange -#define FIXX11H_FontChange -const int XFontChange = FontChange; -#undef FontChange -const int FontChange = XFontChange; -#endif -#undef FontChange -#endif -// template <--- - -// Affects: Should be without side effects. -#ifdef NormalState -#ifndef FIXX11H_NormalState -#define FIXX11H_NormalState -const int XNormalState = NormalState; -#undef NormalState -const int NormalState = XNormalState; -#endif -#undef NormalState -#endif - -// template ---> -// Affects: Should be without side effects. -#ifdef index -#ifndef FIXX11H_index -#define FIXX11H_index -inline -const char *Xindex(const char *s, int c) -{ - return index(s, c); -} -#undef index -inline -const char *index(const char *s, int c) -{ - return Xindex(s, c); -} -#endif -#undef index -#endif -// template <--- - -#ifdef rindex -// Affects: Should be without side effects. -#ifndef FIXX11H_rindex -#define FIXX11H_rindex -inline -const char *Xrindex(const char *s, int c) -{ - return rindex(s, c); -} -#undef rindex -inline -const char *rindex(const char *s, int c) -{ - return Xrindex(s, c); -} -#endif -#undef rindex -#endif -} - -using namespace X; diff --git a/plugins/mousepad/mousepadplugin.cpp b/plugins/mousepad/mousepadplugin.cpp index f49aa7f31..3d69959af 100644 --- a/plugins/mousepad/mousepadplugin.cpp +++ b/plugins/mousepad/mousepadplugin.cpp @@ -21,6 +21,7 @@ #include "mousepadplugin.h" #include #include +#include #include #include #include @@ -76,17 +77,13 @@ template size_t arraySize(T(&arr)[N]) { (void)arr; return N; } MousepadPlugin::MousepadPlugin(QObject* parent, const QVariantList& args) - : KdeConnectPlugin(parent, args), m_display(0), m_fakekey(0) + : KdeConnectPlugin(parent, args), m_fakekey(0), m_x11(QX11Info::isPlatformX11()) { } MousepadPlugin::~MousepadPlugin() { - if (m_display) { - XCloseDisplay(m_display); - m_display = 0; - } if (m_fakekey) { free(m_fakekey); m_fakekey = 0; @@ -114,41 +111,41 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np) if (isSingleClick || isDoubleClick || isMiddleClick || isRightClick || isSingleHold || isScroll || !key.isEmpty() || specialKey) { - if(!m_display) { - m_display = XOpenDisplay(NULL); - if(!m_display) { - qWarning() << "Failed to open X11 display"; - return false; - } + if (!m_x11) { + return false; + } + Display *display = QX11Info::display(); + if(!display) { + return false; } if (isSingleClick) { - XTestFakeButtonEvent(m_display, LeftMouseButton, True, 0); - XTestFakeButtonEvent(m_display, LeftMouseButton, False, 0); + XTestFakeButtonEvent(display, LeftMouseButton, True, 0); + XTestFakeButtonEvent(display, LeftMouseButton, False, 0); } else if (isDoubleClick) { - XTestFakeButtonEvent(m_display, LeftMouseButton, True, 0); - XTestFakeButtonEvent(m_display, LeftMouseButton, False, 0); - XTestFakeButtonEvent(m_display, LeftMouseButton, True, 0); - XTestFakeButtonEvent(m_display, LeftMouseButton, False, 0); + XTestFakeButtonEvent(display, LeftMouseButton, True, 0); + XTestFakeButtonEvent(display, LeftMouseButton, False, 0); + XTestFakeButtonEvent(display, LeftMouseButton, True, 0); + XTestFakeButtonEvent(display, LeftMouseButton, False, 0); } else if (isMiddleClick) { - XTestFakeButtonEvent(m_display, MiddleMouseButton, True, 0); - XTestFakeButtonEvent(m_display, MiddleMouseButton, False, 0); + XTestFakeButtonEvent(display, MiddleMouseButton, True, 0); + XTestFakeButtonEvent(display, MiddleMouseButton, False, 0); } else if (isRightClick) { - XTestFakeButtonEvent(m_display, RightMouseButton, True, 0); - XTestFakeButtonEvent(m_display, RightMouseButton, False, 0); + XTestFakeButtonEvent(display, RightMouseButton, True, 0); + XTestFakeButtonEvent(display, RightMouseButton, False, 0); } else if (isSingleHold){ //For drag'n drop - XTestFakeButtonEvent(m_display, LeftMouseButton, True, 0); + XTestFakeButtonEvent(display, LeftMouseButton, True, 0); } else if (isSingleRelease){ //For drag'n drop. NEVER USED (release is done by tapping, which actually triggers a isSingleClick). Kept here for future-proofnes. - XTestFakeButtonEvent(m_display, LeftMouseButton, False, 0); + XTestFakeButtonEvent(display, LeftMouseButton, False, 0); } else if (isScroll) { if (dy < 0) { - XTestFakeButtonEvent(m_display, MouseWheelDown, True, 0); - XTestFakeButtonEvent(m_display, MouseWheelDown, False, 0); + XTestFakeButtonEvent(display, MouseWheelDown, True, 0); + XTestFakeButtonEvent(display, MouseWheelDown, False, 0); } else if (dy > 0) { - XTestFakeButtonEvent(m_display, MouseWheelUp, True, 0); - XTestFakeButtonEvent(m_display, MouseWheelUp, False, 0); + XTestFakeButtonEvent(display, MouseWheelUp, True, 0); + XTestFakeButtonEvent(display, MouseWheelUp, False, 0); } } else if (!key.isEmpty() || specialKey) { @@ -156,9 +153,9 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np) bool alt = np.get("alt", false); bool shift = np.get("shift", false); - if (ctrl) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Control_L), True, 0); - if (alt) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Alt_L), True, 0); - if (shift) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Shift_L), True, 0); + if (ctrl) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Control_L), True, 0); + if (alt) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Alt_L), True, 0); + if (shift) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Shift_L), True, 0); if (specialKey) { @@ -167,15 +164,15 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np) return false; } - int keycode = XKeysymToKeycode(m_display, SpecialKeysMap[specialKey]); + int keycode = XKeysymToKeycode(display, SpecialKeysMap[specialKey]); - XTestFakeKeyEvent (m_display, keycode, True, 0); - XTestFakeKeyEvent (m_display, keycode, False, 0); + XTestFakeKeyEvent (display, keycode, True, 0); + XTestFakeKeyEvent (display, keycode, False, 0); } else { if (!m_fakekey) { - m_fakekey = fakekey_init(m_display); + m_fakekey = fakekey_init(display); if (!m_fakekey) { qWarning() << "Failed to initialize libfakekey"; return false; @@ -187,13 +184,13 @@ bool MousepadPlugin::receivePackage(const NetworkPackage& np) fakekey_release(m_fakekey); } - if (ctrl) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Control_L), False, 0); - if (alt) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Alt_L), False, 0); - if (shift) XTestFakeKeyEvent (m_display, XKeysymToKeycode(m_display, XK_Shift_L), False, 0); + if (ctrl) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Control_L), False, 0); + if (alt) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Alt_L), False, 0); + if (shift) XTestFakeKeyEvent (display, XKeysymToKeycode(display, XK_Shift_L), False, 0); } - XFlush(m_display); + XFlush(display); } else { //Is a mouse move event QPoint point = QCursor::pos(); diff --git a/plugins/mousepad/mousepadplugin.h b/plugins/mousepad/mousepadplugin.h index e8ce48028..b1ebcaae8 100644 --- a/plugins/mousepad/mousepadplugin.h +++ b/plugins/mousepad/mousepadplugin.h @@ -23,8 +23,6 @@ #include #include -#include -#include "fixx11h.h" #define PACKAGE_TYPE_MOUSEPAD QLatin1String("kdeconnect.mousepad") @@ -43,8 +41,8 @@ public: virtual void connected() { } private: - Display *m_display; FakeKey* m_fakekey; + bool m_x11; }; diff --git a/plugins/mprisremote/kdeconnect_mprisremote.json b/plugins/mprisremote/kdeconnect_mprisremote.json index b42501ae1..8904c147a 100644 --- a/plugins/mprisremote/kdeconnect_mprisremote.json +++ b/plugins/mprisremote/kdeconnect_mprisremote.json @@ -10,6 +10,7 @@ "Description": "Control MPRIS services", "Description[ca]": "Serveis de control del MPRIS", "Description[cs]": "Ovládejte služby MPRIS", + "Description[de]": "Steuerung von MPRIS-Diensten", "Description[es]": "Controlar los servicios MPRIS", "Description[fi]": "Ohjaa MPRIS-palveluita", "Description[gl]": "Controle servizos de MPRIS.", @@ -30,6 +31,7 @@ "Name": "MprisRemote", "Name[ca]": "MprisRemote", "Name[cs]": "MprisRemote", + "Name[de]": "MprisRemote", "Name[es]": "MprisRemote", "Name[fi]": "MPRIS-kaukosäädin", "Name[gl]": "MprisRemote",