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);