Index: uspace/lib/display/include/types/display/cursor.h
===================================================================
--- uspace/lib/display/include/types/display/cursor.h	(revision 5480d5ef8109a81271ad3461add3babd6bddae04)
+++ uspace/lib/display/include/types/display/cursor.h	(revision 9242ad96749c6886b0320f48e90dcb84d6e773cc)
@@ -52,5 +52,5 @@
 enum {
 	/** Number of stock cursor types */
-	dcurs_limit = dcurs_size_urdl
+	dcurs_limit = dcurs_size_urdl + 1
 };
 
Index: uspace/lib/gui/window.c
===================================================================
--- uspace/lib/gui/window.c	(revision 5480d5ef8109a81271ad3461add3babd6bddae04)
+++ uspace/lib/gui/window.c	(revision 9242ad96749c6886b0320f48e90dcb84d6e773cc)
@@ -99,4 +99,12 @@
 };
 
+static void set_cursor(window_t *window, display_stock_cursor_t cursor)
+{
+	if (cursor != window->cursor) {
+		(void) display_window_set_cursor(window->dwindow, cursor);
+		window->cursor = cursor;
+	}
+}
+
 static void paint_internal(widget_t *widget)
 {
@@ -294,4 +302,15 @@
 		bool close = (header) &&
 		    (event.hpos >= width - border_thickness - close_thickness);
+
+		if ((top && left) || (bottom && right))
+			(void) set_cursor(widget->window, dcurs_size_uldr);
+		else if ((top && right) || (bottom && left))
+			(void) set_cursor(widget->window, dcurs_size_urdl);
+		else if (top || bottom)
+			(void) set_cursor(widget->window, dcurs_size_ud);
+		else if (left || right)
+			(void) set_cursor(widget->window, dcurs_size_lr);
+		else
+			(void) set_cursor(widget->window, dcurs_arrow);
 
 		pos.x = event.hpos;
@@ -654,4 +673,5 @@
 	win->grab = NULL;
 	win->focus = NULL;
+	win->cursor = dcurs_arrow;
 
 	/* Allocate resources for new surface. */
Index: uspace/lib/gui/window.h
===================================================================
--- uspace/lib/gui/window.h	(revision 5480d5ef8109a81271ad3461add3babd6bddae04)
+++ uspace/lib/gui/window.h	(revision 9242ad96749c6886b0320f48e90dcb84d6e773cc)
@@ -63,4 +63,5 @@
 	surface_t *surface; /**< Window surface shared with display server. */
 	gfx_bitmap_t *bitmap; /**< Window bitmap */
+	display_stock_cursor_t cursor; /**< Selected cursor */
 };
 
