[gtk/wip/matthiasc/shortcut-4: 86/147] shortcutaction: Add gtk_shortcut_action_to_string()



commit 549f5da1d652c7cd6f27aeb91bf9da9707592f66
Author: Benjamin Otte <otte redhat com>
Date:   Mon Aug 20 04:45:10 2018 +0200

    shortcutaction: Add gtk_shortcut_action_to_string()
    
    For all but the callback action, we can print something useful.

 docs/reference/gtk/gtk4-sections.txt |   2 +
 gtk/gtkshortcutaction.c              | 112 +++++++++++++++++++++++++++++++++--
 gtk/gtkshortcutaction.h              |   5 ++
 3 files changed, 113 insertions(+), 6 deletions(-)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index edb4e9faf9..8f4ba558a0 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -6036,6 +6036,8 @@ gtk_shortcut_action_ref
 gtk_shortcut_action_unref
 GtkShortcutActionType
 gtk_shortcut_action_get_action_type
+gtk_shortcut_action_to_string
+gtk_shortcut_action_print
 gtk_shortcut_action_activate
 
 <SUBSECTION>
diff --git a/gtk/gtkshortcutaction.c b/gtk/gtkshortcutaction.c
index e95c1d4944..f919954e50 100644
--- a/gtk/gtkshortcutaction.c
+++ b/gtk/gtkshortcutaction.c
@@ -63,6 +63,8 @@ struct _GtkShortcutActionClass
                                    GtkShortcutActionFlags        flags,
                                    GtkWidget                    *widget,
                                    GVariant                     *args);
+  void            (* print)       (GtkShortcutAction            *action,
+                                   GString                      *string);
 };
 
 G_DEFINE_BOXED_TYPE (GtkShortcutAction, gtk_shortcut_action,
@@ -150,6 +152,50 @@ gtk_shortcut_action_get_action_type (GtkShortcutAction *self)
   return self->action_class->action_type;
 }
 
+/**
+ * gtk_shortcut_action_to_string:
+ * @self: a #GtkShortcutAction
+ *
+ * Prints the given action into a human-readable string.
+ * This is a small wrapper around gtk_shortcut_action_print() to help
+ * when debugging.
+ *
+ * Returns: (transfer full): a new string
+ **/
+char *
+gtk_shortcut_action_to_string (GtkShortcutAction *self)
+{
+  GString *string;
+
+  g_return_val_if_fail (GTK_IS_SHORTCUT_ACTION (self), NULL);
+
+  string = g_string_new (NULL);
+  gtk_shortcut_action_print (self, string);
+
+  return g_string_free (string, FALSE);
+}
+
+/**
+ * gtk_shortcut_action_print:
+ * @self: a #GtkShortcutAction
+ * @string: a #GString to print into
+ *
+ * Prints the given action into a string for the developer.
+ * This is meant for debugging and logging.
+ *
+ * The form of the representation may change at any time and is
+ * not guaranteed to stay identical.
+ **/
+void
+gtk_shortcut_action_print (GtkShortcutAction *self,
+                           GString           *string)
+{
+  g_return_if_fail (GTK_IS_SHORTCUT_ACTION (self));
+  g_return_if_fail (string != NULL);
+
+  return self->action_class->print (self, string);
+}
+
 /**
  * gtk_shortcut_action_activate:
  * @self: a #GtkShortcutAction
@@ -204,12 +250,20 @@ gtk_nothing_action_activate (GtkShortcutAction      *action,
   return FALSE;
 }
 
+static void
+gtk_nothing_action_print (GtkShortcutAction *action,
+                          GString           *string)
+{
+  g_string_append (string, "nothing");
+}
+
 static const GtkShortcutActionClass GTK_NOTHING_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_NOTHING,
   sizeof (GtkNothingAction),
   "GtkNothingAction",
   gtk_nothing_action_finalize,
-  gtk_nothing_action_activate
+  gtk_nothing_action_activate,
+  gtk_nothing_action_print
 };
 
 static GtkNothingAction nothing = { { &GTK_NOTHING_ACTION_CLASS, 1 } };
@@ -261,12 +315,22 @@ gtk_callback_action_activate (GtkShortcutAction      *action,
   return self->callback (widget, args, self->user_data);
 }
 
+static void
+gtk_callback_action_print (GtkShortcutAction *action,
+                           GString           *string)
+{
+  GtkCallbackAction *self = (GtkCallbackAction *) action;
+
+  g_string_append_printf (string, "callback(%p)", self->callback);
+}
+
 static const GtkShortcutActionClass GTK_CALLBACK_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_CALLBACK,
   sizeof (GtkCallbackAction),
   "GtkCallbackAction",
   gtk_callback_action_finalize,
-  gtk_callback_action_activate
+  gtk_callback_action_activate,
+  gtk_callback_action_print
 };
 
 /**
@@ -322,12 +386,20 @@ gtk_activate_action_activate (GtkShortcutAction      *action,
   return gtk_widget_activate (widget);
 }
 
+static void
+gtk_activate_action_print (GtkShortcutAction *action,
+                           GString           *string)
+{
+  g_string_append (string, "activate");
+}
+
 static const GtkShortcutActionClass GTK_ACTIVATE_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_ACTIVATE,
   sizeof (GtkActivateAction),
   "GtkActivateAction",
   gtk_activate_action_finalize,
-  gtk_activate_action_activate
+  gtk_activate_action_activate,
+  gtk_activate_action_print
 };
 
 static GtkActivateAction activate = { { &GTK_ACTIVATE_ACTION_CLASS, 1 } };
@@ -370,12 +442,20 @@ gtk_mnemonic_action_activate (GtkShortcutAction      *action,
   return gtk_widget_mnemonic_activate (widget, flags & GTK_SHORTCUT_ACTION_EXCLUSIVE ? FALSE : TRUE);
 }
 
+static void
+gtk_mnemonic_action_print (GtkShortcutAction *action,
+                           GString           *string)
+{
+  g_string_append (string, "mnemonic-activate");
+}
+
 static const GtkShortcutActionClass GTK_MNEMONIC_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_MNEMONIC,
   sizeof (GtkMnemonicAction),
   "GtkMnemonicAction",
   gtk_mnemonic_action_finalize,
-  gtk_mnemonic_action_activate
+  gtk_mnemonic_action_activate,
+  gtk_mnemonic_action_print
 };
 
 static GtkMnemonicAction mnemonic = { { &GTK_MNEMONIC_ACTION_CLASS, 1 } };
@@ -659,12 +739,22 @@ gtk_signal_action_activate (GtkShortcutAction      *action,
   return handled;
 }
 
+static void
+gtk_signal_action_print (GtkShortcutAction *action,
+                         GString           *string)
+{
+  GtkSignalAction *self = (GtkSignalAction *) action;
+
+  g_string_append_printf (string, "signal(%s)", self->name);
+}
+
 static const GtkShortcutActionClass GTK_SIGNAL_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_SIGNAL,
   sizeof (GtkSignalAction),
   "GtkSignalAction",
   gtk_signal_action_finalize,
-  gtk_signal_action_activate
+  gtk_signal_action_activate,
+  gtk_signal_action_print
 };
 
 /**
@@ -802,12 +892,22 @@ gtk_action_action_activate (GtkShortcutAction      *action,
   return TRUE;
 }
 
+static void
+gtk_action_action_print (GtkShortcutAction *action,
+                         GString           *string)
+{
+  GtkActionAction *self = (GtkActionAction *) action;
+
+  g_string_append_printf (string, "action(%s)", self->name);
+}
+
 static const GtkShortcutActionClass GTK_ACTION_ACTION_CLASS = {
   GTK_SHORTCUT_ACTION_ACTION,
   sizeof (GtkActionAction),
   "GtkActionAction",
   gtk_action_action_finalize,
-  gtk_action_action_activate
+  gtk_action_action_activate,
+  gtk_action_action_print
 };
 
 /**
diff --git a/gtk/gtkshortcutaction.h b/gtk/gtkshortcutaction.h
index 2a79187019..6eb5e20d64 100644
--- a/gtk/gtkshortcutaction.h
+++ b/gtk/gtkshortcutaction.h
@@ -89,6 +89,11 @@ void                    gtk_shortcut_action_unref               (GtkShortcutActi
 GDK_AVAILABLE_IN_ALL
 GtkShortcutActionType   gtk_shortcut_action_get_action_type     (GtkShortcutAction      *self);
 
+GDK_AVAILABLE_IN_ALL
+char *                  gtk_shortcut_action_to_string           (GtkShortcutAction      *self);
+GDK_AVAILABLE_IN_ALL
+void                    gtk_shortcut_action_print               (GtkShortcutAction      *self,
+                                                                 GString                *string);
 GDK_AVAILABLE_IN_ALL
 gboolean                gtk_shortcut_action_activate            (GtkShortcutAction      *self,
                                                                  GtkShortcutActionFlags  flags,


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