Add a way to hide keyboard state module when unlocked
parent
2c927de4c6
commit
4ac9cd71e0
|
@ -32,12 +32,15 @@ class KeyboardState : public AModule {
|
||||||
Gtk::Label scrolllock_label_;
|
Gtk::Label scrolllock_label_;
|
||||||
|
|
||||||
std::string numlock_format_;
|
std::string numlock_format_;
|
||||||
|
std::string numlock_locked_format_;
|
||||||
std::string capslock_format_;
|
std::string capslock_format_;
|
||||||
|
std::string capslock_locked_format_;
|
||||||
std::string scrolllock_format_;
|
std::string scrolllock_format_;
|
||||||
const std::chrono::seconds interval_;
|
std::string scrolllock_locked_format_;
|
||||||
std::string icon_locked_;
|
std::string icon_locked_;
|
||||||
std::string icon_unlocked_;
|
std::string icon_unlocked_;
|
||||||
std::string devices_path_;
|
std::string devices_path_;
|
||||||
|
const std::chrono::seconds interval_;
|
||||||
|
|
||||||
struct libinput* libinput_;
|
struct libinput* libinput_;
|
||||||
std::unordered_map<std::string, struct libinput_device*> libinput_devices_;
|
std::unordered_map<std::string, struct libinput_device*> libinput_devices_;
|
||||||
|
|
|
@ -84,20 +84,13 @@ waybar::modules::KeyboardState::KeyboardState(const std::string& id, const Bar&
|
||||||
box_(bar.orientation, 0),
|
box_(bar.orientation, 0),
|
||||||
numlock_label_(""),
|
numlock_label_(""),
|
||||||
capslock_label_(""),
|
capslock_label_(""),
|
||||||
numlock_format_(config_["format"].isString() ? config_["format"].asString()
|
scrolllock_label_(""),
|
||||||
: config_["format"]["numlock"].isString()
|
numlock_format_("{name} {icon}"),
|
||||||
? config_["format"]["numlock"].asString()
|
numlock_locked_format_("{name} {icon}"),
|
||||||
: "{name} {icon}"),
|
capslock_format_("{name} {icon}"),
|
||||||
capslock_format_(config_["format"].isString() ? config_["format"].asString()
|
capslock_locked_format_("{name} {icon}"),
|
||||||
: config_["format"]["capslock"].isString()
|
scrolllock_format_("{name} {icon}"),
|
||||||
? config_["format"]["capslock"].asString()
|
scrolllock_locked_format_("{name} {icon}"),
|
||||||
: "{name} {icon}"),
|
|
||||||
scrolllock_format_(config_["format"].isString() ? config_["format"].asString()
|
|
||||||
: config_["format"]["scrolllock"].isString()
|
|
||||||
? config_["format"]["scrolllock"].asString()
|
|
||||||
: "{name} {icon}"),
|
|
||||||
interval_(
|
|
||||||
std::chrono::seconds(config_["interval"].isUInt() ? config_["interval"].asUInt() : 1)),
|
|
||||||
icon_locked_(config_["format-icons"]["locked"].isString()
|
icon_locked_(config_["format-icons"]["locked"].isString()
|
||||||
? config_["format-icons"]["locked"].asString()
|
? config_["format-icons"]["locked"].asString()
|
||||||
: "locked"),
|
: "locked"),
|
||||||
|
@ -105,6 +98,8 @@ waybar::modules::KeyboardState::KeyboardState(const std::string& id, const Bar&
|
||||||
? config_["format-icons"]["unlocked"].asString()
|
? config_["format-icons"]["unlocked"].asString()
|
||||||
: "unlocked"),
|
: "unlocked"),
|
||||||
devices_path_("/dev/input/"),
|
devices_path_("/dev/input/"),
|
||||||
|
interval_(
|
||||||
|
std::chrono::seconds(config_["interval"].isUInt() ? config_["interval"].asUInt() : 1)),
|
||||||
libinput_(nullptr),
|
libinput_(nullptr),
|
||||||
libinput_devices_({}) {
|
libinput_devices_({}) {
|
||||||
static struct libinput_interface interface = {
|
static struct libinput_interface interface = {
|
||||||
|
@ -116,6 +111,39 @@ waybar::modules::KeyboardState::KeyboardState(const std::string& id, const Bar&
|
||||||
|
|
||||||
libinput_ = libinput_path_create_context(&interface, NULL);
|
libinput_ = libinput_path_create_context(&interface, NULL);
|
||||||
|
|
||||||
|
if (config_["format"].isString()) {
|
||||||
|
const std::string& format = config_["format"].asString();
|
||||||
|
numlock_format_ = format;
|
||||||
|
numlock_locked_format_ = format;
|
||||||
|
capslock_format_ = format;
|
||||||
|
capslock_locked_format_ = format;
|
||||||
|
scrolllock_format_ = format;
|
||||||
|
scrolllock_locked_format_ = format;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (config_["format"]["numlock"].isString()) {
|
||||||
|
numlock_format_ = config_["format"]["numlock"].asString();
|
||||||
|
numlock_locked_format_ = numlock_format_;
|
||||||
|
}
|
||||||
|
if (config_["format"]["numlock-locked"].isString()) {
|
||||||
|
numlock_locked_format_ = config_["format"]["numlock-locked"].asString();
|
||||||
|
}
|
||||||
|
if (config_["format"]["capslock"].isString()) {
|
||||||
|
capslock_format_ = config_["format"]["capslock"].asString();
|
||||||
|
capslock_locked_format_ = capslock_format_;
|
||||||
|
}
|
||||||
|
if (config_["format"]["capslock-locked"].isString()) {
|
||||||
|
capslock_locked_format_ = config_["format"]["capslock-locked"].asString();
|
||||||
|
}
|
||||||
|
if (config_["format"]["scrolllock"].isString()) {
|
||||||
|
scrolllock_format_ = config_["format"]["scrolllock"].asString();
|
||||||
|
scrolllock_locked_format_ = scrolllock_format_;
|
||||||
|
}
|
||||||
|
if (config_["format"]["scrolllock-locked"].isString()) {
|
||||||
|
scrolllock_locked_format_ = config_["format"]["scrolllock-locked"].asString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
box_.set_name("keyboard-state");
|
box_.set_name("keyboard-state");
|
||||||
if (config_["numlock"].asBool()) {
|
if (config_["numlock"].asBool()) {
|
||||||
numlock_label_.get_style_context()->add_class("numlock");
|
numlock_label_.get_style_context()->add_class("numlock");
|
||||||
|
@ -280,23 +308,27 @@ auto waybar::modules::KeyboardState::update() -> void {
|
||||||
bool state;
|
bool state;
|
||||||
Gtk::Label& label;
|
Gtk::Label& label;
|
||||||
const std::string& format;
|
const std::string& format;
|
||||||
|
const std::string& format_locked;
|
||||||
const char* name;
|
const char* name;
|
||||||
} label_states[] = {
|
} label_states[] = {
|
||||||
{(bool)numl, numlock_label_, numlock_format_, "Num"},
|
{(bool)numl, numlock_label_, numlock_format_, numlock_locked_format_, "Num"},
|
||||||
{(bool)capsl, capslock_label_, capslock_format_, "Caps"},
|
{(bool)capsl, capslock_label_, capslock_format_, capslock_locked_format_, "Caps"},
|
||||||
{(bool)scrolll, scrolllock_label_, scrolllock_format_, "Scroll"},
|
{(bool)scrolll, scrolllock_label_, scrolllock_format_, scrolllock_locked_format_, "Scroll"},
|
||||||
};
|
};
|
||||||
for (auto& label_state : label_states) {
|
for (auto& label_state : label_states) {
|
||||||
std::string text;
|
std::string text;
|
||||||
text = fmt::format(fmt::runtime(label_state.format),
|
|
||||||
fmt::arg("icon", label_state.state ? icon_locked_ : icon_unlocked_),
|
|
||||||
fmt::arg("name", label_state.name));
|
|
||||||
label_state.label.set_markup(text);
|
|
||||||
if (label_state.state) {
|
if (label_state.state) {
|
||||||
label_state.label.get_style_context()->add_class("locked");
|
label_state.label.get_style_context()->add_class("locked");
|
||||||
|
text = fmt::format(fmt::runtime(label_state.format_locked),
|
||||||
|
fmt::arg("icon", icon_locked_),
|
||||||
|
fmt::arg("name", label_state.name));
|
||||||
} else {
|
} else {
|
||||||
label_state.label.get_style_context()->remove_class("locked");
|
label_state.label.get_style_context()->remove_class("locked");
|
||||||
|
text = fmt::format(fmt::runtime(label_state.format),
|
||||||
|
fmt::arg("icon", icon_unlocked_),
|
||||||
|
fmt::arg("name", label_state.name));
|
||||||
}
|
}
|
||||||
|
label_state.label.set_markup(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
AModule::update();
|
AModule::update();
|
||||||
|
|
Loading…
Reference in New Issue