From 1909e038823f8dff9d18882b64e637b15234f837 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt Date: Wed, 25 May 2011 11:24:37 +0200 Subject: Add authentication token support for wayland windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For compositors that support it, the wayland clients can associate themselves with an auth token, specified by WL_AUTHENTICATION_TOKEN env var, or by directly specifying it in the wayland client plugin. Change-Id: I74a50a27c7c61c2b2cf1e09868618f36edc94cb1 Reviewed-by: Samuel Rødal Reviewed-on: http://codereview.qt.nokia.com/116 Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 9 ++--- src/plugins/platforms/wayland/qwaylandwindow.cpp | 1 + .../qwaylandwindowmanager-client-protocol.h | 40 ++++++++++++++++++---- .../qwaylandwindowmanagerintegration.cpp | 13 +++++-- .../qwaylandwindowmanagerintegration.h | 1 + .../wayland-windowmanager-protocol.c | 3 +- 6 files changed, 53 insertions(+), 14 deletions(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 13ee87f796..83516e9b4e 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -140,6 +140,11 @@ QWaylandDisplay::QWaylandDisplay(void) #ifdef QT_WAYLAND_GL_SUPPORT mEglIntegration = QWaylandGLIntegration::createGLIntegration(this); #endif + +#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT + mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this); +#endif + blockingReadEvents(); qRegisterMetaType("uint32_t"); @@ -148,10 +153,6 @@ QWaylandDisplay::QWaylandDisplay(void) mEglIntegration->initialize(); #endif -#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT - mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this); -#endif - connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), this, SLOT(flushRequests())); mFd = wl_display_get_fd(mDisplay, sourceUpdate, this); diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 3169b361ff..333a953b29 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -67,6 +67,7 @@ QWaylandWindow::QWaylandWindow(QWidget *window) #ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT mDisplay->windowManagerIntegration()->mapClientToProcess(qApp->applicationPid()); + mDisplay->windowManagerIntegration()->authenticateWithToken(); #endif mSurface = mDisplay->createSurface(this); diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h index ec776c5f87..73673aef6f 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h @@ -36,16 +36,37 @@ struct wl_client; struct wl_windowmanager; +struct wl_proxy; + +extern void +wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...); +extern struct wl_proxy * +wl_proxy_create(struct wl_proxy *factory, + const struct wl_interface *interface); +extern struct wl_proxy * +wl_proxy_create_for_id(struct wl_display *display, + const struct wl_interface *interface, uint32_t id); +extern void +wl_proxy_destroy(struct wl_proxy *proxy); + +extern int +wl_proxy_add_listener(struct wl_proxy *proxy, + void (**implementation)(void), void *data); + +extern void +wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data); + +extern void * +wl_proxy_get_user_data(struct wl_proxy *proxy); + extern const struct wl_interface wl_windowmanager_interface; -#define WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0 +#define wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0 +#define wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN 1 static inline struct wl_windowmanager * -wl_windowmanager_create(struct wl_display *display, uint32_t id, uint32_t /*version*/) +wl_windowmanager_create(struct wl_display *display, uint32_t id) { - // ### does not run without latest wayland. must be enabled later - //wl_display_bind(display, id, "wl_windowmanager", version); - return (struct wl_windowmanager *) wl_proxy_create_for_id(display, &wl_windowmanager_interface, id); } @@ -72,7 +93,14 @@ static inline void wl_windowmanager_map_client_to_process(struct wl_windowmanager *wl_windowmanager, uint32_t processid) { wl_proxy_marshal((struct wl_proxy *) wl_windowmanager, - WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid); + wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid); +} + +static inline void +wl_windowmanager_authenticate_with_token(struct wl_windowmanager *wl_windowmanager, const char *wl_authentication_token) +{ + wl_proxy_marshal((struct wl_proxy *) wl_windowmanager, + wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN, wl_authentication_token); } #ifdef __cplusplus diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp index bf8342308e..4236f395cb 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp @@ -68,12 +68,11 @@ struct wl_windowmanager *QWaylandWindowManagerIntegration::windowManager() const return mWaylandWindowManager; } -void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, - uint32_t version, void *data) +void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { if (strcmp(interface, "wl_windowmanager") == 0) { QWaylandWindowManagerIntegration *integration = static_cast(data); - integration->mWaylandWindowManager = wl_windowmanager_create(display,id, version); + integration->mWaylandWindowManager = wl_windowmanager_create(display, id); } } @@ -83,3 +82,11 @@ void QWaylandWindowManagerIntegration::mapClientToProcess(long long processId) wl_windowmanager_map_client_to_process(mWaylandWindowManager, (uint32_t) processId); } +void QWaylandWindowManagerIntegration::authenticateWithToken(const QByteArray &token) +{ + QByteArray authToken = token; + if (authToken.isEmpty()) + authToken = qgetenv("WL_AUTHENTICATION_TOKEN"); + if (mWaylandWindowManager) + wl_windowmanager_authenticate_with_token(mWaylandWindowManager, authToken.constData()); +} diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h index 01b814f22a..0e3781dbe2 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h @@ -56,6 +56,7 @@ public: void mapSurfaceToProcess(struct wl_surface *surface, long long processId); void mapClientToProcess(long long processId); + void authenticateWithToken(const QByteArray &token = QByteArray()); private: static void wlHandleListenerGlobal(wl_display *display, uint32_t id, diff --git a/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c b/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c index 48049d8571..0250801b1f 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c +++ b/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c @@ -26,7 +26,8 @@ #include "wayland-util.h" static const struct wl_message wl_windowmanager_requests[] = { - { "map_client_to_process", "u", NULL }, + { "map_client_to_process", "u" }, + { "authenticate_with_token", "s" }, }; WL_EXPORT const struct wl_interface wl_windowmanager_interface = { -- cgit v1.2.3 From 8c9deffcb38eb0a75b876c37613d02eb14c2c0f6 Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Thu, 26 May 2011 11:52:31 +0200 Subject: Add private header support to the EGLFS platform plugin. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several of the QPA headers include private headers in the Core, Gui and OpenGL modules and with the new modularized Qt, we need to opt-in for these. Change-Id: Ib7a81f7843ef89e3c5c5218f790287bb6c00e4cb Reviewed-on: http://codereview.qt.nokia.com/133 Reviewed-by: Samuel Rødal --- src/plugins/platforms/eglfs/eglfs.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro index 3692e38e1b..471cf63dd8 100644 --- a/src/plugins/platforms/eglfs/eglfs.pro +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -2,7 +2,7 @@ TARGET = qeglfs TEMPLATE = lib CONFIG += plugin -QT += opengl +QT += opengl core-private gui-private opengl-private DESTDIR = $$QT.gui.plugins/platforms -- cgit v1.2.3 From a8814fcb697893f6ab151342727ea0867f6fec21 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 27 May 2011 10:10:36 +0200 Subject: Made qpluginbase.pri into a feature profile. This enables other modules to use it without having access to the QtBase sources. Change-Id: I0a588b2e14ca88fa068c7c2bcc69ff669444f6c6 Task: QTBUG-19585 Reviewed-on: http://codereview.qt.nokia.com/237 Reviewed-by: Qt Sanity Bot Reviewed-by: Rohan McGovern --- src/plugins/platforms/cocoa/cocoa.pro | 2 +- src/plugins/platforms/directfb/directfb.pro | 2 +- src/plugins/platforms/externalplugin.pri | 2 +- src/plugins/platforms/fb_base/fb_base.pro | 2 +- src/plugins/platforms/linuxfb/linuxfb.pro | 2 +- src/plugins/platforms/minimal/minimal.pro | 2 +- src/plugins/platforms/openkode/openkode.pro | 2 +- src/plugins/platforms/openvglite/openvglite.pro | 2 +- src/plugins/platforms/qvfb/qvfb.pro | 2 +- src/plugins/platforms/uikit/uikit.pro | 2 +- src/plugins/platforms/vnc/vnc.pro | 2 +- src/plugins/platforms/wayland/wayland.pro | 2 +- src/plugins/platforms/xcb/xcb.pro | 2 +- src/plugins/platforms/xlib/xlib.pro | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index 705e60439e..bfa147f948 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -1,5 +1,5 @@ TARGET = qcocoa -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms OBJECTIVE_SOURCES = main.mm \ diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index 4a637463ef..f830177dcb 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -1,5 +1,5 @@ TARGET = qdirectfb -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms isEmpty(DIRECTFB_LIBS) { diff --git a/src/plugins/platforms/externalplugin.pri b/src/plugins/platforms/externalplugin.pri index 54da4d957c..9b00acb4e9 100644 --- a/src/plugins/platforms/externalplugin.pri +++ b/src/plugins/platforms/externalplugin.pri @@ -26,4 +26,4 @@ QT_SOURCE_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_SOURCE_TREE) QT_BUILD_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_BUILD_TREE) -include($$QT_SOURCE_TREE/src/plugins/qpluginbase.pri) +load(qt_plugin) diff --git a/src/plugins/platforms/fb_base/fb_base.pro b/src/plugins/platforms/fb_base/fb_base.pro index 4445516cc7..4ebd53b407 100644 --- a/src/plugins/platforms/fb_base/fb_base.pro +++ b/src/plugins/platforms/fb_base/fb_base.pro @@ -6,7 +6,7 @@ #QT -= core gui TARGET = fb_base -#include(../../qpluginbase.pri) +#load(qt_plugin) DESTDIR = $$QT.gui.plugins/graphicssystems diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 4e4fe6ff4b..ce6814ecc1 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -1,5 +1,5 @@ TARGET = qlinuxfbgraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index d1088e3233..d51b6b2ed0 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,5 +1,5 @@ TARGET = qminimal -include(../../qpluginbase.pri) +load(qt_plugin) QT = core-private gui-private DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index a6e7d7665a..ad17a3bc78 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -1,5 +1,5 @@ TARGET = qopenkodeintegration -include(../../qpluginbase.pri) +load(qt_plugin) QT += opengl diff --git a/src/plugins/platforms/openvglite/openvglite.pro b/src/plugins/platforms/openvglite/openvglite.pro index 11e867d998..bb7efe9bf3 100644 --- a/src/plugins/platforms/openvglite/openvglite.pro +++ b/src/plugins/platforms/openvglite/openvglite.pro @@ -1,5 +1,5 @@ TARGET = qvglitegraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += openvg diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro index bc17525104..5db8533264 100644 --- a/src/plugins/platforms/qvfb/qvfb.pro +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -1,5 +1,5 @@ TARGET = qvfbintegration -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/uikit/uikit.pro b/src/plugins/platforms/uikit/uikit.pro index 6f5947f2c0..45a48dc92a 100644 --- a/src/plugins/platforms/uikit/uikit.pro +++ b/src/plugins/platforms/uikit/uikit.pro @@ -1,5 +1,5 @@ TARGET = quikit -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms QT += opengl diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index a7b8ca540a..85bffb0637 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,5 +1,5 @@ TARGET = qvncgraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += network diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 3f5a69cf75..857a2918ce 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -1,5 +1,5 @@ TARGET = qwayland -include(../../qpluginbase.pri) +load(qt_plugin) QT+=gui-private core-private opengl-private diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 139f5c9591..27d10b6756 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -1,6 +1,6 @@ TARGET = xcb -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms QT += core-private gui-private diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro index 902d379ee2..2cba5513d5 100644 --- a/src/plugins/platforms/xlib/xlib.pro +++ b/src/plugins/platforms/xlib/xlib.pro @@ -1,6 +1,6 @@ TARGET = qxlib -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms QT += core-private gui-private opengl-private -- cgit v1.2.3