mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	xwayland: use xfixes extension
This commit is contained in:
		
							parent
							
								
									02f4acc69f
								
							
						
					
					
						commit
						fb25adae36
					
				
					 4 changed files with 33 additions and 1 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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,
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue