[geany/geany-plugins] 350f6f: Merge pull request #634 from LarsGit223/wb-base-path

Frank Lanitz git-noreply at xxxxx
Sun Oct 22 08:35:51 UTC 2017


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   GitHub <noreply at github.com>
Date:        Sun, 22 Oct 2017 08:35:51 UTC
Commit:      350f6fbf73b5cc4706b51705d9082e8d89151595
             https://github.com/geany/geany-plugins/commit/350f6fbf73b5cc4706b51705d9082e8d89151595

Log Message:
-----------
Merge pull request #634 from LarsGit223/wb-base-path

workbench: import Geany project data


Modified Paths:
--------------
    workbench/icons/16x16/Makefile.am
    workbench/icons/16x16/workbench-basedir.png
    workbench/icons/24x24/Makefile.am
    workbench/icons/24x24/workbench-basedir.png
    workbench/icons/32x32/Makefile.am
    workbench/icons/32x32/workbench-basedir.png
    workbench/icons/48x48/Makefile.am
    workbench/icons/48x48/workbench-basedir.png
    workbench/icons/scalable/Makefile.am
    workbench/icons/scalable/workbench-basedir.svg
    workbench/src/sidebar.c
    workbench/src/wb_project.c
    workbench/src/wb_project.h

Modified: workbench/icons/16x16/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2,6 +2,7 @@ iconsdir = $(datadir)/icons/hicolor/16x16
 icons_appsdir = $(iconsdir)/apps
 
 dist_icons_apps_DATA =							\
+	workbench-basedir.png						\
 	workbench-bookmark.png						\
 	workbench-dir.png							\
 	workbench-nodirs.png						\


Modified: workbench/icons/16x16/workbench-basedir.png
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: workbench/icons/24x24/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2,6 +2,7 @@ iconsdir = $(datadir)/icons/hicolor/24x24
 icons_appsdir = $(iconsdir)/apps
 
 dist_icons_apps_DATA =							\
+	workbench-basedir.png						\
 	workbench-bookmark.png						\
 	workbench-dir.png							\
 	workbench-nodirs.png						\


Modified: workbench/icons/24x24/workbench-basedir.png
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: workbench/icons/32x32/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2,6 +2,7 @@ iconsdir = $(datadir)/icons/hicolor/32x32
 icons_appsdir = $(iconsdir)/apps
 
 dist_icons_apps_DATA =							\
+	workbench-basedir.png						\
 	workbench-bookmark.png						\
 	workbench-dir.png							\
 	workbench-nodirs.png						\


Modified: workbench/icons/32x32/workbench-basedir.png
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: workbench/icons/48x48/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2,6 +2,7 @@ iconsdir = $(datadir)/icons/hicolor/48x48
 icons_appsdir = $(iconsdir)/apps
 
 dist_icons_apps_DATA =							\
+	workbench-basedir.png						\
 	workbench-bookmark.png						\
 	workbench-dir.png							\
 	workbench-nodirs.png						\


Modified: workbench/icons/48x48/workbench-basedir.png
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online


Modified: workbench/icons/scalable/Makefile.am
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -2,6 +2,7 @@ iconsdir = $(datadir)/icons/hicolor/scalable
 icons_appsdir = $(iconsdir)/apps
 
 dist_icons_apps_DATA =							\
+	workbench-basedir.svg						\
 	workbench-bookmark.svg						\
 	workbench-dir.svg							\
 	workbench-nodirs.svg						\


Modified: workbench/icons/scalable/workbench-basedir.svg
25 lines changed, 25 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg id="svg7384" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16.013" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata id="metadata90">
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title>Gnome Symbolic Icon Theme</dc:title>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <title id="title9167">Gnome Symbolic Icon Theme</title>
+ <g id="layer13" transform="translate(-562.99 -175)">
+  <g id="g5388" transform="translate(405.62 -584.9)">
+   <title id="title5390">go-home</title>
+   <g id="g5392" style="fill:#bebebe" transform="matrix(.026036 0 0 .026036 345.97 902.08)"></g>
+  </g>
+  <path id="path5414" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m565.78 180a1.0001 1.0001 0 0 0 -0.78 1v7a1.0001 1.0001 0 0 0 1 1h10a1.0001 1.0001 0 0 0 1 -1v-7a1.0001 1.0001 0 1 0 -2 0v6h-8v-6a1.0001 1.0001 0 0 0 -1.2188 -1z"/>
+  <path id="path6184" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;fill:#bebebe" d="m570.91 176a1.0001 1.0001 0 0 0 -0.5 0.1875l-7 5a1.0063 1.0063 0 1 0 1.1875 1.625l6.4-4.57 6.4062 4.5625a1.0063 1.0063 0 1 0 1.1875 -1.625l-7-5a1.0001 1.0001 0 0 0 -0.69 -0.18z"/>
+  <rect id="rect6261" style="color:#bebebe;fill:#bebebe" height="6" width="3" y="183" x="569"/>
+  <rect id="rect8452-7" style="fill:#bebebe" rx="0" ry="1" transform="scale(-1,1)" width="1" y="182" x="-579" height="1"/>
+  <rect id="rect8452-8" style="fill:#bebebe" rx="0" ry="1" transform="scale(-1,1)" width="1" y="182" x="-564" height="1"/>
+ </g>
+</svg>


Modified: workbench/src/sidebar.c
39 lines changed, 32 insertions(+), 7 deletions(-)
===================================================================
@@ -237,6 +237,7 @@ static void sidebar_insert_project_directory(WB_PROJECT *prj, WB_PROJECT_DIR *di
 
 	g_hash_table_iter_init(&iter, wb_project_dir_get_file_table(directory));
 	abs_base_dir = get_combined_path(wb_project_get_filename(prj), wb_project_dir_get_base_dir(directory));
+
 	while (g_hash_table_iter_next(&iter, &key, &value))
 	{
 		gchar *path = get_relative_path(abs_base_dir, key);
@@ -266,7 +267,7 @@ static void sidebar_insert_project_directory(WB_PROJECT *prj, WB_PROJECT_DIR *di
 static void sidebar_insert_project_directories (WB_PROJECT *project, GtkTreeIter *parent, gint *position)
 {
 	GtkTreeIter iter;
-	GIcon *icon;
+	GIcon *icon, *icon_dir, *icon_base;
 	GSList *elem = NULL, *dirs;
 
 	if (project == NULL)
@@ -277,19 +278,42 @@ static void sidebar_insert_project_directories (WB_PROJECT *project, GtkTreeIter
 	dirs = wb_project_get_directories(project);
 	if (dirs != NULL)
 	{
-		icon = g_icon_new_for_string("workbench-dir", NULL);
+		const gchar *name;
+
+		icon_dir = g_icon_new_for_string("workbench-dir", NULL);
+		icon_base = g_icon_new_for_string("workbench-basedir", NULL);
 
 		foreach_slist (elem, dirs)
 		{
+			if (wb_project_dir_get_is_prj_base_dir(elem->data) == TRUE)
+			{
+				icon = icon_base;
+				name = _("Base dir");
+			}
+			else
+			{
+				icon = icon_dir;
+				name = wb_project_dir_get_name(elem->data);
+			}
+
 			gtk_tree_store_insert_with_values(sidebar.file_store, &iter, parent, *position,
 				FILEVIEW_COLUMN_ICON, icon,
-				FILEVIEW_COLUMN_NAME, wb_project_dir_get_name(elem->data),
+				FILEVIEW_COLUMN_NAME, name,
 				FILEVIEW_COLUMN_DATA_ID, DATA_ID_DIRECTORY,
 				FILEVIEW_COLUMN_ASSIGNED_DATA_POINTER, elem->data,
 				-1);
 			(*position)++;
 			sidebar_insert_project_directory(project, elem->data, &iter);
 		}
+
+		if (icon_dir != NULL)
+		{
+			g_object_unref(icon_dir);
+		}
+		if (icon_base != NULL)
+		{
+			g_object_unref(icon_base);
+		}
 	}
 	else
 	{
@@ -301,10 +325,11 @@ static void sidebar_insert_project_directories (WB_PROJECT *project, GtkTreeIter
 			FILEVIEW_COLUMN_DATA_ID, DATA_ID_NO_DIRS,
 			-1);
 		(*position)++;
-	}
-	if (icon != NULL)
-	{
-		g_object_unref(icon);
+
+		if (icon != NULL)
+		{
+			g_object_unref(icon);
+		}
 	}
 }
 


Modified: workbench/src/wb_project.c
165 lines changed, 144 insertions(+), 21 deletions(-)
===================================================================
@@ -56,6 +56,7 @@ struct S_WB_PROJECT_DIR
 	guint file_count;
 	guint folder_count;
 	GHashTable *file_table; /* contains all file names within base_dir, maps file_name->TMSourceFile */
+	gboolean is_prj_base_dir;
 };
 
 struct S_WB_PROJECT
@@ -248,6 +249,7 @@ static WB_PROJECT_DIR *wb_project_dir_new(const gchar *utf8_base_dir)
 		offset++;
 	}
 	dir->name = g_strdup(&(dir->base_dir[offset]));
+	dir->is_prj_base_dir = FALSE;
 	return dir;
 }
 
@@ -262,6 +264,38 @@ static void wb_project_dir_collect_source_files(G_GNUC_UNUSED gchar *filename, T
 }
 
 
+/** Set "is project base dir" of a project dir.
+ *
+ * @param directory The project dir
+ * @param value     TRUE:  directory is the base dir of the project
+ *                  FALSE: directory is another dir
+ * 
+ **/
+void wb_project_dir_set_is_prj_base_dir (WB_PROJECT_DIR *directory, gboolean value)
+{
+	if (directory != NULL)
+	{
+		directory->is_prj_base_dir = value;
+	}
+}
+
+
+/** Get "is project base dir" of a project dir.
+ *
+ * @param directory The project dir
+ * @return TRUE:  directory is the base dir of the project
+ *         FALSE: directory is another dir
+ *
+ **/
+gboolean wb_project_dir_get_is_prj_base_dir (WB_PROJECT_DIR *directory)
+{
+	if (directory != NULL)
+	{
+		return directory->is_prj_base_dir;
+	}
+	return FALSE;
+}
+
 /** Get the name of a project dir.
  *
  * @param directory The project dir
@@ -999,25 +1033,44 @@ static void wb_project_save_directories (gpointer data, gpointer user_data)
 	tmp = (WB_PROJECT_ON_SAVE_USER_DATA *)user_data;
 	dir = (WB_PROJECT_DIR *)data;
 
-	g_snprintf(key, sizeof(key), "Dir%u-BaseDir", tmp->dir_count);
-	g_key_file_set_string(tmp->kf, "Workbench", key, dir->base_dir);
+	if (wb_project_dir_get_is_prj_base_dir(dir) == TRUE)
+	{
+		g_key_file_set_string(tmp->kf, "Workbench", "Prj-BaseDir", dir->base_dir);
+
+		str = g_strjoinv(";", dir->file_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", "Prj-FilePatterns", str);
+		g_free(str);
+
+		str = g_strjoinv(";", dir->ignored_dirs_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", "Prj-IgnoredDirsPatterns", str);
+		g_free(str);
+
+		str = g_strjoinv(";", dir->ignored_file_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", "Prj-IgnoredFilePatterns", str);
+		g_free(str);
+	}
+	else
+	{
+		g_snprintf(key, sizeof(key), "Dir%u-BaseDir", tmp->dir_count);
+		g_key_file_set_string(tmp->kf, "Workbench", key, dir->base_dir);
 
-	g_snprintf(key, sizeof(key), "Dir%u-FilePatterns", tmp->dir_count);
-	str = g_strjoinv(";", dir->file_patterns);
-	g_key_file_set_string(tmp->kf, "Workbench", key, str);
-	g_free(str);
+		g_snprintf(key, sizeof(key), "Dir%u-FilePatterns", tmp->dir_count);
+		str = g_strjoinv(";", dir->file_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", key, str);
+		g_free(str);
 
-	g_snprintf(key, sizeof(key), "Dir%u-IgnoredDirsPatterns", tmp->dir_count);
-	str = g_strjoinv(";", dir->ignored_dirs_patterns);
-	g_key_file_set_string(tmp->kf, "Workbench", key, str);
-	g_free(str);
+		g_snprintf(key, sizeof(key), "Dir%u-IgnoredDirsPatterns", tmp->dir_count);
+		str = g_strjoinv(";", dir->ignored_dirs_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", key, str);
+		g_free(str);
 
-	g_snprintf(key, sizeof(key), "Dir%u-IgnoredFilePatterns", tmp->dir_count);
-	str = g_strjoinv(";", dir->ignored_file_patterns);
-	g_key_file_set_string(tmp->kf, "Workbench", key, str);
-	g_free(str);
+		g_snprintf(key, sizeof(key), "Dir%u-IgnoredFilePatterns", tmp->dir_count);
+		str = g_strjoinv(";", dir->ignored_file_patterns);
+		g_key_file_set_string(tmp->kf, "Workbench", key, str);
+		g_free(str);
 
-	tmp->dir_count++;
+		tmp->dir_count++;
+	}
 }
 
 
@@ -1236,10 +1289,12 @@ gboolean wb_project_load(WB_PROJECT *prj, gchar *filename, GError **error)
 {
 	GKeyFile *kf;
 	guint	 index;
-	gchar    *contents;
-	gchar    key[100];
-	gsize    length;
+	gchar	 *contents, *str;
+	gchar	 **splitv;
+	gchar	 key[100];
+	gsize	 length;
 	gboolean success = FALSE;
+	WB_PROJECT_DIR *new_dir;
 
 	g_return_val_if_fail(prj, FALSE);
 
@@ -1259,11 +1314,44 @@ gboolean wb_project_load(WB_PROJECT *prj, gchar *filename, GError **error)
 		return FALSE;
 	}
 
+	/* Import project's base path and file patterns, if not done yet.
+	   (from Geany's standard project configuration) */
+	if (g_key_file_has_group (kf, "project")
+		&& !g_key_file_has_key(kf, "Workbench", "Prj-BaseDir", NULL))
+	{
+		gchar *base_path;
+
+		base_path = g_key_file_get_string(kf, "project", "base_path", NULL);
+		if (base_path != NULL)
+		{
+			gchar *reldirname;
+
+			/* Convert dirname to path relative to the project file */
+			reldirname = get_any_relative_path(prj->filename, base_path);
+
+			new_dir = wb_project_add_directory_int(prj, reldirname, FALSE);
+			if (new_dir != NULL)
+			{
+				wb_project_set_modified(prj, TRUE);
+				wb_project_dir_set_is_prj_base_dir(new_dir, TRUE);
+				str = g_key_file_get_string(kf, "project", "file_patterns", NULL);
+				if (str != NULL)
+				{
+					splitv = g_strsplit (str, ";", -1);
+					wb_project_dir_set_file_patterns(new_dir, splitv);
+					g_strfreev(splitv);
+				}
+				g_free(str);
+			}
+
+			g_free(reldirname);
+			g_free(base_path);
+		}
+	}
+
 	if (g_key_file_has_group (kf, "Workbench"))
 	{
-		WB_PROJECT_DIR *new_dir;
-		gchar *str;
-		gchar **splitv, **bookmarks_strings;
+		gchar **bookmarks_strings;
 
 		/* Load project bookmarks from string list */
 		bookmarks_strings = g_key_file_get_string_list (kf, "Workbench", "Bookmarks", NULL, error);
@@ -1285,6 +1373,41 @@ gboolean wb_project_load(WB_PROJECT *prj, gchar *filename, GError **error)
 			g_strfreev(bookmarks_strings);
 		}
 
+		/* Load project base dir. */
+		str = g_key_file_get_string(kf, "Workbench", "Prj-BaseDir", NULL);
+		if (str != NULL)
+		{
+			new_dir = wb_project_add_directory_int(prj, str, FALSE);
+			if (new_dir != NULL)
+			{
+				wb_project_dir_set_is_prj_base_dir(new_dir, TRUE);
+
+				str = g_key_file_get_string(kf, "Workbench", "Prj-FilePatterns", NULL);
+				if (str != NULL)
+				{
+					splitv = g_strsplit (str, ";", -1);
+					wb_project_dir_set_file_patterns(new_dir, splitv);
+				}
+				g_free(str);
+
+				str = g_key_file_get_string(kf, "Workbench", "Prj-IgnoredDirsPatterns", NULL);
+				if (str != NULL)
+				{
+					splitv = g_strsplit (str, ";", -1);
+					wb_project_dir_set_ignored_dirs_patterns(new_dir, splitv);
+				}
+				g_free(str);
+
+				str = g_key_file_get_string(kf, "Workbench", "Prj-IgnoredFilePatterns", NULL);
+				if (str != NULL)
+				{
+					splitv = g_strsplit (str, ";", -1);
+					wb_project_dir_set_ignored_file_patterns(new_dir, splitv);
+				}
+				g_free(str);
+			}
+		}
+
 		/* Load project dirs */
 		for (index = 1 ; index < 1025 ; index++)
 		{


Modified: workbench/src/wb_project.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -41,6 +41,8 @@ gboolean wb_project_file_is_included(WB_PROJECT *prj, const gchar *filename);
 void wb_project_add_single_tm_file(WB_PROJECT *prj, const gchar *filename);
 void wb_project_remove_single_tm_file(WB_PROJECT *prj, const gchar *filename);
 
+void wb_project_dir_set_is_prj_base_dir (WB_PROJECT_DIR *directory, gboolean value);
+gboolean wb_project_dir_get_is_prj_base_dir (WB_PROJECT_DIR *directory);
 const gchar *wb_project_dir_get_name (WB_PROJECT_DIR *directory);
 GHashTable *wb_project_dir_get_file_table (WB_PROJECT_DIR *directory);
 gchar *wb_project_dir_get_base_dir (WB_PROJECT_DIR *directory);



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list