Index: uspace/app/taskbar/taskbar.c
===================================================================
--- uspace/app/taskbar/taskbar.c	(revision c48192e563fb04c9bdbb35e760ca93083189dc21)
+++ uspace/app/taskbar/taskbar.c	(revision 2f106b0e95c4b8136d891d7dca5c7b8b250f0449)
@@ -192,4 +192,17 @@
 	}
 
+	if (ui_is_textmode(taskbar->ui)) {
+		rect.p0.x = params.rect.p0.x + 9;
+		rect.p0.y = 0;
+		rect.p1.x = params.rect.p1.x - 10;
+		rect.p1.y = 1;
+	} else {
+		rect.p0.x = params.rect.p0.x + 90;
+		rect.p0.y = 4;
+		rect.p1.x = params.rect.p1.x - 84;
+		rect.p1.y = 32 - 4;
+	}
+	wndlist_set_rect(taskbar->wndlist, &rect);
+
 	rc = wndlist_open_wm(taskbar->wndlist, wndmgt_svc);
 	if (rc != EOK) {
@@ -249,5 +262,5 @@
 void taskbar_destroy(taskbar_t *taskbar)
 {
-	ui_fixed_remove(taskbar->fixed,  taskbar_clock_ctl(taskbar->clock));
+	ui_fixed_remove(taskbar->fixed, taskbar_clock_ctl(taskbar->clock));
 	taskbar_clock_destroy(taskbar->clock);
 	ui_window_destroy(taskbar->window);
Index: uspace/app/taskbar/test/wndlist.c
===================================================================
--- uspace/app/taskbar/test/wndlist.c	(revision c48192e563fb04c9bdbb35e760ca93083189dc21)
+++ uspace/app/taskbar/test/wndlist.c	(revision 2f106b0e95c4b8136d891d7dca5c7b8b250f0449)
@@ -86,4 +86,47 @@
 }
 
+/* Test setting window list rectangle */
+PCUT_TEST(set_rect)
+{
+	errno_t rc;
+	ui_t *ui = NULL;
+	ui_wnd_params_t params;
+	ui_window_t *window = NULL;
+	ui_fixed_t *fixed = NULL;
+	gfx_rect_t rect;
+	wndlist_t *wndlist;
+
+	rc = ui_create_disp(NULL, &ui);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	ui_wnd_params_init(&params);
+	params.caption = "Hello";
+
+	rc = ui_window_create(ui, &params, &window);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(window);
+
+	rc = ui_fixed_create(&fixed);
+	ui_window_add(window, ui_fixed_ctl(fixed));
+
+	rc = wndlist_create(window, fixed, &wndlist);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rect.p0.x = 1;
+	rect.p0.y = 2;
+	rect.p1.x = 3;
+	rect.p1.y = 4;
+	wndlist_set_rect(wndlist, &rect);
+	PCUT_ASSERT_INT_EQUALS(1, wndlist->rect.p0.x);
+	PCUT_ASSERT_INT_EQUALS(2, wndlist->rect.p0.y);
+	PCUT_ASSERT_INT_EQUALS(3, wndlist->rect.p1.x);
+	PCUT_ASSERT_INT_EQUALS(4, wndlist->rect.p1.y);
+
+	wndlist_destroy(wndlist);
+
+	ui_window_destroy(window);
+	ui_destroy(ui);
+}
+
 /** Test opening WM service */
 PCUT_TEST(open_wm)
Index: uspace/app/taskbar/wndlist.c
===================================================================
--- uspace/app/taskbar/wndlist.c	(revision c48192e563fb04c9bdbb35e760ca93083189dc21)
+++ uspace/app/taskbar/wndlist.c	(revision 2f106b0e95c4b8136d891d7dca5c7b8b250f0449)
@@ -64,4 +64,15 @@
 };
 
+enum {
+	/** X distance between left edges of two consecutive buttons */
+	wndlist_button_pitch = 145,
+	/** X distance between left edges of two consecutive buttons (text) */
+	wndlist_button_pitch_text = 17,
+	/** Padding between buttons */
+	wndlist_button_pad = 5,
+	/** Padding between buttons (text) */
+	wndlist_button_pad_text = 1
+};
+
 /** Create task bar window list.
  *
@@ -91,4 +102,14 @@
 error:
 	return rc;
+}
+
+/** Set window list rectangle.
+ *
+ * @param wndlist Window list
+ * @param rect Rectangle
+ */
+void wndlist_set_rect(wndlist_t *wndlist, gfx_rect_t *rect)
+{
+	wndlist->rect = *rect;
 }
 
@@ -287,4 +308,6 @@
 	gfx_rect_t rect;
 	ui_resource_t *res;
+	gfx_coord_t pitch;
+	gfx_coord_t pad;
 	size_t idx;
 
@@ -301,13 +324,23 @@
 
 	if (ui_resource_is_textmode(res)) {
-		rect.p0.x = 17 * idx + 9;
+		pitch = wndlist_button_pitch_text;
+		pad = wndlist_button_pad_text;
+	} else {
+		pitch = wndlist_button_pitch;
+		pad = wndlist_button_pad;
+	}
+
+	rect.p0.x = wndlist->rect.p0.x + pitch * idx;
+	rect.p0.y = wndlist->rect.p0.y;
+	rect.p1.x = wndlist->rect.p0.x + pitch * (idx + 1) - pad;
+	rect.p1.y = wndlist->rect.p1.y;
+
+	/* Entry does not fit? */
+	if (rect.p1.x > wndlist->rect.p1.x) {
+		/* Make entry invisible */
+		rect.p0.x = 0;
 		rect.p0.y = 0;
-		rect.p1.x = 17 * idx + 25;
-		rect.p1.y = 1;
-	} else {
-		rect.p0.x = 145 * idx + 90;
-		rect.p0.y = 4;
-		rect.p1.x = 145 * idx + 230;
-		rect.p1.y = 28;
+		rect.p1.x = 0;
+		rect.p1.y = 0;
 	}
 
Index: uspace/app/taskbar/wndlist.h
===================================================================
--- uspace/app/taskbar/wndlist.h	(revision c48192e563fb04c9bdbb35e760ca93083189dc21)
+++ uspace/app/taskbar/wndlist.h	(revision 2f106b0e95c4b8136d891d7dca5c7b8b250f0449)
@@ -38,4 +38,5 @@
 
 #include <errno.h>
+#include <gfx/coord.h>
 #include <stdbool.h>
 #include <ui/fixed.h>
@@ -45,4 +46,5 @@
 
 extern errno_t wndlist_create(ui_window_t *, ui_fixed_t *, wndlist_t **);
+extern void wndlist_set_rect(wndlist_t *, gfx_rect_t *);
 extern errno_t wndlist_open_wm(wndlist_t *, const char *);
 extern void wndlist_destroy(wndlist_t *);
