File eea9b276-fix-resize-to-vm-action.patch of Package virt-manager.12547
References: bsc#955924
Subject: console: Fix and simplify 'Resize to VM' action
From: Cole Robinson crobinso@redhat.com Thu May 19 18:27:35 2016 -0400
Date: Fri May 20 11:44:18 2016 -0400:
Git: eea9b27696768fdde892259168e39b7a3f50738c
We need to resize the window and not try to play crazy games with
the scroll window size. Wish I realized this years ago...
Index: virt-manager-1.2.1/virtManager/console.py
===================================================================
--- virt-manager-1.2.1.orig/virtManager/console.py
+++ virt-manager-1.2.1/virtManager/console.py
@@ -50,7 +50,6 @@ class vmmConsolePages(vmmGObjectUI):
self._pointer_is_grabbed = False
self._change_title()
self.vm.connect("state-changed", self._change_title)
- self._force_resize = False
# State for disabling modifiers when keyboard is grabbed
self._accel_groups = Gtk.accel_groups_from_object(self.topwin)
@@ -282,8 +281,9 @@ class vmmConsolePages(vmmGObjectUI):
###########################
def _scroll_size_allocate(self, src_ignore, req):
- if (not self._viewer or
- not self._viewer.console_get_desktop_resolution()):
+ if not self._viewer:
+ return
+ if not self._viewer.console_get_desktop_resolution():
return
scroll = self.widget("console-gfx-scroll")
@@ -296,27 +296,24 @@ class vmmConsolePages(vmmGObjectUI):
# pylint: disable=unpacking-non-sequence
desktop_w, desktop_h = self._viewer.console_get_desktop_resolution()
- if desktop_h == 0:
- return
desktop_ratio = float(desktop_w) / float(desktop_h)
- if is_scale or self._force_resize:
+ if is_scale:
# Make sure we never show scrollbars when scaling
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
else:
scroll.set_policy(Gtk.PolicyType.AUTOMATIC,
Gtk.PolicyType.AUTOMATIC)
- if not self._force_resize and is_resizeguest:
+ if is_resizeguest:
# With resize guest, we don't want to maintain aspect ratio,
# since the guest can resize to arbitrary resolutions.
self._viewer.console_set_size_request(req.width, req.height)
return
- if not is_scale or self._force_resize:
+ if not is_scale:
# Scaling disabled is easy, just force the VNC widget size. Since
# we are inside a scrollwindow, it shouldn't cause issues.
- self._force_resize = False
self._viewer.console_set_size_request(desktop_w, desktop_h)
return
@@ -383,10 +380,14 @@ class vmmConsolePages(vmmGObjectUI):
if not self._viewer.console_get_desktop_resolution():
return
+ topwin_alloc = self.topwin.get_allocation()
+ viewer_alloc = self.widget("console-gfx-scroll").get_allocation()
+ desktop_w, desktop_h = self._viewer.console_get_desktop_resolution()
+
self.topwin.unmaximize()
- self.topwin.resize(1, 1)
- self._force_resize = True
- self.widget("console-gfx-scroll").queue_resize()
+ self.topwin.resize(
+ desktop_w + (topwin_alloc.width - viewer_alloc.width),
+ desktop_h + (topwin_alloc.height - viewer_alloc.height))
################
Index: virt-manager-1.2.1/virtManager/viewers.py
===================================================================
--- virt-manager-1.2.1.orig/virtManager/viewers.py
+++ virt-manager-1.2.1/virtManager/viewers.py
@@ -229,7 +229,14 @@ class Viewer(vmmGObject):
return self._get_grab_keys()
def console_get_desktop_resolution(self):
- return self._get_desktop_resolution()
+ ret = self._get_desktop_resolution()
+ if not ret:
+ return ret
+
+ # Don't pass on bogus resolutions
+ if (ret[0] == 0) or (ret[1] == 0):
+ return None
+ return ret
def console_get_scaling(self):
return self._get_scaling()