mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:48:11 +00:00
LibGUI: Add GUI::Application::active_window()
Instead of each window having a bool flag that says whether that window is currently active, have a pointer to the active window on the app object instead.
This commit is contained in:
parent
8b90e8d08b
commit
1c8eaf28cd
4 changed files with 31 additions and 3 deletions
|
@ -235,4 +235,16 @@ void Application::tooltip_hide_timer_did_fire()
|
||||||
m_tooltip_window->hide();
|
m_tooltip_window->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::window_did_become_active(Badge<Window>, Window& window)
|
||||||
|
{
|
||||||
|
m_active_window = window.make_weak_ptr<Window>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::window_did_become_inactive(Badge<Window>, Window& window)
|
||||||
|
{
|
||||||
|
if (m_active_window.ptr() != &window)
|
||||||
|
return;
|
||||||
|
m_active_window = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <AK/HashMap.h>
|
#include <AK/HashMap.h>
|
||||||
#include <AK/OwnPtr.h>
|
#include <AK/OwnPtr.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
|
#include <AK/WeakPtr.h>
|
||||||
#include <LibCore/Object.h>
|
#include <LibCore/Object.h>
|
||||||
#include <LibGUI/Forward.h>
|
#include <LibGUI/Forward.h>
|
||||||
#include <LibGUI/Shortcut.h>
|
#include <LibGUI/Shortcut.h>
|
||||||
|
@ -76,6 +77,12 @@ public:
|
||||||
|
|
||||||
Core::EventLoop& event_loop() { return *m_event_loop; }
|
Core::EventLoop& event_loop() { return *m_event_loop; }
|
||||||
|
|
||||||
|
Window* active_window() { return m_active_window; }
|
||||||
|
const Window* active_window() const { return m_active_window; }
|
||||||
|
|
||||||
|
void window_did_become_active(Badge<Window>, Window&);
|
||||||
|
void window_did_become_inactive(Badge<Window>, Window&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Application(int argc, char** argv);
|
Application(int argc, char** argv);
|
||||||
|
|
||||||
|
@ -92,6 +99,7 @@ private:
|
||||||
RefPtr<Core::Timer> m_tooltip_hide_timer;
|
RefPtr<Core::Timer> m_tooltip_hide_timer;
|
||||||
RefPtr<TooltipWindow> m_tooltip_window;
|
RefPtr<TooltipWindow> m_tooltip_window;
|
||||||
RefPtr<Widget> m_tooltip_source_widget;
|
RefPtr<Widget> m_tooltip_source_widget;
|
||||||
|
WeakPtr<Window> m_active_window;
|
||||||
bool m_quit_when_last_window_deleted { true };
|
bool m_quit_when_last_window_deleted { true };
|
||||||
bool m_focus_debugging_enabled { false };
|
bool m_focus_debugging_enabled { false };
|
||||||
String m_invoked_as;
|
String m_invoked_as;
|
||||||
|
|
|
@ -405,7 +405,10 @@ void Window::handle_input_entered_or_left_event(Core::Event& event)
|
||||||
|
|
||||||
void Window::handle_became_active_or_inactive_event(Core::Event& event)
|
void Window::handle_became_active_or_inactive_event(Core::Event& event)
|
||||||
{
|
{
|
||||||
m_is_active = event.type() == Event::WindowBecameActive;
|
if (event.type() == Event::WindowBecameActive)
|
||||||
|
Application::the()->window_did_become_active({}, *this);
|
||||||
|
else
|
||||||
|
Application::the()->window_did_become_inactive({}, *this);
|
||||||
if (m_main_widget)
|
if (m_main_widget)
|
||||||
m_main_widget->dispatch_event(event, this);
|
m_main_widget->dispatch_event(event, this);
|
||||||
if (m_focused_widget)
|
if (m_focused_widget)
|
||||||
|
@ -941,4 +944,10 @@ void Window::did_disable_focused_widget(Badge<Widget>)
|
||||||
focus_a_widget_if_possible(FocusSource::Mouse);
|
focus_a_widget_if_possible(FocusSource::Mouse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Window::is_active() const
|
||||||
|
{
|
||||||
|
ASSERT(Application::the());
|
||||||
|
return this == Application::the()->active_window();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ public:
|
||||||
virtual void event(Core::Event&) override;
|
virtual void event(Core::Event&) override;
|
||||||
|
|
||||||
bool is_visible() const;
|
bool is_visible() const;
|
||||||
bool is_active() const { return m_is_active; }
|
bool is_active() const;
|
||||||
bool is_active_input() const { return m_is_active_input; }
|
bool is_active_input() const { return m_is_active_input; }
|
||||||
|
|
||||||
bool is_accessory() const { return m_accessory; }
|
bool is_accessory() const { return m_accessory; }
|
||||||
|
@ -247,7 +247,6 @@ private:
|
||||||
WindowType m_window_type { WindowType::Normal };
|
WindowType m_window_type { WindowType::Normal };
|
||||||
Gfx::StandardCursor m_cursor { Gfx::StandardCursor::None };
|
Gfx::StandardCursor m_cursor { Gfx::StandardCursor::None };
|
||||||
Gfx::StandardCursor m_effective_cursor { Gfx::StandardCursor::None };
|
Gfx::StandardCursor m_effective_cursor { Gfx::StandardCursor::None };
|
||||||
bool m_is_active { false };
|
|
||||||
bool m_is_active_input { false };
|
bool m_is_active_input { false };
|
||||||
bool m_has_alpha_channel { false };
|
bool m_has_alpha_channel { false };
|
||||||
bool m_double_buffering_enabled { true };
|
bool m_double_buffering_enabled { true };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue