xwayland: use xfixes extension

This commit is contained in:
Tony Crisci 2017-10-15 14:50:21 -04:00
parent 02f4acc69f
commit fb25adae36
4 changed files with 33 additions and 1 deletions

View file

@ -51,6 +51,7 @@ udev = dependency('libudev')
pixman = dependency('pixman-1') pixman = dependency('pixman-1')
xcb = dependency('xcb') xcb = dependency('xcb')
xcb_composite = dependency('xcb-composite') xcb_composite = dependency('xcb-composite')
xcb_xfixes = dependency('xcb-xfixes')
xcb_icccm = dependency('xcb-icccm', required: false) xcb_icccm = dependency('xcb-icccm', required: false)
x11_xcb = dependency('x11-xcb') x11_xcb = dependency('x11-xcb')
libcap = dependency('libcap', required: false) libcap = dependency('libcap', required: false)

View file

@ -6,5 +6,12 @@ lib_wlr_xwayland = static_library(
'xwm.c', 'xwm.c',
), ),
include_directories: wlr_inc, include_directories: wlr_inc,
dependencies: [wayland_server, xcb, xcb_composite, xcb_icccm, pixman], dependencies: [
wayland_server,
xcb,
xcb_composite,
xcb_xfixes,
xcb_icccm,
pixman,
],
) )

View file

@ -3,6 +3,7 @@
#endif #endif
#include <stdlib.h> #include <stdlib.h>
#include <xcb/composite.h> #include <xcb/composite.h>
#include <xcb/xfixes.h>
#include "wlr/util/log.h" #include "wlr/util/log.h"
#include "wlr/types/wlr_surface.h" #include "wlr/types/wlr_surface.h"
#include "wlr/xwayland.h" #include "wlr/xwayland.h"
@ -825,9 +826,30 @@ struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland) {
// TODO more xcb init // TODO more xcb init
// xcb_prefetch_extension_data(xwm->xcb_conn, &xcb_composite_id); // xcb_prefetch_extension_data(xwm->xcb_conn, &xcb_composite_id);
xcb_prefetch_extension_data(xwm->xcb_conn, &xcb_xfixes_id);
xcb_get_resources(xwm); xcb_get_resources(xwm);
xcb_init_wm(xwm); xcb_init_wm(xwm);
xwm->xfixes = xcb_get_extension_data(xwm->xcb_conn, &xcb_xfixes_id);
if (!xwm->xfixes || !xwm->xfixes->present) {
wlr_log(L_DEBUG, "xfixes not available");
}
xcb_xfixes_query_version_cookie_t xfixes_cookie;
xcb_xfixes_query_version_reply_t *xfixes_reply;
xfixes_cookie =
xcb_xfixes_query_version(xwm->xcb_conn, XCB_XFIXES_MAJOR_VERSION,
XCB_XFIXES_MINOR_VERSION);
xfixes_reply =
xcb_xfixes_query_version_reply(xwm->xcb_conn, xfixes_cookie, NULL);
wlr_log(L_DEBUG, "xfixes version: %d.%d",
xfixes_reply->major_version, xfixes_reply->minor_version);
free(xfixes_reply);
xwm->surface_create_listener.notify = create_surface_handler; xwm->surface_create_listener.notify = create_surface_handler;
wl_signal_add(&wlr_xwayland->compositor->events.create_surface, wl_signal_add(&wlr_xwayland->compositor->events.create_surface,
&xwm->surface_create_listener); &xwm->surface_create_listener);

View file

@ -85,6 +85,8 @@ struct wlr_xwm {
struct wl_list new_surfaces; struct wl_list new_surfaces;
struct wl_list unpaired_surfaces; struct wl_list unpaired_surfaces;
const xcb_query_extension_reply_t *xfixes;
}; };
void xwm_destroy(struct wlr_xwm *xwm); void xwm_destroy(struct wlr_xwm *xwm);