SF.net SVN: geany-plugins:[1303] trunk/geany-plugins/treebrowser/src/ treebrowser.c

dimitrov-adrian at users.sourceforge.net dimitrov-adrian at xxxxx
Sun Apr 25 17:30:41 UTC 2010


Revision: 1303
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1303&view=rev
Author:   dimitrov-adrian
Date:     2010-04-25 17:30:41 +0000 (Sun, 25 Apr 2010)

Log Message:
-----------
Treebrowser: bookmark view tweaks

Modified Paths:
--------------
    trunk/geany-plugins/treebrowser/src/treebrowser.c

Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c
===================================================================
--- trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-04-25 16:05:32 UTC (rev 1302)
+++ trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-04-25 17:30:41 UTC (rev 1303)
@@ -28,6 +28,7 @@
 static GtkWidget 			*addressbar;
 static gchar 				*addressbar_last_address 	= NULL;
 
+static GtkTreeIter 			bookmarks_iter;
 static GtkTreeViewColumn 	*treeview_column_icon, *treeview_column_text;
 static GtkCellRenderer 		*render_icon, *render_text;
 
@@ -330,17 +331,32 @@
 	GError 		*error = NULL;
 	gchar 		*contents, *path_full;
 	gchar 		**lines, **line;
-	GtkTreeIter iter_bookmark, iter;
+	GtkTreeIter iter;
+	gboolean 	expanded = FALSE;
 
 	bookmarks = g_build_filename (g_get_home_dir(), ".gtk-bookmarks", NULL);
-	if (g_file_get_contents (bookmarks, &contents, NULL, &error))
+	if (g_file_get_contents(bookmarks, &contents, NULL, &error))
 	{
-		gtk_tree_store_prepend(treestore, &iter_bookmark, NULL);
-		gtk_tree_store_set(treestore, &iter_bookmark,
-										TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_HOME,
-										TREEBROWSER_COLUMN_NAME, 	_("Bookmarks"),
-										TREEBROWSER_COLUMN_URI, 	NULL,
-										-1);
+		if (gtk_tree_store_iter_is_valid(treestore, &bookmarks_iter))
+		{
+			expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter));
+			gtk_tree_store_iter_clear_nodes(&bookmarks_iter, FALSE);
+		}
+		else
+		{
+			gtk_tree_store_prepend(treestore, &iter, NULL);
+			gtk_tree_store_set(treestore, &iter,
+											TREEBROWSER_COLUMN_ICON, 	NULL,
+											TREEBROWSER_COLUMN_NAME, 	"--------------------",
+											TREEBROWSER_COLUMN_URI, 	FALSE,
+											-1);
+			gtk_tree_store_prepend(treestore, &bookmarks_iter, NULL);
+			gtk_tree_store_set(treestore, &bookmarks_iter,
+											TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_HOME,
+											TREEBROWSER_COLUMN_NAME, 	_("Bookmarks"),
+											TREEBROWSER_COLUMN_URI, 	FALSE,
+											-1);
+		}
 		lines = g_strsplit (contents, "\n", 0);
 		for (line = lines; *line; ++line)
 		{
@@ -359,19 +375,25 @@
 			}
 			if (path_full = g_filename_from_uri(*line, NULL, NULL))
 			{
-				gtk_tree_store_append(treestore, &iter, &iter_bookmark);
-				gtk_tree_store_set(treestore, &iter,
-											TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_HOME,
-											TREEBROWSER_COLUMN_NAME, 	g_basename(path_full),
-											TREEBROWSER_COLUMN_URI, 	path_full,
-											-1);
+				if (g_file_test(path_full, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
+				{
+					gtk_tree_store_append(treestore, &iter, &bookmarks_iter);
+					gtk_tree_store_set(treestore, &iter,
+												TREEBROWSER_COLUMN_ICON, 	GTK_STOCK_DIRECTORY,
+												TREEBROWSER_COLUMN_NAME, 	g_basename(path_full),
+												TREEBROWSER_COLUMN_URI, 	path_full,
+												-1);
+				}
 			}
 		}
-		g_strfreev (lines);
-		g_free (contents);
+		g_strfreev(lines);
+		g_free(contents);
 	}
 	else
 		g_error_free(error);
+
+	if (expanded)
+		gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &bookmarks_iter), FALSE);
 }
 
 static gboolean
@@ -732,10 +754,10 @@
 static GtkWidget*
 create_popup_menu(gchar *name, gchar *uri)
 {
-	GtkWidget *item, *menu;
 	gboolean is_exists 		= g_file_test(uri, G_FILE_TEST_EXISTS);
 	gboolean is_dir 		= is_exists ? g_file_test(uri, G_FILE_TEST_IS_DIR) : FALSE;
 	gboolean is_document 	= document_find_by_filename(uri) != NULL ? TRUE : FALSE;
+	GtkWidget *item, *menu;
 
 	menu = gtk_menu_new();
 
@@ -910,18 +932,17 @@
 	gchar 			*name = "", *uri = "";
 
 	if (gtk_tree_selection_get_selected(selection, &model, &iter))
-	{
 		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
 							TREEBROWSER_COLUMN_NAME, &name,
 							TREEBROWSER_COLUMN_URI, &uri,
 							-1);
-	}
 
 	if (event->button == 3)
 	{
 		gtk_menu_popup(GTK_MENU(create_popup_menu(name, uri)), NULL, NULL, NULL, NULL, event->button, event->time);
 		return TRUE;
 	}
+
 	return FALSE;
 }
 
@@ -937,6 +958,9 @@
 		gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
 							TREEBROWSER_COLUMN_URI, &uri,
 							-1);
+		if (uri == FALSE)
+			return;
+
 		if (g_file_test(uri, G_FILE_TEST_EXISTS))
 		{
 			if (g_file_test(uri, G_FILE_TEST_IS_DIR))
@@ -960,10 +984,11 @@
 	gchar 			*uri;
 
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path);
-	gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter,
-							TREEBROWSER_COLUMN_URI, &uri,
-							-1);
+	gtk_tree_model_get(GTK_TREE_MODEL(treestore), &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 
+	if (uri == FALSE)
+		return;
+
 	if (g_file_test (uri, G_FILE_TEST_IS_DIR))
 		if (CONFIG_CHROOT_ON_DCLICK)
 			treebrowser_chroot(uri);
@@ -981,12 +1006,13 @@
 {
 	gchar *uri;
 
+	gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter, TREEBROWSER_COLUMN_URI, &uri, -1);
+	if (uri == FALSE)
+		return;
+
 	if (flag_on_expand_refresh == FALSE && CONFIG_ON_EXPAND_REFRESH == TRUE)
 	{
 		flag_on_expand_refresh = TRUE;
-		gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter,
-							TREEBROWSER_COLUMN_URI, &uri,
-							-1);
 		treebrowser_browse(uri, iter, CONFIG_INITIAL_DIR_DEEP);
 		gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), path, FALSE);
 		flag_on_expand_refresh = FALSE;
@@ -998,6 +1024,11 @@
 static void
 on_treeview_row_collapsed(GtkWidget *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data)
 {
+	gchar *uri;
+	gtk_tree_model_get(GTK_TREE_MODEL(treestore), iter, TREEBROWSER_COLUMN_URI, &uri, -1);
+	if (uri == FALSE)
+		return;
+
 	gtk_tree_store_set(treestore, iter, TREEBROWSER_COLUMN_ICON, GTK_STOCK_DIRECTORY, -1);
 }
 
@@ -1148,7 +1179,7 @@
 	g_signal_connect(wid, "clicked", G_CALLBACK(treebrowser_track_current), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), wid);
 
-	wid = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_HOME));
+	wid = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_ABOUT));
 	ui_widget_set_tooltip_text(wid, _("Bookmarks"));
 	g_signal_connect(wid, "clicked", G_CALLBACK(treebrowser_load_bookmarks), NULL);
 	gtk_container_add(GTK_CONTAINER(toolbar), wid);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list