aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2004-06-16 20:31:08 +0800
committerChristian Persch <chpe@src.gnome.org>2004-06-16 20:31:08 +0800
commite107b8c04820a45b8b4daca62e767cdfd8e62e23 (patch)
tree536c5f23466c16b391603b2634ca32f58fddbf6c /src
parenta6c12b524b75382eb362e400df3b40c23bf24067 (diff)
downloadgsoc2013-epiphany-e107b8c04820a45b8b4daca62e767cdfd8e62e23.tar.gz
gsoc2013-epiphany-e107b8c04820a45b8b4daca62e767cdfd8e62e23.tar.zst
gsoc2013-epiphany-e107b8c04820a45b8b4daca62e767cdfd8e62e23.zip
Go back to construction the toolbar when the model is set, fixes bug
2004-06-16 Christian Persch <chpe@cvs.gnome.org> * lib/egg/egg-editable-toolbar.c: (egg_editable_toolbar_disconnect_model), (egg_editable_toolbar_deconstruct), (egg_editable_toolbar_set_model), (egg_editable_toolbar_class_init), (egg_editable_toolbar_finalize), (egg_editable_toolbar_new), (egg_editable_toolbar_new_with_model), (egg_editable_toolbar_set_fixed): * lib/egg/egg-editable-toolbar.h: * lib/egg/egg-toolbars-model.c: (egg_toolbars_model_get_flags), (parse_toolbars): * src/bookmarks/ephy-bookmarksbar.c: (ephy_bookmarksbar_set_window), (ephy_bookmarksbar_class_init): * src/ephy-window.c: (ephy_window_fullscreen), (ephy_window_unfullscreen), (ephy_window_init): * src/toolbar.c: (toolbar_style_changed_cb), (parent_set_cb), (toolbar_init), (toolbar_finalize), (toolbar_new): Go back to construction the toolbar when the model is set, fixes bug #144191. 2004-06-15 Marco Pesenti Gritti <marco@gnome.org>
Diffstat (limited to 'src')
-rw-r--r--src/bookmarks/ephy-bookmarksbar.c31
-rw-r--r--src/ephy-window.c21
-rwxr-xr-xsrc/toolbar.c55
3 files changed, 59 insertions, 48 deletions
diff --git a/src/bookmarks/ephy-bookmarksbar.c b/src/bookmarks/ephy-bookmarksbar.c
index 511b635fa..1d666c0c4 100644
--- a/src/bookmarks/ephy-bookmarksbar.c
+++ b/src/bookmarks/ephy-bookmarksbar.c
@@ -274,10 +274,12 @@ toolbar_added_cb (EggToolbarsModel *model,
static void
ephy_bookmarksbar_set_window (EphyBookmarksBar *toolbar,
- EphyWindow *window)
+ EphyWindow *window)
{
+ EggEditableToolbar *eggtoolbar = EGG_EDITABLE_TOOLBAR (toolbar);
EggToolbarsModel *model = toolbar->priv->toolbars_model;
GtkUIManager *manager = GTK_UI_MANAGER (window->ui_merge);
+ int i, n_toolbars;
g_return_if_fail (toolbar->priv->window == NULL);
g_return_if_fail (model != NULL);
@@ -294,17 +296,6 @@ ephy_bookmarksbar_set_window (EphyBookmarksBar *toolbar,
"MenuMerge", manager,
"ToolbarsModel", model,
NULL);
-}
-
-static void
-ephy_bookmarksbar_realize (GtkWidget *widget)
-{
- EggEditableToolbar *eggtoolbar = EGG_EDITABLE_TOOLBAR (widget);
- EphyBookmarksBar *toolbar = EPHY_BOOKMARKSBAR (widget);
- EggToolbarsModel *model = toolbar->priv->toolbars_model;
- int i, n_toolbars;
-
- GTK_WIDGET_CLASS (parent_class)->realize (widget);
g_signal_connect (model, "toolbar_added",
G_CALLBACK (toolbar_added_cb), toolbar);
@@ -324,18 +315,6 @@ ephy_bookmarksbar_realize (GtkWidget *widget)
}
static void
-ephy_bookmarksbar_unrealize (GtkWidget *widget)
-{
- EphyBookmarksBar *toolbar = EPHY_BOOKMARKSBAR (widget);
- EggToolbarsModel *model = toolbar->priv->toolbars_model;
-
- g_signal_handlers_disconnect_by_func
- (model, G_CALLBACK (toolbar_added_cb), toolbar);
-
- GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-}
-
-static void
ephy_bookmarksbar_init (EphyBookmarksBar *toolbar)
{
toolbar->priv = EPHY_BOOKMARKSBAR_GET_PRIVATE (toolbar);
@@ -393,7 +372,6 @@ static void
ephy_bookmarksbar_class_init (EphyBookmarksBarClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
EggEditableToolbarClass *eet_class = EGG_EDITABLE_TOOLBAR_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@@ -402,9 +380,6 @@ ephy_bookmarksbar_class_init (EphyBookmarksBarClass *klass)
object_class->set_property = ephy_bookmarksbar_set_property;
object_class->get_property = ephy_bookmarksbar_get_property;
- widget_class->realize = ephy_bookmarksbar_realize;
- widget_class->unrealize = ephy_bookmarksbar_unrealize;
-
eet_class->action_request = ephy_bookmarksbar_action_request;
g_object_class_install_property (object_class,
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 9de3366ae..49c177f7a 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -547,8 +547,10 @@ ephy_window_fullscreen (EphyWindow *window)
"size-changed", G_CALLBACK (size_changed_cb),
window);
- g_object_set (G_OBJECT (window->priv->toolbar), "ToolbarsModel",
- ephy_shell_get_toolbars_model (ephy_shell, TRUE), NULL);
+ egg_editable_toolbar_set_model
+ (EGG_EDITABLE_TOOLBAR (window->priv->toolbar),
+ EGG_TOOLBARS_MODEL (
+ ephy_shell_get_toolbars_model (ephy_shell, TRUE)));
sync_chromes_visibility (window);
}
@@ -565,8 +567,10 @@ ephy_window_unfullscreen (EphyWindow *window)
gtk_widget_destroy (window->priv->exit_fullscreen_popup);
window->priv->exit_fullscreen_popup = NULL;
- g_object_set (G_OBJECT (window->priv->toolbar), "ToolbarsModel",
- ephy_shell_get_toolbars_model (ephy_shell, FALSE), NULL);
+ egg_editable_toolbar_set_model
+ (EGG_EDITABLE_TOOLBAR (window->priv->toolbar),
+ EGG_TOOLBARS_MODEL (
+ ephy_shell_get_toolbars_model (ephy_shell, FALSE)));
sync_chromes_visibility (window);
}
@@ -1988,6 +1992,15 @@ ephy_window_init (EphyWindow *window)
manager = EPHY_EXTENSION (ephy_shell_get_extensions_manager (ephy_shell));
ephy_extension_attach_window (manager, window);
+ /* We only set the model now after attaching the extensions, so that
+ * extensions already have created their actions which may be on
+ * the toolbar
+ */
+ egg_editable_toolbar_set_model
+ (EGG_EDITABLE_TOOLBAR (window->priv->toolbar),
+ EGG_TOOLBARS_MODEL
+ (ephy_shell_get_toolbars_model (ephy_shell, FALSE)));
+
g_signal_connect (window, "window-state-event",
G_CALLBACK (ephy_window_state_event_cb),
window);
diff --git a/src/toolbar.c b/src/toolbar.c
index d2a0d79e5..cf6596f32 100755
--- a/src/toolbar.c
+++ b/src/toolbar.c
@@ -399,9 +399,9 @@ toolbar_set_window (Toolbar *t, EphyWindow *window)
}
static void
-toolbar_style_sync (GtkToolbar *toolbar,
- GtkToolbarStyle style,
- GtkWidget *spinner)
+toolbar_style_changed_cb (GtkToolbar *toolbar,
+ GtkToolbarStyle style,
+ GtkWidget *spinner)
{
gboolean small;
@@ -411,29 +411,51 @@ toolbar_style_sync (GtkToolbar *toolbar,
}
static void
-create_spinner (Toolbar *t)
+parent_set_cb (GtkWidget *item,
+ GtkObject *old_parent,
+ GtkWidget *spinner)
{
- GtkWidget *spinner;
- GtkToolbar *toolbar;
+ if (old_parent != NULL)
+ {
+ g_return_if_fail (GTK_IS_TOOLBAR (old_parent));
- spinner = ephy_spinner_new ();
- gtk_widget_show (spinner);
- t->priv->spinner = spinner;
+ g_signal_handlers_disconnect_by_func
+ (old_parent, G_CALLBACK (toolbar_style_changed_cb),
+ spinner);
+ }
- toolbar = egg_editable_toolbar_set_fixed
- (EGG_EDITABLE_TOOLBAR (t), spinner);
+ if (item->parent)
+ {
+ g_return_if_fail (GTK_IS_TOOLBAR (item->parent));
- g_signal_connect (toolbar, "style_changed",
- G_CALLBACK (toolbar_style_sync),
- spinner);
+ g_signal_connect (item->parent, "style_changed",
+ G_CALLBACK (toolbar_style_changed_cb),
+ spinner);
+ }
}
static void
toolbar_init (Toolbar *t)
{
+ GtkWidget *spinner;
+ GtkToolItem *item;
+
t->priv = EPHY_TOOLBAR_GET_PRIVATE (t);
- create_spinner (t);
+ spinner = ephy_spinner_new ();
+ t->priv->spinner = spinner;
+ g_object_ref (spinner);
+ gtk_object_sink (GTK_OBJECT (spinner));
+ gtk_widget_show (spinner);
+
+ item = gtk_tool_item_new ();
+ gtk_container_add (GTK_CONTAINER (item), spinner);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ g_signal_connect (item, "parent_set",
+ G_CALLBACK (parent_set_cb), spinner);
+
+ egg_editable_toolbar_set_fixed (EGG_EDITABLE_TOOLBAR (t), item);
}
static void
@@ -449,6 +471,8 @@ toolbar_finalize (GObject *object)
(egg_editable_toolbar_get_model (eggtoolbar),
G_CALLBACK (toolbar_added_cb), t);
+ g_object_unref (t->priv->spinner);
+
g_object_unref (t->priv->action_group);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -462,7 +486,6 @@ toolbar_new (EphyWindow *window)
return EPHY_TOOLBAR (g_object_new (EPHY_TYPE_TOOLBAR,
"window", window,
"MenuMerge", window->ui_merge,
- "ToolbarsModel", ephy_shell_get_toolbars_model (ephy_shell, FALSE),
NULL));
}