Author: colossus
Date: 2007-10-29 12:09:16 +0000 (Mon, 29 Oct 2007)
New Revision: 26215

Modified:
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/window.c
Log:
Fixed sg faults with back button.


Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c       2007-10-28 22:18:37 UTC (rev 26214)
+++ xarchiver/trunk/src/archive.c       2007-10-29 12:09:16 UTC (rev 26215)
@@ -450,6 +450,11 @@
        {
                entry = archive->root_entry->child;
                gtk_entry_set_text(GTK_ENTRY(location_entry),"\0");
+               if (archive->location_entry_path != NULL)
+               {
+                       g_free(archive->location_entry_path);
+                       archive->location_entry_path = NULL;
+               }
                //gtk_widget_set_sensitive(back_button,FALSE);
                gtk_widget_set_sensitive(up_button,FALSE);
                gtk_widget_set_sensitive(home_button,FALSE);

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h       2007-10-28 22:18:37 UTC (rev 26214)
+++ xarchiver/trunk/src/archive.h       2007-10-29 12:09:16 UTC (rev 26215)
@@ -70,8 +70,8 @@
        XArchiveStatus status;
        XEntry *root_entry;
        XEntry *entry;
-       GList *history;
-       GList *present;
+       GSList *back;
+       GSList *forward;
        gchar *path;
        gchar *escaped_path;
        gchar *tmp;

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c     2007-10-28 22:18:37 UTC (rev 26214)
+++ xarchiver/trunk/src/interface.c     2007-10-29 12:09:16 UTC (rev 26215)
@@ -288,6 +288,7 @@
        tmp_image = gtk_image_new_from_stock ("gtk-go-back", 
tmp_toolbar_icon_size);
        gtk_widget_show (tmp_image);
        back_button = (GtkWidget*) gtk_tool_button_new (tmp_image, _("Back"));
+       gtk_widget_set_sensitive(back_button,FALSE);
        gtk_widget_show (back_button);
        gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (back_button), FALSE);
        gtk_container_add (GTK_CONTAINER (toolbar1), back_button);
@@ -305,6 +306,7 @@
        tmp_image = gtk_image_new_from_stock ("gtk-go-forward", 
tmp_toolbar_icon_size);
        gtk_widget_show (tmp_image);
        forward_button = (GtkWidget*) gtk_tool_button_new (tmp_image, 
_("Forward"));
+       gtk_widget_set_sensitive(forward_button,FALSE);
        gtk_widget_show (forward_button);
        gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (forward_button), FALSE);
        gtk_container_add (GTK_CONTAINER (toolbar1), forward_button);
@@ -921,8 +923,19 @@
 
                /* Back */
                case 1:
-                       archive[idx]->present = archive[idx]->present->prev;
-                       
xa_update_window_with_archive_entries(archive[idx],archive[idx]->present->data);
+                       //archive[idx]->forward = 
g_slist_prepend(archive[idx]->forward,xa_find_entry_from_path(archive[idx]->root_entry,archive[idx]->location_entry_path));
+                       if (archive[idx]->back->data != NULL)
+                       {
+                               
xa_update_window_with_archive_entries(archive[idx],archive[idx]->back->data);
+                               archive[idx]->back = archive[idx]->back->next;
+                       }
+                       else
+                       {
+                               gtk_widget_set_sensitive(back_button,FALSE);
+                               
xa_update_window_with_archive_entries(archive[idx],NULL);
+                               g_slist_free(archive[idx]->back);
+                               archive[idx]->back = NULL;
+                       }
                break;
 
                /* Up */
@@ -931,16 +944,26 @@
                        if (new_entry->prev->prev == NULL)
                        {
                                
xa_update_window_with_archive_entries(archive[idx],NULL);
+                               gtk_widget_set_sensitive(back_button,FALSE);
                                gtk_widget_set_sensitive(up_button,FALSE);
                                return;
                        }
                        
xa_update_window_with_archive_entries(archive[idx],new_entry->prev);
                break;
-               
+
                /* Forward */
                case 3:
-                       archive[idx]->present = archive[idx]->present->next;
-                       
xa_update_window_with_archive_entries(archive[idx],archive[idx]->present->data);
+                       /*if (archive[idx]->forward != NULL && 
archive[idx]->forward->data != NULL)
+                       {
+                               
xa_update_window_with_archive_entries(archive[idx],archive[idx]->forward->data);
+                               archive[idx]->forward = 
archive[idx]->forward->next;
+                       }
+                       else
+                       {
+                               gtk_widget_set_sensitive(forward_button,FALSE);
+                               
//xa_update_window_with_archive_entries(archive[idx],NULL);
+                               //g_slist_free(archive[idx]->forward);
+                       }*/
                break;
        }
 }

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c        2007-10-28 22:18:37 UTC (rev 26214)
+++ xarchiver/trunk/src/window.c        2007-10-29 12:09:16 UTC (rev 26215)
@@ -2053,16 +2053,13 @@
        {
                gtk_widget_set_sensitive(up_button,TRUE);
                gtk_widget_set_sensitive(home_button,TRUE);
+               gtk_widget_set_sensitive(back_button,TRUE);
+
+               if (archive[idx]->location_entry_path != NULL)
+                       archive[idx]->back = 
g_slist_prepend(archive[idx]->back,xa_find_entry_from_path(archive[idx]->root_entry,archive[idx]->location_entry_path));
+               /* Put NULL so to display the root entry */
+               else
+                       archive[idx]->back = 
g_slist_prepend(archive[idx]->back,NULL);
        }
-       if (archive[idx]->location_entry_path != NULL)
-       {
-               archive[idx]->history = 
g_list_append(archive[idx]->history,xa_find_entry_from_path(archive[idx]->root_entry,archive[idx]->location_entry_path));
-               archive[idx]->present = g_list_last(archive[idx]->history);
-       }
-       else
-       {
-               archive[idx]->history = 
g_list_append(archive[idx]->history,archive[idx]->root_entry);
-               archive[idx]->present = g_list_last(archive[idx]->history);
-       }
        xa_update_window_with_archive_entries(archive[idx],entry);
 }

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to