X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.C;h=adaaa6e266f779464b5d12099179a8aad94c9f6c;hp=93279934cb9b56fa4ac5615357ba5a4915b0a6ac;hb=HEAD;hpb=b104b77f5296719bd5e6de8472eb71542ddaedec diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index 93279934..adaaa6e2 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -1173,6 +1173,24 @@ if( debug && event->type != ClientMessage ) { //__LINE__, //keysym); +// force setting modifiers state if a modifier key pressed + switch( keysym ) { + case XK_Alt_L: + case XK_Alt_R: + alt_mask = 1; + break; + case XK_Shift_L: + case XK_Shift_R: + shift_mask = 1; + break; + case XK_Control_L: + case XK_Control_R: + ctrl_mask = 1; + break; + default: + break; + } + // block out control keys if(keysym > 0xffe0 && keysym < 0xffff) break; // block out Alt_GR key @@ -1309,8 +1327,26 @@ if( debug && event->type != ClientMessage ) { case KeyRelease: XLookupString((XKeyEvent*)event, keys_return, 1, &keysym, 0); + get_key_masks(event->xkey.state); +// force clearing modifiers state if a modifier key released + switch( keysym ) { + case XK_Alt_L: + case XK_Alt_R: + alt_mask = 0; + break; + case XK_Shift_L: + case XK_Shift_R: + shift_mask = 0; + break; + case XK_Control_L: + case XK_Control_R: + ctrl_mask = 0; + break; + default: + break; + } dispatch_keyrelease_event(); -// printf("BC_WindowBase::dispatch_event KeyRelease keysym=0x%x keystate=0x%lld\n", +// printf("BC_WindowBase::dispatch_event KeyRelease keysym=%#lx keystate=%04x\n", // keysym, event->xkey.state); break; @@ -2530,7 +2566,11 @@ void BC_WindowBase::init_im() if(!(input_method = XOpenIM(display, NULL, NULL, NULL))) { printf("BC_WindowBase::init_im: Could not open input method.\n"); + XSetLocaleModifiers("@im=local"); + if(!(input_method = XOpenIM(display, NULL, NULL, NULL))) { + printf("BC_WindowBase::init_im: Could not open input method local.\n"); exit(1); + } } if(XGetIMValues(input_method, XNQueryInputStyle, &xim_styles, NULL) || xim_styles == NULL)