Do not reposition floating containers if unmapped
Patch status: needinfo
Patch by Tony Crisci
Long description:
`floating_reposition` will not reposition windows that are not mapped. Fixes an issue that caused i3 to crash when a user is dragging or resizing a floating window that becomes destroyed.
To apply this patch, use:
curl http://cr.i3wm.org/patch/285/raw.patch | git am
b/src/floating.c
| 18 |
@@ -701,8 +701,9 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_ |
| 19 |
|
| 20 |
/* |
| 21 |
* Repositions the CT_FLOATING_CON to have the coordinates specified by |
| 22 |
- * newrect, but only if the coordinates are not out-of-bounds. Also reassigns |
| 23 |
- * the floating con to a different workspace if this move was across different |
| 24 |
+ * newrect, but only if the coordinates are not out-of-bounds and the container |
| 25 |
+ * is mapped. Also reassigns the floating con to a different workspace if this |
| 26 |
+ * move was across different |
| 27 |
* outputs. |
| 28 |
* |
| 29 |
*/ |
| 30 |
@@ -714,6 +715,12 @@ void floating_reposition(Con *con, Rect newrect) {
|
| 31 |
return; |
| 32 |
} |
| 33 |
|
| 34 |
+ /* Sanity check: Is the container mapped? If not, we ignore the request. */ |
| 35 |
+ if (!con->mapped) {
|
| 36 |
+ ELOG("Container not mapped. Not repositioning.\n");
|
| 37 |
+ return; |
| 38 |
+ } |
| 39 |
+ |
| 40 |
con->rect = newrect; |
| 41 |
|
| 42 |
floating_maybe_reassign_ws(con); |
b/testcases/t/112-floating-resize.t
| 47 |
@@ -34,6 +34,7 @@ my ($na, $nt) = $window->rect; |
| 48 |
is_deeply($na, $a, 'Rects are equal after configurerequest'); |
| 49 |
|
| 50 |
sub test_resize {
|
| 51 |
+ my $window = open_floating_window; |
| 52 |
$window->rect(X11::XCB::Rect->new(x => 0, y => 0, width => 100, height => 100)); |
| 53 |
|
| 54 |
sync_with_i3; |