Index: uspace/lib/ui/src/window.c
===================================================================
--- uspace/lib/ui/src/window.c	(revision 8b22d44208b78e0950de5fef6c616ff1632b1770)
+++ uspace/lib/ui/src/window.c	(revision 0415776cc1c47e8ad449850f31b4bb6d3445bb33)
@@ -400,7 +400,7 @@
 	ui_wdecor_destroy(window->wdecor);
 	ui_resource_destroy(window->res);
-	if (0 && window->app_mgc != NULL)
+	if (window->app_mgc != NULL)
 		mem_gc_delete(window->app_mgc);
-	if (0 && window->app_bmp != NULL)
+	if (window->app_bmp != NULL)
 		gfx_bitmap_destroy(window->app_bmp);
 	if (window->mgc != NULL) {
@@ -413,6 +413,4 @@
 		display_window_destroy(window->dwindow);
 
-	free(window);
-
 	/* Need to repaint if windows are emulated */
 	if (ui_is_fullscreen(ui)) {
@@ -424,4 +422,6 @@
 		(void) console_set_caption(ui->console, "");
 	}
+
+	free(window);
 }
 
@@ -810,6 +810,7 @@
 {
 	ui_window_t *window = (ui_window_t *) arg;
-
-	ui_lock(window->ui);
+	ui_t *ui = window->ui;
+
+	ui_lock(ui);
 
 	if (window->wdecor != NULL) {
@@ -819,5 +820,5 @@
 
 	ui_window_send_focus(window);
-	ui_unlock(window->ui);
+	ui_unlock(ui);
 }
 
@@ -826,8 +827,9 @@
 {
 	ui_window_t *window = (ui_window_t *) arg;
-
-	ui_lock(window->ui);
+	ui_t *ui = window->ui;
+
+	ui_lock(ui);
 	ui_window_send_kbd(window, kbd_event);
-	ui_unlock(window->ui);
+	ui_unlock(ui);
 }
 
@@ -836,4 +838,6 @@
 {
 	ui_window_t *window = (ui_window_t *) arg;
+	ui_t *ui = window->ui;
+	ui_evclaim_t claim;
 
 	/* Make sure we don't process events until fully initialized */
@@ -841,8 +845,14 @@
 		return;
 
-	ui_lock(window->ui);
-	ui_wdecor_pos_event(window->wdecor, event);
+	ui_lock(ui);
+
+	claim = ui_wdecor_pos_event(window->wdecor, event);
+	if (claim == ui_claimed) {
+		ui_unlock(ui);
+		return;
+	}
+
 	ui_window_send_pos(window, event);
-	ui_unlock(window->ui);
+	ui_unlock(ui);
 }
 
@@ -851,4 +861,5 @@
 {
 	ui_window_t *window = (ui_window_t *) arg;
+	ui_t *ui = window->ui;
 
 	/* Make sure we don't process events until fully initialized */
@@ -859,8 +870,8 @@
 		return;
 
-	ui_lock(window->ui);
+	ui_lock(ui);
 	(void) ui_window_resize(window, rect);
 	(void) ui_window_paint(window);
-	ui_unlock(window->ui);
+	ui_unlock(ui);
 }
 
@@ -869,6 +880,7 @@
 {
 	ui_window_t *window = (ui_window_t *) arg;
-
-	ui_lock(window->ui);
+	ui_t *ui = window->ui;
+
+	ui_lock(ui);
 
 	if (window->wdecor != NULL) {
@@ -878,5 +890,5 @@
 
 	ui_window_send_unfocus(window);
-	ui_unlock(window->ui);
+	ui_unlock(ui);
 }
 
