[Xfce4-commits] r25109 - in squeeze/trunk: libsqueeze src

Peter de Ridder peter at xfce.org
Sun Mar 4 16:23:21 CET 2007


Author: peter
Date: 2007-03-04 15:23:21 +0000 (Sun, 04 Mar 2007)
New Revision: 25109

Modified:
   squeeze/trunk/libsqueeze/archive-iter.c
   squeeze/trunk/src/archive_store.c
   squeeze/trunk/src/archive_store.h
   squeeze/trunk/src/main_window.c
   squeeze/trunk/src/navigation_bar.c
   squeeze/trunk/src/navigation_bar.h
   squeeze/trunk/src/notebook.c
   squeeze/trunk/src/notebook.h
   squeeze/trunk/src/path_bar.c
   squeeze/trunk/src/path_bar.h
   squeeze/trunk/src/tool_bar.c
Log:
archive store uses archiveiter on the outside now too


Modified: squeeze/trunk/libsqueeze/archive-iter.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-iter.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/libsqueeze/archive-iter.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -466,7 +466,7 @@
 		back_iter = g_slist_next(back_iter);
 		if(!back_iter)
 			break;
-		if(!lsq_archive_entry_get_child(parent->entry, ((LSQArchiveIter*)back_iter->data)->entry->filename))
+		if(!lsq_archive_entry_get_child(parent->entry, lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry)))
 		{
 			g_slist_free(back_stack);
 			return FALSE;
@@ -505,7 +505,7 @@
 		back_iter = g_slist_next(back_iter);
 		if(!back_iter)
 			break;
-		if(!lsq_archive_entry_get_child(parent->entry, iter->entry->filename))
+		if(!lsq_archive_entry_get_child(parent->entry, lsq_archive_entry_get_filename(((LSQArchiveIter*)back_iter->data)->entry)))
 		{
 			iter = parent;
 			break;
@@ -621,7 +621,7 @@
 		iter = iter->parent;
 	}
 
-	gboolean result = lsq_archive_entry_remove_child(iter->entry, prev_iter->entry->filename);
+	gboolean result = lsq_archive_entry_remove_child(iter->entry, lsq_archive_entry_get_filename(prev_iter->entry));
 	if(result && !lsq_archive_iter_pool_find_iter(prev_iter->archive->pool, prev_iter->entry, NULL, NULL))
 	{
 		lsq_archive_entry_free(prev_iter->archive, prev_iter->entry);
@@ -631,7 +631,7 @@
 guint
 lsq_archive_iter_get_depth(const LSQArchiveIter *iter)
 {
-#ifdef debug
+#ifdef DEBUG
 	g_return_val_if_fail(iter, 0);
 #endif
 	guint depth = 0;
@@ -643,7 +643,7 @@
 gchar*
 lsq_archive_iter_get_path(const LSQArchiveIter *iter)
 {
-#ifdef debug
+#ifdef DEBUG
 	g_return_val_if_fail(iter, NULL);
 #endif
 	const gchar **list;
@@ -679,7 +679,7 @@
 const gchar*
 lsq_archive_iter_get_filename(const LSQArchiveIter *iter)
 {
-#ifdef debug
+#ifdef DEBUG
 	g_return_val_if_fail(iter, NULL);
 #endif
 	return lsq_archive_entry_get_filename(iter->entry);
@@ -688,7 +688,7 @@
 const gchar*
 lsq_archive_iter_get_mime(const LSQArchiveIter *iter)
 {
-#ifdef debug
+#ifdef DEBUG
 	g_return_val_if_fail(iter, FALSE);
 #endif
 	return lsq_archive_entry_get_mimetype(iter->entry);
@@ -697,7 +697,7 @@
 gboolean
 lsq_archive_iter_get_prop_value(const LSQArchiveIter *iter, guint n, GValue *value)
 {
-#ifdef debug
+#ifdef DEBUG
 	g_return_val_if_fail(iter, FALSE);
 	g_return_val_if_fail(n < lsq_archive_n_entry_properties(iter->archive), FALSE);
 #endif
@@ -943,7 +943,7 @@
 		entry = archive->root_entry;
 	}
 
-	gboolean result = lsq_archive_entry_remove_child(entry, ((LSQArchiveEntry*)prev_iter->data)->filename);
+	gboolean result = lsq_archive_entry_remove_child(entry, lsq_archive_entry_get_filename((LSQArchiveEntry*)prev_iter->data));
 	if(result && !lsq_archive_iter_pool_find_iter(archive->pool, prev_iter->data, NULL, NULL))
 	{
 		lsq_archive_entry_free(archive, entry);

Modified: squeeze/trunk/src/archive_store.c
===================================================================
--- squeeze/trunk/src/archive_store.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/archive_store.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -45,7 +45,8 @@
 
 /* properties */
 enum {
-	SQ_ARCHIVE_STORE_SHOW_ICONS = 1, 
+	SQ_ARCHIVE_STORE_SHOW_FULL_PATH = 1, 
+	SQ_ARCHIVE_STORE_SHOW_ICONS, 
 	SQ_ARCHIVE_STORE_SHOW_UP_DIR,
 	SQ_ARCHIVE_STORE_SORT_FOLDERS_FIRST,
 	SQ_ARCHIVE_STORE_SORT_CASE_SENSITIVE
@@ -222,6 +223,7 @@
 	as->sort_order = GTK_SORT_ASCENDING;
 	as->sort_list = NULL;
 	as->icon_theme = NULL;
+	as->props._show_full_path = 0;
 	as->props._show_icons = 0;
 	as->props._show_up_dir = 1;
 	as->props._sort_folders_first = 1;
@@ -244,6 +246,13 @@
 
 	parent_class = gtk_type_class (G_TYPE_OBJECT);
 
+	pspec = g_param_spec_boolean("show-full-path",
+		_("Show full path"),
+		_("Show the full path strings for each entry"),
+		FALSE,
+		G_PARAM_READWRITE);
+	g_object_class_install_property(object_class, SQ_ARCHIVE_STORE_SHOW_ICONS, pspec);
+
 	pspec = g_param_spec_boolean("show-icons",
 		_("Show mime icons"),
 		_("Show the mime type icons for each entry"),
@@ -278,9 +287,10 @@
 		 0,
 		 NULL,
 		 NULL,
-		 g_cclosure_marshal_VOID__VOID,
+		 g_cclosure_marshal_VOID__POINTER,
 		 G_TYPE_NONE,
-		 0, 
+		 1, 
+		 G_TYPE_POINTER,
 		 NULL);
 
 	sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_NEW_ARCHIVE] = g_signal_new("sq-new-archive",
@@ -313,6 +323,9 @@
 	SQArchiveStore *store = SQ_ARCHIVE_STORE(object);
 	switch(prop_id)
 	{
+		case SQ_ARCHIVE_STORE_SHOW_FULL_PATH:
+			sq_archive_store_set_show_full_path(store, g_value_get_boolean(value));
+			break;
 		case SQ_ARCHIVE_STORE_SHOW_ICONS:
 			sq_archive_store_set_show_icons(store, g_value_get_boolean(value));
 			break;
@@ -337,6 +350,9 @@
 {
 	switch(prop_id)
 	{
+		case SQ_ARCHIVE_STORE_SHOW_FULL_PATH:
+			g_value_set_boolean(value, SQ_ARCHIVE_STORE(object)->props._show_full_path?TRUE:FALSE);
+			break;
 		case SQ_ARCHIVE_STORE_SHOW_ICONS:
 			g_value_set_boolean(value, SQ_ARCHIVE_STORE(object)->props._show_icons?TRUE:FALSE);
 			break;
@@ -496,7 +512,12 @@
 		}
 		else
 		{
-			if(column < (gint)lsq_archive_n_entry_properties(archive))
+			if(store->props._show_full_path && column == LSQ_ARCHIVE_PROP_FILENAME)
+			{
+				g_value_init(value, G_TYPE_STRING);
+				g_value_take_string(value, lsq_archive_iter_get_path(entry));
+			}
+			else if(column < (gint)lsq_archive_n_entry_properties(archive))
 				lsq_archive_iter_get_prop_value(entry, column, value);
 			/* what if it isn't utf-8 */
 			if(G_VALUE_HOLDS_STRING(value) && g_value_get_string(value) && !g_utf8_validate(g_value_get_string(value), -1, NULL))
@@ -1097,7 +1118,7 @@
 
 	sq_archive_store_sort(store);
 	sq_archive_store_refresh(store);
-	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
+	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, entry, NULL);
 }
 
 void
@@ -1121,7 +1142,7 @@
 
 	sq_archive_store_sort(store);
 	sq_archive_store_refresh(store);
-	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
+	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, entry, NULL);
 }
 
 void
@@ -1233,7 +1254,7 @@
 	/* g_signal_connect(store->archive, "lsq_path_changed", G_CALLBACK(cb_sq_archive_store_archive_path_changed), store); */
 }
 
-gchar *
+LSQArchiveIter *
 sq_archive_store_get_pwd(SQArchiveStore *store)
 {
 #ifdef DEBUG
@@ -1246,45 +1267,14 @@
 
 	LSQArchiveIter *iter = store->navigation.present->data;
 
-	return lsq_archive_iter_get_path(iter);
+	return lsq_archive_iter_ref(iter);
 }
 
-GSList *
-sq_archive_store_get_pwd_list(SQArchiveStore *store)
-{
-#ifdef DEBUG
-	g_return_val_if_fail(store, NULL);
-#endif
-
-	if(!store->navigation.present)
-		return NULL;
-
-	const gchar *basename;
-	LSQArchiveIter *child = NULL, *iter = store->navigation.present->data;
-	GSList *path = NULL;
-
-	if(!iter)
-		return NULL;
-
-	/* we don't want to include de archive rootentry */
-	while(lsq_archive_iter_has_parent(iter))
-	{
-		basename = lsq_archive_iter_get_filename(iter);
-		path = g_slist_prepend(path, g_strdup(basename));
-		iter = lsq_archive_iter_get_parent(iter);
-		if(child)
-			lsq_archive_iter_unref(child);
-		child = iter;
-	}
-	if(child)
-		lsq_archive_iter_unref(child);
-
-	return path;
-}
-
 gboolean
-sq_archive_store_set_pwd(SQArchiveStore *store, const gchar *path)
+sq_archive_store_set_pwd(SQArchiveStore *store, LSQArchiveIter *path)
 {
+	/* should check if the iter is of the current archive */
+
 	g_return_val_if_fail(store, FALSE);
 
 	if(!store->archive)
@@ -1295,18 +1285,23 @@
 	g_return_val_if_fail(store->navigation.present->data, FALSE);
 #endif
 
-	LSQArchiveIter *iter = lsq_archive_get_iter(store->archive, path);
-
-	if(lsq_archive_iter_is_directory(iter))
+	if(lsq_archive_iter_is_directory(path))
 	{
-		sq_archive_store_append_history(store, iter);
+		sq_archive_store_append_history(store, lsq_archive_iter_ref(path));
 
 		sq_archive_store_sort(store);
 		sq_archive_store_refresh(store);
 
-		g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
+		g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, path, NULL);
 		return TRUE;
 	}
+	else
+	{
+#ifdef DEBUG
+		g_debug("file activated");
+#endif
+		g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_FILE_ACTIVATED], 0, lsq_archive_iter_get_filename(path), NULL); 
+	}
 
 	return FALSE;
 }
@@ -1319,6 +1314,12 @@
 }
 
 gboolean
+sq_archive_store_get_show_full_path(SQArchiveStore *store)
+{
+	return store->props._show_full_path;
+}
+
+gboolean
 sq_archive_store_get_show_icons(SQArchiveStore *store)
 {
 	return store->props._show_icons;
@@ -1337,6 +1338,20 @@
 }
 
 void
+sq_archive_store_set_show_full_path(SQArchiveStore *store, gboolean show)
+{
+	show = show?1:0;
+
+	if(store->props._show_full_path != show)
+	{
+		store->props._show_full_path = show;
+		if(store->archive)
+			sq_archive_store_refresh(store);
+		g_object_notify(G_OBJECT(store), "show-full-path");
+	}
+}
+
+void
 sq_archive_store_set_show_icons(SQArchiveStore *store, gboolean show)
 {
 	show = show?1:0;
@@ -1424,7 +1439,7 @@
 
 	sq_archive_store_check_trailing(store);
 
-	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
+	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, store->navigation.present->data, NULL);
 }
 
 void
@@ -1447,7 +1462,7 @@
 
 	sq_archive_store_check_trailing(store);
 
-	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0,NULL);
+	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, store->navigation.present->data, NULL);
 }
 
 static void
@@ -1514,34 +1529,17 @@
 	store->navigation.trailing = lsq_archive_iter_ref(piter);
 }
 
-GSList *
+LSQArchiveIter *
 sq_archive_store_get_trailing(SQArchiveStore *store)
 {
 #ifdef DEBUG
 	g_return_val_if_fail(store, NULL);
+	g_return_val_if_fail(SQ_IS_ARCHIVE_STORE(store), NULL);
 #endif
 
-	const gchar *basename;
-	LSQArchiveIter *child = NULL, *iter = store->navigation.trailing;
-	GSList *path = NULL;
+	LSQArchiveIter *iter = store->navigation.trailing;
 
-	if(!iter)
-		return NULL;
-
-	/* we don't want to include de archive rootentry */
-	while(lsq_archive_iter_has_parent(iter))
-	{
-		basename = lsq_archive_iter_get_filename(iter);
-		path = g_slist_prepend(path, &basename);
-		iter = lsq_archive_iter_get_parent(iter);
-		if(child)
-			lsq_archive_iter_unref(child);
-		child = iter;
-	}
-	if(child)
-		lsq_archive_iter_unref(child);
-
-	return path;
+	return lsq_archive_iter_ref(iter);
 }
 
 LSQArchive *
@@ -1590,5 +1588,6 @@
 
 	sq_archive_store_sort(store);
 	sq_archive_store_refresh(store);
+	g_signal_emit(store, sq_archive_store_signals[SQ_ARCHIVE_STORE_SIGNAL_PWD_CHANGED], 0, store->navigation.present->data, NULL);
 }
 

Modified: squeeze/trunk/src/archive_store.h
===================================================================
--- squeeze/trunk/src/archive_store.h	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/archive_store.h	2007-03-04 15:23:21 UTC (rev 25109)
@@ -51,6 +51,7 @@
 	GtkIconTheme *icon_theme;
 	GtkTreeView *treeview;
 	struct {
+		guint _show_full_path :1;
 		guint _show_icons : 1;
 		guint _show_up_dir : 1;
 		guint _sort_folders_first : 1;
@@ -77,16 +78,16 @@
 void sq_archive_store_connect_treeview(SQArchiveStore *store, GtkTreeView *treeview);
 void sq_archive_store_connect_iconview(SQArchiveStore *store, GtkIconView *iconview);
 void sq_archive_store_go_up(SQArchiveStore *store);
-gchar * sq_archive_store_get_pwd(SQArchiveStore *store);
-GSList * sq_archive_store_get_pwd_list(SQArchiveStore *store);
-gchar * sq_archive_store_get_basename(SQArchiveStore *store);
-gboolean sq_archive_store_set_pwd(SQArchiveStore *store, const gchar *path);
+LSQArchiveIter * sq_archive_store_get_pwd(SQArchiveStore *store);
+gboolean sq_archive_store_set_pwd(SQArchiveStore *store, LSQArchiveIter *path);
 void sq_archive_store_set_icon_theme(SQArchiveStore *store, GtkIconTheme *icon_theme);
 
+gboolean sq_archive_store_get_show_full_path(SQArchiveStore *);
 gboolean sq_archive_store_get_show_icons(SQArchiveStore *store);
 gboolean sq_archive_store_get_sort_case_sensitive(SQArchiveStore *store);
 gboolean sq_archive_store_get_sort_folders_first(SQArchiveStore *store);
 
+void sq_archive_store_set_show_full_path(SQArchiveStore *, gboolean);
 void sq_archive_store_set_show_icons(SQArchiveStore *, gboolean);
 void sq_archive_store_set_sort_case_sensitive(SQArchiveStore *, gboolean);
 void sq_archive_store_set_sort_folders_first(SQArchiveStore *, gboolean);
@@ -99,7 +100,7 @@
 sq_archive_store_go_back(SQArchiveStore *store);
 void
 sq_archive_store_go_forward(SQArchiveStore *store);
-GSList *
+LSQArchiveIter *
 sq_archive_store_get_trailing(SQArchiveStore *store);
 
 LSQArchive *

Modified: squeeze/trunk/src/main_window.c
===================================================================
--- squeeze/trunk/src/main_window.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/main_window.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -257,9 +257,6 @@
 	const gchar   *nav_bar;
 	GSList        *list, *iter;
 	gboolean up_dir = TRUE;
-	gboolean show_icons = TRUE;
-	gboolean sort_case = TRUE;
-	gboolean sort_folders = TRUE;
 	gboolean use_tabs = TRUE;
 	gboolean show_menubar = TRUE;
 
@@ -467,9 +464,6 @@
 
 	g_object_notify(G_OBJECT(window), "navigation-style");
 
-	show_icons = sq_settings_read_bool_entry(window->settings, "ShowIcons", TRUE);
-	sort_case = sq_settings_read_bool_entry(window->settings, "SortCaseSensitive", TRUE);
-	sort_folders = sq_settings_read_bool_entry(window->settings, "SortFoldersFirst", TRUE);
 	use_tabs = sq_settings_read_bool_entry(window->settings, "UseTabs", TRUE);
 
 /* main view */
@@ -481,6 +475,12 @@
 /* menu item */
 	if(show_menubar)
 	{
+		list = sq_widget_factory_create_property_menu(window->widget_factory, G_OBJECT(window->notebook), "show-full-path");
+		for(iter = list; iter; iter = iter->next)
+		{
+			gtk_container_add(GTK_CONTAINER(window->menubar.menu_view), iter->data);
+			gtk_widget_show(iter->data);
+		}
 		list = sq_widget_factory_create_property_menu(window->widget_factory, G_OBJECT(window->notebook), "show-icons");
 		for(iter = list; iter; iter = iter->next)
 		{

Modified: squeeze/trunk/src/navigation_bar.c
===================================================================
--- squeeze/trunk/src/navigation_bar.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/navigation_bar.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -33,7 +33,7 @@
 sq_navigation_bar_dispose(GObject *object);
 
 static void
-cb_sq_navigation_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar);
+cb_sq_navigation_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter *, SQNavigationBar *bar);
 
 static void
 cb_sq_navigation_bar_new_archive(SQArchiveStore *store, SQNavigationBar *bar);
@@ -154,7 +154,7 @@
 }
 
 static void
-cb_sq_navigation_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar)
+cb_sq_navigation_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter *path, SQNavigationBar *bar)
 {
 }
 

Modified: squeeze/trunk/src/navigation_bar.h
===================================================================
--- squeeze/trunk/src/navigation_bar.h	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/navigation_bar.h	2007-03-04 15:23:21 UTC (rev 25109)
@@ -44,7 +44,7 @@
 {
 	GtkContainer parent;
 	SQArchiveStore *store;
-	void (*_cb_pwd_changed)(SQArchiveStore *, SQNavigationBar *);
+	void (*_cb_pwd_changed)(SQArchiveStore *, LSQArchiveIter *, SQNavigationBar *);
 	void (*_cb_new_archive)(SQArchiveStore *, SQNavigationBar *);
 	void (*_cb_store_set)(SQNavigationBar *);
 };

Modified: squeeze/trunk/src/notebook.c
===================================================================
--- squeeze/trunk/src/notebook.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/notebook.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -66,6 +66,7 @@
 
 enum {
 	SQ_NOTEBOOK_MULTI_TAB = 1,
+	SQ_NOTEBOOK_STORE_SHOW_FULL_PATH,
 	SQ_NOTEBOOK_STORE_SHOW_ICONS,
 	SQ_NOTEBOOK_STORE_SORT_FOLDERS_FIRST,
 	SQ_NOTEBOOK_STORE_SORT_CASE_SENSITIVE,
@@ -162,6 +163,13 @@
 		TRUE,
 		G_PARAM_READWRITE); g_object_class_install_property(object_class, SQ_NOTEBOOK_MULTI_TAB, pspec); 
 
+	pspec = g_param_spec_boolean("show-full-path",
+		_("Show full path"),
+		_("Show the full path strings for each entry"),
+		FALSE,
+		G_PARAM_READWRITE);
+	g_object_class_install_property(object_class, SQ_NOTEBOOK_STORE_SHOW_FULL_PATH, pspec);
+
 	pspec = g_param_spec_boolean("show-icons",
 		_("Show mime icons"),
 		_("Show the mime type icons for each entry"),
@@ -204,6 +212,7 @@
 
 	notebook->current_page_fix = 0;
 	notebook->props._rules_hint = sq_settings_read_bool_entry(notebook->settings, "RulesHint", FALSE);
+	notebook->props._show_full_path = sq_settings_read_bool_entry(notebook->settings, "ShowFullPath", FALSE);
 	notebook->props._show_icons = sq_settings_read_bool_entry(notebook->settings, "ShowIcons", TRUE);
 	notebook->props._sort_folders_first = sq_settings_read_bool_entry(notebook->settings, "SortFoldersFirst", TRUE);
 	notebook->props._sort_case_sensitive = sq_settings_read_bool_entry(notebook->settings, "SortCaseSensitive", TRUE);
@@ -227,6 +236,7 @@
 	if(sq_notebook->settings)
 	{
 		sq_settings_write_bool_entry(sq_notebook->settings, "RulesHint", sq_notebook->props._rules_hint);
+		sq_settings_write_bool_entry(sq_notebook->settings, "ShowFullPath", sq_notebook->props._show_full_path);
 		sq_settings_write_bool_entry(sq_notebook->settings, "ShowIcons", sq_notebook->props._show_icons);
 		sq_settings_write_bool_entry(sq_notebook->settings, "SortFoldersFirst", sq_notebook->props._sort_folders_first);
 		sq_settings_write_bool_entry(sq_notebook->settings, "SortCaseSensitive", sq_notebook->props._sort_case_sensitive);
@@ -288,6 +298,14 @@
 		case SQ_NOTEBOOK_MULTI_TAB:
 			SQ_NOTEBOOK(object)->multi_tab = g_value_get_boolean(value);		
 			break;
+		case SQ_NOTEBOOK_STORE_SHOW_FULL_PATH:
+		{
+			SQArchiveStore *store = sq_notebook_get_store(SQ_NOTEBOOK(object), SQ_NOTEBOOK(object)->current_page_fix);
+			if(store)
+				sq_archive_store_set_show_full_path(store, g_value_get_boolean(value));
+			SQ_NOTEBOOK(object)->props._show_full_path = g_value_get_boolean(value);
+			break;
+		}
 		case SQ_NOTEBOOK_STORE_SHOW_ICONS:
 		{
 			SQArchiveStore *store = sq_notebook_get_store(SQ_NOTEBOOK(object), SQ_NOTEBOOK(object)->current_page_fix);
@@ -331,6 +349,15 @@
 		case SQ_NOTEBOOK_MULTI_TAB:
 			g_value_set_boolean(value, SQ_NOTEBOOK(object)->multi_tab);
 			break;
+		case SQ_NOTEBOOK_STORE_SHOW_FULL_PATH:
+		{
+			SQArchiveStore *store = sq_notebook_get_store(SQ_NOTEBOOK(object), SQ_NOTEBOOK(object)->current_page_fix);
+			if(store)
+				g_value_set_boolean(value, sq_archive_store_get_show_full_path(store));
+			else
+				g_value_set_boolean(value, SQ_NOTEBOOK(object)->props._show_full_path);
+			break;
+		}
 		case SQ_NOTEBOOK_STORE_SHOW_ICONS:
 		{
 			SQArchiveStore *store = sq_notebook_get_store(SQ_NOTEBOOK(object), SQ_NOTEBOOK(object)->current_page_fix);
@@ -481,6 +508,7 @@
 	gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
 
 	GtkTreeModel *tree_model = sq_archive_store_new(archive, notebook->props._show_icons, notebook->props._up_dir, notebook->icon_theme);
+	sq_archive_store_set_show_full_path(SQ_ARCHIVE_STORE(tree_model), notebook->props._show_full_path);
 	sq_archive_store_set_sort_folders_first(SQ_ARCHIVE_STORE(tree_model), notebook->props._sort_folders_first);
 	sq_archive_store_set_sort_case_sensitive(SQ_ARCHIVE_STORE(tree_model), notebook->props._sort_case_sensitive);
 	g_signal_connect(G_OBJECT(tree_model), "notify", G_CALLBACK(cb_sq_notebook_notify_proxy), notebook);
@@ -678,9 +706,9 @@
 static void
 cb_notebook_file_activated(SQArchiveStore *store, gchar *filename, SQNotebook *notebook)
 {
-	gchar *pwd = sq_archive_store_get_pwd(store);
-	gchar *path = g_strconcat(pwd, filename, NULL);
-	g_signal_emit(G_OBJECT(notebook), sq_notebook_signals[SQ_NOTEBOOK_SIGNAL_FILE_ACTIVATED], 0, path, NULL);
+	//gchar *pwd = sq_archive_store_get_pwd(store);
+	//gchar *path = g_strconcat(pwd, filename, NULL);
+	//g_signal_emit(G_OBJECT(notebook), sq_notebook_signals[SQ_NOTEBOOK_SIGNAL_FILE_ACTIVATED], 0, path, NULL);
 }
 
 gboolean
@@ -747,7 +775,7 @@
 
 	GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
 	GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
-	gchar *pwd = sq_archive_store_get_pwd(SQ_ARCHIVE_STORE(store));
+	//gchar *pwd = sq_archive_store_get_pwd(SQ_ARCHIVE_STORE(store));
 	GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeview));
 	GList *rows = gtk_tree_selection_get_selected_rows(selection, &store);
 	GList *_rows = rows;
@@ -756,13 +784,13 @@
 		gtk_tree_model_get_iter(store, &iter, _rows->data);
 		gtk_tree_model_get_value(store, &iter, 1, &value);
 
-		filenames = g_slist_prepend(filenames, g_strconcat(pwd, g_value_get_string(&value), NULL));
+		//filenames = g_slist_prepend(filenames, g_strconcat(pwd, g_value_get_string(&value), NULL));
 
 		g_value_unset((GValue*)&value);
 		_rows = _rows->next;
 	}
 	g_list_free(rows);
-	g_free(pwd);
+	//g_free(pwd);
 	
 	return filenames;
 }
@@ -791,7 +819,7 @@
 
 		sq_notebook_treeview_reset_columns(sq_archive_store_get_archive(store), treeview);
 	}
-	if(strcmp(g_param_spec_get_name(pspec), "sort-folders-first") == 0 || strcmp(g_param_spec_get_name(pspec), "sort-case-sensitive") == 0)
+	if(strcmp(g_param_spec_get_name(pspec), "show-full-path") == 0 || strcmp(g_param_spec_get_name(pspec), "sort-folders-first") == 0 || strcmp(g_param_spec_get_name(pspec), "sort-case-sensitive") == 0)
 	{
 		g_object_notify(user_data, g_param_spec_get_name(pspec));
 	}

Modified: squeeze/trunk/src/notebook.h
===================================================================
--- squeeze/trunk/src/notebook.h	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/notebook.h	2007-03-04 15:23:21 UTC (rev 25109)
@@ -48,6 +48,7 @@
 	SQSettings *settings;
 	struct
 	{
+		gboolean _show_full_path;
 		gboolean _show_icons;
 		gboolean _up_dir;
 		gboolean _sort_folders_first;

Modified: squeeze/trunk/src/path_bar.c
===================================================================
--- squeeze/trunk/src/path_bar.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/path_bar.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -39,6 +39,8 @@
 #define SQ_SCROLL_LEFT 1
 #define SQ_SCROLL_RIGHT 2
 
+#define SQ_PATH_BAR_PATH_BUTTON_ITER "sq-path-bar-path-iter"
+
 static void
 sq_path_bar_class_init(SQPathBarClass *archive_class);
 
@@ -60,7 +62,7 @@
 sq_path_bar_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
 
 static void
-cb_sq_path_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar);
+cb_sq_path_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter *, SQNavigationBar *bar);
 static void
 cb_sq_path_bar_new_archive(SQArchiveStore *store, SQNavigationBar *bar);
 static void
@@ -191,6 +193,7 @@
 
 	path_bar->path_button = g_slist_prepend(NULL, path_bar->home_button);
 	path_bar->first_button = NULL;
+	path_bar->trailing = NULL;
 	path_bar->scroll_timeout = 0;
 	path_bar->scroll_dir = SQ_SCROLL_NONE;
 	path_bar->scroll_click = TRUE;
@@ -258,10 +261,13 @@
 
 	g_slist_foreach(path_bar->path_button, (GFunc)callback, callback_data);
 
-	if(path_bar->left_button)
-		(*callback)(GTK_WIDGET(path_bar->left_button), callback_data);
-	if(path_bar->right_button)
-		(*callback)(GTK_WIDGET(path_bar->right_button), callback_data);
+	if(include_internals)
+	{
+		if(path_bar->left_button)
+			(*callback)(GTK_WIDGET(path_bar->left_button), callback_data);
+		if(path_bar->right_button)
+			(*callback)(GTK_WIDGET(path_bar->right_button), callback_data);
+	}
 }
 
 static void
@@ -518,7 +524,7 @@
 {
 	SQPathBar *path_bar = SQ_PATH_BAR(bar);
 	GSList *buttons = path_bar->path_button->next;
-	GSList *path, *iter;
+	LSQArchiveIter *iter, *parent;
 	GtkRadioButton *button;
 
 	SQ_PATH_BAR(bar)->updating = TRUE;
@@ -535,98 +541,93 @@
 	path_bar->path_button->next = NULL;
 
 	gtk_widget_set_sensitive(GTK_WIDGET(path_bar->home_button), (store&&store->archive));
+	g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, NULL);
+	if(path_bar->trailing)
+		lsq_archive_iter_unref(path_bar->trailing);
 
 	if(store)
 	{
-		iter = path = sq_archive_store_get_trailing(store);
-		while(iter)
+		path_bar->trailing = iter = lsq_archive_iter_ref(sq_archive_store_get_trailing(store));
+		if(iter)
 		{
-			button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(path_bar->path_button, (const gchar*)iter->data));
-			gtk_widget_ref(GTK_WIDGET(button));
-			gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
-			path_bar->path_button = g_slist_append(path_bar->path_button, button);
+			while(lsq_archive_iter_has_parent(iter))
+			{
+				button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(path_bar->path_button, lsq_archive_iter_get_filename(iter)));
+				gtk_widget_ref(GTK_WIDGET(button));
+				gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
+				path_bar->path_button = g_slist_prepend(path_bar->path_button->next, button);
 
-			g_signal_connect(G_OBJECT(button), "clicked", (GCallback)cb_sq_path_bar_path_button_clicked, path_bar);
+				g_object_set_data(G_OBJECT(button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
+				g_signal_connect(G_OBJECT(button), "clicked", (GCallback)cb_sq_path_bar_path_button_clicked, path_bar);
 
-			gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
-			gtk_widget_show(GTK_WIDGET(button));
+				gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
+				gtk_widget_show(GTK_WIDGET(button));
 
-			g_free(iter->data);
-			iter = iter->next;
+				parent = lsq_archive_iter_get_parent(iter);
+				lsq_archive_iter_unref(iter);
+				iter = parent;
+			}
+
+			g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
+			lsq_archive_iter_unref(iter);
 		}
-		g_slist_free(path);
 	}
 
 	SQ_PATH_BAR(bar)->updating = FALSE;
 }
 
 static void
-cb_sq_path_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar)
+cb_sq_path_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter *path, SQNavigationBar *bar)
 {
 	SQPathBar *path_bar = SQ_PATH_BAR(bar);
-	GSList *path = sq_archive_store_get_pwd_list(store);
-	GSList *iter = path;
+	LSQArchiveIter *iter = sq_archive_store_get_trailing(store);
+	LSQArchiveIter *parent;
 	GSList *buttons = path_bar->path_button->next;
-	GSList *lastbutton = path_bar->path_button;
-	GtkRadioButton *button = GTK_RADIO_BUTTON(path_bar->home_button);
-	const gchar *label;
-	gint cmp = 0;
+	GtkRadioButton *button;
 
 	path_bar->updating = TRUE;
 
-	while(iter && buttons)
+	while(buttons)
 	{
-		button = GTK_RADIO_BUTTON(buttons->data);
-		label = gtk_button_get_label(GTK_BUTTON(button));
-		cmp = strcmp(label, (gchar*)iter->data);
-		if(cmp != 0)
-		{
-			/* Remove wrong trailing buttons */
-			while(buttons)
-			{
-				gtk_container_remove(GTK_CONTAINER(path_bar), GTK_WIDGET(buttons->data));
-				gtk_widget_unref(GTK_WIDGET(buttons->data));
-				buttons = buttons->next;
-			}
-			if(lastbutton)
-			{
-				g_slist_free(lastbutton->next);
-				lastbutton->next = NULL;
-			}
-			else
-			{
-				g_slist_free(path_bar->path_button);
-				path_bar->path_button = NULL;
-			}
-			break;
-		}
-
-		lastbutton = buttons;
+		gtk_container_remove(GTK_CONTAINER(path_bar), GTK_WIDGET(buttons->data));
+		gtk_widget_unref(GTK_WIDGET(buttons->data));
 		buttons = buttons->next;
-
-		g_free(iter->data);
-		iter = iter->next;
 	}
+	g_slist_free(path_bar->path_button->next);
+	path_bar->path_button->next = NULL;
 
-	while(iter)
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(path_bar->home_button), TRUE);
+	g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, NULL);
+	if(path_bar->trailing)
+		lsq_archive_iter_unref(path_bar->trailing);
+	path_bar->trailing = lsq_archive_iter_ref(iter);
+
+	if(iter)
 	{
-		button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(path_bar->path_button, (const gchar*)iter->data));
-		gtk_widget_ref(GTK_WIDGET(button));
-		gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
-		path_bar->path_button = g_slist_append(path_bar->path_button, button);
+		while(lsq_archive_iter_has_parent(iter))
+		{
+			button = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(path_bar->path_button, lsq_archive_iter_get_filename(iter)));
+			gtk_widget_ref(GTK_WIDGET(button));
+			gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
+			path_bar->path_button->next = g_slist_prepend(path_bar->path_button->next, button);
 
-		g_signal_connect(G_OBJECT(button), "clicked", (GCallback)cb_sq_path_bar_path_button_clicked, path_bar);
+			if(iter == path)
+				gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
 
-		gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
-		gtk_widget_show(GTK_WIDGET(button));
+			g_object_set_data(G_OBJECT(button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
+			g_signal_connect(G_OBJECT(button), "clicked", (GCallback)cb_sq_path_bar_path_button_clicked, path_bar);
 
-		g_free(iter->data);
-		iter = iter->next;
-	}
+			gtk_container_add(GTK_CONTAINER(path_bar), GTK_WIDGET(button));
+			gtk_widget_show(GTK_WIDGET(button));
 
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+			parent = lsq_archive_iter_get_parent(iter);
+			lsq_archive_iter_unref(iter);
+			iter = parent;
+		}
 
-	g_slist_free(path);
+		g_object_set_data(G_OBJECT(path_bar->home_button), SQ_PATH_BAR_PATH_BUTTON_ITER, iter);
+		lsq_archive_iter_unref(iter);
+	}
 
 	path_bar->first_button = g_slist_last(path_bar->path_button);
 
@@ -638,26 +639,10 @@
 {
 	if(path_bar->updating)
 		return;
-	gchar *path = g_strdup("");
-	gchar *prev = NULL;
-	const gchar *folder = NULL;
-	GSList *iter = path_bar->path_button;
 
-	while(iter->data != (gpointer)button)
-	{
-		iter = iter->next;
-		prev = path;
-		folder = gtk_button_get_label(GTK_BUTTON(iter->data));
-		if(folder[0] == '/')
-			path = g_strconcat(path, folder, NULL);
-		else
-			path = g_strconcat(path, folder, "/", NULL);
-		g_free(prev);
-	}
+	LSQArchiveIter *path = g_object_get_data(G_OBJECT(button), SQ_PATH_BAR_PATH_BUTTON_ITER);
 
 	sq_archive_store_set_pwd(SQ_NAVIGATION_BAR(path_bar)->store, path);
-
-	g_free(path);
 }
 
 static void
@@ -772,6 +757,6 @@
 	cb_sq_path_bar_new_archive(bar->store, bar);
 
 	if(bar->store)
-		cb_sq_path_bar_pwd_changed(bar->store, bar);
+		cb_sq_path_bar_pwd_changed(bar->store, sq_archive_store_get_pwd(bar->store), bar);
 }
 

Modified: squeeze/trunk/src/path_bar.h
===================================================================
--- squeeze/trunk/src/path_bar.h	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/path_bar.h	2007-03-04 15:23:21 UTC (rev 25109)
@@ -48,6 +48,7 @@
 	GtkButton *home_button;
 	GSList *path_button;
 	GSList *first_button;
+	LSQArchiveIter *trailing;
 	guint scroll_timeout;
 	guint scroll_dir;
 	gboolean scroll_click;

Modified: squeeze/trunk/src/tool_bar.c
===================================================================
--- squeeze/trunk/src/tool_bar.c	2007-03-04 15:15:21 UTC (rev 25108)
+++ squeeze/trunk/src/tool_bar.c	2007-03-04 15:23:21 UTC (rev 25109)
@@ -47,7 +47,7 @@
 sq_tool_bar_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
 
 static void
-cb_sq_tool_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar);
+cb_sq_tool_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter*, SQNavigationBar *bar);
 static void
 cb_sq_tool_bar_new_archive(SQArchiveStore *store, SQNavigationBar *bar);
 static void
@@ -193,24 +193,26 @@
 }
 
 static void
-sq_tool_bar_refresh(SQToolBar *tool_bar, gchar *path)
+sq_tool_bar_refresh(SQToolBar *tool_bar, LSQArchiveIter *path)
 {
-	gtk_entry_set_text(GTK_ENTRY(tool_bar->path_field), path);
-	gtk_editable_set_position(GTK_EDITABLE(tool_bar->path_field), -1);
-
-	/* FIXME: the part about path[0] '/' could be bugged */
-	if(strlen(path) < 1 || (strlen(path) == 1 && path[0] == '/'))
+	if(SQ_NAVIGATION_BAR(tool_bar)->store && path)
 	{
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 0);
-	}
-	else
-	{
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 1);
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 1);
-	}
-	if(SQ_NAVIGATION_BAR(tool_bar)->store)
-	{
+		gchar *text = lsq_archive_iter_get_path(path);
+		gtk_entry_set_text(GTK_ENTRY(tool_bar->path_field), text);
+		gtk_editable_set_position(GTK_EDITABLE(tool_bar->path_field), -1);
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->hbox), 1);
+		g_free(text);
+
+		if(lsq_archive_iter_has_parent(path))
+		{
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 1);
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 1);
+		}
+		else
+		{
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 0);
+		}
 		if(sq_archive_store_has_future(SQ_NAVIGATION_BAR(tool_bar)->store))
 			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 1);
 		else
@@ -225,8 +227,14 @@
 	}
 	else
 	{
+		gtk_entry_set_text(GTK_ENTRY(tool_bar->path_field), "");
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->hbox), 0);
+
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 0);
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 0);
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->refresh_button), 0);
 	}
 }
 
@@ -310,54 +318,31 @@
 }
 
 static void
-cb_sq_tool_bar_pwd_changed(SQArchiveStore *store, SQNavigationBar *bar)
+cb_sq_tool_bar_pwd_changed(SQArchiveStore *store, LSQArchiveIter *path, SQNavigationBar *bar)
 {
 	SQToolBar *tool_bar = SQ_TOOL_BAR(bar);
-	gchar *path= sq_archive_store_get_pwd(store);
-	if(!path)
-		path = g_strdup("");
 	sq_tool_bar_refresh(tool_bar, path);
-	g_free(path);
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->hbox), TRUE);
 }
 
 static void
 cb_sq_tool_bar_new_archive(SQArchiveStore *store, SQNavigationBar *bar)
 {
 	SQToolBar *tool_bar = SQ_TOOL_BAR(bar);
-
-	LSQArchive *lp_archive = sq_archive_store_get_archive(store);
-
-	if(!lp_archive)
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->hbox), TRUE);
-
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), TRUE);
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), TRUE);
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), TRUE);
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), TRUE);
-	gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->refresh_button), TRUE);
+	LSQArchiveIter *path = sq_archive_store_get_pwd(bar->store);
+	sq_tool_bar_refresh(tool_bar, path);
+	lsq_archive_iter_unref(path);
 }
 
 static void
 cb_sq_tool_bar_history_back(GtkWidget *back_button, SQToolBar *tool_bar)
 {
 	sq_archive_store_go_back(SQ_NAVIGATION_BAR(tool_bar)->store);
-	gchar *path= sq_archive_store_get_pwd(SQ_NAVIGATION_BAR(tool_bar)->store);
-	if(!path)
-		path = g_strdup("");
-	sq_tool_bar_refresh(tool_bar, path);
-	g_free(path);
 }
 
 static void
 cb_sq_tool_bar_history_forward(GtkWidget *forward_button, SQToolBar *tool_bar)
 {
 	sq_archive_store_go_forward(SQ_NAVIGATION_BAR(tool_bar)->store);
-	gchar *path= sq_archive_store_get_pwd(SQ_NAVIGATION_BAR(tool_bar)->store);
-	if(!path)
-		path = g_strdup("");
-	sq_tool_bar_refresh(tool_bar, path);
-	g_free(path);
 }
 
 static void
@@ -369,8 +354,10 @@
 static void
 cb_sq_tool_bar_home(GtkWidget *home_button, SQToolBar *tool_bar)
 {
-	/* FIXME: the part about "/" could be bugged */
-	sq_archive_store_set_pwd(SQ_NAVIGATION_BAR(tool_bar)->store, "");
+	LSQArchive *archive = sq_archive_store_get_archive(SQ_NAVIGATION_BAR(tool_bar)->store);
+	LSQArchiveIter *path = lsq_archive_get_iter(archive, NULL);
+	sq_archive_store_set_pwd(SQ_NAVIGATION_BAR(tool_bar)->store, path);
+	lsq_archive_iter_unref(path);
 }
 
 static void
@@ -384,8 +371,14 @@
 static void
 cb_sq_tool_bar_path_field_activated(GtkWidget *entry, SQToolBar *tool_bar)
 {
+	LSQArchive *archive = sq_archive_store_get_archive(SQ_NAVIGATION_BAR(tool_bar)->store);
 	const gchar *path = gtk_entry_get_text(GTK_ENTRY(entry));
-	sq_archive_store_set_pwd(SQ_ARCHIVE_STORE(SQ_NAVIGATION_BAR(tool_bar)->store), path);
+	LSQArchiveIter *iter = lsq_archive_get_iter(archive, path);
+	if(iter)
+	{
+		sq_archive_store_set_pwd(SQ_NAVIGATION_BAR(tool_bar)->store, iter);
+		lsq_archive_iter_unref(iter);
+	}
 }
 
 static void
@@ -394,15 +387,12 @@
 	SQToolBar *tool_bar = SQ_TOOL_BAR(bar);
 	if(bar->store)
 	{
-		gchar *path = sq_archive_store_get_pwd(bar->store);
-		if(!path)
-			path = g_strdup("");
+		LSQArchiveIter *path = sq_archive_store_get_pwd(bar->store);
 		sq_tool_bar_refresh(tool_bar, path);
-		g_free(path);
+		lsq_archive_iter_unref(path);
 	}
 	else
 	{
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->hbox), FALSE);
-		sq_tool_bar_refresh(tool_bar, "");
+		sq_tool_bar_refresh(tool_bar, NULL);
 	}
 }



More information about the Xfce4-commits mailing list