mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
[x11] Check hit barrier is valid before releasing pointer
It turns out to be possible to get a barrier event at the same time as a configure notify event (which rebuilds the barriers), and trying to release the pointer at such a time results in a bad barrier error and program crash. Thus check the event barrier against the currently existing barriers before attempting to release the pointer. This does mean that a better mechanism for sequencing window repositioning and barrier creation may be required.
This commit is contained in:
parent
d8a836e9da
commit
e8a7e8218e
1 changed files with 14 additions and 4 deletions
|
@ -927,6 +927,15 @@ xi_barrier_hit (void *event)
|
|||
{
|
||||
__auto_type be = *(XIBarrierEvent *) event;
|
||||
|
||||
if (be.barrier != x11_left_barrier
|
||||
&& be.barrier != x11_right_barrier
|
||||
&& be.barrier != x11_top_barrier
|
||||
&& be.barrier != x11_bottom_barrier) {
|
||||
Sys_MaskPrintf (SYS_vid, "xi_barrier_hit: bad barrier %ld\n",
|
||||
be.barrier);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!x11_have_pointer || !input_grabbed) {
|
||||
XIBarrierReleasePointer (x_disp, be.deviceid, be.barrier, be.eventid);
|
||||
}
|
||||
|
@ -1245,8 +1254,8 @@ in_x11_check_xi2 (void)
|
|||
Sys_MaskPrintf (SYS_vid, "in_x11_check_xi2: Xlib return bad: %d\n",
|
||||
ret);
|
||||
}
|
||||
Sys_MaskPrintf (SYS_vid, "XI2 supported: version %d.%d, op: %d\n",
|
||||
major, minor, xi_opcode);
|
||||
Sys_MaskPrintf (SYS_vid, "XI2 supported: version %d.%d, op: %d err: %d\n",
|
||||
major, minor, xi_opcode, error);
|
||||
|
||||
if (!XQueryExtension (x_disp, "XFIXES", &xf_opcode, &event, &error)) {
|
||||
Sys_MaskPrintf (SYS_vid, "X fixes extenions not available.\n");
|
||||
|
@ -1258,8 +1267,9 @@ in_x11_check_xi2 (void)
|
|||
Sys_MaskPrintf (SYS_vid, "Need X fixes 5.0.\n");
|
||||
return 0;
|
||||
}
|
||||
Sys_MaskPrintf (SYS_vid, "XFixes supported: version %d.%d, op: %d\n",
|
||||
major, minor, xf_opcode);
|
||||
Sys_MaskPrintf (SYS_vid,
|
||||
"XFixes supported: version %d.%d, op: %d err: %d\n",
|
||||
major, minor, xf_opcode, error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue