tray: Read width directly from tray_manager
This commit is contained in:
parent
ffcdf7d690
commit
03a2e6bb17
@ -101,7 +101,7 @@ namespace signals {
|
|||||||
} // namespace ui
|
} // namespace ui
|
||||||
|
|
||||||
namespace ui_tray {
|
namespace ui_tray {
|
||||||
struct tray_width_change : public detail::value_signal<tray_width_change, unsigned int> {
|
struct tray_width_change : public detail::base_signal<tray_width_change> {
|
||||||
using base_type::base_type;
|
using base_type::base_type;
|
||||||
};
|
};
|
||||||
struct tray_pos_change : public detail::value_signal<tray_pos_change, int> {
|
struct tray_pos_change : public detail::value_signal<tray_pos_change, int> {
|
||||||
|
@ -27,8 +27,6 @@ namespace modules {
|
|||||||
static constexpr const char* TAG_TRAY{"<tray>"};
|
static constexpr const char* TAG_TRAY{"<tray>"};
|
||||||
|
|
||||||
tray_manager m_tray;
|
tray_manager m_tray;
|
||||||
|
|
||||||
int m_width{0};
|
|
||||||
};
|
};
|
||||||
} // namespace modules
|
} // namespace modules
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
@ -56,10 +56,9 @@ struct tray_settings {
|
|||||||
xcb_window_t selection_owner{XCB_NONE};
|
xcb_window_t selection_owner{XCB_NONE};
|
||||||
};
|
};
|
||||||
|
|
||||||
class tray_manager
|
class tray_manager : public xpp::event::sink<evt::expose, evt::visibility_notify, evt::client_message,
|
||||||
: public xpp::event::sink<evt::expose, evt::visibility_notify, evt::client_message, evt::configure_request,
|
evt::configure_request, evt::resize_request, evt::selection_clear, evt::property_notify,
|
||||||
evt::resize_request, evt::selection_clear, evt::property_notify, evt::reparent_notify, evt::destroy_notify,
|
evt::reparent_notify, evt::destroy_notify, evt::map_notify, evt::unmap_notify>,
|
||||||
evt::map_notify, evt::unmap_notify>,
|
|
||||||
public signal_receiver<SIGN_PRIORITY_TRAY, signals::ui::update_background,
|
public signal_receiver<SIGN_PRIORITY_TRAY, signals::ui::update_background,
|
||||||
signals::ui_tray::tray_pos_change, signals::ui_tray::tray_visibility> {
|
signals::ui_tray::tray_pos_change, signals::ui_tray::tray_visibility> {
|
||||||
public:
|
public:
|
||||||
@ -71,10 +70,10 @@ class tray_manager
|
|||||||
~tray_manager();
|
~tray_manager();
|
||||||
|
|
||||||
bool running() const;
|
bool running() const;
|
||||||
|
int get_width() const;
|
||||||
|
|
||||||
void setup(const string& tray_module_name);
|
void setup(const string& tray_module_name);
|
||||||
void activate();
|
void activate();
|
||||||
void activate_delayed(chrono::duration<double, std::milli> delay = 1s);
|
|
||||||
void deactivate(bool clear_selection = true);
|
void deactivate(bool clear_selection = true);
|
||||||
void reconfigure();
|
void reconfigure();
|
||||||
|
|
||||||
@ -108,6 +107,8 @@ class tray_manager
|
|||||||
|
|
||||||
int calculate_client_y();
|
int calculate_client_y();
|
||||||
|
|
||||||
|
void update_width(unsigned new_width);
|
||||||
|
|
||||||
bool is_embedded(const xcb_window_t& win) const;
|
bool is_embedded(const xcb_window_t& win) const;
|
||||||
tray_client* find_client(const xcb_window_t& win);
|
tray_client* find_client(const xcb_window_t& win);
|
||||||
void remove_client(const tray_client& client, bool reconfigure = true);
|
void remove_client(const tray_client& client, bool reconfigure = true);
|
||||||
|
@ -26,15 +26,17 @@ namespace modules {
|
|||||||
bool tray_module::build(builder* builder, const string& tag) const {
|
bool tray_module::build(builder* builder, const string& tag) const {
|
||||||
if (tag == TAG_TRAY) {
|
if (tag == TAG_TRAY) {
|
||||||
builder->control(tags::controltag::t);
|
builder->control(tags::controltag::t);
|
||||||
extent_val offset_extent = {extent_type::PIXEL, static_cast<float>(m_width)};
|
extent_val offset_extent = {extent_type::PIXEL, static_cast<float>(m_tray.get_width())};
|
||||||
builder->offset(offset_extent);
|
builder->offset(offset_extent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace signal with callback passed to tray.
|
||||||
|
*/
|
||||||
bool tray_module::on(const signals::ui_tray::tray_width_change& evt) {
|
bool tray_module::on(const signals::ui_tray::tray_width_change& evt) {
|
||||||
m_width = evt.cast();
|
|
||||||
broadcast();
|
broadcast();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -195,8 +195,8 @@ void tray_client::ensure_state() const {
|
|||||||
should_be_mapped = false;
|
should_be_mapped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.trace(
|
m_log.trace("tray(%s): ensure_state (hidden=%i, mapped=%i, should_be_mapped=%i)", m_connection.id(client()), m_hidden,
|
||||||
"tray(%s): ensure_state (mapped=%i, should_be_mapped=%i)", m_connection.id(client()), mapped(), should_be_mapped);
|
mapped(), should_be_mapped);
|
||||||
|
|
||||||
if (should_be_mapped) {
|
if (should_be_mapped) {
|
||||||
m_log.trace("tray(%s): Map client", m_connection.id(client()));
|
m_log.trace("tray(%s): Map client", m_connection.id(client()));
|
||||||
|
@ -111,6 +111,10 @@ bool tray_manager::running() const {
|
|||||||
return m_activated;
|
return m_activated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int tray_manager::get_width() const {
|
||||||
|
return m_tray_width;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activate systray management
|
* Activate systray management
|
||||||
*/
|
*/
|
||||||
@ -212,7 +216,14 @@ void tray_manager::reconfigure() {
|
|||||||
*/
|
*/
|
||||||
void tray_manager::reconfigure_window() {
|
void tray_manager::reconfigure_window() {
|
||||||
m_log.trace("tray: Reconfigure window (hidden=%i, clients=%i)", static_cast<bool>(m_hidden), m_clients.size());
|
m_log.trace("tray: Reconfigure window (hidden=%i, clients=%i)", static_cast<bool>(m_hidden), m_clients.size());
|
||||||
m_tray_width = calculate_w();
|
update_width(calculate_w());
|
||||||
|
}
|
||||||
|
|
||||||
|
void tray_manager::update_width(unsigned new_width) {
|
||||||
|
if (m_tray_width != new_width) {
|
||||||
|
m_tray_width = new_width;
|
||||||
|
m_sig.emit(signals::ui_tray::tray_width_change{});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -235,8 +246,6 @@ void tray_manager::reconfigure_clients() {
|
|||||||
remove_client(*it, false);
|
remove_client(*it, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sig.emit(signals::ui_tray::tray_width_change{m_tray_width});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -691,7 +700,7 @@ void tray_manager::handle(const evt::map_notify& evt) {
|
|||||||
m_log.trace("tray: Received map_notify");
|
m_log.trace("tray: Received map_notify");
|
||||||
m_log.trace("tray: Update container mapped flag");
|
m_log.trace("tray: Update container mapped flag");
|
||||||
redraw_window();
|
redraw_window();
|
||||||
} else if (is_embedded(evt->window)) {
|
} else if (is_embedded(evt->window)) { // TODO FIXME evt->window points to the wrapper window
|
||||||
m_log.trace("tray: Received map_notify");
|
m_log.trace("tray: Received map_notify");
|
||||||
m_log.trace("tray: Set client mapped");
|
m_log.trace("tray: Set client mapped");
|
||||||
auto client = find_client(evt->window);
|
auto client = find_client(evt->window);
|
||||||
@ -707,7 +716,7 @@ void tray_manager::handle(const evt::map_notify& evt) {
|
|||||||
* Event callback : XCB_UNMAP_NOTIFY
|
* Event callback : XCB_UNMAP_NOTIFY
|
||||||
*/
|
*/
|
||||||
void tray_manager::handle(const evt::unmap_notify& evt) {
|
void tray_manager::handle(const evt::unmap_notify& evt) {
|
||||||
if (m_activated && is_embedded(evt->window)) {
|
if (m_activated && is_embedded(evt->window)) { // TODO FIXME evt->window points to the wrapper window
|
||||||
m_log.trace("tray: Received unmap_notify");
|
m_log.trace("tray: Received unmap_notify");
|
||||||
m_log.trace("tray: Set client unmapped");
|
m_log.trace("tray: Set client unmapped");
|
||||||
auto client = find_client(evt->window);
|
auto client = find_client(evt->window);
|
||||||
|
Loading…
Reference in New Issue
Block a user