mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:17:35 +00:00
SpaceAnalyzer: Fix the crash caused by using arrow keys
Previously, SpaceAnalyzer set focus on the selected BreadcrumbButton. Using arrow keys triggered the keydown_event of the AbstractButton, which later on caused a Function object to be deleted while it is still being used. This change sets the focus on TreeMapWidget and adds an event handler to TreeMapWidget for keydown events. Fixes #13254.
This commit is contained in:
parent
51df97e799
commit
eb34015748
3 changed files with 11 additions and 0 deletions
|
@ -306,6 +306,14 @@ void TreeMapWidget::doubleclick_event(GUI::MouseEvent& event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TreeMapWidget::keydown_event(GUI::KeyEvent& event)
|
||||||
|
{
|
||||||
|
if (event.key() == KeyCode::Key_Left)
|
||||||
|
set_viewpoint(m_viewpoint == 0 ? m_path.size() : m_viewpoint - 1);
|
||||||
|
else if (event.key() == KeyCode::Key_Right)
|
||||||
|
set_viewpoint(m_viewpoint == m_path.size() ? 0 : m_viewpoint + 1);
|
||||||
|
}
|
||||||
|
|
||||||
void TreeMapWidget::mousewheel_event(GUI::MouseEvent& event)
|
void TreeMapWidget::mousewheel_event(GUI::MouseEvent& event)
|
||||||
{
|
{
|
||||||
int delta = event.wheel_delta_y();
|
int delta = event.wheel_delta_y();
|
||||||
|
|
|
@ -47,6 +47,7 @@ private:
|
||||||
virtual void doubleclick_event(GUI::MouseEvent&) override;
|
virtual void doubleclick_event(GUI::MouseEvent&) override;
|
||||||
virtual void mousewheel_event(GUI::MouseEvent&) override;
|
virtual void mousewheel_event(GUI::MouseEvent&) override;
|
||||||
virtual void context_menu_event(GUI::ContextMenuEvent&) override;
|
virtual void context_menu_event(GUI::ContextMenuEvent&) override;
|
||||||
|
virtual void keydown_event(GUI::KeyEvent&) override;
|
||||||
|
|
||||||
bool rect_can_contain_children(const Gfx::IntRect& rect) const;
|
bool rect_can_contain_children(const Gfx::IntRect& rect) const;
|
||||||
bool rect_can_contain_label(const Gfx::IntRect& rect) const;
|
bool rect_can_contain_label(const Gfx::IntRect& rect) const;
|
||||||
|
|
|
@ -320,6 +320,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
auto& treemapwidget = *mainwidget.find_descendant_of_type_named<SpaceAnalyzer::TreeMapWidget>("tree_map");
|
auto& treemapwidget = *mainwidget.find_descendant_of_type_named<SpaceAnalyzer::TreeMapWidget>("tree_map");
|
||||||
auto& statusbar = *mainwidget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
auto& statusbar = *mainwidget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
||||||
|
|
||||||
|
treemapwidget.set_focus(true);
|
||||||
|
|
||||||
auto& file_menu = window->add_menu("&File");
|
auto& file_menu = window->add_menu("&File");
|
||||||
file_menu.add_action(GUI::Action::create("&Analyze", [&](auto&) {
|
file_menu.add_action(GUI::Action::create("&Analyze", [&](auto&) {
|
||||||
analyze(tree, treemapwidget, statusbar);
|
analyze(tree, treemapwidget, statusbar);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue