diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/e-shell-view.c | 45 | ||||
-rw-r--r-- | shell/e-shell-window-actions.c | 73 | ||||
-rw-r--r-- | shell/e-shell-window-actions.h | 10 | ||||
-rw-r--r-- | shell/e-shell-window-private.c | 1 | ||||
-rw-r--r-- | shell/e-shell-window-private.h | 2 | ||||
-rw-r--r-- | shell/e-shell-window.c | 40 | ||||
-rw-r--r-- | shell/e-shell-window.h | 2 |
7 files changed, 157 insertions, 16 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c index d87f8b7632..fdffe92fd6 100644 --- a/shell/e-shell-view.c +++ b/shell/e-shell-view.c @@ -507,21 +507,6 @@ shell_view_constructed (GObject *object) } static void -shell_view_clear_search (EShellView *shell_view) -{ - e_shell_view_set_search_rule (shell_view, NULL); - e_shell_view_execute_search (shell_view); -} - -static void -shell_view_custom_search (EShellView *shell_view, - EFilterRule *custom_rule) -{ - e_shell_view_set_search_rule (shell_view, custom_rule); - e_shell_view_execute_search (shell_view); -} - -static void shell_view_toggled (EShellView *shell_view) { EShellViewPrivate *priv = shell_view->priv; @@ -553,6 +538,33 @@ shell_view_toggled (EShellView *shell_view) } static void +shell_view_clear_search (EShellView *shell_view) +{ + e_shell_view_set_search_rule (shell_view, NULL); + e_shell_view_execute_search (shell_view); +} + +static void +shell_view_custom_search (EShellView *shell_view, + EFilterRule *custom_rule) +{ + e_shell_view_set_search_rule (shell_view, custom_rule); + e_shell_view_execute_search (shell_view); +} + +static void +shell_view_update_actions (EShellView *shell_view) +{ + EShellWindow *shell_window; + EFocusTracker *focus_tracker; + + shell_window = e_shell_view_get_shell_window (shell_view); + focus_tracker = e_shell_window_get_focus_tracker (shell_window); + + e_focus_tracker_update_actions (focus_tracker); +} + +static void shell_view_class_init (EShellViewClass *class) { GObjectClass *object_class; @@ -574,9 +586,10 @@ shell_view_class_init (EShellViewClass *class) class->new_shell_sidebar = e_shell_sidebar_new; class->new_shell_taskbar = e_shell_taskbar_new; + class->toggled = shell_view_toggled; class->clear_search = shell_view_clear_search; class->custom_search = shell_view_custom_search; - class->toggled = shell_view_toggled; + class->update_actions = shell_view_update_actions; /** * EShellView:action: diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c index 4483347beb..5cdf2a932f 100644 --- a/shell/e-shell-window-actions.c +++ b/shell/e-shell-window-actions.c @@ -1437,6 +1437,27 @@ static GtkActionEntry shell_entries[] = { N_("Open the Evolution User Guide"), G_CALLBACK (action_contents_cb) }, + { "copy-clipboard", + GTK_STOCK_COPY, + NULL, + NULL, + N_("Copy the selection"), + NULL }, /* Handled by EFocusTracker */ + + { "cut-clipboard", + GTK_STOCK_CUT, + NULL, + NULL, + N_("Cut the selection"), + NULL }, /* Handled by EFocusTracker */ + + { "delete-selection", + GTK_STOCK_DELETE, + NULL, + NULL, + N_("Delete the selection"), + NULL }, /* Handled by EFocusTracker */ + { "faq", "help-faq", N_("Evolution _FAQ"), @@ -1465,6 +1486,13 @@ static GtkActionEntry shell_entries[] = { N_("Create a new window displaying this view"), G_CALLBACK (action_new_window_cb) }, + { "paste-clipboard", + GTK_STOCK_PASTE, + NULL, + NULL, + N_("Paste the clipboard"), + NULL }, /* Handled by EFocusTracker */ + { "preferences", GTK_STOCK_PREFERENCES, NULL, @@ -1528,6 +1556,13 @@ static GtkActionEntry shell_entries[] = { N_("Save the current search parameters"), G_CALLBACK (action_search_save_cb) }, + { "select-all", + GTK_STOCK_SELECT_ALL, + NULL, + "<Control>a", + N_("Select all text"), + NULL }, /* Handled by EFocusTracker */ + { "send-receive", "mail-send-receive", N_("Send / _Receive"), @@ -1629,6 +1664,25 @@ static GtkActionEntry shell_entries[] = { NULL } }; +static EPopupActionEntry shell_popup_entries[] = { + + { "popup-copy-clipboard", + NULL, + "copy-clipboard" }, + + { "popup-cut-clipboard", + NULL, + "cut-clipboard" }, + + { "popup-delete-selection", + NULL, + "delete-selection" }, + + { "popup-paste-clipboard", + NULL, + "paste-clipboard" } +}; + static GtkToggleActionEntry shell_toggle_entries[] = { { "show-sidebar", @@ -1811,6 +1865,7 @@ void e_shell_window_actions_init (EShellWindow *shell_window) { GtkActionGroup *action_group; + EFocusTracker *focus_tracker; GtkUIManager *ui_manager; g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); @@ -1824,6 +1879,9 @@ e_shell_window_actions_init (EShellWindow *shell_window) gtk_action_group_add_actions ( action_group, shell_entries, G_N_ELEMENTS (shell_entries), shell_window); + e_action_group_add_popup_actions ( + action_group, shell_popup_entries, + G_N_ELEMENTS (shell_popup_entries)); gtk_action_group_add_toggle_actions ( action_group, shell_toggle_entries, G_N_ELEMENTS (shell_toggle_entries), shell_window); @@ -1854,6 +1912,21 @@ e_shell_window_actions_init (EShellWindow *shell_window) G_N_ELEMENTS (shell_lockdown_print_setup_entries), shell_window); + /* Configure an EFocusTracker to manage selection actions. */ + + focus_tracker = e_focus_tracker_new (GTK_WINDOW (shell_window)); + e_focus_tracker_set_cut_clipboard_action ( + focus_tracker, ACTION (CUT_CLIPBOARD)); + e_focus_tracker_set_copy_clipboard_action ( + focus_tracker, ACTION (COPY_CLIPBOARD)); + e_focus_tracker_set_paste_clipboard_action ( + focus_tracker, ACTION (PASTE_CLIPBOARD)); + e_focus_tracker_set_delete_selection_action ( + focus_tracker, ACTION (DELETE_SELECTION)); + e_focus_tracker_set_select_all_action ( + focus_tracker, ACTION (SELECT_ALL)); + shell_window->priv->focus_tracker = focus_tracker; + /* Fine tuning. */ gtk_action_set_sensitive (ACTION (SEARCH_QUICK), FALSE); diff --git a/shell/e-shell-window-actions.h b/shell/e-shell-window-actions.h index 8636b69648..4833ad0c9f 100644 --- a/shell/e-shell-window-actions.h +++ b/shell/e-shell-window-actions.h @@ -35,6 +35,12 @@ E_SHELL_WINDOW_ACTION ((window), "close") #define E_SHELL_WINDOW_ACTION_CONTENTS(window) \ E_SHELL_WINDOW_ACTION ((window), "contents") +#define E_SHELL_WINDOW_ACTION_COPY_CLIPBOARD(window) \ + E_SHELL_WINDOW_ACTION ((window), "copy-clipboard") +#define E_SHELL_WINDOW_ACTION_CUT_CLIPBOARD(window) \ + E_SHELL_WINDOW_ACTION ((window), "cut-clipboard") +#define E_SHELL_WINDOW_ACTION_DELETE_SELECTION(window) \ + E_SHELL_WINDOW_ACTION ((window), "delete-selection") #define E_SHELL_WINDOW_ACTION_FAQ(window) \ E_SHELL_WINDOW_ACTION ((window), "faq") #define E_SHELL_WINDOW_ACTION_FORGET_PASSWORDS(window) \ @@ -51,6 +57,8 @@ E_SHELL_WINDOW_ACTION ((window), "new-window") #define E_SHELL_WINDOW_ACTION_PAGE_SETUP(window) \ E_SHELL_WINDOW_ACTION ((window), "page-setup") +#define E_SHELL_WINDOW_ACTION_PASTE_CLIPBOARD(window) \ + E_SHELL_WINDOW_ACTION ((window), "paste-clipboard") #define E_SHELL_WINDOW_ACTION_PREFERENCES(window) \ E_SHELL_WINDOW_ACTION ((window), "preferences") #define E_SHELL_WINDOW_ACTION_QUICK_REFERENCE(window) \ @@ -69,6 +77,8 @@ E_SHELL_WINDOW_ACTION ((window), "search-quick") #define E_SHELL_WINDOW_ACTION_SEARCH_SAVE(window) \ E_SHELL_WINDOW_ACTION ((window), "search-save") +#define E_SHELL_WINDOW_ACTION_SELECT_ALL(window) \ + E_SHELL_WINDOW_ACTION ((window), "select-all") #define E_SHELL_WINDOW_ACTION_SEND_RECEIVE(window) \ E_SHELL_WINDOW_ACTION ((window), "send-receive") #define E_SHELL_WINDOW_ACTION_SHOW_SIDEBAR(window) \ diff --git a/shell/e-shell-window-private.c b/shell/e-shell-window-private.c index 0d9dda59cb..a2805f46bf 100644 --- a/shell/e-shell-window-private.c +++ b/shell/e-shell-window-private.c @@ -473,6 +473,7 @@ e_shell_window_private_dispose (EShellWindow *shell_window) priv->shell = NULL; } + DISPOSE (priv->focus_tracker); DISPOSE (priv->ui_manager); g_hash_table_remove_all (priv->loaded_views); diff --git a/shell/e-shell-window-private.h b/shell/e-shell-window-private.h index 635b6b6630..87e18646c4 100644 --- a/shell/e-shell-window-private.h +++ b/shell/e-shell-window-private.h @@ -34,6 +34,7 @@ #include <widgets/misc/e-import-assistant.h> #include <widgets/misc/e-menu-tool-button.h> #include <widgets/misc/e-online-button.h> +#include <widgets/misc/e-popup-action.h> #include <e-shell.h> #include <e-shell-content.h> @@ -70,6 +71,7 @@ struct _EShellWindowPrivate { /*** UI Management ***/ + EFocusTracker *focus_tracker; GtkUIManager *ui_manager; guint custom_rule_merge_id; guint gal_view_merge_id; diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c index 25b56caecb..d3d6107e24 100644 --- a/shell/e-shell-window.c +++ b/shell/e-shell-window.c @@ -29,6 +29,7 @@ enum { PROP_0, PROP_ACTIVE_VIEW, + PROP_FOCUS_TRACKER, PROP_GEOMETRY, PROP_SAFE_MODE, PROP_SHELL, @@ -234,6 +235,12 @@ shell_window_get_property (GObject *object, E_SHELL_WINDOW (object))); return; + case PROP_FOCUS_TRACKER: + g_value_set_object ( + value, e_shell_window_get_focus_tracker ( + E_SHELL_WINDOW (object))); + return; + case PROP_SAFE_MODE: g_value_set_boolean ( value, e_shell_window_get_safe_mode ( @@ -609,6 +616,21 @@ shell_window_class_init (EShellWindowClass *class) G_PARAM_READWRITE)); /** + * EShellWindow:focus-tracker + * + * The shell window's #EFocusTracker. + **/ + g_object_class_install_property ( + object_class, + PROP_FOCUS_TRACKER, + g_param_spec_object ( + "focus-tracker", + _("Focus Tracker"), + _("The shell window's EFocusTracker"), + E_TYPE_FOCUS_TRACKER, + G_PARAM_READABLE)); + + /** * EShellWindow:geometry * * User-specified initial window geometry string. @@ -886,6 +908,24 @@ e_shell_window_get_shell_view_action (EShellWindow *shell_window, } /** + * e_shell_window_get_focus_tracker: + * @shell_window: an #EShellWindow + * + * Returns @shell_window<!-- -->'s focus tracker, which directs + * Cut, Copy, Paste and Select All main menu activations to the + * appropriate editable or selectable widget. + * + * Returns: the #EFocusTracker for @shell_window + **/ +EFocusTracker * +e_shell_window_get_focus_tracker (EShellWindow *shell_window) +{ + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); + + return shell_window->priv->focus_tracker; +} + +/** * e_shell_window_get_ui_manager: * @shell_window: an #EShellWindow * diff --git a/shell/e-shell-window.h b/shell/e-shell-window.h index bb88003955..4ac76ba5d4 100644 --- a/shell/e-shell-window.h +++ b/shell/e-shell-window.h @@ -29,6 +29,7 @@ #define E_SHELL_WINDOW_H #include <shell/e-shell.h> +#include <misc/e-focus-tracker.h> /* Standard GObject macros */ #define E_TYPE_SHELL_WINDOW \ @@ -94,6 +95,7 @@ struct _EShellView * GtkAction * e_shell_window_get_shell_view_action (EShellWindow *shell_window, const gchar *view_name); +EFocusTracker * e_shell_window_get_focus_tracker(EShellWindow *shell_window); GtkUIManager * e_shell_window_get_ui_manager (EShellWindow *shell_window); GtkAction * e_shell_window_get_action (EShellWindow *shell_window, const gchar *action_name); |