Skip to content

Commit

Permalink
Remove check for number of mouse buttons - not needed.
Browse files Browse the repository at this point in the history
Support for mouse scroll wheel
Remove some keyboard checking that caused problems on non-US keyboards
  • Loading branch information
Mark Hessling committed Sep 10, 2004
1 parent 32ad409 commit 5fff3d6
Showing 1 changed file with 61 additions and 34 deletions.
95 changes: 61 additions & 34 deletions win32/pdckbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include <stdio.h>

#ifdef PDCDEBUG
char *rcsid_PDCkbd = "$Id: pdckbd.c,v 1.13 2004/08/07 04:36:05 rexx Exp $";
char *rcsid_PDCkbd = "$Id: pdckbd.c,v 1.14 2004/09/10 07:51:40 rexx Exp $";
#endif

#define KEY_STATE TRUE
Expand All @@ -38,6 +38,10 @@ char *rcsid_PDCkbd = "$Id: pdckbd.c,v 1.13 2004/08/07 04:36:05 rexx Exp $";
# define DOUBLE_CLICK 0x0002
#endif

#ifndef MOUSE_WHEELED
# define MOUSE_WHEELED 0x0004
#endif

#ifndef FROM_LEFT_1ST_BUTTON_PRESSED
# define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
#endif
Expand Down Expand Up @@ -514,6 +518,9 @@ int PDC_get_bios_key(void)
#endif
local_key_modifiers = pdc_key_modifiers = 0L;
ignore_key = 0;
/*
* Handle modifier keys hit by themselves
*/
switch(save_ip.Event.KeyEvent.wVirtualKeyCode)
{
case 16: /* shift */
Expand Down Expand Up @@ -571,6 +578,7 @@ int PDC_get_bios_key(void)
* If the Unicode character is not zero; its a displayable character.
* Check for Ctrl-Alt sequences; they are diatric characters
*/
#if 0
if ( ( SP->os_version < 0x80000000 ) && ( save_ip.Event.KeyEvent.uChar.UnicodeChar != 0 ) ) /* NT only ! */
{
idx = save_ip.Event.KeyEvent.wVirtualKeyCode;
Expand All @@ -585,7 +593,7 @@ int PDC_get_bios_key(void)
return kptab[idx].shift;
return (int)save_ip.Event.KeyEvent.uChar.UnicodeChar;
}

#endif
if (save_ip.Event.KeyEvent.uChar.AsciiChar == 0
|| save_ip.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED
|| save_ip.Event.KeyEvent.dwControlKeyState & RIGHT_ALT_PRESSED
Expand Down Expand Up @@ -653,11 +661,22 @@ int PDC_get_bios_key(void)
break;
case MOUSE_EVENT:
memset((char*)&Temp_Mouse_status,0,sizeof(MOUSE_STATUS));
/*
* Wheel has been scrolled
*/
/*fprintf(stderr,"%s %d: %x\n",__FILE__,__LINE__,save_ip.Event.MouseEvent.dwButtonState);*/
if ( save_ip.Event.MouseEvent.dwEventFlags == MOUSE_WHEELED )
{
if (save_ip.Event.MouseEvent.dwButtonState & 0xFF000000)
Temp_Mouse_status.changes = PDC_MOUSE_WHEEL_DOWN;
else
Temp_Mouse_status.changes = PDC_MOUSE_WHEEL_UP;
}
/*
* button press, release or double click ...
*/
if (save_ip.Event.MouseEvent.dwEventFlags == 0
|| save_ip.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
else if (save_ip.Event.MouseEvent.dwEventFlags == 0
|| save_ip.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
{
/*
* Check for Left-most button - always button 1
Expand Down Expand Up @@ -724,36 +743,33 @@ int PDC_get_bios_key(void)
trap_mouse = TRUE;
break;
}
if (SP->num_mouse_buttons == 3)
/*
* Check for Middle button - button 2 only for 3 button mice
*/
if (save_ip.Event.MouseEvent.dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED
&& !(ACTUAL_BUTTON_STATUS(2) & BUTTON_RELEASED))
{
/*
* Check for Middle button - button 2 only for 3 button mice
*/
if (save_ip.Event.MouseEvent.dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED
&& !(ACTUAL_BUTTON_STATUS(2) & BUTTON_RELEASED))
{
button_no = 2;
TEMP_BUTTON_STATUS(button_no) = (save_ip.Event.MouseEvent.dwEventFlags)?BUTTON_DOUBLE_CLICKED:BUTTON_PRESSED;
if (TEMP_BUTTON_STATUS(button_no) == BUTTON_PRESSED
&& (SP->_trap_mbe) & BUTTON2_PRESSED)
trap_mouse = TRUE;
if (TEMP_BUTTON_STATUS(button_no) == BUTTON_DOUBLE_CLICKED
&& (SP->_trap_mbe) & BUTTON2_DOUBLE_CLICKED)
trap_mouse = TRUE;
break;
}
if (last_button_no == 2
&& (ACTUAL_BUTTON_STATUS(2) & BUTTON_PRESSED
|| ACTUAL_BUTTON_STATUS(2) & BUTTON_DOUBLE_CLICKED
|| ACTUAL_MOUSE_MOVED)
&& !(save_ip.Event.MouseEvent.dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED))
{
button_no = 2;
TEMP_BUTTON_STATUS(button_no) = BUTTON_RELEASED;
if ((SP->_trap_mbe) & BUTTON2_RELEASED)
trap_mouse = TRUE;
break;
}
button_no = 2;
TEMP_BUTTON_STATUS(button_no) = (save_ip.Event.MouseEvent.dwEventFlags)?BUTTON_DOUBLE_CLICKED:BUTTON_PRESSED;
if (TEMP_BUTTON_STATUS(button_no) == BUTTON_PRESSED
&& (SP->_trap_mbe) & BUTTON2_PRESSED)
trap_mouse = TRUE;
if (TEMP_BUTTON_STATUS(button_no) == BUTTON_DOUBLE_CLICKED
&& (SP->_trap_mbe) & BUTTON2_DOUBLE_CLICKED)
trap_mouse = TRUE;
break;
}
if (last_button_no == 2
&& (ACTUAL_BUTTON_STATUS(2) & BUTTON_PRESSED
|| ACTUAL_BUTTON_STATUS(2) & BUTTON_DOUBLE_CLICKED
|| ACTUAL_MOUSE_MOVED)
&& !(save_ip.Event.MouseEvent.dwButtonState & FROM_LEFT_2ND_BUTTON_PRESSED))
{
button_no = 2;
TEMP_BUTTON_STATUS(button_no) = BUTTON_RELEASED;
if ((SP->_trap_mbe) & BUTTON2_RELEASED)
trap_mouse = TRUE;
break;
}
/*
* If we get here, then we don't know how to handle the event, so
Expand All @@ -763,7 +779,7 @@ int PDC_get_bios_key(void)
}
else /* button motion event */
{
Temp_Mouse_status.changes |= 8;
Temp_Mouse_status.changes |= PDC_MOUSE_MOVED;
button_no = last_button_no;
if (button_no == 1
&& (SP->_trap_mbe) & BUTTON1_MOVED)
Expand All @@ -785,6 +801,9 @@ int PDC_get_bios_key(void)
}
if (button_no != 0)
{
/*
* We have a button action, rather than a mouse movement or wheel action
*/
TEMP_MOUSE_X_POS = save_ip.Event.MouseEvent.dwMousePosition.X;
TEMP_MOUSE_Y_POS = save_ip.Event.MouseEvent.dwMousePosition.Y;
/*
Expand Down Expand Up @@ -820,6 +839,14 @@ int PDC_get_bios_key(void)
if (trap_mouse)
break;
}
if ( ( Temp_Mouse_status.changes & PDC_MOUSE_WHEEL_DOWN
|| Temp_Mouse_status.changes & PDC_MOUSE_WHEEL_UP )
&& SP->_trap_mbe & MOUSE_WHEEL_SCROLL )
{
TEMP_MOUSE_X_POS = -1;
TEMP_MOUSE_Y_POS = -1;
break;
}
}
/*
* To get here we have a mouse event that has been trapped by the
Expand Down

0 comments on commit 5fff3d6

Please sign in to comment.