[gnome-software: 64/110] Declare GtkStack pages with GtkStackPage




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&apos; 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&apos; 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 (&apos;picked&apos;) 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 &amp; 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 (&apos;picked&apos;) 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 &amp; 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]