[gnome-games/wip/exalm/unified-window: 45/60] collection-header-bar: Merge into CollectionView
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/exalm/unified-window: 45/60] collection-header-bar: Merge into CollectionView
- Date: Fri, 10 Apr 2020 14:42:18 +0000 (UTC)
commit c9fef1511a820cc9ec0b1724cd2008a7cb1c1d12
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Fri Apr 10 03:13:09 2020 +0500
collection-header-bar: Merge into CollectionView
There's no more reason to have a separate header bar object. This allows
to finally remove the ugly bindings.
data/org.gnome.Games.gresource.xml | 1 -
data/ui/collection-header-bar.ui | 183 ------------------------------------
data/ui/collection-view.ui | 187 +++++++++++++++++++++++++++++++++++--
src/meson.build | 1 -
src/ui/collection-header-bar.vala | 64 -------------
src/ui/collection-view.vala | 65 +++++++------
6 files changed, 214 insertions(+), 287 deletions(-)
---
diff --git a/data/org.gnome.Games.gresource.xml b/data/org.gnome.Games.gresource.xml
index 68e1260b..7d9fe8d4 100644
--- a/data/org.gnome.Games.gresource.xml
+++ b/data/org.gnome.Games.gresource.xml
@@ -12,7 +12,6 @@
<file preprocess="xml-stripblanks">gesture/stick-symbolic.svg</file>
<file preprocess="xml-stripblanks">ui/application-window.ui</file>
<file preprocess="xml-stripblanks">ui/checkmark-item.ui</file>
- <file preprocess="xml-stripblanks">ui/collection-header-bar.ui</file>
<file preprocess="xml-stripblanks">ui/collection-icon-view.ui</file>
<file preprocess="xml-stripblanks">ui/collection-view.ui</file>
<file preprocess="xml-stripblanks">ui/display-box.ui</file>
diff --git a/data/ui/collection-view.ui b/data/ui/collection-view.ui
index 97f3905f..57872117 100644
--- a/data/ui/collection-view.ui
+++ b/data/ui/collection-view.ui
@@ -7,13 +7,163 @@
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="width-request">360</property>
- <signal name="notify::is-folded" handler="update_bottom_bar"/>
+ <signal name="notify::is-folded" handler="on_folded_changed"/>
<signal name="notify::is-showing-bottom-bar" handler="update_bottom_bar"/>
<signal name="notify::is-subview-open" handler="update_bottom_bar"/>
+ <signal name="notify::is-collection-empty" handler="update_adaptive_state"/>
<child>
- <object class="GamesCollectionHeaderBar" id="header_bar">
+ <object class="HdyDeck" id="deck">
<property name="visible">True</property>
- <property name="swipe-group">swipe_group</property>
+ <child>
+ <object class="HdyHeaderBar" id="header_bar">
+ <property name="visible">True</property>
+ <property name="show-close-button">True</property>
+ <property name="centering-policy">strict</property>
+ <style>
+ <class name="titlebar"/>
+ </style>
+ <child>
+ <object class="GtkButton" id="add_game">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.add-game-files</property>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-back">
+ <property name="accessible-name" translatable="yes">Add game files…</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="add_game_image">
+ <property name="visible">True</property>
+ <property name="icon-name">list-add-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkMenuButton" id="menu">
+ <property name="menu-model">primary_menu</property>
+ <!-- Translators: tooltip for the application menu button -->
+ <property name="tooltip-text" translatable="yes">Menu</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="menu_image">
+ <property name="visible">True</property>
+ <property name="icon-name">open-menu-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child type="title">
+ <object class="HdyViewSwitcherTitle" id="view_switcher_title">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Games</property>
+ <property name="stack">viewstack</property>
+ <property name="view-switcher-enabled" bind-source="GamesCollectionView"
bind-property="is-collection-empty" bind-flags="bidirectional|sync-create|invert-boolean"/>
+ <signal name="notify::title-visible" handler="update_adaptive_state"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="search">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="active" bind-source="GamesCollectionView" bind-property="search-mode"
bind-flags="bidirectional"/>
+ <property name="sensitive" bind-source="GamesCollectionView"
bind-property="is-collection-empty" bind-flags="bidirectional|invert-boolean"/>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-search">
+ <property name="accessible-name" translatable="yes">Search</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="search_image">
+ <property name="visible">True</property>
+ <property name="icon-name">edit-find-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyHeaderBar" id="subview_header_bar">
+ <property name="visible">True</property>
+ <property name="show_close_button">True</property>
+ <property name="title" bind-source="GamesCollectionView" bind-property="subview-title"
bind-flags="bidirectional"/>
+ <style>
+ <class name="titlebar"/>
+ </style>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked" handler="on_subview_back_clicked"/>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Back</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="search_subview">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="active" bind-source="GamesCollectionView" bind-property="search-mode"
bind-flags="bidirectional"/>
+ <property name="sensitive" bind-source="GamesCollectionView"
bind-property="is-collection-empty" bind-flags="bidirectional|invert-boolean"/>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Search</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">edit-find-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
</object>
</child>
<child>
@@ -112,12 +262,17 @@
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
- <property name="image">close_icon</property>
<property name="always-show-image">True</property>
<signal name="clicked" handler="on_loading_notification_closed"/>
<style>
<class name="flat"/>
</style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">window-close-symbolic</property>
+ </object>
+ </child>
</object>
</child>
<style>
@@ -137,8 +292,24 @@
</child>
</template>
<object class="HdySwipeGroup" id="swipe_group"/>
- <object class="GtkImage" id="close_icon">
- <property name="visible">True</property>
- <property name="icon-name">window-close-symbolic</property>
- </object>
+ <menu id="primary_menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Pr_eferences</attribute>
+ <attribute name="action">app.preferences</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">_Keyboard Shortcuts</attribute>
+ <attribute name="action">win.show-help-overlay</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">_Help</attribute>
+ <attribute name="action">app.help</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">_About Games</attribute>
+ <attribute name="action">app.about</attribute>
+ </item>
+ </section>
+ </menu>
</interface>
diff --git a/src/meson.build b/src/meson.build
index ecd6911e..c76cb575 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -100,7 +100,6 @@ vala_sources = [
'ui/application-window.vala',
'ui/checkmark-item.vala',
'ui/collection-icon-view.vala',
- 'ui/collection-header-bar.vala',
'ui/collection-view.vala',
'ui/display-bin.vala',
'ui/display-box.vala',
diff --git a/src/ui/collection-view.vala b/src/ui/collection-view.vala
index e8a95e33..86b1dd9e 100644
--- a/src/ui/collection-view.vala
+++ b/src/ui/collection-view.vala
@@ -6,6 +6,14 @@ private class Games.CollectionView : Gtk.Box, UiView {
public signal void game_activated (Game game);
+ [GtkChild]
+ private Hdy.Deck deck;
+ [GtkChild]
+ private Hdy.HeaderBar header_bar;
+ [GtkChild]
+ private Hdy.HeaderBar subview_header_bar;
+ [GtkChild]
+ private Hdy.ViewSwitcherTitle view_switcher_title;
[GtkChild]
private ErrorInfoBar error_info_bar;
[GtkChild]
@@ -20,12 +28,10 @@ private class Games.CollectionView : Gtk.Box, UiView {
private PlatformsView platform_view;
[GtkChild]
private Gtk.Stack empty_stack;
- [GtkChild (name = "viewstack")]
- private Gtk.Stack _viewstack;
[GtkChild]
- private Hdy.ViewSwitcherBar view_switcher_bar;
+ private Gtk.Stack viewstack;
[GtkChild]
- private CollectionHeaderBar header_bar;
+ private Hdy.ViewSwitcherBar view_switcher_bar;
[GtkChild]
private Hdy.SwipeGroup swipe_group;
@@ -33,10 +39,6 @@ private class Games.CollectionView : Gtk.Box, UiView {
get { return this; }
}
- public Gtk.Stack viewstack {
- get { return _viewstack; }
- }
-
private bool _is_view_active;
public bool is_view_active {
get { return _is_view_active; }
@@ -105,27 +107,6 @@ private class Games.CollectionView : Gtk.Box, UiView {
is_collection_empty = game_model.get_n_items () == 0;
});
- bind_property ("viewstack", header_bar,
- "viewstack", BindingFlags.SYNC_CREATE);
-
- bind_property ("search-mode", header_bar,
- "search-mode", BindingFlags.BIDIRECTIONAL);
-
- bind_property ("is-collection-empty", header_bar,
- "is-collection-empty", BindingFlags.BIDIRECTIONAL | BindingFlags.SYNC_CREATE);
-
- bind_property ("is-folded", header_bar,
- "is-folded", BindingFlags.BIDIRECTIONAL);
-
- bind_property ("is-showing-bottom-bar", header_bar,
- "is-showing-bottom-bar", BindingFlags.BIDIRECTIONAL);
-
- bind_property ("is-subview-open", header_bar,
- "is-subview-open", BindingFlags.BIDIRECTIONAL);
-
- bind_property ("subview-title", header_bar,
- "subview-title", BindingFlags.BIDIRECTIONAL);
-
konami_code = new KonamiCode (window);
konami_code.code_performed.connect (on_konami_code_performed);
}
@@ -153,7 +134,7 @@ private class Games.CollectionView : Gtk.Box, UiView {
if (((event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) &&
(((window.get_direction () == Gtk.TextDirection.LTR) && keyval == Gdk.Key.Left) ||
((window.get_direction () == Gtk.TextDirection.RTL) && keyval == Gdk.Key.Right)) &&
- header_bar.back ())
+ deck.navigate (Hdy.NavigationDirection.BACK))
return true;
if ((keyval == Gdk.Key.f || keyval == Gdk.Key.F) &&
@@ -301,8 +282,32 @@ private class Games.CollectionView : Gtk.Box, UiView {
return false;
}
+ [GtkCallback]
+ private void on_folded_changed () {
+ if (is_folded) {
+ deck.visible_child = is_subview_open ? subview_header_bar : header_bar;
+ swipe_group.add_swipeable (deck);
+ } else {
+ swipe_group.remove_swipeable (deck);
+ deck.visible_child = header_bar;
+ }
+
+ update_bottom_bar ();
+ }
+
[GtkCallback]
private void update_bottom_bar () {
view_switcher_bar.reveal = is_showing_bottom_bar && (!is_folded || !is_subview_open);
}
+
+ [GtkCallback]
+ private void update_adaptive_state () {
+ bool showing_title = view_switcher_title.title_visible;
+ is_showing_bottom_bar = showing_title && !is_collection_empty;
+ }
+
+ [GtkCallback]
+ private void on_subview_back_clicked () {
+ deck.navigate (Hdy.NavigationDirection.BACK);
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]