mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 14:02:46 +00:00 
			
		
		
		
	LibGUI+WindowServer+Apps: Replace Accessory Windows
with the CaptureInput WindowMode. This mode will serve the same function as accessories: redirecting input while allowing parent windows to remain active.
This commit is contained in:
		
							parent
							
								
									0d4fd4e2a6
								
							
						
					
					
						commit
						4c7f95e2f8
					
				
					 13 changed files with 23 additions and 91 deletions
				
			
		|  | @ -90,7 +90,7 @@ Window::Window(Core::Object& parent, WindowType type) | |||
|     frame().window_was_constructed({}); | ||||
| } | ||||
| 
 | ||||
| Window::Window(ConnectionFromClient& client, WindowType window_type, WindowMode window_mode, int window_id, bool minimizable, bool closeable, bool frameless, bool resizable, bool fullscreen, bool accessory, Window* parent_window) | ||||
| Window::Window(ConnectionFromClient& client, WindowType window_type, WindowMode window_mode, int window_id, bool minimizable, bool closeable, bool frameless, bool resizable, bool fullscreen, Window* parent_window) | ||||
|     : Core::Object(&client) | ||||
|     , m_client(&client) | ||||
|     , m_type(window_type) | ||||
|  | @ -100,7 +100,6 @@ Window::Window(ConnectionFromClient& client, WindowType window_type, WindowMode | |||
|     , m_frameless(frameless) | ||||
|     , m_resizable(resizable) | ||||
|     , m_fullscreen(fullscreen) | ||||
|     , m_accessory(accessory) | ||||
|     , m_window_id(window_id) | ||||
|     , m_client_id(client.client_id()) | ||||
|     , m_icon(default_window_icon()) | ||||
|  | @ -974,19 +973,11 @@ void Window::add_child_window(Window& child_window) | |||
|     m_child_windows.append(child_window); | ||||
| } | ||||
| 
 | ||||
| void Window::add_accessory_window(Window& accessory_window) | ||||
| { | ||||
|     m_accessory_windows.append(accessory_window); | ||||
| } | ||||
| 
 | ||||
| void Window::set_parent_window(Window& parent_window) | ||||
| { | ||||
|     VERIFY(!m_parent_window); | ||||
|     m_parent_window = parent_window; | ||||
|     if (m_accessory) | ||||
|         parent_window.add_accessory_window(*this); | ||||
|     else | ||||
|         parent_window.add_child_window(*this); | ||||
|     parent_window.add_child_window(*this); | ||||
| } | ||||
| 
 | ||||
| Window* Window::modeless_ancestor() | ||||
|  | @ -1000,21 +991,9 @@ Window* Window::modeless_ancestor() | |||
|     return nullptr; | ||||
| } | ||||
| 
 | ||||
| bool Window::is_accessory() const | ||||
| bool Window::is_capturing_active_input_from(Window const& window) const | ||||
| { | ||||
|     if (!m_accessory) | ||||
|         return false; | ||||
|     if (parent_window() != nullptr) | ||||
|         return true; | ||||
| 
 | ||||
|     // If accessory window was unparented, convert to a regular window
 | ||||
|     const_cast<Window*>(this)->set_accessory(false); | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| bool Window::is_accessory_of(Window& window) const | ||||
| { | ||||
|     if (!is_accessory()) | ||||
|     if (!is_capturing_input()) | ||||
|         return false; | ||||
|     return parent_window() == &window; | ||||
| } | ||||
|  | @ -1030,14 +1009,9 @@ void Window::set_progress(Optional<int> progress) | |||
| 
 | ||||
| bool Window::is_descendant_of(Window& window) const | ||||
| { | ||||
|     for (auto* parent = parent_window(); parent; parent = parent->parent_window()) { | ||||
|     for (auto* parent = parent_window(); parent; parent = parent->parent_window()) | ||||
|         if (parent == &window) | ||||
|             return true; | ||||
|         for (auto& accessory : parent->accessory_windows()) { | ||||
|             if (accessory == &window) | ||||
|                 return true; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 thankyouverycool
						thankyouverycool