redirect rendering and get the composite overlay window
[dana/dcompmgr.git] / dcompmgr.c
index 542f1ad..2c1c50c 100644 (file)
@@ -13,41 +13,6 @@ typedef struct {
     int foo;
 } d_options_t;
 
-static gint
-all_screens(d_display_t *dpy, d_screen_t **list)
-{
-    static const xcb_setup_t *setup;
-    xcb_screen_iterator_t it;
-    int count, i;
-    d_screen_t sc;
-
-    setup = xcb_get_setup(dpy->conn);
-
-    count = i = 0;
-    for (it = xcb_setup_roots_iterator(setup); it.rem; xcb_screen_next(&it)) {
-        sc.super = *it.data;
-        sc.dpy = dpy;
-        sc.num = i++;
-        if (screen_register(&sc)) {
-            ++count;
-            *list = realloc(*list, sizeof(d_screen_t)*count);
-            (*list)[count-1] = sc;
-            printf(_("managing screen %d\n"), sc.num);
-        }
-    }
-    return count;
-}
-
-static d_screen_t*
-screen_from_root(d_screen_t *list, int n, xcb_window_t root)
-{
-    int i;
-    for (i = 0; i < n; ++i)
-        if (list->super.root == root) return &list[i];
-    g_assert_not_reached();
-    return NULL;
-}
-
 static
 void read_options(int argc, char **argv, d_options_t *opts)
 {
@@ -58,8 +23,6 @@ int
 main(int argc, char **argv)
 {
     d_display_t         *dpy;
-    d_screen_t          *screens = NULL;
-    int                  nscreens;
     xcb_generic_event_t *ev;
     d_options_t          opts;
 
@@ -98,8 +61,7 @@ main(int argc, char **argv)
         return 1;
     }
 
-    nscreens = all_screens(dpy, &screens);
-    if (nscreens < 1) {
+    if (!display_claim_screens(dpy)) {
         printf(_("found no screens to run on\n"));
         display_unref(dpy);
         return 0;
@@ -121,7 +83,7 @@ main(int argc, char **argv)
             d_screen_t *sc;
 
             cev = (xcb_create_notify_event_t*)ev;
-            sc = screen_from_root(screens, nscreens, cev->parent);
+            sc = display_screen_from_root(dpy, cev->parent);
             if (!sc) break;
             screen_add_window(sc, cev->window);
             break;
@@ -133,7 +95,7 @@ main(int argc, char **argv)
             d_window_t *w;
 
             dev = (xcb_destroy_notify_event_t*)ev;
-            sc = screen_from_root(screens, nscreens, dev->event);
+            sc = display_screen_from_root(dpy, dev->event);
             if (!sc) break;
             w = screen_find_window(sc, dev->window);
             w->hide(w);
@@ -147,7 +109,7 @@ main(int argc, char **argv)
             d_window_t *w;
 
             rev = (xcb_reparent_notify_event_t*)ev;
-            sc = screen_from_root(screens, nscreens, rev->event);
+            sc = display_screen_from_root(dpy, rev->event);
             if (!sc) break;
             w = screen_find_window(sc, rev->window);
             if (rev->parent == sc->super.root)
@@ -165,7 +127,7 @@ main(int argc, char **argv)
             d_window_t *w;
 
             mev = (xcb_map_notify_event_t*)ev;
-            sc = screen_from_root(screens, nscreens, mev->event);
+            sc = display_screen_from_root(dpy, mev->event);
             if (!sc) break;
             w = screen_find_window(sc, mev->window);
             window_show(w);
@@ -178,7 +140,7 @@ main(int argc, char **argv)
             d_window_t *w;
 
             mev = (xcb_unmap_notify_event_t*)ev;
-            sc = screen_from_root(screens, nscreens, mev->event);
+            sc = display_screen_from_root(dpy, mev->event);
             if (!sc) break;
             w = screen_find_window(sc, mev->window);
             window_hide(w);