diff options
| author | Po Lu | 2022-05-08 14:33:34 +0800 |
|---|---|---|
| committer | Po Lu | 2022-05-08 14:33:34 +0800 |
| commit | 1a988d9ff55c098ddee0c79afcccbdc63e7c680e (patch) | |
| tree | e22ffd3af135f924cfe5a11140afef016ee1f44e /src | |
| parent | 144e9f9b6a376ec0349557ef10a6c133228cda26 (diff) | |
| download | emacs-1a988d9ff55c098ddee0c79afcccbdc63e7c680e.tar.gz emacs-1a988d9ff55c098ddee0c79afcccbdc63e7c680e.zip | |
Improve handling of invisible cursor alloc failures
* src/xterm.c (x_toggle_visible_pointer): Use Xfixes if cursor
allocation really fails. This happens when the X server has a
limit on the number of cursors that can be created.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/xterm.c b/src/xterm.c index 2fc4c559a9c..a7f0f3d7efa 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -9452,8 +9452,21 @@ x_toggle_visible_pointer (struct frame *f, bool invisible) | |||
| 9452 | if (dpyinfo->invisible_cursor == None) | 9452 | if (dpyinfo->invisible_cursor == None) |
| 9453 | dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo); | 9453 | dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo); |
| 9454 | 9454 | ||
| 9455 | #ifndef HAVE_XFIXES | ||
| 9455 | if (dpyinfo->invisible_cursor == None) | 9456 | if (dpyinfo->invisible_cursor == None) |
| 9456 | invisible = false; | 9457 | invisible = false; |
| 9458 | #else | ||
| 9459 | /* But if Xfixes is available, try using it instead. */ | ||
| 9460 | if (x_probe_xfixes_extension (dpyinfo)) | ||
| 9461 | { | ||
| 9462 | dpyinfo->fixes_pointer_blanking = true; | ||
| 9463 | xfixes_toggle_visible_pointer (f, invisible); | ||
| 9464 | |||
| 9465 | return; | ||
| 9466 | } | ||
| 9467 | else | ||
| 9468 | invisible = false; | ||
| 9469 | #endif | ||
| 9457 | 9470 | ||
| 9458 | if (invisible) | 9471 | if (invisible) |
| 9459 | XDefineCursor (dpyinfo->display, FRAME_X_WINDOW (f), | 9472 | XDefineCursor (dpyinfo->display, FRAME_X_WINDOW (f), |