[gnome-builder] tree: add action gsignalaction
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] tree: add action gsignalaction
- Date: Thu, 16 Apr 2015 05:26:48 +0000 (UTC)
commit 0eab6bb832620591347274af62272e386fe8bf70
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 15 22:25:06 2015 -0700
tree: add action gsignalaction
This helper allows us to execute actions from keybindings.
src/tree/gb-tree.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
src/tree/gb-tree.h | 8 ++++++--
2 files changed, 50 insertions(+), 2 deletions(-)
---
diff --git a/src/tree/gb-tree.c b/src/tree/gb-tree.c
index 1a372ed..9550d74 100644
--- a/src/tree/gb-tree.c
+++ b/src/tree/gb-tree.c
@@ -23,6 +23,7 @@
#include "gb-tree.h"
#include "gb-tree-node.h"
+#include "gb-widget.h"
struct _GbTreePrivate
{
@@ -55,6 +56,7 @@ enum {
};
enum {
+ ACTION,
POPULATE_POPUP,
LAST_SIGNAL
};
@@ -1117,6 +1119,33 @@ gb_tree_find_item (GbTree *self,
return lookup.result;
}
+static void
+gb_tree_real_action (GbTree *self,
+ const gchar *prefix,
+ const gchar *action_name,
+ const gchar *param)
+{
+ GVariant *variant = NULL;
+
+ g_assert (GB_IS_TREE (self));
+
+ if (*param != 0)
+ {
+ g_autoptr(GError) error = NULL;
+
+ variant = g_variant_parse (NULL, param, NULL, NULL, &error);
+
+ if (variant == NULL)
+ {
+ g_warning ("can't parse keybinding parameters \"%s\": %s",
+ param, error->message);
+ return;
+ }
+ }
+
+ gb_widget_activate_action (GTK_WIDGET (self), prefix, action_name, variant);
+}
+
/**
* gb_tree_finalize:
* @object: (in): A #GbTree.
@@ -1228,6 +1257,8 @@ gb_tree_class_init (GbTreeClass *klass)
widget_class = GTK_WIDGET_CLASS (klass);
widget_class->popup_menu = gb_tree_popup_menu;
+ klass->action = gb_tree_real_action;
+
gParamSpecs[PROP_ROOT] =
g_param_spec_object ("root",
_ ("Root"),
@@ -1256,6 +1287,19 @@ gb_tree_class_init (GbTreeClass *klass)
g_object_class_install_property (object_class, PROP_SHOW_ICONS,
gParamSpecs [PROP_SHOW_ICONS]);
+ gSignals [ACTION] =
+ g_signal_new ("action",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GbTreeClass, action),
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 3,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
gSignals [POPULATE_POPUP] =
g_signal_new ("populate-popup",
G_TYPE_FROM_CLASS (klass),
diff --git a/src/tree/gb-tree.h b/src/tree/gb-tree.h
index 33f5f58..fdf5622 100644
--- a/src/tree/gb-tree.h
+++ b/src/tree/gb-tree.h
@@ -52,8 +52,12 @@ struct _GbTreeClass
{
GtkTreeViewClass parent_class;
- void (*populate_popup) (GbTree *tree,
- GtkWidget *widget);
+ void (*action) (GbTree *tree,
+ const gchar *action_group,
+ const gchar *action_name,
+ const gchar *param);
+ void (*populate_popup) (GbTree *tree,
+ GtkWidget *widget);
};
void gb_tree_add_builder (GbTree *tree,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]