mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
Taskbar: Make clicks at the edges and corners work as expected
This makes it easy for the user to just throw the mouse at the corner of the screen and obtain the desired outcome (eg. opening the start menu), without having to precisely position the cursor over one of the buttons.
This commit is contained in:
parent
dac7b25b8a
commit
ab1caad1e9
Notes:
sideshowbarker
2024-07-18 10:03:10 +09:00
Author: https://github.com/antiufo Commit: https://github.com/SerenityOS/serenity/commit/ab1caad1e95 Pull-request: https://github.com/SerenityOS/serenity/pull/8566
2 changed files with 23 additions and 0 deletions
|
@ -244,6 +244,28 @@ void TaskbarWindow::update_window_button(::Window& window, bool show_as_active)
|
|||
return parent;
|
||||
}
|
||||
|
||||
void TaskbarWindow::event(Core::Event& event)
|
||||
{
|
||||
if (event.type() == GUI::Event::MouseDown) {
|
||||
// If the cursor is at the edge/corner of the screen but technically not within the start button (or other taskbar buttons),
|
||||
// we adjust it so that the nearest button ends up being clicked anyways.
|
||||
|
||||
auto& mouse_event = static_cast<GUI::MouseEvent&>(event);
|
||||
const int ADJUSTMENT = 4;
|
||||
auto adjusted_x = AK::clamp(mouse_event.x(), ADJUSTMENT, width() - ADJUSTMENT);
|
||||
auto adjusted_y = AK::min(mouse_event.y(), height() - ADJUSTMENT);
|
||||
Gfx::IntPoint adjusted_point = { adjusted_x, adjusted_y };
|
||||
|
||||
if (adjusted_point != mouse_event.position()) {
|
||||
GUI::WindowServerConnection::the().async_set_global_cursor_position(position() + adjusted_point);
|
||||
GUI::MouseEvent adjusted_event = { (GUI::Event::Type)mouse_event.type(), adjusted_point, mouse_event.buttons(), mouse_event.button(), mouse_event.modifiers(), mouse_event.wheel_delta() };
|
||||
Window::event(adjusted_event);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Window::event(event);
|
||||
}
|
||||
|
||||
void TaskbarWindow::wm_event(GUI::WMEvent& event)
|
||||
{
|
||||
WindowIdentifier identifier { event.client_id(), event.window_id() };
|
||||
|
|
|
@ -30,6 +30,7 @@ private:
|
|||
void update_window_button(::Window&, bool);
|
||||
::Window* find_window_owner(::Window&) const;
|
||||
|
||||
virtual void event(Core::Event&) override;
|
||||
virtual void wm_event(GUI::WMEvent&) override;
|
||||
virtual void screen_rects_change_event(GUI::ScreenRectsChangeEvent&) override;
|
||||
|
||||
|
|
Loading…
Reference in a new issue