]> spindle.queued.net Git - midori/commitdiff
Remove the according action when destroying panels
authorChristian Dywan <christian@twotoasts.de>
Thu, 21 Jul 2011 16:18:58 +0000 (18:18 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 21 Jul 2011 16:18:58 +0000 (18:18 +0200)
Fixes: https://bugs.launchpad.net/midori/+bug/699982
midori/midori-panel.c

index 1e73c07a0857001f5aac64cbb82c6a4bf1ad3721..a7abc81adc2964254d9216dec18a3a5981dc97ab 100644 (file)
@@ -588,12 +588,29 @@ static void
 midori_panel_viewable_destroy_cb (GtkWidget*   viewable,
                                   MidoriPanel* panel)
 {
-    gint i = gtk_notebook_page_num (GTK_NOTEBOOK (panel->notebook),
+    gint n_pages;
+    gchar* action_name;
+    GtkAction* action;
+    gint i;
+
+    i = gtk_notebook_page_num (GTK_NOTEBOOK (panel->notebook),
                 g_object_get_data (G_OBJECT (viewable), "parent"));
     if (i > -1)
         gtk_notebook_remove_page (GTK_NOTEBOOK (panel->notebook), i);
     g_signal_handlers_disconnect_by_func (
         viewable, midori_panel_viewable_destroy_cb, panel);
+
+    n_pages = midori_panel_get_n_pages (panel);
+    if (n_pages > 0)
+        midori_panel_set_current_page (panel, (n_pages-1 > i) ? i : n_pages - 1);
+
+    action_name = g_strconcat ("PanelPage",
+        midori_viewable_get_stock_id (MIDORI_VIEWABLE (viewable)), NULL);
+    action = gtk_action_group_get_action (panel->action_group, action_name);
+    g_free (action_name);
+
+    gtk_action_group_remove_action (panel->action_group, action);
+    g_object_unref (G_OBJECT (action));
 }
 
 static GtkToolItem*