Index: uspace/srv/hid/display/input.c
===================================================================
--- uspace/srv/hid/display/input.c	(revision 6c2aba3fef6f293d95c6f25efe30068d7cf8a73f)
+++ uspace/srv/hid/display/input.c	(revision 2a515dcdbf45d99dae90d9f82bc03f8416d806b7)
@@ -97,7 +97,16 @@
     unsigned max_x, unsigned max_y)
 {
-	printf("ds_input_ev_abs_move x=%u y=%u mx=%u my=%u\n",
-	    x, y, max_x, max_y);
-	return EOK;
+	ds_display_t *disp = (ds_display_t *) input->user;
+	ptd_event_t event;
+
+	event.type = PTD_ABS_MOVE;
+	event.apos.x = x;
+	event.apos.y = y;
+	event.abounds.p0.x = 0;
+	event.abounds.p0.y = 0;
+	event.abounds.p1.x = max_x + 1;
+	event.abounds.p1.y = max_y + 1;
+
+	return ds_display_post_ptd_event(disp, &event);
 }
 
Index: uspace/srv/hid/display/seat.c
===================================================================
--- uspace/srv/hid/display/seat.c	(revision 6c2aba3fef6f293d95c6f25efe30068d7cf8a73f)
+++ uspace/srv/hid/display/seat.c	(revision 2a515dcdbf45d99dae90d9f82bc03f8416d806b7)
@@ -256,4 +256,5 @@
  * @return EOK on success or an error code
  */
+#include <stdio.h>
 errno_t ds_seat_post_ptd_event(ds_seat_t *seat, ptd_event_t *event)
 {
@@ -306,4 +307,32 @@
 	}
 
+	if (event->type == PTD_ABS_MOVE) {
+		/*
+		 * Project input device area onto display area. Technically
+		 * we probably want to project onto the area of a particular
+		 * display device. The tricky part is figuring out which
+		 * display device the input device is associated with.
+		 */
+		gfx_coord2_project(&event->apos, &event->abounds,
+		    &disp->rect, &npos);
+
+		gfx_coord2_clip(&npos, &disp->rect, &npos);
+
+		(void) ds_seat_clear_pointer(seat);
+		seat->pntpos = npos;
+
+		pevent.pos_id = 0;
+		pevent.type = POS_UPDATE;
+		pevent.btn_num = 0;
+		pevent.hpos = seat->pntpos.x;
+		pevent.vpos = seat->pntpos.y;
+
+		rc = ds_seat_post_pos_event(seat, &pevent);
+		if (rc != EOK)
+			return rc;
+
+		(void) ds_seat_draw_pointer(seat);
+	}
+
 	return EOK;
 }
Index: uspace/srv/hid/display/types/display/ptd_event.h
===================================================================
--- uspace/srv/hid/display/types/display/ptd_event.h	(revision 6c2aba3fef6f293d95c6f25efe30068d7cf8a73f)
+++ uspace/srv/hid/display/types/display/ptd_event.h	(revision 2a515dcdbf45d99dae90d9f82bc03f8416d806b7)
@@ -40,4 +40,5 @@
 typedef enum {
 	PTD_MOVE,
+	PTD_ABS_MOVE,
 	PTD_PRESS,
 	PTD_RELEASE
@@ -51,4 +52,8 @@
 	/** Relative move vector for PTD_MOVE */
 	gfx_coord2_t dmove;
+	/** Absolute position for PTD_ABS_MOVE */
+	gfx_coord2_t apos;
+	/** Absolute position bounds for PTD_ABS_MOVE */
+	gfx_rect_t abounds;
 } ptd_event_t;
 
