use select to tell when there are events to read
[dana/dcompmgr.git] / display.h
index 282c480..ab40200 100644 (file)
--- a/display.h
+++ b/display.h
@@ -5,29 +5,51 @@
 
 #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);
@@ -35,6 +57,11 @@ 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