[Xfce4-commits] <midori:master> Move tab removal out of the signal
Christian Dywan
noreply at xfce.org
Sun Jul 15 00:14:04 CEST 2012
Updating branch refs/heads/master
to 9ac017589942cf3f2bf59bf162c9acd82eff062f (commit)
from 3627c75e0b0d9287f58affb979b5e32ba2ef0d2f (commit)
commit 9ac017589942cf3f2bf59bf162c9acd82eff062f
Author: Christian Dywan <christian at twotoasts.de>
Date: Sun Jul 15 00:07:59 2012 +0200
Move tab removal out of the signal
Every caller should use the API to remove a tab to
produce consistent behavior.
The destroy callback takes care of UI updates.
extensions/tab-panel.c | 4 +-
midori/main.c | 2 +-
midori/midori-browser.c | 79 +++++++++++++++++++++++++----------------------
midori/midori-view.c | 8 ++--
4 files changed, 49 insertions(+), 44 deletions(-)
diff --git a/extensions/tab-panel.c b/extensions/tab-panel.c
index a99a3a2..24600df 100644
--- a/extensions/tab-panel.c
+++ b/extensions/tab-panel.c
@@ -231,12 +231,12 @@ midori_extension_button_release_event_cb (GtkWidget* widget,
if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
event->x, event->y, NULL, &column, NULL, NULL)
&& column == gtk_tree_view_get_column (GTK_TREE_VIEW (widget), 1))
- gtk_widget_destroy (view);
+ midori_browser_remove_tab (browser, view);
else
midori_browser_set_current_tab (browser, view);
}
else if (event->button == 2)
- gtk_widget_destroy (view);
+ midori_browser_remove_tab (midori_browser_get_for_widget (widget), view);
else
tab_panel_popup (widget, event, view);
diff --git a/midori/main.c b/midori/main.c
index e6c121c..11ffbb1 100644
--- a/midori/main.c
+++ b/midori/main.c
@@ -1700,7 +1700,7 @@ midori_inactivity_timeout (gpointer data)
GList* data_items = sokoke_register_privacy_item (NULL, NULL, NULL);
while ((view = midori_browser_get_nth_tab (mit->browser, i++)))
- gtk_widget_destroy (view);
+ midori_browser_remove_tab (mit->browser, view);
midori_browser_set_current_uri (mit->browser, mit->uri);
/* Clear all private data */
if (history != NULL)
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index fae649c..1d85da1 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -1602,36 +1602,32 @@ midori_browser_get_n_pages (MidoriBrowser* browser)
#endif
}
-static gboolean
-midori_browser_tab_destroy_cb (GtkWidget* widget,
+static void
+midori_browser_tab_destroy_cb (MidoriView* view,
MidoriBrowser* browser)
{
- KatzeItem* item;
-
- if (browser->proxy_array && MIDORI_IS_VIEW (widget))
+ if (browser->proxy_array)
{
- item = midori_view_get_proxy_item (MIDORI_VIEW (widget));
- if (browser->trash && !midori_view_is_blank (MIDORI_VIEW (widget)))
+ KatzeItem* item = midori_view_get_proxy_item (view);
+ if (browser->trash && !midori_view_is_blank (view))
katze_array_add_item (browser->trash, item);
katze_array_remove_item (browser->proxy_array, item);
- }
-
- _midori_browser_update_actions (browser);
-
- /* This callback must only be called once, but we need to ensure
- that "remove-tab" is emitted in any case */
- g_signal_handlers_disconnect_by_func (widget,
- midori_browser_tab_destroy_cb, browser);
-
- g_signal_emit (browser, signals[REMOVE_TAB], 0, widget);
/* We don't ever want to be in a situation with no tabs,
so just create an empty one if the last one is closed.
The only exception is when we are closing the window,
which is indicated by the proxy array having been unset. */
- if (browser->proxy_array && !midori_browser_get_current_tab (browser))
- midori_browser_add_uri (browser, "");
- return FALSE;
+ if (midori_browser_get_n_pages (browser) == 0)
+ midori_browser_add_uri (browser, "");
+ }
+
+ _midori_browser_update_actions (browser);
+}
+
+static void
+_midori_browser_remove_tab (MidoriBrowser* browser,
+ GtkWidget* widget)
+{
}
#ifndef HAVE_GRANITE
@@ -1787,14 +1783,6 @@ _midori_browser_add_tab (MidoriBrowser* browser,
_midori_browser_update_actions (browser);
}
-static void
-_midori_browser_remove_tab (MidoriBrowser* browser,
- GtkWidget* view)
-{
- gtk_widget_destroy (view);
- midori_browser_notebook_size_allocate_cb (browser->notebook, NULL, browser);
-}
-
/**
* midori_browser_foreach:
* @browser: a #MidoriBrowser
@@ -2655,15 +2643,16 @@ _action_tab_close_activate (GtkAction* action,
MidoriBrowser* browser)
{
GtkWidget* widget = midori_browser_get_current_tab (browser);
+ MidoriView* view = MIDORI_VIEW (widget);
gboolean last_tab = midori_browser_get_n_pages (browser) == 1;
if (last_tab && sokoke_is_app_or_private ())
{
gtk_widget_destroy (GTK_WIDGET (browser));
return;
}
- if (last_tab && midori_view_is_blank (MIDORI_VIEW (widget)))
+ if (last_tab && midori_view_is_blank (view))
return;
- gtk_widget_destroy (widget);
+ midori_browser_remove_tab (browser, widget);
}
static void
@@ -4267,13 +4256,7 @@ midori_browser_bookmark_open_in_window_activate_cb (GtkWidget* menuitem,
item = (KatzeItem*)g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
uri = katze_item_get_uri (item);
-
- if (uri && *uri)
- {
- MidoriBrowser* new_browser;
- g_signal_emit (browser, signals[NEW_WINDOW], 0, NULL, &new_browser);
- midori_browser_add_uri (new_browser, uri);
- }
+ midori_view_new_window_cb (NULL, uri, browser);
}
static void
@@ -5296,6 +5279,17 @@ midori_browser_notebook_tab_added_cb (GtkWidget* notebook,
midori_view_set_uri (MIDORI_VIEW (view), "");
}
+static gboolean
+midori_browser_notebook_tab_removed_cb (GtkWidget* notebook,
+ GraniteWidgetsTab* tab,
+ MidoriBrowser* browser)
+{
+ MidoriView* view = MIDORI_VIEW (granite_widgets_tab_get_page (tab));
+ g_signal_emit (browser, signals[REMOVE_TAB], 0, view);
+ gtk_widget_destroy (view);
+ return TRUE;
+}
+
static void
midori_browser_notebook_tab_switched_cb (GraniteWidgetsDynamicNotebook* notebook,
GraniteWidgetsTab* old_tab,
@@ -5350,6 +5344,7 @@ midori_browser_notebook_page_removed_cb (GtkWidget* notebook,
MidoriBrowser* browser)
{
_midori_browser_remove_tab (browser, view);
+ midori_browser_notebook_size_allocate_cb (browser->notebook, NULL, browser);
}
static gboolean
@@ -6556,6 +6551,9 @@ midori_browser_init (MidoriBrowser* browser)
g_signal_connect (browser->notebook, "tab-added",
G_CALLBACK (midori_browser_notebook_tab_added_cb),
browser);
+ g_signal_connect (browser->notebook, "tab-removed",
+ G_CALLBACK (midori_browser_notebook_tab_removed_cb),
+ browser);
g_signal_connect (browser->notebook, "tab-switched",
G_CALLBACK (midori_browser_notebook_tab_switched_cb),
browser);
@@ -7622,6 +7620,13 @@ midori_browser_remove_tab (MidoriBrowser* browser,
g_return_if_fail (GTK_IS_WIDGET (view));
g_signal_emit (browser, signals[REMOVE_TAB], 0, view);
+ #ifdef HAVE_GRANITE
+ granite_widgets_dynamic_notebook_remove_tab (
+ GRANITE_WIDGETS_DYNAMIC_NOTEBOOK (browser->notebook),
+ midori_view_get_tab (MIDORI_VIEW (view)));
+ #else
+ gtk_widget_destroy (view);
+ #endif
}
/**
diff --git a/midori/midori-view.c b/midori/midori-view.c
index 9d8eb06..a509f06 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -4764,7 +4764,7 @@ midori_view_browser_close_tabs_cb (GtkWidget* view,
{
GtkWidget* remaining_view = data;
if (view != remaining_view)
- gtk_widget_destroy (view);
+ midori_browser_remove_tab (midori_browser_get_for_widget (view), view);
}
static void
@@ -4786,7 +4786,7 @@ static void
midori_view_tab_label_menu_close_cb (GtkWidget* menuitem,
GtkWidget* view)
{
- gtk_widget_destroy (view);
+ midori_browser_remove_tab (midori_browser_get_for_widget (view), view);
}
/**
@@ -4883,7 +4883,7 @@ midori_view_tab_label_button_press_event (GtkWidget* tab_label,
if (event->button == 2)
{
/* Close the widget on middle click */
- gtk_widget_destroy (widget);
+ midori_browser_remove_tab (midori_browser_get_for_widget (widget), widget);
return TRUE;
}
else if (MIDORI_EVENT_CONTEXT_MENU (event))
@@ -4903,7 +4903,7 @@ static void
midori_view_tab_close_clicked (GtkWidget* tab_close,
GtkWidget* widget)
{
- gtk_widget_destroy (widget);
+ midori_browser_remove_tab (midori_browser_get_for_widget (widget), widget);
}
#if !GTK_CHECK_VERSION (3, 0, 0)
More information about the Xfce4-commits
mailing list