console: Add sendkey menu to fullscreen toolbar

Break out the sendkey menu building and share it.
This commit is contained in:
Cole Robinson 2011-05-18 18:54:27 -04:00
parent 77479267f3
commit 6062920bfe
4 changed files with 60 additions and 182 deletions

View File

@ -38,6 +38,7 @@ import socket
import logging
import virtManager.util as util
import virtManager.uihelpers as uihelpers
from virtManager.autodrawer import AutoDrawer
from virtManager.baseclass import vmmGObjectUI, vmmGObject
from virtManager.error import vmmErrorDialog
@ -550,6 +551,7 @@ class vmmConsolePages(vmmGObjectUI):
# Fullscreen toolbar
self.fs_toolbar = None
self.fs_drawer = None
self.keycombo_menu = uihelpers.build_keycombo_menu(self.send_key)
self.init_fs_toolbar()
finish_img = gtk.image_new_from_stock(gtk.STOCK_YES,
@ -586,6 +588,8 @@ class vmmConsolePages(vmmGObjectUI):
self.viewer.cleanup()
self.viewer = None
self.keycombo_menu.destroy()
self.keycombo_menu = None
self.fs_toolbar.destroy()
self.fs_toolbar = None
self.fs_drawer.destroy()
@ -612,6 +616,26 @@ class vmmConsolePages(vmmGObjectUI):
self.fs_toolbar.add(button)
button.connect("clicked", self.leave_fullscreen)
def keycombo_menu_clicked(src):
ignore = src
def menu_location(menu, toolbar):
ignore = menu
x, y = toolbar.window.get_origin()
ignore, height = toolbar.window.get_size()
return x, y + height, True
self.keycombo_menu.popup(None, None, menu_location, 0,
gtk.get_current_event_time(),
self.fs_toolbar)
item = gtk.ToolButton()
item.set_icon_name("preferences-desktop-keyboard-shortcuts")
util.tooltip_wrapper(item, _("Send key combination"))
item.show_all()
item.connect("clicked", keycombo_menu_clicked)
self.fs_toolbar.add(item)
self.fs_drawer = AutoDrawer()
self.fs_drawer.set_active(False)
self.fs_drawer.set_over(self.fs_toolbar)
@ -781,38 +805,8 @@ class vmmConsolePages(vmmGObjectUI):
self.topwin.resize(1, 1)
self.queue_scroll_resize_helper(w, h)
def send_key(self, src):
keys = None
if src.get_name() == "details-menu-send-cad":
keys = ["Control_L", "Alt_L", "Delete"]
elif src.get_name() == "details-menu-send-cab":
keys = ["Control_L", "Alt_L", "BackSpace"]
elif src.get_name() == "details-menu-send-caf1":
keys = ["Control_L", "Alt_L", "F1"]
elif src.get_name() == "details-menu-send-caf2":
keys = ["Control_L", "Alt_L", "F2"]
elif src.get_name() == "details-menu-send-caf3":
keys = ["Control_L", "Alt_L", "F3"]
elif src.get_name() == "details-menu-send-caf4":
keys = ["Control_L", "Alt_L", "F4"]
elif src.get_name() == "details-menu-send-caf5":
keys = ["Control_L", "Alt_L", "F5"]
elif src.get_name() == "details-menu-send-caf6":
keys = ["Control_L", "Alt_L", "F6"]
elif src.get_name() == "details-menu-send-caf7":
keys = ["Control_L", "Alt_L", "F7"]
elif src.get_name() == "details-menu-send-caf8":
keys = ["Control_L", "Alt_L", "F8"]
elif src.get_name() == "details-menu-send-caf9":
keys = ["Control_L", "Alt_L", "F9"]
elif src.get_name() == "details-menu-send-caf10":
keys = ["Control_L", "Alt_L", "F10"]
elif src.get_name() == "details-menu-send-caf11":
keys = ["Control_L", "Alt_L", "F11"]
elif src.get_name() == "details-menu-send-caf12":
keys = ["Control_L", "Alt_L", "F12"]
elif src.get_name() == "details-menu-send-printscreen":
keys = ["Print"]
def send_key(self, src, keys):
ignore = src
if keys != None:
self.viewer.send_keys(keys)

View File

@ -257,6 +257,7 @@ class vmmDetails(vmmGObjectUI):
self.topwin.set_default_size(w or 800, h or 600)
self.addhwmenu = None
self.keycombo_menu = None
self.init_menus()
self.init_details()
@ -382,22 +383,6 @@ class vmmDetails(vmmGObjectUI):
"on_details_menu_view_scale_fullscreen_toggled": self.console.set_scale_type,
"on_details_menu_view_scale_never_toggled": self.console.set_scale_type,
"on_details_menu_send_cad_activate": self.console.send_key,
"on_details_menu_send_cab_activate": self.console.send_key,
"on_details_menu_send_caf1_activate": self.console.send_key,
"on_details_menu_send_caf2_activate": self.console.send_key,
"on_details_menu_send_caf3_activate": self.console.send_key,
"on_details_menu_send_caf4_activate": self.console.send_key,
"on_details_menu_send_caf5_activate": self.console.send_key,
"on_details_menu_send_caf6_activate": self.console.send_key,
"on_details_menu_send_caf7_activate": self.console.send_key,
"on_details_menu_send_caf8_activate": self.console.send_key,
"on_details_menu_send_caf9_activate": self.console.send_key,
"on_details_menu_send_caf10_activate": self.console.send_key,
"on_details_menu_send_caf11_activate": self.console.send_key,
"on_details_menu_send_caf12_activate": self.console.send_key,
"on_details_menu_send_printscreen_activate": self.console.send_key,
"on_console_auth_password_activate": self.console.auth_login,
"on_console_auth_login_clicked": self.console.auth_login,
})
@ -531,6 +516,12 @@ class vmmDetails(vmmGObjectUI):
self.window.get_widget("console-pages").set_show_tabs(False)
self.window.get_widget("details-menu-view-toolbar").set_active(self.config.get_details_show_toolbar())
# Keycombo menu (ctrl+alt+del etc.)
self.keycombo_menu = uihelpers.build_keycombo_menu(
self.console.send_key)
self.window.get_widget("details-menu-send-key").set_submenu(
self.keycombo_menu)
# XXX: Help docs useless/out of date
self.window.get_widget("help_menuitem").hide()

View File

@ -839,3 +839,30 @@ def build_startmode_combo(start_list):
start_model.append(["none"])
start_model.append(["onboot"])
start_model.append(["hotplug"])
#########################
# Console keycombo menu #
#########################
def build_keycombo_menu(cb):
menu = gtk.Menu()
def make_item(name, combo):
item = gtk.MenuItem(name, use_underline=True)
item.connect("activate", cb, 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

View File

@ -331,140 +331,6 @@
<property name="label" translatable="yes">Send _Key</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details-menu-send-key_activate"/>
<child>
<widget class="GtkMenu" id="details-menu-send-key_menu">
<child>
<widget class="GtkMenuItem" id="details-menu-send-cab">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+_Backspace</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_cab_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-cad">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+_Delete</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_cad_activate"/>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator9">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf1">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_1</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf1_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf2">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_2</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf2_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf3">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_3</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf3_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf4">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_4</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf4_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf5">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_5</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf5_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf6">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_6</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf6_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf7">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_7</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf7_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf8">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_8</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf8_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf9">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F_9</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf9_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf10">
<property name="visible">True</property>
<property name="label">Ctrl+Alt+F1_0</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf10_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf11">
<property name="visible">True</property>
<property name="label">C_trl+Alt+F11</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf11_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-caf12">
<property name="visible">True</property>
<property name="label">Ct_rl+Alt+F12</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_caf12_activate"/>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator10">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="details-menu-send-printscreen">
<property name="visible">True</property>
<property name="label">_PrintScreen</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_details_menu_send_printscreen_activate"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>