mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-31 16:02:43 +01:00 
			
		
		
		
	Add config value for inhibitor default state.
This commit is contained in:
		| @@ -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) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ian Manske
					Ian Manske