fix: correct handling of margins on anchored axis
parent
089d1299c4
commit
529daedcec
|
@ -56,6 +56,7 @@ class Bar {
|
||||||
void onRealize();
|
void onRealize();
|
||||||
void onMap(GdkEventAny *ev);
|
void onMap(GdkEventAny *ev);
|
||||||
void setExclusiveZone(uint32_t width, uint32_t height);
|
void setExclusiveZone(uint32_t width, uint32_t height);
|
||||||
|
void setSurfaceSize(uint32_t width, uint32_t height);
|
||||||
auto setupWidgets() -> void;
|
auto setupWidgets() -> void;
|
||||||
void getModules(const Factory &, const std::string &);
|
void getModules(const Factory &, const std::string &);
|
||||||
void setupAltFormatKeyForModule(const std::string &module_name);
|
void setupAltFormatKeyForModule(const std::string &module_name);
|
||||||
|
|
20
src/bar.cpp
20
src/bar.cpp
|
@ -132,7 +132,7 @@ void waybar::Bar::onConfigure(GdkEventConfigure* ev) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tmp_width != width_ || tmp_height != height_) {
|
if (tmp_width != width_ || tmp_height != height_) {
|
||||||
zwlr_layer_surface_v1_set_size(layer_surface, tmp_width, tmp_height);
|
setSurfaceSize(tmp_width, tmp_height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,9 +153,9 @@ void waybar::Bar::onMap(GdkEventAny* ev) {
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_keyboard_interactivity(layer_surface, false);
|
zwlr_layer_surface_v1_set_keyboard_interactivity(layer_surface, false);
|
||||||
zwlr_layer_surface_v1_set_anchor(layer_surface, anchor_);
|
zwlr_layer_surface_v1_set_anchor(layer_surface, anchor_);
|
||||||
zwlr_layer_surface_v1_set_size(layer_surface, width_, height_);
|
|
||||||
zwlr_layer_surface_v1_set_margin(
|
zwlr_layer_surface_v1_set_margin(
|
||||||
layer_surface, margins_.top, margins_.right, margins_.bottom, margins_.left);
|
layer_surface, margins_.top, margins_.right, margins_.bottom, margins_.left);
|
||||||
|
setSurfaceSize(width_, height_);
|
||||||
setExclusiveZone(width_, height_);
|
setExclusiveZone(width_, height_);
|
||||||
|
|
||||||
static const struct zwlr_layer_surface_v1_listener layer_surface_listener = {
|
static const struct zwlr_layer_surface_v1_listener layer_surface_listener = {
|
||||||
|
@ -185,6 +185,22 @@ void waybar::Bar::setExclusiveZone(uint32_t width, uint32_t height) {
|
||||||
zwlr_layer_surface_v1_set_exclusive_zone(layer_surface, zone);
|
zwlr_layer_surface_v1_set_exclusive_zone(layer_surface, zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void waybar::Bar::setSurfaceSize(uint32_t width, uint32_t height) {
|
||||||
|
/* If the client is anchored to two opposite edges, layer_surface.configure will return
|
||||||
|
* size without margins for the axis.
|
||||||
|
* layer_surface.set_size, however, expects size with margins for the anchored axis.
|
||||||
|
* This is not specified by wlr-layer-shell and based on actual behavior of sway.
|
||||||
|
*/
|
||||||
|
if (vertical && height > 1) {
|
||||||
|
height += margins_.top + margins_.bottom;
|
||||||
|
}
|
||||||
|
if (!vertical && width > 1) {
|
||||||
|
width += margins_.right + margins_.left;
|
||||||
|
}
|
||||||
|
spdlog::debug("Set surface size {}x{} for output {}", width, height, output->name);
|
||||||
|
zwlr_layer_surface_v1_set_size(layer_surface, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
// Converting string to button code rn as to avoid doing it later
|
// Converting string to button code rn as to avoid doing it later
|
||||||
void waybar::Bar::setupAltFormatKeyForModule(const std::string& module_name) {
|
void waybar::Bar::setupAltFormatKeyForModule(const std::string& module_name) {
|
||||||
if (config.isMember(module_name)) {
|
if (config.isMember(module_name)) {
|
||||||
|
|
Loading…
Reference in New Issue