[Xfce4-commits] <midori:master> Implement reverse ordering for use in Trash and RecentlyVisited actions

Christian Dywan noreply at xfce.org
Sat Dec 5 21:38:01 CET 2009


Updating branch refs/heads/master
         to 1fa2c95bf49ce6025edf5457bca6abfe2897e10c (commit)
       from 1c45254f23e795dc90143130c0a4314864e7f119 (commit)

commit 1fa2c95bf49ce6025edf5457bca6abfe2897e10c
Author: Christian Dywan <christian at twotoasts.de>
Date:   Sat Dec 5 21:33:19 2009 +0100

    Implement reverse ordering for use in Trash and RecentlyVisited actions

 katze/katze-arrayaction.c |   41 ++++++++++++++++++++++++++++++++++++++---
 midori/midori-browser.c   |   11 +++++++----
 2 files changed, 45 insertions(+), 7 deletions(-)

diff --git a/katze/katze-arrayaction.c b/katze/katze-arrayaction.c
index d9cf7d2..ea5ac81 100644
--- a/katze/katze-arrayaction.c
+++ b/katze/katze-arrayaction.c
@@ -30,6 +30,7 @@ struct _KatzeArrayAction
 
     KatzeArray* array;
     KatzeNet* net;
+    gboolean reversed;
 };
 
 struct _KatzeArrayActionClass
@@ -43,7 +44,8 @@ enum
 {
     PROP_0,
 
-    PROP_ARRAY
+    PROP_ARRAY,
+    PROP_REVERSED
 };
 
 enum
@@ -158,6 +160,22 @@ katze_array_action_class_init (KatzeArrayActionClass* class)
                                      "The array the action represents",
                                      KATZE_TYPE_ARRAY,
                                      G_PARAM_READWRITE));
+
+    /**
+     * KatzeArrayAction:reversed:
+     *
+     * Whether the array should be walked backwards when building menus.
+     *
+     * Since: 0.2.2
+     **/
+    g_object_class_install_property (gobject_class,
+                                     PROP_REVERSED,
+                                     g_param_spec_boolean (
+                                     "reversed",
+                                     "Reversed",
+        "Whether the array should be walked backwards when building menus",
+                                     FALSE,
+                                     G_PARAM_READWRITE));
 }
 
 static void
@@ -165,6 +183,7 @@ katze_array_action_init (KatzeArrayAction* array_action)
 {
     array_action->array = NULL;
     array_action->net = katze_net_new ();
+    array_action->reversed = FALSE;
 }
 
 static void
@@ -191,6 +210,9 @@ katze_array_action_set_property (GObject*      object,
     case PROP_ARRAY:
         katze_array_action_set_array (array_action, g_value_get_object (value));
         break;
+    case PROP_REVERSED:
+        array_action->reversed = g_value_get_boolean (value);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -210,6 +232,9 @@ katze_array_action_get_property (GObject*    object,
     case PROP_ARRAY:
         g_value_set_object (value, array_action->array);
         break;
+    case PROP_REVERSED:
+        g_value_set_boolean (value, array_action->reversed);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -277,6 +302,7 @@ katze_array_action_generate_menu (KatzeArrayAction* array_action,
                                   GtkWidget*        proxy)
 {
     guint i;
+    guint summand;
     KatzeItem* item;
     GtkWidget* menuitem;
     const gchar* icon_name;
@@ -284,8 +310,17 @@ katze_array_action_generate_menu (KatzeArrayAction* array_action,
     GtkWidget* image;
     GtkWidget* submenu;
 
-    i = 0;
-    while ((item = katze_array_get_nth_item (array, i++)))
+    if (array_action->reversed)
+    {
+        i = katze_array_get_length (array);
+        summand = -1;
+    }
+    else
+    {
+        i = -1;
+        summand = +1;
+    }
+    while ((item = katze_array_get_nth_item (array, i += summand)))
     {
         /* FIXME: The menu item should reflect changes to the item  */
         if (!KATZE_IS_ARRAY (item) && !katze_item_get_uri (item))
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index a5b68bd..ee25e30 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -5431,10 +5431,12 @@ midori_browser_set_history (MidoriBrowser* browser,
     if (history && ((recently_visited = katze_array_get_nth_item (history,
         katze_array_get_length (KATZE_ARRAY (history)) - 1))))
         g_object_set (_action_by_name (browser, "RecentlyVisited"),
-                      "array", recently_visited, NULL);
+                      "array", recently_visited, "reversed", TRUE,
+                      NULL);
     else
         g_object_set (_action_by_name (browser, "RecentlyVisited"),
-                      "array", NULL, NULL);
+                      "array", NULL, "reversed", FALSE,
+                      NULL);
 
     if (!history)
         return;
@@ -6616,8 +6618,9 @@ midori_browser_set_property (GObject*      object,
     case PROP_TRASH:
         /* FIXME: Disconnect handlers */
         katze_object_assign (browser->trash, g_value_dup_object (value));
-        g_object_set (_action_by_name (browser, "Trash"), "array",
-            browser->trash, NULL);
+        g_object_set (_action_by_name (browser, "Trash"),
+                      "array", browser->trash, "reversed", TRUE,
+                      NULL);
         /* FIXME: Connect to updates */
         _midori_browser_update_actions (browser);
         break;



More information about the Xfce4-commits mailing list