mirror of
https://src.fedoraproject.org/rpms/virt-manager.git
synced 2025-07-16 01:03:36 +00:00
175 lines
6.6 KiB
Diff
175 lines
6.6 KiB
Diff
From 6d64a5e9682644b0adb327cdc169de53dd953756 Mon Sep 17 00:00:00 2001
|
|
From: Cole Robinson <crobinso@redhat.com>
|
|
Date: Wed, 29 Jan 2014 16:58:34 -0500
|
|
Subject: [PATCH] console: Bunch of scaling fixes (bz 969416)
|
|
|
|
Make scaling=always work correctly with spice
|
|
Make 'resize to vm' work with scaling enabled
|
|
Simplify it all
|
|
|
|
(cherry picked from commit b9bbf4686dbaa6e0ade09464973dc5d5d383c25c)
|
|
|
|
Conflicts:
|
|
virtManager/console.py
|
|
---
|
|
virtManager/console.py | 83 ++++++++++++++++----------------------------------
|
|
1 file changed, 26 insertions(+), 57 deletions(-)
|
|
|
|
diff --git a/virtManager/console.py b/virtManager/console.py
|
|
index 8058af9..868d390 100644
|
|
--- a/virtManager/console.py
|
|
+++ b/virtManager/console.py
|
|
@@ -307,6 +307,9 @@ class VNCViewer(Viewer):
|
|
self.display.set_keyboard_grab(True)
|
|
self.display.set_pointer_grab(True)
|
|
|
|
+ self.display.connect("size-allocate",
|
|
+ self.console.viewer_allocate_cb)
|
|
+
|
|
self.display.connect("vnc-pointer-grab", self.console.pointer_grabbed)
|
|
self.display.connect("vnc-pointer-ungrab", self.console.pointer_ungrabbed)
|
|
self.display.connect("vnc-auth-credential", self._auth_credential)
|
|
@@ -456,8 +459,13 @@ class SpiceViewer(Viewer):
|
|
self.console.refresh_scaling()
|
|
|
|
self.display.realize()
|
|
- self.display.connect("mouse-grab", lambda src, g: g and self.console.pointer_grabbed(src))
|
|
- self.display.connect("mouse-grab", lambda src, g: g or self.console.pointer_ungrabbed(src))
|
|
+ self.display.connect("size-allocate",
|
|
+ self.console.viewer_allocate_cb)
|
|
+
|
|
+ self.display.connect("mouse-grab",
|
|
+ lambda src, g: g and self.console.pointer_grabbed(src))
|
|
+ self.display.connect("mouse-grab",
|
|
+ lambda src, g: g or self.console.pointer_ungrabbed(src))
|
|
|
|
self.display.connect("focus-in-event",
|
|
self.console.viewer_focus_changed)
|
|
@@ -607,6 +615,7 @@ class vmmConsolePages(vmmGObjectUI):
|
|
self.pointer_is_grabbed = False
|
|
self.change_title()
|
|
self.vm.connect("config-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)
|
|
@@ -829,7 +838,6 @@ class vmmConsolePages(vmmGObjectUI):
|
|
|
|
curscale = self.viewer.get_scaling()
|
|
fs = self.widget("control-fullscreen").get_active()
|
|
- vnc_scroll = self.widget("console-gfx-scroll")
|
|
|
|
if (self.scale_type == self.config.CONSOLE_SCALE_NEVER
|
|
and curscale is True):
|
|
@@ -842,7 +850,7 @@ class vmmConsolePages(vmmGObjectUI):
|
|
self.viewer.set_scaling(fs)
|
|
|
|
# Refresh viewer size
|
|
- vnc_scroll.queue_resize()
|
|
+ self.widget("console-gfx-scroll").queue_resize()
|
|
|
|
def auth_login(self, ignore):
|
|
self.set_credentials()
|
|
@@ -875,6 +883,9 @@ class vmmConsolePages(vmmGObjectUI):
|
|
|
|
self.update_scaling()
|
|
|
|
+ def viewer_allocate_cb(self, src, req):
|
|
+ self.widget("console-gfx-scroll").queue_resize()
|
|
+
|
|
def size_to_vm(self, src_ignore):
|
|
# Resize the console to best fit the VM resolution
|
|
if not self.viewer:
|
|
@@ -882,10 +893,10 @@ class vmmConsolePages(vmmGObjectUI):
|
|
if not self.viewer.get_desktop_resolution():
|
|
return
|
|
|
|
- w, h = self.viewer.get_desktop_resolution()
|
|
self.topwin.unmaximize()
|
|
self.topwin.resize(1, 1)
|
|
- self.queue_scroll_resize_helper(w, h)
|
|
+ self.force_resize = True
|
|
+ self.widget("console-gfx-scroll").queue_resize()
|
|
|
|
def send_key(self, src, keys):
|
|
ignore = src
|
|
@@ -1176,52 +1187,6 @@ class vmmConsolePages(vmmGObjectUI):
|
|
self.config.set_console_password(self.vm, passwd.get_text(),
|
|
username.get_text())
|
|
|
|
- def queue_scroll_resize_helper(self, w, h):
|
|
- """
|
|
- Resize the VNC container widget to the requested size. The new size
|
|
- isn't a hard requirment so the user can still shrink the window
|
|
- again, as opposed to set_size_request
|
|
- """
|
|
- widget = self.widget("console-gfx-scroll")
|
|
- signal_holder = []
|
|
-
|
|
- def restore_scroll(src):
|
|
- is_scale = self.viewer.get_scaling()
|
|
-
|
|
- if is_scale:
|
|
- w_policy = Gtk.PolicyType.NEVER
|
|
- h_policy = Gtk.PolicyType.NEVER
|
|
- else:
|
|
- w_policy = Gtk.PolicyType.AUTOMATIC
|
|
- h_policy = Gtk.PolicyType.AUTOMATIC
|
|
-
|
|
- src.set_policy(w_policy, h_policy)
|
|
- return False
|
|
-
|
|
- def unset_cb(src):
|
|
- src.queue_resize_no_redraw()
|
|
- self.idle_add(restore_scroll, src)
|
|
- return False
|
|
-
|
|
- def request_cb(src, req):
|
|
- signal_id = signal_holder[0]
|
|
- req.width = w
|
|
- req.height = h
|
|
-
|
|
- src.disconnect(signal_id)
|
|
-
|
|
- self.idle_add(unset_cb, widget)
|
|
- return False
|
|
-
|
|
- # Disable scroll bars while we resize, since resizing to the VM's
|
|
- # dimensions can erroneously show scroll bars when they aren't needed
|
|
- widget.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
|
-
|
|
- signal_id = widget.connect("size-allocate", request_cb)
|
|
- signal_holder.append(signal_id)
|
|
-
|
|
- widget.queue_resize()
|
|
-
|
|
def scroll_size_allocate(self, src_ignore, req):
|
|
if not self.viewer or not self.viewer.get_desktop_resolution():
|
|
return
|
|
@@ -1238,16 +1203,20 @@ class vmmConsolePages(vmmGObjectUI):
|
|
return
|
|
desktop_ratio = float(desktop_w) / float(desktop_h)
|
|
|
|
- if not is_scale:
|
|
+ if is_scale or self.force_resize:
|
|
+ # 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 is_scale or self.force_resize:
|
|
# Scaling disabled is easy, just force the VNC widget size. Since
|
|
# we are inside a scrollwindow, it shouldn't cause issues.
|
|
- scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
|
+ self.force_resize = False
|
|
self.viewer.display.set_size_request(desktop_w, desktop_h)
|
|
return
|
|
|
|
- # Make sure we never show scrollbars when scaling
|
|
- scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
|
|
-
|
|
# Make sure there is no hard size requirement so we can scale down
|
|
self.viewer.display.set_size_request(-1, -1)
|
|
|