[anjuta] project-wizard: bgo #711353 - Project Wizard - Set default setting for author, email, version, and p
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] project-wizard: bgo #711353 - Project Wizard - Set default setting for author, email, version, and p
- Date: Wed, 29 Jan 2014 21:41:33 +0000 (UTC)
commit 0370dbf12718cee71ba0f32da1ec343095a72cd3
Author: Sébastien Granjoux <seb sfo free fr>
Date: Mon Jan 27 22:53:30 2014 +0100
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(-)
---
diff --git a/plugins/project-wizard/Makefile.am b/plugins/project-wizard/Makefile.am
index c91356e..f7d6b65 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 ad92a4a..9c6f202 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 0000000..38e2e85
--- /dev/null
+++ b/plugins/project-wizard/org.gnome.anjuta.plugins.project-wizard.gschema.xml.in
@@ -0,0 +1,19 @@
+<schemalist>
+ <schema id="org.gnome.anjuta.plugins.project-wizard" path="/org/gnome/anjuta/plugins/project-wizard/">
+ <key name="project-directory" type="s">
+ <default>""</default>
+ <_summary>Directory where the new projects are created by default</_summary>
+ <_description>If empty, the user home directory is used. If the path is relative, it
is relative to the home directory.</_description>
+ </key>
+ <key name="user" type="s">
+ <default>""</default>
+ <_summary>Default user name used in new project</_summary>
+ <_description>If empty, the current user name is used.</_description>
+ </key>
+ <key name="email" type="s">
+ <default>""</default>
+ <_summary>Default email used in new project</_summary>
+ <_description>If empty, current login and machine name is used.</_description>
+ </key>
+ </schema>
+</schemalist>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]