I'm hoping to do a bit more significant work tomorrow: improving on fullscreen behaviour. <br>I'm envisioning a mini menubar that minimizes to a small line, like the one Virtualbox has. Thoughts concerning behaviour and/or implementation welcomed.<br>
<br>Also, on browsing the bugtracker I saw that:<br><a href="https://bugzilla.redhat.com/show_bug.cgi?id=498641">https://bugzilla.redhat.com/show_bug.cgi?id=498641</a> has a sensible patch seemingly ignored<br><a href="https://bugzilla.redhat.com/show_bug.cgi?id=459074">https://bugzilla.redhat.com/show_bug.cgi?id=459074</a> can probably be marked invalid/resolved now<br>
<br>Patches following inline. <br><br clear="all"># HG changeset patch<br># User Jon Nordby <<a href="mailto:jononor@gmail.com">jononor@gmail.com</a>><br># Date 1257885231 -3600<br># Node ID 3f28e5933acde147d357923907d28754e8817444<br>
# Parent f8fbdfc7439c5e5b7ae0d2c1c5cb68853692e260<br>host: Show hostname in window title<br><br>Activating a connected host entry in manager opens host window.<br><br>diff -r f8fbdfc7439c -r 3f28e5933acd src/virtManager/host.py<br>
--- a/src/virtManager/host.py Tue Nov 10 12:04:38 2009 -0500<br>+++ b/src/virtManager/host.py Tue Nov 10 21:33:51 2009 +0100<br>@@ -49,6 +49,9 @@<br> topwin = self.window.get_widget("vmm-host")<br>
topwin.hide()<br> <br>+ self.title = conn.get_short_hostname() + " " + topwin.get_title()<br>+ topwin.set_title(self.title)<br>+<br> self.err = vmmErrorDialog(topwin,<br> 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,<br>
_("Unexpected Error"),<br>diff -r f8fbdfc7439c -r 3f28e5933acd src/virtManager/manager.py<br>--- a/src/virtManager/manager.py Tue Nov 10 12:04:38 2009 -0500<br>+++ b/src/virtManager/manager.py Tue Nov 10 21:33:51 2009 +0100<br>
@@ -680,12 +680,14 @@<br> conn = self.current_connection()<br> if conn.get_state() == vmmConnection.STATE_DISCONNECTED:<br> conn.open()<br>+ return True<br> <br> def open_vm_console(self,ignore,ignore2=None,ignore3=None):<br>
if self.current_vmuuid():<br> self.emit("action-show-console", self.current_connection_uri(), self.current_vmuuid())<br> elif self.current_connection():<br>- self.open_connection()<br>
+ if not self.open_connection():<br>+ self.emit("action-show-host", self.current_connection_uri())<br> <br> def open_clone_window(self, ignore1=None, ignore2=None, ignore3=None):<br>
if self.current_vmuuid():<br><br><br><br># HG changeset patch<br># User Jon Nordby <<a href="mailto:jononor@gmail.com">jononor@gmail.com</a>><br># Date 1257896253 -3600<br># Node ID 9c7e912548261b01cb31d91b3c447a7e866423d7<br>
# Parent 3f28e5933acde147d357923907d28754e8817444<br>manager: enable menu key to open context menu<br><br>diff -r 3f28e5933acd -r 9c7e91254826 src/virtManager/manager.py<br>--- a/src/virtManager/manager.py Tue Nov 10 21:33:51 2009 +0100<br>
+++ b/src/virtManager/manager.py Wed Nov 11 00:37:33 2009 +0100<br>@@ -350,7 +350,8 @@<br> "on_vm_list_row_activated": self.open_vm_console,<br> "on_vm_list_row_expanded": self.row_expanded,<br>
"on_vm_list_row_collapsed": self.row_collapsed,<br>- "on_vm_list_button_press_event": self.popup_vm_menu,<br>+ "on_vm_list_button_press_event": self.popup_vm_menu_button,<br>
+ "on_vm_list_key_press_event": self.popup_vm_menu_key,<br> <br> "on_menu_edit_preferences_activate": self.show_preferences,<br> "on_menu_help_about_activate": self.show_about,<br>
@@ -724,66 +725,78 @@<br> self.window.get_widget("menu_file_restore_saved").set_sensitive(restore)<br> <br> <br>- def popup_vm_menu(self, widget, event):<br>+ def popup_vm_menu_key(self, widget, event):<br>
+ if gtk.gdk.keyval_name(event.keyval) != "Menu":<br>+ return False<br>+ vmlist = self.window.get_widget("vm-list")<br>+ treeselection = vmlist.get_selection()<br>+ model, _iter = treeselection.get_selected()<br>
+ self.popup_vm_menu(model, _iter, event)<br>+ return True<br>+<br>+ def popup_vm_menu_button(self, widget, event):<br>+ if event.button != 3:<br>+ return False<br> tup = widget.get_path_at_pos(int(event.x), int(event.y))<br>
if tup == None:<br> return False<br> path = tup[0]<br> model = widget.get_model()<br> _iter = model.get_iter(path)<br>+ self.popup_vm_menu(model, _iter, event)<br>+ return True<br>
+<br>+ def popup_vm_menu(self, model, _iter, event):<br> if model.iter_parent(_iter) != None:<br> # a vm is selected, retrieve it from the first column of the model<br> vm = model.get_value(_iter, ROW_HANDLE)<br>
- if event.button == 3:<br>- # Update popup menu based upon vm status<br>- if vm.is_read_only() == True:<br>- self.vmmenu_items["run"].set_sensitive(False)<br>
+ # Update popup menu based upon vm status<br>+ if vm.is_read_only() == True:<br>+ self.vmmenu_items["run"].set_sensitive(False)<br>+ self.vmmenu_items["pause"].set_sensitive(False)<br>
+ self.vmmenu_items["pause"].show()<br>+ self.vmmenu_items["resume"].hide()<br>+ self.vmmenu_items["resume"].set_sensitive(False)<br>+ self.vmmenu_items["shutdown"].set_sensitive(False)<br>
+ self.vmmenu_items["migrate"].set_sensitive(False)<br>+ else:<br>+ if vm.status() == libvirt.VIR_DOMAIN_SHUTOFF:<br>+ self.vmmenu_items["run"].set_sensitive(True)<br>
self.vmmenu_items["pause"].set_sensitive(False)<br> self.vmmenu_items["pause"].show()<br> self.vmmenu_items["resume"].hide()<br> self.vmmenu_items["resume"].set_sensitive(False)<br>
self.vmmenu_items["shutdown"].set_sensitive(False)<br>- self.vmmenu_items["migrate"].set_sensitive(False)<br>- else:<br>- if vm.status() == libvirt.VIR_DOMAIN_SHUTOFF:<br>
- self.vmmenu_items["run"].set_sensitive(True)<br>- self.vmmenu_items["pause"].set_sensitive(False)<br>- self.vmmenu_items["pause"].show()<br>
- self.vmmenu_items["resume"].hide()<br>- self.vmmenu_items["resume"].set_sensitive(False)<br>- self.vmmenu_items["shutdown"].set_sensitive(False)<br>
- self.vmmenu_items["migrate"].set_sensitive(True)<br>- elif vm.status() == libvirt.VIR_DOMAIN_RUNNING:<br>- self.vmmenu_items["run"].set_sensitive(False)<br>
- self.vmmenu_items["pause"].set_sensitive(True)<br>- self.vmmenu_items["pause"].show()<br>- self.vmmenu_items["resume"].hide()<br>
- self.vmmenu_items["resume"].set_sensitive(False)<br>- self.vmmenu_items["shutdown"].set_sensitive(True)<br>- self.vmmenu_items["migrate"].set_sensitive(True)<br>
- elif vm.status() == libvirt.VIR_DOMAIN_PAUSED:<br>- self.vmmenu_items["run"].set_sensitive(False)<br>- self.vmmenu_items["pause"].hide()<br>
- self.vmmenu_items["pause"].set_sensitive(False)<br>- self.vmmenu_items["resume"].show()<br>- self.vmmenu_items["resume"].set_sensitive(True)<br>
- self.vmmenu_items["shutdown"].set_sensitive(True)<br>- self.vmmenu_items["migrate"].set_sensitive(True)<br>- self.vmmenu.popup(None, None, None, 0, event.time)<br>
- return False<br>+ self.vmmenu_items["migrate"].set_sensitive(True)<br>+ elif vm.status() == libvirt.VIR_DOMAIN_RUNNING:<br>+ self.vmmenu_items["run"].set_sensitive(False)<br>
+ self.vmmenu_items["pause"].set_sensitive(True)<br>+ self.vmmenu_items["pause"].show()<br>+ self.vmmenu_items["resume"].hide()<br>+ self.vmmenu_items["resume"].set_sensitive(False)<br>
+ self.vmmenu_items["shutdown"].set_sensitive(True)<br>+ self.vmmenu_items["migrate"].set_sensitive(True)<br>+ elif vm.status() == libvirt.VIR_DOMAIN_PAUSED:<br>
+ self.vmmenu_items["run"].set_sensitive(False)<br>+ self.vmmenu_items["pause"].hide()<br>+ self.vmmenu_items["pause"].set_sensitive(False)<br>
+ self.vmmenu_items["resume"].show()<br>+ self.vmmenu_items["resume"].set_sensitive(True)<br>+ self.vmmenu_items["shutdown"].set_sensitive(True)<br>
+ self.vmmenu_items["migrate"].set_sensitive(True)<br>+ self.vmmenu.popup(None, None, None, 0, event.time)<br> else:<br>+ # a host is selected<br> conn = model.get_value(_iter, ROW_HANDLE)<br>
- if event.button == 3:<br>- if conn.get_state() != vmmConnection.STATE_DISCONNECTED:<br>- self.connmenu_items["create"].set_sensitive(True)<br>- self.connmenu_items["disconnect"].set_sensitive(True)<br>
- self.connmenu_items["connect"].set_sensitive(False)<br>- else:<br>- self.connmenu_items["create"].set_sensitive(False)<br>- self.connmenu_items["disconnect"].set_sensitive(False)<br>
- self.connmenu_items["connect"].set_sensitive(True)<br>- self.connmenu.popup(None, None, None, 0, event.time)<br>- return False<br>+ if conn.get_state() != vmmConnection.STATE_DISCONNECTED:<br>
+ self.connmenu_items["create"].set_sensitive(True)<br>+ self.connmenu_items["disconnect"].set_sensitive(True)<br>+ self.connmenu_items["connect"].set_sensitive(False)<br>
+ else:<br>+ self.connmenu_items["create"].set_sensitive(False)<br>+ self.connmenu_items["disconnect"].set_sensitive(False)<br>+ self.connmenu_items["connect"].set_sensitive(True)<br>
+ self.connmenu.popup(None, None, None, 0, event.time)<br> <br> def new_vm(self, ignore=None):<br> self.emit("action-show-create", self.current_connection_uri())<br>diff -r 3f28e5933acd -r 9c7e91254826 src/vmm-manager.glade<br>
--- a/src/vmm-manager.glade Tue Nov 10 21:33:51 2009 +0100<br>+++ b/src/vmm-manager.glade Wed Nov 11 00:37:33 2009 +0100<br>@@ -352,6 +352,7 @@<br> <property name="can_focus">True</property><br>
<signal name="button_press_event" handler="on_vm_list_button_press_event"/><br> <signal name="row_expanded" handler="on_vm_list_row_expanded"/><br>
+ <signal name="key_press_event" handler="on_vm_list_key_press_event"/><br> <signal name="row_collapsed" handler="on_vm_list_row_collapsed"/><br>
<signal name="row_activated" handler="on_vm_list_row_activated"/><br> </widget><br><br><br><br><br>-- <br>Regards Jon Nordby - <a href="http://www.jonnor.com">www.jonnor.com</a><br>