Merge pull request #1720 from IanManske/inhibitor-default-state
commit
5b0c5ea9ce
|
@ -20,6 +20,7 @@ class IdleInhibitor : public ALabel {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool handleToggle(GdkEventButton* const& e);
|
bool handleToggle(GdkEventButton* const& e);
|
||||||
|
void toggleStatus();
|
||||||
|
|
||||||
const Bar& bar_;
|
const Bar& bar_;
|
||||||
struct zwp_idle_inhibitor_v1* idle_inhibitor_;
|
struct zwp_idle_inhibitor_v1* idle_inhibitor_;
|
||||||
|
|
|
@ -63,6 +63,11 @@ screensaving, also known as "presentation mode".
|
||||||
typeof: double ++
|
typeof: double ++
|
||||||
Threshold to be used when scrolling.
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
*start-activated*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: *false* ++
|
||||||
|
Whether the inhibit should be activated when starting waybar.
|
||||||
|
|
||||||
*timeout*: ++
|
*timeout*: ++
|
||||||
typeof: double ++
|
typeof: double ++
|
||||||
The number of minutes the inhibit should last.
|
The number of minutes the inhibit should last.
|
||||||
|
|
|
@ -16,6 +16,13 @@ waybar::modules::IdleInhibitor::IdleInhibitor(const std::string& id, const Bar&
|
||||||
throw std::runtime_error("idle-inhibit not available");
|
throw std::runtime_error("idle-inhibit not available");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (waybar::modules::IdleInhibitor::modules.empty()
|
||||||
|
&& config_["start-activated"].isBool()
|
||||||
|
&& config_["start-activated"].asBool() != status
|
||||||
|
) {
|
||||||
|
toggleStatus();
|
||||||
|
}
|
||||||
|
|
||||||
event_box_.add_events(Gdk::BUTTON_PRESS_MASK);
|
event_box_.add_events(Gdk::BUTTON_PRESS_MASK);
|
||||||
event_box_.signal_button_press_event().connect(
|
event_box_.signal_button_press_event().connect(
|
||||||
sigc::mem_fun(*this, &IdleInhibitor::handleToggle));
|
sigc::mem_fun(*this, &IdleInhibitor::handleToggle));
|
||||||
|
@ -78,34 +85,38 @@ auto waybar::modules::IdleInhibitor::update() -> void {
|
||||||
ALabel::update();
|
ALabel::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void waybar::modules::IdleInhibitor::toggleStatus() {
|
||||||
|
status = !status;
|
||||||
|
|
||||||
|
if (timeout_.connected()) {
|
||||||
|
/* cancel any already active timeout handler */
|
||||||
|
timeout_.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status && config_["timeout"].isNumeric()) {
|
||||||
|
auto timeoutMins = config_["timeout"].asDouble();
|
||||||
|
int timeoutSecs = timeoutMins * 60;
|
||||||
|
|
||||||
|
timeout_ = Glib::signal_timeout().connect_seconds(
|
||||||
|
[]() {
|
||||||
|
/* intentionally not tied to a module instance lifetime
|
||||||
|
* as the output with `this` can be disconnected
|
||||||
|
*/
|
||||||
|
spdlog::info("deactivating idle_inhibitor by timeout");
|
||||||
|
status = false;
|
||||||
|
for (auto const& module : waybar::modules::IdleInhibitor::modules) {
|
||||||
|
module->update();
|
||||||
|
}
|
||||||
|
/* disconnect */
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
timeoutSecs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool waybar::modules::IdleInhibitor::handleToggle(GdkEventButton* const& e) {
|
bool waybar::modules::IdleInhibitor::handleToggle(GdkEventButton* const& e) {
|
||||||
if (e->button == 1) {
|
if (e->button == 1) {
|
||||||
status = !status;
|
toggleStatus();
|
||||||
|
|
||||||
if (timeout_.connected()) {
|
|
||||||
/* cancel any already active timeout handler */
|
|
||||||
timeout_.disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status && config_["timeout"].isNumeric()) {
|
|
||||||
auto timeoutMins = config_["timeout"].asDouble();
|
|
||||||
int timeoutSecs = timeoutMins * 60;
|
|
||||||
|
|
||||||
timeout_ = Glib::signal_timeout().connect_seconds(
|
|
||||||
[]() {
|
|
||||||
/* intentionally not tied to a module instance lifetime
|
|
||||||
* as the output with `this` can be disconnected
|
|
||||||
*/
|
|
||||||
spdlog::info("deactivating idle_inhibitor by timeout");
|
|
||||||
status = false;
|
|
||||||
for (auto const& module : waybar::modules::IdleInhibitor::modules) {
|
|
||||||
module->update();
|
|
||||||
}
|
|
||||||
/* disconnect */
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
timeoutSecs);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make all other idle inhibitor modules update
|
// Make all other idle inhibitor modules update
|
||||||
for (auto const& module : waybar::modules::IdleInhibitor::modules) {
|
for (auto const& module : waybar::modules::IdleInhibitor::modules) {
|
||||||
|
|
Loading…
Reference in New Issue