wayland: Handle keyboard focus correctly
authorKristian Høgsberg <krh@bitplanet.net>
Thu, 27 Jan 2011 18:52:40 +0000 (13:52 -0500)
committerJørgen Lind <jorgen.lind@nokia.com>
Tue, 1 Feb 2011 13:38:25 +0000 (14:38 +0100)
Activate the window widget and update modifiers.

src/plugins/platforms/wayland/qwaylandinputdevice.cpp

index 03edc07..102a213 100644 (file)
@@ -282,19 +282,28 @@ void QWaylandInputDevice::inputHandleKeyboardFocus(void *data,
 {
     Q_UNUSED(input_device);
     Q_UNUSED(time);
-    Q_UNUSED(keys);
     QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data;
     QWaylandWindow *window;
-
-    if (inputDevice->mKeyboardFocus) {
-       window = inputDevice->mKeyboardFocus;
-       inputDevice->mKeyboardFocus = NULL;
+    uint32_t *k, *end;
+    uint32_t code;
+
+    end = (uint32_t *) ((char *) keys->data + keys->size);
+    inputDevice->mModifiers = 0;
+    for (k = (uint32_t *) keys->data; k < end; k++) {
+       code = *k + inputDevice->mXkb->min_key_code;
+       inputDevice->mModifiers |=
+           translateModifiers(inputDevice->mXkb->map->modmap[code]);
     }
 
     if (surface) {
        window = (QWaylandWindow *) wl_surface_get_user_data(surface);
        inputDevice->mKeyboardFocus = window;
+       QWindowSystemInterface::handleWindowActivated(window->widget());
+    } else {
+       inputDevice->mKeyboardFocus = NULL;
+       QWindowSystemInterface::handleWindowActivated(0);
     }
+
 }
 
 const struct wl_input_device_listener QWaylandInputDevice::inputDeviceListener = {