aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
Diffstat (limited to 'sway')
-rw-r--r--sway/action-binder-v1.c15
-rw-r--r--sway/commands.c1
-rw-r--r--sway/commands/action.c18
-rw-r--r--sway/meson.build2
-rw-r--r--sway/server.c11
5 files changed, 47 insertions, 0 deletions
diff --git a/sway/action-binder-v1.c b/sway/action-binder-v1.c
new file mode 100644
index 00000000..bf6ffef5
--- /dev/null
+++ b/sway/action-binder-v1.c
@@ -0,0 +1,15 @@
+#include <wlr/types/wlr_action_binder_v1.h>
+
+void action_binder_v1_bind(struct wl_listener *listener, void *data) {
+ struct wlr_action_binder_v1_state *state = data;
+ struct wlr_action_binding_v1 *binding = NULL, *tmp = NULL;
+ wl_list_for_each_safe(binding, tmp, &state->bind_queue, link) {
+ wlr_action_binder_v1_bind(binding, "");
+ }
+}
+
+void action_binder_v1_unbind(struct wl_listener *listener, void *data) {
+}
+
+void action_binder_v1_delete(struct wl_listener *listener, void *data) {
+}
diff --git a/sway/commands.c b/sway/commands.c
index 8d003dfa..68879af7 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -112,6 +112,7 @@ static const struct cmd_handler config_handlers[] = {
/* Runtime-only commands. Keep alphabetized */
static const struct cmd_handler command_handlers[] = {
+ { "action", cmd_action },
{ "border", cmd_border },
{ "create_output", cmd_create_output },
{ "exit", cmd_exit },
diff --git a/sway/commands/action.c b/sway/commands/action.c
new file mode 100644
index 00000000..96cb3b59
--- /dev/null
+++ b/sway/commands/action.c
@@ -0,0 +1,18 @@
+#include "log.h"
+#include <wlr/types/wlr_action_binder_v1.h>
+#include "ext-action-binder-v1-protocol.h"
+#include "sway/commands.h"
+#include "sway/server.h"
+#include "sway/input/input-manager.h"
+
+struct cmd_results *cmd_action(int argc, char **argv) {
+ struct cmd_results *error = NULL;
+ if ((error = checkarg(argc, "action", EXPECTED_EQUAL_TO, 2))) {
+ return error;
+ }
+
+ wlr_action_binder_v1_trigger(server.action_binder, argv[0], argv[1],
+ EXT_ACTION_BINDING_V1_TRIGGER_TYPE_ONE_SHOT);
+
+ return cmd_results_new(CMD_SUCCESS, NULL);
+}
diff --git a/sway/meson.build b/sway/meson.build
index d937e425..b24d8fbc 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -1,4 +1,5 @@
sway_sources = files(
+ 'action-binder-v1.c',
'commands.c',
'config.c',
'criteria.c',
@@ -41,6 +42,7 @@ sway_sources = files(
'config/seat.c',
'config/input.c',
+ 'commands/action.c',
'commands/assign.c',
'commands/bar.c',
'commands/bind.c',
diff --git a/sway/server.c b/sway/server.c
index 684b1dbd..573a018b 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -350,6 +350,17 @@ bool server_init(struct sway_server *server) {
wl_list_init(&server->pending_launcher_ctxs);
+ server->action_binder = wlr_action_binder_v1_create(server->wl_display);
+ server->action_binder_bind.notify = action_binder_v1_bind;
+ wl_signal_add(&server->action_binder->events.bind,
+ &server->action_binder_bind);
+ server->action_binder_unbind.notify = action_binder_v1_unbind;
+ wl_signal_add(&server->action_binder->events.unbind,
+ &server->action_binder_unbind);
+ server->action_binder_destroy.notify = action_binder_v1_delete;
+ wl_signal_add(&server->action_binder->events.destroy,
+ &server->action_binder_destroy);
+
// Avoid using "wayland-0" as display socket
char name_candidate[16];
for (unsigned int i = 1; i <= 32; ++i) {