From bf5ae80d6a2281da9a661cc59fa0de7b0b4cc13d Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Tue, 8 Apr 2003 19:44:22 +0000 Subject: Update. 2003-04-08 Marco Pesenti Gritti * lib/egg/egg-toolbars-group.c: * lib/egg/egg-toolbars-group.h: Update. * src/bookmarks/ephy-bookmarks.c: (ephy_bookmarks_class_init), (bookmarks_removed_cb), (topics_removed_cb), (ephy_bookmarks_init): * src/bookmarks/ephy-bookmarks.h: * src/bookmarks/ephy-new-bookmark.c: (ephy_new_bookmark_response_cb): * src/popup-commands.c: (popup_cmd_bookmark_link): * src/toolbar.c: (toolbar_get_action_name), (toolbar_get_action), (topic_remove_cb), (bookmark_remove_cb), (toolbar_init): * src/window-commands.c: (window_cmd_file_bookmark_page): Update toolbars when bookmarks and topics are removed. Use dialog_run for new_bookmark dialog. (Dave I hope this doesnt break something, but it's necessary to url dnd to toolbars to work correctly) --- ChangeLog | 22 ++++++++++++++ lib/egg/egg-toolbars-group.c | 25 ++++++++++++++++ lib/egg/egg-toolbars-group.h | 4 +++ src/bookmarks/ephy-bookmarks.c | 53 ++++++++++++++++++++++++++++++++++ src/bookmarks/ephy-bookmarks.h | 5 ++++ src/bookmarks/ephy-new-bookmark.c | 2 -- src/popup-commands.c | 3 +- src/toolbar.c | 61 +++++++++++++++++++++++++++++++++++---- src/window-commands.c | 3 +- 9 files changed, 168 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 34ec51925..284877ede 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2003-04-08 Marco Pesenti Gritti + + * lib/egg/egg-toolbars-group.c: + * lib/egg/egg-toolbars-group.h: + + Update. + + * src/bookmarks/ephy-bookmarks.c: (ephy_bookmarks_class_init), + (bookmarks_removed_cb), (topics_removed_cb), (ephy_bookmarks_init): + * src/bookmarks/ephy-bookmarks.h: + * src/bookmarks/ephy-new-bookmark.c: + (ephy_new_bookmark_response_cb): + * src/popup-commands.c: (popup_cmd_bookmark_link): + * src/toolbar.c: (toolbar_get_action_name), (toolbar_get_action), + (topic_remove_cb), (bookmark_remove_cb), (toolbar_init): + * src/window-commands.c: (window_cmd_file_bookmark_page): + + Update toolbars when bookmarks and topics are removed. + Use dialog_run for new_bookmark dialog. + (Dave I hope this doesnt break something, but it's necessary + to url dnd to toolbars to work correctly) + 2003-04-07 Marco Pesenti Gritti * lib/widgets/Makefile.am: diff --git a/lib/egg/egg-toolbars-group.c b/lib/egg/egg-toolbars-group.c index c99f0cd06..975456b8e 100755 --- a/lib/egg/egg-toolbars-group.c +++ b/lib/egg/egg-toolbars-group.c @@ -465,6 +465,31 @@ egg_toolbars_group_new (void) return t; } +static void +remove_action (EggToolbarsItem *item, + gpointer *data) +{ + char *action = data[0]; + EggToolbarsGroup *group = EGG_TOOLBARS_GROUP (data[1]); + + if (strcmp (item->action, action) == 0) + { + egg_toolbars_group_remove_item (group, item); + } +} + +void +egg_toolbars_group_remove_action (EggToolbarsGroup *group, + const char *action) +{ + gpointer data[2]; + data[0] = (char *)action; + data[1] = group; + egg_toolbars_group_foreach_item + (group, (EggToolbarsGroupForeachItemFunc) remove_action, data); + g_signal_emit (G_OBJECT (group), egg_toolbars_group_signals[CHANGED], 0); +} + void egg_toolbars_group_remove_toolbar (EggToolbarsGroup *t, EggToolbarsToolbar *toolbar) diff --git a/lib/egg/egg-toolbars-group.h b/lib/egg/egg-toolbars-group.h index 7e278dcf3..ec4163281 100755 --- a/lib/egg/egg-toolbars-group.h +++ b/lib/egg/egg-toolbars-group.h @@ -73,6 +73,10 @@ EggToolbarsGroup *egg_toolbars_group_new (void); void egg_toolbars_group_set_source (EggToolbarsGroup *group, const char *defaults, const char *user); +void egg_toolbars_group_remove_action (EggToolbarsGroup *group, + const char *action); + +/* These should be used only by editable toolbar */ EggToolbarsToolbar *egg_toolbars_group_add_toolbar (EggToolbarsGroup *t); void egg_toolbars_group_add_item (EggToolbarsGroup *t, EggToolbarsToolbar *parent, diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index cd159994d..5db21ad14 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -49,8 +49,17 @@ ephy_bookmarks_finalize (GObject *object); static void ephy_bookmarks_autocompletion_source_init (EphyAutocompletionSourceIface *iface); +enum +{ + BOOKMARK_REMOVE, + TOPIC_REMOVE, + LAST_SIGNAL +}; + static GObjectClass *parent_class = NULL; +static guint ephy_bookmarks_signals[LAST_SIGNAL] = { 0 }; + GType ephy_bookmarks_get_type (void) { @@ -160,6 +169,27 @@ ephy_bookmarks_class_init (EphyBookmarksClass *klass) parent_class = g_type_class_peek_parent (klass); object_class->finalize = ephy_bookmarks_finalize; + + ephy_bookmarks_signals[BOOKMARK_REMOVE] = + g_signal_new ("bookmark_remove", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EphyBookmarksClass, bookmark_remove), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + ephy_bookmarks_signals[TOPIC_REMOVE] = + g_signal_new ("topic_remove", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EphyBookmarksClass, topic_remove), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); } static void @@ -374,9 +404,27 @@ bookmarks_removed_cb (EphyNode *node, EphyNode *child, EphyBookmarks *eb) { + long id; + + id = ephy_node_get_id (child); + g_signal_emit (eb, ephy_bookmarks_signals[BOOKMARK_REMOVE], + 0, id); + ephy_bookmarks_emit_data_changed (eb); } +static void +topics_removed_cb (EphyNode *node, + EphyNode *child, + EphyBookmarks *eb) +{ + long id; + + id = ephy_node_get_id (child); + g_signal_emit (eb, ephy_bookmarks_signals[TOPIC_REMOVE], + 0, id); +} + static void ephy_bookmarks_init (EphyBookmarks *eb) { @@ -417,6 +465,11 @@ ephy_bookmarks_init (EphyBookmarks *eb) EPHY_NODE_KEYWORD_PROP_PRIORITY, &value); g_value_unset (&value); + g_signal_connect_object (G_OBJECT (eb->priv->keywords), + "child_removed", + G_CALLBACK (topics_removed_cb), + G_OBJECT (eb), + 0); ephy_node_add_child (eb->priv->keywords, eb->priv->bookmarks); diff --git a/src/bookmarks/ephy-bookmarks.h b/src/bookmarks/ephy-bookmarks.h index e31831c6f..174c3c930 100644 --- a/src/bookmarks/ephy-bookmarks.h +++ b/src/bookmarks/ephy-bookmarks.h @@ -63,6 +63,11 @@ struct EphyBookmarks struct EphyBookmarksClass { GObjectClass parent_class; + + void (* bookmark_remove) (EphyBookmarks *eb, + long id); + void (* topic_remove) (EphyBookmarks *eb, + long id); }; GType ephy_bookmarks_get_type (void); diff --git a/src/bookmarks/ephy-new-bookmark.c b/src/bookmarks/ephy-new-bookmark.c index 6eb5d7a12..f133e167d 100644 --- a/src/bookmarks/ephy-new-bookmark.c +++ b/src/bookmarks/ephy-new-bookmark.c @@ -183,8 +183,6 @@ ephy_new_bookmark_response_cb (GtkDialog *dialog, ephy_new_bookmark_add (new_bookmark); break; } - - gtk_widget_destroy (GTK_WIDGET (new_bookmark)); } static GtkWidget * diff --git a/src/popup-commands.c b/src/popup-commands.c index b66c92c31..2e2bb9080 100644 --- a/src/popup-commands.c +++ b/src/popup-commands.c @@ -162,7 +162,8 @@ popup_cmd_bookmark_link (EggAction *action, (EPHY_NEW_BOOKMARK (new_bookmark), title); ephy_new_bookmark_set_smarturl (EPHY_NEW_BOOKMARK (new_bookmark), rel); - gtk_widget_show (new_bookmark); + gtk_dialog_run (GTK_DIALOG (new_bookmark)); + gtk_widget_destroy (new_bookmark); } void diff --git a/src/toolbar.c b/src/toolbar.c index ff28353a0..18fc59f61 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -62,6 +62,8 @@ enum PROP_EPHY_WINDOW }; +static EggToolbarsGroup *toolbars_group = NULL; + static GObjectClass *parent_class = NULL; struct ToolbarPrivate @@ -197,6 +199,8 @@ toolbar_get_action_name (EggEditableToolbar *etoolbar, } } + LOG ("Action name is %s", res) + return res; } @@ -219,6 +223,7 @@ toolbar_get_action (EggEditableToolbar *etoolbar, } else if (g_str_has_prefix (name, "GoBookmarkId")) { + LOG ("Create action %s", name) if (!ephy_str_to_int (name + strlen ("GoBookmarkId"), &id)) { return NULL; @@ -228,6 +233,7 @@ toolbar_get_action (EggEditableToolbar *etoolbar, } else if (g_str_has_prefix (name, "GoTopicId")) { + LOG ("Create action %s", name) if (!ephy_str_to_int (name + strlen ("GoTopicId"), &id)) { return NULL; @@ -395,10 +401,46 @@ toolbar_set_window (Toolbar *t, EphyWindow *window) } static void -toolbar_init (Toolbar *t) +topic_remove_cb (EphyBookmarks *eb, + long id, + Toolbar *t) +{ + EggAction *action; + char *name; + + name = g_strdup_printf ("GoTopicId%ld", id); + action = egg_action_group_get_action (t->priv->action_group, name); + if (action) + { + egg_toolbars_group_remove_action (toolbars_group, action->name); + egg_action_group_remove_action (t->priv->action_group, action); + } + + g_free (name); +} + +static void +bookmark_remove_cb (EphyBookmarks *eb, + long id, + Toolbar *t) { - static EggToolbarsGroup *group = NULL; + EggAction *action; + char *name; + + name = g_strdup_printf ("GoBookmarkId%ld", id); + action = egg_action_group_get_action (t->priv->action_group, name); + if (action) + { + egg_toolbars_group_remove_action (toolbars_group, action->name); + egg_action_group_remove_action (t->priv->action_group, action); + } + g_free (name); +} + +static void +toolbar_init (Toolbar *t) +{ t->priv = g_new0 (ToolbarPrivate, 1); t->priv->window = NULL; @@ -410,18 +452,25 @@ toolbar_init (Toolbar *t) egg_editable_toolbar_add_drag_type (EGG_EDITABLE_TOOLBAR (t), EPHY_DND_URL_TYPE); - if (group == NULL) + if (toolbars_group == NULL) { char *user; + EphyBookmarks *bookmarks; user = g_build_filename (ephy_dot_dir (), "toolbar.xml", NULL); - group = egg_toolbars_group_new (); + toolbars_group = egg_toolbars_group_new (); egg_toolbars_group_set_source - (group, ephy_file ("epiphany-toolbar.xml"), user); + (toolbars_group, ephy_file ("epiphany-toolbar.xml"), user); g_free (user); + + bookmarks = ephy_shell_get_bookmarks (ephy_shell); + g_signal_connect (bookmarks, "bookmark_remove", + G_CALLBACK (bookmark_remove_cb), t); + g_signal_connect (bookmarks, "topic_remove", + G_CALLBACK (topic_remove_cb), t); } - g_object_set (t, "ToolbarsGroup", group, NULL); + g_object_set (t, "ToolbarsGroup", toolbars_group, NULL); } static void diff --git a/src/window-commands.c b/src/window-commands.c index a4c5844e0..f9e5ecf72 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -315,7 +315,8 @@ window_cmd_file_bookmark_page (EggAction *action, (EPHY_NEW_BOOKMARK (new_bookmark), title); ephy_new_bookmark_set_icon (EPHY_NEW_BOOKMARK (new_bookmark), icon); - gtk_widget_show (new_bookmark); + gtk_dialog_run (GTK_DIALOG (new_bookmark)); + gtk_widget_destroy (new_bookmark); } void -- cgit v1.2.3