restack: Make bspwm first try ewmh strategy
This commit is contained in:
parent
4f9f07eefd
commit
2c23f7a87f
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
#include "settings.hpp"
|
#include "settings.hpp"
|
||||||
|
#include "utils/restack.hpp"
|
||||||
#include "utils/socket.hpp"
|
#include "utils/socket.hpp"
|
||||||
#include "utils/string.hpp"
|
#include "utils/string.hpp"
|
||||||
#include "x11/extensions/randr.hpp"
|
#include "x11/extensions/randr.hpp"
|
||||||
@ -25,7 +26,7 @@ namespace bspwm_util {
|
|||||||
};
|
};
|
||||||
|
|
||||||
vector<xcb_window_t> root_windows(connection& conn);
|
vector<xcb_window_t> root_windows(connection& conn);
|
||||||
xcb_window_t get_restack_sibling(connection& conn, const monitor_t& mon);
|
restack_util::params get_restack_params(connection& conn, const monitor_t& mon, xcb_window_t bar_window);
|
||||||
|
|
||||||
string get_socket_path();
|
string get_socket_path();
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <i3ipc++/ipc.hpp>
|
#include <i3ipc++/ipc.hpp>
|
||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
#include "utils/restack.hpp"
|
||||||
#include "x11/extensions/randr.hpp"
|
#include "x11/extensions/randr.hpp"
|
||||||
|
|
||||||
POLYBAR_NS
|
POLYBAR_NS
|
||||||
@ -19,7 +20,7 @@ namespace i3_util {
|
|||||||
shared_ptr<workspace_t> focused_workspace(const connection_t&);
|
shared_ptr<workspace_t> focused_workspace(const connection_t&);
|
||||||
|
|
||||||
vector<xcb_window_t> root_windows(connection& conn, const string& output_name = "");
|
vector<xcb_window_t> root_windows(connection& conn, const string& output_name = "");
|
||||||
xcb_window_t get_restack_sibling(connection& conn);
|
restack_util::params get_restack_params(connection& conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -8,14 +8,16 @@
|
|||||||
POLYBAR_NS
|
POLYBAR_NS
|
||||||
|
|
||||||
namespace restack_util {
|
namespace restack_util {
|
||||||
using params = std::pair<xcb_window_t, xcb_stack_mode_t>;
|
using params = std::pair<xcb_window_t, xcb_stack_mode_t>;
|
||||||
|
|
||||||
void restack_relative(connection& conn, xcb_window_t win, xcb_window_t sibling, xcb_stack_mode_t stack_mode);
|
static constexpr params NONE_PARAMS = {XCB_NONE, XCB_STACK_MODE_ABOVE};
|
||||||
string stack_mode_to_string(xcb_stack_mode_t mode);
|
|
||||||
bool are_siblings(connection& conn, xcb_window_t win, xcb_window_t sibling);
|
void restack_relative(connection& conn, xcb_window_t win, xcb_window_t sibling, xcb_stack_mode_t stack_mode);
|
||||||
params get_bottom_params(connection& conn, xcb_window_t bar_window);
|
string stack_mode_to_string(xcb_stack_mode_t mode);
|
||||||
params get_ewmh_params(connection& conn);
|
bool are_siblings(connection& conn, xcb_window_t win, xcb_window_t sibling);
|
||||||
params get_generic_params(connection& conn, xcb_window_t bar_window);
|
params get_bottom_params(connection& conn, xcb_window_t bar_window);
|
||||||
}
|
params get_ewmh_params(connection& conn);
|
||||||
|
params get_generic_params(connection& conn, xcb_window_t bar_window);
|
||||||
|
} // namespace restack_util
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
@ -497,20 +497,19 @@ void bar::restack_window() {
|
|||||||
|
|
||||||
xcb_window_t bar_window = m_opts.x_data.window;
|
xcb_window_t bar_window = m_opts.x_data.window;
|
||||||
|
|
||||||
xcb_window_t restack_sibling = XCB_NONE;
|
restack_util::params restack_params;
|
||||||
xcb_stack_mode_t stack_mode = XCB_STACK_MODE_ABOVE;
|
|
||||||
|
|
||||||
if (wm_restack == "generic") {
|
if (wm_restack == "generic") {
|
||||||
std::tie(restack_sibling, stack_mode) = restack_util::get_generic_params(m_connection, bar_window);
|
restack_params = restack_util::get_generic_params(m_connection, bar_window);
|
||||||
} else if (wm_restack == "ewmh") {
|
} else if (wm_restack == "ewmh") {
|
||||||
std::tie(restack_sibling, stack_mode) = restack_util::get_ewmh_params(m_connection);
|
restack_params = restack_util::get_ewmh_params(m_connection);
|
||||||
} else if (wm_restack == "bottom") {
|
} else if (wm_restack == "bottom") {
|
||||||
std::tie(restack_sibling, stack_mode) = restack_util::get_bottom_params(m_connection, bar_window);
|
restack_params = restack_util::get_bottom_params(m_connection, bar_window);
|
||||||
} else if (wm_restack == "bspwm") {
|
} else if (wm_restack == "bspwm") {
|
||||||
restack_sibling = bspwm_util::get_restack_sibling(m_connection, m_opts.monitor);
|
restack_params = bspwm_util::get_restack_params(m_connection, m_opts.monitor, bar_window);
|
||||||
#if ENABLE_I3
|
#if ENABLE_I3
|
||||||
} else if (wm_restack == "i3" && m_opts.override_redirect) {
|
} else if (wm_restack == "i3" && m_opts.override_redirect) {
|
||||||
restack_sibling = i3_util::get_restack_sibling(m_connection);
|
restack_params = i3_util::get_restack_params(m_connection);
|
||||||
} else if (wm_restack == "i3" && !m_opts.override_redirect) {
|
} else if (wm_restack == "i3" && !m_opts.override_redirect) {
|
||||||
m_log.warn("Ignoring restack of i3 window (not needed when `override-redirect = false`)");
|
m_log.warn("Ignoring restack of i3 window (not needed when `override-redirect = false`)");
|
||||||
wm_restack.clear();
|
wm_restack.clear();
|
||||||
@ -520,6 +519,8 @@ void bar::restack_window() {
|
|||||||
wm_restack.clear();
|
wm_restack.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto [restack_sibling, stack_mode] = restack_params;
|
||||||
|
|
||||||
if (restack_sibling != XCB_NONE) {
|
if (restack_sibling != XCB_NONE) {
|
||||||
try {
|
try {
|
||||||
m_log.info("bar: Restacking bar window relative to %s with stacking mode %s", m_connection.id(restack_sibling),
|
m_log.info("bar: Restacking bar window relative to %s with stacking mode %s", m_connection.id(restack_sibling),
|
||||||
|
@ -38,7 +38,13 @@ vector<xcb_window_t> root_windows(connection& conn) {
|
|||||||
/**
|
/**
|
||||||
* Returns window against which to restack.
|
* Returns window against which to restack.
|
||||||
*/
|
*/
|
||||||
xcb_window_t get_restack_sibling(connection& conn, const monitor_t& mon) {
|
restack_util::params get_restack_params(connection& conn, const monitor_t& mon, xcb_window_t bar_window) {
|
||||||
|
auto ewmh_params = restack_util::get_ewmh_params(conn);
|
||||||
|
|
||||||
|
if (restack_util::are_siblings(conn, bar_window, ewmh_params.first)) {
|
||||||
|
return ewmh_params;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto&& root : root_windows(conn)) {
|
for (auto&& root : root_windows(conn)) {
|
||||||
auto geom = conn.get_geometry(root);
|
auto geom = conn.get_geometry(root);
|
||||||
|
|
||||||
@ -49,10 +55,10 @@ xcb_window_t get_restack_sibling(connection& conn, const monitor_t& mon) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return root;
|
return {root, XCB_STACK_MODE_ABOVE};
|
||||||
}
|
}
|
||||||
|
|
||||||
return XCB_NONE;
|
return restack_util::NONE_PARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,8 +68,8 @@ namespace i3_util {
|
|||||||
/**
|
/**
|
||||||
* Returns window against which to restack.
|
* Returns window against which to restack.
|
||||||
*/
|
*/
|
||||||
xcb_window_t get_restack_sibling(connection& conn) {
|
restack_util::params get_restack_params(connection& conn) {
|
||||||
return root_window(conn);
|
return {root_window(conn), XCB_STACK_MODE_ABOVE};
|
||||||
}
|
}
|
||||||
} // namespace i3_util
|
} // namespace i3_util
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@ POLYBAR_NS
|
|||||||
|
|
||||||
namespace restack_util {
|
namespace restack_util {
|
||||||
|
|
||||||
static constexpr params NONE_PARAMS = {XCB_NONE, XCB_STACK_MODE_ABOVE};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restacks the given window relative to a given sibling with some stack order (above, below)
|
* Restacks the given window relative to a given sibling with some stack order (above, below)
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user