Index: uspace/app/nav/nav.c
===================================================================
--- uspace/app/nav/nav.c	(revision 2651dc5422e646f9a23732d2e40be4fcda296133)
+++ uspace/app/nav/nav.c	(revision 966a27d3b51421d64b6686d7dd7bbdccbc125b97)
@@ -63,4 +63,10 @@
 };
 
+static void navigator_panel_activate_req(void *, panel_t *);
+
+static panel_cb_t navigator_panel_cb = {
+	.activate_req = navigator_panel_activate_req
+};
+
 /** Window close button was clicked.
  *
@@ -183,4 +189,7 @@
 		panel_set_rect(navigator->panel[i], &rect);
 
+		panel_set_cb(navigator->panel[i], &navigator_panel_cb,
+		    navigator);
+
 		rc = ui_fixed_add(navigator->fixed,
 		    panel_ctl(navigator->panel[i]));
@@ -307,4 +316,17 @@
 }
 
+/** Panel callback requesting panel activation.
+ *
+ * @param arg Argument (navigator_t *)
+ * @param panel Panel
+ */
+void navigator_panel_activate_req(void *arg, panel_t *panel)
+{
+	navigator_t *navigator = (navigator_t *)arg;
+
+	if (!panel_is_active(panel))
+		navigator_switch_panel(navigator);
+}
+
 /** @}
  */
Index: uspace/app/nav/panel.c
===================================================================
--- uspace/app/nav/panel.c	(revision 2651dc5422e646f9a23732d2e40be4fcda296133)
+++ uspace/app/nav/panel.c	(revision 966a27d3b51421d64b6686d7dd7bbdccbc125b97)
@@ -142,4 +142,16 @@
 	ui_control_delete(panel->control);
 	free(panel);
+}
+
+/** Set panel callbacks.
+ *
+ * @param panel Panel
+ * @param cb Callbacks
+ * @param arg Argument to callback functions
+ */
+void panel_set_cb(panel_t *panel, panel_cb_t *cb, void *arg)
+{
+	panel->cb = cb;
+	panel->cb_arg = arg;
 }
 
@@ -311,5 +323,16 @@
 ui_evclaim_t panel_pos_event(panel_t *panel, pos_event_t *event)
 {
-	return ui_unclaimed;
+	gfx_coord2_t pos;
+
+	pos.x = event->hpos;
+	pos.y = event->vpos;
+	if (!gfx_pix_inside_rect(&pos, &panel->rect))
+		return ui_unclaimed;
+
+	if (!panel->active) {
+		panel_activate_req(panel);
+	}
+
+	return ui_claimed;
 }
 
@@ -1114,4 +1137,16 @@
 }
 
+/** Request panel activation.
+ *
+ * Call back to request panel activation.
+ *
+ * @param panel Panel
+ */
+void panel_activate_req(panel_t *panel)
+{
+	if (panel->cb != NULL && panel->cb->activate_req != NULL)
+		panel->cb->activate_req(panel->cb_arg, panel);
+}
+
 /** @}
  */
Index: uspace/app/nav/panel.h
===================================================================
--- uspace/app/nav/panel.h	(revision 2651dc5422e646f9a23732d2e40be4fcda296133)
+++ uspace/app/nav/panel.h	(revision 966a27d3b51421d64b6686d7dd7bbdccbc125b97)
@@ -48,4 +48,5 @@
 extern errno_t panel_create(ui_window_t *, bool, panel_t **);
 extern void panel_destroy(panel_t *);
+extern void panel_set_cb(panel_t *, panel_cb_t *, void *);
 extern errno_t panel_entry_paint(panel_entry_t *, size_t);
 extern errno_t panel_paint(panel_t *);
@@ -79,4 +80,6 @@
 extern errno_t panel_open_dir(panel_t *, panel_entry_t *);
 extern errno_t panel_open_file(panel_t *, panel_entry_t *);
+extern void panel_activate_req(panel_t *);
+
 
 #endif
Index: uspace/app/nav/test/panel.c
===================================================================
--- uspace/app/nav/test/panel.c	(revision 2651dc5422e646f9a23732d2e40be4fcda296133)
+++ uspace/app/nav/test/panel.c	(revision 966a27d3b51421d64b6686d7dd7bbdccbc125b97)
@@ -40,4 +40,16 @@
 PCUT_TEST_SUITE(panel);
 
+/** Test response */
+typedef struct {
+	bool activate_req;
+	panel_t *activate_req_panel;
+} test_resp_t;
+
+static void test_panel_activate_req(void *, panel_t *);
+
+static panel_cb_t test_cb = {
+	.activate_req = test_panel_activate_req
+};
+
 /** Create and destroy panel. */
 PCUT_TEST(create_destroy)
@@ -48,4 +60,21 @@
 	rc = panel_create(NULL, true, &panel);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	panel_destroy(panel);
+}
+
+/** panel_set_cb() sets callback */
+PCUT_TEST(set_cb)
+{
+	panel_t *panel;
+	errno_t rc;
+	test_resp_t resp;
+
+	rc = panel_create(NULL, true, &panel);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	panel_set_cb(panel, &test_cb, &resp);
+	PCUT_ASSERT_EQUALS(&test_cb, panel->cb);
+	PCUT_ASSERT_EQUALS(&resp, panel->cb_arg);
 
 	panel_destroy(panel);
@@ -1426,3 +1455,33 @@
 }
 
+/** panel_activate_req() sends activation request */
+PCUT_TEST(activate_req)
+{
+	panel_t *panel;
+	errno_t rc;
+	test_resp_t resp;
+
+	rc = panel_create(NULL, true, &panel);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	panel_set_cb(panel, &test_cb, &resp);
+
+	resp.activate_req = false;
+	resp.activate_req_panel = NULL;
+
+	panel_activate_req(panel);
+	PCUT_ASSERT_TRUE(resp.activate_req);
+	PCUT_ASSERT_EQUALS(panel, resp.activate_req_panel);
+
+	panel_destroy(panel);
+}
+
+static void test_panel_activate_req(void *arg, panel_t *panel)
+{
+	test_resp_t *resp = (test_resp_t *)arg;
+
+	resp->activate_req = true;
+	resp->activate_req_panel = panel;
+}
+
 PCUT_EXPORT(panel);
Index: uspace/app/nav/types/panel.h
===================================================================
--- uspace/app/nav/types/panel.h	(revision 2651dc5422e646f9a23732d2e40be4fcda296133)
+++ uspace/app/nav/types/panel.h	(revision 966a27d3b51421d64b6686d7dd7bbdccbc125b97)
@@ -83,4 +83,10 @@
 	ui_window_t *window;
 
+	/** Callbacks */
+	struct panel_cb *cb;
+
+	/** Callback argument */
+	void *cb_arg;
+
 	/** Panel rectangle */
 	gfx_rect_t rect;
@@ -126,4 +132,10 @@
 } panel_t;
 
+/** Panel callbacks */
+typedef struct panel_cb {
+	/** Request panel activation */
+	void (*activate_req)(void *, panel_t *);
+} panel_cb_t;
+
 #endif
 
