summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/reload/eom-reload-plugin.c144
-rw-r--r--plugins/reload/eom-reload-plugin.h14
2 files changed, 108 insertions, 50 deletions
diff --git a/plugins/reload/eom-reload-plugin.c b/plugins/reload/eom-reload-plugin.c
index d404f02..62d2580 100644
--- a/plugins/reload/eom-reload-plugin.c
+++ b/plugins/reload/eom-reload-plugin.c
@@ -6,18 +6,24 @@
#include <gmodule.h>
#include <glib/gi18n-lib.h>
+#include <libpeas/peas-activatable.h>
#include <eom-debug.h>
#include <eom-window.h>
-#define WINDOW_DATA_KEY "EomReloadWindowData"
+static void peas_activatable_iface_init (PeasActivatableInterface *iface);
-EOM_PLUGIN_REGISTER_TYPE (EomReloadPlugin, eom_reload_plugin)
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (EomReloadPlugin,
+ eom_reload_plugin,
+ PEAS_TYPE_EXTENSION_BASE,
+ 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_TYPE_ACTIVATABLE,
+ peas_activatable_iface_init))
-typedef struct {
- GtkActionGroup* ui_action_group;
- guint ui_id;
-} WindowData;
+enum {
+ PROP_0,
+ PROP_OBJECT
+};
static void
reload_cb (GtkAction *action,
@@ -39,15 +45,43 @@ static const GtkActionEntry action_entries[] = {
};
static void
-free_window_data (WindowData *data)
+eom_reload_plugin_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- g_return_if_fail (data != NULL);
-
- eom_debug (DEBUG_PLUGINS);
-
- g_object_unref (data->ui_action_group);
+ EomReloadPlugin *plugin = EOM_RELOAD_PLUGIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ plugin->window = GTK_WIDGET (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
- g_free (data);
+static void
+eom_reload_plugin_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EomReloadPlugin *plugin = EOM_RELOAD_PLUGIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ g_value_set_object (value, plugin->window);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
static void
@@ -57,70 +91,88 @@ eom_reload_plugin_init (EomReloadPlugin *plugin)
}
static void
-eom_reload_plugin_finalize (GObject *object)
+eom_reload_plugin_dispose (GObject *object)
{
- eom_debug_message (DEBUG_PLUGINS, "EomReloadPlugin finalizing");
+ EomReloadPlugin *plugin = EOM_RELOAD_PLUGIN (object);
+
+ eom_debug_message (DEBUG_PLUGINS, "EomReloadPlugin disposing");
+
+ if (plugin->window != NULL) {
+ g_object_unref (plugin->window);
+ plugin->window = NULL;
+ }
- G_OBJECT_CLASS (eom_reload_plugin_parent_class)->finalize (object);
+ G_OBJECT_CLASS (eom_reload_plugin_parent_class)->dispose (object);
}
static void
-impl_activate (EomPlugin *plugin,
- EomWindow *window)
+eom_reload_plugin_activate (PeasActivatable *activatable)
{
+ EomReloadPlugin *plugin = EOM_RELOAD_PLUGIN (activatable);
GtkUIManager *manager;
- WindowData *data;
eom_debug (DEBUG_PLUGINS);
- data = g_new (WindowData, 1);
+ manager = eom_window_get_ui_manager (EOM_WINDOW (plugin->window));
- manager = eom_window_get_ui_manager (window);
+ plugin->ui_action_group = gtk_action_group_new ("EomReloadPluginActions");
- data->ui_action_group = gtk_action_group_new ("EomReloadPluginActions");
+ gtk_action_group_set_translation_domain (plugin->ui_action_group, GETTEXT_PACKAGE);
- gtk_action_group_set_translation_domain (data->ui_action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (plugin->ui_action_group, action_entries,
+ G_N_ELEMENTS (action_entries), plugin->window);
- gtk_action_group_add_actions (data->ui_action_group, action_entries,
- G_N_ELEMENTS (action_entries), window);
+ gtk_ui_manager_insert_action_group (manager, plugin->ui_action_group, -1);
- gtk_ui_manager_insert_action_group (manager, data->ui_action_group, -1);
-
- g_object_set_data_full (G_OBJECT (window), WINDOW_DATA_KEY, data, (GDestroyNotify) free_window_data);
-
- data->ui_id = gtk_ui_manager_add_ui_from_string (manager, ui_definition, -1, NULL);
- g_warn_if_fail (data->ui_id != 0);
+ plugin->ui_id = gtk_ui_manager_add_ui_from_string (manager, ui_definition, -1, NULL);
+ g_warn_if_fail (plugin->ui_id != 0);
}
static void
-impl_deactivate (EomPlugin *plugin,
- EomWindow *window)
+eom_reload_plugin_deactivate (PeasActivatable *activatable)
{
+ EomReloadPlugin *plugin = EOM_RELOAD_PLUGIN (activatable);
GtkUIManager *manager;
- WindowData *data;
eom_debug (DEBUG_PLUGINS);
- manager = eom_window_get_ui_manager (window);
-
- data = (WindowData *) g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
- g_return_if_fail (data != NULL);
+ manager = eom_window_get_ui_manager (EOM_WINDOW (plugin->window));
- gtk_ui_manager_remove_ui (manager, data->ui_id);
+ gtk_ui_manager_remove_ui (manager, plugin->ui_id);
- gtk_ui_manager_remove_action_group (manager, data->ui_action_group);
-
- g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);
+ gtk_ui_manager_remove_action_group (manager, plugin->ui_action_group);
}
static void
eom_reload_plugin_class_init (EomReloadPluginClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- EomPluginClass *plugin_class = EOM_PLUGIN_CLASS (klass);
- object_class->finalize = eom_reload_plugin_finalize;
+ object_class->dispose = eom_reload_plugin_dispose;
+ object_class->set_property = eom_reload_plugin_set_property;
+ object_class->get_property = eom_reload_plugin_get_property;
+
+ g_object_class_override_property (object_class, PROP_OBJECT, "object");
+}
+
+static void
+eom_reload_plugin_class_finalize (EomReloadPluginClass *klass)
+{
+ /* dummy function - used by G_DEFINE_DYNAMIC_TYPE_EXTENDED */
+}
+
+static void
+peas_activatable_iface_init (PeasActivatableInterface *iface)
+{
+ iface->activate = eom_reload_plugin_activate;
+ iface->deactivate = eom_reload_plugin_deactivate;
+}
- plugin_class->activate = impl_activate;
- plugin_class->deactivate = impl_deactivate;
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+ eom_reload_plugin_register_type (G_TYPE_MODULE (module));
+ peas_object_module_register_extension_type (module,
+ PEAS_TYPE_ACTIVATABLE,
+ EOM_TYPE_RELOAD_PLUGIN);
}
diff --git a/plugins/reload/eom-reload-plugin.h b/plugins/reload/eom-reload-plugin.h
index 5f285d2..f3830e1 100644
--- a/plugins/reload/eom-reload-plugin.h
+++ b/plugins/reload/eom-reload-plugin.h
@@ -3,7 +3,9 @@
#include <glib.h>
#include <glib-object.h>
-#include <eom-plugin.h>
+#include <gtk/gtk.h>
+#include <libpeas/peas-extension-base.h>
+#include <libpeas/peas-object-module.h>
G_BEGIN_DECLS
@@ -32,7 +34,11 @@ typedef struct _EomReloadPluginPrivate EomReloadPluginPrivate;
typedef struct _EomReloadPlugin EomReloadPlugin;
struct _EomReloadPlugin {
- EomPlugin parent_instance;
+ PeasExtensionBase parent_instance;
+
+ GtkWidget *window;
+ GtkActionGroup *ui_action_group;
+ guint ui_id;
};
/*
@@ -41,7 +47,7 @@ struct _EomReloadPlugin {
typedef struct _EomReloadPluginClass EomReloadPluginClass;
struct _EomReloadPluginClass {
- EomPluginClass parent_class;
+ PeasExtensionBaseClass parent_class;
};
/*
@@ -50,7 +56,7 @@ struct _EomReloadPluginClass {
GType eom_reload_plugin_get_type (void) G_GNUC_CONST;
/* All the plugins must implement this function */
-G_MODULE_EXPORT GType register_eom_plugin (GTypeModule* module);
+G_MODULE_EXPORT void peas_register_types (PeasObjectModule *module);
G_END_DECLS