[f21/master] Set widgets to be focused when entering a spoke. (#1121285)

Vratislav Podzimek vpodzime at redhat.com
Tue Jul 22 07:07:51 UTC 2014


On Mon, 2014-07-21 at 15:23 -0400, David Shea wrote:
> Defining the spokes and hubs in glade files without toplevels and then
> putting them into a container breaks gtk's usual default focus behavior
> along with the explicit has_focus that we had defined in the welcome
> spoke. To work around gtk having 17 words for "focus" and yet not having
> a way to say that the default thing in a container's child should grab
> the focus, define in python which widgets to focus and grab the focus
> for them during the GtkStack transitions.
> ---
>  pyanaconda/ui/gui/__init__.py           | 11 +++++++++++
>  pyanaconda/ui/gui/spokes/langsupport.py |  1 +
>  pyanaconda/ui/gui/spokes/password.py    |  1 +
>  pyanaconda/ui/gui/spokes/user.py        |  1 +
>  pyanaconda/ui/gui/spokes/welcome.glade  |  1 -
>  pyanaconda/ui/gui/spokes/welcome.py     |  1 +
>  6 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py
> index ecc12d5..6364f54 100644
> --- a/pyanaconda/ui/gui/__init__.py
> +++ b/pyanaconda/ui/gui/__init__.py
> @@ -68,6 +68,8 @@ class GUIObject(common.UIObject):
>         mainWidgetName   -- The name of the top-level widget this object
>                             object implements.  This will be the widget searched
>                             for in uiFile by the window property.
> +       focusWidgetName  -- The name of the widget to focus when the object is entered,
> +                           or None.
>         uiFile           -- The location of an XML file that describes the layout
>                             of widgets shown by this object.  UI files are
>                             searched for relative to the same directory as this
> @@ -81,6 +83,12 @@ class GUIObject(common.UIObject):
>      """
>      builderObjects = []
>      mainWidgetName = None
> +
> +    # Since many of the builder files do not define top-level widgets, the usual
> +    # {get,can,is,has}_{focus,default} properties don't work real good. Define the
> +    # widget to be focused in python, instead.
> +    focusWidgetName = None
> +
>      uiFile = ""
>      translationDomain = "anaconda"
>  
> @@ -344,6 +352,9 @@ class MainWindow(Gtk.Window):
>  
>          self._stack.set_visible_child(child.window)
>  
> +        if child.focusWidgetName:
> +            child.builder.get_object(child.focusWidgetName).grab_focus()
> +
>      def setCurrentAction(self, standalone):
>          """Set the current standalone widget.
>  
> diff --git a/pyanaconda/ui/gui/spokes/langsupport.py b/pyanaconda/ui/gui/spokes/langsupport.py
> index 00f6451..218a734 100644
> --- a/pyanaconda/ui/gui/spokes/langsupport.py
> +++ b/pyanaconda/ui/gui/spokes/langsupport.py
> @@ -39,6 +39,7 @@ __all__ = ["LangsupportSpoke"]
>  class LangsupportSpoke(LangLocaleHandler, NormalSpoke):
>      builderObjects = ["languageStore", "languageStoreFilter", "localeStore", "langsupportWindow"]
>      mainWidgetName = "langsupportWindow"
> +    focusWidgetName = "languageEntry"
>      uiFile = "spokes/langsupport.glade"
>  
>      category = LocalizationCategory
> diff --git a/pyanaconda/ui/gui/spokes/password.py b/pyanaconda/ui/gui/spokes/password.py
> index fb88b5b..ee2da7d 100644
> --- a/pyanaconda/ui/gui/spokes/password.py
> +++ b/pyanaconda/ui/gui/spokes/password.py
> @@ -41,6 +41,7 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
>      builderObjects = ["passwordWindow"]
>  
>      mainWidgetName = "passwordWindow"
> +    focusWidgetName = "pw"
>      uiFile = "spokes/password.glade"
>  
>      category = UserSettingsCategory
> diff --git a/pyanaconda/ui/gui/spokes/user.py b/pyanaconda/ui/gui/spokes/user.py
> index 654a647..a9fbe6a 100644
> --- a/pyanaconda/ui/gui/spokes/user.py
> +++ b/pyanaconda/ui/gui/spokes/user.py
> @@ -202,6 +202,7 @@ class UserSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler):
>      builderObjects = ["userCreationWindow"]
>  
>      mainWidgetName = "userCreationWindow"
> +    focusWidgetName = "t_fullname"
>      uiFile = "spokes/user.glade"
>  
>      category = UserSettingsCategory
> diff --git a/pyanaconda/ui/gui/spokes/welcome.glade b/pyanaconda/ui/gui/spokes/welcome.glade
> index 7bfb673..0516496 100644
> --- a/pyanaconda/ui/gui/spokes/welcome.glade
> +++ b/pyanaconda/ui/gui/spokes/welcome.glade
> @@ -319,7 +319,6 @@
>                        <object class="GtkEntry" id="languageEntry">
>                          <property name="visible">True</property>
>                          <property name="can_focus">True</property>
> -                        <property name="has_focus">True</property>
>                          <property name="valign">start</property>
>                          <property name="invisible_char">●</property>
>                          <property name="secondary_icon_name">edit-clear-symbolic</property>
> diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
> index 5995bbd..c04865a 100644
> --- a/pyanaconda/ui/gui/spokes/welcome.py
> +++ b/pyanaconda/ui/gui/spokes/welcome.py
> @@ -46,6 +46,7 @@ __all__ = ["WelcomeLanguageSpoke"]
>  
>  class WelcomeLanguageSpoke(LangLocaleHandler, StandaloneSpoke):
>      mainWidgetName = "welcomeWindow"
> +    focusWidgetName = "languageEntry"
>      uiFile = "spokes/welcome.glade"
>      builderObjects = ["languageStore", "languageStoreFilter", "localeStore",
>                        "welcomeWindow", "betaWarnDialog", "unsupportedHardwareDialog"]
ACK.

-- 
Vratislav Podzimek

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




More information about the anaconda-patches mailing list