]> spindle.queued.net Git - midori/commitdiff
Show a 'Delete all' button in the transferbar as needed
authorChristian Dywan <christian@twotoasts.de>
Sun, 19 Apr 2009 17:05:05 +0000 (19:05 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 19 Apr 2009 17:05:05 +0000 (19:05 +0200)
The button shows up as a new download starts and vanishes again
if no downloads are there.

midori/midori-browser.c

index 1c521121d92d750e1f30788b87c254cb4c1da4ca..32fd16eca4ec4065d5d9b9d112746ffcca1d4c82 100644 (file)
@@ -66,6 +66,7 @@ struct _MidoriBrowser
 
     GtkWidget* statusbar;
     GtkWidget* transferbar;
+    GtkWidget* transferbar_clear;
     GtkWidget* progressbar;
     gchar* statusbar_text;
 
@@ -903,11 +904,16 @@ midori_browser_download_notify_status_cb (WebKitDownload* download,
             gtk_button_set_image (GTK_BUTTON (button), icon);
             if (g_object_get_data (G_OBJECT (download), "open-download"))
                 gtk_button_clicked (GTK_BUTTON (button));
+            else
+                g_object_set_data (G_OBJECT (gtk_widget_get_parent (button)),
+                                   "done", (void*)1);
             break;
         case WEBKIT_DOWNLOAD_STATUS_CANCELLED:
         case WEBKIT_DOWNLOAD_STATUS_ERROR:
             icon = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
             gtk_button_set_image (GTK_BUTTON (button), icon);
+            g_object_set_data (G_OBJECT (gtk_widget_get_parent (button)),
+                               "done", (void*)1);
             break;
         default:
             break;
@@ -918,10 +924,17 @@ static void
 midori_browser_download_button_clicked_cb (GtkWidget*      button,
                                            WebKitDownload* download)
 {
+    MidoriBrowser* browser;
+    GList* buttons;
+
+    browser = MIDORI_BROWSER (gtk_widget_get_toplevel (button));
+
     switch (webkit_download_get_status (download))
     {
         case WEBKIT_DOWNLOAD_STATUS_STARTED:
             webkit_download_cancel (download);
+            g_object_set_data (G_OBJECT (gtk_widget_get_parent (button)),
+                               "done", (void*)1);
             break;
         case WEBKIT_DOWNLOAD_STATUS_FINISHED:
         {
@@ -943,6 +956,11 @@ midori_browser_download_button_clicked_cb (GtkWidget*      button,
         default:
             break;
     }
+
+    buttons = gtk_container_get_children (GTK_CONTAINER (browser->transferbar));
+    if (g_list_length (buttons) == 1)
+        gtk_widget_hide (browser->transferbar_clear);
+    g_list_free (buttons);
 }
 
 static void
@@ -978,6 +996,7 @@ midori_browser_add_download_item (MidoriBrowser*  browser,
     gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
     gtk_widget_show_all (box);
     gtk_box_pack_start (GTK_BOX (browser->transferbar), box, FALSE, FALSE, 0);
+    gtk_widget_show (browser->transferbar_clear);
 
     g_signal_connect (download, "notify::progress",
         G_CALLBACK (midori_browser_download_notify_progress_cb), progress);
@@ -1016,6 +1035,26 @@ midori_view_download_requested_cb (GtkWidget*      view,
 }
 #endif
 
+static void
+midori_browser_transferbar_clear_clicked_cb (GtkWidget*     button,
+                                             MidoriBrowser* browser)
+{
+    GList* buttons;
+    guint i;
+    GtkWidget* item;
+
+    buttons = gtk_container_get_children (GTK_CONTAINER (browser->transferbar));
+    i = 0;
+    while ((item = g_list_nth_data (buttons, i++)))
+        if (g_object_get_data (G_OBJECT (item), "done"))
+            gtk_widget_destroy (item);
+    g_list_free (buttons);
+    buttons = gtk_container_get_children (GTK_CONTAINER (browser->transferbar));
+    if (g_list_length (buttons) == 1)
+        gtk_widget_hide (browser->transferbar_clear);
+    g_list_free (buttons);
+}
+
 static void
 midori_view_search_text_cb (GtkWidget*     view,
                             gboolean       found,
@@ -3885,6 +3924,7 @@ midori_browser_init (MidoriBrowser* browser)
     GtkToolItem* toolitem;
     GtkRcStyle* rcstyle;
     GtkWidget* scrolled;
+    GtkWidget* icon;
 
     browser->net = katze_net_new ();
 
@@ -4290,6 +4330,13 @@ midori_browser_init (MidoriBrowser* browser)
     gtk_box_pack_start (GTK_BOX (browser->statusbar), browser->transferbar,
                         FALSE, FALSE, 3);
     gtk_widget_show (browser->transferbar);
+    browser->transferbar_clear = gtk_button_new_with_label (_("Delete All"));
+    icon = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
+    gtk_button_set_image (GTK_BUTTON (browser->transferbar_clear), icon);
+    g_signal_connect (browser->transferbar_clear, "clicked",
+        G_CALLBACK (midori_browser_transferbar_clear_clicked_cb), browser);
+    gtk_box_pack_end (GTK_BOX (browser->transferbar), browser->transferbar_clear,
+                        FALSE, FALSE, 0);
     g_signal_connect (browser->statusbar, "button-press-event",
         G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb), browser);