[PATCH 2/3] Fix format check box for pre-existing partitions (#491675)

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

 



When performing a custom partitioning layout, make the Format check mark
column work correctly depending on what you enter in the Edit Partition
dialog box.  Also register and cancel storage actions as necessary.
---
 iw/partition_dialog_gui.py     |   66 ++++++++++++++++++---------
 iw/partition_ui_helpers_gui.py |   98 ++++++++++++++++++++++++---------------
 2 files changed, 105 insertions(+), 59 deletions(-)

diff --git a/iw/partition_dialog_gui.py b/iw/partition_dialog_gui.py
index bb4a730..2842a12 100644
--- a/iw/partition_dialog_gui.py
+++ b/iw/partition_dialog_gui.py
@@ -214,27 +214,51 @@ class PartitionEditor:
                 # preexisting partition, just set mount point and format flag
                 request = self.origrequest
                 mountpoint = self.mountCombo.get_children()[0].get_text()
-
-                if self.fsoptionsDict.has_key("formatcb") and \
-                   self.fsoptionsDict["formatcb"].get_active():
-                    fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value()
-                    format = fmt_class(mountpoint=mountpoint)
-                    luksdev = None
-                    if self.fsoptionsDict.has_key("lukscb") and \
-                       self.fsoptionsDict["lukscb"].get_active() and \
-                       request.format.type != "luks":
-                        luksdev = LUKSDevice("luks%d" % self.storage.nextID,
-                                             format=format,
-                                             parents=request)
-                        format = getFormat("luks",
-                                           device=self.origrequest.path,
-                                           passphrase=self.storage.encryptionPassphrase)
-                    actions.append(ActionCreateFormat(request, format))
-                    if luksdev:
-                        actions.append(ActionCreateDevice(luksdev))
-                        actions.append(ActionCreateFormat(luksdev))
-                elif request.format.mountable:
-                    request.format.mountpoint = mountpoint
+                devicetree = self.anaconda.id.storage.devicetree
+
+                if self.fsoptionsDict.has_key("formatcb"):
+                   if self.fsoptionsDict["formatcb"].get_active():
+                       fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value()
+
+                       # carry over exists, migrate, size, and device
+                       # necessary for partition editor UI
+                       try:
+                           format = fmt_class(mountpoint=mountpoint,
+                                              exists=request.format.exists,
+                                              migrate=request.format.migrate,
+                                              size=request.format.size,
+                                              device=request.format.device)
+                       except AttributeError:
+                           format = fmt_class(mountpoint=mountpoint,
+                                              exists=request.format.exists,
+                                              migrate=request.format.migrate,
+                                              device=request.format.device)
+
+                       luksdev = None
+                       if self.fsoptionsDict.has_key("lukscb") and \
+                          self.fsoptionsDict["lukscb"].get_active() and \
+                          request.format.type != "luks":
+                           luksdev = LUKSDevice("luks%d" % self.storage.nextID,
+                                                format=format,
+                                                parents=request)
+                           format = getFormat("luks",
+                                              device=self.origrequest.path,
+                                              passphrase=self.storage.encryptionPassphrase)
+                       actions.append(ActionCreateFormat(request, format))
+                       if luksdev:
+                           actions.append(ActionCreateDevice(luksdev))
+                           actions.append(ActionCreateFormat(luksdev))
+                   elif not self.fsoptionsDict["formatcb"].get_active():
+                       creates = devicetree.findActions(type="create",
+                                                        object="format",
+                                                        path=request.format.device)
+                       for action in creates:
+                           devicetree.cancelAction(action)
+
+                       request.format.exists = True
+
+                       if request.format.mountable:
+                           request.format.mountpoint = mountpoint
 
                 request.weight = self.anaconda.platform.weight(mountpoint=mountpoint,
                                                                fstype=request.format.type)
diff --git a/iw/partition_ui_helpers_gui.py b/iw/partition_ui_helpers_gui.py
index 0ad1803..2e00dc3 100644
--- a/iw/partition_ui_helpers_gui.py
+++ b/iw/partition_ui_helpers_gui.py
@@ -35,6 +35,9 @@ from storage.formats import *
 import gettext
 _ = lambda x: gettext.ldgettext("anaconda", x)
 
+FLAG_FORMAT = 1
+FLAG_MIGRATE = 2
+
 class WideCheckList(checklist.CheckList):
     def toggled_item(self, data, row):
 
@@ -231,7 +234,9 @@ def mountptchangeCB(widget, fstypecombo):
 def resizeOptionCB(widget, resizesb):
     resizesb.set_sensitive(widget.get_active())
 
-def formatOptionResizeCB(widget, resizesb):
+def formatOptionResizeCB(widget, data):
+    (resizesb, fmt) = data
+
     if widget.get_active():
         lower = 1
     else:
@@ -249,9 +254,18 @@ def formatMigrateOptionCB(widget, data):
     if not sensitive:
         return
 
-    (combowidget, mntptcombo, ofstype, lukscb, othercombo, othercb) = data
+    (combowidget, mntptcombo, fs, lukscb, othercombo, othercb, flag) = data
     combowidget.set_sensitive(widget.get_active())
 
+    if flag == FLAG_FORMAT:
+        fs.exists = not widget.get_active()
+
+        if fs.migratable and fs.exists:
+            fs.migrate = False
+    elif flag == FLAG_MIGRATE:
+        fs.exists = True
+        fs.migrate = widget.get_active()
+
     if othercb is not None:
         othercb.set_sensitive(not widget.get_active())
         othercb.set_active(False)
@@ -264,9 +278,9 @@ def formatMigrateOptionCB(widget, data):
         if not widget.get_active():
             # set "Encrypt" checkbutton to match partition's initial state
             lukscb.set_active(lukscb.get_data("encrypted"))
-            lukscb.set_sensitive(0)
+            lukscb.set_sensitive(False)
         else:
-            lukscb.set_sensitive(1)
+            lukscb.set_sensitive(True)
 
     # inject event for fstype menu
     if widget.get_active():
@@ -274,10 +288,10 @@ def formatMigrateOptionCB(widget, data):
         setMntPtComboStateFromType(fstype, mntptcombo)
         combowidget.grab_focus()
     else:
-        if isinstance(ofstype, type(ofstype)):
-            ofstype = type(ofstype)
+        if isinstance(fs, type(fs)):
+            fs = type(fs)
 
-        setMntPtComboStateFromType(ofstype, mntptcombo)
+        setMntPtComboStateFromType(fs, mntptcombo)
 
 
 def createPreExistFSOptionSection(origrequest, maintable, row, mountCombo,
@@ -303,55 +317,63 @@ def createPreExistFSOptionSection(origrequest, maintable, row, mountCombo,
     else:
         origfs = origrequest.format
 
-    formatcb = gtk.CheckButton(label=_("_Format as:"))
-    maintable.attach(formatcb, 0, 1, row, row + 1)
-    formatcb.set_active(not origfs.exists)
-    rc["formatcb"] = formatcb
-
-    fstypeCombo = createFSTypeMenu(origfs, fstypechangeCB,
-                                   mountCombo, ignorefs=ignorefs)
-    fstypeCombo.set_sensitive(formatcb.get_active())
-    maintable.attach(fstypeCombo, 1, 2, row, row + 1)
-    row += 1
-    rc["fstypeCombo"] = fstypeCombo
+    if origfs.formattable:
+        formatcb = gtk.CheckButton(label=_("_Format as:"))
+        maintable.attach(formatcb, 0, 1, row, row + 1)
+        formatcb.set_active(origfs.formattable and not origfs.exists)
+        rc["formatcb"] = formatcb
+
+        fstypeCombo = createFSTypeMenu(origfs, fstypechangeCB,
+                                       mountCombo, ignorefs=ignorefs)
+        fstypeCombo.set_sensitive(formatcb.get_active())
+        maintable.attach(fstypeCombo, 1, 2, row, row + 1)
+        row += 1
+        rc["fstypeCombo"] = fstypeCombo
+    else:
+        formatcb = None
+        fstypeCombo = None
 
     if not formatcb.get_active() and not origfs.migrate:
-	mountCombo.set_data("prevmountable", origfs.mountable)
+        mountCombo.set_data("prevmountable", origfs.mountable)
 
     # this gets added to the table a bit later on
     lukscb = gtk.CheckButton(_("_Encrypt"))
 
     if origfs.migratable:
-	migratecb = gtk.CheckButton(label=_("Mi_grate filesystem to:"))
-        migratecb.set_active(origfs.migrate)
+        migratecb = gtk.CheckButton(label=_("Mi_grate filesystem to:"))
+        if formatcb is not None:
+            migratecb.set_active(origfs.migrate and (not formatcb.get_active()))
+        else:
+            migratecb.set_active(origfs.migrate)
 
-	migtypes = [origfs.migrationTarget]
+        migtypes = [origfs.migrationTarget]
 
-	maintable.attach(migratecb, 0, 1, row, row + 1)
-	migfstypeCombo = createFSTypeMenu(origfs,
+        maintable.attach(migratecb, 0, 1, row, row + 1)
+        migfstypeCombo = createFSTypeMenu(origfs,
                                           None, None,
                                           availablefstypes = migtypes)
-	migfstypeCombo.set_sensitive(migratecb.get_active())
-	maintable.attach(migfstypeCombo, 1, 2, row, row + 1)
-	row = row + 1
+        migfstypeCombo.set_sensitive(migratecb.get_active())
+        maintable.attach(migfstypeCombo, 1, 2, row, row + 1)
+        row = row + 1
         rc["migratecb"] = migratecb
         rc["migfstypeCombo"] = migfstypeCombo
-	migratecb.connect("toggled", formatMigrateOptionCB,
+        migratecb.connect("toggled", formatMigrateOptionCB,
                           (migfstypeCombo, mountCombo, origfs, None,
-                           fstypeCombo, formatcb))
+                           fstypeCombo, formatcb, FLAG_MIGRATE))
     else:
-	migratecb = None
-	migfstypeCombo = None
+        migratecb = None
+        migfstypeCombo = None
 
-    formatcb.connect("toggled", formatMigrateOptionCB,
-                    (fstypeCombo, mountCombo, origfs, lukscb,
-                     migfstypeCombo, migratecb))
+    if formatcb:
+        formatcb.connect("toggled", formatMigrateOptionCB,
+                         (fstypeCombo, mountCombo, origfs, lukscb,
+                          migfstypeCombo, migratecb, FLAG_FORMAT))
 
     if origrequest.resizable:
         resizecb = gtk.CheckButton(label=_("_Resize"))
-        resizecb.set_active(origrequest.resizable and \
-            ((origrequest.targetSize != 0) and \
-             (origrequest.targetSize != origrequest.currentSize)))
+        resizecb.set_active(origfs.resizable and \
+                            (origfs.currentSize != origfs.targetSize) and \
+                            (origfs.currentSize != 0))
         rc["resizecb"] = resizecb
         maintable.attach(resizecb, 0, 1, row, row + 1)
 
@@ -378,7 +400,7 @@ def createPreExistFSOptionSection(origrequest, maintable, row, mountCombo,
         resizeOptionCB(resizecb, resizesb)
         row = row + 1
 
-        formatcb.connect("toggled", formatOptionResizeCB, resizesb)
+        formatcb.connect("toggled", formatOptionResizeCB, (resizesb, origfs))
 
     if luksdev:
         lukscb.set_active(1)
-- 
1.6.2

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux