show/hide calls
This commit is contained in:
parent
3db22e4a71
commit
5e5c04af47
3 changed files with 17 additions and 7 deletions
14
src/bar.cpp
14
src/bar.cpp
|
@ -77,9 +77,11 @@ Bar::Bar(Monitor *mon)
|
||||||
}
|
}
|
||||||
|
|
||||||
const wl_surface* Bar::surface() const { return _surface.get(); }
|
const wl_surface* Bar::surface() const { return _surface.get(); }
|
||||||
|
bool Bar::visible() const { return _surface.get(); }
|
||||||
|
|
||||||
void Bar::create(wl_output *output)
|
void Bar::show(wl_output *output)
|
||||||
{
|
{
|
||||||
|
if (visible()) return;
|
||||||
_surface.reset(wl_compositor_create_surface(compositor));
|
_surface.reset(wl_compositor_create_surface(compositor));
|
||||||
_layerSurface.reset(zwlr_layer_shell_v1_get_layer_surface(wlrLayerShell,
|
_layerSurface.reset(zwlr_layer_shell_v1_get_layer_surface(wlrLayerShell,
|
||||||
_surface.get(), nullptr, ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM, "net.tapesoftware.Somebar"));
|
_surface.get(), nullptr, ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM, "net.tapesoftware.Somebar"));
|
||||||
|
@ -94,6 +96,13 @@ void Bar::create(wl_output *output)
|
||||||
wl_surface_commit(_surface.get());
|
wl_surface_commit(_surface.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Bar::hide()
|
||||||
|
{
|
||||||
|
if (!visible()) return;
|
||||||
|
_layerSurface.reset();
|
||||||
|
_surface.reset();
|
||||||
|
_bufs.reset();
|
||||||
|
}
|
||||||
|
|
||||||
void Bar::setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient)
|
void Bar::setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient)
|
||||||
{
|
{
|
||||||
|
@ -109,7 +118,7 @@ void Bar::setStatus(const std::string &status) { _statusCmp.setText(status); }
|
||||||
|
|
||||||
void Bar::invalidate()
|
void Bar::invalidate()
|
||||||
{
|
{
|
||||||
if (_invalid) return;
|
if (_invalid || !visible()) return;
|
||||||
_invalid = true;
|
_invalid = true;
|
||||||
auto frame = wl_surface_frame(_surface.get());
|
auto frame = wl_surface_frame(_surface.get());
|
||||||
wl_callback_add_listener(frame, &_frameListener, this);
|
wl_callback_add_listener(frame, &_frameListener, this);
|
||||||
|
@ -153,6 +162,7 @@ void Bar::layerSurfaceConfigure(uint32_t serial, uint32_t width, uint32_t height
|
||||||
|
|
||||||
void Bar::render()
|
void Bar::render()
|
||||||
{
|
{
|
||||||
|
if (!visible()) return;
|
||||||
auto img = wl_unique_ptr<cairo_surface_t> {cairo_image_surface_create_for_data(
|
auto img = wl_unique_ptr<cairo_surface_t> {cairo_image_surface_create_for_data(
|
||||||
_bufs->data(),
|
_bufs->data(),
|
||||||
CAIRO_FORMAT_ARGB32,
|
CAIRO_FORMAT_ARGB32,
|
||||||
|
|
|
@ -62,7 +62,9 @@ class Bar {
|
||||||
public:
|
public:
|
||||||
Bar(Monitor *mon);
|
Bar(Monitor *mon);
|
||||||
const wl_surface* surface() const;
|
const wl_surface* surface() const;
|
||||||
void create(wl_output *output);
|
bool visible() const;
|
||||||
|
void show(wl_output *output);
|
||||||
|
void hide();
|
||||||
void setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient);
|
void setTag(int tag, znet_tapesoftware_dwl_wm_monitor_v1_tag_state state, int numClients, int focusedClient);
|
||||||
void setSelected(bool selected);
|
void setSelected(bool selected);
|
||||||
void setLayout(int layout);
|
void setLayout(int layout);
|
||||||
|
|
|
@ -29,7 +29,6 @@ struct Monitor {
|
||||||
wl_unique_ptr<wl_output> wlOutput;
|
wl_unique_ptr<wl_output> wlOutput;
|
||||||
wl_unique_ptr<znet_tapesoftware_dwl_wm_monitor_v1> dwlMonitor;
|
wl_unique_ptr<znet_tapesoftware_dwl_wm_monitor_v1> dwlMonitor;
|
||||||
std::optional<Bar> bar;
|
std::optional<Bar> bar;
|
||||||
bool created;
|
|
||||||
};
|
};
|
||||||
struct SeatPointer {
|
struct SeatPointer {
|
||||||
wl_unique_ptr<wl_pointer> wlPointer;
|
wl_unique_ptr<wl_pointer> wlPointer;
|
||||||
|
@ -209,11 +208,10 @@ static const struct znet_tapesoftware_dwl_wm_monitor_v1_listener dwlWmMonitorLis
|
||||||
},
|
},
|
||||||
.frame = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*) {
|
.frame = [](void *mv, znet_tapesoftware_dwl_wm_monitor_v1*) {
|
||||||
auto mon = static_cast<Monitor*>(mv);
|
auto mon = static_cast<Monitor*>(mv);
|
||||||
if (mon->created) {
|
if (mon->bar->visible()) {
|
||||||
mon->bar->invalidate();
|
mon->bar->invalidate();
|
||||||
} else {
|
} else {
|
||||||
mon->bar->create(mon->wlOutput.get());
|
mon->bar->show(mon->wlOutput.get());
|
||||||
mon->created = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue