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)
committerBoram Park <boram1288.park@samsung.com>
Fri, 6 Nov 2015 02:47:14 +0000 (11:47 +0900)
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 fe620cb8f231bef184f1894178d09ffff479f80b..50f9092e2a440ffe346ffe0fc5b442c7b81ad45c 100644 (file)
@@ -662,6 +662,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 bf921beedbf268fa27c69b910aff58839d81a660..90378e7cdadb6c96d75b97e9b802a42e14945246 100644 (file)
@@ -1991,6 +1991,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) {
@@ -2042,6 +2043,8 @@ create_output_for_connector(struct drm_compositor *ec,
                           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,
@@ -2164,6 +2167,8 @@ create_output_for_connector(struct drm_compositor *ec,
        }
 
        weston_compositor_add_output(&ec->base, &output->base);
+       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 356567775883ccf298ff8dfd83762025817fbf5c..f134ac7f895659a529cfef75cc7274cb58e6784a 100644 (file)
@@ -757,7 +757,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";
@@ -917,6 +918,8 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y,
                wl_event_loop_add_timer(loop, finish_frame_handler, output);
 
        weston_compositor_add_output(&c->base, &output->base);
+       if (default_output)
+               c->base.default_output = &output->base;
 
        weston_log("x11 output %dx%d, window id %d\n",
                   width, height, output->window);
@@ -1515,6 +1518,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");
 
@@ -1610,10 +1614,14 @@ x11_compositor_create(struct wl_display *display,
                                   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;
@@ -1628,7 +1636,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 867f8c461d09a2b15d474bdc7bc5c7c33fcd8c8f..451ca5d90539d883bfe31f6f26d2d48dc0cead75 100644 (file)
@@ -208,6 +208,7 @@ struct weston_output {
        uint32_t frame_time; /* presentation timestamp in milliseconds */
        uint64_t msc;        /* media stream counter */
        int disable_planes;
+       uint32_t default_output;
        int destroying;
        struct wl_list feedback_list;
 
@@ -656,6 +657,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;