Ensure REMOVE_TAB emission, don't alter session when destroying
This commit is contained in:
parent
3301b37803
commit
549310a7cd
2 changed files with 38 additions and 4 deletions
|
@ -358,6 +358,15 @@ midori_browser_session_cb (MidoriBrowser* browser,
|
||||||
g_free (config_path);
|
g_free (config_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
midori_browser_weak_notify_cb (MidoriBrowser* browser,
|
||||||
|
KatzeXbelItem* session)
|
||||||
|
{
|
||||||
|
g_object_disconnect (browser, "any-signal",
|
||||||
|
G_CALLBACK (midori_browser_session_cb), session, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char** argv)
|
char** argv)
|
||||||
|
@ -598,6 +607,8 @@ main (int argc,
|
||||||
G_CALLBACK (midori_browser_session_cb), session);
|
G_CALLBACK (midori_browser_session_cb), session);
|
||||||
g_signal_connect_after (browser, "remove-tab",
|
g_signal_connect_after (browser, "remove-tab",
|
||||||
G_CALLBACK (midori_browser_session_cb), session);
|
G_CALLBACK (midori_browser_session_cb), session);
|
||||||
|
g_object_weak_ref (G_OBJECT (session),
|
||||||
|
(GWeakNotify)(midori_browser_weak_notify_cb), browser);
|
||||||
|
|
||||||
/* Load extensions */
|
/* Load extensions */
|
||||||
JSGlobalContextRef js_context = gjs_global_context_new ();
|
JSGlobalContextRef js_context = gjs_global_context_new ();
|
||||||
|
|
|
@ -115,6 +115,9 @@ enum
|
||||||
|
|
||||||
static guint signals[LAST_SIGNAL];
|
static guint signals[LAST_SIGNAL];
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_browser_dispose (GObject* object);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_browser_finalize (GObject* object);
|
midori_browser_finalize (GObject* object);
|
||||||
|
|
||||||
|
@ -787,6 +790,13 @@ midori_browser_tab_destroy_cb (GtkWidget* widget,
|
||||||
}
|
}
|
||||||
|
|
||||||
_midori_browser_update_actions (browser);
|
_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);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1190,6 +1200,7 @@ midori_browser_class_init (MidoriBrowserClass* class)
|
||||||
class->quit = _midori_browser_quit;
|
class->quit = _midori_browser_quit;
|
||||||
|
|
||||||
GObjectClass* gobject_class = G_OBJECT_CLASS (class);
|
GObjectClass* gobject_class = G_OBJECT_CLASS (class);
|
||||||
|
gobject_class->dispose = midori_browser_dispose;
|
||||||
gobject_class->finalize = midori_browser_finalize;
|
gobject_class->finalize = midori_browser_finalize;
|
||||||
gobject_class->set_property = midori_browser_set_property;
|
gobject_class->set_property = midori_browser_set_property;
|
||||||
gobject_class->get_property = midori_browser_get_property;
|
gobject_class->get_property = midori_browser_get_property;
|
||||||
|
@ -2898,7 +2909,7 @@ midori_browser_size_allocate_cb (MidoriBrowser* browser,
|
||||||
static void
|
static void
|
||||||
midori_browser_destroy_cb (MidoriBrowser* browser)
|
midori_browser_destroy_cb (MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
/* Destroy tabs first, so widgets can still see window elements on destroy */
|
/* Destroy tabs first, so child widgets don't need special care */
|
||||||
gtk_container_foreach (GTK_CONTAINER (browser->notebook),
|
gtk_container_foreach (GTK_CONTAINER (browser->notebook),
|
||||||
(GtkCallback) gtk_widget_destroy, NULL);
|
(GtkCallback) gtk_widget_destroy, NULL);
|
||||||
}
|
}
|
||||||
|
@ -3560,6 +3571,18 @@ midori_browser_init (MidoriBrowser* browser)
|
||||||
browser->close_buttons = NULL;
|
browser->close_buttons = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_browser_dispose (GObject* object)
|
||||||
|
{
|
||||||
|
MidoriBrowser* browser = MIDORI_BROWSER (object);
|
||||||
|
|
||||||
|
/* We are done, the session mustn't change anymore */
|
||||||
|
if (browser->proxy_xbel_folder)
|
||||||
|
katze_object_assign (browser->proxy_xbel_folder, NULL);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (midori_browser_parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_browser_finalize (GObject* object)
|
midori_browser_finalize (GObject* object)
|
||||||
{
|
{
|
||||||
|
@ -3569,9 +3592,6 @@ midori_browser_finalize (GObject* object)
|
||||||
g_list_free (browser->tab_titles);
|
g_list_free (browser->tab_titles);
|
||||||
g_list_free (browser->close_buttons);
|
g_list_free (browser->close_buttons);
|
||||||
|
|
||||||
if (browser->proxy_xbel_folder)
|
|
||||||
katze_xbel_item_unref (browser->proxy_xbel_folder);
|
|
||||||
|
|
||||||
if (browser->settings)
|
if (browser->settings)
|
||||||
g_object_unref (browser->settings);
|
g_object_unref (browser->settings);
|
||||||
if (browser->trash)
|
if (browser->trash)
|
||||||
|
@ -4133,6 +4153,9 @@ midori_browser_get_current_web_view (MidoriBrowser* browser)
|
||||||
*
|
*
|
||||||
* Note that this implicitly creates proxy xbel items of all web views.
|
* Note that this implicitly creates proxy xbel items of all web views.
|
||||||
*
|
*
|
||||||
|
* Note: Calling this function doesn't add a reference and the browser
|
||||||
|
* may release its reference at some point.
|
||||||
|
*
|
||||||
* Return value: the proxy #KatzeXbelItem
|
* Return value: the proxy #KatzeXbelItem
|
||||||
**/
|
**/
|
||||||
KatzeXbelItem*
|
KatzeXbelItem*
|
||||||
|
|
Loading…
Reference in a new issue