[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