summaryrefslogtreecommitdiff
path: root/tools/plugin_template
diff options
context:
space:
mode:
Diffstat (limited to 'tools/plugin_template')
-rw-r--r--tools/plugin_template/Makefile.am37
-rw-r--r--tools/plugin_template/pluma-plugin.c184
-rw-r--r--tools/plugin_template/pluma-plugin.desktop.in12
-rw-r--r--tools/plugin_template/pluma-plugin.h76
4 files changed, 309 insertions, 0 deletions
diff --git a/tools/plugin_template/Makefile.am b/tools/plugin_template/Makefile.am
new file mode 100644
index 00000000..93c79ae7
--- /dev/null
+++ b/tools/plugin_template/Makefile.am
@@ -0,0 +1,37 @@
+# ##(PLUGIN_NAME)
+
+plugindir = $(PLUMA_PLUGINS_LIBS_DIR)
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ $(PLUMA_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS) \
+ -DPLUMA_LOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\"
+
+plugin_LTLIBRARIES = lib##(PLUGIN_MODULE).la
+
+lib##(PLUGIN_MODULE)_la_SOURCES = \
+ ##(PLUGIN_MODULE)-plugin.h \
+ ##(PLUGIN_MODULE)-plugin.c
+
+lib##(PLUGIN_MODULE)_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
+lib##(PLUGIN_MODULE)_la_LIBADD = $(PLUMA_LIBS)
+
+# UI files (if you use gtkbuilder for your plugin, list those files here)
+uidir = $(PLUMA_PLUGINS_DATA_DIR)/##(PLUGIN_MODULE)
+ui_DATA =
+
+plugin_in_files = ##(PLUGIN_MODULE).pluma-plugin.desktop.in
+
+%.pluma-plugin: %.pluma-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
+
+plugin_DATA = $(plugin_in_files:.pluma-plugin.desktop.in=.pluma-plugin)
+
+EXTRA_DIST = $(plugin_in_files)
+
+CLEANFILES = $(plugin_DATA) $(ui_DATA)
+
+DISTCLEANFILES = $(plugin_DATA) $(ui_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/tools/plugin_template/pluma-plugin.c b/tools/plugin_template/pluma-plugin.c
new file mode 100644
index 00000000..4974f121
--- /dev/null
+++ b/tools/plugin_template/pluma-plugin.c
@@ -0,0 +1,184 @@
+/*
+ * ##(FILENAME) - ##(DESCRIPTION)
+ *
+ * Copyright (C) ##(DATE_YEAR) - ##(AUTHOR_FULLNAME)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "##(PLUGIN_MODULE)-plugin.h"
+
+#include <glib/gi18n-lib.h>
+#include <pluma/pluma-debug.h>
+
+#define WINDOW_DATA_KEY "##(PLUGIN_ID.camel)PluginWindowData"
+
+#define ##(PLUGIN_ID.upper)_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginPrivate))
+
+struct _##(PLUGIN_ID.camel)PluginPrivate
+{
+ gpointer dummy;
+};
+
+PLUMA_PLUGIN_REGISTER_TYPE (##(PLUGIN_ID.camel)Plugin, ##(PLUGIN_ID.lower)_plugin)
+
+##ifdef WITH_MENU
+/* UI string. See pluma-ui.xml for reference */
+static const gchar ui_str =
+ "<ui>"
+ " <menubar name='MenuBar'>"
+ " <!-- Put your menu entries here -->"
+ " </menubar>"
+ "</ui>";
+
+/* UI actions */
+static const GtkActionEntry action_entries[] =
+ {
+ /* Put your actions here */
+ };
+
+typedef struct
+{
+ GtkActionGroup *action_group;
+ guint ui_id;
+} WindowData;
+##endif
+
+static void
+##(PLUGIN_ID.lower)_plugin_init (##(PLUGIN_ID.camel)Plugin *plugin)
+{
+ plugin->priv = ##(PLUGIN_ID.upper)_PLUGIN_GET_PRIVATE (plugin);
+
+ pluma_debug_message (DEBUG_PLUGINS,
+ "##(PLUGIN_ID.camel)Plugin initializing");
+}
+
+static void
+##(PLUGIN_ID.lower)_plugin_finalize (GObject *object)
+{
+ pluma_debug_message (DEBUG_PLUGINS,
+ "##(PLUGIN_ID.camel)Plugin finalizing");
+
+ G_OBJECT_CLASS (##(PLUGIN_ID.lower)_plugin_parent_class)->finalize (object);
+}
+
+##ifdef WITH_MENU
+static void
+free_window_data (WindowData *data)
+{
+ g_return_if_fail (data != NULL);
+
+ g_object_unref (data->action_group);
+ g_free (data);
+}
+##endif
+
+static void
+impl_activate (PlumaPlugin *plugin,
+ PlumaWindow *window)
+{
+##ifdef WITH_MENU
+ GtkUIManager *manager;
+ WindowData *data;
+##endif
+
+ pluma_debug (DEBUG_PLUGINS);
+
+##ifdef WITH_MENU
+ data = g_new (WindowData, 1);
+ manager = pluma_window_get_ui_manager (window);
+
+ data->action_group = gtk_action_group_new ("##(PLUGIN_ID.camel)PluginActions");
+ gtk_action_group_set_translation_domain (data->action_group,
+ GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (data->action_group,
+ action_entries,
+ G_N_ELEMENTS (action_entries),
+ window);
+
+ gtk_ui_manager_insert_action_group (manager, data->action_group, -1);
+
+ data->ui_id = gtk_ui_manager_add_ui_from_string (manager, ui_str,
+ -1, NULL);
+
+ g_object_set_data_full (G_OBJECT (window),
+ WINDOW_DATA_KEY,
+ data,
+ (GDestroyNotify) free_window_data);
+##endif
+}
+
+static void
+impl_deactivate (PlumaPlugin *plugin,
+ PlumaWindow *window)
+{
+##ifdef WITH_MENU
+ GtkUIManager *manager;
+ WindowData *data;
+##endif
+
+ pluma_debug (DEBUG_PLUGINS);
+
+##ifdef WITH_MENU
+ manager = pluma_window_get_ui_manager (window);
+
+ data = (WindowData *) g_object_get_data (G_OBJECT (window),
+ WINDOW_DATA_KEY);
+ g_return_if_fail (data != NULL);
+
+ gtk_ui_manager_remove_ui (manager, data->ui_id);
+ gtk_ui_manager_remove_action_group (manager, data->action_group);
+
+ g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);
+##endif
+}
+
+static void
+impl_update_ui (PlumaPlugin *plugin,
+ PlumaWindow *window)
+{
+ pluma_debug (DEBUG_PLUGINS);
+}
+
+##ifdef WITH_CONFIGURE_DIALOG
+static GtkWidget *
+impl_create_configure_dialog (PlumaPlugin *plugin)
+{
+ pluma_debug (DEBUG_PLUGINS);
+}
+##endif
+
+static void
+##(PLUGIN_ID.lower)_plugin_class_init (##(PLUGIN_ID.camel)PluginClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ PlumaPluginClass *plugin_class = PLUMA_PLUGIN_CLASS (klass);
+
+ object_class->finalize = ##(PLUGIN_ID.lower)_plugin_finalize;
+
+ plugin_class->activate = impl_activate;
+ plugin_class->deactivate = impl_deactivate;
+ plugin_class->update_ui = impl_update_ui;
+##ifdef WITH_CONFIGURE_DIALOG
+ plugin_class->create_configure_dialog = impl_create_configure_dialog;
+##endif
+
+ g_type_class_add_private (object_class,
+ sizeof (##(PLUGIN_ID.camel)PluginPrivate));
+}
diff --git a/tools/plugin_template/pluma-plugin.desktop.in b/tools/plugin_template/pluma-plugin.desktop.in
new file mode 100644
index 00000000..c12b91b9
--- /dev/null
+++ b/tools/plugin_template/pluma-plugin.desktop.in
@@ -0,0 +1,12 @@
+[Pluma Plugin]
+##ifdef WITH_PYTHON
+Loader=python
+##endif
+Module=##(PLUGIN_MODULE)
+IAge=2
+_Name=##(PLUGIN_NAME)
+_Description=##(DESCRIPTION)
+Icon=pluma-plugin
+Authors=##(AUTHOR_FULLNAME) <##(AUTHOR_EMAIL.lower)>
+Copyright=Copyright © ##(DATE_YEAR) ##(AUTHOR_FULLNAME)
+Website=http://www.mate-desktop.org
diff --git a/tools/plugin_template/pluma-plugin.h b/tools/plugin_template/pluma-plugin.h
new file mode 100644
index 00000000..5a8305bc
--- /dev/null
+++ b/tools/plugin_template/pluma-plugin.h
@@ -0,0 +1,76 @@
+/*
+ * ##(FILENAME) - ##(DESCRIPTION)
+ *
+ * Copyright (C) ##(DATE_YEAR) - ##(AUTHOR_FULLNAME)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __##(PLUGIN_ID.upper)_PLUGIN_H__
+#define __##(PLUGIN_ID.upper)_PLUGIN_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <pluma/pluma-plugin.h>
+
+G_BEGIN_DECLS
+
+/*
+ * Type checking and casting macros
+ */
+#define TYPE_##(PLUGIN_ID.upper)_PLUGIN (##(PLUGIN_ID.lower)_plugin_get_type ())
+#define ##(PLUGIN_ID.upper)_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)Plugin))
+#define ##(PLUGIN_ID.upper)_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginClass))
+#define IS_##(PLUGIN_ID.upper)_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN))
+#define IS_##(PLUGIN_ID.upper)_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_##(PLUGIN_ID.upper)_PLUGIN))
+#define ##(PLUGIN_ID.upper)_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginClass))
+
+/* Private structure type */
+typedef struct _##(PLUGIN_ID.camel)PluginPrivate ##(PLUGIN_ID.camel)PluginPrivate;
+
+/*
+ * Main object structure
+ */
+typedef struct _##(PLUGIN_ID.camel)Plugin ##(PLUGIN_ID.camel)Plugin;
+
+struct _##(PLUGIN_ID.camel)Plugin
+{
+ PlumaPlugin parent_instance;
+
+ /*< private >*/
+ ##(PLUGIN_ID.camel)PluginPrivate *priv;
+};
+
+/*
+ * Class definition
+ */
+typedef struct _##(PLUGIN_ID.camel)PluginClass ##(PLUGIN_ID.camel)PluginClass;
+
+struct _##(PLUGIN_ID.camel)PluginClass
+{
+ PlumaPluginClass parent_class;
+};
+
+/*
+ * Public methods
+ */
+GType ##(PLUGIN_ID.lower)_plugin_get_type (void) G_GNUC_CONST;
+
+/* All the plugins must implement this function */
+G_MODULE_EXPORT GType register_pluma_plugin (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __##(PLUGIN_ID.upper)_PLUGIN_H__ */