From ab07eafbc31dfd7c5cd5dd9498abec55ff1544f6 Mon Sep 17 00:00:00 2001 From: cptpcrd <31829097+cptpcrd@users.noreply.github.com> Date: Mon, 8 Jun 2020 09:27:09 -0400 Subject: [PATCH] Add --pass-volume-keys option to just pass volume keys --- i3lock.1 | 5 +++++ i3lock.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/i3lock.1 b/i3lock.1 index 425812e..93a4e46 100644 --- a/i3lock.1 +++ b/i3lock.1 @@ -199,6 +199,11 @@ XF86MonBrightnessUp, XF86MonBrightnessDown. Allow the following keys to be used while the screen is locked by passing them through: XF86PowerDown, XF86PowerOff, XF86Sleep. +.TP +.B \-\-pass\-volume\-keys +Allow the following keys to be used while the screen is locked by passing them through: +XF86AudioMute, XF86AudioLowerVolume, XF86AudioRaiseVolume. + .TP .B \-\-insidevercolor=rrggbbaa Sets the interior circle color while the password is being verified. diff --git a/i3lock.c b/i3lock.c index 58733d7..ecc78c3 100644 --- a/i3lock.c +++ b/i3lock.c @@ -236,6 +236,7 @@ bool skip_repeated_empty_password = false; bool pass_media_keys = false; bool pass_screen_keys = false; bool pass_power_keys = false; +bool pass_volume_keys = false; // for the rendering thread, so we can clean it up pthread_t draw_thread; @@ -700,6 +701,17 @@ static void handle_key_press(xcb_key_press_event_t *event) { } } + // volume keys + if (pass_volume_keys) { + switch(ksym) { + case XKB_KEY_XF86AudioMute: + case XKB_KEY_XF86AudioLowerVolume: + case XKB_KEY_XF86AudioRaiseVolume: + xcb_send_event(conn, true, screen->root, XCB_EVENT_MASK_BUTTON_PRESS, (char *)event); + return; + } + } + // return/enter/etc switch (ksym) { case XKB_KEY_j: @@ -1467,6 +1479,7 @@ int main(int argc, char *argv[]) { {"pass-media-keys", no_argument, NULL, 601}, {"pass-screen-keys", no_argument, NULL, 602}, {"pass-power-keys", no_argument, NULL, 603}, + {"pass-volume-keys", no_argument, NULL, 604}, // bar indicator stuff {"bar-indicator", no_argument, NULL, 700}, @@ -1943,6 +1956,9 @@ int main(int argc, char *argv[]) { case 603: pass_power_keys = true; break; + case 604: + pass_volume_keys = true; + break; // Bar indicator case 700: