[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