diff options
Diffstat (limited to 'src/virt-viewer-session.c')
-rw-r--r-- | src/virt-viewer-session.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c index 9405281..2699f41 100644 --- a/src/virt-viewer-session.c +++ b/src/virt-viewer-session.c @@ -404,49 +404,35 @@ virt_viewer_session_on_monitor_geometry_changed(VirtViewerSession* self, { VirtViewerSessionClass *klass; gboolean all_fullscreen = TRUE; - guint nmonitors = 0; - GdkRectangle *monitors = NULL; + /* GHashTable<gint, GdkRectangle*> */ + GHashTable *monitors = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free); GList *l; klass = VIRT_VIEWER_SESSION_GET_CLASS(self); if (!klass->apply_monitor_geometry) return; - /* find highest monitor ID so we can create the sparse array */ for (l = self->priv->displays; l; l = l->next) { VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data); guint nth = 0; - g_object_get(d, "nth-display", &nth, NULL); - - nmonitors = MAX(nth + 1, nmonitors); - } - - if (nmonitors == 0) - return; - - monitors = g_new0(GdkRectangle, nmonitors); - for (l = self->priv->displays; l; l = l->next) { - VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data); - guint nth = 0; - GdkRectangle *rect = NULL; + GdkRectangle *rect = g_new0(GdkRectangle, 1); g_object_get(d, "nth-display", &nth, NULL); - g_return_if_fail(nth < nmonitors); - rect = &monitors[nth]; virt_viewer_display_get_preferred_monitor_geometry(d, rect); if (virt_viewer_display_get_enabled(d) && !virt_viewer_display_get_fullscreen(d)) all_fullscreen = FALSE; + g_hash_table_insert(monitors, GINT_TO_POINTER(nth), rect); } if (!all_fullscreen) - virt_viewer_align_monitors_linear(monitors, nmonitors); + virt_viewer_align_monitors_linear(monitors); - virt_viewer_shift_monitors_to_origin(monitors, nmonitors); + virt_viewer_shift_monitors_to_origin(monitors); - klass->apply_monitor_geometry(self, monitors, nmonitors); - g_free(monitors); + klass->apply_monitor_geometry(self, monitors); + g_hash_table_unref(monitors); } void virt_viewer_session_add_display(VirtViewerSession *session, |