diff options
author | Peter Harvey <peter.a.harvey@gmail.com> | 2006-02-09 18:29:24 +0800 |
---|---|---|
committer | Peter Anthony Harvey <paharvey@src.gnome.org> | 2006-02-09 18:29:24 +0800 |
commit | 16b0cbaf01e356007d3257ece00d407aa13138f7 (patch) | |
tree | 236bad3be94268f3adccf9b7e78b3ef3faf41d32 /src | |
parent | 05c6fc746dbf135d87b214d0f741bf533eb16b5b (diff) | |
download | gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar.gz gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar.bz2 gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar.lz gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar.xz gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.tar.zst gsoc2013-epiphany-16b0cbaf01e356007d3257ece00d407aa13138f7.zip |
data/ui/epiphany-bookmark-editor-ui.xml
2006-02-09 Peter Harvey <peter.a.harvey@gmail.com>
* data/ui/epiphany-bookmark-editor-ui.xml
* src/bookmarks/ephy-bookmarks-editor.c
Restore the 'Show on Toolbar' functionality, implemented very
differently now.
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index e3cb8fa1c..c031a4cd0 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -49,6 +49,8 @@ #include "ephy-bookmarks-import.h" #include "ephy-bookmarks-export.h" #include "ephy-bookmarks-ui.h" +#include "ephy-bookmark-action.h" +#include "ephy-topic-action.h" #include "ephy-node-common.h" #include "ephy-node-view.h" #include "ephy-window.h" @@ -114,6 +116,8 @@ static void cmd_open_bookmarks_in_tabs (GtkAction *action, EphyBookmarksEditor *editor); static void cmd_open_bookmarks_in_browser (GtkAction *action, EphyBookmarksEditor *editor); +static void cmd_toolbar (GtkAction *action, + EphyBookmarksEditor *editor); static void cmd_delete (GtkAction *action, EphyBookmarksEditor *editor); static void cmd_bookmark_properties (GtkAction *action, @@ -229,6 +233,12 @@ static const GtkActionEntry ephy_bookmark_popup_entries [] = { G_CALLBACK (window_cmd_help_about) }, }; +static const GtkToggleActionEntry ephy_bookmark_toggle_entries [] = { + { "ShowOnToolbar", NULL, N_("_Show on Toolbar"), NULL, + N_("Show the selected bookmark on a toolbar"), + G_CALLBACK (cmd_toolbar), FALSE }, +}; + enum { VIEW_TITLE, @@ -417,6 +427,91 @@ delete_topic_dialog_construct (GtkWindow *parent, } static void +cmd_toolbar (GtkAction *action, + EphyBookmarksEditor *editor) +{ + EggToolbarsModel *model; + EphyNode *node; + gboolean show; + const char *tname; + char *name; + gint flags, tpos; + GList *selection; + GList *l; + + model = EGG_TOOLBARS_MODEL (ephy_shell_get_toolbars_model (ephy_shell_get_default (), FALSE)); + + for (tpos = 0; tpos < egg_toolbars_model_n_toolbars (model); tpos++) + { + tname = egg_toolbars_model_toolbar_nth (model, tpos); + if (tname != NULL && strcmp (tname, "Bookmarks") == 0) + break; + } + + if (tpos == egg_toolbars_model_n_toolbars (model)) + { + tpos = egg_toolbars_model_add_toolbar (model, -1, "Bookmarks"); + } + + if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->bm_view))) + { + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->bm_view)); + + node = selection->data; + name = ephy_bookmark_action_name (node); + flags = egg_toolbars_model_get_name_flags (model, name); + show = ((flags & EGG_TB_MODEL_NAME_USED) == 0); + g_free (name); + + for (l = selection; l; l = l->next) + { + node = l->data; + name = ephy_bookmark_action_name (node); + flags = egg_toolbars_model_get_name_flags (model, name); + if(show && ((flags & EGG_TB_MODEL_NAME_USED) == 0)) + { + egg_toolbars_model_add_item (model, tpos, -1, name); + } + else if(!show && ((flags & EGG_TB_MODEL_NAME_USED) != 0)) + { + egg_toolbars_model_delete_item (model, name); + } + g_free (name); + } + + g_list_free (selection); + } + else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->key_view))) + { + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->key_view)); + + node = selection->data; + name = ephy_topic_action_name (node); + flags = egg_toolbars_model_get_name_flags (model, name); + show = ((flags & EGG_TB_MODEL_NAME_USED) == 0); + g_free (name); + + for (l = selection; l; l = l->next) + { + node = l->data; + name = ephy_topic_action_name (node); + flags = egg_toolbars_model_get_name_flags (model, name); + if(show && ((flags & EGG_TB_MODEL_NAME_USED) == 0)) + { + egg_toolbars_model_add_item (model, tpos, -1, name); + } + else if(!show && ((flags & EGG_TB_MODEL_NAME_USED) != 0)) + { + egg_toolbars_model_delete_item (model, name); + } + g_free (name); + } + + g_list_free (selection); + } +} + +static void cmd_delete (GtkAction *action, EphyBookmarksEditor *editor) { @@ -1146,15 +1241,22 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) gboolean key_normal = FALSE; gboolean cut, copy, paste, select_all; gboolean mutable = TRUE; + gboolean showtoolbar = FALSE; + gboolean ontoolbar = FALSE; + EggToolbarsModel *model; GtkActionGroup *action_group; GtkAction *action; GList *selected; GtkWidget *focus_widget; int num_bmk_selected; + char *name; LOG ("Update menu sensitivity"); + model = EGG_TOOLBARS_MODEL (ephy_shell_get_toolbars_model + (ephy_shell_get_default(), FALSE)); + bmk_focus = ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->bm_view)); key_focus = ephy_node_view_is_target @@ -1200,6 +1302,11 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; key_normal = (priority == EPHY_NODE_NORMAL_PRIORITY); + name = ephy_topic_action_name (node); + ontoolbar = ((egg_toolbars_model_get_name_flags (model, name) + & EGG_TB_MODEL_NAME_USED) != 0); + g_free (name); + g_list_free (selected); } @@ -1213,6 +1320,11 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) id = ephy_node_get_id (node); mutable = !ephy_node_get_property_boolean (node, EPHY_NODE_BMK_PROP_IMMUTABLE); + + name = ephy_bookmark_action_name (node); + ontoolbar = ((egg_toolbars_model_get_name_flags (model, name) + & EGG_TB_MODEL_NAME_USED) != 0); + g_free (name); g_list_free (selected); } @@ -1240,6 +1352,8 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) delete = (bmk_focus && bmk_selection && mutable) || (key_selection && key_focus && key_normal); properties = bmk_focus && single_bmk_selected && mutable; + showtoolbar = (bmk_focus && bmk_selection) || + (key_focus && key_selection); action_group = editor->priv->action_group; action = gtk_action_group_get_action (action_group, "OpenInWindow"); @@ -1263,6 +1377,11 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) gtk_action_set_sensitive (action, paste); action = gtk_action_group_get_action (action_group, "SelectAll"); g_object_set (action, "sensitive", select_all, NULL); + action = gtk_action_group_get_action (action_group, "ShowOnToolbar"); + gtk_action_set_sensitive (action, showtoolbar); + g_signal_handlers_block_by_func (action, cmd_toolbar, editor); + gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), ontoolbar); + g_signal_handlers_unblock_by_func (action, cmd_toolbar, editor); } static gboolean @@ -1609,6 +1728,8 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) gtk_action_group_set_translation_domain (action_group, NULL); gtk_action_group_add_actions (action_group, ephy_bookmark_popup_entries, G_N_ELEMENTS (ephy_bookmark_popup_entries), editor); + gtk_action_group_add_toggle_actions (action_group, ephy_bookmark_toggle_entries, + G_N_ELEMENTS (ephy_bookmark_toggle_entries), editor); details_value = get_details_value (editor); gtk_action_group_add_radio_actions (action_group, |