[Goodies-commits] r3732 - ristretto/trunk/src
Stephan Arts
stephan at xfce.org
Fri Dec 21 21:18:10 CET 2007
Author: stephan
Date: 2007-12-21 20:18:09 +0000 (Fri, 21 Dec 2007)
New Revision: 3732
Modified:
ristretto/trunk/src/main.c
ristretto/trunk/src/thumbnail.c
ristretto/trunk/src/thumbnail.h
ristretto/trunk/src/thumbnail_bar.c
Log:
Improve the thumbnails
Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c 2007-12-19 22:52:48 UTC (rev 3731)
+++ ristretto/trunk/src/main.c 2007-12-21 20:18:09 UTC (rev 3732)
@@ -294,7 +294,7 @@
if(!strcmp(file_media, "image"))
{
RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, info);
- gint i = rstto_navigator_add (navigator, entry);
+ rstto_navigator_add (navigator, entry);
}
}
else
Modified: ristretto/trunk/src/thumbnail.c
===================================================================
--- ristretto/trunk/src/thumbnail.c 2007-12-19 22:52:48 UTC (rev 3731)
+++ ristretto/trunk/src/thumbnail.c 2007-12-21 20:18:09 UTC (rev 3732)
@@ -29,6 +29,7 @@
{
RsttoNavigatorEntry *entry;
gboolean selected;
+ GSList *group;
};
static GtkWidgetClass *parent_class = NULL;
@@ -51,7 +52,7 @@
rstto_thumbnail_paint(RsttoThumbnail *thumb);
static void
-cb_rstto_thumbnail_toggled(RsttoThumbnail *thumb, gpointer user_data);
+rstto_thumbnail_clicked(GtkButton *);
GType
rstto_thumbnail_get_type ()
@@ -88,7 +89,7 @@
gtk_widget_set_events (GTK_WIDGET(thumb),
GDK_BUTTON_PRESS_MASK);
- g_signal_connect(G_OBJECT(thumb), "toggled", G_CALLBACK(cb_rstto_thumbnail_toggled), NULL);
+ //g_signal_connect(G_OBJECT(thumb), "clicked", G_CALLBACK(cb_rstto_thumbnail_clicked), NULL);
}
static void
@@ -96,9 +97,11 @@
{
GtkWidgetClass *widget_class;
GtkObjectClass *object_class;
+ GtkButtonClass *button_class;
widget_class = (GtkWidgetClass*)thumb_class;
object_class = (GtkObjectClass*)thumb_class;
+ button_class = (GtkButtonClass*)thumb_class;
parent_class = g_type_class_peek_parent(thumb_class);
@@ -107,6 +110,8 @@
widget_class->size_request = rstto_thumbnail_size_request;
widget_class->size_allocate = rstto_thumbnail_size_allocate;
+ button_class->clicked = rstto_thumbnail_clicked;
+
object_class->destroy = rstto_thumbnail_destroy;
}
@@ -120,8 +125,6 @@
static void
rstto_thumbnail_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
{
- RsttoThumbnail *thumb = RSTTO_THUMBNAIL(widget);
- gint border_width = 0;
widget->allocation = *allocation;
parent_class->size_allocate(widget, allocation);
@@ -215,7 +218,7 @@
}
GtkWidget *
-rstto_thumbnail_new(RsttoNavigatorEntry *entry)
+rstto_thumbnail_new(RsttoNavigatorEntry *entry, GSList *thumb_list)
{
g_return_val_if_fail(entry != NULL, NULL);
@@ -231,17 +234,88 @@
/* TODO: gtktooltip stuff */
#endif
+ {
+ thumb->priv->group = g_slist_prepend(thumb_list, thumb);
+ GSList *iter = thumb->priv->group;
+ while(iter)
+ {
+ RsttoThumbnail *iter_thumb = iter->data;
+ iter_thumb->priv->group = thumb->priv->group;
+ iter = iter->next;
+ }
+ }
+
return GTK_WIDGET(thumb);
}
+GtkWidget *
+rstto_thumbnail_new_from_widget(RsttoNavigatorEntry *entry, RsttoThumbnail *sibling)
+{
+ return rstto_thumbnail_new(entry, sibling->priv->group);
+}
+
+RsttoNavigatorEntry *
+rstto_thumbnail_get_entry (RsttoThumbnail *thumb)
+{
+ return thumb->priv->entry;
+}
+
/* CALLBACKS */
/*************/
static void
-cb_rstto_thumbnail_toggled(RsttoThumbnail *thumb, gpointer user_data)
+rstto_thumbnail_clicked(GtkButton *button)
{
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(thumb)) == TRUE)
+ GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON(button);
+ RsttoThumbnail *thumb = RSTTO_THUMBNAIL(button);
+ GtkToggleButton *tmp_button;
+
+ GSList *tmp_list;
+ gboolean toggled = FALSE;
+
+ if(toggle_button->active == TRUE)
{
- rstto_navigator_entry_select(thumb->priv->entry);
+ tmp_button = NULL;
+ tmp_list = thumb->priv->group;
+ while(tmp_list)
+ {
+ tmp_button = tmp_list->data;
+ tmp_list = tmp_list->next;
+ if (tmp_button->active && tmp_button != toggle_button)
+ break;
+
+ tmp_button = NULL;
+ }
+
+ if (tmp_button != NULL)
+ {
+ toggled = TRUE;
+ toggle_button->active = !toggle_button->active;
+ }
}
+ else
+ {
+ toggled = TRUE;
+ toggle_button->active = !toggle_button->active;
+
+ tmp_list = thumb->priv->group;
+ while(tmp_list)
+ {
+ tmp_button = tmp_list->data;
+ tmp_list = tmp_list->next;
+ if (tmp_button->active && (tmp_button != toggle_button))
+ {
+ gtk_button_clicked(GTK_BUTTON(tmp_button));
+ break;
+ }
+ }
+ }
+
+ if (toggled == TRUE)
+ {
+ gtk_toggle_button_toggled(toggle_button);
+ g_object_notify (G_OBJECT (toggle_button), "active");
+ }
+
+ gtk_widget_queue_draw (GTK_WIDGET (thumb));
}
Modified: ristretto/trunk/src/thumbnail.h
===================================================================
--- ristretto/trunk/src/thumbnail.h 2007-12-19 22:52:48 UTC (rev 3731)
+++ ristretto/trunk/src/thumbnail.h 2007-12-21 20:18:09 UTC (rev 3732)
@@ -58,7 +58,9 @@
GType rstto_thumbnail_get_type();
-GtkWidget *rstto_thumbnail_new();
+GtkWidget *rstto_thumbnail_new(RsttoNavigatorEntry *entry, GSList *thumb_list);
+GtkWidget *rstto_thumbnail_new_from_widget(RsttoNavigatorEntry *entry, RsttoThumbnail *sibling);
+RsttoNavigatorEntry *rstto_thumbnail_get_entry (RsttoThumbnail *thumb);
G_END_DECLS
Modified: ristretto/trunk/src/thumbnail_bar.c
===================================================================
--- ristretto/trunk/src/thumbnail_bar.c 2007-12-19 22:52:48 UTC (rev 3731)
+++ ristretto/trunk/src/thumbnail_bar.c 2007-12-21 20:18:09 UTC (rev 3732)
@@ -42,8 +42,6 @@
rstto_thumbnail_bar_init(RsttoThumbnailBar *);
static void
rstto_thumbnail_bar_class_init(RsttoThumbnailBarClass *);
-static void
-rstto_thumbnail_bar_destroy(GtkObject *object);
static void
rstto_thumbnail_bar_size_request(GtkWidget *, GtkRequisition *);
@@ -75,6 +73,9 @@
cb_rstto_thumbnail_bar_nav_reordered (RsttoNavigator *nav,
RsttoThumbnailBar *bar);
+static void
+cb_rstto_thumbnail_bar_thumbnail_toggled (RsttoThumbnail *thumb, RsttoThumbnailBar *bar);
+
GType
rstto_thumbnail_bar_get_type ()
{
@@ -148,7 +149,6 @@
{
RsttoThumbnailBar *bar = RSTTO_THUMBNAIL_BAR(widget);
gint border_width = GTK_CONTAINER(bar)->border_width;
- gint spacing = 0;
GSList *iter;
GtkRequisition child_requisition;
@@ -352,7 +352,16 @@
static void
cb_rstto_thumbnail_bar_nav_new_entry(RsttoNavigator *nav, gint nr, RsttoNavigatorEntry *entry, RsttoThumbnailBar *bar)
{
- GtkWidget *thumb = rstto_thumbnail_new(entry);
+ GtkWidget *thumb;
+ if (g_slist_length(bar->priv->thumbs) > 0)
+ {
+ thumb = rstto_thumbnail_new_from_widget(entry, bar->priv->thumbs->data);
+ }
+ else
+ {
+ thumb = rstto_thumbnail_new(entry, NULL);
+ }
+ g_signal_connect(G_OBJECT(thumb), "toggled", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_toggled), bar);
gtk_container_add(GTK_CONTAINER(bar), thumb);
gtk_widget_show(thumb);
}
@@ -369,6 +378,20 @@
static void
cb_rstto_thumbnail_bar_nav_iter_changed(RsttoNavigator *nav, gint nr, 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);
+ }
+ else
+ {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(iter->data), TRUE);
+ }
+ iter = g_slist_next(iter);
+ }
}
/*
@@ -382,3 +405,12 @@
cb_rstto_thumbnail_bar_nav_reordered (RsttoNavigator *nav, RsttoThumbnailBar *bar)
{
}
+
+static void
+cb_rstto_thumbnail_bar_thumbnail_toggled (RsttoThumbnail *thumb, RsttoThumbnailBar *bar)
+{
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(thumb)) == TRUE)
+ {
+ rstto_navigator_entry_select (rstto_thumbnail_get_entry(thumb));
+ }
+}
More information about the Goodies-commits
mailing list