mirror of
https://github.com/fltk/fltk.git
synced 2026-05-21 06:21:26 +08:00
Wayland: keep mouse button state across push/release events
Notes:
(1) Fl::e_state holds the current state of all mouse buttons which is
returned by Fl::event_buttons() - "plural form".
(2) Fl::e_keysym holds the "key" of the current event which can be a
mouse button, returned by Fl::event_button() - "singular form".
This commit is contained in:
@@ -308,10 +308,16 @@ static void pointer_button(void *data,
|
||||
return;
|
||||
}
|
||||
int b = 0;
|
||||
Fl::e_state &= ~FL_BUTTONS;
|
||||
if (button == BTN_LEFT) {Fl::e_state |= FL_BUTTON1; b = 1;}
|
||||
else if (button == BTN_RIGHT) {Fl::e_state |= FL_BUTTON3; b = 3;}
|
||||
else if (button == BTN_MIDDLE) {Fl::e_state |= FL_BUTTON2; b = 2;}
|
||||
// Fl::e_state &= ~FL_BUTTONS; // DO NOT reset the mouse button state!
|
||||
if (state == WL_POINTER_BUTTON_STATE_PRESSED) {
|
||||
if (button == BTN_LEFT) { Fl::e_state |= FL_BUTTON1; b = 1; }
|
||||
else if (button == BTN_RIGHT) { Fl::e_state |= FL_BUTTON3; b = 3; }
|
||||
else if (button == BTN_MIDDLE) { Fl::e_state |= FL_BUTTON2; b = 2; }
|
||||
} else { // must be WL_POINTER_BUTTON_STATE_RELEASED
|
||||
if (button == BTN_LEFT) { Fl::e_state &= ~FL_BUTTON1; b = 1; }
|
||||
else if (button == BTN_RIGHT) { Fl::e_state &= ~FL_BUTTON3; b = 3; }
|
||||
else if (button == BTN_MIDDLE) { Fl::e_state &= ~FL_BUTTON2; b = 2; }
|
||||
}
|
||||
Fl::e_keysym = FL_Button + b;
|
||||
Fl::e_dx = Fl::e_dy = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user