Index: uspace/lib/ui/include/ui/menu.h
===================================================================
--- uspace/lib/ui/include/ui/menu.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/include/ui/menu.h	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -59,4 +59,5 @@
 extern ui_evclaim_t ui_menu_pos_event(ui_menu_t *, gfx_coord2_t *,
     pos_event_t *);
+extern sysarg_t ui_menu_get_idev_id(ui_menu_t *);
 
 #endif
Index: uspace/lib/ui/include/ui/popup.h
===================================================================
--- uspace/lib/ui/include/ui/popup.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/include/ui/popup.h	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2021 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -54,4 +54,5 @@
 extern ui_resource_t *ui_popup_get_res(ui_popup_t *);
 extern gfx_context_t *ui_popup_get_gc(ui_popup_t *);
+extern sysarg_t ui_popup_get_idev_id(ui_popup_t *);
 
 #endif
Index: uspace/lib/ui/private/menu.h
===================================================================
--- uspace/lib/ui/private/menu.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/private/menu.h	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -70,4 +70,6 @@
 	/** Callback argument */
 	void *arg;
+	/** ID of device that activated entry */
+	sysarg_t idev_id;
 };
 
Index: uspace/lib/ui/private/popup.h
===================================================================
--- uspace/lib/ui/private/popup.h	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/private/popup.h	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2021 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -58,4 +58,6 @@
 	/** Placement rectangle */
 	gfx_rect_t place;
+	/** ID of device that sent input event */
+	sysarg_t idev_id;
 };
 
Index: uspace/lib/ui/src/menu.c
===================================================================
--- uspace/lib/ui/src/menu.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/src/menu.c	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -578,4 +578,5 @@
 	ui_menu_t *menu = (ui_menu_t *)arg;
 
+	menu->idev_id = ui_popup_get_idev_id(menu->popup);
 	ui_menu_kbd_event(menu, event);
 }
@@ -592,4 +593,6 @@
 	gfx_coord2_t spos;
 
+	menu->idev_id = ui_popup_get_idev_id(menu->popup);
+
 	spos.x = 0;
 	spos.y = 0;
@@ -641,4 +644,14 @@
 }
 
+/** Get ID of last device that input event.
+ *
+ * @param menu Menu
+ * @return Input device ID
+ */
+sysarg_t ui_menu_get_idev_id(ui_menu_t *menu)
+{
+	return menu->idev_id;
+}
+
 /** @}
  */
Index: uspace/lib/ui/src/popup.c
===================================================================
--- uspace/lib/ui/src/popup.c	(revision ee3b28a97324351b0acfb1161a2ed94632eab95c)
+++ uspace/lib/ui/src/popup.c	(revision 7dbf1f638b9208de583dc8a8bb3a419e0c25b6f4)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2023 Jiri Svoboda
+ * Copyright (c) 2024 Jiri Svoboda
  * All rights reserved.
  *
@@ -190,4 +190,14 @@
 }
 
+/** Get ID of device that sent the last position event.
+ *
+ * @param popup Popup window
+ * @return Input device ID
+ */
+sysarg_t ui_popup_get_idev_id(ui_popup_t *popup)
+{
+	return popup->idev_id;
+}
+
 /** Handle close event in popup window.
  *
@@ -214,4 +224,7 @@
 	ui_popup_t *popup = (ui_popup_t *)arg;
 
+	/* Remember ID of device that sent the last event */
+	popup->idev_id = event->kbd_id;
+
 	if (popup->cb != NULL && popup->cb->kbd != NULL)
 		popup->cb->kbd(popup, popup->arg, event);
@@ -229,4 +242,7 @@
 	ui_popup_t *popup = (ui_popup_t *)arg;
 
+	/* Remember ID of device that sent the last event */
+	popup->idev_id = event->pos_id;
+
 	if (popup->cb != NULL && popup->cb->pos != NULL)
 		popup->cb->pos(popup, popup->arg, event);
