[libadwaita/wip/exalm/about] about-window: Stop using expressions




commit aae15a84286568cc5991c0546dcd4b9dad52f595
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Thu Jul 28 19:53:57 2022 +0400

    about-window: Stop using expressions
    
    Sad, but it's not worse than crashing.
    
    Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/523

 src/adw-about-window.c  | 170 +++++++++++++++++++++++++++++++++++-------------
 src/adw-about-window.ui | 160 ++++++++++-----------------------------------
 2 files changed, 157 insertions(+), 173 deletions(-)
---
diff --git a/src/adw-about-window.c b/src/adw-about-window.c
index f5cc95ab..cb83fc28 100644
--- a/src/adw-about-window.c
+++ b/src/adw-about-window.c
@@ -240,14 +240,33 @@ struct _AdwAboutWindow {
   GtkWidget *leaflet;
   GtkWidget *subpage_stack;
   GtkWidget *toast_overlay;
+  GtkWidget *main_scrolled_window;
+  GtkWidget *headerbar_stack;
+
+  GtkWidget *app_icon_image;
+  GtkWidget *app_name_label;
+  GtkWidget *developer_name_label;
+  GtkWidget *version_button;
+
+  GtkWidget *details_group;
+  GtkWidget *whats_new_row;
+  GtkWidget *comments_label;
   GtkWidget *website_row;
   GtkWidget *links_group;
   GtkWidget *details_website_row;
+  GtkWidget *details_row;
+  GtkTextBuffer *release_notes_buffer;
+
+  GtkWidget *support_group;
+  GtkWidget *support_row;
+  GtkWidget *issue_row;
+  GtkWidget *troubleshooting_row;
+  GtkWidget *debug_info_page;
+
+  GtkWidget *credits_legal_group;
   GtkWidget *credits_box;
   GtkWidget *legal_box;
   GtkWidget *acknowledgements_box;
-  GtkWidget *debug_info_page;
-  GtkTextBuffer *release_notes_buffer;
 
   char *application_icon;
   char *application_name;
@@ -326,39 +345,18 @@ free_legal_section (LegalSection *section)
   g_free (section);
 }
 
-static gboolean
-boolean_or (AdwAboutWindow *self,
-            int             number,
-            ...)
+static void
+update_headerbar_cb (AdwAboutWindow *self)
 {
-  va_list args;
-
-  va_start (args, number);
-
-  for (gsize i = 0; i < number; i++)
-    if (va_arg (args, gboolean)) {
-      va_end (args);
-
-      return TRUE;
-    }
-
-  va_end (args);
+  GtkAdjustment *adj;
+  double value;
+  const char *name;
 
-  return FALSE;
-}
+  adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->main_scrolled_window));
+  value = gtk_adjustment_get_value (adj);
+  name = g_strdup (value > 0 ? "regular" : "top");
 
-static gboolean
-string_is_not_empty (AdwAboutWindow *self,
-                     const char     *string)
-{
-  return string && string[0];
-}
-
-static char *
-get_headerbar_name (AdwAboutWindow *self,
-                    double          value)
-{
-  return g_strdup (value > 0 ? "regular" : "top");
+  gtk_stack_set_visible_child_name (GTK_STACK (self->headerbar_stack), name);
 }
 
 static inline void
@@ -388,6 +386,15 @@ activate_link_default_cb (AdwAboutWindow *self,
   return GDK_EVENT_STOP;
 }
 
+static void
+update_credits_legal_group (AdwAboutWindow *self)
+{
+  gtk_widget_set_visible (self->credits_legal_group,
+                          gtk_widget_get_visible (self->credits_box) ||
+                          gtk_widget_get_visible (self->legal_box) ||
+                          gtk_widget_get_visible (self->acknowledgements_box));
+}
+
 /* Adapted from text_buffer_new() in gtkaboutdialog.c */
 static void
 parse_person (char      *person,
@@ -532,6 +539,8 @@ update_credits (AdwAboutWindow *self)
 
   gtk_widget_set_visible (self->credits_box,
                           !!gtk_widget_get_first_child (self->credits_box));
+
+  update_credits_legal_group (self);
 }
 
 static char *
@@ -639,6 +648,8 @@ update_legal (AdwAboutWindow *self)
 
   gtk_widget_set_visible (self->legal_box,
                           !!gtk_widget_get_first_child (self->legal_box));
+
+  update_credits_legal_group (self);
 }
 
 typedef enum {
@@ -910,8 +921,11 @@ update_release_notes (AdwAboutWindow *self)
 
   gtk_text_buffer_set_text (self->release_notes_buffer, "", -1);
 
-  if (!self->release_notes || !*self->release_notes)
+  if (!self->release_notes || !*self->release_notes) {
+    gtk_widget_hide (self->whats_new_row);
+
     return;
+  }
 
   pdata.buffer = self->release_notes_buffer;
   gtk_text_buffer_get_start_iter (self->release_notes_buffer, &pdata.iter);
@@ -961,6 +975,8 @@ update_release_notes (AdwAboutWindow *self)
     g_error_free (error);
     g_free (position);
 
+    gtk_widget_show (self->whats_new_row);
+
     return;
   }
 
@@ -970,20 +986,41 @@ update_release_notes (AdwAboutWindow *self)
   gtk_text_buffer_delete (self->release_notes_buffer, &pdata.iter, &end_iter);
 
   g_markup_parse_context_free (context);
+
+  gtk_widget_show (self->whats_new_row);
 }
 
 static void
-update_links (AdwAboutWindow *self)
+update_details (AdwAboutWindow *self)
 {
   gboolean has_website = self->website && *self->website;
   gboolean has_comments = self->comments && *self->comments;
+  gboolean has_release_notes = gtk_widget_get_visible (self->whats_new_row);
   gboolean show_details = has_comments || self->has_custom_links;
+  gboolean show_links = (has_website && has_comments) || self->has_custom_links;
 
+  gtk_widget_set_visible (self->comments_label, has_comments);
   gtk_widget_set_visible (self->website_row, has_website && !show_details);
-
   gtk_widget_set_visible (self->details_website_row, has_website && show_details);
-  gtk_widget_set_visible (self->links_group,
-                          (has_website && has_comments) || self->has_custom_links);
+  gtk_widget_set_visible (self->links_group, show_links);
+  gtk_widget_set_visible (self->details_row, has_comments || show_links);
+  gtk_widget_set_visible (self->details_group,
+                          has_website || has_comments ||
+                          show_links || has_release_notes);
+}
+
+static void
+update_support (AdwAboutWindow *self)
+{
+  gboolean has_support_url = self->support_url && *self->support_url;
+  gboolean has_issue_url = self->issue_url && *self->issue_url;
+  gboolean has_debug_info = self->debug_info && *self->debug_info;
+
+  gtk_widget_set_visible (self->support_row, has_support_url);
+  gtk_widget_set_visible (self->issue_row, has_issue_url);
+  gtk_widget_set_visible (self->troubleshooting_row, has_debug_info);
+  gtk_widget_set_visible (self->support_group,
+                          has_support_url || has_issue_url || has_debug_info);
 }
 
 static void
@@ -1809,18 +1846,34 @@ adw_about_window_class_init (AdwAboutWindowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, leaflet);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, subpage_stack);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, toast_overlay);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, main_scrolled_window);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, headerbar_stack);
+
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, app_icon_image);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, app_name_label);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, developer_name_label);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, version_button);
+
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, details_group);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, whats_new_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, comments_label);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, website_row);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, links_group);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, details_website_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, details_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, release_notes_buffer);
+
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, support_group);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, support_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, issue_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, troubleshooting_row);
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, debug_info_page);
+
+  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, credits_legal_group);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, credits_box);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, legal_box);
   gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, acknowledgements_box);
-  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, debug_info_page);
-  gtk_widget_class_bind_template_child (widget_class, AdwAboutWindow, release_notes_buffer);
 
-  gtk_widget_class_bind_template_callback (widget_class, boolean_or);
-  gtk_widget_class_bind_template_callback (widget_class, string_is_not_empty);
-  gtk_widget_class_bind_template_callback (widget_class, get_headerbar_name);
   gtk_widget_class_bind_template_callback (widget_class, activate_link_cb);
 
   gtk_widget_class_install_action (widget_class, "about.back", NULL,
@@ -1846,6 +1899,7 @@ adw_about_window_class_init (AdwAboutWindowClass *klass)
 static void
 adw_about_window_init (AdwAboutWindow *self)
 {
+  GtkAdjustment *adj;
   self->application_icon = g_strdup ("");
   self->application_name = g_strdup ("");
   self->developer_name = g_strdup ("");
@@ -1880,6 +1934,10 @@ adw_about_window_init (AdwAboutWindow *self)
   gtk_text_buffer_create_tag (self->release_notes_buffer, "heading",
                               "weight", PANGO_WEIGHT_BOLD,
                               NULL);
+
+  adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->main_scrolled_window));
+
+  g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (update_headerbar_cb), self);
 }
 
 /**
@@ -1939,6 +1997,9 @@ adw_about_window_set_application_icon (AdwAboutWindow *self,
   g_free (self->application_icon);
   self->application_icon = g_strdup (application_icon);
 
+  gtk_widget_set_visible (self->app_icon_image,
+                          application_icon && *application_icon);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPLICATION_ICON]);
 }
 
@@ -1984,6 +2045,9 @@ adw_about_window_set_application_name (AdwAboutWindow *self,
   g_free (self->application_name);
   self->application_name = g_strdup (application_name);
 
+  gtk_widget_set_visible (self->app_name_label,
+                          application_name && *application_name);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_APPLICATION_NAME]);
 }
 
@@ -2034,6 +2098,9 @@ adw_about_window_set_developer_name (AdwAboutWindow *self,
   g_free (self->developer_name);
   self->developer_name = g_strdup (developer_name);
 
+  gtk_widget_set_visible (self->developer_name_label,
+                          developer_name && *developer_name);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEVELOPER_NAME]);
 }
 
@@ -2082,6 +2149,8 @@ adw_about_window_set_version (AdwAboutWindow *self,
   g_free (self->version);
   self->version = g_strdup (version);
 
+  gtk_widget_set_visible (self->version_button, version && *version);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VERSION]);
 }
 
@@ -2137,6 +2206,7 @@ adw_about_window_set_release_notes_version (AdwAboutWindow *self,
   self->release_notes_version = g_strdup (version);
 
   update_release_notes (self);
+  update_details (self);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RELEASE_NOTES_VERSION]);
 }
@@ -2205,6 +2275,7 @@ adw_about_window_set_release_notes (AdwAboutWindow *self,
   self->release_notes = g_strdup (release_notes);
 
   update_release_notes (self);
+  update_details (self);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_RELEASE_NOTES]);
 }
@@ -2254,7 +2325,7 @@ adw_about_window_set_comments (AdwAboutWindow *self,
   g_free (self->comments);
   self->comments = g_strdup (comments);
 
-  update_links (self);
+  update_details (self);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_COMMENTS]);
 }
@@ -2304,7 +2375,7 @@ adw_about_window_set_website (AdwAboutWindow *self,
   g_free (self->website);
   self->website = g_strdup (website);
 
-  update_links (self);
+  update_details (self);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_WEBSITE]);
 }
@@ -2351,6 +2422,8 @@ adw_about_window_set_support_url (AdwAboutWindow *self,
   g_free (self->support_url);
   self->support_url = g_strdup (support_url);
 
+  update_support (self);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUPPORT_URL]);
 }
 
@@ -2396,6 +2469,8 @@ adw_about_window_set_issue_url (AdwAboutWindow *self,
   g_free (self->issue_url);
   self->issue_url = g_strdup (issue_url);
 
+  update_support (self);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ISSUE_URL]);
 }
 
@@ -2443,8 +2518,7 @@ adw_about_window_add_link (AdwAboutWindow *self,
 
   self->has_custom_links = TRUE;
 
-  update_links (self);
-
+  update_details (self);
 }
 
 /**
@@ -2497,6 +2571,8 @@ adw_about_window_set_debug_info (AdwAboutWindow *self,
   g_free (self->debug_info);
   self->debug_info = g_strdup (debug_info);
 
+  update_support (self);
+
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_DEBUG_INFO]);
 }
 
@@ -2922,6 +2998,8 @@ adw_about_window_add_acknowledgement_section (AdwAboutWindow  *self,
   add_credits_section (self->acknowledgements_box, name, (char **) people);
 
   gtk_widget_show (self->acknowledgements_box);
+
+  update_credits_legal_group (self);
 }
 
 /**
diff --git a/src/adw-about-window.ui b/src/adw-about-window.ui
index 4337fc28..be91616d 100644
--- a/src/adw-about-window.ui
+++ b/src/adw-about-window.ui
@@ -23,13 +23,6 @@
                   <object class="GtkStack" id="headerbar_stack">
                     <property name="transition-type">crossfade</property>
                     <property name="transition-duration">150</property>
-                    <binding name="visible-child-name">
-                      <closure function="get_headerbar_name" type="gchararray">
-                        <lookup name="value" type="GtkAdjustment">
-                          <lookup name="vadjustment">main_scrolled_window</lookup>
-                        </lookup>
-                      </closure>
-                    </binding>
                     <child>
                       <object class="GtkStackPage">
                         <property name="name">top</property>
@@ -73,70 +66,46 @@
                             <property name="orientation">vertical</property>
                             <property name="vexpand">True</property>
                             <child>
-                              <object class="GtkImage">
-                                <binding name="visible">
-                                  <closure function="string_is_not_empty" type="gboolean">
-                                    <lookup name="application-icon">AdwAboutWindow</lookup>
-                                  </closure>
-                                </binding>
-                                <binding name="icon-name">
-                                  <lookup name="application-icon">AdwAboutWindow</lookup>
-                                </binding>
+                              <object class="GtkImage" id="app_icon_image">
+                                <property name="visible">False</property>
                                 <property name="pixel-size">128</property>
+                                <property name="icon-name" bind-source="AdwAboutWindow" 
bind-property="application-icon" bind-flags="sync-create"/>
                                 <style>
                                   <class name="icon-dropshadow"/>
                                 </style>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkLabel">
+                              <object class="GtkLabel" id="app_name_label">
+                                <property name="visible">False</property>
                                 <property name="wrap">True</property>
                                 <property name="justify">center</property>
-                                <binding name="visible">
-                                  <closure function="string_is_not_empty" type="gboolean">
-                                    <lookup name="application-name">AdwAboutWindow</lookup>
-                                  </closure>
-                                </binding>
-                                <binding name="label">
-                                  <lookup name="application-name">AdwAboutWindow</lookup>
-                                </binding>
+                                <property name="label" bind-source="AdwAboutWindow" 
bind-property="application-name" bind-flags="sync-create"/>
                                 <style>
                                   <class name="title-1"/>
                                 </style>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkLabel">
+                              <object class="GtkLabel" id="developer_name_label">
+                                <property name="visible">False</property>
                                 <property name="wrap">True</property>
                                 <property name="justify">center</property>
-                                <binding name="visible">
-                                  <closure function="string_is_not_empty" type="gboolean">
-                                    <lookup name="developer-name">AdwAboutWindow</lookup>
-                                  </closure>
-                                </binding>
-                                <binding name="label">
-                                  <lookup name="developer-name">AdwAboutWindow</lookup>
-                                </binding>
+                                <property name="label" bind-source="AdwAboutWindow" 
bind-property="developer-name" bind-flags="sync-create"/>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkButton">
+                              <object class="GtkButton" id="version_button">
+                                <property name="visible">False</property>
                                 <property name="halign">center</property>
                                 <property name="action-name">about.copy-property</property>
                                 <property name="action-target">"version"</property>
                                 <property name="child">
                                   <object class="GtkLabel">
                                     <property name="ellipsize">end</property>
-                                    <binding name="label">
-                                      <lookup name="version">AdwAboutWindow</lookup>
-                                    </binding>
+                                    <property name="label" bind-source="AdwAboutWindow" 
bind-property="version" bind-flags="sync-create"/>
                                   </object>
                                 </property>
-                                <binding name="visible">
-                                  <closure function="string_is_not_empty" type="gboolean">
-                                    <lookup name="version">AdwAboutWindow</lookup>
-                                  </closure>
-                                </binding>
                                 <style>
                                   <class name="app-version"/>
                                 </style>
@@ -146,27 +115,16 @@
                               <object class="GtkBox">
                                 <property name="orientation">vertical</property>
                                 <child>
-                                  <object class="AdwPreferencesGroup">
-                                    <binding name="visible">
-                                      <closure function="boolean_or" type="gboolean">
-                                        <constant type="gint">3</constant>
-                                        <lookup name="visible">whats_new_row</lookup>
-                                        <lookup name="visible">details_row</lookup>
-                                        <lookup name="visible">website_row</lookup>
-                                      </closure>
-                                    </binding>
+                                  <object class="AdwPreferencesGroup" id="details_group">
+                                    <property name="visible">False</property>
                                     <child>
                                       <object class="AdwActionRow" id="whats_new_row">
+                                        <property name="visible">False</property>
                                         <property name="title" translatable="yes">_What’s New</property>
                                         <property name="use-underline">True</property>
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"whatsnew"</property>
-                                        <binding name="visible">
-                                          <closure function="string_is_not_empty" type="gboolean">
-                                            <lookup name="text">release_notes_buffer</lookup>
-                                          </closure>
-                                        </binding>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -176,18 +134,12 @@
                                     </child>
                                     <child>
                                       <object class="AdwActionRow" id="details_row">
+                                        <property name="visible">False</property>
                                         <property name="title" translatable="yes">_Details</property>
                                         <property name="use-underline">True</property>
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"details"</property>
-                                        <binding name="visible">
-                                          <closure function="boolean_or" type="gboolean">
-                                            <constant type="gint">2</constant>
-                                            <lookup name="visible">comments</lookup>
-                                            <lookup name="visible">links_group</lookup>
-                                          </closure>
-                                        </binding>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -203,9 +155,7 @@
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.show-url-property</property>
                                         <property name="action-target">"website"</property>
-                                        <binding name="tooltip-text">
-                                          <lookup name="website">AdwAboutWindow</lookup>
-                                        </binding>
+                                        <property name="tooltip-text" bind-source="AdwAboutWindow" 
bind-property="website" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">adw-external-link-symbolic</property>
@@ -217,30 +167,17 @@
                                 </child>
 
                                 <child>
-                                  <object class="AdwPreferencesGroup">
-                                    <binding name="visible">
-                                      <closure function="boolean_or" type="gboolean">
-                                        <constant type="gint">3</constant>
-                                        <lookup name="visible">support_row</lookup>
-                                        <lookup name="visible">issue_row</lookup>
-                                        <lookup name="visible">troubleshooting_row</lookup>
-                                      </closure>
-                                    </binding>
+                                  <object class="AdwPreferencesGroup" id="support_group">
+                                    <property name="visible">False</property>
                                     <child>
                                       <object class="AdwActionRow" id="support_row">
+                                        <property name="visible">False</property>
                                         <property name="activatable">True</property>
                                         <property name="title" translatable="yes">_Support 
Questions</property>
                                         <property name="use-underline">True</property>
                                         <property name="action-name">about.show-url-property</property>
                                         <property name="action-target">"support-url"</property>
-                                        <binding name="tooltip-text">
-                                          <lookup name="support-url">AdwAboutWindow</lookup>
-                                        </binding>
-                                        <binding name="visible">
-                                          <closure function="string_is_not_empty" type="gboolean">
-                                            <lookup name="support-url">AdwAboutWindow</lookup>
-                                          </closure>
-                                        </binding>
+                                        <property name="tooltip-text" bind-source="AdwAboutWindow" 
bind-property="support-url" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">adw-external-link-symbolic</property>
@@ -250,19 +187,13 @@
                                     </child>
                                     <child>
                                       <object class="AdwActionRow" id="issue_row">
+                                        <property name="visible">False</property>
                                         <property name="activatable">True</property>
                                         <property name="title" translatable="yes">_Report an Issue</property>
                                         <property name="use-underline">True</property>
                                         <property name="action-name">about.show-url-property</property>
                                         <property name="action-target">"issue-url"</property>
-                                        <binding name="tooltip-text">
-                                          <lookup name="issue-url">AdwAboutWindow</lookup>
-                                        </binding>
-                                        <binding name="visible">
-                                          <closure function="string_is_not_empty" type="gboolean">
-                                            <lookup name="issue-url">AdwAboutWindow</lookup>
-                                          </closure>
-                                        </binding>
+                                        <property name="tooltip-text" bind-source="AdwAboutWindow" 
bind-property="issue-url" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">adw-external-link-symbolic</property>
@@ -272,16 +203,12 @@
                                     </child>
                                     <child>
                                       <object class="AdwActionRow" id="troubleshooting_row">
+                                        <property name="visible">False</property>
                                         <property name="title" translatable="yes">_Troubleshooting</property>
                                         <property name="use-underline">True</property>
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"troubleshooting"</property>
-                                        <binding name="visible">
-                                          <closure function="string_is_not_empty" type="gboolean">
-                                            <lookup name="debug-info">AdwAboutWindow</lookup>
-                                          </closure>
-                                        </binding>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -292,15 +219,8 @@
                                   </object>
                                 </child>
                                 <child>
-                                  <object class="AdwPreferencesGroup">
-                                    <binding name="visible">
-                                      <closure function="boolean_or" type="gboolean">
-                                        <constant type="gint">3</constant>
-                                        <lookup name="visible">credits_box</lookup>
-                                        <lookup name="visible">legal_box</lookup>
-                                        <lookup name="visible">acknowledgements_box</lookup>
-                                      </closure>
-                                    </binding>
+                                  <object class="AdwPreferencesGroup" id="credits_legal_group">
+                                    <property name="visible">False</property>
                                     <child>
                                       <object class="AdwActionRow">
                                         <property name="title" translatable="yes">_Credits</property>
@@ -308,9 +228,7 @@
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"credits"</property>
-                                        <binding name="visible">
-                                          <lookup name="visible">credits_box</lookup>
-                                        </binding>
+                                        <property name="visible" bind-source="credits_box" 
bind-property="visible" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -325,9 +243,7 @@
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"legal"</property>
-                                        <binding name="visible">
-                                          <lookup name="visible">legal_box</lookup>
-                                        </binding>
+                                        <property name="visible" bind-source="legal_box" 
bind-property="visible" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -342,9 +258,7 @@
                                         <property name="activatable">True</property>
                                         <property name="action-name">about.subpage</property>
                                         <property name="action-target">"acknowledgements"</property>
-                                        <binding name="visible">
-                                          <lookup name="visible">acknowledgements_box</lookup>
-                                        </binding>
+                                        <property name="visible" bind-source="acknowledgements_box" 
bind-property="visible" bind-flags="sync-create"/>
                                         <child>
                                           <object class="GtkImage">
                                             <property name="icon-name">go-next-symbolic</property>
@@ -459,20 +373,14 @@
                                   <object class="GtkBox">
                                     <property name="orientation">vertical</property>
                                     <child>
-                                      <object class="GtkLabel" id="comments">
+                                      <object class="GtkLabel" id="comments_label">
+                                        <property name="visible">False</property>
                                         <property name="use-markup">True</property>
                                         <property name="wrap">True</property>
                                         <property name="wrap-mode">word-char</property>
                                         <property name="xalign">0</property>
-                                        <binding name="label">
-                                          <lookup name="comments">AdwAboutWindow</lookup>
-                                        </binding>
+                                        <property name="label" bind-source="AdwAboutWindow" 
bind-property="comments" bind-flags="sync-create"/>
                                         <signal name="activate-link" handler="activate_link_cb" 
swapped="yes"/>
-                                        <binding name="visible">
-                                          <closure function="string_is_not_empty" type="gboolean">
-                                            <lookup name="comments">AdwAboutWindow</lookup>
-                                          </closure>
-                                        </binding>
                                         <style>
                                           <class name="body"/>
                                         </style>
@@ -489,9 +397,7 @@
                                             <property name="activatable">True</property>
                                             <property name="action-name">about.show-url-property</property>
                                             <property name="action-target">"website"</property>
-                                            <binding name="tooltip-text">
-                                              <lookup name="website">AdwAboutWindow</lookup>
-                                            </binding>
+                                            <property name="tooltip-text" bind-source="AdwAboutWindow" 
bind-property="website" bind-flags="sync-create"/>
                                             <child>
                                               <object class="GtkImage">
                                                 <property 
name="icon-name">adw-external-link-symbolic</property>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]