[gtk] widget actions: Add an explicit state type
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] widget actions: Add an explicit state type
- Date: Sat, 22 Jun 2019 02:48:03 +0000 (UTC)
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]