[Xfce4-commits] r23340 - xarchiver/branches/xarchiver-psybsd/src

Stephan Arts stephan at xfce.org
Tue Oct 10 19:47:52 UTC 2006


Author: stephan
Date: 2006-10-10 19:47:50 +0000 (Tue, 10 Oct 2006)
New Revision: 23340

Modified:
   xarchiver/branches/xarchiver-psybsd/src/archive_store.c
   xarchiver/branches/xarchiver-psybsd/src/archive_store.h
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
   xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
   xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
Log:
Implemented toolbar history.



Modified: xarchiver/branches/xarchiver-psybsd/src/archive_store.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/archive_store.c	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/archive_store.c	2006-10-10 19:47:50 UTC (rev 23340)
@@ -23,6 +23,8 @@
 #include <libxarchiver/libxarchiver.h>
 #include "archive_store.h"
 
+static LXAEntry xa_archive_store_up_entry;
+
 static void
 xa_archive_store_class_init(XAArchiveStoreClass *as_class);
 
@@ -184,10 +186,6 @@
 	as->current_entry = NULL;
 	as->props._show_icons = FALSE;
 	as->props._show_up_dir = TRUE;
-	as->up_entry.filename = "..";
-	as->up_entry.props = NULL;
-	as->up_entry.children = NULL;
-	as->up_entry.buffer = NULL;
 	as->sort_column = GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID;
 	as->sort_order = GTK_SORT_ASCENDING;
 	as->sort_list = NULL;
@@ -226,6 +224,11 @@
 		 G_TYPE_NONE,
 		 0,
 		 NULL);
+
+	xa_archive_store_up_entry.filename = "..";
+	xa_archive_store_up_entry.props = NULL;
+	xa_archive_store_up_entry.children = NULL;
+	xa_archive_store_up_entry.buffer = NULL;
 }
 
 static void
@@ -275,7 +278,7 @@
 	if(!archive)
 		return 0;
 	
-	return archive->column_number + store->props._show_icons?1:0;
+	return archive->column_number + 1;
 }
 
 static GType
@@ -289,12 +292,9 @@
 	if(!archive)
 		return G_TYPE_INVALID;
 
-	if(store->props._show_icons)
-	{
-		if(index == 0)
-			return G_TYPE_STRING;
-		index--;
-	}
+	if(index == 0)
+		return G_TYPE_STRING;
+	index--;
 
 	g_return_val_if_fail(index < archive->column_number, G_TYPE_INVALID);
 
@@ -329,7 +329,7 @@
 
 	if(index == -1)
 	{
-		entry = &store->up_entry;
+		entry = &xa_archive_store_up_entry;
 	}
 	else
 	{
@@ -386,8 +386,7 @@
 
 	g_return_if_fail(archive);
 
-	if(store->props._show_icons)
-		column--;
+	column--;
 
 	g_return_if_fail (column < (gint)archive->column_number);
 
@@ -405,25 +404,28 @@
 	{
 		g_value_init(value, G_TYPE_STRING);
 
-		if(strcmp(entry->filename, ".."))
+		if(store->props._show_icons)
 		{
-			if(store->icon_theme)
+			if(entry == &xa_archive_store_up_entry)
 			{
-				mime_base = thunar_vfs_mime_database_get_default();
-				mime_info = thunar_vfs_mime_database_get_info(mime_base, entry->mime_type);
-				icon_name = thunar_vfs_mime_info_lookup_icon_name(mime_info, store->icon_theme);
+				g_value_set_string(value, "gtk-go-up");
+			}
+			else
+			{
+				if(store->icon_theme)
+				{
+					mime_base = thunar_vfs_mime_database_get_default();
+					mime_info = thunar_vfs_mime_database_get_info(mime_base, entry->mime_type);
+					icon_name = thunar_vfs_mime_info_lookup_icon_name(mime_info, store->icon_theme);
 
-				if(gtk_icon_theme_has_icon(store->icon_theme, icon_name))
-					g_value_set_string(value, icon_name);
+					if(gtk_icon_theme_has_icon(store->icon_theme, icon_name))
+						g_value_set_string(value, icon_name);
 
-				thunar_vfs_mime_info_unref(mime_info);
-				g_object_unref(mime_base);
+					thunar_vfs_mime_info_unref(mime_info);
+					g_object_unref(mime_base);
+				}
 			}
 		}
-		else
-		{
-			g_value_set_string(value, "gtk-go-up");
-		}
 	}
 	else if(column == 0)
 	{
@@ -507,7 +509,7 @@
 
 	if(store->props._show_up_dir && &archive->root_entry != entry)
 	{
-		entry = &store->up_entry;
+		entry = &xa_archive_store_up_entry;
 		iter->user_data3 = GINT_TO_POINTER(-1);
 	}
 	else
@@ -573,7 +575,7 @@
 
 	if(n == -1)
 	{
-		entry = &store->up_entry;
+		entry = &xa_archive_store_up_entry;
 	}
 	else
 	{
@@ -626,7 +628,7 @@
 	if(store->sort_column == sort_col_id && store->sort_order == order)
 		return;
 
-	if(store->props._show_icons && sort_col_id == 0)
+	if(sort_col_id == 0)
 		return;
 
 	store->sort_column = sort_col_id;
@@ -671,8 +673,7 @@
 	gpointer props_b = b->props;
 	gint i = 0;
 
-	if(store->props._show_icons)
-		column--;
+	column--;
 
 	if(column < 0)
 		return;
@@ -859,7 +860,7 @@
 		gtk_tree_path_append_index(path_, 0);
 
 		iter.stamp = store->stamp;
-		iter.user_data = &store->up_entry;
+		iter.user_data = &xa_archive_store_up_entry;
 		iter.user_data2 = entry;
 		iter.user_data3 = GINT_TO_POINTER(-1);
 
@@ -956,8 +957,8 @@
 
 	xa_archive_store_sort(store);
 
+	xa_archive_store_refresh(store, prev_size);
 	g_signal_emit(store, xa_archive_store_signals[0], 0,NULL);
-	xa_archive_store_refresh(store, prev_size);
 }
 
 void
@@ -984,8 +985,8 @@
 
 	xa_archive_store_sort(store);
 
+	xa_archive_store_refresh(store, prev_size);
 	g_signal_emit(store, xa_archive_store_signals[0], 0,NULL);
-	xa_archive_store_refresh(store, prev_size);
 }
 
 void
@@ -1007,7 +1008,8 @@
 
 		if(store->props._show_up_dir && &store->archive->root_entry != entry)
 			prev_size++;
-
+		
+		g_slist_free(store->current_entry);
 	}
 
 	for(i = prev_size - 1; i >= 0; i--)
@@ -1107,10 +1109,11 @@
 	if(!i)
 		return NULL;
 
-	if(i==1)
+//	if(i==1)
 		i++;
 	
 	buf = g_new(gchar*, i);
+	buf[0] = "";
 	i--;
 	buf[i] = NULL;
 
@@ -1124,6 +1127,8 @@
 	}
 
 	i--;
+	buf[i] = lastfile;
+
 	iter = iter->next;
 	if(iter)
 	{
@@ -1163,22 +1168,35 @@
 	return g_strdup(((LXAEntry*)store->current_entry->data)->filename);
 }
 
-gint
+gboolean
 xa_archive_store_set_pwd(XAArchiveStore *store, gchar *path)
 {
+	gint result = xa_archive_store_set_pwd_silent(store, path);
+
+	g_signal_emit(store, xa_archive_store_signals[0], 0,NULL);
+	return result;
+}
+
+gboolean
+xa_archive_store_set_pwd_silent(XAArchiveStore *store, gchar *path)
+{
 	g_return_val_if_fail(store, -1);
 
 	if(!store->archive)
-		return -1;
+		return FALSE;
 
-	gchar **buf = g_strsplit(path, "/", 0);
+	gchar **buf = g_strsplit_set(path, "/\n", -1);
 	gchar **iter = buf;
 	LXAEntry *entry = &store->archive->root_entry;
-	GSList *stack = NULL;
+	GSList *stack = g_slist_prepend(NULL, entry);
+	gint prev_size = lxa_entry_children_length(((LXAEntry*)store->current_entry->data));
 
-	while(iter)
+	if(store->props._show_up_dir && &store->archive->root_entry != store->current_entry->data)
+		prev_size++;
+
+	while(*iter)
 	{
-		if(*iter && iter[0])
+		if((*iter)[0])
 		{
 			entry = lxa_entry_get_child(entry, *iter);
 			if(!entry)
@@ -1197,8 +1215,15 @@
 	g_slist_free(store->current_entry);
 	store->current_entry = stack;
 
-	g_signal_emit(store, xa_archive_store_signals[0], 0,NULL);
+	xa_archive_store_refresh(store, prev_size);
 	
-	return 0;
+	return TRUE;
 }
 
+void
+xa_archive_store_set_icon_theme(XAArchiveStore *store, GtkIconTheme *icon_theme)
+{
+	if(store)
+		store->icon_theme = icon_theme;
+}
+

Modified: xarchiver/branches/xarchiver-psybsd/src/archive_store.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/archive_store.h	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/archive_store.h	2006-10-10 19:47:50 UTC (rev 23340)
@@ -46,7 +46,6 @@
 	gint stamp;
 	LXAArchive *archive;
 	GSList *current_entry;
-	LXAEntry up_entry;
 	gint sort_column;
 	GtkSortType sort_order;
 	LXAEntry **sort_list;
@@ -81,7 +80,11 @@
 xa_archive_store_get_pwd_list(XAArchiveStore *store);
 gchar *
 xa_archive_store_get_basename(XAArchiveStore *store);
-gint
+gboolean
 xa_archive_store_set_pwd(XAArchiveStore *store, gchar *path);
+gboolean
+xa_archive_store_set_pwd_silent(XAArchiveStore *store, gchar *path);
+void
+xa_archive_store_set_icon_theme(XAArchiveStore *store, GtkIconTheme *icon_theme);
 
 #endif /* __XARCHIVER_ARCHIVE_STORE_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-10-10 19:47:50 UTC (rev 23340)
@@ -253,7 +253,7 @@
 
 	g_signal_connect(G_OBJECT(window->toolbar.tool_item_stop), "clicked", G_CALLBACK(cb_xa_main_stop_archive), window);
 
-	/*window->navigationbar = xa_tool_bar_new(NULL);*/
+/*	window->navigationbar = xa_tool_bar_new(NULL); */
 
 /* main view */
 	window->scrollwindow = gtk_scrolled_window_new(NULL, NULL);
@@ -287,6 +287,11 @@
 	gtk_widget_show_all(window->statusbar);
 
 	gtk_container_add(GTK_CONTAINER(window), main_vbox);
+
+	/* archive model */
+	window->treemodel = xa_archive_store_new(NULL, TRUE, TRUE, window->icon_theme);
+	xa_archive_store_connect_treeview(XA_ARCHIVE_STORE(window->treemodel), GTK_TREE_VIEW(window->treeview));
+	gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(window->treemodel));
 }
 
 GtkWidget *
@@ -306,6 +311,8 @@
 
 	gtk_window_set_icon(GTK_WINDOW(window), icon);
 
+	xa_archive_store_set_icon_theme(XA_ARCHIVE_STORE(XA_MAIN_WINDOW(window)->treemodel), icon_theme);
+
 	return window;
 }
 
@@ -468,8 +475,6 @@
 			gtk_dialog_run(GTK_DIALOG(dialog));
 		}
 
-
-
 		gtk_widget_destroy (GTK_WIDGET (dialog) );
 	}
 
@@ -684,7 +689,7 @@
 {
 	GtkCellRenderer *renderer = NULL;
 	GtkTreeViewColumn *column = NULL;
-	GtkTreeModel *liststore = NULL;
+	GtkTreeModel *liststore = window->treemodel;
 	LXAArchive *archive = window->lp_xa_archive;
 	gint x = 0;
 	GList *columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->treeview));
@@ -696,69 +701,39 @@
 	}
 	g_list_free(columns);
 
-	if(window->props._show_icons)
-	{
-		liststore = xa_archive_store_new(archive, TRUE, TRUE, window->icon_theme);
-/*		liststore = xa_archive_tree_store_new(archive, TRUE, show_only_filenames, FALSE, window->icon_theme); */
+	column = gtk_tree_view_column_new();
+	renderer = gtk_cell_renderer_pixbuf_new();
+	gtk_tree_view_column_pack_start(column, renderer, FALSE);
+	gtk_tree_view_column_set_attributes(column, renderer, "icon-name", 0, NULL);
 
+	renderer = gtk_cell_renderer_text_new();
+	gtk_tree_view_column_pack_start(column, renderer, TRUE);
+	gtk_tree_view_column_set_attributes(column, renderer, "text", 1, NULL);
 
-		column = gtk_tree_view_column_new();
-		renderer = gtk_cell_renderer_pixbuf_new();
-		gtk_tree_view_column_pack_start(column, renderer, FALSE);
-		gtk_tree_view_column_set_attributes(column, renderer, "icon-name", 0, NULL);
+	gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+	gtk_tree_view_column_set_sort_column_id(column, 1);
+	gtk_tree_view_column_set_title(column, archive->column_names[0]);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
 
-		renderer = gtk_cell_renderer_text_new();
-		gtk_tree_view_column_pack_start(column, renderer, TRUE);
-		gtk_tree_view_column_set_attributes(column, renderer, "text", 1, NULL);
-
-		gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-		gtk_tree_view_column_set_sort_column_id(column, 1);
-		gtk_tree_view_column_set_title(column, archive->column_names[0]);
-		gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
-
-		if(!show_only_filenames)
-		{
-			for(x = 1; x < archive->column_number; x++)
-			{
-				switch(archive->column_types[x])
-				{
-					case(G_TYPE_STRING):
-					case(G_TYPE_UINT64):
-						renderer = gtk_cell_renderer_text_new();
-						column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x+1, NULL);
-						break;
-				}
-				gtk_tree_view_column_set_resizable(column, TRUE);
-				gtk_tree_view_column_set_sort_column_id(column, x+1);
-				gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
-			}
-		}
-		gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->treeview), 1);
-	} else
+	if(!show_only_filenames)
 	{
-		liststore = xa_archive_store_new(archive, FALSE, TRUE, window->icon_theme);
-/*		liststore = xa_archive_tree_store_new(archive, FALSE, FALSE, FALSE, window->icon_theme); */
-		for(x = 0; x < archive->column_number; x++)
+		for(x = 1; x < archive->column_number; x++)
 		{
 			switch(archive->column_types[x])
 			{
 				case(G_TYPE_STRING):
 				case(G_TYPE_UINT64):
 					renderer = gtk_cell_renderer_text_new();
-					column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x, NULL);
+					column = gtk_tree_view_column_new_with_attributes(archive->column_names[x], renderer, "text", x+1, NULL);
 					break;
 			}
 			gtk_tree_view_column_set_resizable(column, TRUE);
-			gtk_tree_view_column_set_sort_column_id(column, x);
+			gtk_tree_view_column_set_sort_column_id(column, x+1);
 			gtk_tree_view_append_column(GTK_TREE_VIEW(window->treeview), column);
 		}
-		gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->treeview), 0);
 	}
-	gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(liststore));
-	window->treemodel = GTK_TREE_MODEL(liststore);
-	xa_archive_store_connect_treeview(XA_ARCHIVE_STORE(liststore), GTK_TREE_VIEW(window->treeview));
+	gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->treeview), 1);
 	xa_navigation_bar_set_store(window->navigationbar, XA_ARCHIVE_STORE(liststore));
-/*	xa_archive_tree_store_connect_treeview(XA_ARCHIVE_TREE_STORE(liststore), GTK_TREE_VIEW(window->treeview)); */
 }
 
 void

Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c	2006-10-10 19:47:50 UTC (rev 23340)
@@ -110,7 +110,26 @@
 void
 xa_navigation_bar_history_push(XANavigationBar *nav_bar, gchar *path)
 {
-	nav_bar->history = g_list_prepend(nav_bar->history, g_strdup(path));
+	nav_bar->history = g_list_insert_before(nav_bar->history, nav_bar->pwd, g_strdup(path));
+	if(!nav_bar->pwd)
+		nav_bar->pwd = nav_bar->history;
+
+	if(g_list_previous(nav_bar->pwd))
+		nav_bar->pwd = g_list_previous(nav_bar->pwd);
+	if(nav_bar->pwd)
+		nav_bar->history = nav_bar->pwd;
+
+	GList *temp_list = g_list_previous(nav_bar->pwd);
+
+	if(nav_bar->history)
+		nav_bar->history->prev = NULL;
+	if(temp_list)
+	{
+		temp_list->next = NULL;
+		temp_list = g_list_first(temp_list);
+		g_list_foreach(temp_list, (GFunc)g_free, NULL);
+		g_list_free(temp_list);
+	}
 	if(g_list_length(nav_bar->history) > nav_bar->max_history)
 	{
 		GList *last = g_list_last(nav_bar->history);
@@ -123,3 +142,37 @@
 {
 	return g_list_length(nav_bar->history);
 }
+
+gboolean
+xa_navigation_bar_history_back(XANavigationBar *nav_bar)
+{
+	if(!g_list_next(nav_bar->pwd))
+		return FALSE;
+	nav_bar->pwd = g_list_next(nav_bar->pwd);
+	xa_archive_store_set_pwd_silent(nav_bar->store, nav_bar->pwd->data);
+	return TRUE;
+}
+
+gboolean
+xa_navigation_bar_history_forward(XANavigationBar *nav_bar)
+{
+	if(!g_list_previous(nav_bar->pwd))
+		return FALSE;
+	nav_bar->pwd = g_list_previous(nav_bar->pwd);
+	xa_archive_store_set_pwd_silent(nav_bar->store, nav_bar->pwd->data);
+	return TRUE;
+}
+
+/* This *is* correct!!! */
+gboolean
+xa_navigation_bar_history_has_next(XANavigationBar *nav_bar)
+{
+	return (g_list_previous(nav_bar->pwd)?1:0);
+}
+
+/* idem */
+gboolean
+xa_navigation_bar_history_has_previous(XANavigationBar *nav_bar)
+{
+	return (g_list_next(nav_bar->pwd)?1:0);
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.h	2006-10-10 19:47:50 UTC (rev 23340)
@@ -64,6 +64,10 @@
 void       xa_navigation_bar_history_push(XANavigationBar *nav_bar, gchar *path);
 void       xa_navigation_bar_set_store(XANavigationBar *navigation_bar, XAArchiveStore *store);
 gint       xa_navigation_bar_history_get_length(XANavigationBar *nav_bar);
+gboolean   xa_navigation_bar_history_back(XANavigationBar *nav_bar);
+gboolean   xa_navigation_bar_history_forward(XANavigationBar *nav_bar);
+gboolean   xa_navigation_bar_history_has_next(XANavigationBar *nav_bar);
+gboolean   xa_navigation_bar_history_has_previous(XANavigationBar *nav_bar);
 
 G_END_DECLS
 #endif /* __XARCHIVER_NAVIGATION_BAR_H__*/

Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-10-10 16:04:09 UTC (rev 23339)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-10-10 19:47:50 UTC (rev 23340)
@@ -35,6 +35,14 @@
 static void
 cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *bar);
 
+static void
+cb_xa_tool_bar_history_back(GtkWidget *button, XAToolBar *nav_bar);
+static void
+cb_xa_tool_bar_history_forward(GtkWidget *forward_button, XAToolBar *nav_bar);
+
+static void
+cb_xa_tool_bar_up(GtkWidget *forward_button, XANavigationBar *nav_bar);
+
 GType
 xa_tool_bar_get_type ()
 {
@@ -75,15 +83,22 @@
 
 	tool_bar->back_button = gtk_tool_button_new_from_stock("gtk-go-back");
 	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->back_button, 0);
+	g_signal_connect(G_OBJECT(tool_bar->back_button), "clicked", (GCallback)cb_xa_tool_bar_history_back, XA_NAVIGATION_BAR(tool_bar));
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
 
 	tool_bar->forward_button = gtk_tool_button_new_from_stock("gtk-go-forward");
 	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->forward_button, 1);
+	g_signal_connect(G_OBJECT(tool_bar->forward_button), "clicked", (GCallback)cb_xa_tool_bar_history_forward, XA_NAVIGATION_BAR(tool_bar));
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
 
 	tool_bar->up_button = gtk_tool_button_new_from_stock("gtk-go-up");
 	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), tool_bar->up_button, 2);
+	g_signal_connect(G_OBJECT(tool_bar->up_button), "clicked", (GCallback)cb_xa_tool_bar_up, XA_NAVIGATION_BAR(tool_bar));
+	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
 
 	button = gtk_tool_button_new_from_stock("gtk-home");
 	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), button, 3);
+	gtk_widget_set_sensitive(GTK_WIDGET(button), 0);
 
 	button = gtk_separator_tool_item_new();
 	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), button, 4);
@@ -115,14 +130,11 @@
 }
 
 static void
-cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *tool_bar)
+xa_tool_bar_refresh(XAToolBar *tool_bar, gchar *path)
 {
-	gchar *path= xa_archive_store_get_pwd(store);
-	xa_navigation_bar_history_push(XA_NAVIGATION_BAR(tool_bar), path);
-	g_free(path);
+	gtk_entry_set_text(GTK_ENTRY(tool_bar->path_field), path);
 
-	GSList *path_list = xa_archive_store_get_pwd_list(store);
-	if(g_slist_length(path_list) == 1)
+	if(strlen(path) < 1 || (strlen(path) == 1 && path[0] == '/'))
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
 	else
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 1);
@@ -133,7 +145,50 @@
 	}
 	else
 	{
+		if(xa_navigation_bar_history_has_next(XA_NAVIGATION_BAR(tool_bar)))
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 1);
+		else
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
 
+		if(xa_navigation_bar_history_has_previous(XA_NAVIGATION_BAR(tool_bar)))
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 1);
+		else
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
 	}
 }
 
+static void
+cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *tool_bar)
+{
+	gchar *path= xa_archive_store_get_pwd(store);
+	xa_navigation_bar_history_push(XA_NAVIGATION_BAR(tool_bar), path);
+	xa_tool_bar_refresh(tool_bar, path);
+	g_debug("Pushing path '%s'\n", path);
+	g_free(path);
+}
+
+static void
+cb_xa_tool_bar_history_back(GtkWidget *back_button, XAToolBar *tool_bar)
+{
+	g_debug("back");
+	xa_navigation_bar_history_back(XA_NAVIGATION_BAR(tool_bar));
+	gchar *path= xa_archive_store_get_pwd(XA_NAVIGATION_BAR(tool_bar)->store);
+	xa_tool_bar_refresh(tool_bar, path);
+	g_free(path);
+}
+
+static void
+cb_xa_tool_bar_history_forward(GtkWidget *forward_button, XAToolBar *tool_bar)
+{
+	g_debug("forward");
+	xa_navigation_bar_history_forward(XA_NAVIGATION_BAR(tool_bar));
+	gchar *path= xa_archive_store_get_pwd(XA_NAVIGATION_BAR(tool_bar)->store);
+	xa_tool_bar_refresh(tool_bar, path);
+	g_free(path);
+}
+
+static void
+cb_xa_tool_bar_up(GtkWidget *forward_button, XANavigationBar *nav_bar)
+{
+	xa_archive_store_go_up(nav_bar->store);
+}



More information about the Xfce4-commits mailing list