From 0370dbf12718cee71ba0f32da1ec343095a72cd3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Granjoux?= Date: Mon, 27 Jan 2014 22:53:30 +0100 Subject: [PATCH] project-wizard: bgo #711353 - Project Wizard - Set default setting for author, email, version, and project directory --- plugins/project-wizard/Makefile.am | 19 ++-- plugins/project-wizard/druid.c | 113 ++++++++++++++++++++- ...me.anjuta.plugins.project-wizard.gschema.xml.in | 19 ++++ 3 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in diff --git a/plugins/project-wizard/Makefile.am b/plugins/project-wizard/Makefile.am index c91356e61..f7d6b657a 100644 --- a/plugins/project-wizard/Makefile.am +++ b/plugins/project-wizard/Makefile.am @@ -60,17 +60,16 @@ libanjuta_project_wizard_la_SOURCES= \ tar.c \ tar.h +gsettings_in_file = org.gnome.anjuta.plugins.project-wizard.gschema.xml.in +gsettings_SCHEMAS = $(gsettings_in_file:.xml.in=.xml) +@INTLTOOL_XML_NOMERGE_RULE@ +@GSETTINGS_RULES@ + EXTRA_DIST = \ - $(plugin_in_files) + $(plugin_in_files) \ + $(gsettings_in_file) -## templates_dir = $(datadir)/anjuta/projects -## -## install-data-local: -## mkdir -p $(DESTDIR)$(templates_dir) -## $(INSTALL_DATA) $(srcdir)/templates $(DESTDIR)$(templates_dir) -## -## uninstall-local: -## @rm -fv $(*:%=$(templates_dir)/%) -## -if test -d $(templates_dir); then rmdir $(templates_dir); fi +CLEANFILES = \ + $(gsettings_SCHEMAS) -include $(top_srcdir)/git.mk diff --git a/plugins/project-wizard/druid.c b/plugins/project-wizard/druid.c index ad92a4a60..9c6f20233 100644 --- a/plugins/project-wizard/druid.c +++ b/plugins/project-wizard/druid.c @@ -55,8 +55,11 @@ *---------------------------------------------------------------------------*/ #define ANJUTA_PROJECT_DIRECTORY_PROPERTY "AnjutaProjectDirectory" +#define DESTINATION_PROPERTY "Destination" #define USER_NAME_PROPERTY "UserName" +#define AUTHOR_PROPERTY "Author" #define EMAIL_ADDRESS_PROPERTY "EmailAddress" +#define EMAIL_PROPERTY "Email" #define INDENT_WIDTH_PROPERTY "IndentWidth" #define TAB_WIDTH_PROPERTY "TabWidth" #define USE_TABS_PROPERTY "UseTabs" @@ -64,6 +67,11 @@ /* Common editor preferences */ #define ANJUTA_PREF_SCHEMA_PREFIX "org.gnome.anjuta." +#define PROJECT_WIZARD_PREF_SCHEMA "plugins.project-wizard" + +#define LAST_DIRECTORY "project-directory" +#define LAST_USER_NAME "user" +#define LAST_EMAIL "email" /* Widget and signal name found in glade file *---------------------------------------------------------------------------*/ @@ -1127,6 +1135,75 @@ on_druid_prepare (GtkAssistant* assistant, GtkWidget *page, NPWDruid* druid) g_idle_add (on_druid_delayed_prepare, druid); } +static void +npw_druid_save_default_property (NPWDruid* druid) +{ + GSettings *settings; + const gchar *new_value; + gchar *old_value; + + + settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX PROJECT_WIZARD_PREF_SCHEMA); + + new_value = g_hash_table_lookup (druid->values, DESTINATION_PROPERTY); + if ((new_value != NULL) && (*new_value != '\0')) + { + /* Remove project directory */ + gchar *parent; + + parent = g_path_get_dirname (new_value); + if (new_value[strlen(new_value) - 1] == G_DIR_SEPARATOR) + { + gchar *dir = parent; + parent = g_path_get_dirname (dir); + g_free (dir); + } + + old_value = g_settings_get_string (settings, LAST_DIRECTORY); + if (strcmp (parent, old_value) != 0) + { + /* If the new directory is in the home directory, store a relative + * path */ + const gchar *home; + size_t len; + + home = g_get_home_dir (); + len = strlen (home); + if ((strncmp (home, parent, len) == 0) && ((parent[len] == G_DIR_SEPARATOR) || (parent[len] == '\0'))) + { + g_settings_set_string (settings, LAST_DIRECTORY, parent[len] == '\0' ? "" : parent + len + 1); + } + else + { + g_settings_set_string (settings, LAST_DIRECTORY, parent); + } + } + g_free (old_value); + g_free (parent); + } + + new_value = g_hash_table_lookup (druid->values, AUTHOR_PROPERTY); + if ((new_value != NULL) && (*new_value != '\0')) + { + old_value = g_settings_get_string (settings, LAST_USER_NAME); + if (strcmp (new_value, old_value) != 0) + { + g_settings_set_string (settings, LAST_USER_NAME, new_value); + } + g_free (old_value); + } + + new_value = g_hash_table_lookup (druid->values, EMAIL_PROPERTY); + if ((new_value != NULL) && (*new_value != '\0')) + { + old_value = g_settings_get_string (settings, LAST_EMAIL); + if (strcmp (new_value, old_value) != 0) + { + g_settings_set_string (settings, LAST_EMAIL, new_value); + } + g_free (old_value); + } +} static void on_druid_finish (GtkAssistant* assistant, NPWDruid* druid) @@ -1134,6 +1211,8 @@ on_druid_finish (GtkAssistant* assistant, NPWDruid* druid) NPWInstall* inst; GList *path; + npw_druid_save_default_property (druid); + inst = npw_install_new (druid->plugin); npw_install_set_property (inst, druid->values); npw_install_set_wizard_file (inst, npw_header_get_filename (druid->header)); @@ -1228,16 +1307,42 @@ npw_druid_add_default_property (NPWDruid* druid) gboolean flag; gint i; + /* Add default base project directory */ - g_hash_table_insert (druid->values, g_strdup (ANJUTA_PROJECT_DIRECTORY_PROPERTY), g_strdup (g_get_home_dir())); + settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX PROJECT_WIZARD_PREF_SCHEMA); + s = g_settings_get_string (settings,LAST_DIRECTORY); + if (*s == '\0') + { + s = g_strdup (g_get_home_dir()); + } + else if (!g_path_is_absolute (s)) + { + gchar *path; + + path = g_build_filename (g_get_home_dir(), s, NULL); + g_free (s); + s = path; + } + g_hash_table_insert (druid->values, g_strdup (ANJUTA_PROJECT_DIRECTORY_PROPERTY), s); /* Add user name */ - g_hash_table_insert (druid->values, g_strdup (USER_NAME_PROPERTY), g_strdup (g_get_real_name())); + s = g_settings_get_string (settings,LAST_USER_NAME); + if (*s == '\0') + { + g_free (s); + s = g_strdup (g_get_real_name()); + } + g_hash_table_insert (druid->values, g_strdup (USER_NAME_PROPERTY), s); /* Add Email address */ - /* FIXME: We need a default way for the mail */ - s = anjuta_util_get_user_mail(); + s = g_settings_get_string (settings,LAST_EMAIL); + if (*s == '\0') + { + g_free (s); + s = anjuta_util_get_user_mail(); + } g_hash_table_insert (druid->values, g_strdup (EMAIL_ADDRESS_PROPERTY), s); + g_object_unref (settings); /* Add use-tabs property */ settings = g_settings_new (ANJUTA_PREF_SCHEMA_PREFIX IANJUTA_EDITOR_PREF_SCHEMA); diff --git a/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in b/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in new file mode 100644 index 000000000..38e2e85ae --- /dev/null +++ b/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in @@ -0,0 +1,19 @@ + + + + "" + <_summary>Directory where the new projects are created by default + <_description>If empty, the user home directory is used. If the path is relative, it is relative to the home directory. + + + "" + <_summary>Default user name used in new project + <_description>If empty, the current user name is used. + + + "" + <_summary>Default email used in new project + <_description>If empty, current login and machine name is used. + + + -- 2.11.4.GIT