1 #pragma once 2 3 #include <fmt/format.h> 4 #include <gdk/gdk.h> 5 #include <gdk/gdkwayland.h> 6 #include <wayland-client.h> 7 8 #include "bar.hpp" 9 #include "config.hpp" 10 11 struct zwlr_layer_shell_v1; 12 struct zwp_idle_inhibitor_v1; 13 struct zwp_idle_inhibit_manager_v1; 14 15 namespace waybar { 16 17 class Client { 18 public: 19 static Client *inst(); 20 int main(int argc, char *argv[]); 21 void reset(); 22 23 Glib::RefPtr<Gtk::Application> gtk_app; 24 Glib::RefPtr<Gdk::Display> gdk_display; 25 struct wl_display * wl_display = nullptr; 26 struct wl_registry * registry = nullptr; 27 struct zwlr_layer_shell_v1 * layer_shell = nullptr; 28 struct zxdg_output_manager_v1 * xdg_output_manager = nullptr; 29 struct zwp_idle_inhibit_manager_v1 *idle_inhibit_manager = nullptr; 30 std::vector<std::unique_ptr<Bar>> bars; 31 Config config; 32 std::string bar_id; 33 34 private: 35 Client() = default; 36 const std::string getStyle(const std::string &style); 37 void bindInterfaces(); 38 void handleOutput(struct waybar_output &output); 39 auto setupCss(const std::string &css_file) -> void; 40 struct waybar_output & getOutput(void *); 41 std::vector<Json::Value> getOutputConfigs(struct waybar_output &output); 42 43 static void handleGlobal(void *data, struct wl_registry *registry, uint32_t name, 44 const char *interface, uint32_t version); 45 static void handleGlobalRemove(void *data, struct wl_registry *registry, uint32_t name); 46 static void handleOutputDone(void *, struct zxdg_output_v1 *); 47 static void handleOutputName(void *, struct zxdg_output_v1 *, const char *); 48 static void handleOutputDescription(void *, struct zxdg_output_v1 *, const char *); 49 void handleMonitorAdded(Glib::RefPtr<Gdk::Monitor> monitor); 50 void handleMonitorRemoved(Glib::RefPtr<Gdk::Monitor> monitor); 51 void handleDeferredMonitorRemoval(Glib::RefPtr<Gdk::Monitor> monitor); 52 53 Glib::RefPtr<Gtk::StyleContext> style_context_; 54 Glib::RefPtr<Gtk::CssProvider> css_provider_; 55 std::list<struct waybar_output> outputs_; 56 }; 57 58 } // namespace waybar 59