mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:12:43 +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
	
	 Andreas Kling
						Andreas Kling