#include <glib.h>
+typedef struct d_display_ext {
+ gboolean present;
+ int error;
+ int event;
+ int opcode;
+ int major_version;
+ int minor_version;
+} d_display_ext_t;
+
typedef struct d_display {
xcb_connection_t *conn;
int ref;
+ int fd;
+ struct d_screen *screens;
+ int nscreens;
+
+ d_display_ext_t xfixes;
+ d_display_ext_t render;
+ d_display_ext_t composite;
+ d_display_ext_t damage;
- gboolean xfixes;
- int xfixes_error;
- int xfixes_event;
- int xfixes_opcode;
-
- gboolean render;
- int render_error;
- int render_event;
- int render_opcode;
-
- gboolean composite;
- int composite_error;
- int composite_event;
- int composite_opcode;
-
- gboolean damage;
- int damage_error;
- int damage_event;
- int damage_opcode;
+ struct {
+ /* types */
+ xcb_atom_t atom;
+ xcb_atom_t cardinal;
+ xcb_atom_t utf8_string;
+ xcb_atom_t string;
+ xcb_atom_t pixmap;
+ /* properties */
+ xcb_atom_t net_wm_window_type;
+ xcb_atom_t net_wm_window_type_desktop;
+ xcb_atom_t net_wm_window_type_dock;
+ xcb_atom_t net_wm_window_type_normal;
+ xcb_atom_t net_wm_window_type_dialog;
+ xcb_atom_t net_wm_window_type_toolbar;
+ xcb_atom_t net_wm_window_type_menu;
+ xcb_atom_t net_wm_window_type_utility;
+ xcb_atom_t net_wm_window_type_splash;
+ xcb_atom_t net_wm_window_type_dropdown_menu;
+ xcb_atom_t net_wm_window_type_popup_menu;
+ xcb_atom_t net_wm_window_type_tooltip;
+ xcb_atom_t net_wm_window_type_notification;
+ xcb_atom_t net_wm_window_type_combo;
+ xcb_atom_t net_wm_window_type_dnd;
+ } a;
} d_display_t;
d_display_t* display_open(const char *name);
void display_ref(d_display_t *dpy);
void display_unref(d_display_t *dpy);
+int display_claim_screens(d_display_t *dpy);
+
+struct d_screen* display_screen_from_root(d_display_t *dpy, xcb_window_t root);
+struct d_screen* display_screen_n(d_display_t *dpy, int n);
+
void display_error(d_display_t *dpy, xcb_generic_error_t *ev);
#endif