Index: uspace/lib/ui/src/menu.c
===================================================================
--- uspace/lib/ui/src/menu.c	(revision b4b4dafec1d5fed1e8d2b84b501e3b97a9430fb0)
+++ uspace/lib/ui/src/menu.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
@@ -61,7 +61,9 @@
 };
 
+static void ui_menu_popup_close(ui_popup_t *, void *);
 static void ui_menu_popup_pos(ui_popup_t *, void *, pos_event_t *);
 
 static ui_popup_cb_t ui_menu_popup_cb = {
+	.close = ui_menu_popup_close,
 	.pos = ui_menu_popup_pos
 };
@@ -366,9 +368,22 @@
 	} else {
 		/* Press outside menu - close it */
-//		if (event->type == POS_PRESS)
-//			ui_menu_bar_select(menu->mbar, NULL, NULL);
+		if (event->type == POS_PRESS)
+			ui_menu_bar_select(menu->mbar, NULL, NULL);
 	}
 
 	return ui_unclaimed;
+}
+
+/** Handle close event in menu popup window.
+ *
+ * @param popup Menu popup window
+ * @param arg Argument (ui_menu_t *)
+ */
+static void ui_menu_popup_close(ui_popup_t *popup, void *arg)
+{
+	ui_menu_t *menu = (ui_menu_t *)arg;
+
+	/* Close the menu */
+	ui_menu_bar_select(menu->mbar, NULL, NULL);
 }
 
Index: uspace/lib/ui/src/menubar.c
===================================================================
--- uspace/lib/ui/src/menubar.c	(revision b4b4dafec1d5fed1e8d2b84b501e3b97a9430fb0)
+++ uspace/lib/ui/src/menubar.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
@@ -61,5 +61,4 @@
 static errno_t ui_menu_bar_ctl_paint(void *);
 static ui_evclaim_t ui_menu_bar_ctl_pos_event(void *, pos_event_t *);
-static void ui_menu_bar_ctl_unfocus(void *);
 
 /** Menu bar control ops */
@@ -68,5 +67,4 @@
 	.paint = ui_menu_bar_ctl_paint,
 	.pos_event = ui_menu_bar_ctl_pos_event,
-	.unfocus = ui_menu_bar_ctl_unfocus
 };
 
@@ -317,13 +315,4 @@
 }
 
-/** Handle menu bar window unfocus notification.
- *
- * @param mbar Menu bar
- */
-void ui_menu_bar_unfocus(ui_menu_bar_t *mbar)
-{
-//	ui_menu_bar_select(mbar, NULL, NULL);
-}
-
 /** Destroy menu bar control.
  *
@@ -362,15 +351,4 @@
 }
 
-/** Handle menu bar control window unfocus notification.
- *
- * @param arg Argument (ui_menu_bar_t *)
- */
-void ui_menu_bar_ctl_unfocus(void *arg)
-{
-	ui_menu_bar_t *mbar = (ui_menu_bar_t *) arg;
-
-	ui_menu_bar_unfocus(mbar);
-}
-
 /** @}
  */
Index: uspace/lib/ui/src/popup.c
===================================================================
--- uspace/lib/ui/src/popup.c	(revision b4b4dafec1d5fed1e8d2b84b501e3b97a9430fb0)
+++ uspace/lib/ui/src/popup.c	(revision 4b72e81f444c2a9e4b2a217241ce15cc068a7084)
@@ -46,7 +46,9 @@
 #include "../private/popup.h"
 
+static void ui_popup_window_close(ui_window_t *, void *);
 static void ui_popup_window_pos(ui_window_t *, void *, pos_event_t *);
 
 static ui_window_cb_t ui_popup_window_cb = {
+	.close = ui_popup_window_close,
 	.pos = ui_popup_window_pos
 };
@@ -185,4 +187,17 @@
 }
 
+/** Handle close event in popup window.
+ *
+ * @param window Window
+ * @param arg Argument (ui_popup_t *)
+ */
+static void ui_popup_window_close(ui_window_t *window, void *arg)
+{
+	ui_popup_t *popup = (ui_popup_t *)arg;
+
+	if (popup->cb != NULL && popup->cb->close != NULL)
+		popup->cb->close(popup, popup->arg);
+}
+
 /** Handle position event in popup window.
  *
