backend/x11: refactor, prepare support for multiple outputs

This commit is contained in:
emersion 2018-03-30 21:40:43 -04:00
parent f133170ff0
commit d4f7ced6e2
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
5 changed files with 365 additions and 257 deletions

View file

@ -6,15 +6,23 @@
#include <wlr/render/egl.h>
#include <X11/Xlib-xcb.h>
#include <xcb/xcb.h>
#include <wlr/interfaces/wlr_input_device.h>
#include <wlr/interfaces/wlr_output.h>
#define XCB_EVENT_RESPONSE_TYPE_MASK 0x7f
struct wlr_x11_backend;
struct wlr_x11_output {
struct wlr_output wlr_output;
struct wlr_x11_backend *x11;
struct wl_list link; // wlr_x11_backend::outputs
xcb_window_t win;
EGLSurface surf;
struct wl_event_source *frame_timer;
int frame_delay;
};
struct wlr_x11_backend {
@ -25,7 +33,8 @@ struct wlr_x11_backend {
xcb_connection_t *xcb_conn;
xcb_screen_t *screen;
struct wlr_x11_output output;
size_t requested_outputs;
struct wl_list outputs; // wlr_x11_output::link
struct wlr_keyboard keyboard;
struct wlr_input_device keyboard_dev;
@ -36,7 +45,6 @@ struct wlr_x11_backend {
struct wlr_egl egl;
struct wlr_renderer *renderer;
struct wl_event_source *event_source;
struct wl_event_source *frame_timer;
struct {
xcb_atom_t wm_protocols;
@ -57,4 +65,16 @@ struct wlr_x11_backend {
struct wl_listener display_destroy;
};
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);
struct wlr_x11_output *x11_output_create(struct wlr_x11_backend *x11);
void x11_output_handle_configure_notify(struct wlr_x11_output *output,
xcb_configure_notify_event_t *event);
#endif