SF.net SVN: geany-plugins:[1197] trunk/geany-plugins/treebrowser

dimitrov-adrian at users.sourceforge.net dimitrov-adrian at xxxxx
Sun Mar 21 17:40:24 UTC 2010


Revision: 1197
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1197&view=rev
Author:   dimitrov-adrian
Date:     2010-03-21 17:40:24 +0000 (Sun, 21 Mar 2010)

Log Message:
-----------
Treebrowser, some fixes and small improvements.

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

Modified: trunk/geany-plugins/treebrowser/ChangeLog
===================================================================
--- trunk/geany-plugins/treebrowser/ChangeLog	2010-03-21 13:15:32 UTC (rev 1196)
+++ trunk/geany-plugins/treebrowser/ChangeLog	2010-03-21 17:40:24 UTC (rev 1197)
@@ -3,13 +3,16 @@
 
 21-03-2010 Adrian Dimitrov 		<dimitrov.adrian at gmail.com>
 	* src/treebrowser.c
-		fix few compile warnings with glib and unused vars
-		now directory is open when it click filling for first time
+		fixed few compile warnings with glib and unused vars
+		fixed expanding, now directory is open when it click filling for first time
 		fixed possible segfault on start
 		added menu option to go up
 		fixed duplicated vbox varname now is 'sidebar_vbox'
 		added configuration dialog
-		improved externally open menu
+		fixed externally open menu
+		added option to close bars in bars
+		added options to expand/collapse all from menu
+		fixed compile error with glib < 2.12.0
 
 
 20-03-2010 	Adrian Dimitrov 	<dimitrov.adrian at gmail.com>

Modified: trunk/geany-plugins/treebrowser/src/treebrowser.c
===================================================================
--- trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-03-21 13:15:32 UTC (rev 1196)
+++ trunk/geany-plugins/treebrowser/src/treebrowser.c	2010-03-21 17:40:24 UTC (rev 1197)
@@ -23,6 +23,8 @@
 static GtkWidget 			*addressbar;
 static gchar 				*addressbar_last_address 	= NULL;
 
+static GtkWidget 			*menu_showbars;
+
 static GtkTreeViewColumn 	*treeview_column_icon, *treeview_column_text;
 static GtkCellRenderer 		*render_icon, *render_text;
 
@@ -57,6 +59,7 @@
 	TREEBROWSER_RENDER_TEXT								= 1
 };
 
+
 /* ------------------
  * PLUGIN INFO
  * ------------------ */
@@ -69,7 +72,21 @@
  * ------------------ */
 #define foreach_slist_free(node, list) for (node = list, list = NULL; g_slist_free_1(list), node != NULL; list = node, node = node->next)
 
+#if GTK_CHECK_VERSION(2, 12, 0)
+	static GList*
+	_gtk_cell_layout_get_cells(GtkTreeViewColumn *column)
+	{
+		return gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
+	}
+#else
+	static GList*
+	_gtk_cell_layout_get_cells(GtkTreeViewColumn *column)
+	{
+		return gtk_tree_view_column_get_cell_renderers(column);
+	}
+#endif
 
+
 /* ------------------
  * PROTOTYPES
  * ------------------ */
@@ -149,7 +166,7 @@
 treebrowser_browse(gchar *directory, gpointer parent, gint deep_limit)
 {
 	GtkTreeIter 	iter, *last_dir_iter = NULL;
-	gboolean 		is_dir, expanded;
+	gboolean 		is_dir;
 	gchar 			*utf8_name;
 	GDir 			*dir;
 	GSList 			*list, *node;
@@ -161,14 +178,6 @@
 
 	directory = g_strconcat(directory, G_DIR_SEPARATOR_S, NULL);
 
-	if ((parent && gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), parent)))
-		|| !gtk_tree_model_iter_has_child(GTK_TREE_MODEL(treestore), parent))
-	{
-		expanded = TRUE;
-	}
-	else
-		expanded = FALSE;
-
 	gtk_tree_store_iter_clear_nodes(parent, FALSE);
 
 	list = utils_get_file_list(directory, NULL, NULL);
@@ -219,9 +228,6 @@
 		}
 	}
 
-	if (expanded)
-		gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), parent), FALSE);
-
 }
 
 static gboolean
@@ -300,6 +306,7 @@
 	if (state) 	gtk_widget_show(sidebar_vbox_bars);
 	else 		gtk_widget_hide(sidebar_vbox_bars);
 	CONFIG_SHOW_BARS = state;
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_showbars), CONFIG_SHOW_BARS);
 }
 
 static void
@@ -480,8 +487,10 @@
 		path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter);
 		if (G_LIKELY(path != NULL))
 		{
-			column 		= gtk_tree_view_get_column(GTK_TREE_VIEW (treeview), 0);
-			renderers 	= gtk_cell_layout_get_cells(GTK_CELL_LAYOUT (column));
+			column 		= gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0);
+
+			renderers 	= _gtk_cell_layout_get_cells(column);
+
 			renderer 	= g_list_nth_data(renderers, TREEBROWSER_RENDER_TEXT);
 
 			g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL);
@@ -525,12 +534,21 @@
 	GtkTreeIter 		iter;
 	GtkTreeModel 		*model;
 	gchar 				*uri;
+	gboolean 			expanded = FALSE;
 
 	if (gtk_tree_selection_get_selected(selection, &model, &iter))
 	{
 		gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1);
 		if (g_file_test(uri, G_FILE_TEST_IS_DIR))
+		{
+			if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter)))
+				expanded = TRUE;
+
 			treebrowser_browse(uri, &iter, CONFIG_INITIAL_DIR_DEEP);
+
+			if (expanded)
+				gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter), FALSE);
+		}
 	}
 }
 
@@ -615,10 +633,10 @@
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 
-	item = gtk_check_menu_item_new_with_mnemonic(_("Show bars"));
-	gtk_container_add(GTK_CONTAINER(menu), item);
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), CONFIG_SHOW_BARS);
-	g_signal_connect(item, "activate", G_CALLBACK(on_menu_show_bars), NULL);
+	menu_showbars = gtk_check_menu_item_new_with_mnemonic(_("Show bars"));
+	gtk_container_add(GTK_CONTAINER(menu), menu_showbars);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_showbars), CONFIG_SHOW_BARS);
+	g_signal_connect(menu_showbars, "activate", G_CALLBACK(on_menu_show_bars), NULL);
 
 	gtk_widget_show_all(menu);
 
@@ -655,6 +673,12 @@
 }
 
 static void
+on_button_hide_bars(void)
+{
+	showbars(FALSE);
+}
+
+static void
 on_addressbar_activate(GtkEntry *entry, gpointer user_data)
 {
 	gchar *directory = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
@@ -691,6 +715,7 @@
 	GtkTreeIter 	iter;
 	GtkTreeModel 	*model;
 	gchar 			*uri;
+	gboolean 		expanded = FALSE;
 
 	if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget), &model, &iter))
 	{
@@ -700,7 +725,16 @@
 		if (g_file_test(uri, G_FILE_TEST_EXISTS))
 		{
 			if (g_file_test(uri, G_FILE_TEST_IS_DIR))
+			{
+				if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter))
+					|| !gtk_tree_model_iter_has_child(GTK_TREE_MODEL(treestore), &iter))
+					expanded = TRUE;
+
 				treebrowser_browse(uri, &iter, CONFIG_INITIAL_DIR_DEEP);
+
+				if (expanded)
+					gtk_tree_view_expand_row(GTK_TREE_VIEW(treeview), gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &iter), FALSE);
+			}
 			else
 				if (CONFIG_ONE_CLICK_CHDOC)
 					document_open_file(uri, FALSE, NULL, NULL);
@@ -756,7 +790,7 @@
 	GtkTreePath 		*path_parent;
 
 	column 		= gtk_tree_view_get_column(GTK_TREE_VIEW(treeview), 0);
-	renderers 	= gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
+	renderers 	= _gtk_cell_layout_get_cells(column);
 	renderer 	= g_list_nth_data(renderers, TREEBROWSER_RENDER_TEXT);
 
 	g_object_set(G_OBJECT(renderer), "editable", FALSE, NULL);
@@ -853,6 +887,11 @@
 	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_CLOSE));
+	ui_widget_set_tooltip_text(wid, _("Hide bars"));
+	g_signal_connect(wid, "clicked", G_CALLBACK(on_button_hide_bars), NULL);
+	gtk_container_add(GTK_CONTAINER(toolbar), wid);
+
 	gtk_container_add(GTK_CONTAINER(scrollwin), 	treeview);
 	gtk_box_pack_start(GTK_BOX(sidebar_vbox_bars), 			filter, 			FALSE, TRUE,  1);
 	gtk_box_pack_start(GTK_BOX(sidebar_vbox_bars), 			addressbar, 		FALSE, TRUE,  1);
@@ -982,6 +1021,8 @@
 		data = g_key_file_to_data(config, NULL, NULL);
 		utils_write_file(CONFIG_FILE, data);
 		g_free(data);
+
+		treebrowser_chroot(addressbar_last_address);
 	}
 
 }


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