diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index bc52fb1..dbca37d 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -1402,6 +1402,7 @@ touch_handle_down (void              *data,
     GDK_WAYLAND_DISPLAY (device->display);
   GdkWaylandTouchData *touch;
   GdkEvent *event;
+  GdkEvent *mevent;
 
   _gdk_wayland_display_update_serial (wayland_display, serial);
 
@@ -1415,6 +1416,34 @@ touch_handle_down (void              *data,
   GDK_NOTE (EVENTS,
             g_message ("touch begin %f %f", event->touch.x, event->touch.y));
 
+  if (event->touch.window != device->pointer_focus)
+    {
+      if (device->pointer_focus)
+        g_object_unref (device->pointer_focus);
+
+      device->pointer_focus = wl_surface_get_user_data(wl_surface);
+      g_object_ref(device->pointer_focus);
+
+      mevent = gdk_event_new (GDK_ENTER_NOTIFY);
+      mevent->crossing.window = g_object_ref (device->pointer_focus);
+      gdk_event_set_device (mevent, gdk_event_get_device (event));
+      gdk_event_set_source_device (mevent, gdk_event_get_source_device (event));
+      mevent->crossing.subwindow = NULL;
+      mevent->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
+      mevent->crossing.mode = GDK_CROSSING_NORMAL;
+      mevent->crossing.detail = GDK_NOTIFY_ANCESTOR;
+      mevent->crossing.focus = TRUE;
+      mevent->crossing.state = 0;
+
+      mevent->crossing.x = event->touch.x;
+      mevent->crossing.y = event->touch.y;
+      mevent->crossing.x_root = event->touch.x_root;
+      mevent->crossing.y_root = event->touch.y_root;
+
+      _gdk_event_set_pointer_emulated (mevent, TRUE);
+      _gdk_wayland_display_deliver_event (device->display, mevent);
+    }
+
   _gdk_wayland_display_deliver_event (device->display, event);
 }
 
