feat(#2989): (optional) hover for all modules

This commit is contained in:
Lars-Ragnar A. Haugen 2024-04-17 22:23:59 +02:00
parent dd092a5fc1
commit 6c1125c1fe
No known key found for this signature in database
4 changed files with 34 additions and 0 deletions

View File

@ -38,6 +38,8 @@ class AModule : public IModule {
Gtk::EventBox event_box_; Gtk::EventBox event_box_;
virtual bool handleToggle(GdkEventButton *const &ev); virtual bool handleToggle(GdkEventButton *const &ev);
virtual bool handleMouseEnter(GdkEventCrossing *const &ev);
virtual bool handleMouseLeave(GdkEventCrossing *const &ev);
virtual bool handleScroll(GdkEventScroll *); virtual bool handleScroll(GdkEventScroll *);
virtual bool handleRelease(GdkEventButton *const &ev); virtual bool handleRelease(GdkEventButton *const &ev);

View File

@ -29,6 +29,16 @@ An example user-controlled stylesheet that just changes the color of the clock t
} }
``` ```
## Hover-effect
You can apply special styling to any module for when the cursor hovers it.
```
#clock:hover {
background-color: #ffffff;
}
```
# SEE ALSO # SEE ALSO
- *waybar(5)* - *waybar(5)*

View File

@ -48,6 +48,11 @@ button:hover {
box-shadow: inset 0 -3px #ffffff; box-shadow: inset 0 -3px #ffffff;
} }
/* you can set a style on hover for any module like this */
#pulseaudio:hover {
background-color: #a37800;
}
#workspaces button { #workspaces button {
padding: 0 5px; padding: 0 5px;
background-color: transparent; background-color: transparent;

View File

@ -27,6 +27,9 @@ AModule::AModule(const Json::Value& config, const std::string& name, const std::
spdlog::warn("Wrong actions section configuration. See config by index: {}", it.index()); spdlog::warn("Wrong actions section configuration. See config by index: {}", it.index());
} }
event_box_.signal_enter_notify_event().connect(sigc::mem_fun(*this, &AModule::handleMouseEnter));
event_box_.signal_leave_notify_event().connect(sigc::mem_fun(*this, &AModule::handleMouseLeave));
// configure events' user commands // configure events' user commands
// hasUserEvent is true if any element from eventMap_ is satisfying the condition in the lambda // hasUserEvent is true if any element from eventMap_ is satisfying the condition in the lambda
bool hasUserEvent = bool hasUserEvent =
@ -83,6 +86,20 @@ auto AModule::doAction(const std::string& name) -> void {
} }
} }
bool AModule::handleMouseEnter(GdkEventCrossing* const& e) {
if (auto* module = event_box_.get_child(); module != nullptr) {
module->set_state_flags(Gtk::StateFlags::STATE_FLAG_PRELIGHT);
}
return true;
}
bool AModule::handleMouseLeave(GdkEventCrossing* const& e) {
if (auto* module = event_box_.get_child(); module != nullptr) {
module->unset_state_flags(Gtk::StateFlags::STATE_FLAG_PRELIGHT);
}
return true;
}
bool AModule::handleToggle(GdkEventButton* const& e) { return handleUserEvent(e); } bool AModule::handleToggle(GdkEventButton* const& e) { return handleUserEvent(e); }
bool AModule::handleRelease(GdkEventButton* const& e) { return handleUserEvent(e); } bool AModule::handleRelease(GdkEventButton* const& e) { return handleUserEvent(e); }