fix: Bottom strut relative to screen
This commit is contained in:
parent
ffe76b0556
commit
70a5f1d41e
@ -36,7 +36,7 @@ class bar : public xpp::event::sink<evt::button_press, evt::expose, evt::propert
|
|||||||
const bar_settings settings() const;
|
const bar_settings settings() const;
|
||||||
|
|
||||||
void parse(string data, bool force = false);
|
void parse(string data, bool force = false);
|
||||||
int i = 0;
|
|
||||||
protected:
|
protected:
|
||||||
void flush();
|
void flush();
|
||||||
void refresh_window();
|
void refresh_window();
|
||||||
@ -86,6 +86,8 @@ int i = 0;
|
|||||||
throttle_util::throttle_t m_throttler;
|
throttle_util::throttle_t m_throttler;
|
||||||
|
|
||||||
xcb_screen_t* m_screen;
|
xcb_screen_t* m_screen;
|
||||||
|
rect m_screensize{};
|
||||||
|
|
||||||
xcb_visualtype_t* m_visual;
|
xcb_visualtype_t* m_visual;
|
||||||
|
|
||||||
window m_window{m_connection, m_connection.generate_id()};
|
window m_window{m_connection, m_connection.generate_id()};
|
||||||
|
@ -13,6 +13,11 @@ enum class attribute { NONE = 0, o = 2, u = 4 };
|
|||||||
enum class mousebtn { NONE = 0, LEFT, MIDDLE, RIGHT, SCROLL_UP, SCROLL_DOWN };
|
enum class mousebtn { NONE = 0, LEFT, MIDDLE, RIGHT, SCROLL_UP, SCROLL_DOWN };
|
||||||
enum class gc { NONE = 0, BG, FG, OL, UL, BT, BB, BL, BR };
|
enum class gc { NONE = 0, BG, FG, OL, UL, BT, BB, BL, BR };
|
||||||
|
|
||||||
|
struct rect {
|
||||||
|
uint16_t w{0};
|
||||||
|
uint16_t h{0};
|
||||||
|
};
|
||||||
|
|
||||||
enum class strut {
|
enum class strut {
|
||||||
LEFT = 0,
|
LEFT = 0,
|
||||||
RIGHT,
|
RIGHT,
|
||||||
|
@ -64,6 +64,10 @@ void bar::bootstrap(bool nodraw) {
|
|||||||
|
|
||||||
m_screen = m_connection.screen();
|
m_screen = m_connection.screen();
|
||||||
|
|
||||||
|
auto geom = m_connection.get_geometry(m_screen->root);
|
||||||
|
m_screensize.w = geom->width;
|
||||||
|
m_screensize.h = geom->height;
|
||||||
|
|
||||||
// limit the amount of allowed input events to 1 per 60ms
|
// limit the amount of allowed input events to 1 per 60ms
|
||||||
m_throttler = throttle_util::make_throttler(1, 60ms);
|
m_throttler = throttle_util::make_throttler(1, 60ms);
|
||||||
|
|
||||||
@ -671,6 +675,7 @@ void bar::restack_window() {
|
|||||||
* Map window and reconfigure its position
|
* Map window and reconfigure its position
|
||||||
*/
|
*/
|
||||||
void bar::map_window() {
|
void bar::map_window() {
|
||||||
|
auto geom = m_connection.get_geometry(m_screen->root);
|
||||||
auto w = m_opts.width + m_opts.offset_x;
|
auto w = m_opts.width + m_opts.offset_x;
|
||||||
auto h = m_opts.height + m_opts.offset_y;
|
auto h = m_opts.height + m_opts.offset_y;
|
||||||
auto x = m_opts.x;
|
auto x = m_opts.x;
|
||||||
@ -682,6 +687,10 @@ void bar::map_window() {
|
|||||||
h += m_opts.margins.b;
|
h += m_opts.margins.b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_opts.bottom && m_opts.monitor->y + m_opts.monitor->h < m_screensize.h) {
|
||||||
|
h += m_screensize.h - (m_opts.monitor->y + m_opts.monitor->h);
|
||||||
|
}
|
||||||
|
|
||||||
m_window.map_checked();
|
m_window.map_checked();
|
||||||
m_window.reconfigure_struts(w, h, x, m_opts.bottom);
|
m_window.reconfigure_struts(w, h, x, m_opts.bottom);
|
||||||
m_window.reconfigure_pos(x, y);
|
m_window.reconfigure_pos(x, y);
|
||||||
|
Loading…
Reference in New Issue
Block a user