Another Xephyr focus/modifier fix

This commit is contained in:
Matthew Allum 2005-06-30 13:39:00 +00:00
parent b6c7afe0b9
commit 0929f79c1b
3 changed files with 13 additions and 10 deletions

View File

@ -579,13 +579,15 @@ ephyrUpdateModifierState(unsigned int state)
int i; int i;
CARD8 mask; CARD8 mask;
pkeydev = LookupKeyboardDevice(); pkeydev = (DeviceIntPtr)LookupKeyboardDevice();
if (!pkeydev) if (!pkeydev)
return; return;
keyc = pkeydev->key; keyc = pkeydev->key;
state = state & 0xff;
if (keyc->state == state) if (keyc->state == state)
return; return;
@ -642,24 +644,24 @@ ephyrPoll(void)
break; break;
case EPHYR_EV_MOUSE_PRESS: case EPHYR_EV_MOUSE_PRESS:
ephyrUpdateModifierState(ev.key_state);
mouseState |= ev.data.mouse_down.button_num; mouseState |= ev.data.mouse_down.button_num;
KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0); KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0);
break; break;
case EPHYR_EV_MOUSE_RELEASE: case EPHYR_EV_MOUSE_RELEASE:
ephyrUpdateModifierState(ev.key_state);
mouseState &= ~ev.data.mouse_up.button_num; mouseState &= ~ev.data.mouse_up.button_num;
KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0); KdEnqueueMouseEvent(kdMouseInfo, mouseState|KD_MOUSE_DELTA, 0, 0);
break; break;
case EPHYR_EV_KEY_PRESS: case EPHYR_EV_KEY_PRESS:
ephyrUpdateModifierState(ev.data.key_down.state); ephyrUpdateModifierState(ev.key_state);
KdEnqueueKeyboardEvent (ev.data.key_down.scancode, FALSE); KdEnqueueKeyboardEvent (ev.data.key_down.scancode, FALSE);
break; break;
case EPHYR_EV_KEY_RELEASE: case EPHYR_EV_KEY_RELEASE:
ephyrUpdateModifierState(ev.data.key_up.state); ephyrUpdateModifierState(ev.key_state);
KdEnqueueKeyboardEvent (ev.data.key_up.scancode, TRUE); KdEnqueueKeyboardEvent (ev.data.key_up.scancode, TRUE);
break; break;

View File

@ -719,6 +719,7 @@ hostx_get_event(EphyrHostXEvent *ev)
case ButtonPress: case ButtonPress:
ev->type = EPHYR_EV_MOUSE_PRESS; ev->type = EPHYR_EV_MOUSE_PRESS;
ev->key_state = xev.xkey.state;
/* /*
* This is a bit hacky. will break for button 5 ( defined as 0x10 ) * This is a bit hacky. will break for button 5 ( defined as 0x10 )
* Check KD_BUTTON defines in kdrive.h * Check KD_BUTTON defines in kdrive.h
@ -728,13 +729,14 @@ hostx_get_event(EphyrHostXEvent *ev)
case ButtonRelease: case ButtonRelease:
ev->type = EPHYR_EV_MOUSE_RELEASE; ev->type = EPHYR_EV_MOUSE_RELEASE;
ev->key_state = xev.xkey.state;
ev->data.mouse_up.button_num = 1<<(xev.xbutton.button-1); ev->data.mouse_up.button_num = 1<<(xev.xbutton.button-1);
return 1; return 1;
case KeyPress: case KeyPress:
{ {
ev->type = EPHYR_EV_KEY_PRESS; ev->type = EPHYR_EV_KEY_PRESS;
ev->data.key_down.state = xev.xkey.state; ev->key_state = xev.xkey.state;
ev->data.key_down.scancode = xev.xkey.keycode; ev->data.key_down.scancode = xev.xkey.keycode;
return 1; return 1;
} }
@ -780,7 +782,7 @@ hostx_get_event(EphyrHostXEvent *ev)
* kdrive all togeather. * kdrive all togeather.
*/ */
ev->type = EPHYR_EV_KEY_RELEASE; ev->type = EPHYR_EV_KEY_RELEASE;
ev->data.key_up.state = xev.xkey.state; ev->key_state = xev.xkey.state;
ev->data.key_up.scancode = xev.xkey.keycode; ev->data.key_up.scancode = xev.xkey.keycode;
return 1; return 1;

View File

@ -69,16 +69,15 @@ struct EphyrHostXEvent
struct key_up { struct key_up {
int scancode; int scancode;
int state;
} key_up; } key_up;
struct key_down { struct key_down {
int scancode; int scancode;
int state;
} key_down; } key_down;
} data; } data;
int key_state;
}; };
int int