[bugfix] idle_inhibitor handles click events correctly

- Declare event handler in ALabel virtual so the idle_inhibitor can
  overriding them
- Handle the right click event in idle_inhibitor and call ALabel handler if needed
This commit is contained in:
Jonas 2019-03-03 22:02:34 +01:00
parent 7e4fed8218
commit 80ef63791d
3 changed files with 13 additions and 9 deletions

View File

@ -28,9 +28,8 @@ protected:
bool alt_ = false; bool alt_ = false;
std::string default_format_; std::string default_format_;
private: virtual bool handleToggle(GdkEventButton *const &ev);
bool handleToggle(GdkEventButton *const &ev); virtual bool handleScroll(GdkEventScroll *);
bool handleScroll(GdkEventScroll *);
}; };
} // namespace waybar } // namespace waybar

View File

@ -13,7 +13,7 @@ class IdleInhibitor: public ALabel {
~IdleInhibitor(); ~IdleInhibitor();
auto update() -> void; auto update() -> void;
private: private:
bool onClick(GdkEventButton* const& ev); bool handleToggle(GdkEventButton* const& e);
const Bar& bar_; const Bar& bar_;
std::string status_; std::string status_;

View File

@ -1,5 +1,5 @@
#include "modules/idle_inhibitor.hpp" #include "modules/idle_inhibitor.hpp"
#include "util/command.hpp"
waybar::modules::IdleInhibitor::IdleInhibitor(const std::string& id, const Bar& bar, const Json::Value& config) waybar::modules::IdleInhibitor::IdleInhibitor(const std::string& id, const Bar& bar, const Json::Value& config)
: ALabel(config, "{status}"), bar_(bar), status_("deactivated"), idle_inhibitor_(nullptr) : ALabel(config, "{status}"), bar_(bar), status_("deactivated"), idle_inhibitor_(nullptr)
@ -10,7 +10,7 @@ waybar::modules::IdleInhibitor::IdleInhibitor(const std::string& id, const Bar&
} }
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::onClick)); sigc::mem_fun(*this, &IdleInhibitor::handleToggle));
dp.emit(); dp.emit();
} }
@ -32,9 +32,8 @@ auto waybar::modules::IdleInhibitor::update() -> void
} }
} }
bool waybar::modules::IdleInhibitor::onClick(GdkEventButton* const& e) bool waybar::modules::IdleInhibitor::handleToggle(GdkEventButton* const& e) {
{ if (e->button == 1) {
if(e->button == 1) {
if (idle_inhibitor_) { if (idle_inhibitor_) {
zwp_idle_inhibitor_v1_destroy(idle_inhibitor_); zwp_idle_inhibitor_v1_destroy(idle_inhibitor_);
idle_inhibitor_ = nullptr; idle_inhibitor_ = nullptr;
@ -44,7 +43,13 @@ bool waybar::modules::IdleInhibitor::onClick(GdkEventButton* const& e)
bar_.client.idle_inhibit_manager, bar_.surface); bar_.client.idle_inhibit_manager, bar_.surface);
status_ = "activated"; status_ = "activated";
} }
if (config_["on-click"].isString() && e->button == 1) {
waybar::util::command::forkExec(config_["on-click"].asString());
} }
} else {
ALabel::handleToggle(e);
}
dp.emit(); dp.emit();
return true; return true;
} }