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

Stephan Arts stephan at xfce.org
Sun Feb 17 00:13:50 CET 2008


Author: stephan
Date: 2008-02-16 23:13:50 +0000 (Sat, 16 Feb 2008)
New Revision: 3961

Modified:
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/navigator.h
   ristretto/trunk/src/thumbnail.c
   ristretto/trunk/src/thumbnail.h
   ristretto/trunk/src/thumbnail_bar.c
Log:
Improve behaviour of the thumbnails, lets them manage widget-states themselves instead of relying on the parent-class to do it for them.



Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2008-02-16 15:32:19 UTC (rev 3960)
+++ ristretto/trunk/src/navigator.c	2008-02-16 23:13:50 UTC (rev 3961)
@@ -1350,3 +1350,15 @@
     }
     return 1;
 }
+
+gboolean
+rstto_navigator_entry_is_selected(RsttoNavigatorEntry *entry)
+{
+    g_return_val_if_fail(RSTTO_IS_NAVIGATOR(entry->navigator), FALSE);
+    g_return_val_if_fail((entry->navigator->file_iter != NULL), FALSE);
+
+    if (entry == entry->navigator->file_iter->data)
+        return TRUE;
+    else
+        return FALSE;
+}

Modified: ristretto/trunk/src/navigator.h
===================================================================
--- ristretto/trunk/src/navigator.h	2008-02-16 15:32:19 UTC (rev 3960)
+++ ristretto/trunk/src/navigator.h	2008-02-16 23:13:50 UTC (rev 3961)
@@ -157,6 +157,9 @@
 void
 rstto_navigator_set_monitor_handle_for_dir(RsttoNavigator *nav, ThunarVfsPath *dir_path);
 
+gboolean
+rstto_navigator_entry_is_selected(RsttoNavigatorEntry *entry);
+
 G_END_DECLS
 
 #endif /* __RISTRETTO_NAVIGATOR_H__ */

Modified: ristretto/trunk/src/thumbnail.c
===================================================================
--- ristretto/trunk/src/thumbnail.c	2008-02-16 15:32:19 UTC (rev 3960)
+++ ristretto/trunk/src/thumbnail.c	2008-02-16 23:13:50 UTC (rev 3961)
@@ -75,7 +75,7 @@
             NULL
         };
 
-        rstto_thumbnail_type = g_type_register_static (GTK_TYPE_TOGGLE_BUTTON, "RsttoThumbnail", &rstto_thumbnail_info, 0);
+        rstto_thumbnail_type = g_type_register_static (GTK_TYPE_BUTTON, "RsttoThumbnail", &rstto_thumbnail_info, 0);
     }
     return rstto_thumbnail_type;
 }
@@ -177,6 +177,19 @@
 
     if(thumb->priv->entry)
     {
+
+        if (GTK_WIDGET_STATE(widget) != GTK_STATE_PRELIGHT)
+        {
+            if (rstto_navigator_entry_is_selected(thumb->priv->entry))
+            {
+                gtk_widget_set_state(widget, GTK_STATE_SELECTED);
+            }
+            else
+            {
+                gtk_widget_set_state(widget, GTK_STATE_NORMAL);
+            }
+        }
+
         GdkPixbuf *pixbuf = rstto_navigator_entry_get_thumb(
                                 thumb->priv->entry,
                                 widget->allocation.height - 4);
@@ -255,52 +268,10 @@
 static void
 rstto_thumbnail_clicked(GtkButton *button)
 {
-    GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON(button);
     RsttoThumbnail *thumb = RSTTO_THUMBNAIL(button);
-    GtkToggleButton *tmp_button;
+    RsttoNavigatorEntry *entry = rstto_thumbnail_get_entry(thumb);
 
-    gboolean toggled = FALSE;
+    rstto_navigator_entry_select(entry);
 
-    GSList *tmp_list;
-
-    if(toggle_button->active == TRUE)
-    {
-        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;
-        }
-    }
-    else
-    {
-        toggled = TRUE;
-
-        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_BUTTON_CLASS(parent_class)->clicked(button);
-    }
+    gtk_widget_queue_draw (GTK_WIDGET (button));
 }

Modified: ristretto/trunk/src/thumbnail.h
===================================================================
--- ristretto/trunk/src/thumbnail.h	2008-02-16 15:32:19 UTC (rev 3960)
+++ ristretto/trunk/src/thumbnail.h	2008-02-16 23:13:50 UTC (rev 3961)
@@ -45,15 +45,16 @@
 
 struct _RsttoThumbnail
 {
-    GtkToggleButton     parent;
+    GtkButton     parent;
     RsttoThumbnailPriv *priv;
+    gboolean            selected;
 };
 
 typedef struct _RsttoThumbnailClass RsttoThumbnailClass;
 
 struct _RsttoThumbnailClass
 {
-    GtkToggleButtonClass  parent_class;
+    GtkButtonClass  parent_class;
 };
 
 GType      rstto_thumbnail_get_type();

Modified: ristretto/trunk/src/thumbnail_bar.c
===================================================================
--- ristretto/trunk/src/thumbnail_bar.c	2008-02-16 15:32:19 UTC (rev 3960)
+++ ristretto/trunk/src/thumbnail_bar.c	2008-02-16 23:13:50 UTC (rev 3961)
@@ -105,7 +105,7 @@
                                     RsttoThumbnailBar *bar);
 
 static void
-cb_rstto_thumbnail_bar_thumbnail_toggled (RsttoThumbnail *thumb, RsttoThumbnailBar *bar);
+cb_rstto_thumbnail_bar_thumbnail_clicked (RsttoThumbnail *thumb, RsttoThumbnailBar *bar);
 
 static gint
 cb_rstto_thumbnail_bar_compare (RsttoThumbnail *a, RsttoThumbnail *b);
@@ -612,7 +612,7 @@
     {
         thumb = rstto_thumbnail_new(entry, NULL);
     }
-    g_signal_connect(G_OBJECT(thumb), "toggled", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_toggled), bar);
+    g_signal_connect(G_OBJECT(thumb), "clicked", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_clicked), bar);
     g_signal_connect(G_OBJECT(thumb), "button_press_event", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_button_press_event), NULL);
     g_signal_connect(G_OBJECT(thumb), "button_release_event", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_button_release_event), NULL);
     g_signal_connect(G_OBJECT(thumb), "motion_notify_event", G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_motion_notify_event), NULL);
@@ -643,17 +643,15 @@
 
     while (iter != NULL)
     {
-        if (entry != rstto_thumbnail_get_entry(RSTTO_THUMBNAIL(iter->data)))
+        if (entry == rstto_thumbnail_get_entry(RSTTO_THUMBNAIL(iter->data)))
         {
-            gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(iter->data), FALSE);
+            //gtk_button_clicked(GTK_BUTTON(iter->data));
+            break;
         }
-        else
-        {
-            gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(iter->data), TRUE);
-        }
         i++;
         iter = g_slist_next(iter);
     }
+
     /* If the children should be autocentered... resize */
     if (bar->priv->auto_center == TRUE)
         gtk_widget_queue_resize(GTK_WIDGET(bar));
@@ -672,9 +670,9 @@
 }
 
 static void
-cb_rstto_thumbnail_bar_thumbnail_toggled (RsttoThumbnail *thumb, RsttoThumbnailBar *bar)
+cb_rstto_thumbnail_bar_thumbnail_clicked (RsttoThumbnail *thumb, RsttoThumbnailBar *bar)
 {
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(thumb)) == TRUE)
+    if (thumb->selected == TRUE)
     {
         bar->priv->auto_center = TRUE;
         rstto_navigator_entry_select (rstto_thumbnail_get_entry(thumb));
@@ -797,8 +795,7 @@
     {
         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);
+            g_signal_handlers_disconnect_by_func(G_OBJECT(iter->data), G_CALLBACK(cb_rstto_thumbnail_bar_thumbnail_clicked), bar);
             gtk_widget_destroy(GTK_WIDGET(iter->data));
             break;
         }




More information about the Goodies-commits mailing list