Handle per-device keyboard focus.
diff --git a/egl-compositor.c b/egl-compositor.c
index 49afe16..d6426c2 100644
--- a/egl-compositor.c
+++ b/egl-compositor.c
@@ -61,6 +61,7 @@
 
 	int grab;
 	struct egl_surface *grab_surface;
+	struct egl_surface *focus_surface;
 };
 
 struct egl_compositor {
@@ -813,8 +814,11 @@
 		wl_list_insert(device->ec->surface_list.prev, &es->link);
 
 		if (state) {
+			/* FIXME: We need callbacks when the surfaces
+			 * we reference here go away. */
 			device->grab++;
 			device->grab_surface = es;
+			device->focus_surface = es;
 		} else {
 			device->grab--;
 		}
@@ -836,7 +840,6 @@
 	   uint32_t key, uint32_t state)
 {
 	struct egl_compositor *ec = device->ec;
-	struct egl_surface *es;
 
 	if (key == KEY_ESC && state == 1) {
 		if (ec->overlay_target == ec->height)
@@ -845,14 +848,10 @@
 			ec->overlay_target += 200;
 		schedule_repaint(ec);
 	} else if (!wl_list_empty(&ec->surface_list)) {
-		/* FIXME: The event source device should track which
-		 * surface has its key focus and send the event there.
-		 * For now, just send it to the top surface, which
-		 * effectively gives us click to focus behavior. */
-		es = container_of(ec->surface_list.prev,
-				  struct egl_surface, link);
-		wl_surface_post_event(es->wl_surface, &device->base, 
-				      WL_INPUT_KEY, key, state);
+		if (device->focus_surface != NULL)
+			wl_surface_post_event(device->focus_surface->wl_surface,
+					      &device->base, 
+					      WL_INPUT_KEY, key, state);
 	}
 }