3493e97655
Summary: The clipboard sync is done by a dedicated helper binary launched by KWin. This helper binary is forced to xcb platform to piggy-back on Qt's implementation of the X11 clipboard. In addition it implements the Wayland clipboard - which is much simpler. Reading the Wayland clipboard is based on the implementation in QtWayland. KWin internally knows the DataDeviceInterface belonging to the helper application. Whenever an xwayland client is focussed, this DataDevice is allowed to set the selection and KWin manually updates the current selection in the SeatInterface. By that the sync from X11 to Wayland is implemented. When afterwards a Wayland client is selected, it's sent the current selection which references the X clipboard and a data transfer can be initiated in the normal Wayland way. For the other direction KWin sends the current selection to the helper's DataDevice whenever an xwayland window is focused. The helper application reads the Wayland clipboard and sets it on the X11 clipboard. Thus the Wayland clipboard is synced to X11. The approach used here will also be useful for implementing a clipboard manager (aka klipper). Currently the implementation is not yet fully completed. We need to make sure that the helper application gets restarted in case of a crash. Test Plan: See added test case Reviewers: #plasma_on_wayland, #kwin Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D1973
39 lines
1.4 KiB
CMake
39 lines
1.4 KiB
CMake
#cmakedefine KWIN_BUILD_DECORATIONS 1
|
|
#cmakedefine KWIN_BUILD_TABBOX 1
|
|
#cmakedefine KWIN_BUILD_ACTIVITIES 1
|
|
#define KWIN_NAME "${KWIN_NAME}"
|
|
#define KWIN_INTERNAL_NAME_X11 "${KWIN_INTERNAL_NAME_X11}"
|
|
#define KWIN_CONFIG "${KWIN_NAME}rc"
|
|
#define KWIN_VERSION_STRING "${PROJECT_VERSION}"
|
|
#define XCB_VERSION_STRING "${XCB_VERSION}"
|
|
#define KWIN_KILLER_BIN "${CMAKE_INSTALL_FULL_LIBEXECDIR}/kwin_killer_helper"
|
|
#define KWIN_RULES_DIALOG_BIN "${CMAKE_INSTALL_FULL_LIBEXECDIR}/kwin_rules_dialog"
|
|
#define KWIN_XCLIPBOARD_SYNC_BIN "${CMAKE_INSTALL_FULL_LIBEXECDIR}/org_kde_kwin_xclipboard_syncer"
|
|
#cmakedefine01 HAVE_INPUT
|
|
#cmakedefine01 HAVE_X11_XCB
|
|
#cmakedefine01 HAVE_X11_XINPUT
|
|
#cmakedefine01 HAVE_DRM
|
|
#cmakedefine01 HAVE_GBM
|
|
#cmakedefine01 HAVE_LIBHYBRIS
|
|
#cmakedefine01 HAVE_WAYLAND_EGL
|
|
#cmakedefine01 HAVE_SYS_PRCTL_H
|
|
#cmakedefine01 HAVE_PR_SET_DUMPABLE
|
|
#cmakedefine01 HAVE_SYS_PROCCTL_H
|
|
#cmakedefine01 HAVE_PROC_TRACE_CTL
|
|
#cmakedefine01 HAVE_BREEZE_DECO
|
|
#if HAVE_BREEZE_DECO
|
|
#define BREEZE_KDECORATION_PLUGIN_ID "${BREEZE_KDECORATION_PLUGIN_ID}"
|
|
#endif
|
|
|
|
/* Define to 1 if you have the <unistd.h> header file. */
|
|
#cmakedefine HAVE_UNISTD_H 1
|
|
|
|
/* Define to 1 if you have the <malloc.h> header file. */
|
|
#cmakedefine HAVE_MALLOC_H 1
|
|
|
|
#cmakedefine XCB_ICCCM_FOUND 1
|
|
#ifndef XCB_ICCCM_FOUND
|
|
#define XCB_ICCCM_WM_STATE_WITHDRAWN 0
|
|
#define XCB_ICCCM_WM_STATE_NORMAL 1
|
|
#define XCB_ICCCM_WM_STATE_ICONIC 3
|
|
#endif
|