compositor: Add a switch_mode hook and a wrapper into the output.
authorAlex Wu <zhiwen.wu@linux.intel.com>
Tue, 17 Apr 2012 09:20:47 +0000 (17:20 +0800)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 17 Apr 2012 18:38:29 +0000 (14:38 -0400)
This allow each output backend to switch the display mode. It is
useful to some applications like fullscreen game, xbmc.

src/compositor-drm.c
src/compositor-openwfd.c
src/compositor-wayland.c
src/compositor-x11.c
src/compositor.c
src/compositor.h

index d2a2ea1..0121100 100644 (file)
@@ -1166,6 +1166,7 @@ create_output_for_connector(struct drm_compositor *ec,
        output->base.assign_planes = drm_assign_planes;
        output->base.read_pixels = drm_output_read_pixels;
        output->base.set_dpms = drm_set_dpms;
+       output->base.switch_mode = NULL;
 
        return 0;
 
index 2dba07d..bbf1067 100644 (file)
@@ -409,6 +409,7 @@ create_output_for_port(struct wfd_compositor *ec,
        output->base.assign_planes = NULL;
        output->base.set_backlight = NULL;
        output->base.set_dpms = NULL;
+       output->base.switch_mode = NULL;
 
        wl_list_insert(ec->base.output_list.prev, &output->base.link);
 
index c9d599d..93094b0 100644 (file)
@@ -462,6 +462,7 @@ wayland_compositor_create_output(struct wayland_compositor *c,
        output->base.read_pixels = wayland_output_read_pixels;
        output->base.set_backlight = NULL;
        output->base.set_dpms = NULL;
+       output->base.switch_mode = NULL;
 
        wl_list_insert(c->base.output_list.prev, &output->base.link);
 
index 4361a01..87ab5dd 100644 (file)
@@ -472,6 +472,7 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y,
        output->base.read_pixels = x11_output_read_pixels;
        output->base.set_backlight = NULL;
        output->base.set_dpms = NULL;
+       output->base.switch_mode = NULL;
 
        wl_list_insert(c->base.output_list.prev, &output->base.link);
 
index 17daac4..9b7badf 100644 (file)
@@ -79,6 +79,15 @@ sigchld_handler(int signal_number, void *data)
        return 1;
 }
 
+WL_EXPORT int
+weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode)
+{
+       if (!output->switch_mode)
+               return -1;
+
+       return output->switch_mode(output, mode);
+}
+
 WL_EXPORT void
 weston_watch_process(struct weston_process *process)
 {
index 93284c5..f21f769 100644 (file)
@@ -99,6 +99,7 @@ struct weston_output {
        void (*destroy)(struct weston_output *output);
        void (*assign_planes)(struct weston_output *output);
        void (*read_pixels)(struct weston_output *output, void *data);
+       int (*switch_mode)(struct weston_output *output, struct weston_mode *mode);
 
        /* backlight values are on 0-255 range, where higher is brighter */
        uint32_t backlight_current;
@@ -563,4 +564,7 @@ weston_surface_destroy(struct weston_surface *surface);
 struct weston_compositor *
 backend_init(struct wl_display *display, int argc, char *argv[]);
 
+int
+weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode);
+
 #endif