summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Ropé <jrope@redhat.com>2020-11-16 09:07:31 +0100
committerJulien Ropé <jrope@redhat.com>2020-11-19 15:39:32 +0100
commit21d355974f1be994d4b81933db0a7cb93433c1cf (patch)
tree72bb88081677b86b729061080fadb665204bc20b
parent9750013f0edeac9b8751ee07b8daaa02974912fa (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.c51
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:");