@@ -274,6 +274,14 @@ int x11_error_handler(Display * dpy, XErrorEvent * ev)
274
274
* handled in handle_mfndump/handle_window_dump */
275
275
return 0 ;
276
276
}
277
+
278
+ char error_msg [1024 ];
279
+ XGetErrorText (ev -> display , ev -> error_code , error_msg , sizeof (error_msg ));
280
+ int now = (int ) time (NULL ); // truncate
281
+ fprintf (stderr , "[%d] Encountered X Error:\n" , now );
282
+ fprintf (stderr , error_msg );
283
+
284
+
277
285
#ifdef MAKE_X11_ERRORS_FATAL
278
286
/* The exit(1) below will call release_all_mapped_mfns (registerd with
279
287
* atexit(3)), which would try to release window images with XShmDetach. We
@@ -393,7 +401,12 @@ static Window mkwindow(Ghandles * g, struct windowdata *vm_window)
393
401
XISetMask (xi_mask .mask , XI_KeyRelease );
394
402
XISetMask (xi_mask .mask , XI_FocusIn );
395
403
XISetMask (xi_mask .mask , XI_FocusOut );
396
- XISelectEvents (g -> display , child_win , & xi_mask , 1 );
404
+
405
+ int err = XISelectEvents (g -> display , child_win , & xi_mask , 1 );
406
+ if (err ) {
407
+ fprintf (stderr , "Failed to subscribe to XI events. ErrCode: %d\n" , err );
408
+ exit (1 );
409
+ }
397
410
free (xi_mask .mask );
398
411
XSync (g -> display , False );
399
412
@@ -1409,7 +1422,6 @@ static void process_xevent_button(Ghandles * g, const XButtonEvent * ev)
1409
1422
update_wm_user_time (g , ev -> window , ev -> time );
1410
1423
1411
1424
k .type = ev -> type ;
1412
-
1413
1425
k .x = ev -> x ;
1414
1426
k .y = ev -> y ;
1415
1427
k .state = ev -> state ;
@@ -1901,7 +1913,11 @@ static void send_keymap_notify(Ghandles * g)
1901
1913
{
1902
1914
struct msg_hdr hdr ;
1903
1915
char keys [32 ];
1904
- XQueryKeymap (g -> display , keys );
1916
+ int err = XQueryKeymap (g -> display , keys );
1917
+ if (err ) {
1918
+ fprintf (stderr , "XQueryKeymap failed: %d.\n" , err );
1919
+ return ; // non fatal
1920
+ }
1905
1921
hdr .type = MSG_KEYMAP_NOTIFY ;
1906
1922
hdr .window = 0 ;
1907
1923
write_message (g -> vchan , hdr , keys );
0 commit comments