Index: uspace/lib/ui/src/resource.c
===================================================================
--- uspace/lib/ui/src/resource.c	(revision 9c7dc8e93da9abc90efb24bba56e275432050f20)
+++ uspace/lib/ui/src/resource.c	(revision cd6287931f05186767f2ccee516423a0342dfad2)
@@ -68,4 +68,6 @@
 	gfx_color_t *wnd_face_color = NULL;
 	gfx_color_t *wnd_text_color = NULL;
+	gfx_color_t *wnd_sel_text_color = NULL;
+	gfx_color_t *wnd_sel_text_bg_color = NULL;
 	gfx_color_t *wnd_frame_hi_color = NULL;
 	gfx_color_t *wnd_frame_sh_color = NULL;
@@ -139,4 +141,13 @@
 		goto error;
 
+	rc = gfx_color_new_rgb_i16(0xffff, 0xffff, 0xffff, &wnd_sel_text_color);
+	if (rc != EOK)
+		goto error;
+
+	rc = gfx_color_new_rgb_i16(0x5858, 0x6a6a, 0xc4c4,
+	    &wnd_sel_text_bg_color);
+	if (rc != EOK)
+		goto error;
+
 	rc = gfx_color_new_rgb_i16(0x8888, 0x8888, 0x8888, &wnd_frame_hi_color);
 	if (rc != EOK)
@@ -200,4 +211,6 @@
 	resource->wnd_face_color = wnd_face_color;
 	resource->wnd_text_color = wnd_text_color;
+	resource->wnd_sel_text_color = wnd_sel_text_color;
+	resource->wnd_sel_text_bg_color = wnd_sel_text_bg_color;
 	resource->wnd_frame_hi_color = wnd_frame_hi_color;
 	resource->wnd_frame_sh_color = wnd_frame_sh_color;
@@ -232,4 +245,8 @@
 	if (wnd_text_color != NULL)
 		gfx_color_delete(wnd_text_color);
+	if (wnd_sel_text_color != NULL)
+		gfx_color_delete(wnd_sel_text_color);
+	if (wnd_sel_text_bg_color != NULL)
+		gfx_color_delete(wnd_sel_text_bg_color);
 	if (wnd_frame_hi_color != NULL)
 		gfx_color_delete(wnd_frame_hi_color);
@@ -280,4 +297,6 @@
 	gfx_color_delete(resource->wnd_face_color);
 	gfx_color_delete(resource->wnd_text_color);
+	gfx_color_delete(resource->wnd_sel_text_color);
+	gfx_color_delete(resource->wnd_sel_text_bg_color);
 	gfx_color_delete(resource->wnd_frame_hi_color);
 	gfx_color_delete(resource->wnd_frame_sh_color);
@@ -299,4 +318,32 @@
 }
 
+/** Set UI resource expose callback.
+ *
+ * @param resource Resource
+ * @param cb Callback
+ * @param arg Callback argument
+ */
+void ui_resource_set_expose_cb(ui_resource_t *resource,
+    ui_expose_cb_t cb, void *arg)
+{
+	resource->expose_cb = cb;
+	resource->expose_arg = arg;
+}
+
+/** Force UI repaint after an area has been exposed.
+ *
+ * This is called when a popup disappears, which could have exposed some
+ * other UI elements. It causes complete repaint of the UI.
+ *
+ * NOTE Ideally we could specify the exposed rectangle and then limit
+ * the repaint to just that. That would, however, require means of
+ * actually clipping the repaint operation.
+ */
+void ui_resource_expose(ui_resource_t *resource)
+{
+	if (resource->expose_cb != NULL)
+		resource->expose_cb(resource->expose_arg);
+}
+
 /** @}
  */
