[gnome-software: 64/110] Declare GtkStack pages with GtkStackPage
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 64/110] Declare GtkStack pages with GtkStackPage
- Date: Tue, 5 Oct 2021 20:32:38 +0000 (UTC)
commit ef233ce128666283e2e88c75b43b5fd18355e2ce
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Wed Aug 25 11:57:03 2021 -0300
Declare GtkStack pages with GtkStackPage
GtkStack now needs to have each page declared as a separate
GtkStackPage child. So code that used to look like this:
<object class="GtkStack">
<child>
<object class="..." />
<packing>
<property name="name">foo</property>
</packing>
</child>
</object>
now looks like this:
<child>
<object class="GtkStackPage">
<property name="name">foo</property>
<property name="child">
<object class="..." />
</property>
</object>
</child>
(Sorry, this commit's diff looks insane due to reindenting
the UI files :[ )
src/gs-app-tile.ui | 203 +++---
src/gs-details-page.ui | 1584 +++++++++++++++++++++--------------------
src/gs-extras-page.ui | 207 +++---
src/gs-feature-tile.ui | 105 +--
src/gs-installed-page.ui | 201 +++---
src/gs-moderate-page.ui | 128 ++--
src/gs-overview-page.ui | 396 ++++++-----
src/gs-progress-button.ui | 25 +-
src/gs-repos-dialog.ui | 57 +-
src/gs-screenshot-carousel.ui | 244 ++++---
src/gs-screenshot-image.ui | 86 ++-
src/gs-search-page.ui | 107 +--
src/gs-shell.ui | 735 +++++++++----------
src/gs-summary-tile.ui | 191 ++---
src/gs-update-dialog.ui | 86 ++-
src/gs-updates-page.ui | 398 ++++++-----
src/gs-updates-section.ui | 70 +-
17 files changed, 2504 insertions(+), 2319 deletions(-)
---
diff --git a/src/gs-app-tile.ui b/src/gs-app-tile.ui
index 167db8a19..e7223c419 100644
--- a/src/gs-app-tile.ui
+++ b/src/gs-app-tile.ui
@@ -13,121 +13,128 @@
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
+
<child>
- <object class="GtkImage" id="waiting">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="pixel-size">16</property>
- <property name="icon-name">content-loading-symbolic</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">waiting</property>
- </packing>
- </child>
- <child>
- <object class="GtkOverlay" id="overlay">
- <property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">fill</property>
- <child type="overlay">
- <object class="GtkEventBox" id="eventbox">
- <property name="visible">False</property>
- <property name="no_show_all">True</property>
- <property name="visible_window">True</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
- <property name="margin-top">58</property>
- <property name="margin-start">12</property>
+ <property name="child">
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
<style>
- <class name="installed-overlay-box"/>
+ <class name="dim-label"/>
</style>
- <child>
- <object class="GtkLabel" id="installed-label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Installed</property>
- <property name="margin-start">16</property>
- <property name="margin-end">16</property>
- <property name="margin-top">4</property>
- <property name="margin-bottom">4</property>
- </object>
- </child>
</object>
- </child>
- <child>
- <object class="GtkGrid" id="grid">
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">content</property>
+ <property name="child">
+ <object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
- <property name="margin-top">14</property>
- <property name="margin-bottom">15</property>
- <property name="margin-start">17</property>
- <property name="margin-end">17</property>
- <property name="row-spacing">3</property>
- <property name="column-spacing">12</property>
- <child>
- <object class="GtkImage" id="image">
- <property name="visible">True</property>
- <property name="width-request">64</property>
- <property name="height-request">64</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child type="overlay">
+ <object class="GtkEventBox" id="eventbox">
+ <property name="visible">False</property>
+ <property name="no_show_all">True</property>
+ <property name="visible_window">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin-top">58</property>
+ <property name="margin-start">12</property>
<style>
- <class name="icon-dropshadow"/>
+ <class name="installed-overlay-box"/>
</style>
+ <child>
+ <object class="GtkLabel" id="installed-label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Installed</property>
+ <property name="margin-start">16</property>
+ <property name="margin-end">16</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
+ </object>
+ </child>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- <property name="width">1</property>
- <property name="height">3</property>
- </packing>
</child>
<child>
- <object class="GtkLabel" id="name">
+ <object class="GtkGrid" id="grid">
<property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0.0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- <style>
- <class name="app-tile-label"/>
- </style>
+ <property name="margin-top">14</property>
+ <property name="margin-bottom">15</property>
+ <property name="margin-start">17</property>
+ <property name="margin-end">17</property>
+ <property name="row-spacing">3</property>
+ <property name="column-spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="summary">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.0</property>
+ <property name="lines">2</property>
+ <property name="vexpand">True</property>
+ <property name="single-line-mode">True</property>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="summary">
- <property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0.0</property>
- <property name="yalign">0.0</property>
- <property name="lines">2</property>
- <property name="vexpand">True</property>
- <property name="single-line-mode">True</property>
- <style>
- <class name="app-tile-label"/>
- </style>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">content</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-details-page.ui b/src/gs-details-page.ui
index 9840f1f27..f4a338ba8 100644
--- a/src/gs-details-page.ui
+++ b/src/gs-details-page.ui
@@ -9,550 +9,559 @@
<child>
<object class="GtkStack" id="stack_details">
<property name="visible">True</property>
+
<child>
- <object class="GtkBox" id="details_spinner_box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkSpinner" id="spinner_details">
+ <object class="GtkStackPage">
+ <property name="name">spinner</property>
+ <property name="child">
+ <object class="GtkBox" id="details_spinner_box">
<property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner_details">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="loading_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Loading application details…</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
</object>
- </child>
- <child>
- <object class="GtkLabel" id="loading_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Loading application details…</property>
- <attributes>
- <attribute name="scale" value="1.4"/>
- </attributes>
- </object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">spinner</property>
- </packing>
</child>
+
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow_details">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <object class="GtkViewport" id="viewport1">
+ <object class="GtkStackPage">
+ <property name="name">ready</property>
+ <property name="child">
+ <object class="GtkScrolledWindow" id="scrolledwindow_details">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
<child>
- <object class="GtkBox">
- <property name="orientation">vertical</property>
+ <object class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<child>
- <object class="GtkInfoBar" id="translation_infobar">
- <property name="revealed">False</property>
- <property name="show-close-button">False</property>
- <property name="spacing">12</property>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
<property name="visible">True</property>
- <signal name="response" handler="gs_details_page_translation_infobar_response_cb"/>
- <child internal-child="content_area">
- <object class="GtkBox">
- <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkInfoBar" id="translation_infobar">
+ <property name="revealed">False</property>
+ <property name="show-close-button">False</property>
+ <property name="spacing">12</property>
<property name="visible">True</property>
- <child type="center">
- <object class="GtkLabel" id="translation_infobar_label">
- <property name="hexpand">True</property>
- <property name="label" translatable="yes">This software is not available in
your language and will appear in US English.</property>
- <property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="xalign">0</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="translation_infobar_button">
- <property name="label" translatable="yes">Help _Translate</property>
- <property name="use-underline">True</property>
+ <signal name="response"
handler="gs_details_page_translation_infobar_response_cb"/>
+ <child internal-child="content_area">
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
<property name="visible">True</property>
+ <child type="center">
+ <object class="GtkLabel" id="translation_infobar_label">
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">This software is not available
in your language and will appear in US English.</property>
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="translation_infobar_button">
+ <property name="label" translatable="yes">Help _Translate</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
</child>
+ <action-widgets>
+ <action-widget
response="GTK_RESPONSE_OK">translation_infobar_button</action-widget>
+ </action-widgets>
</object>
</child>
- <action-widgets>
- <action-widget
response="GTK_RESPONSE_OK">translation_infobar_button</action-widget>
- </action-widgets>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="box_details">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <property name="spacing">18</property>
- <property name="hexpand">False</property>
- <style>
- <class name="details-page"/>
- </style>
<child>
- <object class="AdwClamp">
+ <object class="GtkBox" id="box_details">
+ <property name="orientation">vertical</property>
<property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="spacing">18</property>
+ <property name="hexpand">False</property>
+ <style>
+ <class name="details-page"/>
+ </style>
<child>
- <object class="GtkBox" id="box_details_header">
- <property name="orientation">horizontal</property>
+ <object class="AdwClamp">
<property name="visible">True</property>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GtkImage" id="application_details_icon">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="pixel_size">128</property>
- <style>
- <class name="icon-dropshadow"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="box_details_header_not_icon">
+ <object class="GtkBox" id="box_details_header">
<property name="orientation">horizontal</property>
<property name="visible">True</property>
- <property name="margin-top">6</property>
- <property name="spacing">6</property>
<child>
- <object class="GtkBox" id="box_details_header2">
- <property name="orientation">vertical</property>
+ <object class="GtkImage" id="application_details_icon">
<property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">center</property>
+ <property name="halign">start</property>
+ <property name="pixel_size">128</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box_details_header_not_icon">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="margin-top">6</property>
<property name="spacing">6</property>
<child>
- <object class="GtkLabel" id="application_details_title">
+ <object class="GtkBox" id="box_details_header2">
+ <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="halign">fill</property>
- <property name="valign">start</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">20</property>
- <style>
- <class name="app-title"/>
- <class name="title-1"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible" bind-source="developer_name_label"
bind-property="visible" bind-flags="sync-create"/>
- <property name="hexpand">True</property>
- <property name="spacing">3</property>
- <property name="orientation">horizontal</property>
+ <property name="valign">center</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkLabel" id="developer_name_label">
+ <object class="GtkLabel" id="application_details_title">
<property name="visible">True</property>
- <property name="ellipsize">end</property>
- <!-- This is a placeholder; the real value is set in code -->
- <property name="label">Yorba</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="max-width-chars">100</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
<property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="hexpand">False</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">20</property>
<style>
- <class name="app-developer"/>
- <class name="dim-label"/>
+ <class name="app-title"/>
+ <class name="title-1"/>
</style>
</object>
</child>
<child>
- <object class="GtkImage" id="developer_verified_image">
+ <object class="GtkBox">
+ <property name="visible" bind-source="developer_name_label"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="hexpand">True</property>
+ <property name="spacing">3</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkLabel" id="developer_name_label">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <!-- This is a placeholder; the real value is set in
code -->
+ <property name="label">Yorba</property>
+ <property name="wrap">False</property>
+ <property name="selectable">True</property>
+ <property name="max-width-chars">100</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="hexpand">False</property>
+ <style>
+ <class name="app-developer"/>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="developer_verified_image">
+ <property name="visible">True</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">emblem-ok-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="star_box">
<property name="visible">True</property>
- <property name="pixel-size">16</property>
- <property name="icon-name">emblem-ok-symbolic</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GsStarWidget" id="star">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="icon-size">16</property>
+ <child>
+ <object class="GtkGestureClick">
+ <!-- GDK_BUTTON_PRIMARY -->
+ <property name="button">1</property>
+ <signal name="pressed"
handler="gs_details_page_star_pressed_cb" object="GsDetailsPage" swapped="no" />
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_review_count">
+ <property name="visible">True</property>
+ <property name="margin_start">5</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
+
<child>
- <object class="GtkBox" id="star_box">
+ <object class="GtkBox" id="box_install_remove">
<property name="visible">True</property>
- <property name="valign">start</property>
+ <property name="spacing">9</property>
<child>
- <object class="GsStarWidget" id="star">
- <property name="visible">True</property>
+ <object class="GtkButton" id="button_install">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Install</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
<property name="halign">start</property>
<property name="valign">center</property>
- <property name="icon-size">16</property>
- <child>
- <object class="GtkGestureClick">
- <!-- GDK_BUTTON_PRIMARY -->
- <property name="button">1</property>
- <signal name="pressed"
handler="gs_details_page_star_pressed_cb" object="GsDetailsPage" swapped="no" />
- </object>
- </child>
+ <signal name="clicked"
handler="gs_details_page_app_install_button_cb"/>
+ <style>
+ <class name="suggested-action"/>
+ </style>
</object>
</child>
<child>
- <object class="GtkLabel" id="label_review_count">
+ <object class="GtkButton" id="button_details_launch">
<property name="visible">True</property>
- <property name="margin_start">5</property>
- <property name="halign">start</property>
+ <property name="can_focus">True</property>
+ <!-- TRANSLATORS: A label for a button to execute the
selected application. -->
+ <property name="label" translatable="yes">_Open</property>
+ <property name="use_underline">True</property>
<property name="valign">center</property>
+ <signal name="clicked"
handler="gs_details_page_app_launch_button_cb"/>
<style>
- <class name="dim-label"/>
+ <class name="suggested-action"/>
</style>
</object>
</child>
- </object>
- </child>
- </object>
- </child>
-
- <child>
- <object class="GtkBox" id="box_install_remove">
- <property name="visible">True</property>
- <property name="spacing">9</property>
- <child>
- <object class="GtkButton" id="button_install">
- <property name="visible">False</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes">_Install</property>
- <property name="width_request">105</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="halign">start</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_install_button_cb"/>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_details_launch">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <!-- TRANSLATORS: A label for a button to execute the selected
application. -->
- <property name="label" translatable="yes">_Open</property>
- <property name="use_underline">True</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_launch_button_cb"/>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_update">
- <property name="visible">False</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes">_Update</property>
- <property name="width_request">105</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="halign">start</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_update_button_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_remove">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="halign">start</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_remove_button_cb"/>
<child>
- <object class="GtkImage">
- <property name="icon-name">user-trash-symbolic</property>
- <property name="visible">True</property>
+ <object class="GtkButton" id="button_update">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Update</property>
+ <property name="width_request">105</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <signal name="clicked"
handler="gs_details_page_app_update_button_cb"/>
</object>
</child>
- <accessibility>
- <!-- TRANSLATORS: button text in the header when an
application can be erased -->
- <property name="label" translatable="yes">Uninstall</property>
- </accessibility>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible" bind-source="button_cancel"
bind-property="visible" bind-flags="sync-create"/>
- <property name="spacing">3</property>
- <property name="orientation">vertical</property>
- <property name="valign">fill</property>
- <child type="center">
- <object class="GsProgressButton" id="button_cancel">
+ <child>
+ <object class="GtkButton" id="button_remove">
<property name="visible">False</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes">_Cancel</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="halign">start</property>
<property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_cancel_button_cb"/>
- <style>
- <class name="list-button"/>
- </style>
+ <signal name="clicked"
handler="gs_details_page_app_remove_button_cb"/>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">user-trash-symbolic</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <accessibility>
+ <!-- TRANSLATORS: button text in the header when an
application can be erased -->
+ <property name="label"
translatable="yes">Uninstall</property>
+ </accessibility>
</object>
</child>
<child>
<object class="GtkBox">
- <property name="visible" bind-source="label_progress_status"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="visible" bind-source="button_cancel"
bind-property="visible" bind-flags="sync-create"/>
<property name="spacing">3</property>
- <property name="halign">center</property>
- <property name="valign">start</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- <class name="install-progress-label"/>
- </style>
- <child>
- <object class="GtkLabel" id="label_progress_status">
- <property name="visible">True</property>
- <property name="valign">start</property>
- <property name="label"
translatable="yes">Downloading</property>
+ <property name="orientation">vertical</property>
+ <property name="valign">fill</property>
+ <child type="center">
+ <object class="GsProgressButton" id="button_cancel">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label"
translatable="yes">_Cancel</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="valign">center</property>
+ <signal name="clicked"
handler="gs_details_page_app_cancel_button_cb"/>
+ <style>
+ <class name="list-button"/>
+ </style>
</object>
</child>
<child>
- <object class="GtkLabel" id="label_progress_percentage">
- <property name="visible">True</property>
+ <object class="GtkBox">
+ <property name="visible"
bind-source="label_progress_status" bind-property="visible" bind-flags="sync-create"/>
+ <property name="spacing">3</property>
+ <property name="halign">center</property>
<property name="valign">start</property>
- <property name="label">50%</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ <class name="install-progress-label"/>
+ </style>
+ <child>
+ <object class="GtkLabel" id="label_progress_status">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <property name="label"
translatable="yes">Downloading</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel"
id="label_progress_percentage">
+ <property name="visible">True</property>
+ <property name="valign">start</property>
+ <property name="label">50%</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
</child>
</object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_add_shortcut">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes"
comments="Translators: A label for a button to add a shortcut to the selected application.">_Add
shortcut</property>
+ <property name="valign">center</property>
+ <signal name="clicked"
handler="gs_details_page_app_add_shortcut_button_cb"/>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_details_remove_shortcut">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes"
comments="Translators: A label for a button to remove a shortcut to the selected application.">Re_move
shortcut</property>
+ <property name="valign">center</property>
+ <signal name="clicked"
handler="gs_details_page_app_remove_shortcut_button_cb"/>
+ </object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
</child>
- <child>
- <object class="GtkButton" id="button_details_add_shortcut">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes" comments="Translators:
A label for a button to add a shortcut to the selected application.">_Add shortcut</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_add_shortcut_button_cb"/>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_details_remove_shortcut">
- <property name="visible">False</property>
- <property name="can_focus">True</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes" comments="Translators:
A label for a button to remove a shortcut to the selected application.">Re_move shortcut</property>
- <property name="valign">center</property>
- <signal name="clicked"
handler="gs_details_page_app_remove_shortcut_button_cb"/>
- </object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
- </child>
</object>
</child>
</object>
</child>
</object>
</child>
- </object>
- </child>
-
- <child>
- <object class="GsScreenshotCarousel" id="screenshot_carousel">
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GtkBox" id="application_details">
+ <object class="GsScreenshotCarousel" id="screenshot_carousel">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="application_details_summary">
- <property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="selectable">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">60</property>
- <style>
- <class name="title-2"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GsDescriptionBox" id="box_details_description">
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="halign">fill</property>
- <property name="hexpand">True</property>
- <property name="valign">start</property>
- <property name="visible">FALSE</property>
- <property name="margin_bottom">14</property>
- </object>
- </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GtkBox" id="box_addons">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
-
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GtkBox" id="box_addons_title">
+ <object class="GtkBox" id="application_details">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="margin_bottom">12</property>
+ <property name="spacing">12</property>
<child>
- <object class="GtkLabel" id="label_addons_title">
+ <object class="GtkLabel" id="application_details_summary">
<property name="visible">True</property>
- <property name="halign">start</property>
+ <property name="halign">fill</property>
<property name="valign">start</property>
<property name="hexpand">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Add-ons</property>
+ <property name="selectable">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
<style>
<class name="title-2"/>
</style>
</object>
</child>
<child>
- <object class="GtkLabel" id="label_addons_uninstalled_app">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">40</property>
- <property name="label" translatable="yes">Selected add-ons will be
installed with the application.</property>
+ <object class="GsDescriptionBox" id="box_details_description">
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">fill</property>
+ <property name="hexpand">True</property>
+ <property name="valign">start</property>
+ <property name="visible">FALSE</property>
+ <property name="margin_bottom">14</property>
</object>
</child>
</object>
</child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwClamp">
+ <property name="visible">True</property>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GtkListBox" id="list_box_addons">
+ <object class="GtkBox" id="box_addons">
<property name="visible">True</property>
- <property name="selection_mode">none</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <style>
- <class name="content"/>
- </style>
+ <property name="orientation">vertical</property>
+
+ <child>
+ <object class="GtkBox" id="box_addons_title">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkLabel" id="label_addons_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Add-ons</property>
+ <style>
+ <class name="title-2"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_addons_uninstalled_app">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">40</property>
+ <property name="label" translatable="yes">Selected add-ons will
be installed with the application.</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBox" id="list_box_addons">
+ <property name="visible">True</property>
+ <property name="selection_mode">none</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GsAppContextBar" id="context_bar">
+ <object class="AdwClamp">
<property name="visible">True</property>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GsAppContextBar" id="context_bar">
+ <property name="visible">True</property>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GtkListBox" id="list_box_version_history">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="selection_mode">none</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <style>
- <class name="content"/>
- </style>
- <child>
- <object class="GsAppVersionHistoryRow" id="row_latest_version">
- </object>
- </child>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GtkListBoxRow" id="version_history_button">
+ <object class="GtkListBox" id="list_box_version_history">
<property name="visible">True</property>
- <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="content"/>
+ </style>
+ <child>
+ <object class="GsAppVersionHistoryRow" id="row_latest_version">
+ </object>
+ </child>
<child>
- <object class="GtkBox">
+ <object class="GtkListBoxRow" id="version_history_button">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">center</property>
- <property name="margin_top">12</property>
- <property name="margin_bottom">12</property>
+ <property name="can_focus">True</property>
<child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="label" translatable="yes">Version
History</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="icon-name">go-next-symbolic</property>
- <property name="margin_start">6</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">center</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="label" translatable="yes">Version
History</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">go-next-symbolic</property>
+ <property name="margin_start">6</property>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -561,410 +570,414 @@
</child>
</object>
</child>
- </object>
- </child>
-
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="label_webapp_warning"
bind-property="visible" bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <child>
- <object class="GtkLabel" id="label_webapp_warning">
- <property name="visible">False</property>
- <property name="halign">center</property>
- <property name="hexpand">True</property>
- <property name="valign">start</property>
- <property name="xalign">0.0</property>
- <property name="label" translatable="yes">This application can only be used
when there is an active internet connection.</property>
- <style>
- <class name="application-details-webapp-warning"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="infobar_details_app_repo"
bind-property="visible" bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GsInfoBar" id="infobar_details_app_repo">
- <property name="visible">True</property>
- <property name="margin_top">20</property>
- <property name="title" translatable="yes">Software Repository
Included</property>
- <property name="body" translatable="yes">This application includes a
software repository which provides updates, as well as access to other software.</property>
+ <object class="AdwClamp">
+ <property name="visible" bind-source="label_webapp_warning"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GtkLabel" id="label_webapp_warning">
+ <property name="visible">False</property>
+ <property name="halign">center</property>
+ <property name="hexpand">True</property>
+ <property name="valign">start</property>
+ <property name="xalign">0.0</property>
+ <property name="label" translatable="yes">This application can only be
used when there is an active internet connection.</property>
+ <style>
+ <class name="application-details-webapp-warning"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="infobar_details_app_norepo"
bind-property="visible" bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GsInfoBar" id="infobar_details_app_norepo">
- <property name="visible">True</property>
- <property name="margin_top">20</property>
- <property name="title" translatable="yes">No Software Repository
Included</property>
- <property name="body" translatable="yes">This application does not include a
software repository. It will not be updated with new versions.</property>
+ <object class="AdwClamp">
+ <property name="visible" bind-source="infobar_details_app_repo"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_app_repo">
+ <property name="visible">True</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">Software Repository
Included</property>
+ <property name="body" translatable="yes">This application includes a
software repository which provides updates, as well as access to other software.</property>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="infobar_details_package_baseos"
bind-property="visible" bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GsInfoBar" id="infobar_details_package_baseos">
- <property name="visible">True</property>
- <property name="message_type">warning</property>
- <property name="margin_top">20</property>
- <property name="title" translatable="yes">This software is already provided
by your distribution and should not be replaced.</property>
+ <object class="AdwClamp">
+ <property name="visible" bind-source="infobar_details_app_norepo"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_app_norepo">
+ <property name="visible">True</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">No Software Repository
Included</property>
+ <property name="body" translatable="yes">This application does not
include a software repository. It will not be updated with new versions.</property>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="infobar_details_repo"
bind-property="visible" bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GsInfoBar" id="infobar_details_repo">
- <property name="visible">True</property>
- <property name="margin_top">20</property>
- <property name="title" translatable="yes" comments="Translators: a
repository file used for installing software has been discovered.">Software Repository Identified</property>
- <property name="body" translatable="yes">Adding this software repository
will give you access to additional software and upgrades.</property>
- <property name="warning" translatable="yes">Only use software repositories
that you trust.</property>
+ <object class="AdwClamp">
+ <property name="visible" bind-source="infobar_details_package_baseos"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GsInfoBar" id="infobar_details_package_baseos">
+ <property name="visible">True</property>
+ <property name="message_type">warning</property>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes">This software is already
provided by your distribution and should not be replaced.</property>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GtkBox" id="box_license">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
- <property name="homogeneous" bind-source="GsDetailsPage"
bind-property="is-narrow" bind-flags="sync-create|invert-boolean"/>
-
+ <object class="AdwClamp">
+ <property name="visible" bind-source="infobar_details_repo"
bind-property="visible" bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GsLicenseTile" id="license_tile">
+ <object class="GsInfoBar" id="infobar_details_repo">
<property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <signal name="get-involved-activated"
handler="gs_details_page_license_tile_get_involved_activated_cb"/>
+ <property name="margin_top">20</property>
+ <property name="title" translatable="yes" comments="Translators: a
repository file used for installing software has been discovered.">Software Repository Identified</property>
+ <property name="body" translatable="yes">Adding this software repository
will give you access to additional software and upgrades.</property>
+ <property name="warning" translatable="yes">Only use software
repositories that you trust.</property>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="AdwClamp">
+ <property name="visible">True</property>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GtkStack" id="links_stack">
- <property name="homogeneous">False</property>
+ <object class="GtkBox" id="box_license">
<property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <property name="homogeneous" bind-source="GsDetailsPage"
bind-property="is-narrow" bind-flags="sync-create|invert-boolean"/>
<child>
- <object class="GtkBox">
+ <object class="GsLicenseTile" id="license_tile">
<property name="visible">True</property>
- <property name="hexpand-set">True</property>
- <style>
- <class name="content-box"/>
- </style>
-
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">8</property>
- <property name="margin">14</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
-
- <child>
- <object class="GtkImage">
- <property
name="icon-name">dialog-question-symbolic</property>
- <property name="pixel-size">96</property>
- <property name="visible">True</property>
- <property name="margin-bottom">8</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="label" translatable="yes">No
Metadata</property>
- <property name="visible">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="justify">center</property>
- <property name="label" translatable="yes">This software
doesn’t provide any links to a website, code repository or issue tracker.</property>
- <property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="xalign">0.5</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <signal name="get-involved-activated"
handler="gs_details_page_license_tile_get_involved_activated_cb"/>
</object>
- <packing>
- <property name="name">empty</property>
- </packing>
</child>
<child>
- <object class="GtkListBox">
+ <object class="GtkStack" id="links_stack">
+ <property name="homogeneous">False</property>
<property name="visible">True</property>
- <property name="selection_mode">none</property>
- <property name="halign">fill</property>
- <property name="valign">start</property>
- <style>
- <class name="content"/>
- </style>
<child>
- <object class="AdwActionRow" id="project_website_row">
- <property name="activatable">True</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Project
_Website</property>
- <!-- This is a placeholder; the actual URI is set in code -->
- <property name="subtitle">gnome.org</property>
- <property name="use-underline">True</property>
- <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
- <child type="prefix">
- <!-- Provide the prefix icon as a widget rather than using the
icon-name property so we can set the size -->
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">web-browser-symbolic</property>
- <property name="icon-size">4</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
+ <object class="GtkStackPage">
+ <property name="name">empty</property>
+ <property name="child">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="icon-name">external-link-symbolic</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="hexpand-set">True</property>
+ <style>
+ <class name="content-box"/>
+ </style>
- <child>
- <object class="AdwActionRow" id="donate_row">
- <property name="activatable">True</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Donate</property>
- <!-- This is a placeholder; the actual URI is set in code -->
- <property name="subtitle">gnome.org</property>
- <property name="use-underline">True</property>
- <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
- <child type="prefix">
- <!-- Provide the prefix icon as a widget rather than using the
icon-name property so we can set the size -->
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">money-symbolic</property>
- <property name="icon-size">4</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">external-link-symbolic</property>
- </object>
- </child>
- </object>
- </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">8</property>
+ <property name="margin">14</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
- <child>
- <object class="AdwActionRow" id="translate_row">
- <property name="activatable">True</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Contribute
_Translations</property>
- <!-- This is a placeholder; the actual URI is set in code -->
- <property name="subtitle">gnome.org</property>
- <property name="use-underline">True</property>
- <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
- <child type="prefix">
- <!-- Provide the prefix icon as a widget rather than using the
icon-name property so we can set the size -->
- <object class="GtkImage">
- <property name="visible">True</property>
- <property
name="icon-name">flag-outline-thin-symbolic</property>
- <property name="icon-size">4</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">external-link-symbolic</property>
+ <child>
+ <object class="GtkImage">
+ <property
name="icon-name">dialog-question-symbolic</property>
+ <property name="pixel-size">96</property>
+ <property name="visible">True</property>
+ <property name="margin-bottom">8</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">No
Metadata</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="justify">center</property>
+ <property name="label" translatable="yes">This
software doesn’t provide any links to a website, code repository or issue tracker.</property>
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="xalign">0.5</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
</child>
<child>
- <object class="AdwActionRow" id="report_an_issue_row">
- <property name="activatable">True</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Report an
Issue</property>
- <!-- This is a placeholder; the actual URI is set in code -->
- <property name="subtitle">gnome.org</property>
- <property name="use-underline">True</property>
- <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
- <child type="prefix">
- <!-- Provide the prefix icon as a widget rather than using the
icon-name property so we can set the size -->
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">computer-fail-symbolic</property>
- <property name="icon-size">4</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
+ <object class="GtkStackPage">
+ <property name="name">links</property>
+ <property name="child">
+ <object class="GtkListBox">
<property name="visible">True</property>
- <property name="icon-name">external-link-symbolic</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="selection_mode">none</property>
+ <property name="halign">fill</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="content"/>
+ </style>
- <child>
- <object class="AdwActionRow" id="help_row">
- <property name="activatable">True</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Help</property>
- <!-- This is a placeholder; the actual URI is set in code -->
- <property name="subtitle">gnome.org</property>
- <property name="use-underline">True</property>
- <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
- <child type="prefix">
- <!-- Provide the prefix icon as a widget rather than using the
icon-name property so we can set the size -->
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">help-browser-symbolic</property>
- <property name="icon-size">4</property>
- </object>
- </child>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">external-link-symbolic</property>
+ <child>
+ <object class="AdwActionRow" id="project_website_row">
+ <property name="activatable">True</property>
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Project
_Website</property>
+ <!-- This is a placeholder; the actual URI is set in
code -->
+ <property name="subtitle">gnome.org</property>
+ <property name="use-underline">True</property>
+ <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
+ <child type="prefix">
+ <!-- Provide the prefix icon as a widget rather than
using the icon-name property so we can set the size -->
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">web-browser-symbolic</property>
+ <property name="icon-size">4</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwActionRow" id="donate_row">
+ <property name="activatable">True</property>
+ <property name="visible">True</property>
+ <property name="title"
translatable="yes">_Donate</property>
+ <!-- This is a placeholder; the actual URI is set in
code -->
+ <property name="subtitle">gnome.org</property>
+ <property name="use-underline">True</property>
+ <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
+ <child type="prefix">
+ <!-- Provide the prefix icon as a widget rather than
using the icon-name property so we can set the size -->
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">money-symbolic</property>
+ <property name="icon-size">4</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwActionRow" id="translate_row">
+ <property name="activatable">True</property>
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Contribute
_Translations</property>
+ <!-- This is a placeholder; the actual URI is set in
code -->
+ <property name="subtitle">gnome.org</property>
+ <property name="use-underline">True</property>
+ <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
+ <child type="prefix">
+ <!-- Provide the prefix icon as a widget rather than
using the icon-name property so we can set the size -->
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">flag-outline-thin-symbolic</property>
+ <property name="icon-size">4</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwActionRow" id="report_an_issue_row">
+ <property name="activatable">True</property>
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">_Report an
Issue</property>
+ <!-- This is a placeholder; the actual URI is set in
code -->
+ <property name="subtitle">gnome.org</property>
+ <property name="use-underline">True</property>
+ <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
+ <child type="prefix">
+ <!-- Provide the prefix icon as a widget rather than
using the icon-name property so we can set the size -->
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">computer-fail-symbolic</property>
+ <property name="icon-size">4</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwActionRow" id="help_row">
+ <property name="activatable">True</property>
+ <property name="visible">True</property>
+ <property name="title"
translatable="yes">_Help</property>
+ <!-- This is a placeholder; the actual URI is set in
code -->
+ <property name="subtitle">gnome.org</property>
+ <property name="use-underline">True</property>
+ <signal name="activated"
handler="gs_details_page_link_row_activated_cb"/>
+ <child type="prefix">
+ <!-- Provide the prefix icon as a widget rather than
using the icon-name property so we can set the size -->
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">help-browser-symbolic</property>
+ <property name="icon-size">4</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property
name="icon-name">external-link-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
</child>
</object>
- <packing>
- <property name="name">links</property>
- </packing>
</child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwClamp">
- <property name="visible" bind-source="box_reviews" bind-property="visible"
bind-flags="sync-create"/>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
<child>
- <object class="GtkBox" id="box_reviews">
- <property name="visible">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="margin_bottom">18</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
- <property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes" comments="Translators: Header
of the section with other users' opinions about the app.">Reviews</property>
- <style>
- <class name="title-2"/>
- </style>
- </object>
- </child>
+ <object class="AdwClamp">
+ <property name="visible" bind-source="box_reviews" bind-property="visible"
bind-flags="sync-create"/>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
<child>
- <object class="GsReviewHistogram" id="histogram">
+ <object class="GtkBox" id="box_reviews">
<property name="visible">False</property>
- <property name="halign">start</property>
- <property name="valign">center</property>
- <property name="margin_bottom">32</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_review">
- <property name="visible">False</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes" comments="Translators: Button
opening a dialog where the users can write and publish their opinions about the apps.">_Write a
Review</property>
- <property name="can_focus">True</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
- <property name="margin_bottom">18</property>
- <signal name="clicked" handler="gs_details_page_write_review_cb"/>
- </object>
- </child>
- <child>
- <object class="GtkListBox" id="list_box_reviews">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <style>
- <class name="review-listbox"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button_more_reviews">
- <property name="visible">False</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes" comments="Translators: Button
to return more application-submitted reviews.">_Show More</property>
- <property name="can_focus">True</property>
- <property name="halign">start</property>
- <property name="valign">start</property>
- <property name="margin_top">12</property>
- <signal name="clicked" handler="gs_details_page_more_reviews_button_cb"/>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="margin_bottom">18</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators:
Header of the section with other users' opinions about the app.">Reviews</property>
+ <style>
+ <class name="title-2"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GsReviewHistogram" id="histogram">
+ <property name="visible">False</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="margin_bottom">32</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_review">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators:
Button opening a dialog where the users can write and publish their opinions about the apps.">_Write a
Review</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin_bottom">18</property>
+ <signal name="clicked" handler="gs_details_page_write_review_cb"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkListBox" id="list_box_reviews">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <style>
+ <class name="review-listbox"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_more_reviews">
+ <property name="visible">False</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes" comments="Translators:
Button to return more application-submitted reviews.">_Show More</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="margin_top">12</property>
+ <signal name="clicked"
handler="gs_details_page_more_reviews_button_cb"/>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -976,47 +989,48 @@
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">ready</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox" id="box_failed">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">24</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkImage" id="image_failed">
- <property name="visible">True</property>
- <property name="pixel_size">128</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label_failed">
+ <object class="GtkStackPage">
+ <property name="name">failed</property>
+ <property name="child">
+ <object class="GtkBox" id="box_failed">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">60</property>
- <property name="justify">center</property>
- <attributes>
- <attribute name="scale" value="1.4"/>
- </attributes>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_failed">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_failed">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">failed</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-extras-page.ui b/src/gs-extras-page.ui
index f734124b4..be5aaf3f7 100644
--- a/src/gs-extras-page.ui
+++ b/src/gs-extras-page.ui
@@ -8,135 +8,148 @@
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
+
<child>
- <object class="GtkBox" id="box_spinner">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkSpinner" id="spinner">
+ <object class="GtkStackPage">
+ <property name="name">spinner</property>
+ <property name="child">
+ <object class="GtkBox" id="box_spinner">
<property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">spinner</property>
- </packing>
</child>
+
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <object class="AdwClamp">
+ <object class="GtkStackPage">
+ <property name="name">results</property>
+ <property name="child">
+ <object class="GtkScrolledWindow" id="scrolledwindow">
<property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
<child>
- <object class="GtkBox" id="box_results">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkListBox" id="list_box_results">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- </object>
- </child>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
<child>
- <object class="GtkSeparator" id="separator_results">
+ <object class="GtkBox" id="box_results">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkListBox" id="list_box_results">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="separator_results">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">results</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox" id="box_no_results">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">24</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkImage" id="image_no_results">
- <property name="visible">True</property>
- <property name="pixel_size">64</property>
- <property name="icon_name">face-sad-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label_no_results">
+ <object class="GtkStackPage">
+ <property name="name">no-results</property>
+ <property name="child">
+ <object class="GtkBox" id="box_no_results">
<property name="visible">True</property>
- <property name="use_markup">True</property>
- <property name="wrap">True</property>
- <property name="max_width_chars">60</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkImage" id="image_no_results">
+ <property name="visible">True</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">face-sad-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_no_results">
+ <property name="visible">True</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="max_width_chars">60</property>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">no-results</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox" id="box_failed">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkImage" id="image_failed">
- <property name="visible">True</property>
- <property name="pixel_size">128</property>
- <property name="icon_name">action-unavailable-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label_failed">
+ <object class="GtkStackPage">
+ <property name="name">failed</property>
+ <property name="child">
+ <object class="GtkBox" id="box_failed">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="max-width-chars">60</property>
- <attributes>
- <attribute name="scale" value="1.4"/>
- </attributes>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="image_failed">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_failed">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="max-width-chars">60</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">failed</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-feature-tile.ui b/src/gs-feature-tile.ui
index 13c222d1d..0ae4a1534 100644
--- a/src/gs-feature-tile.ui
+++ b/src/gs-feature-tile.ui
@@ -10,67 +10,74 @@
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
+
<child>
- <object class="GtkImage" id="waiting">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="pixel-size">16</property>
- <property name="icon-name">content-loading-symbolic</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">waiting</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="orientation">vertical</property>
- <property name="margin">50</property>
- <child>
- <object class="GtkImage" id="image">
- <property name="visible">True</property>
- <style>
- <class name="icon-dropshadow"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="title">
+ <property name="child">
+ <object class="GtkImage" id="waiting">
<property name="visible">True</property>
- <property name="xalign">0.5</property>
<property name="halign">center</property>
- <property name="valign">end</property>
- <property name="vexpand">True</property>
- <property name="ellipsize">end</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
<style>
- <class name="title-1"/>
+ <class name="dim-label"/>
</style>
</object>
- </child>
- <child>
- <object class="GtkLabel" id="subtitle">
+ </property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">content</property>
+ <property name="child">
+ <object class="GtkBox" id="box">
<property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0.5</property>
<property name="halign">center</property>
- <property name="valign">start</property>
- <property name="lines">1</property>
- <property name="justify">center</property>
- <style>
- <class name="caption"/>
- </style>
+ <property name="orientation">vertical</property>
+ <property name="margin">50</property>
+ <child>
+ <object class="GtkImage" id="image">
+ <property name="visible">True</property>
+ <style>
+ <class name="icon-dropshadow"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
+ <property name="vexpand">True</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="title-1"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.5</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="lines">1</property>
+ <property name="justify">center</property>
+ <style>
+ <class name="caption"/>
+ </style>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">content</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-installed-page.ui b/src/gs-installed-page.ui
index c0d9e8820..19e365059 100644
--- a/src/gs-installed-page.ui
+++ b/src/gs-installed-page.ui
@@ -8,127 +8,136 @@
<child>
<object class="GtkStack" id="stack_install">
<property name="visible">True</property>
+
<child>
- <object class="GtkSpinner" id="spinner_install">
- <property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">spinner</property>
- </packing>
+ <property name="child">
+ <object class="GtkSpinner" id="spinner_install">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GtkBox" id="box_install">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_install">
+ <object class="GtkStackPage">
+ <property name="name">view</property>
+ <property name="child">
+ <object class="GtkBox" id="box_install">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="vexpand">True</property>
- <style>
- <class name="list-page"/>
- </style>
+ <property name="orientation">vertical</property>
<child>
- <object class="AdwClamp">
+ <object class="GtkScrolledWindow" id="scrolledwindow_install">
<property name="visible">True</property>
- <property name="maximum-size">600</property>
- <property name="tightening-threshold">400</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="list-page"/>
+ </style>
<child>
- <object class="GtkBox">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="maximum-size">600</property>
+ <property name="tightening-threshold">400</property>
<child>
- <object class="AdwPreferencesGroup" id="group_install_in_progress">
- <property name="visible">False</property>
- <property name="title" translatable="yes">In Progress</property>
- <style>
- <class name="section"/>
- </style>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkListBox" id="list_box_install_in_progress">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <signal name="add" handler="update_group_visibility_cb"
object="group_install_in_progress" swapped="yes"/>
- <signal name="remove" handler="update_group_visibility_cb"
object="group_install_in_progress" swapped="yes"/>
- <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <object class="AdwPreferencesGroup" id="group_install_in_progress">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">In Progress</property>
<style>
- <class name="content"/>
+ <class name="section"/>
</style>
+ <child>
+ <object class="GtkListBox" id="list_box_install_in_progress">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <signal name="add" handler="update_group_visibility_cb"
object="group_install_in_progress" swapped="yes"/>
+ <signal name="remove" handler="update_group_visibility_cb"
object="group_install_in_progress" swapped="yes"/>
+ <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwPreferencesGroup" id="group_install_apps">
- <property name="visible">False</property>
- <property name="title" translatable="yes">Applications</property>
- <style>
- <class name="section"/>
- </style>
<child>
- <object class="GtkListBox" id="list_box_install_apps">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <signal name="add" handler="update_group_visibility_cb"
object="group_install_apps" swapped="yes"/>
- <signal name="remove" handler="update_group_visibility_cb"
object="group_install_apps" swapped="yes"/>
- <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <object class="AdwPreferencesGroup" id="group_install_apps">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Applications</property>
<style>
- <class name="content"/>
+ <class name="section"/>
</style>
+ <child>
+ <object class="GtkListBox" id="list_box_install_apps">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <signal name="add" handler="update_group_visibility_cb"
object="group_install_apps" swapped="yes"/>
+ <signal name="remove" handler="update_group_visibility_cb"
object="group_install_apps" swapped="yes"/>
+ <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwPreferencesGroup" id="group_install_system_apps">
- <property name="visible">False</property>
- <property name="title" translatable="yes">System Applications</property>
- <style>
- <class name="section"/>
- </style>
<child>
- <object class="GtkListBox" id="list_box_install_system_apps">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <signal name="add" handler="update_group_visibility_cb"
object="group_install_system_apps" swapped="yes"/>
- <signal name="remove" handler="update_group_visibility_cb"
object="group_install_system_apps" swapped="yes"/>
- <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <object class="AdwPreferencesGroup" id="group_install_system_apps">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">System Applications</property>
<style>
- <class name="content"/>
+ <class name="section"/>
</style>
+ <child>
+ <object class="GtkListBox" id="list_box_install_system_apps">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <signal name="add" handler="update_group_visibility_cb"
object="group_install_system_apps" swapped="yes"/>
+ <signal name="remove" handler="update_group_visibility_cb"
object="group_install_system_apps" swapped="yes"/>
+ <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwPreferencesGroup" id="group_install_addons">
- <property name="visible">False</property>
- <property name="title" translatable="yes">Add-ons</property>
- <style>
- <class name="section"/>
- </style>
<child>
- <object class="GtkListBox" id="list_box_install_addons">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <signal name="add" handler="update_group_visibility_cb"
object="group_install_addons" swapped="yes"/>
- <signal name="remove" handler="update_group_visibility_cb"
object="group_install_addons" swapped="yes"/>
- <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <object class="AdwPreferencesGroup" id="group_install_addons">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Add-ons</property>
<style>
- <class name="content"/>
+ <class name="section"/>
</style>
+ <child>
+ <object class="GtkListBox" id="list_box_install_addons">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <signal name="add" handler="update_group_visibility_cb"
object="group_install_addons" swapped="yes"/>
+ <signal name="remove" handler="update_group_visibility_cb"
object="group_install_addons" swapped="yes"/>
+ <signal name="row-activated"
handler="gs_installed_page_app_row_activated_cb"/>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -138,12 +147,10 @@
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">view</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-moderate-page.ui b/src/gs-moderate-page.ui
index ac940d1a9..981ec822b 100644
--- a/src/gs-moderate-page.ui
+++ b/src/gs-moderate-page.ui
@@ -8,91 +8,99 @@
<child>
<object class="GtkStack" id="stack_install">
<property name="visible">True</property>
+
<child>
- <object class="GtkSpinner" id="spinner_install">
- <property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">spinner</property>
- </packing>
+ <property name="child">
+ <object class="GtkSpinner" id="spinner_install">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GtkBox" id="box_install">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_install">
+ <object class="GtkStackPage">
+ <property name="name">view</property>
+ <property name="child">
+ <object class="GtkBox" id="box_install">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="AdwClamp">
+ <object class="GtkScrolledWindow" id="scrolledwindow_install">
<property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="vexpand">True</property>
<child>
- <object class="GtkListBox" id="list_box_install">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <child>
+ <object class="GtkListBox" id="list_box_install">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">view</property>
- </packing>
</child>
<child>
- <object class="GtkBox" id="updates_uptodate_box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">48</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child type="center">
- <object class="GtkBox" id="updates_uptodate_centerbox">
+ <object class="GtkStackPage">
+ <property name="name">uptodate</property>
+ <property name="child">
+ <object class="GtkBox" id="updates_uptodate_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkImage" id="image_updates">
- <property name="visible">True</property>
- <property name="pixel_size">128</property>
- <property name="icon_name">object-select-symbolic</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label10">
+ <property name="spacing">48</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child type="center">
+ <object class="GtkBox" id="updates_uptodate_centerbox">
<property name="visible">True</property>
- <property name="label" translatable="yes">There are no reviews to moderate</property>
- <attributes>
- <attribute name="scale" value="1.4"/>
- </attributes>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image_updates">
+ <property name="visible">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">object-select-symbolic</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">There are no reviews to moderate</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ </child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">uptodate</property>
- </packing>
</child>
</object>
diff --git a/src/gs-overview-page.ui b/src/gs-overview-page.ui
index 62889f86d..29ccb05f0 100644
--- a/src/gs-overview-page.ui
+++ b/src/gs-overview-page.ui
@@ -9,181 +9,188 @@
<child>
<object class="GtkStack" id="stack_overview">
<property name="visible">True</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkInfoBar" id="infobar_third_party">
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">overview</property>
+ <property name="child">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="app_paintable">True</property>
- <property name="show_close_button">True</property>
- <child internal-child="action_area">
- <object class="GtkBox">
- <property name="spacing">6</property>
- <child/>
- </object>
- </child>
- <child internal-child="content_area">
- <object class="GtkBox">
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <property name="border_width">12</property>
- <child>
- <object class="GtkLabel" id="label_third_party_title">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="label" translatable="yes">Enable Third Party Software
Repositories?</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
+ <property name="orientation">vertical</property>
+
+ <child>
+ <object class="GtkInfoBar" id="infobar_third_party">
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="show_close_button">True</property>
+ <child internal-child="action_area">
+ <object class="GtkBox">
+ <property name="spacing">6</property>
+ <child/>
</object>
</child>
- <child>
- <object class="GtkLabel" id="label_third_party">
- <property name="visible">True</property>
- <property name="halign">start</property>
- <property name="label">Provides access to additional software.</property>
- <property name="wrap">True</property>
- <property name="wrap_mode">word-char</property>
- <property name="xalign">0</property>
+ <child internal-child="content_area">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="border_width">12</property>
+ <child>
+ <object class="GtkLabel" id="label_third_party_title">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Enable Third Party Software
Repositories?</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_third_party">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="label">Provides access to additional software.</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="xalign">0</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_overview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
<child>
- <object class="GtkViewport" id="viewport_overview">
+ <object class="GtkScrolledWindow" id="scrolledwindow_overview">
<property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
<child>
- <object class="AdwClamp">
+ <object class="GtkViewport" id="viewport_overview">
<property name="visible">True</property>
- <!-- We use the same sizes as the category page. -->
- <property name="maximum-size">1000</property>
- <property name="tightening-threshold">600</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<child>
- <object class="GtkBox" id="box_overview">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="halign">center</property>
- <property name="hexpand">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">12</property>
- <property name="margin-bottom">24</property>
- <property name="valign">start</property>
- <property name="spacing">6</property>
-
+ <!-- We use the same sizes as the category page. -->
+ <property name="maximum-size">1000</property>
+ <property name="tightening-threshold">600</property>
<child>
- <object class="GsFeaturedCarousel" id="featured_carousel">
+ <object class="GtkBox" id="box_overview">
<property name="visible">True</property>
- <property name="height-request">150</property>
+ <property name="halign">center</property>
+ <property name="hexpand">False</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">24</property>
<property name="valign">start</property>
- <signal name="app-clicked" handler="featured_carousel_app_clicked_cb"/>
- </object>
- </child>
+ <property name="spacing">6</property>
- <child>
- <object class="GtkFlowBox" id="flowbox_categories">
- <property name="visible">True</property>
- <property name="margin-top">21</property>
- <property name="margin-bottom">6</property>
- <property name="row_spacing">14</property>
- <property name="column_spacing">14</property>
- <property name="homogeneous">True</property>
- <property name="min_children_per_line">2</property>
- <property name="max_children_per_line">3</property>
- <property name="selection_mode">none</property>
- </object>
- </child>
+ <child>
+ <object class="GsFeaturedCarousel" id="featured_carousel">
+ <property name="visible">True</property>
+ <property name="height-request">150</property>
+ <property name="valign">start</property>
+ <signal name="app-clicked" handler="featured_carousel_app_clicked_cb"/>
+ </object>
+ </child>
- <child>
- <object class="GtkLabel" id="popular_heading">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes" comments="Translators: This is a
heading for software which has been featured ('picked') by the distribution.">Editor’s
Choice</property>
- <property name="margin-top">21</property>
- <property name="margin-bottom">6</property>
- <style>
- <class name="index-title-alignment-software"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkFlowBox" id="box_popular">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="column-spacing">14</property>
- <property name="row-spacing">14</property>
- <property name="valign">start</property>
- <accessibility>
- <relation name="labelled-by">popular_heading</relation>
- </accessibility>
- </object>
- </child>
+ <child>
+ <object class="GtkFlowBox" id="flowbox_categories">
+ <property name="visible">True</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <property name="row_spacing">14</property>
+ <property name="column_spacing">14</property>
+ <property name="homogeneous">True</property>
+ <property name="min_children_per_line">2</property>
+ <property name="max_children_per_line">3</property>
+ <property name="selection_mode">none</property>
+ </object>
+ </child>
- <child>
- <object class="GtkLabel" id="recent_heading">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes" comments="Translators: This is a
heading for software which has been recently released upstream.">New & Updated</property>
- <property name="margin-top">21</property>
- <property name="margin-bottom">6</property>
- <style>
- <class name="index-title-alignment-software"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkFlowBox" id="box_recent">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="column-spacing">14</property>
- <property name="row-spacing">14</property>
- <property name="valign">start</property>
- <property name="selection-mode">none</property>
- <accessibility>
- <relation name="labelled-by">recent_heading</relation>
- </accessibility>
- </object>
- </child>
+ <child>
+ <object class="GtkLabel" id="popular_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: This is
a heading for software which has been featured ('picked') by the distribution.">Editor’s
Choice</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFlowBox" id="box_popular">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="column-spacing">14</property>
+ <property name="row-spacing">14</property>
+ <property name="valign">start</property>
+ <accessibility>
+ <relation name="labelled-by">popular_heading</relation>
+ </accessibility>
+ </object>
+ </child>
- <child>
- <object class="GtkLabel" id="iconless_categories_heading">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes" comments="Translators: This is a
heading for a list of categories.">Other Categories</property>
- <property name="margin-top">21</property>
- <property name="margin-bottom">6</property>
- <style>
- <class name="index-title-alignment-software"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkFlowBox" id="flowbox_iconless_categories">
- <property name="visible">True</property>
- <property name="row_spacing">14</property>
- <property name="column_spacing">14</property>
- <property name="homogeneous">True</property>
- <property name="min_children_per_line">2</property>
- <property name="max_children_per_line">3</property>
- <property name="selection_mode">none</property>
- <accessibility>
- <relation name="labelled-by">iconless_categories_heading</relation>
- </accessibility>
+ <child>
+ <object class="GtkLabel" id="recent_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: This is
a heading for software which has been recently released upstream.">New & Updated</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFlowBox" id="box_recent">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="column-spacing">14</property>
+ <property name="row-spacing">14</property>
+ <property name="valign">start</property>
+ <property name="selection-mode">none</property>
+ <accessibility>
+ <relation name="labelled-by">recent_heading</relation>
+ </accessibility>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkLabel" id="iconless_categories_heading">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Translators: This is
a heading for a list of categories.">Other Categories</property>
+ <property name="margin-top">21</property>
+ <property name="margin-bottom">6</property>
+ <style>
+ <class name="index-title-alignment-software"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFlowBox" id="flowbox_iconless_categories">
+ <property name="visible">True</property>
+ <property name="row_spacing">14</property>
+ <property name="column_spacing">14</property>
+ <property name="homogeneous">True</property>
+ <property name="min_children_per_line">2</property>
+ <property name="max_children_per_line">3</property>
+ <property name="selection_mode">none</property>
+ <accessibility>
+ <relation name="labelled-by">iconless_categories_heading</relation>
+ </accessibility>
+ </object>
+ </child>
</object>
</child>
+
</object>
</child>
</object>
@@ -191,59 +198,60 @@
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">overview</property>
- </packing>
</child>
+
<child>
- <object class="GtkGrid" id="noresults_grid_overview">
- <property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="row-spacing">12</property>
- <property name="column-spacing">12</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkImage" id="noappdata_icon">
+ <object class="GtkStackPage">
+ <property name="name">no-results</property>
+ <property name="child">
+ <object class="GtkGrid" id="noresults_grid_overview">
<property name="visible">True</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- <property name="pixel-size">64</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="row-spacing">12</property>
+ <property name="column-spacing">12</property>
<style>
<class name="dim-label"/>
</style>
+ <child>
+ <object class="GtkImage" id="noappdata_icon">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="pixel-size">64</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="noappdata_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No Application Data Found</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="scale" value="1.4"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="noappdata_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">No Application Data Found</property>
- <property name="halign">start</property>
- <property name="valign">center</property>
- <property name="wrap">True</property>
- <attributes>
- <attribute name="scale" value="1.4"/>
- </attributes>
- </object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">no-results</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-progress-button.ui b/src/gs-progress-button.ui
index daa28d28f..520d37fdd 100644
--- a/src/gs-progress-button.ui
+++ b/src/gs-progress-button.ui
@@ -7,19 +7,30 @@
<property name="interpolate-size">True</property>
<property name="transition-type">crossfade</property>
<property name="visible">True</property>
+
<child>
- <object class="GtkLabel" id="label">
- <property name="label" bind-source="GsProgressButton" bind-property="label"
bind-flags="sync-create"/>
- <property name="use-underline" bind-source="GsProgressButton" bind-property="use-underline"
bind-flags="sync-create"/>
- <property name="visible">True</property>
+ <object class="GtkStackPage">
+ <property name="child">
+ <object class="GtkLabel" id="label">
+ <property name="label" bind-source="GsProgressButton" bind-property="label"
bind-flags="sync-create"/>
+ <property name="use-underline" bind-source="GsProgressButton" bind-property="use-underline"
bind-flags="sync-create"/>
+ <property name="visible">True</property>
+ </object>
+ </property>
</object>
</child>
+
<child>
- <object class="GtkImage" id="image">
- <property name="icon-name" bind-source="GsProgressButton" bind-property="icon-name"
bind-flags="sync-create"/>
- <property name="visible">True</property>
+ <object class="GtkStackPage">
+ <property name="child">
+ <object class="GtkImage" id="image">
+ <property name="icon-name" bind-source="GsProgressButton" bind-property="icon-name"
bind-flags="sync-create"/>
+ <property name="visible">True</property>
+ </object>
+ </property>
</object>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-repos-dialog.ui b/src/gs-repos-dialog.ui
index 2f17175be..768baaa94 100644
--- a/src/gs-repos-dialog.ui
+++ b/src/gs-repos-dialog.ui
@@ -28,38 +28,49 @@
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="vexpand">True</property>
+
<child>
- <object class="GtkSpinner" id="spinner">
- <property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">waiting</property>
- </packing>
+ <property name="child">
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="AdwStatusPage" id="status_empty">
- <property name="visible">True</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- <property name="title" translatable="yes">No Repositories</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">empty</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage" id="status_empty">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="title" translatable="yes">No Repositories</property>
+ </object>
+ </property>
+ </object>
</child>
+
+
<child>
- <object class="AdwPreferencesPage" id="content_page">
- <property name="visible">True</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">sources</property>
- </packing>
+ <property name="child">
+ <object class="AdwPreferencesPage" id="content_page">
+ <property name="visible">True</property>
+ </object>
+ </property>
+ </object>
</child>
+
</object>
</child>
</object>
diff --git a/src/gs-screenshot-carousel.ui b/src/gs-screenshot-carousel.ui
index 8028514c7..3db71d43c 100644
--- a/src/gs-screenshot-carousel.ui
+++ b/src/gs-screenshot-carousel.ui
@@ -7,153 +7,161 @@
<child>
<object class="GtkStack" id="stack">
<property name="no-show-all">True</property>
+
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <style>
- <class name="frame"/>
- <class name="view"/>
- </style>
- <child>
- <object class="GtkOverlay">
+ <object class="GtkStackPage">
+ <property name="name">carousel</property>
+ <property name="child">
+ <object class="GtkBox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <style>
+ <class name="frame"/>
+ <class name="view"/>
+ </style>
<child>
- <object class="AdwCarousel" id="carousel">
- <property name="visible">True</property>
- <signal name="notify::n-pages" handler="gs_screenshot_carousel_notify_n_pages_cb"
swapped="yes"/>
- <signal name="notify::position" handler="gs_screenshot_carousel_notify_position_cb"
swapped="yes"/>
- </object>
- </child>
- <child type="overlay">
- <object class="GtkRevealer" id="button_previous_revealer">
- <property name="halign">start</property>
- <property name="transition-type">crossfade</property>
- <property name="valign">center</property>
+ <object class="GtkOverlay">
<property name="visible">True</property>
<child>
- <object class="GtkButton" id="button_previous">
+ <object class="AdwCarousel" id="carousel">
+ <property name="visible">True</property>
+ <signal name="notify::n-pages" handler="gs_screenshot_carousel_notify_n_pages_cb"
swapped="yes"/>
+ <signal name="notify::position" handler="gs_screenshot_carousel_notify_position_cb"
swapped="yes"/>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkRevealer" id="button_previous_revealer">
+ <property name="halign">start</property>
+ <property name="transition-type">crossfade</property>
+ <property name="valign">center</property>
<property name="visible">True</property>
- <property name="width-request">64</property>
- <property name="height-request">64</property>
- <property name="margin">9</property>
- <signal name="clicked" handler="gs_screenshot_carousel_button_previous_clicked_cb"
swapped="yes"/>
- <accessibility>
- <!-- Translators: This is the accessible description for a button to go to the
previous screenshot in the screenshot carousel. -->
- <property name="label" translatable="yes">Previous Screenshot</property>
- </accessibility>
- <style>
- <class name="circular"/>
- <class name="osd"/>
- </style>
<child>
- <object class="GtkImage" id="button_previous_image">
- <property name="halign">center</property>
- <property name="icon-name">carousel-arrow-previous-symbolic</property>
- <property name="icon-size">1</property>
- <property name="valign">center</property>
+ <object class="GtkButton" id="button_previous">
<property name="visible">True</property>
- <property name="name">previous</property>
- <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="margin">9</property>
+ <signal name="clicked"
handler="gs_screenshot_carousel_button_previous_clicked_cb" swapped="yes"/>
+ <accessibility>
+ <!-- Translators: This is the accessible description for a button to go to the
previous screenshot in the screenshot carousel. -->
+ <property name="label" translatable="yes">Previous Screenshot</property>
+ </accessibility>
+ <style>
+ <class name="circular"/>
+ <class name="osd"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="button_previous_image">
+ <property name="halign">center</property>
+ <property name="icon-name">carousel-arrow-previous-symbolic</property>
+ <property name="icon-size">1</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <property name="name">previous</property>
+ <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
+ </object>
+ </child>
</object>
</child>
</object>
+ <packing>
+ <property name="pass-through">True</property>
+ </packing>
</child>
- </object>
- <packing>
- <property name="pass-through">True</property>
- </packing>
- </child>
- <child type="overlay">
- <object class="GtkRevealer" id="button_next_revealer">
- <property name="halign">end</property>
- <property name="transition-type">crossfade</property>
- <property name="valign">center</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkButton" id="button_next">
+ <child type="overlay">
+ <object class="GtkRevealer" id="button_next_revealer">
+ <property name="halign">end</property>
+ <property name="transition-type">crossfade</property>
+ <property name="valign">center</property>
<property name="visible">True</property>
- <property name="width-request">64</property>
- <property name="height-request">64</property>
- <property name="margin">9</property>
- <signal name="clicked" handler="gs_screenshot_carousel_button_next_clicked_cb"
swapped="yes"/>
- <accessibility>
- <!-- Translators: This is the accessible description for a button to go to the
next screenshot in the screenshot carousel. -->
- <property name="label" translatable="yes">Next Screenshot</property>
- </accessibility>
- <style>
- <class name="circular"/>
- <class name="osd"/>
- </style>
<child>
- <object class="GtkImage" id="button_next_image">
- <property name="halign">center</property>
- <property name="icon-name">carousel-arrow-next-symbolic</property>
- <property name="icon-size">1</property>
- <property name="valign">center</property>
+ <object class="GtkButton" id="button_next">
<property name="visible">True</property>
- <property name="name">next</property>
- <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="margin">9</property>
+ <signal name="clicked" handler="gs_screenshot_carousel_button_next_clicked_cb"
swapped="yes"/>
+ <accessibility>
+ <!-- Translators: This is the accessible description for a button to go to the
next screenshot in the screenshot carousel. -->
+ <property name="label" translatable="yes">Next Screenshot</property>
+ </accessibility>
+ <style>
+ <class name="circular"/>
+ <class name="osd"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="button_next_image">
+ <property name="halign">center</property>
+ <property name="icon-name">carousel-arrow-next-symbolic</property>
+ <property name="icon-size">1</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <property name="name">next</property>
+ <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
+ </object>
+ </child>
</object>
</child>
</object>
+ <packing>
+ <property name="pass-through">True</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="pass-through">True</property>
- </packing>
+ </child>
+ <child>
+ <object class="AdwCarouselIndicatorDots" id="carousel_indicator">
+ <property name="carousel">carousel</property>
+ <property name="visible">True</property>
+ </object>
</child>
</object>
- </child>
- <child>
- <object class="AdwCarouselIndicatorDots" id="carousel_indicator">
- <property name="carousel">carousel</property>
- <property name="visible">True</property>
- </object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">carousel</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <!-- Arbitrary size chosen to tile together at 16:9;
- see https://blogs.gnome.org/hughsie/2014/07/02/blurry-screenshots-in-gnome-software/ -->
- <property name="height_request">423</property>
- <property name="hexpand">True</property>
- <property name="halign">fill</property>
- <style>
- <class name="screenshot-image"/>
- <class name="frame"/>
- <class name="view"/>
- </style>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="pixel_size">64</property>
- <property name="icon_name">camera-photo-symbolic</property>
- <property name="valign">end</property>
- <property name="vexpand">True</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
+ <object class="GtkStackPage">
+ <property name="name">fallback</property>
+ <property name="child">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">start</property>
- <property name="vexpand">True</property>
- <property name="label" translatable="yes">No screenshot provided</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <!-- Arbitrary size chosen to tile together at 16:9;
+ see https://blogs.gnome.org/hughsie/2014/07/02/blurry-screenshots-in-gnome-software/ -->
+ <property name="height_request">423</property>
+ <property name="hexpand">True</property>
+ <property name="halign">fill</property>
+ <style>
+ <class name="screenshot-image"/>
+ <class name="frame"/>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">camera-photo-symbolic</property>
+ <property name="valign">end</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <property name="vexpand">True</property>
+ <property name="label" translatable="yes">No screenshot provided</property>
+ </object>
+ </child>
</object>
- </child>
+
+ </property>
</object>
- <packing>
- <property name="name">fallback</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-screenshot-image.ui b/src/gs-screenshot-image.ui
index 92063db4f..a65758c61 100644
--- a/src/gs-screenshot-image.ui
+++ b/src/gs-screenshot-image.ui
@@ -29,56 +29,66 @@
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="transition-type">crossfade</property>
+
<child>
- <object class="GtkPicture" id="image1">
- <property name="visible">True</property>
- <style>
- <class name="image1"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">image1</property>
- </packing>
- </child>
- <child>
- <object class="GtkPicture" id="image2">
- <property name="visible">True</property>
- <style>
- <class name="image2"/>
- </style>
+ <property name="child">
+ <object class="GtkPicture" id="image1">
+ <property name="visible">True</property>
+ <style>
+ <class name="image1"/>
+ </style>
+ </object>
+ </property>
</object>
- <packing>
- <property name="name">image2</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox" id="box_error">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="orientation">vertical</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkImage" id="image_error">
- <property name="visible">True</property>
- <property name="icon-name">dialog-error-symbolic</property>
- <property name="icon-size">6</property>
- <property name="pixel-size">48</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label_error">
+ <object class="GtkStackPage">
+ <property name="name">image2</property>
+ <property name="child">
+ <object class="GtkPicture" id="image2">
<property name="visible">True</property>
<style>
- <class name="error-label"/>
+ <class name="image2"/>
</style>
</object>
- </child>
+ </property>
</object>
- <packing>
+ </child>
+
+ <child>
+ <object class="GtkStackPage">
<property name="name">error</property>
- </packing>
+ <property name="child">
+ <object class="GtkBox" id="box_error">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkImage" id="image_error">
+ <property name="visible">True</property>
+ <property name="icon-name">dialog-error-symbolic</property>
+ <property name="icon-size">6</property>
+ <property name="pixel-size">48</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_error">
+ <property name="visible">True</property>
+ <style>
+ <class name="error-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
</child>
+
</object>
</child>
</object>
diff --git a/src/gs-search-page.ui b/src/gs-search-page.ui
index 4c3f4d517..252c44656 100644
--- a/src/gs-search-page.ui
+++ b/src/gs-search-page.ui
@@ -8,71 +8,84 @@
<child>
<object class="GtkStack" id="stack_search">
<property name="visible">True</property>
+
<child>
- <object class="AdwStatusPage">
- <property name="visible">True</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- <property name="title" translatable="yes">Search for Apps</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">no-search</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="title" translatable="yes">Search for Apps</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GtkSpinner" id="spinner_search">
- <property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">spinner</property>
- </packing>
+ <property name="child">
+ <object class="GtkSpinner" id="spinner_search">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="AdwStatusPage" id="noresults_grid_search">
- <property name="visible">True</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- <property name="title" translatable="yes">No Application Found</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">no-results</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage" id="noresults_grid_search">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="title" translatable="yes">No Application Found</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow_search">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <style>
- <class name="list-page"/>
- </style>
- <child>
- <object class="AdwClamp">
+ <object class="GtkStackPage">
+ <property name="name">results</property>
+ <property name="child">
+ <object class="GtkScrolledWindow" id="scrolledwindow_search">
<property name="visible">True</property>
- <property name="maximum-size">860</property>
- <!-- ~⅔ of the maximum size. -->
- <property name="tightening-threshold">576</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <style>
+ <class name="list-page"/>
+ </style>
<child>
- <object class="GtkListBox" id="list_box_search">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="selection_mode">none</property>
- <style>
- <class name="section"/>
- <class name="content"/>
- </style>
+ <property name="maximum-size">860</property>
+ <!-- ~⅔ of the maximum size. -->
+ <property name="tightening-threshold">576</property>
+ <child>
+ <object class="GtkListBox" id="list_box_search">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="selection_mode">none</property>
+ <style>
+ <class name="section"/>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">results</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-shell.ui b/src/gs-shell.ui
index f33a286c1..e659057f3 100644
--- a/src/gs-shell.ui
+++ b/src/gs-shell.ui
@@ -48,319 +48,422 @@
<property name="width-request">360</property>
<signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
<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>
- <signal name="get-child-position" handler="overlay_get_child_position_cb"/>
- <child type="overlay">
- <object class="GtkRevealer" id="notification_event">
+ <object class="GtkStackPage">
+ <property name="name">main</property>
+ <property name="child">
+ <object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
- <property name="halign">GTK_ALIGN_CENTER</property>
- <property name="valign">GTK_ALIGN_START</property>
- <child>
- <object class="GtkBox">
- <property name="orientation">horizontal</property>
- <property name="spacing">6</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="vexpand">True</property>
+ <signal name="get-child-position" handler="overlay_get_child_position_cb"/>
+ <child type="overlay">
+ <object class="GtkRevealer" id="notification_event">
<property name="visible">True</property>
- <style>
- <class name="app-notification"/>
- </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>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ <property name="valign">GTK_ALIGN_START</property>
<child>
<object class="GtkBox">
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
<property name="visible">True</property>
+ <style>
+ <class name="app-notification"/>
+ </style>
<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 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="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 class="GtkBox">
+ <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>
- </child>
- <child>
- <object class="GtkButton" id="button_events_dismiss">
- <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">
+ <object class="GtkButton" id="button_events_dismiss">
<property name="visible">True</property>
- <property name="icon_name">window-close-symbolic</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>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="AdwLeaflet" id="details_leaflet">
- <property name="visible">True</property>
- <property name="can-unfold">False</property>
- <signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
<child>
- <object class="AdwLeaflet" id="main_leaflet">
+ <object class="AdwLeaflet" id="details_leaflet">
<property name="visible">True</property>
<property name="can-unfold">False</property>
<signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
<child>
- <object class="GtkBox" id="main_box">
+ <object class="AdwLeaflet" id="main_leaflet">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="can-unfold">False</property>
+ <signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
<child>
- <object class="AdwHeaderBar" id="main_header">
+ <object class="GtkBox" id="main_box">
<property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="hexpand">True</property>
- <property name="show-end-title-buttons">True</property>
- <property name="centering-policy">strict</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkToggleButton" id="search_button">
+ <object class="AdwHeaderBar" id="main_header">
<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"/>
- <accessibility>
- <property name="label" translatable="yes">Search</property>
- </accessibility>
- <style>
- <class name="image-button"/>
- </style>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="show-end-title-buttons">True</property>
+ <property name="centering-policy">strict</property>
<child>
- <object class="GtkImage">
+ <object class="GtkToggleButton" id="search_button">
<property name="visible">True</property>
- <property name="icon_name">edit-find-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"/>
+ <accessibility>
+ <property name="label" translatable="yes">Search</property>
+ </accessibility>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <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">start</property>
+ </packing>
</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>
- <accessibility>
- <property name="label" translatable="yes">Primary Menu</property>
- </accessibility>
+
<child>
- <object class="GtkImage">
+ <object class="GtkMenuButton" id="menu_button">
<property name="visible">True</property>
- <property name="icon_name">open-menu-symbolic</property>
- <property name="icon_size">1</property>
+ <property name="can_focus">True</property>
+ <property name="sensitive">True</property>
+ <property name="menu_model">primary_menu</property>
+ <accessibility>
+ <property name="label" translatable="yes">Primary Menu</property>
+ </accessibility>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <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>
+ <child type="title">
+ <object class="AdwViewSwitcherTitle" id="title_switcher">
+ <property name="visible">True</property>
+ <property name="stack">stack_main</property>
+ <property name="title" bind-source="GsShell" bind-property="title"
bind-flags="sync-create"/>
</object>
</child>
- <style>
- <class name="image-button"/>
- </style>
- </object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
- </child>
- <child type="title">
- <object class="AdwViewSwitcherTitle" id="title_switcher">
- <property name="visible">True</property>
- <property name="stack">stack_main</property>
- <property name="title" bind-source="GsShell" bind-property="title"
bind-flags="sync-create"/>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkSearchBar" id="search_bar">
- <property name="visible">True</property>
- <property name="key-capture-widget">GsShell</property>
<child>
- <object class="AdwClamp">
+ <object class="GtkSearchBar" id="search_bar">
<property name="visible">True</property>
- <property name="hexpand">True</property>
- <property name="maximum_size">500</property>
- <property name="tightening_threshold">500</property>
+ <property name="key-capture-widget">GsShell</property>
<child>
- <object class="GtkSearchEntry" id="entry_search">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="activates_default">True</property>
- <property name="max_length">100</property>
- <signal name="search-changed" handler="search_changed_handler"/>
+ <property name="hexpand">True</property>
+ <property name="maximum_size">500</property>
+ <property name="tightening_threshold">500</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="max_length">100</property>
+ <signal name="search-changed" handler="search_changed_handler"/>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
- </object>
- </child>
- <child>
- <object class="GtkInfoBar" id="metered_updates_bar">
- <property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="spacing">12</property>
- <property name="message-type">GTK_MESSAGE_INFO</property>
- <property name="show-close-button">False</property>
- <property name="revealed">False</property>
- <signal name="response" handler="gs_shell_metered_updates_bar_response_cb"/>
- <child internal-child="content_area">
- <object class="GtkBox">
+ <child>
+ <object class="GtkInfoBar" id="metered_updates_bar">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <property name="margin_top">6</property>
- <property name="margin_left">6</property>
- <property name="margin_bottom">6</property>
- <child>
- <object class="GtkLabel">
+ <property name="orientation">horizontal</property>
+ <property name="spacing">12</property>
+ <property name="message-type">GTK_MESSAGE_INFO</property>
+ <property name="show-close-button">False</property>
+ <property name="revealed">False</property>
+ <signal name="response" handler="gs_shell_metered_updates_bar_response_cb"/>
+ <child internal-child="content_area">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Automatic Updates
Paused</property>
- <property name="xalign">0.0</property>
- <property name="wrap">True</property>
- <attributes>
- <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
- </attributes>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="margin_top">6</property>
+ <property name="margin_left">6</property>
+ <property name="margin_bottom">6</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Automatic Updates
Paused</property>
+ <property name="xalign">0.0</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ </attributes>
+ </object>
+ </child>
</object>
</child>
- </object>
- </child>
- <child internal-child="action_area">
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin_right">6</property>
- <child>
- <object class="GtkButton" id="metered_updates_button">
+ <child internal-child="action_area">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes">Find Out _More</property>
+ <property name="margin_right">6</property>
+ <child>
+ <object class="GtkButton" id="metered_updates_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">Find Out _More</property>
+ </object>
+ </child>
</object>
</child>
+ <action-widgets>
+ <action-widget
response="GTK_RESPONSE_OK">metered_updates_button</action-widget>
+ </action-widgets>
</object>
</child>
- <action-widgets>
- <action-widget
response="GTK_RESPONSE_OK">metered_updates_button</action-widget>
- </action-widgets>
- </object>
- </child>
- <child>
- <object class="GtkStack" id="stack_main">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="transition-type">crossfade</property>
- <signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
<child>
- <object class="GsOverviewPage" id="overview_page">
+ <object class="GtkStack" id="stack_main">
<property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="transition-type">crossfade</property>
+ <signal name="notify::visible-child"
handler="stack_notify_visible_child_cb"/>
+ <child>
+ <object class="GtkStackPage">
+ <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">explore2-symbolic</property>
+ <property name="child">
+ <object class="GsOverviewPage" id="overview_page">
+ <property name="visible">True</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">installed</property>
+ <!-- FIXME: Add mnemonics support when it’s supported in GTK (same for
the other pages).
+ See https://gitlab.gnome.org/GNOME/gtk/-/issues/3134 -->
+ <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">app-installed-symbolic</property>
+ <property name="child">
+ <object class="GsInstalledPage" id="installed_page">
+ <property name="visible">True</property>
+ <property name="is-narrow" bind-source="GsShell"
bind-property="is-narrow" bind-flags="sync-create"/>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">search</property>
+ <property name="child">
+ <object class="GsSearchPage" id="search_page">
+ <property name="visible">True</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <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">emblem-synchronizing-symbolic</property>
+ <property name="child">
+ <object class="GsUpdatesPage" id="updates_page">
+ <property name="visible">True</property>
+ <property name="is-narrow" bind-source="GsShell"
bind-property="is-narrow" bind-flags="sync-create"/>
+ <signal name="notify::counter"
handler="updates_page_notify_counter_cb"/>
+ </object>
+ </property>
+ </object>
+ </child>
</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">explore2-symbolic</property>
- </packing>
</child>
<child>
- <object class="GsInstalledPage" id="installed_page">
+ <object class="AdwViewSwitcherBar" id="sidebar_switcher">
<property name="visible">True</property>
- <property name="is-narrow" bind-source="GsShell" bind-property="is-narrow"
bind-flags="sync-create"/>
+ <property name="reveal" bind-source="title_switcher"
bind-property="title-visible" bind-flags="sync-create"/>
+ <property name="stack">stack_main</property>
</object>
- <packing>
- <property name="name">installed</property>
- <!-- FIXME: Add mnemonics support when it’s supported in GTK (same for the
other pages).
- See https://gitlab.gnome.org/GNOME/gtk/-/issues/3134 -->
- <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">app-installed-symbolic</property>
- </packing>
</child>
+ </object>
+ <packing>
+ <property name="name">main</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="sub_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GsSearchPage" id="search_page">
+ <object class="AdwHeaderBar" id="sub_header">
<property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="show-end-title-buttons">True</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkButton" id="button_back">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="clicked" handler="gs_shell_back_button_cb"/>
+ <accessibility>
+ <property name="label" translatable="yes">Go back</property>
+ </accessibility>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage" id="back_image">
+ <property name="visible">True</property>
+ <property name="icon_name">go-previous-symbolic</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="title">
+ <object class="GtkLabel" id="sub_page_header_title">
+ <property name="visible">True</property>
+ <property name="selectable">False</property>
+ <property name="ellipsize">end</property>
+ <style>
+ <class name="title"/>
+ </style>
+ </object>
+ </child>
</object>
- <packing>
- <property name="name">search</property>
- </packing>
</child>
<child>
- <object class="GsUpdatesPage" id="updates_page">
+ <object class="GtkStack" id="stack_sub">
<property name="visible">True</property>
- <property name="is-narrow" bind-source="GsShell" bind-property="is-narrow"
bind-flags="sync-create"/>
- <signal name="notify::counter" handler="updates_page_notify_counter_cb"/>
+ <property name="homogeneous">False</property>
+ <property name="transition-type">crossfade</property>
+ <signal name="notify::visible-child"
handler="stack_notify_visible_child_cb"/>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">moderate</property>
+ <property name="child">
+ <object class="GsModeratePage" id="moderate_page">
+ <property name="visible">True</property>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">category</property>
+ <property name="child">
+ <object class="GsCategoryPage" id="category_page">
+ <property name="visible">True</property>
+ <signal name="app-clicked" handler="category_page_app_clicked_cb"/>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">extras</property>
+ <property name="child">
+ <object class="GsExtrasPage" id="extras_page">
+ <property name="visible">True</property>
+ </object>
+ </property>
+ </object>
+ </child>
</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">emblem-synchronizing-symbolic</property>
- </packing>
</child>
</object>
- </child>
- <child>
- <object class="AdwViewSwitcherBar" id="sidebar_switcher">
- <property name="visible">True</property>
- <property name="reveal" bind-source="title_switcher"
bind-property="title-visible" bind-flags="sync-create"/>
- <property name="stack">stack_main</property>
- </object>
+ <packing>
+ <property name="name">sub</property>
+ </packing>
</child>
</object>
<packing>
@@ -368,20 +471,25 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="sub_box">
+ <object class="GtkBox" id="details_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
- <object class="AdwHeaderBar" id="sub_header">
+ <object class="AdwHeaderBar" id="details_header">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="show-end-title-buttons">True</property>
<property name="hexpand">True</property>
+ <property name="show-end-title-buttons">True</property>
+ <property name="title-widget">
+ <object class="AdwWindowTitle">
+ <property name="title" bind-source="details_page" bind-property="title"
bind-flags="sync-create"/>
+ </object>
+ </property>
<child>
- <object class="GtkButton" id="button_back">
+ <object class="GtkButton" id="button_back2">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <signal name="clicked" handler="gs_shell_back_button_cb"/>
+ <signal name="clicked" handler="gs_shell_details_back_button_cb"/>
<accessibility>
<property name="label" translatable="yes">Go back</property>
</accessibility>
@@ -389,7 +497,7 @@
<class name="image-button"/>
</style>
<child>
- <object class="GtkImage" id="back_image">
+ <object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">go-previous-symbolic</property>
<property name="icon_size">1</property>
@@ -397,141 +505,52 @@
</child>
</object>
</child>
- <child type="title">
- <object class="GtkLabel" id="sub_page_header_title">
- <property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="ellipsize">end</property>
- <style>
- <class name="title"/>
- </style>
- </object>
- </child>
</object>
</child>
<child>
- <object class="GtkStack" id="stack_sub">
+ <object class="GsDetailsPage" id="details_page">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="transition-type">crossfade</property>
- <signal name="notify::visible-child" handler="stack_notify_visible_child_cb"/>
- <child>
- <object class="GsModeratePage" id="moderate_page">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="name">moderate</property>
- </packing>
- </child>
- <child>
- <object class="GsCategoryPage" id="category_page">
- <property name="visible">True</property>
- <signal name="app-clicked" handler="category_page_app_clicked_cb"/>
- </object>
- <packing>
- <property name="name">category</property>
- </packing>
- </child>
- <child>
- <object class="GsExtrasPage" id="extras_page">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="name">extras</property>
- </packing>
- </child>
+ <property name="is-narrow" bind-source="GsShell" bind-property="is-narrow"
bind-flags="sync-create"/>
</object>
</child>
</object>
<packing>
- <property name="name">sub</property>
+ <property name="name">details</property>
</packing>
</child>
</object>
- <packing>
- <property name="name">main</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="details_box">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="AdwHeaderBar" id="details_header">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="hexpand">True</property>
- <property name="show-end-title-buttons">True</property>
- <property name="title-widget">
- <object class="AdwWindowTitle">
- <property name="title" bind-source="details_page" bind-property="title"
bind-flags="sync-create"/>
- </object>
- </property>
- <child>
- <object class="GtkButton" id="button_back2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <signal name="clicked" handler="gs_shell_details_back_button_cb"/>
- <accessibility>
- <property name="label" translatable="yes">Go back</property>
- </accessibility>
- <style>
- <class name="image-button"/>
- </style>
- <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>
- </object>
- </child>
- <child>
- <object class="GsDetailsPage" id="details_page">
- <property name="visible">True</property>
- <property name="is-narrow" bind-source="GsShell" bind-property="is-narrow"
bind-flags="sync-create"/>
- </object>
- </child>
- </object>
- <packing>
- <property name="name">details</property>
- </packing>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">main</property>
- </packing>
</child>
<child>
- <object class="GtkOverlay">
- <property name="visible">True</property>
- <child type="overlay">
- <object class="GtkHeaderBar">
- <property name="visible">True</property>
- <property name="show_close_button">True</property>
- <property name="valign">start</property>
- </object>
- </child>
- <child>
- <object class="AdwWindowHandle">
+ <object class="GtkStackPage">
+ <property name="name">loading</property>
+ <property name="child">
+ <object class="GtkOverlay">
<property name="visible">True</property>
+ <child type="overlay">
+ <object class="GtkHeaderBar">
+ <property name="visible">True</property>
+ <property name="show_close_button">True</property>
+ <property name="valign">start</property>
+ </object>
+ </child>
<child>
- <object class="GsLoadingPage" id="loading_page">
+ <object class="AdwWindowHandle">
<property name="visible">True</property>
- <signal name="refreshed" handler="initial_refresh_done"/>
+ <child>
+ <object class="GsLoadingPage" id="loading_page">
+ <property name="visible">True</property>
+ <signal name="refreshed" handler="initial_refresh_done"/>
+ </object>
+ </child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">loading</property>
- </packing>
</child>
</object>
</child>
diff --git a/src/gs-summary-tile.ui b/src/gs-summary-tile.ui
index f23bafde3..290f6a25e 100644
--- a/src/gs-summary-tile.ui
+++ b/src/gs-summary-tile.ui
@@ -13,122 +13,129 @@
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
+
<child>
- <object class="GtkImage" id="waiting">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="pixel-size">16</property>
- <property name="icon-name">content-loading-symbolic</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">waiting</property>
- </packing>
+ <property name="child">
+ <object class="GtkImage" id="waiting">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="icon-name">content-loading-symbolic</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GtkOverlay" id="overlay">
- <property name="visible">True</property>
- <property name="halign">fill</property>
- <property name="valign">fill</property>
- <child type="overlay">
- <object class="GtkEventBox" id="eventbox">
- <property name="visible">False</property>
- <property name="no_show_all">True</property>
- <property name="visible_window">True</property>
- <property name="halign">end</property>
- <property name="valign">start</property>
- <child>
- <object class="GtkImage" id="installed-icon">
- <property name="visible">True</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="pixel-size">16</property>
- <property name="margin-top">6</property>
- <property name="margin-right">6</property>
- <property name="icon-name">software-installed-symbolic</property>
- <style>
- <class name="installed-icon"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkGrid" id="grid">
+ <object class="GtkStackPage">
+ <property name="name">content</property>
+ <property name="child">
+ <object class="GtkOverlay" id="overlay">
<property name="visible">True</property>
- <property name="margin-top">17</property>
- <property name="margin-bottom">17</property>
- <property name="margin-start">17</property>
- <property name="margin-end">17</property>
- <property name="row-spacing">1</property>
- <property name="column-spacing">14</property>
- <child>
- <object class="GtkImage" id="image">
- <property name="visible">True</property>
- <property name="pixel-size">64</property>
- <style>
- <class name="icon-dropshadow"/>
- </style>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child type="overlay">
+ <object class="GtkEventBox" id="eventbox">
+ <property name="visible">False</property>
+ <property name="no_show_all">True</property>
+ <property name="visible_window">True</property>
+ <property name="halign">end</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkImage" id="installed-icon">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="pixel-size">16</property>
+ <property name="margin-top">6</property>
+ <property name="margin-right">6</property>
+ <property name="icon-name">software-installed-symbolic</property>
+ <style>
+ <class name="installed-icon"/>
+ </style>
+ </object>
+ </child>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
<child>
- <object class="GtkBox" id="box">
+ <object class="GtkGrid" id="grid">
<property name="visible">True</property>
- <property name="valign">center</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
+ <property name="margin-top">17</property>
+ <property name="margin-bottom">17</property>
+ <property name="margin-start">17</property>
+ <property name="margin-end">17</property>
+ <property name="row-spacing">1</property>
+ <property name="column-spacing">14</property>
<child>
- <object class="GtkLabel" id="name">
+ <object class="GtkImage" id="image">
<property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0.0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
+ <property name="pixel-size">64</property>
<style>
- <class name="app-tile-label"/>
+ <class name="icon-dropshadow"/>
</style>
</object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
</child>
<child>
- <object class="GtkLabel" id="summary">
+ <object class="GtkBox" id="box">
<property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0.0</property>
- <property name="yalign">0.0</property>
- <property name="lines">2</property>
- <property name="vexpand">True</property>
- <property name="single-line-mode">True</property>
- <property name="wrap">True</property>
- <style>
- <class name="app-tile-label"/>
- </style>
+ <property name="valign">center</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="name">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="summary">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0.0</property>
+ <property name="yalign">0.0</property>
+ <property name="lines">2</property>
+ <property name="vexpand">True</property>
+ <property name="single-line-mode">True</property>
+ <property name="wrap">True</property>
+ <style>
+ <class name="app-tile-label"/>
+ </style>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">content</property>
- </packing>
</child>
+
</object>
</child>
</template>
diff --git a/src/gs-update-dialog.ui b/src/gs-update-dialog.ui
index b68447cf7..17238b317 100644
--- a/src/gs-update-dialog.ui
+++ b/src/gs-update-dialog.ui
@@ -53,65 +53,75 @@
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="transition_duration">300</property>
+
<child>
- <object class="GtkBox" id="box_spinner">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <property name="halign">center</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <style>
- <class name="dim-label"/>
- </style>
- <child>
- <object class="GtkSpinner" id="spinner">
+ <object class="GtkStackPage">
+ <property name="name">spinner</property>
+ <property name="child">
+ <object class="GtkBox" id="box_spinner">
<property name="visible">True</property>
- <property name="width_request">32</property>
- <property name="height_request">32</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="visible">True</property>
+ <property name="width_request">32</property>
+ <property name="height_request">32</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">spinner</property>
- </packing>
</child>
+
<child>
- <object class="AdwStatusPage">
- <property name="visible">True</property>
- <property name="icon_name">org.gnome.Software-symbolic</property>
- <property name="title" translatable="yes">No updates have been installed on this
system.</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">empty</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage">
+ <property name="visible">True</property>
+ <property name="icon_name">org.gnome.Software-symbolic</property>
+ <property name="title" translatable="yes">No updates have been installed on this
system.</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="AdwPreferencesPage">
- <property name="visible">True</property>
- <child>
- <object class="AdwPreferencesGroup">
+ <object class="GtkStackPage">
+ <property name="name">installed-updates-list</property>
+ <property name="child">
+ <object class="AdwPreferencesPage">
<property name="visible">True</property>
<child>
- <object class="GsUpdateList" id="list_box_installed_updates">
+ <object class="AdwPreferencesGroup">
<property name="visible">True</property>
- <style>
- <class name="content" />
- </style>
+ <child>
+ <object class="GsUpdateList" id="list_box_installed_updates">
+ <property name="visible">True</property>
+ <style>
+ <class name="content" />
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">installed-updates-list</property>
- </packing>
</child>
+
</object>
</child>
</object>
diff --git a/src/gs-updates-page.ui b/src/gs-updates-page.ui
index f04686d98..445927251 100644
--- a/src/gs-updates-page.ui
+++ b/src/gs-updates-page.ui
@@ -63,178 +63,190 @@
<child>
<object class="GtkStack" id="stack_updates">
<property name="visible">True</property>
+
<child>
- <object class="AdwClamp">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <!-- We explicitly want to use the default AdwClamp sizes here,
- as does AdwStatusPage. -->
- <style>
- <class name="status-page"/>
- </style>
- <child>
- <object class="GtkBox">
+ <object class="GtkStackPage">
+ <property name="name">spinner</property>
+ <property name="child">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
<property name="valign">center</property>
+ <!-- We explicitly want to use the default AdwClamp sizes here,
+ as does AdwStatusPage. -->
+ <style>
+ <class name="status-page"/>
+ </style>
<child>
- <object class="GtkSpinner" id="spinner_updates">
- <property name="visible">True</property>
- <style>
- <class name="icon"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="label_updates_spinner">
- <property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="wrap-mode">word-char</property>
- <property name="justify">center</property>
- <property name="label" translatable="yes" comments="TRANSLATORS: the updates panel
is starting up.">Loading Updates…</property>
- <style>
- <class name="title"/>
- <class name="large-title"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="wrap-mode">word-char</property>
- <property name="justify">center</property>
- <property name="use-markup">True</property>
- <property name="label" translatable="yes" comments="TRANSLATORS: the updates panel
is starting up.">This could take a while.</property>
- <style>
- <class name="body"/>
- <class name="description"/>
- </style>
+ <property name="orientation">vertical</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkSpinner" id="spinner_updates">
+ <property name="visible">True</property>
+ <style>
+ <class name="icon"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_updates_spinner">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="justify">center</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS: the updates
panel is starting up.">Loading Updates…</property>
+ <style>
+ <class name="title"/>
+ <class name="large-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="justify">center</property>
+ <property name="use-markup">True</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS: the updates
panel is starting up.">This could take a while.</property>
+ <style>
+ <class name="body"/>
+ <class name="description"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">spinner</property>
- </packing>
</child>
+
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow_updates">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <style>
- <class name="list-page"/>
- </style>
- <child>
- <object class="AdwClamp">
+ <object class="GtkStackPage">
+ <property name="name">view</property>
+ <property name="child">
+ <object class="GtkScrolledWindow" id="scrolledwindow_updates">
<property name="visible">True</property>
- <property name="maximum-size">600</property>
- <property name="tightening-threshold">400</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <style>
+ <class name="list-page"/>
+ </style>
<child>
- <object class="GtkBox" id="list_box_updates_box">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="maximum-size">600</property>
+ <property name="tightening-threshold">400</property>
<child>
- <object class="GsUpgradeBanner" id="upgrade_banner">
- <property name="visible">False</property>
- <property name="hexpand">True</property>
- <property name="vexpand">False</property>
- <property name="margin-top">12</property>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="updates_box">
+ <object class="GtkBox" id="list_box_updates_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="spacing">24</property>
+ <child>
+ <object class="GsUpgradeBanner" id="upgrade_banner">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">False</property>
+ <property name="margin-top">12</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="updates_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">24</property>
+ </object>
+ </child>
</object>
</child>
</object>
</child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">view</property>
- </packing>
</child>
+
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">48</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GsUpgradeBanner" id="upgrade_banner_uptodate">
- <property name="visible">False</property>
+ <object class="GtkStackPage">
+ <property name="name">uptodate</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">48</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
- </object>
- </child>
- <child>
-
- <!-- FIXME: This should be a AdwStatusPage but it doesn’t
- currently support non-icon images
- See https://gitlab.gnome.org/GNOME/libhandy/-/issues/448 -->
- <object class="GtkScrolledWindow">
- <property name="visible">True</property>
- <property name="hscrollbar-policy">never</property>
- <property name="propagate-natural-height">True</property>
- <style>
- <class name="fake-adw-status-page"/>
- </style>
<child>
- <object class="GtkBox">
+ <object class="GsUpgradeBanner" id="upgrade_banner_uptodate">
+ <property name="visible">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ </object>
+ </child>
+ <child>
+
+ <!-- FIXME: This should be a AdwStatusPage but it doesn’t
+ currently support non-icon images
+ See https://gitlab.gnome.org/GNOME/libhandy/-/issues/448 -->
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="valign">center</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="propagate-natural-height">True</property>
+ <style>
+ <class name="fake-adw-status-page"/>
+ </style>
<child>
- <object class="AdwClamp">
+ <object class="GtkBox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="valign">center</property>
<child>
- <object class="GtkBox">
+ <object class="AdwClamp">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="valign">center</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <!--><property name="pixel-size">400</property>-->
- <property name="resource">/org/gnome/Software/up-to-date.svg</property>
- <style>
- <class name="icon"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="wrap-mode">word-char</property>
- <property name="justify">center</property>
- <property name="label" translatable="yes" comments="TRANSLATORS: This
means all software (plural) installed on this system is up to date.">Up to Date</property>
- <style>
- <class name="title"/>
- <class name="large-title"/>
- </style>
- </object>
- </child>
<child>
- <object class="GtkLabel" id="uptodate_description">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="wrap">True</property>
- <property name="wrap-mode">word-char</property>
- <property name="justify">center</property>
- <property name="use-markup">True</property>
- <property name="label">Last checked: HH:MM</property>
- <style>
- <class name="body"/>
- <class name="description"/>
- </style>
+ <property name="orientation">vertical</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <!--><property name="pixel-size">400</property>-->
+ <property
name="resource">/org/gnome/Software/up-to-date.svg</property>
+ <style>
+ <class name="icon"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="justify">center</property>
+ <property name="label" translatable="yes" comments="TRANSLATORS:
This means all software (plural) installed on this system is up to date.">Up to Date</property>
+ <style>
+ <class name="title"/>
+ <class name="large-title"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="uptodate_description">
+ <property name="visible">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap-mode">word-char</property>
+ <property name="justify">center</property>
+ <property name="use-markup">True</property>
+ <property name="label">Last checked: HH:MM</property>
+ <style>
+ <class name="body"/>
+ <class name="description"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -242,77 +254,87 @@
</object>
</child>
</object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
</child>
</object>
- <packing>
- <property name="expand">True</property>
- </packing>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">uptodate</property>
- </packing>
</child>
+
<child>
- <object class="AdwStatusPage">
- <property name="visible">True</property>
- <property name="icon_name">dialog-warning-symbolic</property>
- <property name="title" translatable="yes">Use Mobile Data?</property>
- <property name="description" translatable="yes">Checking for updates when using mobile
broadband could cause you to incur charges.</property>
- <child>
- <object class="GtkButton" id="button_updates_mobile">
- <property name="label" translatable="yes">_Check Anyway</property>
+ <object class="GtkStackPage">
+ <property name="name">mobile</property>
+ <property name="child">
+ <object class="AdwStatusPage">
<property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="halign">center</property>
+ <property name="icon_name">dialog-warning-symbolic</property>
+ <property name="title" translatable="yes">Use Mobile Data?</property>
+ <property name="description" translatable="yes">Checking for updates when using mobile
broadband could cause you to incur charges.</property>
+ <child>
+ <object class="GtkButton" id="button_updates_mobile">
+ <property name="label" translatable="yes">_Check Anyway</property>
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">mobile</property>
- </packing>
</child>
+
<child>
- <object class="AdwStatusPage">
- <property name="visible">True</property>
- <property name="icon_name">network-offline-symbolic</property>
- <property name="title" translatable="yes">No Connection</property>
- <property name="description" translatable="yes">Go online to check for updates.</property>
- <child>
- <object class="GtkButton" id="button_updates_offline">
- <property name="label" translatable="yes">_Network Settings</property>
+ <object class="GtkStackPage">
+ <property name="name">offline</property>
+ <property name="child">
+ <object class="AdwStatusPage">
<property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="halign">center</property>
+ <property name="icon_name">network-offline-symbolic</property>
+ <property name="title" translatable="yes">No Connection</property>
+ <property name="description" translatable="yes">Go online to check for
updates.</property>
+ <child>
+ <object class="GtkButton" id="button_updates_offline">
+ <property name="label" translatable="yes">_Network Settings</property>
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="halign">center</property>
+ </object>
+ </child>
</object>
- </child>
+ </property>
</object>
- <packing>
- <property name="name">offline</property>
- </packing>
</child>
+
<child>
- <object class="AdwStatusPage" id="updates_failed_page">
- <property name="visible">True</property>
- <property name="icon_name">action-unavailable-symbolic</property>
- <property name="title" translatable="No">Error</property>
- <property name="description" translatable="No">Failed to get updates.</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">failed</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage" id="updates_failed_page">
+ <property name="visible">True</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ <property name="title" translatable="No">Error</property>
+ <property name="description" translatable="No">Failed to get updates.</property>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="AdwStatusPage">
- <property name="visible">True</property>
- <property name="icon_name">action-unavailable-symbolic</property>
- <property name="title" translatable="yes">Error</property>
- <property name="description" translatable="yes">Updates are automatically managed.</property>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">managed</property>
- </packing>
+ <property name="child">
+ <object class="AdwStatusPage">
+ <property name="visible">True</property>
+ <property name="icon_name">action-unavailable-symbolic</property>
+ <property name="title" translatable="yes">Error</property>
+ <property name="description" translatable="yes">Updates are automatically
managed.</property>
+ </object>
+ </property>
+ </object>
</child>
+
</object>
</child>
</object>
diff --git a/src/gs-updates-section.ui b/src/gs-updates-section.ui
index 70baff567..d9bb75121 100644
--- a/src/gs-updates-section.ui
+++ b/src/gs-updates-section.ui
@@ -26,45 +26,55 @@
<child>
<object class="GtkStack" id="button_stack">
<property name="visible">True</property>
+
<child>
- <object class="GsProgressButton" id="button_download">
- <property name="visible">True</property>
- <property name="use_underline">True</property>
- <property name="label" translatable="yes">_Download</property>
- <signal name="clicked" handler="_button_download_clicked_cb" swapped="yes"/>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">download</property>
- </packing>
+ <property name="child">
+ <object class="GsProgressButton" id="button_download">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Download</property>
+ <signal name="clicked" handler="_button_download_clicked_cb" swapped="yes"/>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GsProgressButton" id="button_update">
- <property name="visible">True</property>
- <signal name="clicked" handler="_button_update_all_clicked_cb" swapped="yes"/>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">update</property>
- </packing>
+ <property name="child">
+ <object class="GsProgressButton" id="button_update">
+ <property name="visible">True</property>
+ <signal name="clicked" handler="_button_update_all_clicked_cb" swapped="yes"/>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ </property>
+ </object>
</child>
+
<child>
- <object class="GsProgressButton" id="button_cancel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Cancel</property>
- <signal name="clicked" handler="_button_cancel_clicked_cb" swapped="yes"/>
- <style>
- <class name="install-progress"/>
- </style>
- </object>
- <packing>
+ <object class="GtkStackPage">
<property name="name">cancel</property>
- </packing>
+ <property name="child">
+ <object class="GsProgressButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Cancel</property>
+ <signal name="clicked" handler="_button_cancel_clicked_cb" swapped="yes"/>
+ <style>
+ <class name="install-progress"/>
+ </style>
+ </object>
+ </property>
+ </object>
</child>
+
</object>
<packing>
<property name="pack-type">end</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]