mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-01 00:12:42 +01:00 
			
		
		
		
	feat: create new workspace on the wanted output
This commit is contained in:
		| @@ -16,7 +16,7 @@ Workspaces::Workspaces(const std::string &id, const Bar &bar, const Json::Value | |||||||
|   ipc_.signal_cmd.connect(sigc::mem_fun(*this, &Workspaces::onCmd)); |   ipc_.signal_cmd.connect(sigc::mem_fun(*this, &Workspaces::onCmd)); | ||||||
|   ipc_.sendCmd(IPC_GET_WORKSPACES); |   ipc_.sendCmd(IPC_GET_WORKSPACES); | ||||||
|   if (!config["disable-bar-scroll"].asBool()) { |   if (!config["disable-bar-scroll"].asBool()) { | ||||||
|     auto &window = const_cast<Bar&>(bar_).window; |     auto &window = const_cast<Bar &>(bar_).window; | ||||||
|     window.add_events(Gdk::SCROLL_MASK | Gdk::SMOOTH_SCROLL_MASK); |     window.add_events(Gdk::SCROLL_MASK | Gdk::SMOOTH_SCROLL_MASK); | ||||||
|     window.signal_scroll_event().connect(sigc::mem_fun(*this, &Workspaces::handleScroll)); |     window.signal_scroll_event().connect(sigc::mem_fun(*this, &Workspaces::handleScroll)); | ||||||
|   } |   } | ||||||
| @@ -49,7 +49,7 @@ void Workspaces::onCmd(const struct Ipc::ipc_response &res) { | |||||||
|                      }); |                      }); | ||||||
|  |  | ||||||
|         // adding persistant workspaces (as per the config file) |         // adding persistant workspaces (as per the config file) | ||||||
|         const Json::Value &p_workspaces = config_["persistant_workspaces"]; |         const Json::Value &            p_workspaces = config_["persistant_workspaces"]; | ||||||
|         const std::vector<std::string> p_workspaces_names = p_workspaces.getMemberNames(); |         const std::vector<std::string> p_workspaces_names = p_workspaces.getMemberNames(); | ||||||
|         for (const std::string &p_w_name : p_workspaces_names) { |         for (const std::string &p_w_name : p_workspaces_names) { | ||||||
|           const Json::Value &p_w = p_workspaces[p_w_name]; |           const Json::Value &p_w = p_workspaces[p_w_name]; | ||||||
| @@ -68,6 +68,7 @@ void Workspaces::onCmd(const struct Ipc::ipc_response &res) { | |||||||
|               if (output.asString() == bar_.output->name) { |               if (output.asString() == bar_.output->name) { | ||||||
|                 Json::Value v; |                 Json::Value v; | ||||||
|                 v["name"] = p_w_name; |                 v["name"] = p_w_name; | ||||||
|  |                 v["target_output"] = bar_.output->name; | ||||||
|                 workspaces_.emplace_back(std::move(v)); |                 workspaces_.emplace_back(std::move(v)); | ||||||
|                 break; |                 break; | ||||||
|               } |               } | ||||||
| @@ -202,9 +203,18 @@ Gtk::Button &Workspaces::addButton(const Json::Value &node) { | |||||||
|   auto &button = pair.first->second; |   auto &button = pair.first->second; | ||||||
|   box_.pack_start(button, false, false, 0); |   box_.pack_start(button, false, false, 0); | ||||||
|   button.set_relief(Gtk::RELIEF_NONE); |   button.set_relief(Gtk::RELIEF_NONE); | ||||||
|   button.signal_clicked().connect([this, pair] { |   button.signal_clicked().connect([this, node] { | ||||||
|     try { |     try { | ||||||
|       ipc_.sendCmd(IPC_COMMAND, fmt::format("workspace \"{}\"", pair.first->first)); |       if (node["target_output"].isString()) { | ||||||
|  |         ipc_.sendCmd( | ||||||
|  |             IPC_COMMAND, | ||||||
|  |             fmt::format("workspace \"{}\"; move workspace to output \"{}\"; workspace \"{}\"", | ||||||
|  |                         node["name"].asString(), | ||||||
|  |                         node["target_output"].asString(), | ||||||
|  |                         node["name"].asString())); | ||||||
|  |       } else { | ||||||
|  |         ipc_.sendCmd(IPC_COMMAND, fmt::format("workspace \"{}\"")); | ||||||
|  |       } | ||||||
|     } catch (const std::exception &e) { |     } catch (const std::exception &e) { | ||||||
|       std::cerr << e.what() << std::endl; |       std::cerr << e.what() << std::endl; | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex