Skip to content

Commit 4a8d527

Browse files
authored
Merge pull request #3921 from bpandreotti/vertical-privacy
Add support for vertical orientation in privacy module
2 parents b98e717 + a26ed50 commit 4a8d527

File tree

5 files changed

+23
-13
lines changed

5 files changed

+23
-13
lines changed

include/modules/privacy/privacy.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace waybar::modules::privacy {
1313

1414
class Privacy : public AModule {
1515
public:
16-
Privacy(const std::string &, const Json::Value &, const std::string &pos);
16+
Privacy(const std::string &, const Json::Value &, Gtk::Orientation, const std::string &pos);
1717
auto update() -> void override;
1818

1919
void onPrivacyNodesChanged();

include/modules/privacy/privacy_item.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ namespace waybar::modules::privacy {
1717
class PrivacyItem : public Gtk::Revealer {
1818
public:
1919
PrivacyItem(const Json::Value &config_, enum PrivacyNodeType privacy_type_,
20-
std::list<PrivacyNodeInfo *> *nodes, const std::string &pos, const uint icon_size,
21-
const uint transition_duration);
20+
std::list<PrivacyNodeInfo *> *nodes, Gtk::Orientation orientation,
21+
const std::string &pos, const uint icon_size, const uint transition_duration);
2222

2323
enum PrivacyNodeType privacy_type;
2424

src/factory.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ waybar::AModule* waybar::Factory::makeModule(const std::string& name,
140140
#endif
141141
#ifdef HAVE_PIPEWIRE
142142
if (ref == "privacy") {
143-
return new waybar::modules::privacy::Privacy(id, config_[name], pos);
143+
return new waybar::modules::privacy::Privacy(id, config_[name], bar_.orientation, pos);
144144
}
145145
#endif
146146
#ifdef HAVE_MPRIS

src/modules/privacy/privacy.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ using util::PipewireBackend::PRIVACY_NODE_TYPE_AUDIO_OUTPUT;
1515
using util::PipewireBackend::PRIVACY_NODE_TYPE_NONE;
1616
using util::PipewireBackend::PRIVACY_NODE_TYPE_VIDEO_INPUT;
1717

18-
Privacy::Privacy(const std::string& id, const Json::Value& config, const std::string& pos)
18+
Privacy::Privacy(const std::string& id, const Json::Value& config, Gtk::Orientation orientation,
19+
const std::string& pos)
1920
: AModule(config, "privacy", id),
2021
nodes_screenshare(),
2122
nodes_audio_in(),
2223
nodes_audio_out(),
2324
visibility_conn(),
24-
box_(Gtk::ORIENTATION_HORIZONTAL, 0) {
25+
box_(orientation, 0) {
2526
box_.set_name(name_);
2627

2728
event_box_.add(box_);
@@ -67,8 +68,8 @@ Privacy::Privacy(const std::string& id, const Json::Value& config, const std::st
6768
auto iter = typeMap.find(type);
6869
if (iter != typeMap.end()) {
6970
auto& [nodePtr, nodeType] = iter->second;
70-
auto* item = Gtk::make_managed<PrivacyItem>(module, nodeType, nodePtr, pos, iconSize,
71-
transition_duration);
71+
auto* item = Gtk::make_managed<PrivacyItem>(module, nodeType, nodePtr, orientation, pos,
72+
iconSize, transition_duration);
7273
box_.add(*item);
7374
}
7475
}

src/modules/privacy/privacy_item.cpp

+14-5
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
namespace waybar::modules::privacy {
1212

1313
PrivacyItem::PrivacyItem(const Json::Value &config_, enum PrivacyNodeType privacy_type_,
14-
std::list<PrivacyNodeInfo *> *nodes_, const std::string &pos,
15-
const uint icon_size, const uint transition_duration)
14+
std::list<PrivacyNodeInfo *> *nodes_, Gtk::Orientation orientation,
15+
const std::string &pos, const uint icon_size,
16+
const uint transition_duration)
1617
: Gtk::Revealer(),
1718
privacy_type(privacy_type_),
1819
nodes(nodes_),
@@ -40,16 +41,24 @@ PrivacyItem::PrivacyItem(const Json::Value &config_, enum PrivacyNodeType privac
4041

4142
// Set the reveal transition to not look weird when sliding in
4243
if (pos == "modules-left") {
43-
set_transition_type(Gtk::REVEALER_TRANSITION_TYPE_SLIDE_RIGHT);
44+
set_transition_type(orientation == Gtk::ORIENTATION_HORIZONTAL
45+
? Gtk::REVEALER_TRANSITION_TYPE_SLIDE_RIGHT
46+
: Gtk::REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
4447
} else if (pos == "modules-center") {
4548
set_transition_type(Gtk::REVEALER_TRANSITION_TYPE_CROSSFADE);
4649
} else if (pos == "modules-right") {
47-
set_transition_type(Gtk::REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
50+
set_transition_type(orientation == Gtk::ORIENTATION_HORIZONTAL
51+
? Gtk::REVEALER_TRANSITION_TYPE_SLIDE_LEFT
52+
: Gtk::REVEALER_TRANSITION_TYPE_SLIDE_UP);
4853
}
4954
set_transition_duration(transition_duration);
5055

5156
box_.set_name("privacy-item");
52-
box_.add(icon_);
57+
58+
// We use `set_center_widget` instead of `add` to make sure the icon is
59+
// centered even if the orientation is vertical
60+
box_.set_center_widget(icon_);
61+
5362
icon_.set_pixel_size(icon_size);
5463
add(box_);
5564

0 commit comments

Comments
 (0)