aboutsummaryrefslogtreecommitdiff
path: root/libqmenumodel/src/gtk
diff options
context:
space:
mode:
authorNick Dedekind <nicholas.dedekind@gmail.com>2013-08-21 21:39:47 +0100
committerNick Dedekind <nicholas.dedekind@gmail.com>2013-08-21 21:39:47 +0100
commit72cd124bc6a71d7be3bf9e6602c9de55156508ee (patch)
treeeb1ca7e866de1e219dd4fe8b15ad48feefc59044 /libqmenumodel/src/gtk
parentbac9f37d6fc619e3c1c57754e0afe7b197c7668c (diff)
downloadqmenumodel-72cd124bc6a71d7be3bf9e6602c9de55156508ee.tar.gz
qmenumodel-72cd124bc6a71d7be3bf9e6602c9de55156508ee.tar.bz2
qmenumodel-72cd124bc6a71d7be3bf9e6602c9de55156508ee.zip
Added UnityMenuAction for out-of-line actions. Action muxer copied to submenus.
Diffstat (limited to 'libqmenumodel/src/gtk')
-rw-r--r--libqmenumodel/src/gtk/gtkactionobserveritem.c152
-rw-r--r--libqmenumodel/src/gtk/gtkactionobserveritem.h67
2 files changed, 219 insertions, 0 deletions
diff --git a/libqmenumodel/src/gtk/gtkactionobserveritem.c b/libqmenumodel/src/gtk/gtkactionobserveritem.c
new file mode 100644
index 0000000..aebbcc3
--- /dev/null
+++ b/libqmenumodel/src/gtk/gtkactionobserveritem.c
@@ -0,0 +1,152 @@
+
+#include "gtkactionobserveritem.h"
+
+typedef GObjectClass GtkActionObserverItemClass;
+
+struct _GtkActionObserverItem
+{
+ GObject parent_instance;
+ GtkActionObservable *observable;
+ gchar* action_name;
+
+ GtkActionAddedFunc action_added;
+ GtkActionEnabledChangedFunc action_enabled_changed;
+ GtkActionStateChangedFunc action_state_changed;
+ GtkActionRemovedFunc action_removed;
+};
+
+static void gtk_action_observer_item_init_observer_iface (GtkActionObserverInterface *iface);
+G_DEFINE_TYPE_WITH_CODE (GtkActionObserverItem, gtk_action_observer_item, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTION_OBSERVER, gtk_action_observer_item_init_observer_iface))
+
+static void
+gtk_action_observer_item_finalize (GObject *object)
+{
+ GtkActionObserverItem *self = GTK_ACTION_OBSERVER_ITEM (object);
+
+ if (self->observable)
+ g_object_unref (self->observable);
+
+ if (self->action_name)
+ g_free(self->action_name);
+
+ G_OBJECT_CLASS (gtk_action_observer_item_parent_class)->finalize (object);
+}
+
+static void
+gtk_action_observer_item_init (GtkActionObserverItem * self)
+{
+}
+
+static void
+gtk_action_observer_item_class_init (GtkActionObserverItemClass *class)
+{
+ class->finalize = gtk_action_observer_item_finalize;
+}
+
+static void
+gtk_action_observer_item_action_added (GtkActionObserver *observer,
+ GtkActionObservable *observable,
+ const gchar *action_name,
+ const GVariantType *parameter_type,
+ gboolean enabled,
+ GVariant *state)
+{
+ g_return_if_fail (GTK_IS_ACTION_OBSERVER_ITEM (observer));
+
+ GtkActionObserverItem* self;
+ self = GTK_ACTION_OBSERVER_ITEM (observer);
+ self->action_added(self, action_name, enabled, state);
+}
+
+static void
+gtk_action_observer_item_action_enabled_changed (GtkActionObserver *observer,
+ GtkActionObservable *observable,
+ const gchar *action_name,
+ gboolean enabled)
+{
+ g_return_if_fail (GTK_IS_ACTION_OBSERVER_ITEM (observer));
+
+ GtkActionObserverItem* self;
+ self = GTK_ACTION_OBSERVER_ITEM (observer);
+ self->action_enabled_changed(self, action_name, enabled);
+}
+
+static void
+gtk_action_observer_item_action_state_changed (GtkActionObserver *observer,
+ GtkActionObservable *observable,
+ const gchar *action_name,
+ GVariant *state)
+{
+ g_return_if_fail (GTK_IS_ACTION_OBSERVER_ITEM (observer));
+
+ GtkActionObserverItem* self;
+ self = GTK_ACTION_OBSERVER_ITEM (observer);
+ self->action_state_changed(self, action_name, state);
+}
+
+static void
+gtk_action_observer_item_action_removed (GtkActionObserver *observer,
+ GtkActionObservable *observable,
+ const gchar *action_name)
+{
+ g_return_if_fail (GTK_IS_ACTION_OBSERVER_ITEM (observer));
+
+ GtkActionObserverItem* self;
+ self = GTK_ACTION_OBSERVER_ITEM (observer);
+ self->action_removed(self, action_name);
+}
+
+static void
+gtk_action_observer_item_init_observer_iface (GtkActionObserverInterface *iface)
+{
+ iface->action_added = gtk_action_observer_item_action_added;
+ iface->action_enabled_changed = gtk_action_observer_item_action_enabled_changed;
+ iface->action_state_changed = gtk_action_observer_item_action_state_changed;
+ iface->action_removed = gtk_action_observer_item_action_removed;
+}
+
+GtkActionObserverItem*
+gtk_action_observer_item_new (GtkActionObservable *observable,
+ GtkActionAddedFunc action_added,
+ GtkActionEnabledChangedFunc action_enabled_changed,
+ GtkActionStateChangedFunc action_state_changed,
+ GtkActionRemovedFunc action_removed)
+{
+ GtkActionObserverItem* self;
+ self = g_object_new (GTK_TYPE_ACTION_OBSERVER_ITEM, NULL);
+ self->observable = g_object_ref (observable);
+ self->action_name = NULL;
+
+ self->action_added = action_added;
+ self->action_enabled_changed = action_enabled_changed;
+ self->action_state_changed = action_state_changed;
+ self->action_removed = action_removed;
+
+ return self;
+}
+
+void
+gtk_action_observer_item_register_action (GtkActionObserverItem *self,
+ const gchar* action_name)
+{
+ gtk_action_observer_item_unregister_action(self);
+
+ if (action_name && g_strcmp0(action_name, "") != 0) {
+ self->action_name = g_strdup (action_name);
+
+ if (g_strcmp0(self->action_name, "") != 0) {
+ gtk_action_observable_register_observer (self->observable, self->action_name, GTK_ACTION_OBSERVER (self));
+ }
+ }
+}
+
+void
+gtk_action_observer_item_unregister_action (GtkActionObserverItem *self)
+{
+ if (self->action_name) {
+ gtk_action_observable_unregister_observer(self->observable, self->action_name, GTK_ACTION_OBSERVER (self));
+ g_free(self->action_name);
+ self->action_name = NULL;
+ }
+}
diff --git a/libqmenumodel/src/gtk/gtkactionobserveritem.h b/libqmenumodel/src/gtk/gtkactionobserveritem.h
new file mode 100644
index 0000000..ed36974
--- /dev/null
+++ b/libqmenumodel/src/gtk/gtkactionobserveritem.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2011 Canonical Limited
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * licence or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Nick Dedekind <nick.dedekind@canonical.com
+ */
+
+#ifndef __GTK_ACTION_OBSERVER_ITEM_H__
+#define __GTK_ACTION_OBSERVER_ITEM_H__
+
+#include "gtkactionobserver.h"
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_ACTION_OBSERVER_ITEM (gtk_action_observer_item_get_type ())
+#define GTK_ACTION_OBSERVER_ITEM(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
+ GTK_TYPE_ACTION_OBSERVER_ITEM, GtkActionObserverItem))
+#define GTK_IS_ACTION_OBSERVER_ITEM(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
+ GTK_TYPE_ACTION_OBSERVER_ITEM))
+
+typedef struct _GtkActionObserverItem GtkActionObserverItem;
+
+typedef void (* GtkActionAddedFunc) (GtkActionObserverItem *observer_item,
+ const gchar *action_name,
+ gboolean enabled,
+ GVariant *state);
+
+typedef void (* GtkActionEnabledChangedFunc) (GtkActionObserverItem *observer_item,
+ const gchar *action_name,
+ gboolean enabled);
+
+typedef void (* GtkActionStateChangedFunc) (GtkActionObserverItem *observer_item,
+ const gchar *action_name,
+ GVariant *state);
+
+typedef void (* GtkActionRemovedFunc) (GtkActionObserverItem *observer_item,
+ const gchar *action_name);
+
+GType gtk_action_observer_item_get_type (void) G_GNUC_CONST;
+
+GtkActionObserverItem* gtk_action_observer_item_new (GtkActionObservable *observable,
+ GtkActionAddedFunc action_added,
+ GtkActionEnabledChangedFunc action_enabled_changed,
+ GtkActionStateChangedFunc action_state_changed,
+ GtkActionRemovedFunc action_removed);
+
+
+void gtk_action_observer_item_register_action (GtkActionObserverItem *self,
+ const gchar* action_name);
+
+void gtk_action_observer_item_unregister_action (GtkActionObserverItem *self);
+
+G_END_DECLS
+
+#endif // __GTK_ACTION_OBSERVER_ITEM_H__ \ No newline at end of file