Index: uspace/lib/ui/include/ui/window.h
===================================================================
--- uspace/lib/ui/include/ui/window.h	(revision bb4d0b520c39e20a5f604e8fbd4e96fa93516fc0)
+++ uspace/lib/ui/include/ui/window.h	(revision 3e41cc4ae595fc88a3e5e146b78f8aaa2cc37f88)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -56,5 +56,4 @@
 extern void ui_window_add(ui_window_t *, ui_control_t *);
 extern void ui_window_remove(ui_window_t *, ui_control_t *);
-extern ui_window_t *ui_window_get_active(ui_t *);
 extern errno_t ui_window_resize(ui_window_t *, gfx_rect_t *);
 extern ui_t *ui_window_get_ui(ui_window_t *);
Index: uspace/lib/ui/private/window.h
===================================================================
--- uspace/lib/ui/private/window.h	(revision bb4d0b520c39e20a5f604e8fbd4e96fa93516fc0)
+++ uspace/lib/ui/private/window.h	(revision 3e41cc4ae595fc88a3e5e146b78f8aaa2cc37f88)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -136,4 +136,7 @@
 extern errno_t ui_window_size_change(ui_window_t *, gfx_rect_t *,
     ui_wnd_sc_op_t);
+extern ui_window_t *ui_window_get_active(ui_t *);
+extern ui_window_t *ui_window_first(ui_t *);
+extern ui_window_t *ui_window_next(ui_window_t *);
 
 #endif
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision bb4d0b520c39e20a5f604e8fbd4e96fa93516fc0)
+++ uspace/lib/ui/src/ui.c	(revision 3e41cc4ae595fc88a3e5e146b78f8aaa2cc37f88)
@@ -412,5 +412,5 @@
 	errno_t rc;
 	gfx_context_t *gc;
-	ui_window_t *awnd;
+	ui_window_t *wnd;
 	gfx_color_t *color = NULL;
 
@@ -439,14 +439,19 @@
 	gfx_color_delete(color);
 
-	/* XXX Should repaint all windows */
-	awnd = ui_window_get_active(ui);
-	if (awnd == NULL)
-		return EOK;
-
-	rc = ui_wdecor_paint(awnd->wdecor);
-	if (rc != EOK)
-		return rc;
-
-	return ui_window_paint(awnd);
+	/* Repaint all windows */
+	wnd = ui_window_first(ui);
+	while (wnd != NULL) {
+		rc = ui_wdecor_paint(wnd->wdecor);
+		if (rc != EOK)
+			return rc;
+
+		rc = ui_window_paint(wnd);
+		if (rc != EOK)
+			return rc;
+
+		wnd = ui_window_next(wnd);
+	}
+
+	return EOK;
 }
 
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision bb4d0b520c39e20a5f604e8fbd4e96fa93516fc0)
+++ uspace/lib/ui/src/window.c	(revision 3e41cc4ae595fc88a3e5e146b78f8aaa2cc37f88)
@@ -617,4 +617,36 @@
 }
 
+/** Get first (lowermost) window (only valid in fullscreen mode).
+ *
+ * @param ui User interface
+ * @return First window
+ */
+ui_window_t *ui_window_first(ui_t *ui)
+{
+	link_t *link;
+
+	link = list_first(&ui->windows);
+	if (link == NULL)
+		return NULL;
+
+	return list_get_instance(link, ui_window_t, lwindows);
+}
+
+/** Get next window (only valid in fullscreen mode).
+ *
+ * @param cur Current window
+ * @return First window
+ */
+ui_window_t *ui_window_next(ui_window_t *cur)
+{
+	link_t *link;
+
+	link = list_next(&cur->lwindows, &cur->ui->windows);
+	if (link == NULL)
+		return NULL;
+
+	return list_get_instance(link, ui_window_t, lwindows);
+}
+
 /** Get active window (only valid in fullscreen mode).
  *
