[gnome-software: 3/18] gs-shell: Rework shell UI, header bars and panes
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 3/18] gs-shell: Rework shell UI, header bars and panes
- Date: Thu, 15 Apr 2021 12:54:05 +0000 (UTC)
commit d1ca7e02cfc6aca382b1f59d0482c5077a534f62
Author: Philip Withnall <pwithnall endlessos org>
Date: Wed Mar 17 15:45:43 2021 +0000
gs-shell: Rework shell UI, header bars and panes
Rework the top-level structure of the main window, adding a sidebar
(using the new `GsSidebar` widget) and split headerbar (using libhandy).
Subsequent commits will plumb more parts of this in and tidy up various
loose ends. This commit is not expected to compile or be functional by
itself.
Signed-off-by: Philip Withnall <pwithnall endlessos org>
Helps: #1111
src/gs-shell.c | 2 +
src/gs-shell.ui | 618 +++++++++++++++++++++++++++++---------------------------
2 files changed, 322 insertions(+), 298 deletions(-)
---
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 3ecf8180a..757146ac2 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -2107,6 +2107,7 @@ gs_shell_setup (GsShell *shell, GsPluginLoader *plugin_loader, GCancellable *can
gtk_accel_group_connect (accel_group, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_LOCKED, closure);
/* fix up the header bar */
+#if 0
if (gs_utils_is_current_desktop ("Unity")) {
style_context = gtk_widget_get_style_context (shell->header);
gtk_style_context_remove_class (style_context, GTK_STYLE_CLASS_TITLEBAR);
@@ -2118,6 +2119,7 @@ gs_shell_setup (GsShell *shell, GsPluginLoader *plugin_loader, GCancellable *can
gtk_window_set_titlebar (GTK_WINDOW (shell), shell->header);
g_object_unref (shell->header);
}
+#endif
/* setup buttons */
g_object_set_data (G_OBJECT (shell->button_explore),
diff --git a/src/gs-shell.ui b/src/gs-shell.ui
index d948ef089..5248cf30c 100644
--- a/src/gs-shell.ui
+++ b/src/gs-shell.ui
@@ -41,149 +41,156 @@
<signal name="key-press-event" handler="window_key_press_event" after="yes"/>
<signal name="key-press-event" handler="window_keypress_handler"/>
<signal name="button-press-event" handler="window_button_press_event" after="yes"/>
- <child>
- <object class="GtkBox" id="box1">
+
+ <child type="titlebar">
+ <object class="HdyTitleBar">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can-focus">False</property>
<child>
- <object class="GtkHeaderBar" id="header">
+ <object class="HdyLeaflet" id="header_leaflet">
<property name="visible">True</property>
- <property name="show_close_button">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="visible-child">sidebar_header</property>
+ <property name="mode-transition-duration" bind-source="main_leaflet"
bind-property="mode-transition-duration" bind-flags="bidirectional|sync-create"/>
+ <property name="child-transition-duration" bind-source="main_leaflet"
bind-property="child-transition-duration" bind-flags="bidirectional|sync-create"/>
+ <property name="transition-type" bind-source="main_leaflet" bind-property="transition-type"
bind-flags="bidirectional|sync-create"/>
<child>
- <object class="GtkButton" id="button_back">
+ <object class="GtkHeaderBar" id="sidebar_header">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <signal name="clicked" handler="gs_shell_back_button_cb"/>
- <child internal-child="accessible">
- <object class="AtkObject" id="button_back_accessible">
- <property name="accessible-name" translatable="yes">Go back</property>
+ <property name="can-focus">False</property>
+ <property name="show-close-button">True</property>
+ <property name="title" translatable="yes">Software</property>
+ <child>
+ <object class="GtkButton" id="previous_button">
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <!-- TODO <signal name="clicked" handler="previous_button_clicked_cb" object="CcWindow"
swapped="yes" /> -->
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="icon-name">go-previous-symbolic</property>
+ </object>
+ </child>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-button1"><!-- TODO -->
+ <property name="accessible-name" translatable="yes">All Settings</property>
+ </object>
+ </child>
+ <style>
+ <class name="image-button"/>
+ </style>
</object>
</child>
- <style>
- <class name="image-button"/>
- </style>
<child>
- <object class="GtkImage" id="back_image">
+ <object class="GtkToggleButton" id="search_button">
<property name="visible">True</property>
- <property name="icon_name">go-previous-symbolic</property>
- <property name="icon_size">1</property>
+ <property name="can_focus">True</property>
+ <property name="active" bind-source="search_bar" bind-property="search-mode-enabled"
bind-flags="sync-create|bidirectional" />
+ <signal name="clicked" handler="search_button_clicked_cb"/>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="search_button_accessible">
+ <property name="accessible-name" translatable="yes">Search</property>
+ </object>
+ </child>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <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>
+ <style>
+ <class name="image-button"/>
+ </style>
</object>
+ <packing>
+ <property name="pack-type">start</property>
+ </packing>
</child>
- </object>
- </child>
- <child type="title">
- <object class="GtkBox" id="title_box">
- <property name="visible">True</property>
- <property name="hexpand">False</property>
<child>
- <object class="GtkButtonBox" id="buttonbox_main">
+ <object class="GtkMenuButton" id="menu_button">
<property name="visible">True</property>
- <property name="layout_style">center</property>
- <style>
- <class name="linked"/>
- </style>
+ <property name="can_focus">True</property>
+ <property name="sensitive">True</property>
+ <property name="menu_model">primary_menu</property>
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-name" translatable="yes">Primary Menu</property>
+ </object>
+ </child>
<child>
- <object class="GtkToggleButton" id="button_explore">
+ <object class="GtkImage">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes" comments="Translators: A label for a
button to show all available software.">_Explore</property>
- <signal name="clicked" handler="gs_overview_page_button_cb"/>
- <style>
- <class name="toolbar-primary-buttons-software"/>
- </style>
+ <property name="icon_name">open-menu-symbolic</property>
+ <property name="icon_size">1</property>
</object>
</child>
+ <style>
+ <class name="image-button"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="header_separator">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <style>
+ <class name="sidebar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="navigatable">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHeaderBar" id="main_header">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="show-close-button">True</property>
+ <child>
+ <object class="GtkRevealer" id="back_revealer">
+ <property name="can_focus">False</property>
+ <property name="transition-type">crossfade</property>
+ <property name="transition-duration" bind-source="main_leaflet"
bind-property="mode-transition-duration" bind-flags="bidirectional|sync-create"/>
+ <property name="visible" bind-source="header_leaflet" bind-property="folded"
bind-flags="sync-create"/>
+ <property name="reveal-child" bind-source="header_leaflet" bind-property="folded"
bind-flags="sync-create"/>
<child>
- <object class="GtkToggleButton" id="button_installed">
+ <object class="GtkButton" id="button_back">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_overview_page_button_cb"/>
- <child>
- <object class="GtkBox" id="button_installed_box">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">fill</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="button_installed_label">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="halign">center</property>
- <property name="hexpand">True</property>
- <property name="label" translatable="yes" comments="Translators: A label for
a button to show only software which is already installed.">_Installed</property>
- <property name="mnemonic_widget">button_installed</property>
- <style>
- <class name="text-button"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="button_installed_counter">
- <property name="visible">False</property>
- <property name="width-chars">2</property>
- <property name="label" bind-source="installed_page" bind-property="counter"
bind-flags="sync-create"/>
- <signal name="notify::label" handler="counter_notify_label_cb"/>
- <style>
- <class name="counter-label"/>
- </style>
- </object>
- </child>
+ <signal name="clicked" handler="gs_shell_back_button_cb"/>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button_back_accessible">
+ <property name="accessible-name" translatable="yes">Go back</property>
</object>
</child>
<style>
- <class name="toolbar-primary-buttons-software"/>
+ <class name="image-button"/>
</style>
- </object>
- </child>
- <child>
- <object class="GtkToggleButton" id="button_updates">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_overview_page_button_cb"/>
<child>
- <object class="GtkBox" id="button_updates_box">
+ <object class="GtkImage" id="back_image">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">fill</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="button_updates_label">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="halign">center</property>
- <property name="hexpand">True</property>
- <property name="label" translatable="yes" comments="Translators: A label for
a button to show only updates which are available to install.">_Updates</property>
- <property name="mnemonic_widget">button_updates</property>
- <style>
- <class name="text-button"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="button_updates_counter">
- <property name="visible">False</property>
- <property name="width-chars">2</property>
- <property name="label" bind-source="updates_page" bind-property="counter"
bind-flags="sync-create"/>
- <signal name="notify::label" handler="counter_notify_label_cb"/>
- <style>
- <class name="counter-label"/>
- </style>
- </object>
- </child>
+ <property name="icon_name">go-previous-symbolic</property>
+ <property name="icon_size">1</property>
</object>
</child>
- <style>
- <class name="toolbar-primary-buttons-software"/>
- </style>
</object>
</child>
</object>
</child>
- <child>
+ <child type="title">
<object class="GtkLabel" id="application_details_header">
<property name="visible">True</property>
<property name="selectable">False</property>
@@ -218,242 +225,209 @@
</object>
</child>
</object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
</child>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkOverlay" id="overlay">
+ <property name="visible">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="vexpand">True</property>
+ <child type="overlay">
+ <object class="GtkRevealer" id="notification_event">
+ <property name="visible">True</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ <property name="valign">GTK_ALIGN_START</property>
<child>
- <object class="GtkToggleButton" id="search_button">
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="active" bind-source="search_bar" bind-property="search-mode-enabled"
bind-flags="sync-create|bidirectional" />
- <signal name="clicked" handler="search_button_clicked_cb"/>
- <child internal-child="accessible">
- <object class="AtkObject" id="search_button_accessible">
- <property name="accessible-name" translatable="yes">Search</property>
- </object>
- </child>
<style>
- <class name="image-button"/>
+ <class name="app-notification"/>
</style>
<child>
- <object class="GtkImage" id="search_image">
+ <object class="GtkLabel" id="label_events">
<property name="visible">True</property>
- <property name="icon_name">edit-find-symbolic</property>
- <property name="icon_size">1</property>
+ <property name="halign">start</property>
+ <property name="label">Some Title</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="max_width_chars">60</property>
+ <property name="margin_start">9</property>
+ <property name="margin_end">9</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButtonBox">
+ <property name="layout_style">end</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="button_events_sources">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Software
Repositories</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="gs_shell_plugin_events_sources_cb"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_no_space">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Examine
Disk</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="gs_shell_plugin_events_no_space_cb"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_network_settings">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Network
Settings</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="gs_shell_plugin_events_network_settings_cb"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_restart_required">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">Restart
Now</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="gs_shell_plugin_events_restart_required_cb"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_events_more_info">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes" comments="button in the info bar">More
Information</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="gs_shell_plugin_events_more_info_cb"/>
+ </object>
+ </child>
</object>
</child>
- </object>
- <packing>
- <property name="pack-type">start</property>
- </packing>
- </child>
- <child>
- <object class="GtkMenuButton" id="menu_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="sensitive">True</property>
- <property name="menu_model">primary_menu</property>
<child>
- <object class="GtkImage">
+ <object class="GtkButton" id="button_events_dismiss">
<property name="visible">True</property>
- <property name="icon_name">open-menu-symbolic</property>
- <property name="icon_size">1</property>
+ <property name="valign">start</property>
+ <signal name="clicked" handler="gs_shell_plugin_event_dismissed_cb"/>
+ <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>
</object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSearchBar" id="search_bar">
- <property name="visible">True</property>
- <child>
- <object class="GtkSearchEntry" id="entry_search">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="activates_default">True</property>
- <property name="width_request">500</property>
- <property name="max_length">100</property>
- <property name="hexpand">True</property>
- <property name="halign">center</property>
- <signal name="search-changed" handler="search_changed_handler"/>
- </object>
</child>
</object>
</child>
<child>
- <object class="GtkOverlay" id="overlay">
+ <object class="HdyLeaflet" id="main_leaflet">
<property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">fill</property>
- <property name="vexpand">True</property>
- <child type="overlay">
- <object class="GtkRevealer" id="notification_event">
+ <property name="can-focus">False</property>
+ <property name="visible-child">main_box</property>
+ <property name="transition-type">slide</property>
+ <signal name="notify::folded" handler="on_main_leaflet_folded_changed_cb" object="CcWindow"
swapped="yes" />
+
+ <child>
+ <object class="GtkBox" id="sidebar_box">
<property name="visible">True</property>
- <property name="halign">GTK_ALIGN_CENTER</property>
- <property name="valign">GTK_ALIGN_START</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkBox">
- <property name="orientation">horizontal</property>
- <property name="spacing">6</property>
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="width-request">200</property>
+ <property name="hscrollbar_policy">never</property>
<style>
- <class name="app-notification"/>
+ <class name="view"/>
</style>
<child>
- <object class="GtkLabel" id="label_events">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="label">Some Title</property>
- <property name="wrap">True</property>
- <property name="wrap_mode">word-char</property>
- <property name="max_width_chars">60</property>
- <property name="margin_start">9</property>
- <property name="margin_end">9</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkButtonBox">
- <property name="layout_style">end</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkButton" id="button_events_sources">
- <property name="visible">False</property>
- <property name="label" translatable="yes" comments="button in the info
bar">Software Repositories</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_shell_plugin_events_sources_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_events_no_space">
- <property name="visible">False</property>
- <property name="label" translatable="yes" comments="button in the info
bar">Examine Disk</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_shell_plugin_events_no_space_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_events_network_settings">
- <property name="visible">False</property>
- <property name="label" translatable="yes" comments="button in the info
bar">Network Settings</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_shell_plugin_events_network_settings_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_events_restart_required">
- <property name="visible">False</property>
- <property name="label" translatable="yes" comments="button in the info
bar">Restart Now</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_shell_plugin_events_restart_required_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_events_more_info">
- <property name="visible">False</property>
- <property name="label" translatable="yes" comments="button in the info bar">More
Information</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <signal name="clicked" handler="gs_shell_plugin_events_more_info_cb"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_events_dismiss">
+ <object class="GsSidebar" id="sidebar">
<property name="visible">True</property>
- <property name="valign">start</property>
- <signal name="clicked" handler="gs_shell_plugin_event_dismissed_cb"/>
- <style>
- <class name="flat"/>
- </style>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon_name">window-close-symbolic</property>
+ <property name="can-focus">True</property>
+ <property name="stack">stack_main</property>
+ <!-- TODO <property name="search-mode" bind-source="search_bar"
bind-property="search-mode-enabled" bind-flags="bidirectional" />
+ <property name="search-query" bind-source="search_entry" bind-property="text"
bind-flags="default" />-->
+ <!-- TODO <signal name="show-panel" handler="show_panel_cb" object="CcWindow"
swapped="yes" />-->
+ <child internal-child="accessible">
+ <object class="AtkObject">
+ <property name="accessible-description" translatable="yes">Navigation
sidebar</property>
</object>
</child>
</object>
</child>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
</child>
<child>
- <object class="HdyLeaflet" id="main_leaflet">
+ <object class="GtkSeparator" id="panel_separator">
<property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="transition-type">slide</property>
- <signal name="notify::folded" handler="on_main_leaflet_folded_changed_cb" object="CcWindow"
swapped="yes" />
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <style>
+ <class name="sidebar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="navigatable">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <object class="GtkBox" id="main_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkBox" id="sidebar_box">
+ <object class="GtkSearchBar" id="search_bar">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">False</property>
- <property name="orientation">vertical</property>
<child>
- <object class="GtkScrolledWindow">
+ <object class="GtkSearchEntry" id="entry_search">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="vexpand">True</property>
- <property name="width-request">200</property>
- <property name="hscrollbar_policy">never</property>
- <style>
- <class name="view"/>
- </style>
- <child>
- <object class="GsSidebar" id="sidebar">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <!-- TODO <property name="search-mode" bind-source="search_bar"
bind-property="search-mode-enabled" bind-flags="bidirectional" />
- <property name="search-query" bind-source="search_entry" bind-property="text"
bind-flags="default" />-->
- <!-- TODO <signal name="show-panel" handler="show_panel_cb" object="CcWindow"
swapped="yes" />-->
- <child internal-child="accessible">
- <object class="AtkObject">
- <property name="accessible-description" translatable="yes">Navigation
sidebar</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="activates_default">True</property>
+ <property name="width_request">500</property>
+ <property name="max_length">100</property>
+ <property name="hexpand">True</property>
+ <property name="halign">center</property>
+ <signal name="search-changed" handler="search_changed_handler"/>
</object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
</child>
</object>
</child>
- <child>
- <object class="GtkSeparator" id="panel_separator">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <style>
- <class name="sidebar"/>
- </style>
- </object>
- </child>
-
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
-
<child>
<object class="GtkInfoBar" id="metered_updates_bar">
<property name="visible">True</property>
@@ -517,6 +491,8 @@
</object>
<packing>
<property name="name">overview</property>
+ <property name="title" translatable="yes" comments="Translators: A label for a
button to show all available software.">_Explore</property>
+ <property name="icon-name">non-starred-symbolic</property>
</packing>
</child>
<child>
@@ -525,6 +501,8 @@
</object>
<packing>
<property name="name">installed</property>
+ <property name="title" translatable="yes" comments="Translators: A label for a
button to show only software which is already installed.">_Installed</property>
+ <property name="icon-name">view-list-symbolic</property>
</packing>
</child>
<child>
@@ -558,6 +536,8 @@
</object>
<packing>
<property name="name">updates</property>
+ <property name="title" translatable="yes" comments="Translators: A label for a
button to show only updates which are available to install.">_Updates</property>
+ <property name="icon-name">view-refresh-symbolic</property>
</packing>
</child>
@@ -588,14 +568,56 @@
</child>
</object>
</child>
- </object>
- </child>
+ <child>
+ <object class="HdyViewSwitcher" id="sidebar_switcher">
+ <property name="visible" bind-source="header_leaflet" bind-property="folded"
bind-flags="sync-create"/>
+ <property name="can-focus">True</property>
+ <property name="stack">stack_main</property>
+ <property name="policy">HDY_VIEW_SWITCHER_POLICY_NARROW</property>
+ </object>
+ </child>
</object>
</child>
+
</object>
</child>
</object>
</child>
</template>
+
+ <object class="HdyHeaderGroup">
+ <property name="decorate-all" bind-source="main_leaflet" bind-property="folded"
bind-flags="sync-create"/>
+ <headerbars>
+ <headerbar name="sidebar_header"/>
+ <headerbar name="main_header"/>
+ </headerbars>
+ </object>
+
+ <!-- Synchronize width of sidebar widgets -->
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="sidebar_header"/>
+ <widget name="sidebar_box"/>
+ </widgets>
+ </object>
+
+ <!-- Synchronize separators -->
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="header_separator"/>
+ <widget name="panel_separator"/>
+ </widgets>
+ </object>
+
+ <!-- Synchronize width of main widgets -->
+ <object class="GtkSizeGroup">
+ <property name="mode">horizontal</property>
+ <widgets>
+ <widget name="main_header"/>
+ <widget name="main_box"/>
+ </widgets>
+ </object>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]