Index: uspace/lib/ui/private/window.h
===================================================================
--- uspace/lib/ui/private/window.h	(revision 2c121350f3836f946a3a5cb351e69eff90b37256)
+++ uspace/lib/ui/private/window.h	(revision 26edcd6aa923eff290454e36cfe942db61f931e6)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2025 Jiri Svoboda
+ * Copyright (c) 2026 Jiri Svoboda
  * All rights reserved.
  *
@@ -136,4 +136,5 @@
 extern errno_t ui_window_size_change(ui_window_t *, gfx_rect_t *,
     ui_wnd_sc_op_t);
+extern void ui_window_update_placement(ui_window_t *);
 extern ui_window_t *ui_window_get_active(ui_t *);
 extern ui_window_t *ui_window_first(ui_t *);
Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision 2c121350f3836f946a3a5cb351e69eff90b37256)
+++ uspace/lib/ui/src/ui.c	(revision 26edcd6aa923eff290454e36cfe942db61f931e6)
@@ -337,15 +337,15 @@
 	ui->rect = *rect;
 
-	/* Resize all fullscreen windows */
+	/* Reposition/resize windows */
 	wnd = ui_window_first(ui);
 	while (wnd != NULL) {
-		if (wnd->placement == ui_wnd_place_full_screen) {
-			(void)ui_window_resize(wnd, rect);
-			ui_window_send_resize(wnd);
-		}
-
+		ui_window_update_placement(wnd);
 		wnd = ui_window_next(wnd);
 	}
 
+	/*
+	 * XXX Resizing cleared console GC so we need to repaint the
+	 * background.
+	 */
 	(void)ui_paint(ui);
 }
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 2c121350f3836f946a3a5cb351e69eff90b37256)
+++ uspace/lib/ui/src/window.c	(revision 26edcd6aa923eff290454e36cfe942db61f931e6)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2025 Jiri Svoboda
+ * Copyright (c) 2026 Jiri Svoboda
  * All rights reserved.
  *
@@ -171,9 +171,13 @@
  * @param window Window
  * @param drect Display rectangle
+ * @param wrect Window rectangle
+ * @param prect Parent rectangle for popup placement or @c NULL
+ * @param placement Window placement
  * @param params Window parameters
  * @param pos Place to store position of top-left corner
  */
 static void ui_window_place(ui_window_t *window, gfx_rect_t *drect,
-    ui_wnd_params_t *params, gfx_coord2_t *pos)
+    gfx_rect_t *wrect, gfx_rect_t *prect, ui_wnd_placement_t placement,
+    gfx_coord2_t *pos)
 {
 	gfx_coord2_t dims;
@@ -181,5 +185,5 @@
 	gfx_rect_t below_rect;
 
-	assert(params->placement != ui_wnd_place_default ||
+	assert(placement != ui_wnd_place_default ||
 	    ui_is_fullscreen(window->ui));
 
@@ -187,11 +191,11 @@
 	pos->y = 0;
 
-	switch (params->placement) {
+	switch (placement) {
 	case ui_wnd_place_default:
 	case ui_wnd_place_center:
-		assert(params->placement != ui_wnd_place_default ||
+		assert(placement != ui_wnd_place_default ||
 		    ui_is_fullscreen(window->ui));
 		/* Center window */
-		gfx_rect_dims(&params->rect, &dims);
+		gfx_rect_dims(wrect, &dims);
 		pos->x = (drect->p0.x + drect->p1.x) / 2 - dims.x / 2;
 		pos->y = (drect->p0.y + drect->p1.y) / 2 - dims.y / 2;
@@ -199,35 +203,35 @@
 	case ui_wnd_place_top_left:
 	case ui_wnd_place_full_screen:
-		pos->x = drect->p0.x - params->rect.p0.x;
-		pos->y = drect->p0.y - params->rect.p0.y;
+		pos->x = drect->p0.x - wrect->p0.x;
+		pos->y = drect->p0.y - wrect->p0.y;
 		break;
 	case ui_wnd_place_top_right:
-		pos->x = drect->p1.x - params->rect.p1.x;
-		pos->y = drect->p0.y - params->rect.p0.y;
+		pos->x = drect->p1.x - wrect->p1.x;
+		pos->y = drect->p0.y - wrect->p0.y;
 		break;
 	case ui_wnd_place_bottom_left:
-		pos->x = drect->p0.x - params->rect.p0.x;
-		pos->y = drect->p1.y - params->rect.p1.y;
+		pos->x = drect->p0.x - wrect->p0.x;
+		pos->y = drect->p1.y - wrect->p1.y;
 		break;
 	case ui_wnd_place_bottom_right:
-		pos->x = drect->p1.x - params->rect.p1.x;
-		pos->y = drect->p1.y - params->rect.p1.y;
+		pos->x = drect->p1.x - wrect->p1.x;
+		pos->y = drect->p1.y - wrect->p1.y;
 		break;
 	case ui_wnd_place_popup:
 		/* Compute rectangle when placed below */
-		below_pos.x = params->prect.p0.x;
-		below_pos.y = params->prect.p1.y;
-		gfx_rect_translate(&below_pos, &params->rect, &below_rect);
+		below_pos.x = prect->p0.x;
+		below_pos.y = prect->p1.y;
+		gfx_rect_translate(&below_pos, wrect, &below_rect);
 
 		/* Does below_rect fit within the display? */
 		if (gfx_rect_is_inside(&below_rect, drect)) {
 			/* Place popup window below parent rectangle */
-			pos->x = params->prect.p0.x - params->rect.p0.x;
-			pos->y = params->prect.p1.y - params->rect.p0.y;
+			pos->x = prect->p0.x - wrect->p0.x;
+			pos->y = prect->p1.y - wrect->p0.y;
 		} else {
 			/* Place popup window above parent rectangle */
-			pos->x = params->prect.p0.x;
-			pos->y = params->prect.p0.y -
-			    (params->rect.p1.y - params->rect.p0.y);
+			pos->x = prect->p0.x;
+			pos->y = prect->p0.y -
+			    (wrect->p1.y - wrect->p0.y);
 		}
 		break;
@@ -384,6 +388,6 @@
 		if (params->placement != ui_wnd_place_default) {
 			/* Set initial display window position */
-			ui_window_place(window, &info.rect, params,
-			    &dparams.pos);
+			ui_window_place(window, &info.rect, &params->rect,
+			    &params->prect, params->placement, &dparams.pos);
 
 			dparams.flags |= wndf_setpos;
@@ -477,5 +481,6 @@
 #endif
 	if (ui->display == NULL) {
-		ui_window_place(window, &ui->rect, params, &window->dpos);
+		ui_window_place(window, &ui->rect, &params->rect, &params->prect,
+		    params->placement, &window->dpos);
 
 		if (window->xgc != NULL)
@@ -536,4 +541,23 @@
 	free(window);
 	return rc;
+}
+
+/** Update window placement after screen resize (only in fullscreen UI).
+ *
+ * @param window UI window
+ */
+void ui_window_update_placement(ui_window_t *window)
+{
+	if (window->placement != ui_wnd_place_popup)
+		ui_window_place(window, &window->ui->rect, &window->rect,
+		    NULL, window->placement, &window->dpos);
+
+	if (window->xgc != NULL)
+		xlate_gc_set_off(window->xgc, &window->dpos);
+
+	if (window->placement == ui_wnd_place_full_screen) {
+		(void)ui_window_resize(window, &window->ui->rect);
+		ui_window_send_resize(window);
+	}
 }
 
