made the bar into EWMH dock

This commit is contained in:
vaxerski 2021-11-29 21:17:06 +01:00
parent c914abe3ba
commit da0029d45c
2 changed files with 30 additions and 5 deletions

View file

@ -34,6 +34,27 @@ int64_t barMainThread() {
Debug::log(LOG, "Bar init Phase 1 done.");
// Init atoms
// get atoms
for (auto& ATOM : HYPRATOMS) {
xcb_intern_atom_cookie_t cookie = xcb_intern_atom(g_pWindowManager->DisplayConnection, 0, ATOM.first.length(), ATOM.first.c_str());
xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(g_pWindowManager->DisplayConnection, cookie, NULL);
if (!reply) {
Debug::log(ERR, "Atom failed: " + ATOM.first);
continue;
}
ATOM.second = reply->atom;
}
Debug::log(LOG, "Atoms done.");
g_pWindowManager->EWMHConnection = (xcb_ewmh_connection_t*)malloc(sizeof(xcb_ewmh_connection_t));
xcb_ewmh_init_atoms_replies(g_pWindowManager->EWMHConnection, xcb_ewmh_init_atoms(g_pWindowManager->DisplayConnection, g_pWindowManager->EWMHConnection), nullptr);
Debug::log(LOG, "Bar init EWMH done.");
// Init randr for monitors.
g_pWindowManager->setupRandrMonitors();
@ -140,6 +161,10 @@ void CStatusBar::setup(int MonitorID) {
0, XCB_WINDOW_CLASS_INPUT_OUTPUT, g_pWindowManager->Screen->root_visual,
XCB_CW_EVENT_MASK, values);
// Set the state to dock to avoid some issues
xcb_atom_t dockAtom[] = { HYPRATOMS["_NET_WM_WINDOW_TYPE_DOCK"] };
xcb_ewmh_set_wm_window_type(g_pWindowManager->EWMHConnection, m_iWindowID, 1, dockAtom);
// map
xcb_map_window(g_pWindowManager->DisplayConnection, m_iWindowID);

View file

@ -21,8 +21,9 @@
class CWindowManager {
public:
xcb_connection_t* DisplayConnection;
xcb_screen_t* Screen;
xcb_connection_t* DisplayConnection = nullptr;
xcb_ewmh_connection_t* EWMHConnection = nullptr; // Bar uses this
xcb_screen_t* Screen = nullptr;
xcb_drawable_t Drawable;
uint32_t Values[3];
@ -121,7 +122,7 @@ public:
inline std::unique_ptr<CWindowManager> g_pWindowManager = std::make_unique<CWindowManager>();
inline std::map<std::string, int64_t> HYPRATOMS = {
inline std::map<std::string, xcb_atom_t> HYPRATOMS = {
HYPRATOM("_NET_SUPPORTED"),
HYPRATOM("_NET_SUPPORTING_WM_CHECK"),
HYPRATOM("_NET_WM_NAME"),
@ -179,5 +180,4 @@ inline std::map<std::string, int64_t> HYPRATOMS = {
HYPRATOM("_NET_FRAME_EXTENTS"),
HYPRATOM("_MOTIF_WM_HINTS"),
HYPRATOM("WM_CHANGE_STATE"),
HYPRATOM("MANAGER")
};
HYPRATOM("MANAGER")};