[master] Make dialog return code checking more robust

Vratislav Podzimek vpodzime at redhat.com
Wed Nov 6 08:03:19 UTC 2013


On Tue, 2013-11-05 at 17:22 -0500, mulhern wrote:
> A dialog can return not only the values associated with its buttons but also
> some other values. The value that it can certainly return is -4. This value
> is most likely to occur when the user presses the escape key, and causes
> the dialog to be deleted.
> 
> In some cases this possibility is not allowed for and the wrong action is
> taken when the escape key is pressed because the code puts the unexpected
> value in an equivalence class with some button that actually causes an
> action to be taken.
> 
> The *.py files in pyanaconda were searched for occurances of the regular
> expression =.*run and nearby lines were scrutinized and corrected if
> necessary.
> 
> In general, the changes make an if condition more restrictive if the then
> branch causes an action and less restrictive if it does not.
> 
> The changes to summary.glade from a previous commit
> are reversed and custom.py
> is updated appropriately as using the ResponseType constants would
> be inconsistant with the rest of the code.
> 
> Related: rhbz#998384
> 
> Signed-off-by: mulhern <amulhern at redhat.com>
> ---
>  pyanaconda/ui/gui/spokes/custom.py         | 10 +++++-----
>  pyanaconda/ui/gui/spokes/lib/summary.glade |  4 ++--
>  pyanaconda/ui/gui/spokes/software.py       |  2 ++
>  pyanaconda/ui/gui/spokes/source.py         |  2 +-
>  pyanaconda/ui/gui/spokes/storage.py        |  4 +++-
>  pyanaconda/ui/gui/spokes/welcome.py        |  4 ++--
>  6 files changed, 15 insertions(+), 11 deletions(-)
> 
> diff --git a/pyanaconda/ui/gui/spokes/custom.py b/pyanaconda/ui/gui/spokes/custom.py
> index 7d4e025..a81c72c 100644
> --- a/pyanaconda/ui/gui/spokes/custom.py
> +++ b/pyanaconda/ui/gui/spokes/custom.py
> @@ -1869,7 +1869,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
>              dialog.refresh(self.__storage.devicetree.findActions())
>              rc = dialog.run()
>  
> -        if rc != int(Gtk.ResponseType.ACCEPT): 
> +        if rc != 1:
>              # Cancel.  Stay on the custom screen.
>              return
>  
> @@ -1882,7 +1882,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
>              with enlightbox(self.window, dialog.window):
>                  rc = dialog.run()
>  
> -            if rc == 0:
> +            if rc != 1:
>                  # Cancel. Leave the old passphrase set if there was one.
>                  return
>  
> @@ -2158,7 +2158,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
>                                 device.name, root_name)
>                  rc = dialog.run()
>  
> -                if rc == 0:
> +                if rc != 1:
>                      dialog.window.destroy()
>                      return
>  
> @@ -2211,7 +2211,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
>          with enlightbox(self.window, dialog.window):
>              rc = dialog.run()
>  
> -        if rc == 0:
> +        if rc != 1:
>              return
>  
>          disks = dialog.selected
> @@ -2260,7 +2260,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageChecker):
>              rc = dialog.run()
>              dialog.window.destroy()
>  
> -        if rc == 0:
> +        if rc != 1:
>              return
>  
>          disks = dialog.selected
> diff --git a/pyanaconda/ui/gui/spokes/lib/summary.glade b/pyanaconda/ui/gui/spokes/lib/summary.glade
> index aba4914..3d020e8 100644
> --- a/pyanaconda/ui/gui/spokes/lib/summary.glade
> +++ b/pyanaconda/ui/gui/spokes/lib/summary.glade
> @@ -197,8 +197,8 @@
>        </object>
>      </child>
>      <action-widgets>
> -      <action-widget response="-6">summaryCancelButton</action-widget>
> -      <action-widget response="-3">summaryAcceptButton</action-widget>
> +      <action-widget response="0">summaryCancelButton</action-widget>
> +      <action-widget response="1">summaryAcceptButton</action-widget>
>      </action-widgets>
>    </object>
>  </interface>
> diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
> index 6291fea..9ae146f 100644
> --- a/pyanaconda/ui/gui/spokes/software.py
> +++ b/pyanaconda/ui/gui/spokes/software.py
> @@ -426,3 +426,5 @@ class SoftwareSelectionSpoke(NormalSpoke):
>              # Send the user to the installation source spoke.
>              self.skipTo = "SourceSpoke"
>              self.window.emit("button-clicked")
> +        else:
> +            pass
> diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py
> index f9b5658..f71c80b 100644
> --- a/pyanaconda/ui/gui/spokes/source.py
> +++ b/pyanaconda/ui/gui/spokes/source.py
> @@ -237,7 +237,7 @@ class IsoChooser(GUIObject):
>  
>          # If any directory was chosen, return that.  Otherwise, return None.
>          rc = self.window.run()
> -        if rc:
> +        if rc == 1:
>              f = self._chooser.get_filename()
>              if f:
>                  retval = f.replace(constants.ISO_DIR, "")
> diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
> index fc5a7aa..6c5372c 100644
> --- a/pyanaconda/ui/gui/spokes/storage.py
> +++ b/pyanaconda/ui/gui/spokes/storage.py
> @@ -755,7 +755,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):
>  
>          dialog = PassphraseDialog(self.data)
>          rc = self.run_lightbox_dialog(dialog)
> -        if rc == 0:
> +        if rc != 1:
>              return False
>  
>          self.passphrase = dialog.passphrase
> @@ -875,6 +875,8 @@ class StorageSpoke(NormalSpoke, StorageChecker):
>              self.encrypted = dialog.encrypted
>  
>              self.skipTo = "CustomPartitioningSpoke"
> +        else:
> +            return
>  
>          self.applyOnSkip = True
>          NormalSpoke.on_back_clicked(self, button)
> diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
> index 45abe88..86296aa 100644
> --- a/pyanaconda/ui/gui/spokes/welcome.py
> +++ b/pyanaconda/ui/gui/spokes/welcome.py
> @@ -268,7 +268,7 @@ class WelcomeLanguageSpoke(LangLocaleHandler, StandaloneSpoke):
>              with enlightbox(self.window, dlg):
>                  rc = dlg.run()
>                  dlg.destroy()
> -            if rc == 0:
> +            if rc != 1:
>                  sys.exit(0)
>  
>          if productName.startswith("Red Hat Enterprise Linux") and \
> @@ -277,7 +277,7 @@ class WelcomeLanguageSpoke(LangLocaleHandler, StandaloneSpoke):
>              with enlightbox(self.window, dlg):
>                  rc = dlg.run()
>                  dlg.destroy()
> -            if rc == 0:
> +            if rc != 1:
>                  sys.exit(0)
>  
>          StandaloneSpoke._on_continue_clicked(self, cb)
ACK, thanks!

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list