[virt-tools-list] [PATCH 1/4] console: Extract fullscreen exit code to separate class
Povilas Kanapickas
povilas at radix.lt
Wed Jan 2 00:28:04 UTC 2019
Signed-off-by: Povilas Kanapickas <povilas at radix.lt>
---
virtManager/console.py | 194 +++++++++++++++++++++++------------------
1 file changed, 110 insertions(+), 84 deletions(-)
diff --git a/virtManager/console.py b/virtManager/console.py
index 30d0c83e..804e5ad7 100644
--- a/virtManager/console.py
+++ b/virtManager/console.py
@@ -102,6 +102,101 @@ class _TimedRevealer(vmmGObject):
return self._ebox
+def build_keycombo_menu(on_send_key_fn):
+ menu = Gtk.Menu()
+
+ def make_item(name, combo):
+ item = Gtk.MenuItem.new_with_mnemonic(name)
+ item.connect("activate", on_send_key_fn, combo)
+
+ menu.add(item)
+
+ make_item("Ctrl+Alt+_Backspace", ["Control_L", "Alt_L", "BackSpace"])
+ make_item("Ctrl+Alt+_Delete", ["Control_L", "Alt_L", "Delete"])
+ menu.add(Gtk.SeparatorMenuItem())
+
+ for i in range(1, 13):
+ make_item("Ctrl+Alt+F_%d" % i, ["Control_L", "Alt_L", "F%d" % i])
+ menu.add(Gtk.SeparatorMenuItem())
+
+ make_item("_Printscreen", ["Print"])
+
+ menu.show_all()
+ return menu
+
+
+class vmmOverlayToolbar:
+
+ def __init__(self):
+ self.send_key_button = None
+ self.timed_revealer = None
+ self.keycombo_toolbar = None
+ self.toolbar = None
+ self.send_key_button = None
+ self.timed_revealer = None
+
+ def create(self, name, tooltip_text, accessible_name,
+ send_key_accessible_name, on_leave_fn, on_send_key_fn):
+ self.keycombo_toolbar = build_keycombo_menu(on_send_key_fn)
+
+ self.overlay_toolbar = Gtk.Toolbar()
+ self.overlay_toolbar.set_show_arrow(False)
+ self.overlay_toolbar.set_style(Gtk.ToolbarStyle.BOTH_HORIZ)
+ self.overlay_toolbar.get_accessible().set_name(name)
+
+ button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_LEAVE_FULLSCREEN)
+ button.set_tooltip_text(tooltip_text)
+ button.show()
+ button.get_accessible().set_name(accessible_name)
+ self.overlay_toolbar.add(button)
+ button.connect("clicked", on_leave_fn)
+
+ # Exit button
+
+ def keycombo_menu_clicked(src):
+ ignore = src
+ def menu_location(*args):
+ # Signature changed at some point.
+ # f23+ : args = menu, x, y, toolbar
+ # rhel7.3 : args = menu, toolbar
+ if len(args) == 4:
+ toolbar = args[3]
+ else:
+ toolbar = args[1]
+
+ ignore, x, y = toolbar.get_window().get_origin()
+ height = toolbar.get_window().get_height()
+ return x, y + height, True
+
+ self.keycombo_toolbar.popup(None, None, menu_location,
+ self.overlay_toolbar, 0,
+ Gtk.get_current_event_time())
+
+ self.send_key_button = Gtk.ToolButton()
+ self.send_key_button.set_icon_name(
+ "preferences-desktop-keyboard-shortcuts")
+ self.send_key_button.set_tooltip_text(_("Send key combination"))
+ self.send_key_button.show_all()
+ self.send_key_button.connect("clicked", keycombo_menu_clicked)
+ self.send_key_button.get_accessible().set_name(
+ send_key_accessible_name)
+ self.overlay_toolbar.add(self.send_key_button)
+
+ self.timed_revealer = _TimedRevealer(self.overlay_toolbar)
+ return self.timed_revealer.get_overlay_widget()
+
+ def cleanup(self):
+ self.keycombo_toolbar.destroy()
+ self.keycombo_toolbar = None
+ self.overlay_toolbar.destroy()
+ self.overlay_toolbar = None
+ self.timed_revealer.cleanup()
+ self.timed_revealer = None
+
+ def set_sensitive(self, can_sendkey):
+ self.send_key_button.set_sensitive(can_sendkey)
+
+
class vmmConsolePages(vmmGObjectUI):
"""
Handles all the complex UI handling dictated by the spice/vnc widgets
@@ -123,12 +218,17 @@ class vmmConsolePages(vmmGObjectUI):
self._viewer = None
# Fullscreen toolbar
- self._send_key_button = None
- self._overlay_toolbar = None
- self._timed_revealer = None
- self._keycombo_toolbar = self._build_keycombo_menu()
- self._keycombo_menu = self._build_keycombo_menu()
- self._init_overlay_toolbar()
+ self._keycombo_menu = build_keycombo_menu(self._do_send_key)
+
+ self._overlay_toolbar_fullscreen = vmmOverlayToolbar()
+ overlay = self._overlay_toolbar_fullscreen.create(
+ name="Fullscreen Toolbar",
+ tooltip_text=_("Leave fullscreen"),
+ accessible_name="Fullscreen Exit",
+ send_key_accessible_name="Fullscreen Send Key",
+ on_leave_fn=self._leave_fullscreen,
+ on_send_key_fn=self._do_send_key)
+ self.widget("console-overlay").add_overlay(overlay)
# Make viewer widget background always be black
black = Gdk.Color(0, 0, 0)
@@ -174,13 +274,7 @@ class vmmConsolePages(vmmGObjectUI):
self._viewer.cleanup()
self._viewer = None
- self._keycombo_toolbar.destroy()
- self._keycombo_toolbar = None
- self._overlay_toolbar.destroy()
- self._overlay_toolbar = None
-
- self._timed_revealer.cleanup()
- self._timed_revealer = None
+ self._overlay_toolbar_fullscreen.cleanup()
for serial in self._serial_consoles:
serial.cleanup()
@@ -191,74 +285,6 @@ class vmmConsolePages(vmmGObjectUI):
# Initialization helpers #
##########################
- def _build_keycombo_menu(self):
- # Shared with vmmDetails
- menu = Gtk.Menu()
-
- def make_item(name, combo):
- item = Gtk.MenuItem.new_with_mnemonic(name)
- item.connect("activate", self._do_send_key, combo)
-
- menu.add(item)
-
- make_item("Ctrl+Alt+_Backspace", ["Control_L", "Alt_L", "BackSpace"])
- make_item("Ctrl+Alt+_Delete", ["Control_L", "Alt_L", "Delete"])
- menu.add(Gtk.SeparatorMenuItem())
-
- for i in range(1, 13):
- make_item("Ctrl+Alt+F_%d" % i, ["Control_L", "Alt_L", "F%d" % i])
- menu.add(Gtk.SeparatorMenuItem())
-
- make_item("_Printscreen", ["Print"])
-
- menu.show_all()
- return menu
-
- def _init_overlay_toolbar(self):
- self._overlay_toolbar = Gtk.Toolbar()
- self._overlay_toolbar.set_show_arrow(False)
- self._overlay_toolbar.set_style(Gtk.ToolbarStyle.BOTH_HORIZ)
- self._overlay_toolbar.get_accessible().set_name("Fullscreen Toolbar")
-
- # Exit fullscreen button
- button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_LEAVE_FULLSCREEN)
- button.set_tooltip_text(_("Leave fullscreen"))
- button.show()
- button.get_accessible().set_name("Fullscreen Exit")
- self._overlay_toolbar.add(button)
- button.connect("clicked", self._leave_fullscreen)
-
- def keycombo_menu_clicked(src):
- ignore = src
- def menu_location(*args):
- # Signature changed at some point.
- # f23+ : args = menu, x, y, toolbar
- # rhel7.3 : args = menu, toolbar
- if len(args) == 4:
- toolbar = args[3]
- else:
- toolbar = args[1]
-
- ignore, x, y = toolbar.get_window().get_origin()
- height = toolbar.get_window().get_height()
- return x, y + height, True
-
- self._keycombo_toolbar.popup(None, None, menu_location,
- self._overlay_toolbar, 0,
- Gtk.get_current_event_time())
-
- self._send_key_button = Gtk.ToolButton()
- self._send_key_button.set_icon_name(
- "preferences-desktop-keyboard-shortcuts")
- self._send_key_button.set_tooltip_text(_("Send key combination"))
- self._send_key_button.show_all()
- self._send_key_button.connect("clicked", keycombo_menu_clicked)
- self._send_key_button.get_accessible().set_name("Fullscreen Send Key")
- self._overlay_toolbar.add(self._send_key_button)
-
- self._timed_revealer = _TimedRevealer(self._overlay_toolbar)
- self.widget("console-overlay").add_overlay(
- self._timed_revealer.get_overlay_widget())
def _init_menus(self):
# Serial list menu
@@ -531,11 +557,11 @@ class vmmConsolePages(vmmGObjectUI):
if do_fullscreen:
self.topwin.fullscreen()
- self._timed_revealer.force_reveal(True)
+ self._overlay_toolbar_fullscreen.timed_revealer.force_reveal(True)
self.widget("toolbar-box").hide()
self.widget("details-menubar").hide()
else:
- self._timed_revealer.force_reveal(False)
+ self._overlay_toolbar_fullscreen.timed_revealer.force_reveal(False)
self.topwin.unfullscreen()
if self.widget("details-menu-view-toolbar").get_active():
@@ -663,9 +689,9 @@ class vmmConsolePages(vmmGObjectUI):
self.vm.has_spicevmc_type_redirdev()))
can_sendkey = (is_viewer and not paused)
- self._send_key_button.set_sensitive(can_sendkey)
for c in self._keycombo_menu.get_children():
c.set_sensitive(can_sendkey)
+ self._overlay_toolbar_fullscreen.set_sensitive(can_sendkey)
self._refresh_can_fullscreen()
--
2.17.1
More information about the virt-tools-list
mailing list