[Goodies-commits] r3822 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sat Jan 19 13:48:04 CET 2008


Author: stephan
Date: 2008-01-19 12:48:04 +0000 (Sat, 19 Jan 2008)
New Revision: 3822

Modified:
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/thumbnail.c
   ristretto/trunk/src/thumbnail_bar.c
Log:
Replace one segfault by another



Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2008-01-19 11:51:10 UTC (rev 3821)
+++ ristretto/trunk/src/navigator.c	2008-01-19 12:48:04 UTC (rev 3822)
@@ -61,6 +61,7 @@
 enum
 {
     RSTTO_NAVIGATOR_SIGNAL_ENTRY_MODIFIED = 0,
+    RSTTO_NAVIGATOR_SIGNAL_ENTRY_REMOVED,
     RSTTO_NAVIGATOR_SIGNAL_NEW_ENTRY,
     RSTTO_NAVIGATOR_SIGNAL_ITER_CHANGED,
     RSTTO_NAVIGATOR_SIGNAL_REORDERED,
@@ -168,6 +169,17 @@
             1,
             G_TYPE_POINTER,
             NULL);
+    rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_ENTRY_REMOVED] = g_signal_new("entry-removed",
+            G_TYPE_FROM_CLASS(nav_class),
+            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+            0,
+            NULL,
+            NULL,
+            g_cclosure_marshal_VOID__POINTER,
+            G_TYPE_NONE,
+            1,
+            G_TYPE_POINTER,
+            NULL);
     rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_ITER_CHANGED] = g_signal_new("iter-changed",
             G_TYPE_FROM_CLASS(nav_class),
             G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
@@ -517,16 +529,20 @@
         {
             navigator->old_position = rstto_navigator_get_position(navigator);
             navigator->file_iter = g_list_next(navigator->file_iter);
+
+            navigator->file_list = g_list_remove(navigator->file_list, entry);
+
             if(!navigator->file_iter)
                 navigator->file_iter = g_list_first(navigator->file_list);
 
-            navigator->file_list = g_list_remove(navigator->file_list, entry);
+            if (navigator->history)
+                navigator->history = g_list_remove(navigator->history, entry);
+            g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_ENTRY_REMOVED], 0, entry, NULL);
             if(g_list_length(navigator->file_list) == 0)
             {
                 navigator->file_iter = NULL;
                 navigator->file_list = NULL;
             }
-            g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_REORDERED], 0, NULL);
             if(navigator->file_iter)
             {
                 g_signal_emit(G_OBJECT(navigator),
@@ -563,7 +579,6 @@
         navigator->file_iter = NULL;
         navigator->file_list = NULL;
     }
-    g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_REORDERED], 0, NULL);
 }
 
 void

Modified: ristretto/trunk/src/thumbnail.c
===================================================================
--- ristretto/trunk/src/thumbnail.c	2008-01-19 11:51:10 UTC (rev 3821)
+++ ristretto/trunk/src/thumbnail.c	2008-01-19 12:48:04 UTC (rev 3822)
@@ -39,7 +39,7 @@
 static void
 rstto_thumbnail_class_init(RsttoThumbnailClass *);
 static void
-rstto_thumbnail_destroy(GtkObject *object);
+rstto_thumbnail_finalize(GObject *object);
 
 static void
 rstto_thumbnail_size_request(GtkWidget *, GtkRequisition *);
@@ -94,11 +94,11 @@
 rstto_thumbnail_class_init(RsttoThumbnailClass *thumb_class)
 {
     GtkWidgetClass *widget_class;
-    GtkObjectClass *object_class;
+    GObjectClass *object_class;
     GtkButtonClass *button_class;
 
     widget_class = (GtkWidgetClass*)thumb_class;
-    object_class = (GtkObjectClass*)thumb_class;
+    object_class = (GObjectClass*)thumb_class;
     button_class = (GtkButtonClass*)thumb_class;
 
     parent_class = g_type_class_peek_parent(thumb_class);
@@ -110,7 +110,7 @@
 
     button_class->clicked = rstto_thumbnail_clicked;
 
-    object_class->destroy = rstto_thumbnail_destroy;
+    object_class->finalize = rstto_thumbnail_finalize;
 }
 
 static void
@@ -146,9 +146,18 @@
 }
 
 static void
-rstto_thumbnail_destroy(GtkObject *object)
+rstto_thumbnail_finalize(GObject *object)
 {
+    RsttoThumbnail *thumb = RSTTO_THUMBNAIL(object);
+    GSList *group = g_slist_remove(thumb->priv->group, thumb);
+    GSList *iter = group;
 
+    while(iter)
+    {
+        RsttoThumbnail *thumb_iter = iter->data;
+        thumb_iter->priv->group = group;
+        iter = g_slist_next(iter);
+    }
 }
 
 static void
@@ -315,6 +324,9 @@
 
     if (toggled == TRUE)
     {
+        ThunarVfsInfo *info = rstto_navigator_entry_get_info(thumb->priv->entry);
+        gchar *path = thunar_vfs_path_dup_string(info->path);
+        g_debug("%s", path);
         gtk_widget_queue_draw (GTK_WIDGET (thumb));
         gtk_toggle_button_toggled(toggle_button);
         g_object_notify (G_OBJECT (toggle_button), "active");

Modified: ristretto/trunk/src/thumbnail_bar.c
===================================================================
--- ristretto/trunk/src/thumbnail_bar.c	2008-01-19 11:51:10 UTC (rev 3821)
+++ ristretto/trunk/src/thumbnail_bar.c	2008-01-19 12:48:04 UTC (rev 3822)
@@ -94,6 +94,10 @@
 static void
 cb_rstto_thumbnail_bar_nav_reordered (RsttoNavigator *nav,
                                     RsttoThumbnailBar *bar);
+static void
+cb_rstto_thumbnail_bar_nav_entry_removed(RsttoNavigator *nav,
+                                    RsttoNavigatorEntry *entry,
+                                    RsttoThumbnailBar *bar);
 
 static void
 cb_rstto_thumbnail_bar_thumbnail_toggled (RsttoThumbnail *thumb, RsttoThumbnailBar *bar);
@@ -427,6 +431,7 @@
     g_signal_connect(G_OBJECT(navigator), "new-entry", G_CALLBACK(cb_rstto_thumbnail_bar_nav_new_entry), bar);
     g_signal_connect(G_OBJECT(navigator), "iter-changed", G_CALLBACK(cb_rstto_thumbnail_bar_nav_iter_changed), bar);
     g_signal_connect(G_OBJECT(navigator), "reordered", G_CALLBACK(cb_rstto_thumbnail_bar_nav_reordered), bar);
+    g_signal_connect(G_OBJECT(navigator), "entry-removed", G_CALLBACK(cb_rstto_thumbnail_bar_nav_entry_removed), bar);
 
     return (GtkWidget *)bar;
 }
@@ -553,6 +558,9 @@
     }
     GSList *iter = bar->priv->thumbs;
 
+
+    int i = 0;
+
     while (iter != NULL)
     {
         if (entry != rstto_thumbnail_get_entry(RSTTO_THUMBNAIL(iter->data)))
@@ -563,6 +571,7 @@
         {
             gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(iter->data), TRUE);
         }
+        i++;
         iter = g_slist_next(iter);
     }
     /* If the children should be autocentered... resize */
@@ -699,3 +708,21 @@
     return FALSE;
 
 }
+
+static void
+cb_rstto_thumbnail_bar_nav_entry_removed(RsttoNavigator *nav, RsttoNavigatorEntry *entry, RsttoThumbnailBar *bar)
+{
+    GSList *iter = bar->priv->thumbs;
+
+    while (iter != NULL)
+    {
+        if (entry == rstto_thumbnail_get_entry(RSTTO_THUMBNAIL(iter->data)))
+        {
+            gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(iter->data), FALSE);
+            g_signal_handlers_disconnect_by_func(G_OBJECT(iter->data), G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_toggled), bar);
+            gtk_widget_destroy(GTK_WIDGET(iter->data));
+            break;
+        }
+        iter = g_slist_next(iter);
+    }
+}




More information about the Goodies-commits mailing list