diff options
author | Julien Ropé <jrope@redhat.com> | 2020-11-16 09:07:31 +0100 |
---|---|---|
committer | Julien Ropé <jrope@redhat.com> | 2020-11-19 15:39:32 +0100 |
commit | 21d355974f1be994d4b81933db0a7cb93433c1cf (patch) | |
tree | 72bb88081677b86b729061080fadb665204bc20b | |
parent | 9750013f0edeac9b8751ee07b8daaa02974912fa (diff) |
Move some reusable code at a higher level.
Adding disabled displays to the list is something that we will need to
do
with multiple backends, not just GTK.
Signed-off-by: Julien Ropé <jrope@redhat.com>
Acked-by: Jakub Janků <jjanku@redhat.com>
-rw-r--r-- | src/vdagent/display.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/src/vdagent/display.c b/src/vdagent/display.c index fc0e6dc..9569173 100644 --- a/src/vdagent/display.c +++ b/src/vdagent/display.c @@ -61,7 +61,6 @@ struct VDAgentDisplay { GIOChannel *x11_channel; }; -#ifdef USE_GTK_FOR_MONITORS static gint vdagent_guest_xorg_resolution_compare(gconstpointer a, gconstpointer b) { struct vdagentd_guest_xorg_resolution *ptr_a, *ptr_b; @@ -71,7 +70,6 @@ static gint vdagent_guest_xorg_resolution_compare(gconstpointer a, gconstpointer return ptr_a->display_id - ptr_b->display_id; } -#endif static GArray *vdagent_gtk_get_resolutions(VDAgentDisplay *display, int *width, int *height, int *screen_count) @@ -152,6 +150,30 @@ static GArray *vdagent_gtk_get_resolutions(VDAgentDisplay *display, } } + return res_array; +#else + return NULL; +#endif +} + +void vdagent_display_send_daemon_guest_res(VDAgentDisplay *display, gboolean update) +{ + GArray *res_array; + int width = 0, height = 0, screen_count = 0; + + res_array = vdagent_gtk_get_resolutions(display, &width, &height, &screen_count); + if (res_array == NULL) { + if (display->x11->dont_send_guest_xorg_res) { + return; + } + + res_array = vdagent_x11_get_resolutions(display->x11, update, + &width, &height, &screen_count); + if (res_array == NULL) { + return; + } + } + if (res_array->len < g_hash_table_size(display->connector_mapping)) { // Complete the array with disabled displays. // We need to send 0x0 resolution to let the daemon know the display is not there anymore. @@ -165,7 +187,7 @@ static GArray *vdagent_gtk_get_resolutions(VDAgentDisplay *display, while (g_hash_table_iter_next(&iter, &key, &value)) { bool found = false; int display_id = GPOINTER_TO_INT(value); - for (i = 0; i < res_array->len; i++) { + for (int i = 0; i < res_array->len; i++) { struct vdagentd_guest_xorg_resolution *res = (struct vdagentd_guest_xorg_resolution*)res_array->data; if (res[i].display_id == display_id) { @@ -189,29 +211,6 @@ static GArray *vdagent_gtk_get_resolutions(VDAgentDisplay *display, // sort the list to make sure we send them in the display_id order g_array_sort(res_array, vdagent_guest_xorg_resolution_compare); - return res_array; -#else - return NULL; -#endif -} - -void vdagent_display_send_daemon_guest_res(VDAgentDisplay *display, gboolean update) -{ - GArray *res_array; - int width = 0, height = 0, screen_count = 0; - - res_array = vdagent_gtk_get_resolutions(display, &width, &height, &screen_count); - if (res_array == NULL) { - if (display->x11->dont_send_guest_xorg_res) { - return; - } - - res_array = vdagent_x11_get_resolutions(display->x11, update, - &width, &height, &screen_count); - if (res_array == NULL) { - return; - } - } if (display->debug) { syslog(LOG_DEBUG, "Sending guest screen resolutions to vdagentd:"); |