wayland: Add support for the delete event

This commit is contained in:
Jasper St. Pierre 2014-02-07 17:28:33 -05:00
parent 912a0abd26
commit 0c213c8fee
4 changed files with 43 additions and 13 deletions

View File

@ -373,6 +373,19 @@
decorations should be updated accordingly.
</description>
</event>
<event name="delete">
<description summary="surface wants to be closed">
The delete event is sent by the compositor when the user
wants the surface to be closed. This should be equivalent to
the user clicking the close button in client-side decorations,
if your application has any...
This is only a request that the user intends to close your
window. The client may choose to ignore this request, or show
a dialog to ask the user to save their data...
</description>
</event>
</interface>
<interface name="xdg_popup" version="1">

View File

@ -37,6 +37,8 @@
#include <stdlib.h>
#include <stdio.h>
#include "meta-wayland-surface.h"
static void meta_window_present_delete_dialog (MetaWindow *window,
guint32 timestamp);
@ -140,6 +142,8 @@ meta_window_check_alive (MetaWindow *window,
void
meta_window_delete (MetaWindow *window,
guint32 timestamp)
{
if (window->client_type == META_WINDOW_CLIENT_TYPE_X11)
{
meta_error_trap_push (window->display);
if (window->delete_window)
@ -159,6 +163,11 @@ meta_window_delete (MetaWindow *window,
XKillClient (window->display->xdisplay, window->xwindow);
}
meta_error_trap_pop (window->display);
}
else
{
meta_wayland_surface_delete (window->surface);
}
meta_window_check_alive (window, timestamp);

View File

@ -1464,3 +1464,10 @@ meta_wayland_surface_ping (MetaWaylandSurface *surface,
else if (surface->xdg_popup.resource)
xdg_popup_send_ping (surface->xdg_popup.resource, timestamp);
}
void
meta_wayland_surface_delete (MetaWaylandSurface *surface)
{
if (surface->xdg_surface.resource)
xdg_surface_send_delete (surface->xdg_surface.resource);
}

View File

@ -115,5 +115,6 @@ void meta_wayland_surface_focused_unset (MetaWaylandSurface *surf
void meta_wayland_surface_ping (MetaWaylandSurface *surface,
guint32 serial);
void meta_wayland_surface_delete (MetaWaylandSurface *surface);
#endif