[PATCH] Keep selection when switching environments

Martin Kolman mkolman at redhat.com
Thu Mar 6 16:28:59 UTC 2014


When user selects an addon for an environment,
keep it selected if user switches to another
environment that also has the addon available.

Also if users deselects a default addon for an
environment, it will also be deselected when
switching to any other environment that has
the addon selected by default.

Related: rhbz#1043655
Signed-off-by: Martin Kolman <mkolman at redhat.com>
---
 pyanaconda/ui/gui/spokes/software.py | 43 +++++++++++++-----------------------
 1 file changed, 15 insertions(+), 28 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
index b21866b..6a0a23a 100644
--- a/pyanaconda/ui/gui/spokes/software.py
+++ b/pyanaconda/ui/gui/spokes/software.py
@@ -56,8 +56,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
         self._tx_id = None
         self._selectFlag = False
 
-        self.selectedGroups = []
-        self.excludedGroups = []
+        self.selectedGroups = {}
         self.environment = None
 
         # Used for detecting whether anything's changed in the spoke.
@@ -67,24 +66,25 @@ class SoftwareSelectionSpoke(NormalSpoke):
         # We need to tell the addon view whether something is a separator or not.
         self.builder.get_object("addonView").set_row_separator_func(self._addon_row_is_separator, None)
 
+        # track what addons were selected by the user so we can can check them again if user
+        # switches between environments
+        self._user_selected_addons = {}
+
     def _apply(self):
         row = self._get_selected_environment()
         if not row:
             return
 
-        addons = self._get_selected_addons()
-        for group in addons:
-            if group not in self.selectedGroups:
-              self.selectedGroups.append(group)
-
         self._selectFlag = False
         self.payload.data.packages.groupList = []
         self.payload.selectEnvironment(row[2])
         self.environment = row[2]
-        for group in self.selectedGroups:
+
+        addons = self._get_selected_addons()
+        for group in self._get_selected_addons():
             self.payload.selectGroup(group)
 
-        # And then save these values so we can check next time.
+        # save these values so we can check next time.
         self._origAddons = addons
         self._origEnvironment = self.environment
 
@@ -280,11 +280,12 @@ class SoftwareSelectionSpoke(NormalSpoke):
 
     def _addAddon(self, grp):
         (name, desc) = self.payload.groupDescription(grp)
-        # If no groups are selected, select the default groups
-        if not self._origEnvironment:
-            selected = self.payload.environmentOptionIsDefault(self.environment, grp)
+        # Check if the group has been selected or explicitly unselected
+        if grp in self.selectedGroups:
+            selected = self.selectedGroups[grp]
         else:
-            selected = grp in self.selectedGroups
+            # check if the group should be selected by default
+            selected = self.payload.environmentOptionIsDefault(self.environment, grp)
 
         self._addonStore.append([selected, "<b>%s</b>\n%s" % (name, desc), grp, False])
 
@@ -349,12 +350,6 @@ class SoftwareSelectionSpoke(NormalSpoke):
         for row in self._environmentStore:
             row[0] = False
 
-        # Then, remove all the groups that were selected by the previously
-        # selected environment.
-        for groupid in self.payload.environmentGroups(self.environment):
-            if groupid in self.selectedGroups:
-                self.selectedGroups.remove(groupid)
-
         # Then mark the clicked environment as selected and update the screen.
         self._environmentStore[path][0] = True
         self.environment = self._environmentStore[path][2]
@@ -373,15 +368,7 @@ class SoftwareSelectionSpoke(NormalSpoke):
         selected = not self._addonStore[path][0]
         group = self._addonStore[path][2]
         self._addonStore[path][0] = selected
-        if selected:
-            if group not in self.selectedGroups:
-                self.selectedGroups.append(group)
-
-            if group in self.excludedGroups:
-                self.excludedGroups.remove(group)
-
-        elif not selected and group in self.selectedGroups:
-            self.selectedGroups.remove(group)
+        self.selectedGroups[group] = selected
 
     def on_addon_view_clicked(self, view, event, *args):
         if event and not event.type in [Gdk.EventType.BUTTON_RELEASE, Gdk.EventType.KEY_RELEASE]:
-- 
1.8.5.3



More information about the anaconda-patches mailing list