summaryrefslogtreecommitdiff
path: root/plugins/taglist/pluma-taglist-plugin.c
diff options
context:
space:
mode:
authormonsta <[email protected]>2016-12-04 15:46:17 +0300
committermonsta <[email protected]>2016-12-05 16:57:36 +0300
commit2aafaabdaa4854b3941bd9f3319b89c807abf306 (patch)
treebde020ebc3b53a6fe613fa83ed042e2feb52f0fd /plugins/taglist/pluma-taglist-plugin.c
parentd050af62cd08c234e53897a7d9dccb560dba329a (diff)
downloadpluma-2aafaabdaa4854b3941bd9f3319b89c807abf306.tar.bz2
pluma-2aafaabdaa4854b3941bd9f3319b89c807abf306.tar.xz
taglist plugin: port to libpeas
mostly adapted from: https://git.gnome.org/browse/gedit/commit/?id=c3471ad0a1e2a60a588f203421da1779a60649ff https://git.gnome.org/browse/gedit/commit/?id=05ca83131a21c35e7b2792bbf76c4c6897d084e9
Diffstat (limited to 'plugins/taglist/pluma-taglist-plugin.c')
-rw-r--r--plugins/taglist/pluma-taglist-plugin.c181
1 files changed, 131 insertions, 50 deletions
diff --git a/plugins/taglist/pluma-taglist-plugin.c b/plugins/taglist/pluma-taglist-plugin.c
index 391a6dde..7feeeb78 100644
--- a/plugins/taglist/pluma-taglist-plugin.c
+++ b/plugins/taglist/pluma-taglist-plugin.c
@@ -37,23 +37,37 @@
#include <glib/gi18n-lib.h>
#include <gmodule.h>
+#include <libpeas/peas-activatable.h>
-#include <pluma/pluma-plugin.h>
+#include <pluma/pluma-window.h>
#include <pluma/pluma-debug.h>
-#define WINDOW_DATA_KEY "PlumaTaglistPluginWindowData"
-
#define PLUMA_TAGLIST_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), PLUMA_TYPE_TAGLIST_PLUGIN, PlumaTaglistPluginPrivate))
struct _PlumaTaglistPluginPrivate
{
- gpointer dummy;
+ GtkWidget *window;
+
+ GtkWidget *taglist_panel;
};
-PLUMA_PLUGIN_REGISTER_TYPE_WITH_CODE (PlumaTaglistPlugin, pluma_taglist_plugin,
- pluma_taglist_plugin_panel_register_type (module);
+static void peas_activatable_iface_init (PeasActivatableInterface *iface);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (PlumaTaglistPlugin,
+ pluma_taglist_plugin,
+ PEAS_TYPE_EXTENSION_BASE,
+ 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (PEAS_TYPE_ACTIVATABLE,
+ peas_activatable_iface_init) \
+ \
+ _pluma_taglist_plugin_panel_register_type (type_module); \
)
+enum {
+ PROP_0,
+ PROP_OBJECT
+};
+
static void
pluma_taglist_plugin_init (PlumaTaglistPlugin *plugin)
{
@@ -63,11 +77,24 @@ pluma_taglist_plugin_init (PlumaTaglistPlugin *plugin)
}
static void
-pluma_taglist_plugin_finalize (GObject *object)
+pluma_taglist_plugin_dispose (GObject *object)
{
-/*
PlumaTaglistPlugin *plugin = PLUMA_TAGLIST_PLUGIN (object);
-*/
+
+ pluma_debug_message (DEBUG_PLUGINS, "PlumaTaglistPlugin disposing");
+
+ if (plugin->priv->window != NULL)
+ {
+ g_object_unref (plugin->priv->window);
+ plugin->priv->window = NULL;
+ }
+
+ G_OBJECT_CLASS (pluma_taglist_plugin_parent_class)->dispose (object);
+}
+
+static void
+pluma_taglist_plugin_finalize (GObject *object)
+{
pluma_debug_message (DEBUG_PLUGINS, "PlumaTaglistPlugin finalizing");
free_taglist ();
@@ -76,85 +103,139 @@ pluma_taglist_plugin_finalize (GObject *object)
}
static void
-impl_activate (PlumaPlugin *plugin,
- PlumaWindow *window)
+pluma_taglist_plugin_activate (PeasActivatable *activatable)
{
+ PlumaTaglistPluginPrivate *priv;
+ PlumaWindow *window;
PlumaPanel *side_panel;
- GtkWidget *taglist_panel;
gchar *data_dir;
-
+
pluma_debug (DEBUG_PLUGINS);
-
- g_return_if_fail (g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY) == NULL);
-
+
+ priv = PLUMA_TAGLIST_PLUGIN (activatable)->priv;
+ window = PLUMA_WINDOW (priv->window);
side_panel = pluma_window_get_side_panel (window);
-
- data_dir = pluma_plugin_get_data_dir (plugin);
- taglist_panel = pluma_taglist_plugin_panel_new (window, data_dir);
+
+ data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (activatable));
+ priv->taglist_panel = pluma_taglist_plugin_panel_new (window, data_dir);
g_free (data_dir);
-
+
pluma_panel_add_item_with_stock_icon (side_panel,
- taglist_panel,
+ priv->taglist_panel,
_("Tags"),
GTK_STOCK_ADD);
-
- g_object_set_data (G_OBJECT (window),
- WINDOW_DATA_KEY,
- taglist_panel);
}
static void
-impl_deactivate (PlumaPlugin *plugin,
- PlumaWindow *window)
+pluma_taglist_plugin_deactivate (PeasActivatable *activatable)
{
+ PlumaTaglistPluginPrivate *priv;
+ PlumaWindow *window;
PlumaPanel *side_panel;
- gpointer data;
pluma_debug (DEBUG_PLUGINS);
- data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
- g_return_if_fail (data != NULL);
-
+ priv = PLUMA_TAGLIST_PLUGIN (activatable)->priv;
+ window = PLUMA_WINDOW (priv->window);
side_panel = pluma_window_get_side_panel (window);
pluma_panel_remove_item (side_panel,
- GTK_WIDGET (data));
-
- g_object_set_data (G_OBJECT (window),
- WINDOW_DATA_KEY,
- NULL);
+ priv->taglist_panel);
}
static void
-impl_update_ui (PlumaPlugin *plugin,
- PlumaWindow *window)
+pluma_taglist_plugin_update_state (PeasActivatable *activatable)
{
- gpointer data;
+ PlumaTaglistPluginPrivate *priv;
+ PlumaWindow *window;
PlumaView *view;
-
+
pluma_debug (DEBUG_PLUGINS);
-
- data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
- g_return_if_fail (data != NULL);
-
+
+ priv = PLUMA_TAGLIST_PLUGIN (activatable)->priv;
+ window = PLUMA_WINDOW (priv->window);
view = pluma_window_get_active_view (window);
-
- gtk_widget_set_sensitive (GTK_WIDGET (data),
+
+ gtk_widget_set_sensitive (priv->taglist_panel,
(view != NULL) &&
gtk_text_view_get_editable (GTK_TEXT_VIEW (view)));
}
static void
+pluma_taglist_plugin_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ PlumaTaglistPlugin *plugin = PLUMA_TAGLIST_PLUGIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ plugin->priv->window = GTK_WIDGET (g_value_dup_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+pluma_taglist_plugin_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ PlumaTaglistPlugin *plugin = PLUMA_TAGLIST_PLUGIN (object);
+
+ switch (prop_id)
+ {
+ case PROP_OBJECT:
+ g_value_set_object (value, plugin->priv->window);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
pluma_taglist_plugin_class_init (PlumaTaglistPluginClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- PlumaPluginClass *plugin_class = PLUMA_PLUGIN_CLASS (klass);
object_class->finalize = pluma_taglist_plugin_finalize;
+ object_class->dispose = pluma_taglist_plugin_dispose;
+ object_class->set_property = pluma_taglist_plugin_set_property;
+ object_class->get_property = pluma_taglist_plugin_get_property;
- plugin_class->activate = impl_activate;
- plugin_class->deactivate = impl_deactivate;
- plugin_class->update_ui = impl_update_ui;
+ g_object_class_override_property (object_class, PROP_OBJECT, "object");
g_type_class_add_private (object_class, sizeof (PlumaTaglistPluginPrivate));
}
+
+static void
+pluma_taglist_plugin_class_finalize (PlumaTaglistPluginClass *klass)
+{
+ /* dummy function - used by G_DEFINE_DYNAMIC_TYPE_EXTENDED */
+}
+
+static void
+peas_activatable_iface_init (PeasActivatableInterface *iface)
+{
+ iface->activate = pluma_taglist_plugin_activate;
+ iface->deactivate = pluma_taglist_plugin_deactivate;
+ iface->update_state = pluma_taglist_plugin_update_state;
+}
+
+G_MODULE_EXPORT void
+peas_register_types (PeasObjectModule *module)
+{
+ pluma_taglist_plugin_register_type (G_TYPE_MODULE (module));
+
+ peas_object_module_register_extension_type (module,
+ PEAS_TYPE_ACTIVATABLE,
+ PLUMA_TYPE_TAGLIST_PLUGIN);
+}