diff --git a/doc/pluginsignals.c b/doc/pluginsignals.c index 499506ec5b..6030f14570 100644 --- a/doc/pluginsignals.c +++ b/doc/pluginsignals.c @@ -159,6 +159,15 @@ signal void (*project_save)(GObject *obj, GKeyFile *config, gpointer user_data); */ signal void (*project_close)(GObject *obj, gpointer user_data); +/** Sent before a project is closed. + * + * @param obj a GeanyObject instance, should be ignored. + * @param user_data user data. + * + * @since 1.29 (API 230) + */ +signal void (*project_before_close)(GObject *obj, gpointer user_data); + /** Sent after a project dialog is opened but before it is displayed. Plugins * can append their own project settings tabs by using this signal. * diff --git a/src/geanyobject.c b/src/geanyobject.c index b15e5378a8..10ba4244fd 100644 --- a/src/geanyobject.c +++ b/src/geanyobject.c @@ -156,6 +156,12 @@ static void create_signals(GObjectClass *g_object_class) G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + geany_object_signals[GCB_PROJECT_BEFORE_CLOSE] = g_signal_new ( + "project-before-close", + G_OBJECT_CLASS_TYPE (g_object_class), + G_SIGNAL_RUN_FIRST, + 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); geany_object_signals[GCB_PROJECT_DIALOG_OPEN] = g_signal_new ( "project-dialog-open", G_OBJECT_CLASS_TYPE (g_object_class), diff --git a/src/geanyobject.h b/src/geanyobject.h index a5f946cb3c..632c1a204d 100644 --- a/src/geanyobject.h +++ b/src/geanyobject.h @@ -47,6 +47,7 @@ typedef enum GCB_PROJECT_OPEN, GCB_PROJECT_SAVE, GCB_PROJECT_CLOSE, + GCB_PROJECT_BEFORE_CLOSE, GCB_PROJECT_DIALOG_OPEN, GCB_PROJECT_DIALOG_CONFIRMED, GCB_PROJECT_DIALOG_CLOSE, diff --git a/src/plugindata.h b/src/plugindata.h index 7ee8f3090f..1413450853 100644 --- a/src/plugindata.h +++ b/src/plugindata.h @@ -59,7 +59,7 @@ G_BEGIN_DECLS * @warning You should not test for values below 200 as previously * @c GEANY_API_VERSION was defined as an enum value, not a macro. */ -#define GEANY_API_VERSION 229 +#define GEANY_API_VERSION 230 /* hack to have a different ABI when built with GTK3 because loading GTK2-linked plugins * with GTK3-linked Geany leads to crash */ diff --git a/src/project.c b/src/project.c index eda00faa2a..f107df6fc5 100644 --- a/src/project.c +++ b/src/project.c @@ -425,6 +425,8 @@ static void destroy_project(gboolean open_default) g_return_if_fail(app->project != NULL); + g_signal_emit_by_name(geany_object, "project-before-close"); + /* remove project filetypes build entries */ if (app->project->priv->build_filetypes_list != NULL) {