examples: Allow to close the popup

So we can the xdg_popup_destroy path.
This commit is contained in:
Guido Günther 2018-04-23 09:53:46 +02:00
parent 5209c79702
commit 32e043f996
1 changed files with 15 additions and 3 deletions

View File

@ -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); eglDestroySurface(egl.display, popup_egl_surface);
wl_egl_window_destroy(popup_egl_window); wl_egl_window_destroy(popup_egl_window);
wl_surface_destroy(popup_wl_surface);
xdg_popup_destroy(popup); xdg_popup_destroy(popup);
wl_surface_destroy(popup_wl_surface);
popup_wl_surface = NULL;
popup = 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 = { 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 (input_surface == wl_surface) {
if (state == WL_POINTER_BUTTON_STATE_PRESSED) { if (state == WL_POINTER_BUTTON_STATE_PRESSED) {
if (button == BTN_RIGHT) { if (button == BTN_RIGHT) {
create_popup(); if (popup_wl_surface) {
popup_destroy();
} else {
create_popup();
}
} else { } else {
buttons++; buttons++;
} }