diff --git a/src/canvas/wayland/config/hyprland.cpp b/src/canvas/wayland/config/hyprland.cpp index 42387fb..fcf8d42 100644 --- a/src/canvas/wayland/config/hyprland.cpp +++ b/src/canvas/wayland/config/hyprland.cpp @@ -137,8 +137,19 @@ void HyprlandSocket::remove_borders(const std::string_view appid) request(payload); } +void HyprlandSocket::change_workspace(const std::string_view appid, int workspaceid) +{ + const auto payload = fmt::format("/dispatch movetoworkspacesilent {},title:{}", workspaceid, appid); + request(payload); +} + void HyprlandSocket::move_window(const std::string_view appid, int xcoord, int ycoord) { + auto terminal = get_active_window(); + const auto &workspace = terminal.at("workspace"); + const int workspaceid = workspace.at("id"); + change_workspace(appid, workspaceid); + int res_x = xcoord; int res_y = ycoord; if (output_scale > 1.0F) { diff --git a/src/canvas/wayland/config/hyprland.hpp b/src/canvas/wayland/config/hyprland.hpp index 4353d98..eb1e2de 100644 --- a/src/canvas/wayland/config/hyprland.hpp +++ b/src/canvas/wayland/config/hyprland.hpp @@ -38,6 +38,7 @@ class HyprlandSocket : public WaylandConfig void enable_floating(std::string_view appid); void remove_borders(std::string_view appid); void remove_rounding(std::string_view appid); + void change_workspace(std::string_view appid, int workspaceid); void request(std::string_view payload); auto request_result(std::string_view payload) -> nlohmann::json; auto get_active_window() -> nlohmann::json;