Index: uspace/lib/ui/src/fixed.c
===================================================================
--- uspace/lib/ui/src/fixed.c	(revision 62223ec4ecd7ed2de2744dc2b41d1183c548223c)
+++ uspace/lib/ui/src/fixed.c	(revision 12f5a1be9347ae8a4c87b277c612c58c71f5f5fc)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2020 Jiri Svoboda
+ * Copyright (c) 2021 Jiri Svoboda
  * All rights reserved.
  *
@@ -46,4 +46,5 @@
 static void ui_fixed_ctl_destroy(void *);
 static errno_t ui_fixed_ctl_paint(void *);
+static ui_evclaim_t ui_fixed_ctl_kbd_event(void *, kbd_event_t *);
 static ui_evclaim_t ui_fixed_ctl_pos_event(void *, pos_event_t *);
 static void ui_fixed_ctl_unfocus(void *);
@@ -53,4 +54,5 @@
 	.destroy = ui_fixed_ctl_destroy,
 	.paint = ui_fixed_ctl_paint,
+	.kbd_event = ui_fixed_ctl_kbd_event,
 	.pos_event = ui_fixed_ctl_pos_event,
 	.unfocus = ui_fixed_ctl_unfocus
@@ -211,4 +213,27 @@
 }
 
+/** Handle fixed layout keyboard event.
+ *
+ * @param fixed Fixed layout
+ * @param kbd_event Keyboard event
+ * @return @c ui_claimed iff the event is claimed
+ */
+ui_evclaim_t ui_fixed_kbd_event(ui_fixed_t *fixed, kbd_event_t *event)
+{
+	ui_fixed_elem_t *elem;
+	ui_evclaim_t claimed;
+
+	elem = ui_fixed_first(fixed);
+	while (elem != NULL) {
+		claimed = ui_control_kbd_event(elem->control, event);
+		if (claimed == ui_claimed)
+			return ui_claimed;
+
+		elem = ui_fixed_next(elem);
+	}
+
+	return ui_unclaimed;
+}
+
 /** Handle fixed layout position event.
  *
@@ -273,4 +298,17 @@
 }
 
+/** Handle fixed layout control keyboard event.
+ *
+ * @param arg Argument (ui_fixed_t *)
+ * @param kbd_event Keyboard event
+ * @return @c ui_claimed iff the event is claimed
+ */
+ui_evclaim_t ui_fixed_ctl_kbd_event(void *arg, kbd_event_t *event)
+{
+	ui_fixed_t *fixed = (ui_fixed_t *) arg;
+
+	return ui_fixed_kbd_event(fixed, event);
+}
+
 /** Handle fixed layout control position event.
  *
