--wip-- [skip ci] tray experiments
This commit is contained in:
parent
6d74ae51e7
commit
7049c755c5
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xcb_aux.h>
|
#include <xcb/xcb_aux.h>
|
||||||
|
#include <xcb/xcb_icccm.h>
|
||||||
|
|
||||||
#include "utils/memory.hpp"
|
#include "utils/memory.hpp"
|
||||||
#include "x11/connection.hpp"
|
#include "x11/connection.hpp"
|
||||||
@ -136,6 +137,19 @@ void tray_client::clear_window() const {
|
|||||||
|
|
||||||
// Do not produce Expose events for the embedder because that triggers an infinite loop.
|
// Do not produce Expose events for the embedder because that triggers an infinite loop.
|
||||||
m_connection.clear_area_checked(0, embedder(), 0, 0, width(), height());
|
m_connection.clear_area_checked(0, embedder(), 0, 0, width(), height());
|
||||||
|
|
||||||
|
auto send_visibility = [&](uint8_t state) {
|
||||||
|
xcb_visibility_notify_event_t evt{};
|
||||||
|
evt.response_type = XCB_VISIBILITY_NOTIFY;
|
||||||
|
evt.window = client();
|
||||||
|
evt.state = state;
|
||||||
|
|
||||||
|
m_connection.send_event_checked(true, client(), XCB_EVENT_MASK_NO_EVENT, reinterpret_cast<const char*>(&evt));
|
||||||
|
};
|
||||||
|
|
||||||
|
send_visibility(XCB_VISIBILITY_FULLY_OBSCURED);
|
||||||
|
send_visibility(XCB_VISIBILITY_UNOBSCURED);
|
||||||
|
|
||||||
m_connection.clear_area_checked(1, client(), 0, 0, width(), height());
|
m_connection.clear_area_checked(1, client(), 0, 0, width(), height());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,6 +314,11 @@ void tray_client::set_position(int x, int y) {
|
|||||||
connection::pack_values(configure_mask, &configure_params, configure_values);
|
connection::pack_values(configure_mask, &configure_params, configure_values);
|
||||||
m_connection.configure_window_checked(client(), configure_mask, configure_values.data());
|
m_connection.configure_window_checked(client(), configure_mask, configure_values.data());
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
xcb_size_hints_t size_hints{};
|
||||||
|
xcb_icccm_size_hints_set_size(&size_hints, false, m_size.w, m_size.h);
|
||||||
|
xcb_icccm_set_wm_size_hints(m_connection, client(), XCB_ATOM_WM_NORMAL_HINTS, &size_hints);
|
||||||
|
|
||||||
// The position has changed, we need a new background slice.
|
// The position has changed, we need a new background slice.
|
||||||
observe_background();
|
observe_background();
|
||||||
}
|
}
|
||||||
|
@ -156,13 +156,14 @@ void tray_manager::activate() {
|
|||||||
|
|
||||||
m_state = state::ACTIVE;
|
m_state = state::ACTIVE;
|
||||||
|
|
||||||
|
notify_clients();
|
||||||
// Send delayed notification
|
// Send delayed notification
|
||||||
// TODO try to remove this?
|
// TODO try to remove this?
|
||||||
if (!m_firstactivation) {
|
// if (!m_firstactivation) {
|
||||||
notify_clients();
|
// notify_clients();
|
||||||
} else {
|
// } else {
|
||||||
notify_clients_delayed();
|
// notify_clients_delayed();
|
||||||
}
|
// }
|
||||||
|
|
||||||
m_firstactivation = false;
|
m_firstactivation = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user