[geany/geany] 824127: demoplugin: Adapt demoplugin to the new loader

Thomas Martitz git-noreply at xxxxx
Sun Aug 23 18:01:41 UTC 2015


Branch:      refs/heads/master
Author:      Thomas Martitz <kugel at rockbox.org>
Committer:   Thomas Martitz <kugel at rockbox.org>
Date:        Sun, 23 Aug 2015 18:01:41 UTC
Commit:      8241278472ceb23e7341a946c758bc8a30ef0fa8
             https://github.com/geany/geany/commit/8241278472ceb23e7341a946c758bc8a30ef0fa8

Log Message:
-----------
demoplugin: Adapt demoplugin to the new loader

Demoplugin, while not installed by default, is a nice starting point
and mini-howto. Therefore it should advertise the new loader from the
beginning.


Modified Paths:
--------------
    plugins/Makefile.am
    plugins/demoplugin.c

Modified: plugins/Makefile.am
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -40,7 +40,7 @@ saveactions_la_SOURCES   = saveactions.c
 filebrowser_la_SOURCES   = filebrowser.c
 splitwindow_la_SOURCES   = splitwindow.c
 
-demoplugin_la_CFLAGS    = -DG_LOG_DOMAIN=\""Demoplugin"\"
+demoplugin_la_CFLAGS    = -DG_LOG_DOMAIN=\""Demoplugin"\" -DLOCALEDIR=\""$(LOCALEDIR)"\"
 classbuilder_la_CFLAGS  = -DG_LOG_DOMAIN=\""Classbuilder"\"
 htmlchars_la_CFLAGS     = -DG_LOG_DOMAIN=\""HTMLChars"\"
 export_la_CFLAGS        = -DG_LOG_DOMAIN=\""Export"\"


Modified: plugins/demoplugin.c
70 lines changed, 39 insertions(+), 31 deletions(-)
===================================================================
@@ -35,29 +35,16 @@
 #include "geanyplugin.h"	/* plugin API, always comes first */
 #include "Scintilla.h"	/* for the SCNotification struct */
 
-
-/* These items are set by Geany before plugin_init() is called. */
-GeanyPlugin		*geany_plugin;
-GeanyData		*geany_data;
-
-
-/* Check that the running Geany supports the plugin API version used below, and check
- * for binary compatibility. */
-PLUGIN_VERSION_CHECK(147)
-
-/* All plugins must set name, description, version and author. */
-PLUGIN_SET_INFO(_("Demo"), _("Example plugin."), "0.1" , _("The Geany developer team"))
-
-
 static GtkWidget *main_menu_item = NULL;
 /* text to be shown in the plugin dialog */
 static gchar *welcome_text = NULL;
 
 
-
 static gboolean on_editor_notify(GObject *object, GeanyEditor *editor,
 								 SCNotification *nt, gpointer data)
 {
+	GeanyData *geany_data = data;
+
 	/* For detailed documentation about the SCNotification struct, please see
 	 * http://www.scintilla.org/ScintillaDoc.html#Notifications. */
 	switch (nt->nmhdr.code)
@@ -78,7 +65,7 @@ static gboolean on_editor_notify(GObject *object, GeanyEditor *editor,
 				GtkWidget *dialog;
 
 				dialog = gtk_message_dialog_new(
-					GTK_WINDOW(geany->main_widgets->window),
+					GTK_WINDOW(geany_data->main_widgets->window),
 					GTK_DIALOG_DESTROY_WITH_PARENT,
 					GTK_MESSAGE_INFO,
 					GTK_BUTTONS_OK,
@@ -99,7 +86,7 @@ static gboolean on_editor_notify(GObject *object, GeanyEditor *editor,
 }
 
 
-PluginCallback plugin_callbacks[] =
+static PluginCallback demo_callbacks[] =
 {
 	/* Set 'after' (third field) to TRUE to run the callback @a after the default handler.
 	 * If 'after' is FALSE, the callback is run @a before the default handler, so the plugin
@@ -114,32 +101,34 @@ static void
 item_activate(GtkMenuItem *menuitem, gpointer gdata)
 {
 	GtkWidget *dialog;
+	GeanyPlugin *plugin = gdata;
+	GeanyData *geany_data = plugin->geany_data;
 
 	dialog = gtk_message_dialog_new(
-		GTK_WINDOW(geany->main_widgets->window),
+		GTK_WINDOW(geany_data->main_widgets->window),
 		GTK_DIALOG_DESTROY_WITH_PARENT,
 		GTK_MESSAGE_INFO,
 		GTK_BUTTONS_OK,
 		"%s", welcome_text);
 	gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
-		_("(From the %s plugin)"), geany_plugin->info->name);
+		_("(From the %s plugin)"), plugin->info->name);
 
 	gtk_dialog_run(GTK_DIALOG(dialog));
 	gtk_widget_destroy(dialog);
 }
 
 
-/* Called by Geany to initialize the plugin.
- * Note: data is the same as geany_data. */
-void plugin_init(GeanyData *data)
+/* Called by Geany to initialize the plugin */
+static void demo_init(GeanyPlugin *plugin, gpointer data)
 {
 	GtkWidget *demo_item;
+	GeanyData *geany_data = plugin->geany_data;
 
 	/* Add an item to the Tools menu */
 	demo_item = gtk_menu_item_new_with_mnemonic(_("_Demo Plugin"));
 	gtk_widget_show(demo_item);
-	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), demo_item);
-	g_signal_connect(demo_item, "activate", G_CALLBACK(item_activate), NULL);
+	gtk_container_add(GTK_CONTAINER(geany_data->main_widgets->tools_menu), demo_item);
+	g_signal_connect(demo_item, "activate", G_CALLBACK(item_activate), plugin);
 
 	/* make the menu item sensitive only when documents are open */
 	ui_add_document_sensitive(demo_item);
@@ -147,10 +136,12 @@ void plugin_init(GeanyData *data)
 	main_menu_item = demo_item;
 
 	welcome_text = g_strdup(_("Hello World!"));
+
+	demo_callbacks[0].user_data = geany_data;
 }
 
 
-/* Callback connected in plugin_configure(). */
+/* Callback connected in demo_configure(). */
 static void
 on_configure_response(GtkDialog *dialog, gint response, gpointer user_data)
 {
@@ -170,13 +161,12 @@ on_configure_response(GtkDialog *dialog, gint response, gpointer user_data)
 	}
 }
 
-
 /* Called by Geany to show the plugin's configure dialog. This function is always called after
- * plugin_init() was called.
+ * demo_init() was called.
  * You can omit this function if the plugin doesn't need to be configured.
  * Note: parent is the parent window which can be used as the transient window for the created
  *       dialog. */
-GtkWidget *plugin_configure(GtkDialog *dialog)
+static GtkWidget *demo_configure(GeanyPlugin *plugin, GtkDialog *dialog, gpointer data)
 {
 	GtkWidget *label, *entry, *vbox;
 
@@ -203,11 +193,29 @@ GtkWidget *plugin_configure(GtkDialog *dialog)
 
 /* Called by Geany before unloading the plugin.
  * Here any UI changes should be removed, memory freed and any other finalization done.
- * Be sure to leave Geany as it was before plugin_init(). */
-void plugin_cleanup(void)
+ * Be sure to leave Geany as it was before demo_init(). */
+static void demo_cleanup(GeanyPlugin *plugin, gpointer data)
 {
-	/* remove the menu item added in plugin_init() */
+	/* remove the menu item added in demo_init() */
 	gtk_widget_destroy(main_menu_item);
 	/* release other allocated strings and objects */
 	g_free(welcome_text);
 }
+
+gboolean geany_load_module(GeanyPlugin *plugin)
+{
+	/* main_locale_init() must be called for your package before any localization can be done */
+	main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
+	plugin->info->name = _("Demo");
+	plugin->info->description = _("Example plugin.");
+	plugin->info->version = "0.4";
+	plugin->info->author =  _("The Geany developer team");
+
+	plugin->funcs->init = demo_init;
+	plugin->funcs->configure = demo_configure;
+	plugin->funcs->help = NULL; /* This demo has no help but it is an option */
+	plugin->funcs->cleanup = demo_cleanup;
+	plugin->funcs->callbacks = demo_callbacks;
+
+	return GEANY_PLUGIN_REGISTER(plugin, 225);
+}



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list