Index: uspace/lib/ui/private/entry.h
===================================================================
--- uspace/lib/ui/private/entry.h	(revision c9722c14485f5db0872d6038461396b42fc8cb54)
+++ uspace/lib/ui/private/entry.h	(revision 282c86d6f46826e1954a2f8499e2b2074a860618)
@@ -66,4 +66,6 @@
 	/** Entry is activated */
 	bool active;
+	/** Button is held down */
+	bool held;
 };
 
Index: uspace/lib/ui/src/entry.c
===================================================================
--- uspace/lib/ui/src/entry.c	(revision c9722c14485f5db0872d6038461396b42fc8cb54)
+++ uspace/lib/ui/src/entry.c	(revision 282c86d6f46826e1954a2f8499e2b2074a860618)
@@ -767,4 +767,5 @@
 		pos.y = event->vpos;
 
+		/* Change cursor shape when pointer is entering/leaving */
 		if (gfx_pix_inside_rect(&pos, &entry->rect)) {
 			if (!entry->pointer_inside) {
@@ -780,4 +781,13 @@
 			}
 		}
+
+		if (entry->held) {
+			/*
+			 * Selecting using mouse drag: Change pos,
+			 * keep sel_start
+			 */
+			entry->pos = ui_entry_find_pos(entry, &pos);
+			ui_entry_paint(entry);
+		}
 	}
 
@@ -787,4 +797,6 @@
 
 		if (gfx_pix_inside_rect(&pos, &entry->rect)) {
+			/* Clicked inside - activate, set position */
+			entry->held = true;
 			entry->pos = ui_entry_find_pos(entry, &pos);
 			entry->sel_start = entry->pos;
@@ -796,6 +808,11 @@
 			return ui_claimed;
 		} else {
+			/* Clicked outside - deactivate */
 			ui_entry_deactivate(entry);
 		}
+	}
+
+	if (event->type == POS_RELEASE) {
+		entry->held = false;
 	}
 
