mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 22:38:12 +00:00
WindowServer+LibGUI: Support the 4th and 5th mouse buttons
We'll call the "Back" and "Forward" since that's what they are normally mapped to in some other systems.
This commit is contained in:
parent
c5882d3a18
commit
67b92a7d5f
6 changed files with 16 additions and 0 deletions
|
@ -257,6 +257,8 @@ enum MouseButton : u8 {
|
||||||
Left = 1,
|
Left = 1,
|
||||||
Right = 2,
|
Right = 2,
|
||||||
Middle = 4,
|
Middle = 4,
|
||||||
|
Back = 8,
|
||||||
|
Forward = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
class KeyEvent final : public Event {
|
class KeyEvent final : public Event {
|
||||||
|
|
|
@ -178,6 +178,10 @@ MouseButton to_gmousebutton(u32 button)
|
||||||
return MouseButton::Right;
|
return MouseButton::Right;
|
||||||
case 4:
|
case 4:
|
||||||
return MouseButton::Middle;
|
return MouseButton::Middle;
|
||||||
|
case 8:
|
||||||
|
return MouseButton::Back;
|
||||||
|
case 16:
|
||||||
|
return MouseButton::Forward;
|
||||||
default:
|
default:
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -70,6 +70,8 @@ enum class MouseButton : u8 {
|
||||||
Left = 1,
|
Left = 1,
|
||||||
Right = 2,
|
Right = 2,
|
||||||
Middle = 4,
|
Middle = 4,
|
||||||
|
Back = 8,
|
||||||
|
Forward = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
class KeyEvent final : public Event {
|
class KeyEvent final : public Event {
|
||||||
|
|
|
@ -145,6 +145,8 @@ void Screen::on_receive_mouse_data(const MousePacket& packet)
|
||||||
post_mousedown_or_mouseup_if_needed(MouseButton::Left);
|
post_mousedown_or_mouseup_if_needed(MouseButton::Left);
|
||||||
post_mousedown_or_mouseup_if_needed(MouseButton::Right);
|
post_mousedown_or_mouseup_if_needed(MouseButton::Right);
|
||||||
post_mousedown_or_mouseup_if_needed(MouseButton::Middle);
|
post_mousedown_or_mouseup_if_needed(MouseButton::Middle);
|
||||||
|
post_mousedown_or_mouseup_if_needed(MouseButton::Back);
|
||||||
|
post_mousedown_or_mouseup_if_needed(MouseButton::Forward);
|
||||||
if (m_cursor_location != prev_location) {
|
if (m_cursor_location != prev_location) {
|
||||||
auto message = make<MouseEvent>(Event::MouseMove, m_cursor_location, buttons, MouseButton::None, m_modifiers);
|
auto message = make<MouseEvent>(Event::MouseMove, m_cursor_location, buttons, MouseButton::None, m_modifiers);
|
||||||
Core::EventLoop::current().post_event(WindowManager::the(), move(message));
|
Core::EventLoop::current().post_event(WindowManager::the(), move(message));
|
||||||
|
|
|
@ -683,6 +683,10 @@ auto WindowManager::DoubleClickInfo::metadata_for_button(MouseButton button) ->
|
||||||
return m_right;
|
return m_right;
|
||||||
case MouseButton::Middle:
|
case MouseButton::Middle:
|
||||||
return m_middle;
|
return m_middle;
|
||||||
|
case MouseButton::Back:
|
||||||
|
return m_back;
|
||||||
|
case MouseButton::Forward:
|
||||||
|
return m_forward;
|
||||||
default:
|
default:
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,6 +241,8 @@ private:
|
||||||
ClickMetadata m_left;
|
ClickMetadata m_left;
|
||||||
ClickMetadata m_right;
|
ClickMetadata m_right;
|
||||||
ClickMetadata m_middle;
|
ClickMetadata m_middle;
|
||||||
|
ClickMetadata m_back;
|
||||||
|
ClickMetadata m_forward;
|
||||||
};
|
};
|
||||||
DoubleClickInfo m_double_click_info;
|
DoubleClickInfo m_double_click_info;
|
||||||
int m_double_click_speed { 0 };
|
int m_double_click_speed { 0 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue