[virt-tools-list] [PATCH virt-viewer 2/6] Only fullscreen the new window

Marc-André Lureau marcandre.lureau at gmail.com
Thu May 16 19:33:18 UTC 2013


From: Marc-André Lureau <marcandre.lureau at redhat.com>

The current code will forcefully reset fullscreen all windows
when a new window is created
---
 src/virt-viewer-app.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 853615e..62e3603 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -632,6 +632,24 @@ viewer_window_focus_out_cb(GtkWindow *window G_GNUC_UNUSED,
     return FALSE;
 }
 
+static void
+app_window_try_fullscreen(VirtViewerApp *self, VirtViewerWindow *win, gint nth)
+{
+    GdkScreen *screen = gdk_screen_get_default();
+    gboolean move =
+        virt_viewer_app_get_n_windows_visible(self) > 1 ||
+        self->priv->fullscreen_auto_conf;
+
+    if (!move)
+        nth = -1;
+    else if (nth >= gdk_screen_get_n_monitors(screen)) {
+        DEBUG_LOG("skipping display %d", nth);
+        return;
+    }
+
+    virt_viewer_window_enter_fullscreen(win, nth);
+}
+
 static VirtViewerWindow*
 virt_viewer_app_window_new(VirtViewerApp *self, GtkWidget *container, gint nth)
 {
@@ -645,10 +663,9 @@ virt_viewer_app_window_new(VirtViewerApp *self, GtkWidget *container, gint nth)
     if (self->priv->main_window)
         virt_viewer_window_set_zoom_level(window, virt_viewer_window_get_zoom_level(self->priv->main_window));
     virt_viewer_app_set_nth_window(self, nth, window);
-    w = virt_viewer_window_get_window(window);
+    app_window_try_fullscreen(self, window, nth);
 
-    /* this will set new window to fullscreen if necessary */
-    virt_viewer_app_set_fullscreen(self, self->priv->fullscreen);
+    w = virt_viewer_window_get_window(window);
     g_signal_connect(w, "hide", G_CALLBACK(viewer_window_visible_cb), self);
     g_signal_connect(w, "show", G_CALLBACK(viewer_window_visible_cb), self);
     g_signal_connect(w, "focus-in-event", G_CALLBACK(viewer_window_focus_in_cb), self);
@@ -1688,8 +1705,8 @@ virt_viewer_app_update_pretty_address(VirtViewerApp *self)
 }
 
 typedef struct {
+    VirtViewerApp *app;
     gboolean fullscreen;
-    gboolean move;
 } FullscreenOptions;
 
 static void fullscreen_cb(gpointer key,
@@ -1701,15 +1718,9 @@ static void fullscreen_cb(gpointer key,
     VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(value);
 
     DEBUG_LOG("fullscreen display %d: %d", nth, options->fullscreen);
-    if (options->fullscreen) {
-        GdkScreen *screen = gdk_screen_get_default();
-
-        if (nth >= gdk_screen_get_n_monitors(screen)) {
-            DEBUG_LOG("skipping display %d", nth);
-            return;
-        }
-        virt_viewer_window_enter_fullscreen(vwin, options->move ? nth : -1);
-    } else
+    if (options->fullscreen)
+        app_window_try_fullscreen(options->app, vwin, nth);
+    else
         virt_viewer_window_leave_fullscreen(vwin);
 }
 
@@ -1734,8 +1745,8 @@ virt_viewer_app_set_fullscreen(VirtViewerApp *self, gboolean fullscreen)
 {
     VirtViewerAppPrivate *priv = self->priv;
     FullscreenOptions options  = {
+        .app = self,
         .fullscreen = fullscreen,
-        .move = virt_viewer_app_get_n_windows_visible(self) > 1 || self->priv->fullscreen_auto_conf,
     };
 
     /* we iterate unconditionnaly, even if it was set before to update new windows */
-- 
1.8.3.rc1.49.g8d97506




More information about the virt-tools-list mailing list