These signals can be used by plugins to add their settings tab and
read the settings when the user presses OK. The code had to be
reorganized slightly because first project-dialog-confirmed has
to be emitted (so the plugin can read the settings) and project-save
afterwards.
Signed-off-by: Jiří Techet <[email protected]>
---
doc/pluginsignals.c | 19 +++++++++++++++++++
src/geanyobject.c | 18 ++++++++++++++++++
src/geanyobject.h | 4 ++++
src/project.c | 14 +++++++++-----
4 files changed, 50 insertions(+), 5 deletions(-)
diff --git a/doc/pluginsignals.c b/doc/pluginsignals.c
index 5f06ec7..9b85621 100644
--- a/doc/pluginsignals.c
+++ b/doc/pluginsignals.c
@@ -160,6 +160,25 @@ signal void (*project_save)(GObject *obj, GKeyFile *config, gpointer user_data);
*/
signal void (*project_close)(GObject *obj, gpointer user_data);
+/** Sent after a project dialog is created but before it is displayed. Plugins
+ * can add their own project settings tabs by using this signal.
+ * @param obj a GeanyObject instance, should be ignored.
+ * @param notebook a GtkNotebook instance that can be used by plugins to add their
+ * settings tabs.
+ * @param user_data user data.
+ */
+signal void (*project_dialog_create)(GObject *obj, GtkWidget *notebook, gpointer user_data);
+
+/** Sent when the settings dialog is confirmed by the user. Plugins can use
+ * this signal to read the settings widgets previously added by using the
+ * project-dialog-create signal.
+ * @param obj a GeanyObject instance, should be ignored.
+ * @param notebook a GtkNotebook instance that can be used by plugins to read their
+ * settings widgets.
+ * @param user_data user data.
+ */
+signal void (*project_dialog_confirmed)(GObject *obj, GtkWidget *notebook, gpointer user_data);
+
/** Sent once Geany has finished all initialization and startup tasks and the GUI has been
* realized. This signal is the very last step in the startup process and is sent once
* the GTK main event loop has been entered.
diff --git a/src/geanyobject.c b/src/geanyobject.c
index 1f27c0d..89f09c2 100644
--- a/src/geanyobject.c
+++ b/src/geanyobject.c
@@ -262,6 +262,24 @@ static void create_signals(GObjectClass *g_object_class)
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ geany_object_signals[GCB_PROJECT_DIALOG_CREATE] = g_signal_new (
+ "project-dialog-create",
+ G_OBJECT_CLASS_TYPE (g_object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GeanyObjectClass, project_dialog_create),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+ geany_object_signals[GCB_PROJECT_DIALOG_CONFIRMED] = g_signal_new (
+ "project-dialog-confirmed",
+ G_OBJECT_CLASS_TYPE (g_object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GeanyObjectClass, project_dialog_confirmed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
/* Editor signals */
geany_object_signals[GCB_UPDATE_EDITOR_MENU] = g_signal_new (
diff --git a/src/geanyobject.h b/src/geanyobject.h
index 19df28c..d901375 100644
--- a/src/geanyobject.h
+++ b/src/geanyobject.h
@@ -42,6 +42,8 @@ typedef enum
GCB_PROJECT_OPEN,
GCB_PROJECT_SAVE,
GCB_PROJECT_CLOSE,
+ GCB_PROJECT_DIALOG_CREATE,
+ GCB_PROJECT_DIALOG_CONFIRMED,
GCB_UPDATE_EDITOR_MENU,
GCB_EDITOR_NOTIFY,
GCB_GEANY_STARTUP_COMPLETE,
@@ -88,6 +90,8 @@ struct _GeanyObjectClass
void (*project_open)(GKeyFile *keyfile);
void (*project_save)(GKeyFile *keyfile);
void (*project_close)(void);
+ void (*project_dialog_create)(GtkWidget *notebook);
+ void (*project_dialog_confirmed)(GtkWidget *notebook);
void (*update_editor_menu)(const gchar *word, gint click_pos, GeanyDocument *doc);
gboolean (*editor_notify)(GeanyEditor *editor, gpointer scnt);
void (*geany_startup_complete)(void);
diff --git a/src/project.c b/src/project.c
index a0f9c67..7a8d59b 100644
--- a/src/project.c
+++ b/src/project.c
@@ -191,6 +191,9 @@ void project_new(void)
{
if (update_config(e))
{
+ write_config(TRUE);
+ ui_set_statusbar(TRUE, _("Project \"%s\" created."), app->project->name);
+
ui_add_recent_project_file(app->project->file_name);
break;
}
@@ -585,6 +588,9 @@ static void show_project_properties(gboolean show_build)
}
#endif
+ widget = ui_lookup_widget(e->dialog, "project_notebook");
+ g_signal_emit_by_name(geany_object, "project-dialog-create", widget);
+
gtk_widget_show_all(e->dialog);
/* note: notebook page must be shown before setting current page */
@@ -597,6 +603,9 @@ static void show_project_properties(gboolean show_build)
{
if (update_config(e))
{
+ g_signal_emit_by_name(geany_object, "project-dialog-confirmed", widget);
+ write_config(TRUE);
+ ui_set_statusbar(TRUE, _("Project \"%s\" saved."), app->project->name);
stash_group_update(indent_group, e->dialog);
break;
}
@@ -809,11 +818,6 @@ static gboolean update_config(const PropertyDialogElements *e)
g_free(tmp);
#endif
}
- write_config(TRUE);
- if (new_project)
- ui_set_statusbar(TRUE, _("Project \"%s\" created."), p->name);
- else
- ui_set_statusbar(TRUE, _("Project \"%s\" saved."), p->name);
update_ui();
_______________________________________________
Geany-devel mailing list
[email protected]
http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel