Compare commits

..

12 Commits
0.7.0 ... 0.7.1

Author SHA1 Message Date
0834551161 chore: 0.7.1 2019-07-11 17:02:47 +02:00
ccd1586c65 Merge pull request #405 from crwxrws/fix-400
fix(pulseaudio): connect scroll event handler
2019-07-09 09:46:05 +02:00
617b370104 fix(pulseaudio): connect scroll event handler
Reconnect the event handler that was removed in commit 527144a.

Fixes Alexays#400
2019-07-06 15:51:00 +02:00
d607a4e33f Fix deadlock on workspace scrolling (#403)
Fix deadlock on workspace scrolling
2019-07-06 10:30:57 +02:00
a6c0bc5a52 Fix deadlock on workspace scrolling
Make the mutex guard lifecycle finish before the send ipc command
by adding scope around the code.

Fixes #395 .
2019-07-05 20:47:44 -07:00
67ad0e69ce Merge pull request #397 from Jamedjo/jej/add-css-classes-for-multiple-bars
Allow CSS to select specific waybars when multiple are in use
2019-07-04 14:20:03 +02:00
ae88d6bc3c feat(bar): individual bars can be named for CSS
Allows CSS to select individual waybars when multiple are configured
2019-07-04 02:15:56 +01:00
4f3c38c542 feat(bar): add CSS class for window position 2019-07-04 02:15:50 +01:00
a6980fca7f feat: ellipsize modules 2019-06-28 14:16:09 +02:00
bd5146fdcf fix(Label): ELLIPSIZE all label modules 2019-06-28 13:49:04 +02:00
22ddbde394 style(workspaces): update hover style 2019-06-28 13:41:53 +02:00
c916fe258e fix(network): no need to check family here 2019-06-25 07:55:55 +02:00
10 changed files with 44 additions and 33 deletions

View File

@ -10,7 +10,7 @@ namespace waybar {
class ALabel : public AModule { class ALabel : public AModule {
public: public:
ALabel(const Json::Value &, const std::string &, const std::string &, const std::string &format, ALabel(const Json::Value &, const std::string &, const std::string &, const std::string &format,
uint16_t interval = 0); uint16_t interval = 0, bool ellipsize = false);
virtual ~ALabel() = default; virtual ~ALabel() = default;
virtual auto update() -> void; virtual auto update() -> void;
virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0); virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0);

View File

@ -1,6 +1,6 @@
project( project(
'waybar', 'cpp', 'c', 'waybar', 'cpp', 'c',
version: '0.7.0', version: '0.7.1',
license: 'MIT', license: 'MIT',
default_options : [ default_options : [
'cpp_std=c++17', 'cpp_std=c++17',

View File

@ -36,7 +36,6 @@ window#waybar.chromium {
border: none; border: none;
} }
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
#workspaces button { #workspaces button {
padding: 0 5px; padding: 0 5px;
background-color: transparent; background-color: transparent;
@ -44,6 +43,13 @@ window#waybar.chromium {
border-bottom: 3px solid transparent; border-bottom: 3px solid transparent;
} }
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
#workspaces button:hover {
background: rgba(0, 0, 0, 0.2);
box-shadow: inherit;
border-bottom: 3px solid #ffffff;
}
#workspaces button.focused { #workspaces button.focused {
background-color: #64727D; background-color: #64727D;
border-bottom: 3px solid #ffffff; border-bottom: 3px solid #ffffff;

View File

@ -5,7 +5,7 @@
namespace waybar { namespace waybar {
ALabel::ALabel(const Json::Value& config, const std::string& name, const std::string& id, ALabel::ALabel(const Json::Value& config, const std::string& name, const std::string& id,
const std::string& format, uint16_t interval) const std::string& format, uint16_t interval, bool ellipsize)
: AModule(config, name, id, config["format-alt"].isString()), : AModule(config, name, id, config["format-alt"].isString()),
format_(config_["format"].isString() ? config_["format"].asString() : format), format_(config_["format"].isString() ? config_["format"].asString() : format),
interval_(config_["interval"] == "once" interval_(config_["interval"] == "once"
@ -21,6 +21,8 @@ ALabel::ALabel(const Json::Value& config, const std::string& name, const std::st
if (config_["max-length"].isUInt()) { if (config_["max-length"].isUInt()) {
label_.set_max_width_chars(config_["max-length"].asUInt()); label_.set_max_width_chars(config_["max-length"].asUInt());
label_.set_ellipsize(Pango::EllipsizeMode::ELLIPSIZE_END); label_.set_ellipsize(Pango::EllipsizeMode::ELLIPSIZE_END);
} else if (ellipsize && label_.get_max_width_chars() == -1) {
label_.set_ellipsize(Pango::EllipsizeMode::ELLIPSIZE_END);
} }
if (config_["rotate"].isUInt()) { if (config_["rotate"].isUInt()) {

View File

@ -18,6 +18,8 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config)
window.set_name("waybar"); window.set_name("waybar");
window.set_decorated(false); window.set_decorated(false);
window.get_style_context()->add_class(output->name); window.get_style_context()->add_class(output->name);
window.get_style_context()->add_class(config["name"].asString());
window.get_style_context()->add_class(config["position"].asString());
if (config["position"] == "right" || config["position"] == "left") { if (config["position"] == "right" || config["position"] == "left") {
height_ = 0; height_ = 0;
@ -302,9 +304,9 @@ void waybar::Bar::getModules(const Factory& factory, const std::string& pos) {
auto waybar::Bar::setupWidgets() -> void { auto waybar::Bar::setupWidgets() -> void {
window.add(box_); window.add(box_);
box_.pack_start(left_, true, true); box_.pack_start(left_, false, false);
box_.set_center_widget(center_); box_.set_center_widget(center_);
box_.pack_end(right_, true, true); box_.pack_end(right_, false, false);
// Convert to button code for every module that is used. // Convert to button code for every module that is used.
setupAltFormatKeyForModuleList("modules-left"); setupAltFormatKeyForModuleList("modules-left");
@ -316,13 +318,13 @@ auto waybar::Bar::setupWidgets() -> void {
getModules(factory, "modules-center"); getModules(factory, "modules-center");
getModules(factory, "modules-right"); getModules(factory, "modules-right");
for (auto const& module : modules_left_) { for (auto const& module : modules_left_) {
left_.pack_start(*module, false, true, 0); left_.pack_start(*module, false, false);
} }
for (auto const& module : modules_center_) { for (auto const& module : modules_center_) {
center_.pack_start(*module, true, true, 0); center_.pack_start(*module, false, false);
} }
std::reverse(modules_right_.begin(), modules_right_.end()); std::reverse(modules_right_.begin(), modules_right_.end());
for (auto const& module : modules_right_) { for (auto const& module : modules_right_) {
right_.pack_end(*module, false, false, 0); right_.pack_end(*module, false, false);
} }
} }

View File

@ -546,8 +546,7 @@ int waybar::modules::Network::getPreferredIface(int skip_idx) const {
ifa = ifaddr; ifa = ifaddr;
ifid = -1; ifid = -1;
while (ifa != nullptr) { while (ifa != nullptr) {
if (ifa->ifa_addr->sa_family == family_ && if (wildcardMatch(config_["interface"].asString(), ifa->ifa_name)) {
wildcardMatch(config_["interface"].asString(), ifa->ifa_name)) {
ifid = if_nametoindex(ifa->ifa_name); ifid = if_nametoindex(ifa->ifa_name);
break; break;
} }

View File

@ -31,6 +31,8 @@ waybar::modules::Pulseaudio::Pulseaudio(const std::string &id, const Json::Value
throw std::runtime_error("pa_mainloop_run() failed."); throw std::runtime_error("pa_mainloop_run() failed.");
} }
pa_threaded_mainloop_unlock(mainloop_); pa_threaded_mainloop_unlock(mainloop_);
event_box_.add_events(Gdk::SCROLL_MASK | Gdk::SMOOTH_SCROLL_MASK);
event_box_.signal_scroll_event().connect(sigc::mem_fun(*this, &Pulseaudio::handleScroll));
} }
waybar::modules::Pulseaudio::~Pulseaudio() { waybar::modules::Pulseaudio::~Pulseaudio() {

View File

@ -3,7 +3,8 @@
namespace waybar::modules::sway { namespace waybar::modules::sway {
Mode::Mode(const std::string& id, const Json::Value& config) : ALabel(config, "mode", id, "{}") { Mode::Mode(const std::string& id, const Json::Value& config)
: ALabel(config, "mode", id, "{}", 0, true) {
ipc_.subscribe(R"(["mode"])"); ipc_.subscribe(R"(["mode"])");
ipc_.signal_event.connect(sigc::mem_fun(*this, &Mode::onEvent)); ipc_.signal_event.connect(sigc::mem_fun(*this, &Mode::onEvent));
// Launch worker // Launch worker
@ -14,7 +15,7 @@ Mode::Mode(const std::string& id, const Json::Value& config) : ALabel(config, "m
void Mode::onEvent(const struct Ipc::ipc_response& res) { void Mode::onEvent(const struct Ipc::ipc_response& res) {
try { try {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
auto payload = parser_.parse(res.payload); auto payload = parser_.parse(res.payload);
if (payload["change"] != "default") { if (payload["change"] != "default") {
mode_ = Glib::Markup::escape_text(payload["change"].asString()); mode_ = Glib::Markup::escape_text(payload["change"].asString());
} else { } else {

View File

@ -4,10 +4,7 @@
namespace waybar::modules::sway { namespace waybar::modules::sway {
Window::Window(const std::string& id, const Bar& bar, const Json::Value& config) Window::Window(const std::string& id, const Bar& bar, const Json::Value& config)
: ALabel(config, "window", id, "{}"), bar_(bar), windowId_(-1) { : ALabel(config, "window", id, "{}", 0, true), bar_(bar), windowId_(-1) {
if (label_.get_max_width_chars() == -1) {
label_.set_ellipsize(Pango::EllipsizeMode::ELLIPSIZE_END);
}
ipc_.subscribe(R"(["window","workspace"])"); ipc_.subscribe(R"(["window","workspace"])");
ipc_.signal_event.connect(sigc::mem_fun(*this, &Window::onEvent)); ipc_.signal_event.connect(sigc::mem_fun(*this, &Window::onEvent));
ipc_.signal_cmd.connect(sigc::mem_fun(*this, &Window::onCmd)); ipc_.signal_cmd.connect(sigc::mem_fun(*this, &Window::onCmd));

View File

@ -218,23 +218,25 @@ bool Workspaces::handleScroll(GdkEventScroll *e) {
if (dir == SCROLL_DIR::NONE) { if (dir == SCROLL_DIR::NONE) {
return true; return true;
} }
std::lock_guard<std::mutex> lock(mutex_);
auto it = std::find_if(workspaces_.begin(), workspaces_.end(), [](const auto &workspace) {
return workspace["focused"].asBool();
});
if (it == workspaces_.end()) {
return true;
}
std::string name; std::string name;
if (dir == SCROLL_DIR::DOWN || dir == SCROLL_DIR::RIGHT) { {
name = getCycleWorkspace(it, false); std::lock_guard<std::mutex> lock(mutex_);
} else if (dir == SCROLL_DIR::UP || dir == SCROLL_DIR::LEFT) { auto it = std::find_if(workspaces_.begin(), workspaces_.end(), [](const auto &workspace) {
name = getCycleWorkspace(it, true); return workspace["focused"].asBool();
} else { });
return true; if (it == workspaces_.end()) {
} return true;
if (name == (*it)["name"].asString()) { }
return true; if (dir == SCROLL_DIR::DOWN || dir == SCROLL_DIR::RIGHT) {
name = getCycleWorkspace(it, false);
} else if (dir == SCROLL_DIR::UP || dir == SCROLL_DIR::LEFT) {
name = getCycleWorkspace(it, true);
} else {
return true;
}
if (name == (*it)["name"].asString()) {
return true;
}
} }
try { try {
ipc_.sendCmd(IPC_COMMAND, fmt::format("workspace \"{}\"", name)); ipc_.sendCmd(IPC_COMMAND, fmt::format("workspace \"{}\"", name));