[libadwaita/wip/exalm/inspector: 4/7] demo: Handle system-supports-color-schemes changes in runtime




commit fbc8166c21cb3f24fedca2901212e0d5f4b10b74
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Mon Sep 27 02:54:44 2021 +0500

    demo: Handle system-supports-color-schemes changes in runtime
    
    We just need to show/hide the button dynamically and not only on startup.

 examples/adw-demo-window.c  | 15 ++++++++-------
 examples/adw-demo-window.ui |  9 +++++++++
 2 files changed, 17 insertions(+), 7 deletions(-)
---
diff --git a/examples/adw-demo-window.c b/examples/adw-demo-window.c
index 05e9a3d5..cf85648e 100644
--- a/examples/adw-demo-window.c
+++ b/examples/adw-demo-window.c
@@ -11,7 +11,6 @@ struct _AdwDemoWindow
 
   AdwLeaflet *content_box;
   GtkBox *right_box;
-  GtkWidget *color_scheme_button;
   GtkStackSidebar *sidebar;
   GtkStack *stack;
   AdwComboRow *leaflet_transition_row;
@@ -31,6 +30,13 @@ struct _AdwDemoWindow
 
 G_DEFINE_TYPE (AdwDemoWindow, adw_demo_window, ADW_TYPE_APPLICATION_WINDOW)
 
+static gboolean
+get_show_color_scheme_button (gpointer user_data,
+                              gboolean system_supports_color_schemes)
+{
+  return !system_supports_color_schemes;
+}
+
 static char *
 get_color_scheme_icon_name (gpointer user_data,
                             gboolean dark)
@@ -389,7 +395,6 @@ adw_demo_window_class_init (AdwDemoWindowClass *klass)
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/Adwaita/Demo/ui/adw-demo-window.ui");
   gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, content_box);
   gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, right_box);
-  gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, color_scheme_button);
   gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, sidebar);
   gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, stack);
   gtk_widget_class_bind_template_child (widget_class, AdwDemoWindow, leaflet_transition_row);
@@ -410,6 +415,7 @@ adw_demo_window_class_init (AdwDemoWindowClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, leaflet_transition_name);
   gtk_widget_class_bind_template_callback (widget_class, notify_leaflet_transition_cb);
   gtk_widget_class_bind_template_callback (widget_class, leaflet_go_next_row_activated_cb);
+  gtk_widget_class_bind_template_callback (widget_class, get_show_color_scheme_button);
   gtk_widget_class_bind_template_callback (widget_class, get_color_scheme_icon_name);
   gtk_widget_class_bind_template_callback (widget_class, color_scheme_button_clicked_cb);
   gtk_widget_class_bind_template_callback (widget_class, view_switcher_demo_clicked_cb);
@@ -452,13 +458,8 @@ avatar_page_init (AdwDemoWindow *self)
 static void
 adw_demo_window_init (AdwDemoWindow *self)
 {
-  AdwStyleManager *manager = adw_style_manager_get_default ();
-
   gtk_widget_init_template (GTK_WIDGET (self));
 
-  gtk_widget_set_visible (self->color_scheme_button,
-                          !adw_style_manager_get_system_supports_color_schemes (manager));
-
   avatar_page_init (self);
 
   adw_leaflet_set_visible_child (self->content_box, GTK_WIDGET (self->right_box));
diff --git a/examples/adw-demo-window.ui b/examples/adw-demo-window.ui
index 5c594863..019d07e2 100644
--- a/examples/adw-demo-window.ui
+++ b/examples/adw-demo-window.ui
@@ -45,6 +45,15 @@
                     <property name="show-end-title-buttons" bind-source="content_box" bind-property="folded" 
bind-flags="sync-create"/>
                     <child type="start">
                       <object class="GtkButton" id="color_scheme_button">
+                        <binding name="visible">
+                          <closure type="gboolean" function="get_show_color_scheme_button">
+                            <lookup name="system-supports-color-schemes" type="AdwStyleManager">
+                              <lookup name="style-manager" type="AdwApplication">
+                                <lookup name="application">AdwDemoWindow</lookup>
+                              </lookup>
+                            </lookup>
+                          </closure>
+                        </binding>
                         <binding name="icon-name">
                           <closure type="gchararray" function="get_color_scheme_icon_name">
                             <lookup name="dark" type="AdwStyleManager">


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