summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2006-06-09 07:48:08 +0000
committerMatthias Melcher <fltk@matthiasm.com>2006-06-09 07:48:08 +0000
commit428a283f83e3c9c6e683062079cacbebf43ce3ab (patch)
treedb03643ede1581ef312615c624005b2c69b15b2d /src
parent007fc30ca4e26595c3a21dd07600e6517d5914a4 (diff)
Added an event variable "Fl::event_original_key()" which returns the current key code (see Fl::event_key()) before it gets mangled through the NumLock keypad conversion. This way, an application can differentiate between an arrow key and a numeric keypad w/NumLock off.
On Win32, releasing a numeric keypad key w/NumLock off wiould return the wrong keycode (keypad instead of arrow key). Documentation changed accordingly. X11 code is yet to be tested. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5188 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx3
-rw-r--r--src/Fl_mac.cxx2
-rw-r--r--src/Fl_win32.cxx10
-rw-r--r--src/Fl_x.cxx2
4 files changed, 10 insertions, 7 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx
index 2064ce3ac..18ceb5d6d 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -71,7 +71,8 @@ int Fl::damage_,
Fl::e_state,
Fl::e_clicks,
Fl::e_is_click,
- Fl::e_keysym;
+ Fl::e_keysym,
+ Fl::e_original_keysym;
char *Fl::e_text = (char *)"";
int Fl::e_length;
int Fl::visible_focus_ = 1,
diff --git a/src/Fl_mac.cxx b/src/Fl_mac.cxx
index d2849e419..0a667a461 100644
--- a/src/Fl_mac.cxx
+++ b/src/Fl_mac.cxx
@@ -1108,7 +1108,7 @@ pascal OSStatus carbonKeyboardHandler(
sym = keycode_to_sym( keyCode & 0x7f, 0, macKeyLookUp[ keyCode & 0x7f ] );
else
sym = macKeyLookUp[ keyCode & 0x7f ];
- Fl::e_keysym = sym;
+ Fl::e_keysym = Fl::e_original_keysym = sym;
// Handle FL_KP_Enter on regular keyboards and on Powerbooks
if ( keyCode==0x4c || keyCode==0x34) key=0x0d;
// Matt: the Mac has no concept of a NumLock key, or at least not visible
diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx
index ade91e1c9..401c1b7a9 100644
--- a/src/Fl_win32.cxx
+++ b/src/Fl_win32.cxx
@@ -803,7 +803,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
case WM_KEYUP:
case WM_SYSKEYUP:
// save the keysym until we figure out the characters:
- Fl::e_keysym = ms2fltk(wParam,lParam&(1<<24));
+ Fl::e_keysym = Fl::e_original_keysym = ms2fltk(wParam,lParam&(1<<24));
// See if TranslateMessage turned it into a WM_*CHAR message:
if (PeekMessage(&fl_msg, hWnd, WM_CHAR, WM_SYSDEADCHAR, PM_REMOVE)) {
uMsg = fl_msg.message;
@@ -832,10 +832,6 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
}
if (GetKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK;
Fl::e_state = state;
- if (lParam & (1<<31)) { // key up events.
- if (Fl::handle(FL_KEYUP, window)) return 0;
- break;
- }
static char buffer[2];
if (uMsg == WM_CHAR || uMsg == WM_SYSCHAR) {
buffer[0] = char(wParam);
@@ -894,6 +890,10 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
Fl::e_length = 0;
}
Fl::e_text = buffer;
+ if (lParam & (1<<31)) { // key up events.
+ if (Fl::handle(FL_KEYUP, window)) return 0;
+ break;
+ }
// for (int i = lParam&0xff; i--;)
while (window->parent()) window = window->window();
if (Fl::handle(FL_KEYBOARD,window)) return 0;
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index cde677408..0e4dd4a56 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -834,6 +834,8 @@ int fl_handle(const XEvent& thisevent)
else if (keysym == FL_BackSpace) got_backspace = 1;
}
# endif
+ // Store this so we can later know if the KP was used
+ Fl::e_original_keysym = keysym;
// We have to get rid of the XK_KP_function keys, because they are
// not produced on Windoze and thus case statements tend not to check
// for them. There are 15 of these in the range 0xff91 ... 0xff9f