1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:57:36 +00:00

LibGUI: Don't leak every tooltip window ever :^)

This commit is contained in:
Andreas Kling 2020-02-15 01:27:37 +01:00
parent dcb0766d3f
commit 10ccc9e11c
2 changed files with 13 additions and 10 deletions

View file

@ -106,7 +106,18 @@ Action* Application::action_for_key_event(const KeyEvent& event)
} }
class Application::TooltipWindow final : public Window { class Application::TooltipWindow final : public Window {
C_OBJECT(TooltipWindow);
public: public:
void set_tooltip(const StringView& tooltip)
{
// FIXME: Add some kind of GLabel auto-sizing feature.
int text_width = m_label->font().width(tooltip);
set_rect(100, 100, text_width + 10, m_label->font().glyph_height() + 8);
m_label->set_text(tooltip);
}
private:
TooltipWindow() TooltipWindow()
{ {
set_window_type(WindowType::Tooltip); set_window_type(WindowType::Tooltip);
@ -119,21 +130,13 @@ public:
set_main_widget(m_label); set_main_widget(m_label);
} }
void set_tooltip(const StringView& tooltip)
{
// FIXME: Add some kind of GLabel auto-sizing feature.
int text_width = m_label->font().width(tooltip);
set_rect(100, 100, text_width + 10, m_label->font().glyph_height() + 8);
m_label->set_text(tooltip);
}
RefPtr<Label> m_label; RefPtr<Label> m_label;
}; };
void Application::show_tooltip(const StringView& tooltip, const Gfx::Point& screen_location) void Application::show_tooltip(const StringView& tooltip, const Gfx::Point& screen_location)
{ {
if (!m_tooltip_window) { if (!m_tooltip_window) {
m_tooltip_window = new TooltipWindow; m_tooltip_window = TooltipWindow::construct();
m_tooltip_window->set_double_buffering_enabled(false); m_tooltip_window->set_double_buffering_enabled(false);
} }
m_tooltip_window->set_tooltip(tooltip); m_tooltip_window->set_tooltip(tooltip);

View file

@ -77,7 +77,7 @@ private:
RefPtr<Gfx::PaletteImpl> m_system_palette; RefPtr<Gfx::PaletteImpl> m_system_palette;
HashMap<Shortcut, Action*> m_global_shortcut_actions; HashMap<Shortcut, Action*> m_global_shortcut_actions;
class TooltipWindow; class TooltipWindow;
TooltipWindow* m_tooltip_window { nullptr }; RefPtr<TooltipWindow> m_tooltip_window;
bool m_quit_when_last_window_deleted { true }; bool m_quit_when_last_window_deleted { true };
String m_invoked_as; String m_invoked_as;
Vector<String> m_args; Vector<String> m_args;