aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/kmscon-runtime-keymap-switch.patch')
-rw-r--r--gnu/packages/patches/kmscon-runtime-keymap-switch.patch20
1 files changed, 16 insertions, 4 deletions
diff --git a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
index deb5688daf..480aaecad2 100644
--- a/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
+++ b/gnu/packages/patches/kmscon-runtime-keymap-switch.patch
@@ -1,5 +1,9 @@
-By Mathieu Othacehe <m.othacehe@gmail.com>.
-Modified by Florian Pelz <pelzflorian@pelzflorian.de>.
+Make kmscon listen to a FIFO in /tmp that clients can write to
+to request a keymap change.
+
+Patch by Mathieu Othacehe <m.othacehe@gmail.com>.
+Modified by Florian Pelz <pelzflorian@pelzflorian.de>
+and Ludovic Courtès <ludo@gnu.org>.
diff --git a/src/pty.c b/src/pty.c
index 1443f4a..f64cb5b 100644
@@ -115,7 +119,7 @@ index 04e6cc9..ec44459 100644
uint16_t key_state,
uint16_t code);
diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c
-index 925c755..5d5c22e 100644
+index 925c755..8fe08f8 100644
--- a/src/uterm_input_uxkb.c
+++ b/src/uterm_input_uxkb.c
@@ -31,6 +31,9 @@
@@ -128,7 +132,7 @@ index 925c755..5d5c22e 100644
#include <xkbcommon/xkbcommon.h>
#include "shl_hook.h"
#include "shl_llog.h"
-@@ -178,6 +181,87 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data)
+@@ -178,6 +181,95 @@ static void timer_event(struct ev_timer *timer, uint64_t num, void *data)
shl_hook_call(dev->input->hook, dev->input, &dev->repeat_event);
}
@@ -169,6 +173,13 @@ index 925c755..5d5c22e 100644
+ model, layout, variant);
+ uxkb_desc_init(dev->input, model, layout, variant, options, NULL);
+
++ /* The client will now close the FIFO. Close it too, and re-create a
++ * FIFO so other clients can eventually connect. */
++ ev_eloop_rm_fd(fd);
++ close(dev->rupdate_fd);
++ dev->rupdate_fd = -1;
++ uxkb_dev_keymap_update(dev);
++
+ dev->state = xkb_state_new(dev->input->keymap);
+ if (!dev->state) {
+ llog_error(dev->input, "cannot create XKB state");
@@ -186,6 +197,7 @@ index 925c755..5d5c22e 100644
+ if (ret < 0)
+ return ret;
+
++ (void) unlink(file);
+ ret = mkfifo(file, S_IRWXU);
+ if (ret < 0) {
+ llog_warn(dev->input, "could not open fifo");