Blame SOURCES/0048-virt-viewer-window-Allow-to-resize-window-to-any-siz.patch

eec4b3
From 7ee5ad961df82103a2c0c97312573f4b4245226a Mon Sep 17 00:00:00 2001
eec4b3
From: Pavel Grunt <pgrunt@redhat.com>
eec4b3
Date: Tue, 14 Jul 2015 14:35:11 +0200
eec4b3
Subject: [PATCH] virt-viewer-window: Allow to resize window to any size
eec4b3
eec4b3
The function virt_viewer_window_resize restricts window to be bigger
eec4b3
than a client's screen. It avoids extending the window to more client's
eec4b3
screens, it causes changes of the zoom level if the guest does not fit
eec4b3
into a screen.
eec4b3
eec4b3
Lets remove virt_viewer_window_resize (its behaviour was introduced
eec4b3
by the commit 6acb3856b6d8007752388f22f97aa8aaffdb7a5e). It will let
eec4b3
the window managers to handle resizing of the window.
eec4b3
eec4b3
Resolves:
eec4b3
https://bugzilla.redhat.com/show_bug.cgi?id=1221501
eec4b3
https://bugzilla.redhat.com/show_bug.cgi?id=1205804
eec4b3
(cherry picked from commit 3cbb6232f33d0ecdc7f58e2ea8eb7830f9fe007f)
eec4b3
---
eec4b3
 src/virt-viewer-window.c | 79 ++----------------------------------------------
eec4b3
 1 file changed, 3 insertions(+), 76 deletions(-)
eec4b3
eec4b3
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
eec4b3
index 5aed50d..0879913 100644
eec4b3
--- a/src/virt-viewer-window.c
eec4b3
+++ b/src/virt-viewer-window.c
eec4b3
@@ -64,7 +64,7 @@ void virt_viewer_window_menu_view_release_cursor(GtkWidget *menu, VirtViewerWind
eec4b3
 /* Internal methods */
eec4b3
 static void virt_viewer_window_enable_modifiers(VirtViewerWindow *self);
eec4b3
 static void virt_viewer_window_disable_modifiers(VirtViewerWindow *self);
eec4b3
-static void virt_viewer_window_resize(VirtViewerWindow *self);
eec4b3
+static void virt_viewer_window_queue_resize(VirtViewerWindow *self);
eec4b3
 static void virt_viewer_window_toolbar_setup(VirtViewerWindow *self);
eec4b3
 static GtkMenu* virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self);
eec4b3
 static void virt_viewer_window_get_minimal_dimensions(VirtViewerWindow *self, guint *width, guint *height);
eec4b3
@@ -361,7 +361,7 @@ virt_viewer_window_desktop_resize(VirtViewerDisplay *display G_GNUC_UNUSED,
eec4b3
         self->priv->desktop_resize_pending = TRUE;
eec4b3
         return;
eec4b3
     }
eec4b3
-    virt_viewer_window_resize(self);
eec4b3
+    virt_viewer_window_queue_resize(self);
eec4b3
 }
eec4b3
 
eec4b3
 
eec4b3
@@ -402,79 +402,6 @@ virt_viewer_window_queue_resize(VirtViewerWindow *self)
eec4b3
 #endif
eec4b3
 }
eec4b3
 
eec4b3
-/*
eec4b3
- * This code attempts to resize the top level window to be large enough
eec4b3
- * to contain the entire display desktop at 1:1 ratio. If the local desktop
eec4b3
- * isn't large enough that it goes as large as possible and lets the display
eec4b3
- * scale down to fit, maintaining aspect ratio
eec4b3
- */
eec4b3
-static void
eec4b3
-virt_viewer_window_resize(VirtViewerWindow *self)
eec4b3
-{
eec4b3
-    GdkRectangle fullscreen;
eec4b3
-    GdkScreen *screen;
eec4b3
-    int width, height;
eec4b3
-    double desktopAspect;
eec4b3
-    double screenAspect;
eec4b3
-    guint desktopWidth, display_width;
eec4b3
-    guint desktopHeight, display_height;
eec4b3
-    VirtViewerWindowPrivate *priv = self->priv;
eec4b3
-
eec4b3
-    if (priv->fullscreen)
eec4b3
-        return;
eec4b3
-
eec4b3
-    g_debug("Preparing main window resize");
eec4b3
-    if (!priv->display) {
eec4b3
-        g_debug("Skipping inactive resize");
eec4b3
-        return;
eec4b3
-    }
eec4b3
-
eec4b3
-    virt_viewer_display_get_desktop_size(VIRT_VIEWER_DISPLAY(priv->display),
eec4b3
-                                         &desktopWidth, &desktopHeight);
eec4b3
-
eec4b3
-    screen = gtk_widget_get_screen(priv->window);
eec4b3
-    gdk_screen_get_monitor_geometry(screen,
eec4b3
-                                    gdk_screen_get_monitor_at_window
eec4b3
-                                    (screen, gtk_widget_get_window(priv->window)),
eec4b3
-                                    &fullscreen);
eec4b3
-
eec4b3
-    g_return_if_fail(desktopWidth > 0);
eec4b3
-    g_return_if_fail(desktopHeight > 0);
eec4b3
-
eec4b3
-    desktopAspect = (double)desktopWidth / (double)desktopHeight;
eec4b3
-    screenAspect = (double)fullscreen.width / (double)fullscreen.height;
eec4b3
-
eec4b3
-    display_width = desktopWidth * priv->zoomlevel / (double) NORMAL_ZOOM_LEVEL;
eec4b3
-    display_height = desktopHeight * priv->zoomlevel / (double) NORMAL_ZOOM_LEVEL;
eec4b3
-
eec4b3
-    if ((display_width > fullscreen.width) ||
eec4b3
-        (display_height > fullscreen.height)) {
eec4b3
-        /* Doesn't fit native res, so go as large as possible
eec4b3
-           maintaining aspect ratio */
eec4b3
-        if (screenAspect > desktopAspect) {
eec4b3
-            width = fullscreen.height * desktopAspect;
eec4b3
-            height = fullscreen.height;
eec4b3
-        } else {
eec4b3
-            width = fullscreen.width;
eec4b3
-            height = fullscreen.width / desktopAspect;
eec4b3
-        }
eec4b3
-        width *= (double) NORMAL_ZOOM_LEVEL / priv->zoomlevel;
eec4b3
-        height *= (double) NORMAL_ZOOM_LEVEL / priv->zoomlevel;
eec4b3
-    } else {
eec4b3
-        width = desktopWidth;
eec4b3
-        height = desktopHeight;
eec4b3
-    }
eec4b3
-
eec4b3
-    g_debug("Decided todo %dx%d (desktop is %dx%d, fullscreen is %dx%d",
eec4b3
-              width, height, desktopWidth, desktopHeight,
eec4b3
-              fullscreen.width, fullscreen.height);
eec4b3
-
eec4b3
-    virt_viewer_display_set_desktop_size(VIRT_VIEWER_DISPLAY(priv->display),
eec4b3
-                                         width, height);
eec4b3
-
eec4b3
-    virt_viewer_window_queue_resize(self);
eec4b3
-}
eec4b3
-
eec4b3
 static void
eec4b3
 virt_viewer_window_move_to_monitor(VirtViewerWindow *self)
eec4b3
 {
eec4b3
@@ -1370,7 +1297,7 @@ virt_viewer_window_show(VirtViewerWindow *self)
eec4b3
     gtk_widget_show(self->priv->window);
eec4b3
 
eec4b3
     if (self->priv->desktop_resize_pending) {
eec4b3
-        virt_viewer_window_resize(self);
eec4b3
+        virt_viewer_window_queue_resize(self);
eec4b3
         self->priv->desktop_resize_pending = FALSE;
eec4b3
     }
eec4b3