[master 1/1] Ellipsize the file system type combo box (#1212615)

dashea installerbot-noreply at redhat.com
Tue Jul 28 20:21:21 UTC 2015


From: David Shea <dshea at redhat.com>

The PPC architecture has unusually long filesystem type names, which
blows out the window when running at 800x600. Ellipsize long names in
the combo box, which means the GtkComboBoxtext has to be downgraded to a
GtkComboBox and the model and renderer handled ourselves.

Resolves: rhbz#1212615
(cherry picked from commit ba9f0d15a3bb2bce4651a6ab28b681fec008535b,
sort of)
---
 pyanaconda/ui/gui/spokes/custom.glade | 17 ++++++++++++++++-
 pyanaconda/ui/gui/spokes/custom.py    | 31 ++++++++++++++++++++++---------
 2 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/custom.glade b/pyanaconda/ui/gui/spokes/custom.glade
index 2de2172..ecb4a82 100644
--- a/pyanaconda/ui/gui/spokes/custom.glade
+++ b/pyanaconda/ui/gui/spokes/custom.glade
@@ -41,6 +41,12 @@
       </row>
     </data>
   </object>
+  <object class="GtkListStore" id="fileSystemStore">
+    <columns>
+      <!-- column-name fs_type -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkListStore" id="mountPointStore">
     <columns>
       <!-- column-name path -->
@@ -714,11 +720,20 @@
                                                       </packing>
                                                     </child>
                                                     <child>
-                                                      <object class="GtkComboBoxText" id="fileSystemTypeCombo">
+                                                      <object class="GtkComboBox" id="fileSystemTypeCombo">
                                                         <property name="visible">True</property>
                                                         <property name="can_focus">False</property>
+                                                        <property name="model">fileSystemStore</property>
                                                         <signal name="changed" handler="on_fs_type_changed" swapped="no"/>
                                                         <signal name="changed" handler="on_value_changed" swapped="no"/>
+                                                        <child>
+                                                          <object class="GtkCellRendererText" id="fileSystemRenderer">
+                                                            <property name="ellipsize">end</property>
+                                                          </object>
+                                                          <attributes>
+                                                            <attribute name="text">0</attribute>
+                                                          </attributes>
+                                                        </child>
                                                       </object>
                                                       <packing>
                                                         <property name="expand">False</property>
diff --git a/pyanaconda/ui/gui/spokes/custom.py b/pyanaconda/ui/gui/spokes/custom.py
index c6e940d..b7f465a 100644
--- a/pyanaconda/ui/gui/spokes/custom.py
+++ b/pyanaconda/ui/gui/spokes/custom.py
@@ -140,7 +140,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
     builderObjects = ["customStorageWindow", "containerStore", "deviceTypeStore",
                       "partitionStore", "raidStoreFiltered", "raidLevelStore",
                       "addImage", "removeImage", "settingsImage",
-                      "mountPointCompletion", "mountPointStore"]
+                      "mountPointCompletion", "mountPointStore", "fileSystemStore"]
     mainWidgetName = "customStorageWindow"
     uiFile = "spokes/custom.glade"
     helpFile = "CustomSpoke.xml"
@@ -240,6 +240,7 @@ def _grabObjects(self):
         # Detailed configuration stuff
         self._encryptCheckbox = self.builder.get_object("encryptCheckbox")
         self._fsCombo = self.builder.get_object("fileSystemTypeCombo")
+        self._fsStore = self.builder.get_object("fileSystemStore")
         self._labelEntry = self.builder.get_object("labelEntry")
         self._mountPointEntry = self.builder.get_object("mountPointEntry")
         self._nameEntry = self.builder.get_object("nameEntry")
@@ -437,6 +438,14 @@ def _clear_current_selector(self):
             self._current_selector.set_chosen(False)
             self._current_selector = None
 
+    def _get_fstype(self, fstypeCombo):
+        itr = fstypeCombo.get_active_iter()
+        if not itr:
+            return None
+
+        model = fstypeCombo.get_model()
+        return model[itr][0]
+
     def _get_autopart_type(self, autopartTypeCombo):
         itr = autopartTypeCombo.get_active_iter()
         if not itr:
@@ -1336,9 +1345,9 @@ def _setup_fstype_combo(self, device):
         names.sort()
 
         # Add all desired fileystem type names to the box, sorted alphabetically
-        self._fsCombo.remove_all()
+        self._fsStore.clear()
         for ty in names:
-            self._fsCombo.append_text(ty)
+            self._fsStore.append([ty])
 
         # set the active filesystem type
         idx = next(i for i, data in enumerate(self._fsCombo.get_model()) if data[0] == type_name)
@@ -2405,10 +2414,12 @@ def on_fs_type_changed(self, combo):
         if not self._initialized:
             return
 
-        new_type = combo.get_active_text()
-        if new_type is None:
+        itr = combo.get_active_iter()
+        if not itr:
             return
-        log.debug("fs type changed: %s", new_type)
+
+        new_type = self._get_fstype(combo)
+
         fmt = getFormat(new_type)
         fancy_set_sensitive(self._mountPointEntry, fmt.mountable)
 
@@ -2510,12 +2521,14 @@ def _update_fstype_combo(self, device_type):
             This method is idempotent, and must remain so.
         """
         # Find unique instance of btrfs in fsCombo, if any.
-        btrfs_idx = next((idx for idx, data in enumerate(self._fsCombo.get_model()) if data[0] == "btrfs"), None)
+        model = self._fsCombo.get_model()
+        btrfs_iter = ((idx, row) for idx, row in enumerate(model) if row[0] == "btrfs")
+        btrfs_idx, btrfs_row = next(btrfs_iter, (None, None))
 
         if device_type == DEVICE_TYPE_BTRFS:
             # If no btrfs entry, add one, and select the new entry
             if btrfs_idx is None:
-                self._fsCombo.append_text("btrfs")
+                self._fsStore.append(["btrfs"])
                 active_index = len(self._fsCombo.get_model()) - 1
             # Otherwise, select the already located btrfs entry
             else:
@@ -2526,7 +2539,7 @@ def _update_fstype_combo(self, device_type):
 
             # If there is a btrfs entry, remove and adjust active_index
             if btrfs_idx is not None:
-                self._fsCombo.remove(btrfs_idx)
+                self._fsStore.remove(btrfs_row.iter)
 
                 # If btrfs previously selected, select default filesystem
                 if active_index == btrfs_idx:


-- 
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/e2b6aedcce0857567495e3272d23c47190252de8


More information about the anaconda-patches mailing list