diff options
Diffstat (limited to 'src/Fl_win32.cxx')
| -rw-r--r-- | src/Fl_win32.cxx | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 36e77a99b..dec95241e 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -1044,9 +1044,12 @@ static int mouse_event(Fl_Window *window, int what, int button, if (wParam & MK_SHIFT) state |= FL_SHIFT; if (wParam & MK_CONTROL) state |= FL_CTRL; #endif - if (wParam & MK_LBUTTON) state |= FL_BUTTON1; - if (wParam & MK_MBUTTON) state |= FL_BUTTON2; - if (wParam & MK_RBUTTON) state |= FL_BUTTON3; + if (wParam & MK_LBUTTON) state |= FL_BUTTON1; // left + if (wParam & MK_MBUTTON) state |= FL_BUTTON2; // right + if (wParam & MK_RBUTTON) state |= FL_BUTTON3; // middle + if (wParam & MK_XBUTTON1) state |= FL_BUTTON4; // side button 1 (back) + if (wParam & MK_XBUTTON2) state |= FL_BUTTON5; // side button 2 (forward) + Fl::e_state = state; switch (what) { @@ -1348,6 +1351,21 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar case WM_RBUTTONUP: mouse_event(window, 2, 3, wParam, lParam); return 0; + case WM_XBUTTONDOWN: { + int xbutton = GET_XBUTTON_WPARAM(wParam) == XBUTTON1 ? 4 : 5; + mouse_event(window, 0, xbutton, wParam, lParam); + return 0; + } + case WM_XBUTTONDBLCLK: { + int xbutton = GET_XBUTTON_WPARAM(wParam) == XBUTTON1 ? 4 : 5; + mouse_event(window, 1, xbutton, wParam, lParam); + return 0; + } + case WM_XBUTTONUP: { + int xbutton = GET_XBUTTON_WPARAM(wParam) == XBUTTON1 ? 4 : 5; + mouse_event(window, 2, xbutton, wParam, lParam); + return 0; + } case WM_MOUSEMOVE: #ifdef USE_TRACK_MOUSE |
