]> spindle.queued.net Git - midori/commitdiff
Implement reverse ordering for use in Trash and RecentlyVisited actions
authorChristian Dywan <christian@twotoasts.de>
Sat, 5 Dec 2009 20:33:19 +0000 (21:33 +0100)
committerChristian Dywan <christian@twotoasts.de>
Sat, 5 Dec 2009 20:33:19 +0000 (21:33 +0100)
katze/katze-arrayaction.c
midori/midori-browser.c

index d9cf7d2c09de38645da52cbadff8b7382848ad74..ea5ac8197f5ab0930e5d3fe418ab620c8693407c 100644 (file)
@@ -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))
index a5b68bd1c0a97d038afa9bb2bc78697a898f2b8b..ee25e30bde119fb7889d551f5be678475d23d051 100644 (file)
@@ -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;