projects
/
goodguy
/
cinelerra.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
version update
[goodguy/cinelerra.git]
/
cinelerra-5.1
/
guicast
/
bcwindowbase.C
diff --git
a/cinelerra-5.1/guicast/bcwindowbase.C
b/cinelerra-5.1/guicast/bcwindowbase.C
index 93279934cb9b56fa4ac5615357ba5a4915b0a6ac..adaaa6e266f779464b5d12099179a8aad94c9f6c 100644
(file)
--- 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);
//__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
// 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);
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();
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;
// 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");
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);
exit(1);
+ }
}
if(XGetIMValues(input_method, XNQueryInputStyle, &xim_styles, NULL) ||
xim_styles == NULL)
}
if(XGetIMValues(input_method, XNQueryInputStyle, &xim_styles, NULL) ||
xim_styles == NULL)