Index: uspace/lib/ui/src/ui.c
===================================================================
--- uspace/lib/ui/src/ui.c	(revision a0aeb8f2db7b6880e9b48ddf8a7affe041c862ee)
+++ uspace/lib/ui/src/ui.c	(revision 5ecac7e2401f64a1e94fae497d05dd8464194cb5)
@@ -248,13 +248,7 @@
 	case CEV_POS:
 		pos = event->ev.pos;
-#ifdef CONFIG_UI_CS_RENDER
-		/*
-		 * TODO Enable translation for server-side rendering
-		 * once we can translate rendering operations in this
-		 * case.
-		 */
+		/* Translate event to window-relative coordinates */
 		pos.hpos -= awnd->dpos.x;
 		pos.vpos -= awnd->dpos.y;
-#endif
 
 		claim = ui_wdecor_pos_event(awnd->wdecor, &pos);
Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision a0aeb8f2db7b6880e9b48ddf8a7affe041c862ee)
+++ uspace/lib/ui/src/window.c	(revision 5ecac7e2401f64a1e94fae497d05dd8464194cb5)
@@ -205,5 +205,7 @@
 	gfx_bitmap_alloc_t alloc;
 	gfx_bitmap_t *bmp = NULL;
+	gfx_coord2_t off;
 	mem_gc_t *memgc = NULL;
+	xlate_gc_t *xgc = NULL;
 	errno_t rc;
 
@@ -297,12 +299,38 @@
 	window->gc = mem_gc_get_ctx(memgc);
 	window->realgc = gc;
+	(void) off;
 #else
+	/* Server-side rendering */
+
+	/* Full-screen mode? */
+	if (ui->display == NULL) {
+		/* Create translating GC to translate window contents */
+		off.x = 0;
+		off.y = 0;
+		rc = xlate_gc_create(&off, gc, &xgc);
+		if (rc != EOK)
+			goto error;
+
+		window->xgc = xgc;
+		window->gc = xlate_gc_get_ctx(xgc);
+		window->realgc = gc;
+	} else {
+		window->gc = gc;
+	}
+
 	(void) ui_window_mem_gc_cb;
 	(void) alloc;
 	(void) bparams;
-	window->gc = gc;
 #endif
-	if (ui->display == NULL)
+	if (ui->display == NULL) {
 		ui_window_place(window, &ui->rect, params, &window->dpos);
+		FILE *f = fopen("/tmp/x", "at");
+		fprintf(f, "xlate_gc_set_off: %d,%d\n",
+		    window->dpos.x, window->dpos.y);
+		fclose(f);
+
+		if (window->xgc != NULL)
+			xlate_gc_set_off(window->xgc, &window->dpos);
+	}
 
 	rc = ui_resource_create(window->gc, ui_is_textmode(ui), &res);
@@ -335,4 +363,6 @@
 	if (memgc != NULL)
 		mem_gc_delete(memgc);
+	if (xgc != NULL)
+		xlate_gc_delete(xgc);
 	if (bmp != NULL)
 		gfx_bitmap_destroy(bmp);
