Revision: 2065 http://geany.svn.sourceforge.net/geany/?rev=2065&view=rev Author: eht16 Date: 2007-11-21 10:54:12 -0800 (Wed, 21 Nov 2007)
Log Message: ----------- Remove ununsed function project_save(). Fix typo in plugin API at utils_mkdir(). Add document_get_n_idx() to the plugin API. Fix display of plugin separator in the Tools menu when only plugins without menu item are loaded. Add three new signals: project_open, project_save, project_close. On Shutdown close the project before plugins are unloaded to let plugins work on the last project closed event.
Modified Paths: -------------- trunk/ChangeLog trunk/src/geanyobject.c trunk/src/geanyobject.h trunk/src/main.c trunk/src/plugindata.h trunk/src/plugins.c trunk/src/project.c trunk/src/project.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/ChangeLog 2007-11-21 18:54:12 UTC (rev 2065) @@ -5,6 +5,16 @@ * src/symbols.c, src/treeviews.c, src/treeviews.h: Revert the change to make symbol sections bold and use some small indentation when expanders are hidden. + * src/geanyobject.c, src/geanyobject.h, src/main.c, src/plugindata.h, + src/plugins.c, src/project.c, src/project.h: + Remove ununsed function project_save(). + Fix typo in plugin API at utils_mkdir(). + Add document_get_n_idx() to the plugin API. + Fix display of plugin separator in the Tools menu when only plugins + without menu item are loaded. + Add three new signals: project_open, project_save, project_close. + On Shutdown close the project before plugins are unloaded to let + plugins work on the last project closed event.
2007-11-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/geanyobject.c =================================================================== --- trunk/src/geanyobject.c 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/geanyobject.c 2007-11-21 18:54:12 UTC (rev 2065) @@ -116,6 +116,33 @@ gtk_marshal_NONE__INT, G_TYPE_NONE, 1, G_TYPE_INT); + + geany_object_signals[GCB_PROJECT_OPEN] = g_signal_new ( + "project-open", + G_OBJECT_CLASS_TYPE (g_object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GeanyObjectClass, project_open), + NULL, NULL, + gtk_marshal_NONE__INT, + G_TYPE_NONE, 1, + G_TYPE_POINTER); + geany_object_signals[GCB_PROJECT_SAVE] = g_signal_new ( + "project-save", + G_OBJECT_CLASS_TYPE (g_object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GeanyObjectClass, project_save), + NULL, NULL, + gtk_marshal_NONE__INT, + G_TYPE_NONE, 1, + G_TYPE_POINTER); + geany_object_signals[GCB_PROJECT_CLOSE] = g_signal_new ( + "project-close", + G_OBJECT_CLASS_TYPE (g_object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GeanyObjectClass, project_close), + NULL, NULL, + gtk_marshal_NONE__NONE, + G_TYPE_NONE, 0); }
@@ -146,7 +173,7 @@ }
-void geany_object_finalize(GObject *object) +static void geany_object_finalize(GObject *object) { GeanyObject *self;
Modified: trunk/src/geanyobject.h =================================================================== --- trunk/src/geanyobject.h 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/geanyobject.h 2007-11-21 18:54:12 UTC (rev 2065) @@ -38,6 +38,9 @@ GCB_DOCUMENT_OPEN, GCB_DOCUMENT_SAVE, GCB_DOCUMENT_ACTIVATE, + GCB_PROJECT_OPEN, + GCB_PROJECT_SAVE, + GCB_PROJECT_CLOSE, GCB_MAX } GeanyCallbackId;
@@ -71,10 +74,13 @@ void (*document_open)(gint idx); void (*document_save)(gint idx); void (*document_activate)(gint idx); + void (*project_open)(GKeyFile *keyfile); + void (*project_save)(GKeyFile *keyfile); + void (*project_close)(); };
GType geany_object_get_type (void); -GObject* geany_object_new (void); +GObject* geany_object_new (void);
G_END_DECLS
Modified: trunk/src/main.c =================================================================== --- trunk/src/main.c 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/main.c 2007-11-21 18:54:12 UTC (rev 2065) @@ -795,12 +795,13 @@ socket_finalize(); #endif
+ if (app->project != NULL) + project_close(FALSE); + #ifdef HAVE_PLUGINS if (want_plugins) plugins_free(); #endif - if (app->project != NULL) - project_close(FALSE);
navqueue_free(); keybindings_free();
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/plugindata.h 2007-11-21 18:54:12 UTC (rev 2065) @@ -61,21 +61,39 @@ * * "document-new" * Sent when a new document is created. + * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); * * "document-open" * Sent when a file is opened. + * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); * * "document-save" * Sent when a file is saved. + * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); * * "document-activate" * Sent when switching notebook pages. + * Handler: void user_function(GObject *obj, gint idx, gpointer user_data); + * + * "project-open" + * Sent after a project is opened but before session files are loaded. + * Handler: void user_function(GObject *obj, GKeyFile *config, gpointer user_data); + * + * "project-save" + * Sent when a project is saved(happens when the project is created, the properties + * dialog is closed or Geany is exited). This signal is emitted shortly before Geany + * will write the contents of the GKeyFile to the disc. + * Handler: void user_function(GObject *obj, GKeyFile *config, gpointer user_data); + * + * "project-close" + * Sent after a project is closed. + * Handler: void user_function(GObject *obj, gpointer user_data); */
/* The API version should be incremented whenever any plugin data types below are * modified or appended to. */ -static const gint api_version = 31; +static const gint api_version = 32;
/* The ABI version should be incremented whenever existing fields in the plugin * data types below have to be changed or reordered. It should stay the same if fields @@ -192,6 +210,7 @@ { gint (*new_file) (const gchar *filename, struct filetype *ft, const gchar *text); gint (*get_cur_idx) (); + gint (*get_n_idx) (guint i); struct document* (*get_current) (); gboolean (*save_file)(gint idx, gboolean force); gint (*open_file)(const gchar *locale_filename, gboolean readonly, @@ -262,7 +281,7 @@ gchar* (*get_locale_from_utf8) (const gchar *utf8_text); gchar* (*get_utf8_from_locale) (const gchar *locale_text); gchar* (*remove_ext_from_filename) (const gchar *filename); - gint (*utils_mkdir) (const gchar *path, gboolean create_parent_dirs); + gint (*mkdir) (const gchar *path, gboolean create_parent_dirs); } UtilsFuncs;
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/plugins.c 2007-11-21 18:54:12 UTC (rev 2065) @@ -79,13 +79,13 @@
static GList *plugin_list = NULL; // list of all available, loadable plugins static GList *active_plugin_list = NULL; // list of only actually loaded plugins -static GtkWidget *separator = NULL; // separator in the Tools menu static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data);
static DocumentFuncs doc_funcs = { &document_new_file, &document_get_cur_idx, + &document_get_n_idx, &document_get_current, &document_save_file, &document_open_file, @@ -456,8 +456,8 @@ remove_callbacks(plugin);
active_plugin_list = g_list_remove(active_plugin_list, plugin); + geany_debug("Unloaded: %s", plugin->filename); } - geany_debug("Unloaded: %s", plugin->filename); }
@@ -467,13 +467,8 @@ g_return_if_fail(plugin); g_return_if_fail(plugin->module);
- if (g_list_find(active_plugin_list, plugin) != NULL) - { // only do cleanup if the plugin was actually loaded - if (plugin->cleanup) - plugin->cleanup(); + plugin_unload(plugin);
- remove_callbacks(plugin); - } if (! g_module_close(plugin->module)) g_warning("%s: %s", plugin->filename, g_module_error());
@@ -555,9 +550,6 @@ gtk_widget_show(widget); g_signal_connect((gpointer) widget, "activate", G_CALLBACK(pm_show_dialog), NULL);
- separator = gtk_separator_menu_item_new(); - gtk_container_add(GTK_CONTAINER(geany_data.tools_menu), separator); - load_plugin_paths();
plugins_update_tools_menu(); @@ -599,6 +591,7 @@ g_list_free(active_plugin_list);
g_object_unref(geany_object); + geany_object = NULL; // to mark the object as invalid for any code which tries to emit signals }
@@ -616,12 +609,29 @@ }
+static gint +plugin_has_menu(Plugin *a, Plugin *b) +{ + if (((PluginFields)a->fields).menu_item != NULL) + return 0; + + return 1; +} + + void plugins_update_tools_menu() { + gboolean found; + static GtkWidget *separator = NULL; + if (separator == NULL) - return; + { + separator = gtk_separator_menu_item_new(); + gtk_container_add(GTK_CONTAINER(geany_data.tools_menu), separator); + }
- ui_widget_show_hide(separator, g_list_length(active_plugin_list) > 0); + found = (g_list_find_custom(active_plugin_list, NULL, (GCompareFunc) plugin_has_menu) != NULL); + ui_widget_show_hide(separator, found); }
Modified: trunk/src/project.c =================================================================== --- trunk/src/project.c 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/project.c 2007-11-21 18:54:12 UTC (rev 2065) @@ -43,6 +43,7 @@ #endif #include "build.h" #include "document.h" +#include "geanyobject.h"
ProjectPrefs project_prefs = {NULL}; @@ -290,16 +291,6 @@ }
-void project_save() -{ - g_return_if_fail(app->project != NULL); - - write_config(); - - ui_set_statusbar(TRUE, _("Project "%s" saved."), app->project->name); -} - - // open_default will make function reload default session files on close void project_close(gboolean open_default) { @@ -331,6 +322,11 @@ configuration_open_files(); }
+ if (geany_object) + { + g_signal_emit_by_name(geany_object, "project-close"); + } + tm_workspace_update(TM_WORK_OBJECT(app->tm_workspace), TRUE, TRUE, FALSE); update_ui(); } @@ -872,6 +868,10 @@ // fetch session files too configuration_load_session_files(config);
+ if (geany_object) + { + g_signal_emit_by_name(geany_object, "project-open", config); + } g_key_file_free(config);
update_ui(); @@ -912,6 +912,10 @@ /// TODO maybe it is useful to store relative file names if base_path is relative configuration_save_session_files(config);
+ if (geany_object) + { + g_signal_emit_by_name(geany_object, "project-save", config); + } // write the file data = g_key_file_to_data(config, NULL, NULL); ret = (utils_write_file(filename, data) == 0);
Modified: trunk/src/project.h =================================================================== --- trunk/src/project.h 2007-11-21 17:20:26 UTC (rev 2064) +++ trunk/src/project.h 2007-11-21 18:54:12 UTC (rev 2065) @@ -53,8 +53,6 @@
void project_open();
-void project_save(); - void project_close(gboolean open_default);
void project_properties();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.