Skip to content
Érico Nogueira Rolim edited this page Sep 8, 2020 · 1 revision

Writing Modules

A Waybar module is usually a class derived from the waybar::ALabel class, which is itself derived from waybar::AModule. Modules can also be derived directly from waybar::AModule.

Module source files should go in src/modules/, while their headers should be in include/modules/. The source file should be added to src_files in meson.build according the appropriate feature flag, which should be listed in meson_options.txt. The module instantiation should be added in src/factory.cpp, while the module's header should be included in include/factory.hpp.

A basic module will write text into its label_ member (inherited from ALabel) using its set_markup() method. You will usually want to have some way of changing the text in said label to respond to external events, which can be achieved by defining ALabel's virtual auto update() -> void method for your class. This function will be called whenever the emit() method for the dp member (inherited from AModule) is called. The update() method should also call the update() method from its parent class: ALabel::update();.

The simplest way of reacting to external events is by creating a polling module. This can be done by initializing ALabel with some value for the interval parameter and adding an util::Sleeper_Thread variable to your class, which requires including the util/sleeper_thread.hpp header. The sleeper thread should then be configured similarly to how it's done in src/modules/clock.cpp.

Clone this wiki locally