mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
Try to support modifiers in XIM again (#2015)
This commit is contained in:
parent
21e57a6b7d
commit
558ab34aa3
1 changed files with 13 additions and 13 deletions
18
source/xcb.c
18
source/xcb.c
|
@ -1375,14 +1375,9 @@ static void main_loop_x11_event_handler_view(xcb_generic_event_t *event) {
|
||||||
xcb_key_press_event_t *xkpe = (xcb_key_press_event_t *)event;
|
xcb_key_press_event_t *xkpe = (xcb_key_press_event_t *)event;
|
||||||
#ifdef XCB_IMDKIT
|
#ifdef XCB_IMDKIT
|
||||||
if (xcb->ic) {
|
if (xcb->ic) {
|
||||||
xcb_keysym_t sym = xcb_key_press_lookup_keysym(xcb->syms, xkpe, 0);
|
|
||||||
if (xcb_is_modifier_key(sym)) {
|
|
||||||
rofi_key_press_event_handler(xkpe, state);
|
|
||||||
} else {
|
|
||||||
g_log("IMDKit", G_LOG_LEVEL_DEBUG, "press key %d to xim", xkpe->detail);
|
g_log("IMDKit", G_LOG_LEVEL_DEBUG, "press key %d to xim", xkpe->detail);
|
||||||
xcb_xim_forward_event(xcb->im, xcb->ic, xkpe);
|
xcb_xim_forward_event(xcb->im, xcb->ic, xkpe);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -1394,14 +1389,19 @@ static void main_loop_x11_event_handler_view(xcb_generic_event_t *event) {
|
||||||
xcb_key_release_event_t *xkre = (xcb_key_release_event_t *)event;
|
xcb_key_release_event_t *xkre = (xcb_key_release_event_t *)event;
|
||||||
#ifdef XCB_IMDKIT
|
#ifdef XCB_IMDKIT
|
||||||
if (xcb->ic) {
|
if (xcb->ic) {
|
||||||
|
g_log("IMDKit", G_LOG_LEVEL_DEBUG, "release key %d to xim", xkre->detail);
|
||||||
|
|
||||||
|
// Check if the keysym is a modifier key (e.g., Shift, Ctrl, Alt). If it
|
||||||
|
// is, sleep for 5 milliseconds as a workaround for XCB XIM limitation.
|
||||||
|
// This sleep helps to ensure that XCB XIM can properly handle subsequent
|
||||||
|
// key events that may occur rapidly after a modifier key is pressed.
|
||||||
xcb_keysym_t sym = xcb_key_press_lookup_keysym(xcb->syms, xkre, 0);
|
xcb_keysym_t sym = xcb_key_press_lookup_keysym(xcb->syms, xkre, 0);
|
||||||
if (xcb_is_modifier_key(sym)) {
|
if (xcb_is_modifier_key(sym)) {
|
||||||
rofi_key_press_event_handler(xkre, state);
|
struct timespec five_millis = {.tv_sec = 0, .tv_nsec = 5000000};
|
||||||
} else {
|
nanosleep(&five_millis, NULL);
|
||||||
g_log("IMDKit", G_LOG_LEVEL_DEBUG, "release key %d to xim", xkre->detail);
|
}
|
||||||
xcb_xim_forward_event(xcb->im, xcb->ic, xkre);
|
xcb_xim_forward_event(xcb->im, xcb->ic, xkre);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue