aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2018-04-23 09:53:46 +0200
committerGuido Günther <agx@sigxcpu.org>2018-04-23 12:52:05 +0200
commit32e043f996d00428731e9d97f8e45180574681b1 (patch)
tree101646e1bb387610b1e29f24427ea4bd01fd546f /examples
parent5209c797026cc5c97d2abc796b70d43ceaaac519 (diff)
examples: Allow to close the popup
So we can the xdg_popup_destroy path.
Diffstat (limited to 'examples')
-rw-r--r--examples/layer-shell.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/examples/layer-shell.c b/examples/layer-shell.c
index 721fd69e..0e1d61ca 100644
--- a/examples/layer-shell.c
+++ b/examples/layer-shell.c
@@ -188,12 +188,20 @@ static void xdg_popup_configure(void *data, struct xdg_popup *xdg_popup,
}
}
-static void xdg_popup_done(void *data, struct xdg_popup *xdg_popup) {
+static void popup_destroy()
+{
eglDestroySurface(egl.display, popup_egl_surface);
wl_egl_window_destroy(popup_egl_window);
- wl_surface_destroy(popup_wl_surface);
xdg_popup_destroy(popup);
+ wl_surface_destroy(popup_wl_surface);
+ popup_wl_surface = NULL;
popup = NULL;
+ popup_egl_window = NULL;
+}
+
+static void xdg_popup_done(void *data, struct xdg_popup *xdg_popup) {
+ wlr_log(L_DEBUG, "Popup done");
+ popup_destroy();
}
static const struct xdg_popup_listener xdg_popup_listener = {
@@ -300,7 +308,11 @@ static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
if (input_surface == wl_surface) {
if (state == WL_POINTER_BUTTON_STATE_PRESSED) {
if (button == BTN_RIGHT) {
- create_popup();
+ if (popup_wl_surface) {
+ popup_destroy();
+ } else {
+ create_popup();
+ }
} else {
buttons++;
}