mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 03:02:45 +00:00 
			
		
		
		
	 7984c2836d
			
		
	
	
		7984c2836d
		
	
	
	
	
		
			
			This also adds the ability to query how many virtual desktops are set up, and for the Taskbar to be notified when the active virtual desktop has changed.
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include <AK/Badge.h>
 | |
| #include <LibCore/ConfigFile.h>
 | |
| #include <LibGUI/Desktop.h>
 | |
| #include <LibGUI/WindowServerConnection.h>
 | |
| #include <string.h>
 | |
| #include <unistd.h>
 | |
| 
 | |
| namespace GUI {
 | |
| 
 | |
| Desktop& Desktop::the()
 | |
| {
 | |
|     static Desktop* the;
 | |
|     if (!the)
 | |
|         the = new Desktop;
 | |
|     return *the;
 | |
| }
 | |
| 
 | |
| Desktop::Desktop()
 | |
| {
 | |
| }
 | |
| 
 | |
| void Desktop::did_receive_screen_rects(Badge<WindowServerConnection>, const Vector<Gfx::IntRect, 4>& rects, size_t main_screen_index, unsigned virtual_desktop_rows, unsigned virtual_desktop_columns)
 | |
| {
 | |
|     m_main_screen_index = main_screen_index;
 | |
|     m_rects = rects;
 | |
|     if (!m_rects.is_empty()) {
 | |
|         m_bounding_rect = m_rects[0];
 | |
|         for (size_t i = 1; i < m_rects.size(); i++)
 | |
|             m_bounding_rect = m_bounding_rect.united(m_rects[i]);
 | |
|     } else {
 | |
|         m_bounding_rect = {};
 | |
|     }
 | |
| 
 | |
|     m_virtual_desktop_rows = virtual_desktop_rows;
 | |
|     m_virtual_desktop_columns = virtual_desktop_columns;
 | |
| }
 | |
| 
 | |
| void Desktop::set_background_color(const StringView& background_color)
 | |
| {
 | |
|     WindowServerConnection::the().async_set_background_color(background_color);
 | |
| }
 | |
| 
 | |
| void Desktop::set_wallpaper_mode(const StringView& mode)
 | |
| {
 | |
|     WindowServerConnection::the().async_set_wallpaper_mode(mode);
 | |
| }
 | |
| 
 | |
| bool Desktop::set_wallpaper(const StringView& path, bool save_config)
 | |
| {
 | |
|     WindowServerConnection::the().async_set_wallpaper(path);
 | |
|     auto ret_val = WindowServerConnection::the().wait_for_specific_message<Messages::WindowClient::SetWallpaperFinished>()->success();
 | |
| 
 | |
|     if (ret_val && save_config) {
 | |
|         RefPtr<Core::ConfigFile> config = Core::ConfigFile::get_for_app("WindowManager");
 | |
|         dbgln("Saving wallpaper path '{}' to config file at {}", path, config->filename());
 | |
|         config->write_entry("Background", "Wallpaper", path);
 | |
|         config->sync();
 | |
|     }
 | |
| 
 | |
|     return ret_val;
 | |
| }
 | |
| 
 | |
| String Desktop::wallpaper() const
 | |
| {
 | |
|     return WindowServerConnection::the().get_wallpaper();
 | |
| }
 | |
| 
 | |
| }
 |