summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Murphy <hello@itsjamie.dev>2022-07-11 11:03:43 -0700
committerJamie <hello@itsjamie.dev>2022-07-11 18:08:00 +0000
commit9822ed6f82e33ffacef41a903e4fa34b84104d0d (patch)
tree679c84543b3d8305dadba159d3609976cda1cbbf
parentc02462537affa4117b59731de141e14da32b415f (diff)
downloadepiphany-9822ed6f82e33ffacef41a903e4fa34b84104d0d.tar.gz
WebExtensions: Create new function for handling command accelerators
Part-of: <https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1171>
-rw-r--r--src/webextension/api/commands.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/src/webextension/api/commands.c b/src/webextension/api/commands.c
index bc7dd7f9a..4316dc77b 100644
--- a/src/webextension/api/commands.c
+++ b/src/webextension/api/commands.c
@@ -69,27 +69,35 @@ destroy_action (EphyWebExtension *self,
g_action_map_remove_action (G_ACTION_MAP (ephy_shell_get_default ()), action_name);
}
+void
+set_accel_for_action (EphyWebExtension *self,
+ WebExtensionCommand *command)
+{
+ g_auto (GStrv) current_actions = gtk_application_get_actions_for_accel (GTK_APPLICATION (ephy_shell_get_default ()),
+ command->accelerator);
+ g_autofree char *action_name = get_accel_action_name (self, command);
+
+ if (current_actions[0] != NULL) {
+ g_debug ("commands: Accelerator %s already set, not overriding", command->accelerator);
+ return;
+ }
+
+ gtk_application_set_accels_for_action (GTK_APPLICATION (ephy_shell_get_default ()),
+ action_name,
+ (const char *[]) { command->accelerator, NULL });
+}
+
static void
setup_action (EphyWebExtension *self,
WebExtensionCommand *command)
{
- const char * const accels[] = { command->accelerator, NULL };
g_autofree char *action_name = get_action_name (self, command);
g_autofree char *accel_action_name = get_accel_action_name (self, command);
g_autoptr (GSimpleAction) action = g_simple_action_new (action_name, NULL);
- g_autofree char **current_actions = gtk_application_get_actions_for_accel (GTK_APPLICATION (ephy_shell_get_default ()),
- accels[0]);
g_action_map_add_action (G_ACTION_MAP (ephy_shell_get_default ()), G_ACTION (action));
- if (current_actions[0] != NULL) {
- g_warning ("Accelerator %s already set, not overriding", command->accelerator);
- return;
- }
-
- gtk_application_set_accels_for_action (GTK_APPLICATION (ephy_shell_get_default ()),
- accel_action_name,
- accels);
+ set_accel_for_action (self, command);
g_signal_connect (action, "activate", G_CALLBACK (on_command_activated), self);
/* Lazy way to pass this info to on_command_activated(). */
@@ -240,17 +248,7 @@ commands_handler_update (EphyWebExtensionSender *sender,
}
if (shortcut) {
- g_autofree char **current_accels = gtk_application_get_actions_for_accel (GTK_APPLICATION (ephy_shell_get_default ()),
- command->accelerator);
- action_name = get_accel_action_name (sender->extension, command);
-
- if (current_accels[0] != NULL) {
- g_warning ("Accelerator %s already set, not overriding", command->accelerator);
- } else {
- gtk_application_set_accels_for_action (GTK_APPLICATION (ephy_shell_get_default ()),
- action_name,
- (const char *[]) { command->accelerator, NULL });
- }
+ set_accel_for_action (sender->extension, command);
}
g_task_return_pointer (task, NULL, NULL);