[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