[gtk] widget actions: Add an explicit state type



commit 152eabbaba851b96b23781e2db2a180ff5521ebc
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jun 22 02:35:52 2019 +0000

    widget actions: Add an explicit state type
    
    Make the state type part of the API for installing
    stateful widget actions. That lets us introspect it.
    
    Update all callers.

 gtk/gtkactionmuxer.c        |  6 ++----
 gtk/gtkactionmuxerprivate.h |  1 +
 gtk/gtkcolorchooserwidget.c |  4 ++--
 gtk/gtktext.c               |  2 +-
 gtk/gtkwidget.c             | 11 +++++++----
 gtk/gtkwidget.h             |  1 +
 6 files changed, 14 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c
index 33951ce463..515f93f6db 100644
--- a/gtk/gtkactionmuxer.c
+++ b/gtk/gtkactionmuxer.c
@@ -446,11 +446,11 @@ gtk_action_muxer_query_action (GActionGroup        *action_group,
                 *enabled = muxer->widget_actions_enabled[i];
               if (parameter_type)
                 *parameter_type = action->parameter_type;
+              if (state_type)
+                *state_type = action->state_type;
 
               if (state_hint)
                 *state_hint = NULL;
-              if (state_type)
-                *state_type = NULL;
               if (state)
                 *state = NULL;
 
@@ -460,8 +460,6 @@ gtk_action_muxer_query_action (GActionGroup        *action_group,
 
                   s = g_variant_ref_sink (action->get_state (muxer->widget, action->name));
 
-                  if (state_type)
-                    *state_type = g_variant_get_type (s);
                   if (state)
                     *state = g_variant_ref (s);
 
diff --git a/gtk/gtkactionmuxerprivate.h b/gtk/gtkactionmuxerprivate.h
index 325c1f817a..5a1218d84a 100644
--- a/gtk/gtkactionmuxerprivate.h
+++ b/gtk/gtkactionmuxerprivate.h
@@ -35,6 +35,7 @@ typedef struct {
   char *name;
 
   GVariantType *parameter_type;
+  GVariantType *state_type;
 
   GtkWidgetActionActivateFunc activate;
   GtkWidgetActionSetStateFunc set_state;
diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c
index 7c29976c01..9830b20417 100644
--- a/gtk/gtkcolorchooserwidget.c
+++ b/gtk/gtkcolorchooserwidget.c
@@ -715,10 +715,10 @@ gtk_color_chooser_widget_class_init (GtkColorChooserWidgetClass *class)
 
   gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.select",
                                             gtk_color_chooser_widget_activate_color_select,
-                                            "(dddd)", NULL, NULL);
+                                            "(dddd)", NULL, NULL, NULL);
   gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.customize",
                                             gtk_color_chooser_widget_activate_color_customize,
-                                            "(dddd)", NULL, NULL);
+                                            "(dddd)", NULL, NULL, NULL);
 }
 
 /* GtkColorChooser implementation {{{1 */
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 7097a9eab0..370adda586 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -1377,7 +1377,7 @@ gtk_text_class_init (GtkTextClass *class)
                                    gtk_text_activate_misc_insert_emoji);
   gtk_widget_class_install_stateful_action (widget_class, "misc.toggle-visibility",
                                             gtk_text_activate_misc_toggle_visibility,
-                                            NULL,
+                                            NULL, "b",
                                             gtk_text_set_misc_toggle_visibility,
                                             gtk_text_get_misc_toggle_visibility);
 }
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index f2a8c9710c..4b093bfaa8 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -13449,7 +13449,7 @@ gtk_widget_class_install_action (GtkWidgetClass              *widget_class,
                                  GtkWidgetActionActivateFunc  activate)
 {
   gtk_widget_class_install_stateful_action (widget_class, action_name, activate,
-                                            NULL, NULL, NULL);
+                                            NULL, NULL, NULL, NULL);
 }
 
 /*
@@ -13458,9 +13458,10 @@ gtk_widget_class_install_action (GtkWidgetClass              *widget_class,
  * @action_name: a prefixed action name, such as "clipboard.paste"
  * @activate: callback to use when the action is activated
  * @parameter_type: (allow-none): the parameter type, or %NULL
- * @query: (allow-none): callback to use when the action properties
-       are queried, or %NULL for always-enabled stateless actions
- * @query_state: (allow-none): callback to use when the action state
+ * @state_type: (allow-none): the state type, or %NULL
+ * @set_state: (allow-none): callback to use when the action state
+       is set, or %NULL for stateless actions
+ * @get_state: (allow-none): callback to use when the action state
        is queried, or %NULL for stateless actions
  *
  * This should be called at class initialization time to specify
@@ -13474,6 +13475,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass              *widget_cl
                                           const char                  *action_name,
                                           GtkWidgetActionActivateFunc  activate,
                                           const char                  *parameter_type,
+                                          const char                  *state_type,
                                           GtkWidgetActionSetStateFunc  set_state,
                                           GtkWidgetActionGetStateFunc  get_state)
 {
@@ -13504,6 +13506,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass              *widget_cl
   action->name = g_strdup (action_name);
   action->activate = activate;
   action->parameter_type = parameter_type ? g_variant_type_new (parameter_type) : NULL;
+  action->state_type = state_type ? g_variant_type_new (state_type) : NULL;
   action->set_state = set_state;
   action->get_state = get_state;
 
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 73e92ac1cb..d52dff446a 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -1080,6 +1080,7 @@ void                    gtk_widget_class_install_stateful_action (GtkWidgetClass
                                                                   const char                  *action_name,
                                                                   GtkWidgetActionActivateFunc  activate,
                                                                   const char                  
*parameter_type,
+                                                                  const char                  *state_type,
                                                                   GtkWidgetActionSetStateFunc  set_state,
                                                                   GtkWidgetActionGetStateFunc  get_state);
 


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