diff -c fl.o/Enumerations.H fl/Enumerations.H *** fl.o/Enumerations.H Sun Apr 18 15:17:00 1999 --- fl/Enumerations.H Sun May 02 14:15:30 1999 *************** *** 81,87 **** FL_HIDE = 15, FL_SHOW = 16, FL_PASTE = 17, ! FL_SELECTIONCLEAR = 18 }; enum Fl_When { // Fl_Widget::when(): --- 81,88 ---- FL_HIDE = 15, FL_SHOW = 16, FL_PASTE = 17, ! FL_SELECTIONCLEAR = 18, ! FL_KEYUP = 19 }; enum Fl_When { // Fl_Widget::when(): diff -c src.o/Fl_win32.cxx src/Fl_win32.cxx *** src.o/Fl_win32.cxx Fri Apr 23 02:55:54 1999 --- src/Fl_win32.cxx Sun May 02 14:15:40 1999 *************** *** 454,460 **** case WM_SYSDEADCHAR: case WM_CHAR: case WM_SYSCHAR: ! {ulong state = Fl::e_state & 0xff000000; // keep the mouse button state // if GetKeyState is expensive we might want to comment some of these out: if (GetKeyState(VK_SHIFT)&~1) state |= FL_SHIFT; if (GetKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK; --- 454,461 ---- case WM_SYSDEADCHAR: case WM_CHAR: case WM_SYSCHAR: ! { Fl_Event msgType = FL_KEYBOARD; ! { ulong state = Fl::e_state & 0xff000000; // keep the mouse button state // if GetKeyState is expensive we might want to comment some of these out: if (GetKeyState(VK_SHIFT)&~1) state |= FL_SHIFT; if (GetKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK; *************** *** 467,473 **** if (GetKeyState(VK_LWIN)&~1 || GetKeyState(VK_RWIN)&~1) state |= FL_META; if (GetKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK; Fl::e_state = state;} ! if (lParam & (1<<31)) goto DEFAULT; // ignore up events after fixing shift if (uMsg == WM_CHAR || uMsg == WM_SYSCHAR) { buffer[0] = char(wParam); Fl::e_length = 1; --- 468,474 ---- if (GetKeyState(VK_LWIN)&~1 || GetKeyState(VK_RWIN)&~1) state |= FL_META; if (GetKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK; Fl::e_state = state;} ! if (lParam & (1<<31)) msgType = FL_KEYUP; // generate a keyup event if (uMsg == WM_CHAR || uMsg == WM_SYSCHAR) { buffer[0] = char(wParam); Fl::e_length = 1; *************** *** 481,488 **** Fl::e_text = buffer; // for (int i = lParam&0xff; i--;) while (window->parent()) window = window->window(); ! if (Fl::handle(FL_KEYBOARD,window)) return 0; ! break; case WM_GETMINMAXINFO: Fl_X::i(window)->set_minmax((LPMINMAXINFO)lParam); --- 482,489 ---- Fl::e_text = buffer; // for (int i = lParam&0xff; i--;) while (window->parent()) window = window->window(); ! if (Fl::handle(msgType,window)) return 0; ! break; } case WM_GETMINMAXINFO: Fl_X::i(window)->set_minmax((LPMINMAXINFO)lParam);