downstream: Hack to allow selecting a default output
authorRafael Antognolli <rafael.antognolli@intel.com>
Thu, 25 Sep 2014 01:57:09 +0000 (03:57 +0200)
committerManuel Bachmann <manuel.bachmann@open.eurogiciel.org>
Thu, 25 Sep 2014 01:58:06 +0000 (03:58 +0200)
This code originally by Rafael Antognolli <rafael.antognolli@intel.com>
was commited by Stephane Desneux <stephane.desneux@open.eurogiciel.org>
as a packaging patch.

Change-Id: I9c8a452b0bd9369217578fdf6cf43d86e11f45c6
Signed-off-by: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
desktop-shell/shell.c
src/compositor-drm.c
src/compositor-x11.c
src/compositor.h

index 3a5a702..8f7457f 100644 (file)
@@ -630,6 +630,9 @@ shell_configuration(struct desktop_shell *shell)
 struct weston_output *
 get_default_output(struct weston_compositor *compositor)
 {
+       if (compositor->default_output)
+               return compositor->default_output;
+
        return container_of(compositor->output_list.next,
                            struct weston_output, link);
 }
index e4496e7..1121923 100644 (file)
@@ -1933,6 +1933,7 @@ create_output_for_connector(struct drm_compositor *ec,
        const char *type_name;
        enum output_config config;
        uint32_t transform;
+       int default_output;
 
        i = find_crtc_for_connector(ec, resources, connector);
        if (i < 0) {
@@ -1981,6 +1982,8 @@ create_output_for_connector(struct drm_compositor *ec,
        weston_config_section_get_string(section, "transform", &s, "normal");
        transform = parse_transform(s, output->base.name);
        free(s);
+       weston_config_section_get_int(section, "default_output",
+                                     &default_output, 0);
 
        if (get_gbm_format_from_section(section,
                                        ec->format,
@@ -2103,6 +2106,8 @@ create_output_for_connector(struct drm_compositor *ec,
        }
 
        wl_list_insert(ec->base.output_list.prev, &output->base.link);
+       if (default_output)
+               ec->base.default_output = &output->base;
 
        find_and_parse_output_edid(ec, output, connector);
        if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
index b602bc9..d754cb3 100644 (file)
@@ -751,7 +751,8 @@ static struct x11_output *
 x11_compositor_create_output(struct x11_compositor *c, int x, int y,
                             int width, int height, int fullscreen,
                             int no_input, char *configured_name,
-                            uint32_t transform, int32_t scale)
+                            uint32_t transform, int32_t scale,
+                            int default_output)
 {
        static const char name[] = "Weston Compositor";
        static const char class[] = "weston-1\0Weston Compositor";
@@ -905,6 +906,8 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y,
                wl_event_loop_add_timer(loop, finish_frame_handler, output);
 
        wl_list_insert(c->base.output_list.prev, &output->base.link);
+       if (default_output)
+               c->base.default_output = &output->base;
 
        weston_log("x11 output %dx%d, window id %d\n",
                   width, height, output->window);
@@ -1488,6 +1491,7 @@ x11_compositor_create(struct wl_display *display,
        const char *section_name;
        char *name, *t, *mode;
        uint32_t transform;
+       int default_output;
 
        weston_log("initializing x11 backend\n");
 
@@ -1578,10 +1582,14 @@ x11_compositor_create(struct wl_display *display,
                transform = parse_transform(t, name);
                free(t);
 
+               weston_config_section_get_int(section, "default_output",
+                                             &default_output, 0);
+
                output = x11_compositor_create_output(c, x, 0,
                                                      width, height,
                                                      fullscreen, no_input,
-                                                     name, transform, scale);
+                                                     name, transform, scale,
+                                                     default_output);
                free(name);
                if (output == NULL)
                        goto err_x11_input;
@@ -1596,7 +1604,8 @@ x11_compositor_create(struct wl_display *display,
        for (i = output_count; i < count; i++) {
                output = x11_compositor_create_output(c, x, 0, width, height,
                                                      fullscreen, no_input, NULL,
-                                                     WL_OUTPUT_TRANSFORM_NORMAL, scale);
+                                                     WL_OUTPUT_TRANSFORM_NORMAL, scale,
+                                                     default_output);
                if (output == NULL)
                        goto err_x11_input;
                x = pixman_region32_extents(&output->base.region)->x2;
index 9611dea..ec9b9e5 100644 (file)
@@ -203,6 +203,7 @@ struct weston_output {
        int move_x, move_y;
        uint32_t frame_time;
        int disable_planes;
+       uint32_t default_output;
        int destroying;
 
        char *make, *model, *serial_number;
@@ -631,6 +632,8 @@ struct weston_compositor {
        struct wl_list axis_binding_list;
        struct wl_list debug_binding_list;
 
+       struct weston_output *default_output;
+
        uint32_t state;
        struct wl_event_source *idle_source;
        uint32_t idle_inhibit;