diff --git a/include/bar.hpp b/include/bar.hpp index 7ab6aebe..65db91a2 100644 --- a/include/bar.hpp +++ b/include/bar.hpp @@ -1,10 +1,10 @@ #pragma once #include +#include #include #include #include -#include #include #include "AModule.hpp" #include "idle-inhibit-unstable-v1-client-protocol.h" @@ -15,10 +15,10 @@ namespace waybar { class Factory; struct waybar_output { - struct wl_output * output; + struct wl_output * output = nullptr; std::string name; uint32_t wl_name; - struct zxdg_output_v1 *xdg_output; + struct zxdg_output_v1 *xdg_output = nullptr; }; class Bar { diff --git a/src/client.cpp b/src/client.cpp index b103bf78..34efdf10 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -65,8 +65,14 @@ void waybar::Client::handleGlobalRemove(void * data, struct wl_registry * /*re client->outputs_.end(), [&name](const auto &output) { return output->wl_name == name; }); if (it != client->outputs_.end()) { - zxdg_output_v1_destroy((*it)->xdg_output); - wl_output_destroy((*it)->output); + if ((*it)->xdg_output != nullptr) { + zxdg_output_v1_destroy((*it)->xdg_output); + (*it)->xdg_output = nullptr; + } + if ((*it)->output != nullptr) { + wl_output_destroy((*it)->output); + (*it)->output = nullptr; + } client->outputs_.erase(it); } } @@ -151,8 +157,14 @@ void waybar::Client::handleName(void * data, struct zxdg_output_v1 * /*xdg_ output->name = name; auto configs = client->getOutputConfigs(output); if (configs.empty()) { - wl_output_destroy(output->output); - zxdg_output_v1_destroy(output->xdg_output); + if (output->output != nullptr) { + wl_output_destroy(output->output); + output->output = nullptr; + } + if (output->xdg_output != nullptr) { + zxdg_output_v1_destroy(output->xdg_output); + output->xdg_output = nullptr; + } } else { wl_display_roundtrip(client->wl_display); for (const auto &config : configs) {