diff options
author | David Bordoley <bordoley@msu.edu> | 2003-04-20 01:20:45 +0800 |
---|---|---|
committer | Dave Bordoley <Bordoley@src.gnome.org> | 2003-04-20 01:20:45 +0800 |
commit | b2c6abf1424cde68177727eabb25f9789cfdc33c (patch) | |
tree | ebe680da5b9c1130b87caf2ae72d7635c01534c4 /src | |
parent | 18bb6d0b335066b06f5e95d5ab27ac5a490e90b7 (diff) | |
download | gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar.gz gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar.bz2 gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar.lz gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar.xz gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.tar.zst gsoc2013-epiphany-b2c6abf1424cde68177727eabb25f9789cfdc33c.zip |
Add copy to the bookmark context menu.
2003-04-19 David Bordoley <bordoley@msu.edu>
* data/ui/epiphany-bookmark-editor-ui.xml.in:
Add copy to the bookmark context menu.
* data/ui/epiphany-history-window-ui.xml.in:
Add an edit menu. Add copy to history item context menu.
* src/ephy-history-window.c: (cmd_cut), (cmd_copy),
(cmd_paste), (cmd_select_all), (ephy_history_window_update_menu),
(ephy_history_window_construct):
Add edit menu actions. Update the edit menu when activated.
Support copying the location of a history item and change
the label to "Copy Location".
* src/bookmarks/ephy-bookmarks-editor.c: (cmd_copy),
(ephy_bookmarks_editor_update_menu):
Support copying the location of a bookmark and change
the label to "Copy Location".
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 51 | ||||
-rw-r--r-- | src/ephy-history-window.c | 145 |
2 files changed, 183 insertions, 13 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index d8887eaa7..8c49eb991 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -333,6 +333,23 @@ cmd_copy (EggAction *action, { gtk_editable_copy_clipboard (GTK_EDITABLE (widget)); } + + else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->bm_view))) + { + GList *selection; + + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->bm_view)); + + if (g_list_length (selection) == 1) + { + const char *tmp; + EphyNode *node = EPHY_NODE (selection->data); + tmp = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), tmp, -1); + } + + g_free (selection); + } } static void @@ -487,7 +504,7 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) { gboolean open_in_window, open_in_tab, rename, delete, properties; - const gchar *open_in_window_label, *open_in_tab_label; + const gchar *open_in_window_label, *open_in_tab_label, *copy_label; gboolean bmk_focus, key_focus; gboolean key_selection, bmk_selection; gboolean key_normal = FALSE; @@ -502,34 +519,36 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) (EPHY_NODE_VIEW (editor->priv->bm_view)); key_focus = ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->key_view)); - focus_widget = gtk_window_get_focus (GTK_WINDOW (editor)); + bmk_selection = ephy_node_view_has_selection + (EPHY_NODE_VIEW (editor->priv->bm_view), + &bmk_multiple_selection); + key_selection = ephy_node_view_has_selection + (EPHY_NODE_VIEW (editor->priv->key_view), NULL); if (GTK_IS_EDITABLE (focus_widget)) { gboolean has_selection; + gboolean clipboard_contains_text; has_selection = gtk_editable_get_selection_bounds (GTK_EDITABLE (focus_widget), NULL, NULL); + clipboard_contains_text = gtk_clipboard_wait_is_text_available + (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); - select_all = paste = TRUE; cut = has_selection; copy = has_selection; + paste = clipboard_contains_text; + select_all = TRUE; } else { - select_all = bmk_focus; cut = FALSE; - copy = FALSE; + copy = (bmk_focus && !bmk_multiple_selection && bmk_selection); paste = FALSE; + select_all = bmk_focus; } - bmk_selection = ephy_node_view_has_selection - (EPHY_NODE_VIEW (editor->priv->bm_view), - &bmk_multiple_selection); - key_selection = ephy_node_view_has_selection - (EPHY_NODE_VIEW (editor->priv->key_view), NULL); - selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->key_view)); if (key_focus && selected) { @@ -554,6 +573,15 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) open_in_tab_label = _("Open in New _Tab"); } + if (bmk_focus) + { + copy_label = _("_Copy Location"); + } + else + { + copy_label = _("_Copy"); + } + open_in_window = (bmk_focus && bmk_selection); open_in_tab = (bmk_focus && bmk_selection); rename = (bmk_focus && bmk_selection && !bmk_multiple_selection) || @@ -579,6 +607,7 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) g_object_set (action, "sensitive", cut, NULL); action = egg_action_group_get_action (action_group, "Copy"); g_object_set (action, "sensitive", copy, NULL); + g_object_set (action, "label", copy_label, NULL); action = egg_action_group_get_action (action_group, "Paste"); g_object_set (action, "sensitive", paste, NULL); action = egg_action_group_get_action (action_group, "SelectAll"); diff --git a/src/ephy-history-window.c b/src/ephy-history-window.c index 2c2cd8ec8..0f8952252 100644 --- a/src/ephy-history-window.c +++ b/src/ephy-history-window.c @@ -72,6 +72,14 @@ static void cmd_clear (EggAction *action, EphyHistoryWindow *editor); static void cmd_close (EggAction *action, EphyHistoryWindow *editor); +static void cmd_cut (EggAction *action, + EphyHistoryWindow *editor); +static void cmd_copy (EggAction *action, + EphyHistoryWindow *editor); +static void cmd_paste (EggAction *action, + EphyHistoryWindow *editor); +static void cmd_select_all (EggAction *action, + EphyHistoryWindow *editor); static void cmd_help_contents (EggAction *action, EphyHistoryWindow *editor); @@ -99,6 +107,7 @@ static GObjectClass *parent_class = NULL; static EggActionGroupEntry ephy_history_ui_entries [] = { /* Toplevel */ { "File", N_("_File"), NULL, NULL, NULL, NULL, NULL }, + { "Edit", N_("_Edit"), NULL, NULL, NULL, NULL, NULL }, { "Help", N_("_Help"), NULL, NULL, NULL, NULL, NULL }, { "FakeToplevel", (""), NULL, NULL, NULL, NULL, NULL }, @@ -108,12 +117,24 @@ static EggActionGroupEntry ephy_history_ui_entries [] = { { "OpenInTab", N_("Open in New _Tab"), NULL, "<shift><control>O", NULL, G_CALLBACK (cmd_open_bookmarks_in_tabs), NULL }, - { "Clear", N_("Clea_r"), GTK_STOCK_CLEAR, NULL, + { "Clear", N_("C_lear History"), GTK_STOCK_CLEAR, NULL, NULL, G_CALLBACK (cmd_clear), NULL }, { "Close", N_("_Close"), GTK_STOCK_CLOSE, "<control>W", NULL, G_CALLBACK (cmd_close), NULL }, + { "Cut", N_("Cu_t"), GTK_STOCK_CUT, "<control>X", + NULL, G_CALLBACK (cmd_cut), NULL }, + + { "Copy", N_("_Copy"), GTK_STOCK_COPY, "<control>C", + NULL, G_CALLBACK (cmd_copy), NULL }, + + { "Paste", N_("_Paste"), GTK_STOCK_PASTE, "<control>V", + NULL, G_CALLBACK (cmd_paste), NULL }, + + { "SelectAll", N_("Select _All"), NULL, "<control>A", + NULL, G_CALLBACK (cmd_select_all), NULL }, + { "HelpContents", N_("_Contents"), GTK_STOCK_HELP, "F1", NULL, G_CALLBACK (cmd_help_contents), NULL }, @@ -203,6 +224,79 @@ cmd_open_bookmarks_in_browser (EggAction *action, } static void +cmd_cut (EggAction *action, + EphyHistoryWindow *editor) +{ + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + + if (GTK_IS_EDITABLE (widget)) + { + gtk_editable_cut_clipboard (GTK_EDITABLE (widget)); + } +} + +static void +cmd_copy (EggAction *action, + EphyHistoryWindow *editor) +{ + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + + if (GTK_IS_EDITABLE (widget)) + { + gtk_editable_copy_clipboard (GTK_EDITABLE (widget)); + } + + else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->pages_view))) + { + GList *selection; + + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->pages_view)); + + if (g_list_length (selection) == 1) + { + const char *tmp; + EphyNode *node = EPHY_NODE (selection->data); + tmp = ephy_node_get_property_string (node, EPHY_NODE_PAGE_PROP_LOCATION); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), tmp, -1); + } + + g_free (selection); + } +} + +static void +cmd_paste (EggAction *action, + EphyHistoryWindow *editor) +{ + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + + if (GTK_IS_EDITABLE (widget)) + { + gtk_editable_paste_clipboard (GTK_EDITABLE (widget)); + } +} + +static void +cmd_select_all (EggAction *action, + EphyHistoryWindow *editor) +{ + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + GtkWidget *pages_view = editor->priv->pages_view; + + if (GTK_IS_EDITABLE (widget)) + { + gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1); + } + else if (ephy_node_view_is_target (EPHY_NODE_VIEW (pages_view))) + { + GtkTreeSelection *sel; + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (pages_view)); + gtk_tree_selection_select_all (sel); + } +} + +static void cmd_help_contents (EggAction *action, EphyHistoryWindow *editor) { @@ -320,17 +414,43 @@ static void ephy_history_window_update_menu (EphyHistoryWindow *editor) { gboolean open_in_window, open_in_tab; + gboolean cut, copy, paste, select_all; gboolean pages_focus, pages_selection; gboolean pages_multiple_selection; EggActionGroup *action_group; EggAction *action; - char *open_in_window_label, *open_in_tab_label; + char *open_in_window_label, *open_in_tab_label, *copy_label; + GtkWidget *focus_widget; pages_focus = ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->pages_view)); pages_selection = ephy_node_view_has_selection (EPHY_NODE_VIEW (editor->priv->pages_view), &pages_multiple_selection); + focus_widget = gtk_window_get_focus (GTK_WINDOW (editor)); + + if (GTK_IS_EDITABLE (focus_widget)) + { + gboolean has_selection; + gboolean clipboard_contains_text; + + has_selection = gtk_editable_get_selection_bounds + (GTK_EDITABLE (focus_widget), NULL, NULL); + clipboard_contains_text = gtk_clipboard_wait_is_text_available + (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)); + + cut = has_selection; + copy = has_selection; + paste = clipboard_contains_text; + select_all = TRUE; + } + else + { + cut = FALSE; + copy = (pages_focus && !pages_multiple_selection && pages_selection); + paste = FALSE; + select_all = pages_focus; + } if (pages_multiple_selection) { @@ -343,6 +463,16 @@ ephy_history_window_update_menu (EphyHistoryWindow *editor) open_in_tab_label = _("Open in New _Tab"); } + if (pages_focus) + { + copy_label = _("_Copy Location"); + } + else + { + copy_label = _("_Copy"); + } + + open_in_window = (pages_focus && pages_selection); open_in_tab = (pages_focus && pages_selection); @@ -353,6 +483,15 @@ ephy_history_window_update_menu (EphyHistoryWindow *editor) action = egg_action_group_get_action (action_group, "OpenInTab"); g_object_set (action, "sensitive", open_in_tab, NULL); g_object_set (action, "label", open_in_tab_label, NULL); + action = egg_action_group_get_action (action_group, "Cut"); + g_object_set (action, "sensitive", cut, NULL); + action = egg_action_group_get_action (action_group, "Copy"); + g_object_set (action, "sensitive", copy, NULL); + g_object_set (action, "label", copy_label, NULL); + action = egg_action_group_get_action (action_group, "Paste"); + g_object_set (action, "sensitive", paste, NULL); + action = egg_action_group_get_action (action_group, "SelectAll"); + g_object_set (action, "sensitive", select_all, NULL); } static void @@ -582,6 +721,8 @@ ephy_history_window_construct (EphyHistoryWindow *editor) /* Update menu sensitivity before showing them */ menu = egg_menu_merge_get_widget (ui_merge, "/menu/FileMenu"); g_signal_connect (menu, "activate", G_CALLBACK (menu_activate_cb), editor); + menu = egg_menu_merge_get_widget (ui_merge, "/menu/EditMenu"); + g_signal_connect (menu, "activate", G_CALLBACK (menu_activate_cb), editor); hpaned = gtk_hpaned_new (); gtk_container_set_border_width (GTK_CONTAINER (hpaned), 6); |