Index: uspace/lib/display/include/disp_srv.h
===================================================================
--- uspace/lib/display/include/disp_srv.h	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/lib/display/include/disp_srv.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -38,6 +38,6 @@
 #include <async.h>
 #include <errno.h>
-#include <types/display/event.h>
-#include <types/display/wndparams.h>
+#include "display/wndparams.h"
+#include "types/display/event.h"
 
 typedef struct display_ops display_ops_t;
Index: uspace/lib/display/include/display.h
===================================================================
--- uspace/lib/display/include/display.h	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/lib/display/include/display.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -39,10 +39,9 @@
 #include <gfx/context.h>
 #include <stdbool.h>
-#include "types/display/wndparams.h"
+#include "display/wndparams.h"
 #include "types/display.h"
 
 extern errno_t display_open(const char *, display_t **);
 extern void display_close(display_t *);
-extern void display_wnd_params_init(display_wnd_params_t *);
 extern errno_t display_window_create(display_t *, display_wnd_params_t *,
     display_wnd_cb_t *, void *, display_window_t **);
Index: uspace/lib/display/include/display/wndparams.h
===================================================================
--- uspace/lib/display/include/display/wndparams.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
+++ uspace/lib/display/include/display/wndparams.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2019 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup libdisplay
+ * @{
+ */
+/** @file
+ */
+
+#ifndef _LIBDISPLAY_DISPLAY_WNDPARAMS_H_
+#define _LIBDISPLAY_DISPLAY_WNDPARAMS_H_
+
+#include "../types/display/wndparams.h"
+
+extern void display_wnd_params_init(display_wnd_params_t *);
+
+
+#endif
+
+/** @}
+ */
Index: uspace/srv/hid/display/dsops.c
===================================================================
--- uspace/srv/hid/display/dsops.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/dsops.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -63,5 +63,5 @@
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "disp_window_create()");
 
-	rc = ds_window_create(client, &wnd);
+	rc = ds_window_create(client, params, &wnd);
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "disp_window_create() - ds_window_create -> %d", rc);
 	if (rc != EOK)
Index: uspace/srv/hid/display/test/client.c
===================================================================
--- uspace/srv/hid/display/test/client.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/test/client.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -27,4 +27,5 @@
  */
 
+#include <disp_srv.h>
 #include <errno.h>
 #include <pcut/pcut.h>
@@ -83,4 +84,5 @@
 	ds_window_t *w1;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -91,8 +93,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w0);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -123,4 +129,5 @@
 	ds_window_t *w1;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -131,8 +138,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w0);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -158,4 +169,5 @@
 	ds_client_t *client;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	kbd_event_t event;
 	ds_window_t *rwindow;
@@ -170,5 +182,9 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &wnd);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &wnd);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -213,4 +229,5 @@
 	ds_client_t *client;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -221,5 +238,9 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &wnd);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &wnd);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/test/display.c
===================================================================
--- uspace/srv/hid/display/test/display.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/test/display.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -27,4 +27,5 @@
  */
 
+#include <disp_srv.h>
 #include <errno.h>
 #include <pcut/pcut.h>
@@ -99,4 +100,5 @@
 	ds_window_t *w1;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -107,8 +109,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w1);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w0);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w1);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w0);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -148,4 +154,5 @@
 	ds_window_t *w1;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	gfx_coord2_t pos;
 	errno_t rc;
@@ -157,8 +164,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 100;
+
+	rc = ds_window_create(client, &params, &w0);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -217,4 +228,5 @@
 	ds_client_t *client;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	kbd_event_t event;
 	bool called_cb = false;
@@ -230,5 +242,9 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &wnd);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &wnd);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -260,4 +276,5 @@
 	ds_client_t *client;
 	ds_window_t *w0, *w1;
+	display_wnd_params_t params;
 	kbd_event_t event;
 	bool called_cb = false;
@@ -273,8 +290,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w0);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -317,4 +338,5 @@
 	ds_client_t *client;
 	ds_window_t *w0, *w1;
+	display_wnd_params_t params;
 	ptd_event_t event;
 	bool called_cb = false;
@@ -330,8 +352,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
-	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
-
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w0);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/test/seat.c
===================================================================
--- uspace/srv/hid/display/test/seat.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/test/seat.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -27,4 +27,5 @@
  */
 
+#include <disp_srv.h>
 #include <errno.h>
 #include <pcut/pcut.h>
@@ -62,4 +63,5 @@
 	ds_seat_t *seat;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -73,5 +75,9 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &wnd);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &wnd);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
@@ -93,4 +99,5 @@
 	ds_window_t *w0;
 	ds_window_t *w1;
+	display_wnd_params_t params;
 	errno_t rc;
 
@@ -104,8 +111,12 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w1);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &w1);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &w0);
+	rc = ds_window_create(client, &params, &w0);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/test/window.c
===================================================================
--- uspace/srv/hid/display/test/window.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/test/window.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -27,4 +27,5 @@
  */
 
+#include <disp_srv.h>
 #include <errno.h>
 #include <pcut/pcut.h>
@@ -46,4 +47,5 @@
 	ds_client_t *client;
 	ds_window_t *wnd;
+	display_wnd_params_t params;
 	gfx_context_t *gc;
 	errno_t rc;
@@ -55,5 +57,9 @@
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
-	rc = ds_window_create(client, &wnd);
+	display_wnd_params_init(&params);
+	params.rect.p0.x = params.rect.p0.y = 0;
+	params.rect.p1.x = params.rect.p1.y = 1;
+
+	rc = ds_window_create(client, &params, &wnd);
 	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
 
Index: uspace/srv/hid/display/types/display/window.h
===================================================================
--- uspace/srv/hid/display/types/display/window.h	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/types/display/window.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -54,4 +54,6 @@
 	/** Link to @c display->windows */
 	link_t ldwindows;
+	/** Bounding rectangle */
+	gfx_rect_t rect;
 	/** Display position */
 	gfx_coord2_t dpos;
Index: uspace/srv/hid/display/window.c
===================================================================
--- uspace/srv/hid/display/window.c	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/window.c	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -184,10 +184,12 @@
  * Create graphics context for rendering into a window.
  *
- * @param client Client owning the window
+ * @param client Client owning the window=
+ * @param params Window parameters
  * @param rgc Place to store pointer to new GC.
  *
  * @return EOK on success or an error code
  */
-errno_t ds_window_create(ds_client_t *client, ds_window_t **rgc)
+errno_t ds_window_create(ds_client_t *client, display_wnd_params_t *params,
+    ds_window_t **rgc)
 {
 	ds_window_t *wnd = NULL;
@@ -208,4 +210,5 @@
 	ds_display_add_window(client->display, wnd);
 
+	wnd->rect = params->rect;
 	wnd->gc = gc;
 	*rgc = wnd;
Index: uspace/srv/hid/display/window.h
===================================================================
--- uspace/srv/hid/display/window.h	(revision fdc8e4053a18f2b30fdf821c1f0a755b6e34908e)
+++ uspace/srv/hid/display/window.h	(revision 34342334f4ef070d93f0cc4c5270e49e76ef9e7e)
@@ -42,8 +42,10 @@
 #include "types/display/display.h"
 #include "types/display/window.h"
+#include "types/display/wndparams.h"
 
 extern gfx_context_ops_t window_gc_ops;
 
-extern errno_t ds_window_create(ds_client_t *, ds_window_t **);
+extern errno_t ds_window_create(ds_client_t *, display_wnd_params_t *,
+    ds_window_t **);
 extern void ds_window_destroy(ds_window_t *);
 extern gfx_context_t *ds_window_get_ctx(ds_window_t *);
