commit 79b3408

Michael Forney  ·  2013-06-14 11:29:08 +0000 UTC
parent 61cf1ee
Add page flip handler
1 files changed,  +18, -5
+18, -5
 1@@ -29,9 +29,6 @@ static void repaint_output(void * data)
 2 
 3     swc_output_switch_buffer(operation->output);
 4 
 5-    /* XXX: should go in page flip handler */
 6-    operation->output->repaint_scheduled = false;
 7-
 8     free(operation);
 9 }
10 
11@@ -157,8 +154,22 @@ static void handle_surface_event(struct wl_listener * listener, void * data)
12 static void handle_drm_event(struct wl_listener * listener, void * data)
13 {
14     struct swc_event * event = data;
15-    struct swc_compositor * compositor = wl_container_of(listener, compositor,
16-                                                         drm_listener);
17+    struct swc_compositor * compositor;
18+
19+    compositor = wl_container_of(listener, compositor, drm_listener);
20+
21+    switch (event->type)
22+    {
23+        case SWC_DRM_PAGE_FLIP:
24+        {
25+            struct swc_output * output = event->data;
26+
27+            output->repaint_scheduled = false;
28+            output->front_buffer ^= 1;
29+
30+            break;
31+        }
32+    }
33 }
34 
35 static void handle_surface_destroy(struct wl_listener * listener, void * data)
36@@ -266,6 +277,7 @@ bool swc_compositor_initialize(struct swc_compositor * compositor,
37 
38     compositor->display = display;
39     compositor->tty_listener.notify = &handle_tty_event;
40+    compositor->drm_listener.notify = &handle_drm_event;
41 
42     compositor->udev = udev_new();
43 
44@@ -303,6 +315,7 @@ bool swc_compositor_initialize(struct swc_compositor * compositor,
45         goto error_seat;
46     }
47 
48+    wl_signal_add(&compositor->drm.event_signal, &compositor->drm_listener);
49     swc_drm_add_event_sources(&compositor->drm, event_loop);
50 
51     compositor->gbm = gbm_create_device(compositor->drm.fd);