summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorTom <tomut@yahoo.com>2020-08-26 22:24:19 -0600
committerAndreas Kling <kling@serenityos.org>2020-08-27 10:42:15 +0200
commit4463fed3988c6b57a6eecea876105e98cdc02376 (patch)
treefda445409a759d2a792d30a3d754cf6bb1cb62cd /Libraries
parentd876c49ec7a45885db1d12bc3d3c71e4916fb5b3 (diff)
downloadserenity-4463fed3988c6b57a6eecea876105e98cdc02376.zip
LibGUI: Splitter should only override cursor if within grabbable area
Fixes #3284
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibGUI/Splitter.cpp21
-rw-r--r--Libraries/LibGUI/Splitter.h3
2 files changed, 19 insertions, 5 deletions
diff --git a/Libraries/LibGUI/Splitter.cpp b/Libraries/LibGUI/Splitter.cpp
index c532ce926b..665f84d1b9 100644
--- a/Libraries/LibGUI/Splitter.cpp
+++ b/Libraries/LibGUI/Splitter.cpp
@@ -58,15 +58,25 @@ void Splitter::resize_event(ResizeEvent& event)
m_grabbable_rect = {};
}
-void Splitter::enter_event(Core::Event&)
+void Splitter::override_cursor(bool do_override)
{
- window()->set_override_cursor(m_orientation == Orientation::Horizontal ? StandardCursor::ResizeColumn : StandardCursor::ResizeRow);
+ if (do_override) {
+ if (!m_overriding_cursor) {
+ window()->set_override_cursor(m_orientation == Orientation::Horizontal ? StandardCursor::ResizeColumn : StandardCursor::ResizeRow);
+ m_overriding_cursor = true;
+ }
+ } else {
+ if (m_overriding_cursor) {
+ window()->set_override_cursor(StandardCursor::None);
+ m_overriding_cursor = false;
+ }
+ }
}
void Splitter::leave_event(Core::Event&)
{
if (!m_resizing)
- window()->set_override_cursor(StandardCursor::None);
+ override_cursor(false);
if (!m_grabbable_rect.is_empty()) {
m_grabbable_rect = {};
update();
@@ -134,9 +144,12 @@ void Splitter::mousemove_event(MouseEvent& event)
if (!m_resizing) {
Widget* first { nullptr };
Widget* second { nullptr };
- if (!get_resize_candidates_at(event.position(), first, second))
+ if (!get_resize_candidates_at(event.position(), first, second)) {
+ override_cursor(false);
return;
+ }
recompute_grabbable_rect(*first, *second);
+ override_cursor(m_grabbable_rect.contains(event.position()));
return;
}
auto delta = event.position() - m_resize_origin;
diff --git a/Libraries/LibGUI/Splitter.h b/Libraries/LibGUI/Splitter.h
index 85f937fae7..d8a97023bb 100644
--- a/Libraries/LibGUI/Splitter.h
+++ b/Libraries/LibGUI/Splitter.h
@@ -44,7 +44,6 @@ protected:
virtual void mousedown_event(MouseEvent&) override;
virtual void mousemove_event(MouseEvent&) override;
virtual void mouseup_event(MouseEvent&) override;
- virtual void enter_event(Core::Event&) override;
virtual void leave_event(Core::Event&) override;
virtual void did_layout() override;
@@ -52,9 +51,11 @@ protected:
private:
void recompute_grabbable_rect(const Widget&, const Widget&);
bool get_resize_candidates_at(const Gfx::IntPoint&, Widget*&, Widget*&);
+ void override_cursor(bool do_override);
Gfx::Orientation m_orientation;
bool m_resizing { false };
+ bool m_overriding_cursor { false };
Gfx::IntPoint m_resize_origin;
WeakPtr<Widget> m_first_resizee;
WeakPtr<Widget> m_second_resizee;