X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcwindowbase.C;h=9f3e2123c843c7e0f336ae1d4c53105b03b04a71;hb=refs%2Fheads%2Fmaster;hp=c57cd6203c8f6569a1b24b6feb7c2cfbb7d9f6a9;hpb=0c48864cab7b37268025485c6a227f36b3420030;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index c57cd620..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;