Terminate on Ctrl-Alt-Backspace
authorKristian Høgsberg <krh@redhat.com>
Fri, 18 Sep 2009 21:29:49 +0000 (17:29 -0400)
committerKristian Høgsberg <krh@redhat.com>
Fri, 18 Sep 2009 21:29:49 +0000 (17:29 -0400)
So that 10 years from now we can have a huge flamewar about it.

wayland-system-compositor.c

index 02cf84c..ab8eb76 100644 (file)
@@ -132,11 +132,12 @@ struct wlsc_compositor {
        uint32_t current_frame;
        struct wl_event_source *drm_source;
 
-       uint32_t meta_state;
+       uint32_t modifier_state;
        struct wl_list animate_list;
 };
 
-#define META_DOWN 256
+#define MODIFIER_CTRL  (1 << 8)
+#define MODIFIER_ALT   (1 << 9)
 
 struct wlsc_vector {
        GLdouble x, y, z;
@@ -1001,16 +1002,38 @@ notify_key(struct wlsc_input_device *device,
 {
        struct wlsc_compositor *compositor = device->ec;
        uint32_t *k, *end;
+       uint32_t modifier;
 
        if (!compositor->vt_active)
                return;
 
-       switch (key | compositor->meta_state) {
-       case KEY_BACKSPACE | META_DOWN:
+       switch (key | compositor->modifier_state) {
+       case KEY_BACKSPACE | MODIFIER_CTRL | MODIFIER_ALT:
                on_term_signal(SIGTERM, compositor);
                return;
        }
 
+       switch (key) {
+       case KEY_LEFTCTRL:
+       case KEY_RIGHTCTRL:
+               modifier = MODIFIER_CTRL;
+               break;
+
+       case KEY_LEFTALT:
+       case KEY_RIGHTALT:
+               modifier = MODIFIER_ALT;
+               break;
+
+       default:
+               modifier = 0;
+               break;
+       }
+
+       if (state)
+               compositor->modifier_state |= modifier;
+       else
+               compositor->modifier_state &= ~modifier;
+
        end = device->keys.data + device->keys.size;
        for (k = device->keys.data; k < end; k++) {
                if (*k == key)