Send key event twice: To the focused window and the root window (for global shortcuts)
This commit is contained in:
parent
863683e249
commit
ee96bb89cf
|
@ -227,17 +227,31 @@ KeyMod keymod;
|
|||
|
||||
keymod = getKeyModCodes(rootwin, keysym, modifiers);
|
||||
|
||||
// Send a fake key press event to the window.
|
||||
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, True, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
|
||||
XKeyEvent event;
|
||||
|
||||
// Send a fake key release event to the window.
|
||||
event = createKeyEvent(display, winFocus, winRoot, False, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyReleaseMask, (XEvent *)&event);
|
||||
// Send a fake key press event to the focused window.
|
||||
event = createKeyEvent(display, winFocus, winRoot, True, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
|
||||
|
||||
// Done.
|
||||
XCloseDisplay(display);
|
||||
return 0;
|
||||
// Send a fake key release event to the focused window.
|
||||
event = createKeyEvent(display, winFocus, winRoot, False, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyReleaseMask, (XEvent *)&event);
|
||||
|
||||
// Send a fake key press event to root window.
|
||||
event = createKeyEvent(display, winRoot, winRoot, True, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
|
||||
|
||||
// Send a fake key release event to root window.
|
||||
event = createKeyEvent(display, winRoot, winRoot, False, keymod.keyval, keymod.modifiers);
|
||||
XSendEvent(event.display, event.window, True, KeyReleaseMask, (XEvent *)&event);
|
||||
|
||||
// Present active window. Usefull, if alt+F1 oder alt+d clicked.
|
||||
//XRaiseWindow(display, winFocus);
|
||||
//XLowerWindow(display, winFocus);
|
||||
|
||||
// Done.
|
||||
XCloseDisplay(display);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int keysend2(uint keysym, uint modsym1, uint modsym2) {
|
||||
|
|
|
@ -693,7 +693,13 @@ namespace NeoLayoutViewer{
|
|||
//debug(@"Modi: $modi");
|
||||
if( ks < 1 ) return false;
|
||||
|
||||
keysend(ks,modi);
|
||||
if( modi == 0 || true){
|
||||
// Alt-Mask do not work :-(
|
||||
keysend(ks,modi);
|
||||
}else{
|
||||
debug("Zweiter Modi");
|
||||
keysend2(ks,modi & Gdk.ModifierType.CONTROL_MASK, modi & Gdk.ModifierType.MOD1_MASK );
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -51,6 +51,6 @@ namespace NeoLayoutViewer{
|
|||
|
||||
/* Extern C routines */
|
||||
extern int keysend(uint keysym, int modifiers);
|
||||
//extern int keysend2(uint keysym, uint modsym1, uint modsym2);
|
||||
extern int keysend2(uint keysym, uint modsym1, uint modsym2);
|
||||
extern bool checkCapsLock(X.Display* d);
|
||||
extern void checkModifier(X.Display* d, int* keycodes, int nkeycodes, int* pressed );
|
||||
|
|
Loading…
Reference in New Issue