mirror of https://github.com/mpv-player/mpv
x11_common: fix behavior if XCreateIC() fails
This consists of 3 commits squashed and cherry-picked from master
(there were some minor conflicts):
vo/x11_common: Fail init with no valid XIM
XOpenIM can fail to find a valid input method, in which case it
returns NULL. Passing a NULL pointer to XCreateIC would cause a
crash, so fail VO init before that happens.
vo/x11_common: remove superfluous msg prefixes
Conflicts:
video/out/x11_common.c
vo/x11_common: don't require a working input method
Normally, we need this for Xutf8LookupString(). But we can just fall
back to XLookupString(). In fact, the code for this was already there,
the code was just never tested and was actually crashing when active
(see commit 2115c4a
).
This commit is contained in:
parent
36fe16cc7e
commit
31a5fe6fa8
|
@ -455,6 +455,7 @@ int vo_x11_init(struct vo *vo)
|
||||||
if (!x11->display) {
|
if (!x11->display) {
|
||||||
mp_msg(MSGT_VO, MSGL_ERR,
|
mp_msg(MSGT_VO, MSGL_ERR,
|
||||||
"vo: couldn't open the X11 display (%s)!\n", dispName);
|
"vo: couldn't open the X11 display (%s)!\n", dispName);
|
||||||
|
|
||||||
talloc_free(x11);
|
talloc_free(x11);
|
||||||
vo->x11 = NULL;
|
vo->x11 = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -469,6 +470,9 @@ int vo_x11_init(struct vo *vo)
|
||||||
}
|
}
|
||||||
|
|
||||||
x11->xim = XOpenIM(x11->display, NULL, NULL, NULL);
|
x11->xim = XOpenIM(x11->display, NULL, NULL, NULL);
|
||||||
|
if (!x11->xim)
|
||||||
|
mp_msg(MSGT_VO, MSGL_WARN,
|
||||||
|
"x11: XOpenIM() failed. Unicode input will not work.\n");
|
||||||
|
|
||||||
init_atoms(vo->x11);
|
init_atoms(vo->x11);
|
||||||
|
|
||||||
|
@ -982,11 +986,13 @@ static void vo_x11_create_window(struct vo *vo, XVisualInfo *vis, int x, int y,
|
||||||
x11->mouse_cursor_hidden = false;
|
x11->mouse_cursor_hidden = false;
|
||||||
vo_set_cursor_hidden(vo, true);
|
vo_set_cursor_hidden(vo, true);
|
||||||
}
|
}
|
||||||
x11->xic = XCreateIC(x11->xim,
|
if (x11->xim) {
|
||||||
XNInputStyle, XIMPreeditNone | XIMStatusNone,
|
x11->xic = XCreateIC(x11->xim,
|
||||||
XNClientWindow, x11->window,
|
XNInputStyle, XIMPreeditNone | XIMStatusNone,
|
||||||
XNFocusWindow, x11->window,
|
XNClientWindow, x11->window,
|
||||||
NULL);
|
XNFocusWindow, x11->window,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
vo_x11_update_window_title(vo);
|
vo_x11_update_window_title(vo);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue