Update keyboard accelerators

Make accelerators for app actions work again (Quit, etc), add accel
for closing the window.
This commit is contained in:
Michael Gratton 2019-02-24 21:44:03 +11:00
parent e6f39db127
commit 937ed6b404
2 changed files with 31 additions and 12 deletions

View file

@ -47,6 +47,7 @@ public class GearyApplication : Gtk.Application {
// Common window actions
public const string ACTION_CLOSE = "close";
public const string ACTION_COPY = "copy";
public const string ACTION_HELP_OVERLAY = "show-help-overlay";
public const string ACTION_REDO = "redo";
public const string ACTION_UNDO = "undo";
@ -54,8 +55,8 @@ public class GearyApplication : Gtk.Application {
private const string ACTION_ABOUT = "about";
private const string ACTION_ACCOUNTS = "accounts";
private const string ACTION_COMPOSE = "compose";
private const string ACTION_MAILTO = "mailto";
private const string ACTION_HELP = "help";
private const string ACTION_MAILTO = "mailto";
private const string ACTION_PREFERENCES = "preferences";
private const string ACTION_QUIT = "quit";
@ -63,8 +64,8 @@ public class GearyApplication : Gtk.Application {
{ACTION_ABOUT, on_activate_about},
{ACTION_ACCOUNTS, on_activate_accounts},
{ACTION_COMPOSE, on_activate_compose},
{ACTION_MAILTO, on_activate_mailto, "s"},
{ACTION_HELP, on_activate_help},
{ACTION_MAILTO, on_activate_mailto, "s"},
{ACTION_PREFERENCES, on_activate_preferences},
{ACTION_QUIT, on_activate_quit},
};
@ -246,10 +247,18 @@ public class GearyApplication : Gtk.Application {
config = new Configuration(APP_ID);
// Application accels
add_app_accelerators(ACTION_COMPOSE, { "<Ctrl>N", "N" });
add_app_accelerators(ACTION_HELP, { "F1" });
add_app_accelerators(ACTION_QUIT, { "<Ctrl>Q" });
// Common window accels
add_window_accelerators(ACTION_CLOSE, { "<Ctrl>W" });
add_window_accelerators(ACTION_COPY, { "<Ctrl>C" });
add_window_accelerators(ACTION_HELP_OVERLAY, { "<Ctrl>F1", "<Ctrl>question" });
add_window_accelerators(ACTION_REDO, { "<Ctrl><Shift>Z" });
add_window_accelerators(ACTION_UNDO, { "<Ctrl>Z" });
ComposerWidget.add_window_accelerators(this);
yield controller.open_async(null);
@ -271,7 +280,12 @@ public class GearyApplication : Gtk.Application {
public void add_window_accelerators(string action,
string[] accelerators,
Variant? param = null) {
set_accels_for_action("win." + action, accelerators);
string name = "win." + action;
string[] all_accel = get_accels_for_action(name);
foreach (string accel in accelerators) {
all_accel += accel;
}
set_accels_for_action(name, all_accel);
}
public void show_accounts() {
@ -420,6 +434,12 @@ public class GearyApplication : Gtk.Application {
Posix.exit(1);
}
public void add_app_accelerators(string action,
string[] accelerators,
Variant? param = null) {
set_accels_for_action("app." + action, accelerators);
}
private void on_activate_about() {
Gtk.show_about_dialog(get_active_window(),
"program-name", NAME,

View file

@ -13,7 +13,6 @@
public class GearyController : Geary.BaseObject {
// Named actions.
public const string ACTION_NEW_MESSAGE = "new-message";
public const string ACTION_REPLY_TO_MESSAGE = "reply-to-message";
public const string ACTION_REPLY_ALL_MESSAGE = "reply-all-message";
public const string ACTION_FORWARD_MESSAGE = "forward-message";
@ -160,13 +159,14 @@ public class GearyController : Geary.BaseObject {
private Gee.List<ComposerWidget> waiting_to_close = new Gee.ArrayList<ComposerWidget>();
private const ActionEntry[] win_action_entries = {
{ACTION_NEW_MESSAGE, on_new_message },
{GearyApplication.ACTION_CLOSE, on_close },
{GearyApplication.ACTION_UNDO, on_revoke },
{ACTION_CONVERSATION_LIST, on_conversation_list },
{ACTION_FIND_IN_CONVERSATION, on_find_in_conversation_action },
{ACTION_SEARCH, on_search_activated },
{ACTION_EMPTY_SPAM, on_empty_spam },
{ACTION_EMPTY_TRASH, on_empty_trash },
{GearyApplication.ACTION_UNDO, on_revoke },
// Message actions
{ACTION_REPLY_TO_MESSAGE, on_reply_to_message_action },
{ACTION_REPLY_ALL_MESSAGE, on_reply_all_message_action },
@ -603,7 +603,6 @@ public class GearyController : Geary.BaseObject {
add_window_accelerators(ACTION_MARK_AS_NOT_SPAM, { "<Ctrl>J", "exclam" });
add_window_accelerators(ACTION_COPY_MENU, { "L" });
add_window_accelerators(ACTION_MOVE_MENU, { "M" });
add_window_accelerators(ACTION_NEW_MESSAGE, { "<Ctrl>N", "N" });
add_window_accelerators(ACTION_REPLY_TO_MESSAGE, { "<Ctrl>R", "R" });
add_window_accelerators(ACTION_REPLY_ALL_MESSAGE, { "<Ctrl><Shift>R", "<Shift>R" });
add_window_accelerators(ACTION_FORWARD_MESSAGE, { "<Ctrl>L", "F" });
@ -1246,9 +1245,9 @@ public class GearyController : Geary.BaseObject {
private void on_indicator_activated_composer(uint32 timestamp) {
on_indicator_activated_application(timestamp);
on_new_message(null);
compose();
}
private void on_indicator_activated_inbox(Geary.Folder folder, uint32 timestamp) {
on_indicator_activated_application(timestamp);
main_window.folder_list.select_folder(folder);
@ -2264,9 +2263,9 @@ public class GearyController : Geary.BaseObject {
this.application.exit();
}
}
private void on_new_message(SimpleAction? action) {
create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE);
private void on_close() {
this.application.exit();
}
private void on_reply_to_message(ConversationEmail target_view) {