I have been checking out how the new stacked window Anaconda works (very well! :)) and noticed that when the "we won't touch your other disks" labels are hidden or shown they make the other widgets jump around.
While discussing how to solve this on IRC, Halfline advised to use the GtkRevealer widget, which was introduced in GTK 3.10. Turns out Revealer works very well and fixes the issue, so thanks a lot Halfline! :)
I think there might be quite a lot of other places where we could use this widget - not only to prevent "jumping" but also to improve graphical interface feedback as Revealer support various hide/show transitions that could make stuff showing up/vanishing less visually jarring.
Martin Kolman (1): Use GtkRevealer for widget hiding in storage spoke
pyanaconda/ui/gui/spokes/storage.glade | 125 ++++++++++++++++++++------------- pyanaconda/ui/gui/spokes/storage.py | 10 +-- 2 files changed, 80 insertions(+), 55 deletions(-)
This prevents the other widgets from jumping around, which occurs when just using set_visible() and also provides a nice fade-in and fade-out effect. :)
Signed-off-by: Martin Kolman mkolman@redhat.com --- pyanaconda/ui/gui/spokes/storage.glade | 125 ++++++++++++++++++++------------- pyanaconda/ui/gui/spokes/storage.py | 10 +-- 2 files changed, 80 insertions(+), 55 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/storage.glade b/pyanaconda/ui/gui/spokes/storage.glade index 011ccdc..6074750 100644 --- a/pyanaconda/ui/gui/spokes/storage.glade +++ b/pyanaconda/ui/gui/spokes/storage.glade @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.1 --> +<!-- Generated with glade 3.18.3 --> <interface> - <requires lib="gtk+" version="3.6"/> + <requires lib="gtk+" version="3.10"/> <requires lib="AnacondaWidgets" version="1.0"/> <object class="GtkDialog" id="need_space_dialog"> <property name="can_focus">False</property> @@ -595,15 +595,24 @@ </packing> </child> <child> - <object class="GtkLabel" id="local_untouched_label"> + <object class="GtkRevealer" id="local_untouched_label_revealer"> + <property name="visible">True</property> <property name="can_focus">False</property> - <property name="no_show_all">True</property> - <property name="margin_right">18</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Disks left unselected here will not be touched.</property> - <attributes> - <attribute name="font-desc" value="Cantarell Italic 10"/> - </attributes> + <property name="transition_type">crossfade</property> + <property name="reveal_child">True</property> + <child> + <object class="GtkLabel" id="local_untouched_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="no_show_all">True</property> + <property name="margin_right">18</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Disks left unselected here will not be touched.</property> + <attributes> + <attribute name="font-desc" value="Cantarell Italic 10"/> + </attributes> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -726,15 +735,24 @@ </packing> </child> <child> - <object class="GtkLabel" id="special_untouched_label"> + <object class="GtkRevealer" id="special_untouched_label_revealer"> + <property name="visible">True</property> <property name="can_focus">False</property> - <property name="no_show_all">True</property> - <property name="margin_right">18</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Disks left unselected here will not be touched.</property> - <attributes> - <attribute name="font-desc" value="Cantarell Italic 10"/> - </attributes> + <property name="transition_type">crossfade</property> + <property name="reveal_child">True</property> + <child> + <object class="GtkLabel" id="special_untouched_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="no_show_all">True</property> + <property name="margin_right">18</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Disks left unselected here will not be touched.</property> + <attributes> + <attribute name="font-desc" value="Cantarell Italic 10"/> + </attributes> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -930,38 +948,6 @@ <property name="visible">True</property> <property name="can_focus">False</property> <child> - <object class="GtkButton" id="summary_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="no_show_all">True</property> - <property name="halign">start</property> - <property name="margin_left">18</property> - <property name="hexpand">True</property> - <property name="relief">none</property> - <property name="use_underline">True</property> - <property name="focus_on_click">False</property> - <property name="xalign">0</property> - <signal name="clicked" handler="on_summary_clicked" swapped="no"/> - <child> - <object class="GtkLabel" id="label5"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes" context="GUI|Storage">_Full disk summary and bootloader...</property> - <property name="use_underline">True</property> - <attributes> - <attribute name="underline" value="True"/> - <attribute name="foreground" value="#00000000ffff"/> - </attributes> - </object> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - </packing> - </child> - <child> <object class="GtkLabel" id="summary_label"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -978,6 +964,45 @@ <property name="top_attach">0</property> </packing> </child> + <child> + <object class="GtkRevealer" id="summary_button_revealer"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="transition_type">crossfade</property> + <property name="reveal_child">True</property> + <child> + <object class="GtkButton" id="summary_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="no_show_all">True</property> + <property name="halign">start</property> + <property name="hexpand">True</property> + <property name="relief">none</property> + <property name="use_underline">True</property> + <property name="focus_on_click">False</property> + <property name="xalign">0</property> + <signal name="clicked" handler="on_summary_clicked" swapped="no"/> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="GUI|Storage">_Full disk summary and bootloader...</property> + <property name="use_underline">True</property> + <attributes> + <attribute name="underline" value="True"/> + <attribute name="foreground" value="#00000000ffff"/> + </attributes> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index bc391c6..79bb12a 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -592,11 +592,11 @@ class StorageSpoke(NormalSpoke, StorageChecker): summary_label.set_text(summary) summary_label.set_sensitive(anySelected)
- summary_button = self.builder.get_object("summary_button") - summary_button.set_visible(anySelected) - - self.builder.get_object("local_untouched_label").set_visible(anySelected) - self.builder.get_object("special_untouched_label").set_visible(anySelected) + # only show the "we won't touch your other disks" labels and summary button when + # some disks are selected + self.builder.get_object("summary_button_revealer").set_reveal_child(anySelected) + self.builder.get_object("local_untouched_label_revealer").set_reveal_child(anySelected) + self.builder.get_object("special_untouched_label_revealer").set_reveal_child(anySelected) self.builder.get_object("other_options_label").set_sensitive(anySelected) self.builder.get_object("other_options_grid").set_sensitive(anySelected)
On Fri, 2014-07-04 at 16:34 +0200, Martin Kolman wrote:
I have been checking out how the new stacked window Anaconda works (very well! :)) and noticed that when the "we won't touch your other disks" labels are hidden or shown they make the other widgets jump around.
While discussing how to solve this on IRC, Halfline advised to use the GtkRevealer widget, which was introduced in GTK 3.10. Turns out Revealer works very well and fixes the issue, so thanks a lot Halfline! :)
I think there might be quite a lot of other places where we could use this widget - not only to prevent "jumping" but also to improve graphical interface feedback as Revealer support various hide/show transitions that could make stuff showing up/vanishing less visually jarring.
Martin Kolman (1): Use GtkRevealer for widget hiding in storage spoke
pyanaconda/ui/gui/spokes/storage.glade | 125 ++++++++++++++++++++------------- pyanaconda/ui/gui/spokes/storage.py | 10 +-- 2 files changed, 80 insertions(+), 55 deletions(-)
The patch looks good to me and the difference is really big and nice!
anaconda-patches@lists.fedorahosted.org