mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-04 09:42:42 +01:00 
			
		
		
		
	Add a config to set a timeout for the idle_inhibitor module
This commit is contained in:
		@@ -9,6 +9,8 @@
 | 
			
		||||
namespace waybar::modules {
 | 
			
		||||
 | 
			
		||||
class IdleInhibitor : public ALabel {
 | 
			
		||||
 sigc::connection       timeout_;
 | 
			
		||||
 | 
			
		||||
 public:
 | 
			
		||||
  IdleInhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
 | 
			
		||||
  ~IdleInhibitor();
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,10 @@ screensaving, also known as "presentation mode".
 | 
			
		||||
	typeof: double ++
 | 
			
		||||
	Threshold to be used when scrolling.
 | 
			
		||||
 | 
			
		||||
*timeout*: ++
 | 
			
		||||
	typeof: double ++
 | 
			
		||||
	The number of minutes the inhibit should last.
 | 
			
		||||
 | 
			
		||||
*tooltip*: ++
 | 
			
		||||
	typeof: bool ++
 | 
			
		||||
	default: true ++
 | 
			
		||||
@@ -82,6 +86,7 @@ screensaving, also known as "presentation mode".
 | 
			
		||||
	"format-icons": {
 | 
			
		||||
	    "activated": "",
 | 
			
		||||
	    "deactivated": ""
 | 
			
		||||
	}
 | 
			
		||||
	},
 | 
			
		||||
	"timeout": 30.5
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,29 @@ 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Make all other idle inhibitor modules update
 | 
			
		||||
    for (auto const& module : waybar::modules::IdleInhibitor::modules) {
 | 
			
		||||
      if (module != this) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user