]> Pileus Git - ~andy/gtk/blobdiff - gdk/x11/gdkdevicemanager-core-x11.c
GtkPlug: fix handling of key events for different layouts
[~andy/gtk] / gdk / x11 / gdkdevicemanager-core-x11.c
index f0b921492fb4342cd919fdf1121517e5b1d38bbe..0e49fb76afb6282f042852c461cfcf473bad236c 100644 (file)
@@ -12,9 +12,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
@@ -147,7 +145,7 @@ translate_key_event (GdkDisplay              *display,
   gdk_event_set_device (event, device_manager->core_keyboard);
 
   event->key.state = (GdkModifierType) xevent->xkey.state;
-  event->key.group = _gdk_x11_get_group_for_state (display, xevent->xkey.state);
+  event->key.group = gdk_x11_keymap_get_group_for_state (keymap, xevent->xkey.state);
   event->key.hardware_keycode = xevent->xkey.keycode;
 
   event->key.keyval = GDK_KEY_VoidSymbol;
@@ -163,7 +161,7 @@ translate_key_event (GdkDisplay              *display,
   _gdk_x11_keymap_add_virt_mods (keymap, &state);
   event->key.state |= state;
 
-  event->key.is_modifier = _gdk_x11_keymap_key_is_modifier (keymap, event->key.hardware_keycode);
+  event->key.is_modifier = gdk_x11_keymap_key_is_modifier (keymap, event->key.hardware_keycode);
 
   _gdk_x11_event_translate_keyboard_string (&event->key);
 
@@ -467,6 +465,9 @@ gdk_x11_device_manager_core_translate_event (GdkEventTranslator *translator,
           event->scroll.state = (GdkModifierType) xevent->xbutton.state;
           event->scroll.device = device_manager->core_pointer;
 
+          event->scroll.delta_x = 0;
+          event->scroll.delta_y = 0;
+
           if (!set_screen_from_root (display, event, xevent->xbutton.root))
             {
               return_val = FALSE;
@@ -662,6 +663,7 @@ gdk_x11_device_manager_core_translate_event (GdkEventTranslator *translator,
     case FocusOut:
       if (window)
         _gdk_device_manager_core_handle_focus (window,
+                                               xevent->xfocus.window,
                                                device_manager->core_keyboard,
                                                NULL,
                                                xevent->type == FocusIn,
@@ -793,6 +795,7 @@ _gdk_x11_event_translate_keyboard_string (GdkEventKey *event)
  */
 void
 _gdk_device_manager_core_handle_focus (GdkWindow *window,
+                                       Window     original,
                                        GdkDevice *device,
                                        GdkDevice *source_device,
                                        gboolean   focus_in,
@@ -817,6 +820,9 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
   if (!toplevel)
     return;
 
+  if (toplevel->focus_window == original)
+    return;
+
   had_focus = HAS_FOCUS (toplevel);
 
   switch (detail)