diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | embed/ephy-embed-dialog.c | 17 | ||||
-rw-r--r-- | src/ephy-tab.c | 5 |
4 files changed, 32 insertions, 2 deletions
@@ -1,5 +1,15 @@ 2003-02-28 Marco Pesenti Gritti <marco@it.gnome.org> + * TODO: + * embed/ephy-embed-dialog.c: (unset_embed), + (ephy_embed_dialog_finalize), (ephy_embed_dialog_set_embed): + * src/ephy-tab.c: (ephy_tab_init), (ephy_tab_destroy_brsr_cb): + + Fix embed dialog to pass a good EphyEmbed when the initial one + has been destroyed + +2003-02-28 Marco Pesenti Gritti <marco@it.gnome.org> + * data/glade/Makefile.am: * data/glade/toolbar-editor.glade: @@ -1,7 +1,6 @@ To do: - make popups less annoying -- embed dialogs crashes when the window has been closed - show when bookmarks has updated content - temporary bookmarks, maybe an expire checkbox in new bookmark dialog ? (I could be on crack here, would be nice to find a good solution though) @@ -30,3 +29,4 @@ Done: * titles in history for hosts too * history shows empty hosts sometimes !? * save bookmarks dialog state (current keyword) +* embed dialogs crashes when the window has been closed diff --git a/embed/ephy-embed-dialog.c b/embed/ephy-embed-dialog.c index cc019253a..7dbdcb215 100644 --- a/embed/ephy-embed-dialog.c +++ b/embed/ephy-embed-dialog.c @@ -106,6 +106,16 @@ ephy_embed_dialog_init (EphyEmbedDialog *dialog) } static void +unset_embed (EphyEmbedDialog *dialog) +{ + if (dialog->priv->embed != NULL) + { + g_object_remove_weak_pointer (G_OBJECT (dialog->priv->embed), + (gpointer *)&dialog->priv->embed); + } +} + +static void ephy_embed_dialog_finalize (GObject *object) { EphyEmbedDialog *dialog; @@ -117,6 +127,8 @@ ephy_embed_dialog_finalize (GObject *object) g_return_if_fail (dialog->priv != NULL); + unset_embed (dialog); + g_free (dialog->priv); G_OBJECT_CLASS (parent_class)->finalize (object); @@ -175,9 +187,12 @@ ephy_embed_dialog_new_with_parent (GtkWidget *parent_window, void ephy_embed_dialog_set_embed (EphyEmbedDialog *dialog, - EphyEmbed *embed) + EphyEmbed *embed) { + unset_embed (dialog); dialog->priv->embed = embed; + g_object_add_weak_pointer (G_OBJECT (dialog->priv->embed), + (gpointer *)&dialog->priv->embed); } EphyEmbed * diff --git a/src/ephy-tab.c b/src/ephy-tab.c index 8a0c20863..fa7756369 100644 --- a/src/ephy-tab.c +++ b/src/ephy-tab.c @@ -194,6 +194,8 @@ ephy_tab_init (EphyTab *tab) tab->priv = g_new0 (EphyTabPrivate, 1); tab->priv->embed = ephy_embed_new (G_OBJECT(single)); + ephy_embed_shell_add_embed (EPHY_EMBED_SHELL (ephy_shell), + tab->priv->embed); tab->priv->window = NULL; tab->priv->event = NULL; @@ -768,6 +770,9 @@ ephy_tab_destroy_brsr_cb (EphyEmbed *embed, EphyTab *tab) window = ephy_tab_get_window (tab); ephy_window_remove_tab (window, tab); + + ephy_embed_shell_remove_embed (EPHY_EMBED_SHELL (ephy_shell), + tab->priv->embed); } static gint |