Index: uspace/lib/display/include/display/wndparams.h
===================================================================
--- uspace/lib/display/include/display/wndparams.h	(revision c2250702b9691485c237b9d3dce30775a4798af8)
+++ uspace/lib/display/include/display/wndparams.h	(revision fb420e48d741bf6fe291bdb165ec1a5626f87fa1)
@@ -40,5 +40,4 @@
 extern void display_wnd_params_init(display_wnd_params_t *);
 
-
 #endif
 
Index: uspace/lib/gfx/include/gfx/coord.h
===================================================================
--- uspace/lib/gfx/include/gfx/coord.h	(revision c2250702b9691485c237b9d3dce30775a4798af8)
+++ uspace/lib/gfx/include/gfx/coord.h	(revision fb420e48d741bf6fe291bdb165ec1a5626f87fa1)
@@ -50,4 +50,5 @@
 extern void gfx_rect_points_sort(gfx_rect_t *, gfx_rect_t *);
 extern bool gfx_rect_is_empty(gfx_rect_t *);
+extern bool gfx_pix_inside_rect(gfx_coord2_t *, gfx_rect_t *);
 
 #endif
Index: uspace/lib/gfx/src/coord.c
===================================================================
--- uspace/lib/gfx/src/coord.c	(revision c2250702b9691485c237b9d3dce30775a4798af8)
+++ uspace/lib/gfx/src/coord.c	(revision fb420e48d741bf6fe291bdb165ec1a5626f87fa1)
@@ -189,4 +189,20 @@
 }
 
+/** Return true if pixel at coordinate @a coord lies within rectangle @a rect. */
+bool gfx_pix_inside_rect(gfx_coord2_t *coord, gfx_rect_t *rect)
+{
+	gfx_rect_t sr;
+
+	gfx_rect_points_sort(rect, &sr);
+
+	if (coord->x < sr.p0.x || coord->y < sr.p0.y)
+		return false;
+
+	if (coord->x >= sr.p1.x || coord->y >= sr.p1.y)
+		return false;
+
+	return true;
+}
+
 /** @}
  */
Index: uspace/lib/gfx/test/coord.c
===================================================================
--- uspace/lib/gfx/test/coord.c	(revision c2250702b9691485c237b9d3dce30775a4798af8)
+++ uspace/lib/gfx/test/coord.c	(revision fb420e48d741bf6fe291bdb165ec1a5626f87fa1)
@@ -524,3 +524,47 @@
 }
 
+/** gfx_pix_inside_rect for  */
+PCUT_TEST(pix_inside_rect)
+{
+	gfx_coord2_t coord;
+	gfx_rect_t rect;
+
+	rect.p0.x = 1;
+	rect.p0.y = 2;
+	rect.p1.x = 3;
+	rect.p1.y = 4;
+
+	coord.x = 0;
+	coord.y = 1;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 1;
+	coord.y = 1;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 0;
+	coord.y = 2;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 1;
+	coord.y = 2;
+	PCUT_ASSERT_TRUE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 2;
+	coord.y = 3;
+	PCUT_ASSERT_TRUE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 3;
+	coord.y = 3;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 2;
+	coord.y = 4;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+
+	coord.x = 3;
+	coord.y = 4;
+	PCUT_ASSERT_FALSE(gfx_pix_inside_rect(&coord, &rect));
+}
+
 PCUT_EXPORT(coord);
Index: uspace/srv/hid/display/display.c
===================================================================
--- uspace/srv/hid/display/display.c	(revision c2250702b9691485c237b9d3dce30775a4798af8)
+++ uspace/srv/hid/display/display.c	(revision fb420e48d741bf6fe291bdb165ec1a5626f87fa1)
@@ -172,12 +172,13 @@
 {
 	ds_window_t *wnd;
+	gfx_rect_t drect;
 
 	wnd = ds_display_first_window(display);
 	while (wnd != NULL) {
-		// XXX Need to know window dimensions
-		if (pos->x >= wnd->dpos.x && pos->y >= wnd->dpos.y &&
-		    pos->x <= wnd->dpos.x + 100 && pos->y <= wnd->dpos.y + 100) {
+		/* Window bounding rectangle on display */
+		gfx_rect_translate(&wnd->dpos, &wnd->rect, &drect);
+
+		if (gfx_pix_inside_rect(pos, &drect))
 			return wnd;
-		}
 
 		wnd = ds_display_next_window(wnd);
