8566051336
Modules that don't produce any output are hidden by the controller (don't have margins or separators). The tray module should also do that for `format = <tray>` when there are no icons. This required the visibility handling to be tied to the module visibility instead of being handled by the renderer. Otherwise, the renderer would hide the tray (because the %{Pt} tag was never sent) and the tray would not unhide when new icons appeared; it can't differentiate between hidden because empty and hidden because the module is hidden by the user (the latter is the reason the renderer does hiding at all). Fixes #3036
40 lines
945 B
C++
40 lines
945 B
C++
#pragma once
|
|
|
|
#include "common.hpp"
|
|
#include "components/bar.hpp"
|
|
#include "modules/meta/static_module.hpp"
|
|
#include "modules/meta/types.hpp"
|
|
#include "x11/tray_manager.hpp"
|
|
|
|
POLYBAR_NS
|
|
namespace modules {
|
|
/**
|
|
* Wraps the tray_manager in a module.
|
|
*
|
|
* The module produces the `%{Pt}` formatting tag, which is used by the renderer
|
|
* to place the tray.
|
|
* The visibility of the tray icons is directly tied to the visibility of the
|
|
* module.
|
|
*/
|
|
class tray_module : public static_module<tray_module> {
|
|
public:
|
|
explicit tray_module(const bar_settings& bar_settings, string name_, const config&);
|
|
string get_format() const;
|
|
|
|
void set_visible(bool value) override;
|
|
|
|
void start() override;
|
|
|
|
bool build(builder* builder, const string& tag) const;
|
|
void update() {}
|
|
|
|
static constexpr auto TYPE = TRAY_TYPE;
|
|
|
|
private:
|
|
static constexpr const char* TAG_TRAY{"<tray>"};
|
|
|
|
tray::manager m_tray;
|
|
};
|
|
} // namespace modules
|
|
POLYBAR_NS_END
|