[PATCH f19-branch] Network spoke: improve Add bond/vlan device dialog behaviour

Vratislav Podzimek vpodzime at redhat.com
Mon Jun 17 08:42:16 UTC 2013


> 
> ______________________________________________________________________
> Make add bond/vlan dialog modal and decorated. I don't want to use lightbox
> here because in the next step nm-c-e window is open which we don't lightbox.
> One of reasons for this is nmce (a separate process) dialog window stacking
> problems - see bug #972959.  I address the stacking problem here in a similar
> way as in the #972959 - by killing hidden nm-c-e on following (Add device) try.
> 
> old behaviour:
> 
> http://rvykydal.fedorapeople.org/current_add_device.webm
> 
> - the Add device dialog is not modal
> - the Add device dialog looks bad with no decoration without lightbox
> - if following nm-c-e dialog is hidden (click on spoke/hub), there
>   is no remedy (+ button is insensitive)
> 
> new behaviour:
> 
> http://rvykydal.fedorapeople.org/patched_add_device.webm
> 
> - if nm-c-e is hidden, another click on + button to start adding device
>   again is possible
> ---
>  pyanaconda/ui/gui/spokes/network.glade |  2 +-
>  pyanaconda/ui/gui/spokes/network.py    | 18 ++++++++++++------
>  2 files changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/pyanaconda/ui/gui/spokes/network.glade b/pyanaconda/ui/gui/spokes/network.glade
> index 4e1ac74..e2bc72f 100644
> --- a/pyanaconda/ui/gui/spokes/network.glade
> +++ b/pyanaconda/ui/gui/spokes/network.glade
> @@ -6,8 +6,8 @@
>      <property name="can_focus">False</property>
>      <property name="border_width">5</property>
>      <property name="title" translatable="yes">Add device</property>
> +    <property name="modal">True</property>
>      <property name="type_hint">dialog</property>
> -    <property name="decorated">False</property>
>      <child internal-child="vbox">
>        <object class="GtkBox" id="dialog-vbox1">
>          <property name="can_focus">False</property>
> diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py
> index e6371b7..56fb0cb 100644
> --- a/pyanaconda/ui/gui/spokes/network.py
> +++ b/pyanaconda/ui/gui/spokes/network.py
> @@ -222,10 +222,11 @@ class NetworkControlBox(object):
>          NetworkManager.DeviceType.VLAN,
>      ]
>  
> -    def __init__(self, builder):
> +    def __init__(self, builder, spoke=None):
>  
>          self.builder = builder
>          self._running_nmce = None
> +        self.spoke = spoke
>  
>          # button for creating of virtual bond and vlan devices
>          self.builder.get_object("add_toolbutton").set_sensitive(True)
> @@ -519,6 +520,8 @@ class NetworkControlBox(object):
>  
>      def on_add_device_clicked(self, *args):
>          dialog = self.builder.get_object("add_device_dialog")
> +        if self.spoke:
> +            dialog.set_transient_for(self.spoke.window)
>          rc = dialog.run()
>          dialog.hide()
>          if rc == 1:
> @@ -529,14 +532,17 @@ class NetworkControlBox(object):
>  
>      def add_device(self, type):
>          log.info("network: adding device of type %s" % type)
> -        self.builder.get_object("add_toolbutton").set_sensitive(False)
> +        self.kill_nmce(msg="Add device button clicked")
>          proc = subprocess.Popen(["nm-connection-editor", "--create", "--type=%s" % type])
> +        self._running_nmce = proc
>  
>          GLib.child_watch_add(proc.pid, self.on_nmce_adding_exited)
>  
>      def on_nmce_adding_exited(self, pid, condition):
> -        self.builder.get_object("add_toolbutton").set_sensitive(True)
> -        network.logIfcfgFiles("nm-c-e run")
> +        if condition == 0:
> +            if self._running_nmce and self._running_nmce.pid == pid:
> +                self._running_nmce = None
> +            network.logIfcfgFiles("nm-c-e run")
>  
>      def selected_device(self):
>          selection = self.builder.get_object("treeview_devices").get_selection()
> @@ -1106,7 +1112,7 @@ class NetworkSpoke(NormalSpoke):
>  
>      def __init__(self, *args, **kwargs):
>          NormalSpoke.__init__(self, *args, **kwargs)
> -        self.network_control_box = NetworkControlBox(self.builder)
> +        self.network_control_box = NetworkControlBox(self.builder, spoke=self)
>          self.network_control_box.hostname = self.data.network.hostname
>          self.network_control_box.client.connect("notify::%s" %
>                                                  NMClient.CLIENT_STATE,
> @@ -1248,7 +1254,7 @@ class NetworkStandaloneSpoke(StandaloneSpoke):
>  
>      def __init__(self, *args, **kwargs):
>          StandaloneSpoke.__init__(self, *args, **kwargs)
> -        self.network_control_box = NetworkControlBox(self.builder)
> +        self.network_control_box = NetworkControlBox(self.builder, spoke=self)
>          self.network_control_box.hostname = self.data.network.hostname
>          parent = self.builder.get_object("AnacondaStandaloneWindow-action_area5")
>          parent.add(self.network_control_box.vbox)
> -- 
> 1.7.11.7
> 
Looks good to me.

-- 
Vratislav Podzimek

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



More information about the anaconda-patches mailing list