feat: attempt to move windows out of the create window payload before taking them from workspaces
This commit is contained in:
parent
6ddd283d0f
commit
193040c41e
|
@ -41,6 +41,8 @@ class CreateWindow {
|
||||||
std::string workspace_name() const { return workspace_name_; }
|
std::string workspace_name() const { return workspace_name_; }
|
||||||
WindowAddress addr() const { return window_address_; }
|
WindowAddress addr() const { return window_address_; }
|
||||||
|
|
||||||
|
void move_to_worksace(std::string& new_workspace_name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clear_addr();
|
void clear_addr();
|
||||||
void clear_workspace_name();
|
void clear_workspace_name();
|
||||||
|
|
|
@ -367,6 +367,15 @@ void Workspaces::on_window_moved(std::string payload) {
|
||||||
|
|
||||||
std::string window_repr;
|
std::string window_repr;
|
||||||
|
|
||||||
|
// If the window was still queued to be created, just change its destination
|
||||||
|
// and exit
|
||||||
|
for (auto &window : windows_to_create_) {
|
||||||
|
if (window.addr() == window_address) {
|
||||||
|
window.move_to_worksace(workspace_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Take the window's representation from the old workspace...
|
// Take the window's representation from the old workspace...
|
||||||
for (auto &workspace : workspaces_) {
|
for (auto &workspace : workspaces_) {
|
||||||
try {
|
try {
|
||||||
|
@ -379,8 +388,10 @@ void Workspaces::on_window_moved(std::string payload) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ...and add it to the new workspace
|
// ...and add it to the new workspace
|
||||||
|
if (!window_repr.empty()) {
|
||||||
windows_to_create_.emplace_back(CreateWindow(workspace_name, window_address, window_repr));
|
windows_to_create_.emplace_back(CreateWindow(workspace_name, window_address, window_repr));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Workspaces::update_window_count() {
|
void Workspaces::update_window_count() {
|
||||||
const Json::Value workspaces_json = gIPC->getSocket1JsonReply("workspaces");
|
const Json::Value workspaces_json = gIPC->getSocket1JsonReply("workspaces");
|
||||||
|
@ -934,4 +945,8 @@ void CreateWindow::clear_workspace_name() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CreateWindow::move_to_worksace(std::string &new_workspace_name) {
|
||||||
|
workspace_name_ = new_workspace_name;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace waybar::modules::hyprland
|
} // namespace waybar::modules::hyprland
|
||||||
|
|
Loading…
Reference in New Issue