[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[et-mgmt-tools] [PATCH] Add 'fullscreen only' VNC scaling option



The attached patch adds an extra scaling option for a VM's VNC
connection: 'Fullscreen Only'. This required breaking out the UI into
radio buttons rather than a simple boolean checkbox.

Screenshot here:

http://fedorapeople.org/~crobinso/virt-manager/vmm-details-scale.png

Thanks,
Cole
# HG changeset patch
# User Cole Robinson <crobinso redhat com>
# Date 1234829879 18000
# Node ID 65b6b36745edc39e2c4779a41d0ad35c814efb30
# Parent  dfc19539a91cd5b856e7f01afbbd1e0ba9f4683b
Change VNC scaling options to 'Always', 'Fullscreen only', or 'Never'

diff -r dfc19539a91c -r 65b6b36745ed src/virtManager/details.py
--- a/src/virtManager/details.py	Thu Feb 12 13:32:55 2009 -0500
+++ b/src/virtManager/details.py	Mon Feb 16 19:17:59 2009 -0500
@@ -40,6 +40,11 @@
 
 import virtinst
 
+# Different scaling values
+SCALE_ALWAYS = 0
+SCALE_FULLSCREEN = 1
+SCALE_NEVER = 2
+
 # Columns in hw list model
 HW_LIST_COL_LABEL = 0
 HW_LIST_COL_STOCK_ID = 1
@@ -68,6 +73,7 @@
 PAGE_AUTHENTICATE = 2
 PAGE_VNCVIEWER = 3
 
+# Main tab pages
 PAGE_CONSOLE = 0
 PAGE_DETAILS = 1
 PAGE_DYNAMIC_OFFSET = 2
@@ -223,8 +229,15 @@
             self.vncViewer.set_keyboard_grab(False)
         self.vncViewer.set_pointer_grab(True)
         if not topwin.is_composited():
-            self.vncViewer.set_scaling(True)
-            self.window.get_widget("details-menu-view-scale-display").set_active(True)
+            # XXX: When we have per VM prefs, this will need to be smarter
+            self.scale_type = SCALE_ALWAYS
+        else:
+            self.scale_type = SCALE_NEVER
+
+        self.window.get_widget("details-menu-view-scale-always").set_active(self.scale_type == SCALE_ALWAYS)
+        self.window.get_widget("details-menu-view-scale-never").set_active(self.scale_type == SCALE_NEVER)
+        self.window.get_widget("details-menu-view-scale-fullscreen").set_active(self.scale_type == SCALE_FULLSCREEN)
+        self.update_scaling()
 
         self.vncViewer.connect("vnc-pointer-grab", self.notify_grabbed)
         self.vncViewer.connect("vnc-pointer-ungrab", self.notify_ungrabbed)
@@ -300,7 +313,9 @@
 
             "on_details_menu_view_fullscreen_activate": self.toggle_fullscreen,
             "on_details_menu_view_toolbar_activate": self.toggle_toolbar,
-            "on_details_menu_view_scale_display_activate": self.scale_display,
+            "on_details_menu_view_scale_always_toggled": self.set_scale_type,
+            "on_details_menu_view_scale_fullscreen_toggled": self.set_scale_type,
+            "on_details_menu_view_scale_never_toggled": self.set_scale_type,
 
             "on_details_menu_send_cad_activate": self.send_key,
             "on_details_menu_send_cab_activate": self.send_key,
@@ -424,11 +439,29 @@
         else:
             self.vncViewer.set_keyboard_grab(False)
 
-    def scale_display(self, src):
-        if src.get_active():
+    def set_scale_type(self, src):
+        if not src.get_active():
+            return
+
+        if src == self.window.get_widget("details-menu-view-scale-always"):
+            self.scale_type = SCALE_ALWAYS
+        elif src == self.window.get_widget("details-menu-view-scale-fullscreen"):
+            self.scale_type = SCALE_FULLSCREEN
+        elif src == self.window.get_widget("details-menu-view-scale-never"):
+            self.scale_type = SCALE_NEVER
+
+        self.update_scaling()
+
+    def update_scaling(self):
+        curscale = self.vncViewer.get_scaling()
+        fs = self.window.get_widget("control-fullscreen").get_active()
+
+        if self.scale_type == SCALE_NEVER and curscale == True:
+            self.vncViewer.set_scaling(False)
+        elif self.scale_type == SCALE_ALWAYS and curscale == False:
             self.vncViewer.set_scaling(True)
-        else:
-            self.vncViewer.set_scaling(False)
+        elif self.scale_type == SCALE_FULLSCREEN and curscale != fs:
+            self.vncViewer.set_scaling(fs)
 
     def control_fullscreen(self, src):
         menu = self.window.get_widget("details-menu-view-fullscreen")
@@ -458,6 +491,7 @@
             tabs.set_border_width(6)
             if self.window.get_widget("details-menu-view-toolbar").get_active():
                 self.window.get_widget("details-toolbar").show()
+        self.update_scaling()
 
     def auth_login(self, ignore):
         self.set_password()
diff -r dfc19539a91c -r 65b6b36745ed src/vmm-details.glade
--- a/src/vmm-details.glade	Thu Feb 12 13:32:55 2009 -0500
+++ b/src/vmm-details.glade	Mon Feb 16 19:17:59 2009 -0500
@@ -3,6 +3,8 @@
 <!--*- mode: xml -*-->
 <glade-interface>
   <widget class="GtkWindow" id="vmm-details">
+    <property name="width_request">800</property>
+    <property name="height_request">600</property>
     <property name="title" translatable="yes">Virtual Machine</property>
     <property name="default_width">800</property>
     <property name="default_height">600</property>
@@ -175,11 +177,44 @@
                       </widget>
                     </child>
                     <child>
-                      <widget class="GtkCheckMenuItem" id="details-menu-view-scale-display">
+                      <widget class="GtkMenuItem" id="menuitem1">
                         <property name="visible">True</property>
                         <property name="label" translatable="yes">Scale Display</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="on_details_menu_view_scale_display_activate"/>
+                        <child>
+                          <widget class="GtkMenu" id="menu1">
+                            <property name="visible">True</property>
+                            <child>
+                              <widget class="GtkRadioMenuItem" id="details-menu-view-scale-always">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Always</property>
+                                <property name="use_underline">True</property>
+                                <property name="active">True</property>
+                                <signal name="toggled" handler="on_details_menu_view_scale_always_toggled"/>
+                              </widget>
+                            </child>
+                            <child>
+                              <widget class="GtkRadioMenuItem" id="details-menu-view-scale-fullscreen">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Only when Fullscreen</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">details-menu-view-scale-always</property>
+                                <signal name="toggled" handler="on_details_menu_view_scale_fullscreen_toggled"/>
+                              </widget>
+                            </child>
+                            <child>
+                              <widget class="GtkRadioMenuItem" id="details-menu-view-scale-never">
+                                <property name="visible">True</property>
+                                <property name="label" translatable="yes">Never</property>
+                                <property name="use_underline">True</property>
+                                <property name="draw_as_radio">True</property>
+                                <property name="group">details-menu-view-scale-always</property>
+                                <signal name="toggled" handler="on_details_menu_view_scale_never_toggled"/>
+                              </widget>
+                            </child>
+                          </widget>
+                        </child>
                       </widget>
                     </child>
                     <child>

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]