diff --git a/Libraries/LibGUI/Event.h b/Libraries/LibGUI/Event.h index 6c2374ccfb..2b2adf7bac 100644 --- a/Libraries/LibGUI/Event.h +++ b/Libraries/LibGUI/Event.h @@ -257,6 +257,8 @@ enum MouseButton : u8 { Left = 1, Right = 2, Middle = 4, + Back = 8, + Forward = 16, }; class KeyEvent final : public Event { diff --git a/Libraries/LibGUI/WindowServerConnection.cpp b/Libraries/LibGUI/WindowServerConnection.cpp index 036cf64869..441294598d 100644 --- a/Libraries/LibGUI/WindowServerConnection.cpp +++ b/Libraries/LibGUI/WindowServerConnection.cpp @@ -178,6 +178,10 @@ MouseButton to_gmousebutton(u32 button) return MouseButton::Right; case 4: return MouseButton::Middle; + case 8: + return MouseButton::Back; + case 16: + return MouseButton::Forward; default: ASSERT_NOT_REACHED(); break; diff --git a/Servers/WindowServer/Event.h b/Servers/WindowServer/Event.h index 781f2df903..48def26519 100644 --- a/Servers/WindowServer/Event.h +++ b/Servers/WindowServer/Event.h @@ -70,6 +70,8 @@ enum class MouseButton : u8 { Left = 1, Right = 2, Middle = 4, + Back = 8, + Forward = 16, }; class KeyEvent final : public Event { diff --git a/Servers/WindowServer/Screen.cpp b/Servers/WindowServer/Screen.cpp index 3658dcd8dd..3f0fbb04fd 100644 --- a/Servers/WindowServer/Screen.cpp +++ b/Servers/WindowServer/Screen.cpp @@ -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::Right); 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) { auto message = make(Event::MouseMove, m_cursor_location, buttons, MouseButton::None, m_modifiers); Core::EventLoop::current().post_event(WindowManager::the(), move(message)); diff --git a/Servers/WindowServer/WindowManager.cpp b/Servers/WindowServer/WindowManager.cpp index 98b9e62860..7503a637e5 100644 --- a/Servers/WindowServer/WindowManager.cpp +++ b/Servers/WindowServer/WindowManager.cpp @@ -683,6 +683,10 @@ auto WindowManager::DoubleClickInfo::metadata_for_button(MouseButton button) -> return m_right; case MouseButton::Middle: return m_middle; + case MouseButton::Back: + return m_back; + case MouseButton::Forward: + return m_forward; default: ASSERT_NOT_REACHED(); } diff --git a/Servers/WindowServer/WindowManager.h b/Servers/WindowServer/WindowManager.h index 945f555f0c..85611f400a 100644 --- a/Servers/WindowServer/WindowManager.h +++ b/Servers/WindowServer/WindowManager.h @@ -241,6 +241,8 @@ private: ClickMetadata m_left; ClickMetadata m_right; ClickMetadata m_middle; + ClickMetadata m_back; + ClickMetadata m_forward; }; DoubleClickInfo m_double_click_info; int m_double_click_speed { 0 };