mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Clean (#31)
This commit is contained in:
@ -1,24 +1,26 @@
|
||||
#include "modules/sway/window.hpp"
|
||||
#include "modules/sway/ipc/client.hpp"
|
||||
|
||||
waybar::modules::sway::Window::Window(Bar &bar, Json::Value config)
|
||||
: ALabel(std::move(config)), bar_(bar)
|
||||
waybar::modules::sway::Window::Window(Bar &bar, const Json::Value& config)
|
||||
: ALabel(config), bar_(bar)
|
||||
{
|
||||
label_.set_name("window");
|
||||
std::string socketPath = getSocketPath();
|
||||
ipcfd_ = ipcOpenSocket(socketPath);
|
||||
ipc_eventfd_ = ipcOpenSocket(socketPath);
|
||||
ipcSingleCommand(ipc_eventfd_, IPC_SUBSCRIBE, "[ \"window\" ]");
|
||||
ipc_.connect();
|
||||
ipc_.subscribe("[ \"window\" ]");
|
||||
getFocusedWindow();
|
||||
thread_.sig_update.connect(sigc::mem_fun(*this, &Window::update));
|
||||
// Launch worker
|
||||
worker();
|
||||
}
|
||||
|
||||
void waybar::modules::sway::Window::worker()
|
||||
{
|
||||
thread_ = [this] {
|
||||
try {
|
||||
auto res = ipcRecvResponse(ipc_eventfd_);
|
||||
auto res = ipc_.handleEvent();
|
||||
auto parsed = parser_.parse(res.payload);
|
||||
if ((parsed["change"] == "focus" || parsed["change"] == "title")
|
||||
&& parsed["container"]["focused"].asBool()) {
|
||||
window_ = parsed["container"]["name"].asString();
|
||||
thread_.emit();
|
||||
dp.emit();
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
@ -26,12 +28,6 @@ waybar::modules::sway::Window::Window(Bar &bar, Json::Value config)
|
||||
};
|
||||
}
|
||||
|
||||
waybar::modules::sway::Window::~Window()
|
||||
{
|
||||
close(ipcfd_);
|
||||
close(ipc_eventfd_);
|
||||
}
|
||||
|
||||
auto waybar::modules::sway::Window::update() -> void
|
||||
{
|
||||
label_.set_text(window_);
|
||||
@ -55,7 +51,7 @@ std::string waybar::modules::sway::Window::getFocusedNode(Json::Value nodes)
|
||||
void waybar::modules::sway::Window::getFocusedWindow()
|
||||
{
|
||||
try {
|
||||
auto res = ipcSingleCommand(ipcfd_, IPC_GET_TREE, "");
|
||||
auto res = ipc_.sendCmd(IPC_GET_TREE);
|
||||
auto parsed = parser_.parse(res.payload);
|
||||
window_ = getFocusedNode(parsed["nodes"]);
|
||||
Glib::signal_idle().connect_once(sigc::mem_fun(*this, &Window::update));
|
||||
|
Reference in New Issue
Block a user