X11: handling of keyboard mouse emulation + mouse panning
This commit is contained in:
parent
955ebb5932
commit
e2637097fb
24
src/input.c
24
src/input.c
@ -1658,7 +1658,7 @@ int Get_input(int sleep_time)
|
|||||||
mod |= MOD_META;
|
mod |= MOD_META;
|
||||||
//sym = XKeycodeToKeysym(X11_display, event.xkey.keycode, 0);
|
//sym = XKeycodeToKeysym(X11_display, event.xkey.keycode, 0);
|
||||||
sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, 0);
|
sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, 0);
|
||||||
GFX2_Log(GFX2_DEBUG, "key code = %3d state=0x%08x sym = 0x%04lx %s\tmod=%04x\n",
|
GFX2_Log(GFX2_DEBUG, "key press code = %3d state=0x%08x sym = 0x%04lx %s\tmod=%04x\n",
|
||||||
event.xkey.keycode, event.xkey.state, sym, XKeysymToString(sym), mod);
|
event.xkey.keycode, event.xkey.state, sym, XKeysymToString(sym), mod);
|
||||||
if (sym == XK_Shift_L || sym == XK_Shift_R ||
|
if (sym == XK_Shift_L || sym == XK_Shift_R ||
|
||||||
sym == XK_Control_L || sym == XK_Control_R ||
|
sym == XK_Control_L || sym == XK_Control_R ||
|
||||||
@ -1674,7 +1674,8 @@ int Get_input(int sleep_time)
|
|||||||
static XComposeStatus status;
|
static XComposeStatus status;
|
||||||
count = XLookupString(&event.xkey, buffer, sizeof(buffer),
|
count = XLookupString(&event.xkey, buffer, sizeof(buffer),
|
||||||
&sym, &status);
|
&sym, &status);
|
||||||
if (count == 1) {
|
if (count == 1)
|
||||||
|
{
|
||||||
Key_ANSI = Key_UNICODE = (word)buffer[0] & 0x00ff;
|
Key_ANSI = Key_UNICODE = (word)buffer[0] & 0x00ff;
|
||||||
}
|
}
|
||||||
else if((sym & 0xf000) != 0xf000)
|
else if((sym & 0xf000) != 0xf000)
|
||||||
@ -1688,9 +1689,28 @@ int Get_input(int sleep_time)
|
|||||||
{
|
{
|
||||||
Key_UNICODE = Key_ANSI = 0;
|
Key_UNICODE = Key_ANSI = 0;
|
||||||
}
|
}
|
||||||
|
Handle_special_key_press();
|
||||||
user_feedback_required = 1;
|
user_feedback_required = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case KeyRelease:
|
||||||
|
{
|
||||||
|
KeySym sym;
|
||||||
|
|
||||||
|
if (event.xkey.state & ShiftMask)
|
||||||
|
mod |= MOD_SHIFT;
|
||||||
|
if (event.xkey.state & ControlMask)
|
||||||
|
mod |= MOD_CTRL;
|
||||||
|
if (event.xkey.state & (Mod1Mask | Mod5Mask))
|
||||||
|
mod |= MOD_ALT;
|
||||||
|
if (event.xkey.state & Mod4Mask)
|
||||||
|
mod |= MOD_META;
|
||||||
|
sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, 0);
|
||||||
|
GFX2_Log(GFX2_DEBUG, "keyrelease code= %3d state=0x%08x sym = 0x%04lx %s\tmod=%04x\n",
|
||||||
|
event.xkey.keycode, event.xkey.state, sym, XKeysymToString(sym), mod);
|
||||||
|
Release_control(sym & 0x0fff, mod);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ButtonPress: // left = 1, middle = 2, right = 3, wheelup = 4, wheeldown = 5
|
case ButtonPress: // left = 1, middle = 2, right = 3, wheelup = 4, wheeldown = 5
|
||||||
//printf("Press button = %d state = 0x%08x\n", event.xbutton.button, event.xbutton.state);
|
//printf("Press button = %d state = 0x%08x\n", event.xbutton.button, event.xbutton.state);
|
||||||
if (event.xkey.state & ShiftMask)
|
if (event.xkey.state & ShiftMask)
|
||||||
|
|||||||
@ -148,7 +148,8 @@ void GFX2_Set_mode(int *width, int *height, int fullscreen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
XSelectInput(X11_display, X11_window,
|
XSelectInput(X11_display, X11_window,
|
||||||
PointerMotionMask | ButtonPressMask | ButtonReleaseMask | KeyPressMask | ExposureMask | StructureNotifyMask);
|
PointerMotionMask | ButtonPressMask | ButtonReleaseMask
|
||||||
|
| KeyPressMask | KeyReleaseMask | ExposureMask | StructureNotifyMask);
|
||||||
|
|
||||||
wmDelete = XInternAtom(X11_display, "WM_DELETE_WINDOW", True);
|
wmDelete = XInternAtom(X11_display, "WM_DELETE_WINDOW", True);
|
||||||
XSetWMProtocols(X11_display, X11_window, &wmDelete, 1);
|
XSetWMProtocols(X11_display, X11_window, &wmDelete, 1);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user