mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-31 16:02:43 +01:00 
			
		
		
		
	Merge pull request #1720 from IanManske/inhibitor-default-state
This commit is contained in:
		| @@ -20,6 +20,7 @@ class IdleInhibitor : public ALabel { | ||||
|  | ||||
|  private: | ||||
|   bool handleToggle(GdkEventButton* const& e); | ||||
|   void toggleStatus(); | ||||
|  | ||||
|   const Bar& bar_; | ||||
|   struct zwp_idle_inhibitor_v1* idle_inhibitor_; | ||||
|   | ||||
| @@ -63,6 +63,11 @@ screensaving, also known as "presentation mode". | ||||
| 	typeof: double ++ | ||||
| 	Threshold to be used when scrolling. | ||||
|  | ||||
| *start-activated*: ++ | ||||
|   typeof: bool ++ | ||||
|   default: *false* ++ | ||||
|   Whether the inhibit should be activated when starting waybar. | ||||
|  | ||||
| *timeout*: ++ | ||||
| 	typeof: double ++ | ||||
| 	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"); | ||||
|   } | ||||
|  | ||||
|   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_.signal_button_press_event().connect( | ||||
|       sigc::mem_fun(*this, &IdleInhibitor::handleToggle)); | ||||
| @@ -78,34 +85,38 @@ auto waybar::modules::IdleInhibitor::update() -> void { | ||||
|   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) { | ||||
|   if (e->button == 1) { | ||||
|     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); | ||||
|     } | ||||
|     toggleStatus(); | ||||
|  | ||||
|     // Make all other idle inhibitor modules update | ||||
|     for (auto const& module : waybar::modules::IdleInhibitor::modules) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex