| 
									
										
										
										
											2018-02-12 21:29:23 +01:00
										 |  |  | #ifndef BACKEND_X11_H
 | 
					
						
							|  |  |  | #define BACKEND_X11_H
 | 
					
						
							| 
									
										
										
										
											2017-09-22 14:58:41 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-26 16:04:07 +13:00
										 |  |  | #include <stdbool.h>
 | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | #include <wayland-server.h>
 | 
					
						
							| 
									
										
										
										
											2018-03-30 22:09:06 -04:00
										 |  |  | #include <wlr/backend/x11.h>
 | 
					
						
							|  |  |  | #include <wlr/interfaces/wlr_input_device.h>
 | 
					
						
							|  |  |  | #include <wlr/interfaces/wlr_output.h>
 | 
					
						
							| 
									
										
										
										
											2017-10-21 14:48:58 +13:00
										 |  |  | #include <wlr/render/egl.h>
 | 
					
						
							| 
									
										
										
										
											2018-02-12 21:29:23 +01:00
										 |  |  | #include <X11/Xlib-xcb.h>
 | 
					
						
							|  |  |  | #include <xcb/xcb.h>
 | 
					
						
							| 
									
										
										
										
											2018-03-30 21:40:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define XCB_EVENT_RESPONSE_TYPE_MASK 0x7f
 | 
					
						
							| 
									
										
										
										
											2017-09-26 16:04:07 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct wlr_x11_backend; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct wlr_x11_output { | 
					
						
							|  |  |  | 	struct wlr_output wlr_output; | 
					
						
							|  |  |  | 	struct wlr_x11_backend *x11; | 
					
						
							| 
									
										
										
										
											2018-03-30 21:40:43 -04:00
										 |  |  | 	struct wl_list link; // wlr_x11_backend::outputs
 | 
					
						
							| 
									
										
										
										
											2017-09-26 16:04:07 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	xcb_window_t win; | 
					
						
							|  |  |  | 	EGLSurface surf; | 
					
						
							| 
									
										
										
										
											2018-03-30 21:40:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct wl_event_source *frame_timer; | 
					
						
							|  |  |  | 	int frame_delay; | 
					
						
							| 
									
										
										
										
											2017-09-26 16:04:07 +13:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-22 14:58:41 +12:00
										 |  |  | struct wlr_x11_backend { | 
					
						
							|  |  |  | 	struct wlr_backend backend; | 
					
						
							| 
									
										
										
										
											2017-09-28 23:16:35 +13:00
										 |  |  | 	struct wl_display *wl_display; | 
					
						
							| 
									
										
										
										
											2018-03-30 22:09:06 -04:00
										 |  |  | 	bool started; | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Display *xlib_conn; | 
					
						
							|  |  |  | 	xcb_connection_t *xcb_conn; | 
					
						
							| 
									
										
										
										
											2017-09-26 15:16:25 +13:00
										 |  |  | 	xcb_screen_t *screen; | 
					
						
							| 
									
										
										
										
											2017-09-26 16:04:07 +13:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 21:40:43 -04:00
										 |  |  | 	size_t requested_outputs; | 
					
						
							|  |  |  | 	struct wl_list outputs; // wlr_x11_output::link
 | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-27 16:39:44 +13:00
										 |  |  | 	struct wlr_keyboard keyboard; | 
					
						
							|  |  |  | 	struct wlr_input_device keyboard_dev; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct wlr_pointer pointer; | 
					
						
							|  |  |  | 	struct wlr_input_device pointer_dev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | 	struct wlr_egl egl; | 
					
						
							| 
									
										
										
										
											2018-01-23 22:06:54 +01:00
										 |  |  | 	struct wlr_renderer *renderer; | 
					
						
							| 
									
										
										
										
											2017-09-22 16:00:27 +12:00
										 |  |  | 	struct wl_event_source *event_source; | 
					
						
							| 
									
										
										
										
											2017-09-28 23:16:35 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct { | 
					
						
							| 
									
										
										
										
											2018-03-06 19:57:39 +13:00
										 |  |  | 		xcb_atom_t wm_protocols; | 
					
						
							|  |  |  | 		xcb_atom_t wm_delete_window; | 
					
						
							|  |  |  | 		xcb_atom_t net_wm_name; | 
					
						
							|  |  |  | 		xcb_atom_t utf8_string; | 
					
						
							| 
									
										
										
										
											2017-09-28 23:16:35 +13:00
										 |  |  | 	} atoms; | 
					
						
							| 
									
										
										
										
											2017-09-29 16:31:04 +13:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// The time we last received an event
 | 
					
						
							|  |  |  | 	xcb_timestamp_t time; | 
					
						
							| 
									
										
										
										
											2017-12-07 23:44:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-28 00:26:15 -04:00
										 |  |  | #ifdef WLR_HAS_XCB_XKB
 | 
					
						
							|  |  |  | 	bool xkb_supported; | 
					
						
							|  |  |  | 	uint8_t xkb_base_event; | 
					
						
							|  |  |  | 	uint8_t xkb_base_error; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-07 23:44:59 +01:00
										 |  |  | 	struct wl_listener display_destroy; | 
					
						
							| 
									
										
										
										
											2017-09-22 14:58:41 +12:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-30 21:40:43 -04:00
										 |  |  | struct wlr_x11_output *x11_output_from_window_id(struct wlr_x11_backend *x11, | 
					
						
							|  |  |  | 	xcb_window_t window); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const struct wlr_input_device_impl input_device_impl; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool x11_handle_input_event(struct wlr_x11_backend *x11, | 
					
						
							|  |  |  | 	xcb_generic_event_t *event); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void x11_output_handle_configure_notify(struct wlr_x11_output *output, | 
					
						
							|  |  |  | 	xcb_configure_notify_event_t *event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-22 14:58:41 +12:00
										 |  |  | #endif
 |