]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
ply-input-device: Reboot when users press Ctrl+Alt+Delete
authorn3rdopolis <bluescreen_avenger@verizon.net>
Fri, 6 Jun 2025 03:49:53 +0000 (23:49 -0400)
committern3rdopolis <bluescreen_avenger@verizon.net>
Fri, 13 Jun 2025 18:15:13 +0000 (14:15 -0400)
src/libply-splash-core/ply-input-device.c

index 643ac34a7f1f6704c7e3fd0322568b6080991ec7..d10033c9b9d61fec9f009cc697d6d4f4e16c2744 100644 (file)
@@ -119,6 +119,9 @@ apply_key_to_input_buffer (ply_input_device_t *input_device,
                            int                 keycode,
                            ply_buffer_t       *input_buffer)
 {
+        xkb_mod_index_t control_mask = (UINT32_C (1) << xkb_keymap_mod_get_index (input_device->keymap, XKB_MOD_NAME_CTRL));
+        xkb_mod_index_t alt_mask = (UINT32_C (1) << xkb_keymap_mod_get_index (input_device->keymap, XKB_MOD_NAME_ALT));
+
         ssize_t character_size;
         bool was_compose_sequence;
 
@@ -141,6 +144,13 @@ apply_key_to_input_buffer (ply_input_device_t *input_device,
         case XKB_KEY_NoSymbol:
                 break;
         default:
+                if (symbol == XKB_KEY_Delete) {
+                        xkb_mod_mask_t mods_depressed = xkb_state_serialize_mods (input_device->keyboard_state, XKB_STATE_DEPRESSED);
+                        if (mods_depressed == (control_mask | alt_mask)) {
+                                kill (1, SIGINT);
+                        }
+                }
+
                 character_size = xkb_state_key_get_utf8 (input_device->keyboard_state, keycode, NULL, 0);
 
                 if (character_size > 0) {