Pass input device and time in key_handler callback
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 19 Jan 2011 19:20:33 +0000 (14:20 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 19 Jan 2011 19:25:13 +0000 (14:25 -0500)
Move the modifiers to a input device getter function.

clients/resizor.c
clients/terminal.c
clients/view.c
clients/window.c
clients/window.h

index cd9bfdc..46d9cbf 100644 (file)
@@ -128,8 +128,8 @@ keyboard_focus_handler(struct window *window,
 }
 
 static void
-key_handler(struct window *window, uint32_t key, uint32_t sym,
-           uint32_t state, uint32_t modifiers, void *data)
+key_handler(struct window *window, struct input *input, uint32_t time,
+           uint32_t key, uint32_t sym, uint32_t state, void *data)
 {
        struct resizor *resizor = data;
 
index d3d7a0b..a89a5bf 100644 (file)
@@ -1872,13 +1872,21 @@ terminal_data(struct terminal *terminal, const char *data, size_t length)
 }
 
 static void
-key_handler(struct window *window, uint32_t key, uint32_t sym,
-           uint32_t state, uint32_t modifiers, void *data)
+static void
+key_handler(struct window *window, struct input *input, uint32_t time,
+           uint32_t key, uint32_t sym, uint32_t state, void *data)
 {
        struct terminal *terminal = data;
        char ch[MAX_RESPONSE];
+       uint32_t modifiers;
        int len = 0;
 
+       modifiers = input_get_modifiers(input);
+       if ((modifiers & WINDOW_MODIFIER_CONTROL) &&
+           (modifiers & WINDOW_MODIFIER_SHIFT) &&
+           state && handle_bound_key(terminal, input, sym, 0))
+               return;
+
        switch (sym) {
        case XK_F11:
                if (!state)
index 5b81c45..db94dca 100644 (file)
@@ -110,8 +110,8 @@ redraw_handler(struct window *window, void *data)
 }
 
 static void
-key_handler(struct window *window, uint32_t key, uint32_t unicode,
-           uint32_t state, uint32_t modifiers, void *data)
+key_handler(struct window *window, struct input *input, uint32_t time,
+           uint32_t key, uint32_t unicode, uint32_t state, void *data)
 {
        struct view *view = data;
 
index 13d7ece..f05405e 100644 (file)
@@ -922,8 +922,8 @@ window_handle_key(void *data, struct wl_input_device *input_device,
                input->modifiers &= ~d->xkb->map->modmap[code];
 
        if (window->key_handler)
-               (*window->key_handler)(window, key, sym, state,
-                                      input->modifiers, window->user_data);
+               (*window->key_handler)(window, input, time, key, sym, state,
+                                      window->user_data);
 }
 
 static void
@@ -1014,6 +1014,12 @@ input_get_input_device(struct input *input)
        return input->input_device;
 }
 
+uint32_t
+input_get_modifiers(struct input *input)
+{
+       return input->modifiers;
+}
+
 struct wl_drag *
 window_create_drag(struct window *window)
 {
index b4457bc..9d6a22a 100644 (file)
@@ -110,8 +110,9 @@ typedef void (*window_resize_handler_t)(struct window *window,
                                        void *data);
 typedef void (*window_redraw_handler_t)(struct window *window, void *data);
 typedef void (*window_frame_handler_t)(struct window *window, uint32_t frame, uint32_t timestamp, void *data);
-typedef void (*window_key_handler_t)(struct window *window, uint32_t key, uint32_t unicode,
-                                    uint32_t state, uint32_t modifiers, void *data);
+typedef void (*window_key_handler_t)(struct window *window, struct input *input,
+                                    uint32_t time, uint32_t key, uint32_t unicode,
+                                    uint32_t state, void *data);
 typedef void (*window_keyboard_focus_handler_t)(struct window *window,
                                                struct input *device, void *data);
 
@@ -236,6 +237,9 @@ window_activate_drag(struct wl_drag *drag, struct window *window,
 void
 input_get_position(struct input *input, int32_t *x, int32_t *y);
 
+uint32_t
+input_get_modifiers(struct input *input);
+
 struct wl_input_device *
 input_get_input_device(struct input *input);