From e4946b3717e04543df57643acabfc8360499f7f9 Mon Sep 17 00:00:00 2001 From: Iwan Timmer Date: Thu, 25 May 2017 17:08:15 +0200 Subject: [PATCH] Quit when close button is pressed --- src/video/x11.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/video/x11.c b/src/video/x11.c index 7a5dc6e..907bb31 100644 --- a/src/video/x11.c +++ b/src/video/x11.c @@ -18,6 +18,8 @@ */ #include "../video.h" +#include "../global.h" +#include "../loop.h" #include "egl.h" #include "ffmpeg.h" @@ -28,6 +30,7 @@ #include #include +#include #define DECODER_BUFFER_SIZE 92*1024 @@ -35,6 +38,20 @@ static char* ffmpeg_buffer = NULL; static Display *display; +static Atom wm_deletemessage; + +static int x11_handler(int fd) { + XEvent event; + XNextEvent(display, &event); + switch (event.type) { + case ClientMessage: + if (event.xclient.data.l[0] == wm_deletemessage) + quit(); + + break; + } +} + void x11_setup(int videoFormat, int width, int height, int redrawRate, void* context, int drFlags) { int avc_flags = SLICE_THREADING; if (drFlags & FORCE_HARDWARE_ACCELERATION) @@ -79,7 +96,11 @@ void x11_setup(int videoFormat, int width, int height, int redrawRate, void* con XSendEvent(display, DefaultRootWindow(display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); } + wm_deletemessage = XInternAtom(display, "WM_DELETE_WINDOW", False); + XSetWMProtocols(display, window, &wm_deletemessage, 1); + egl_init(display, window, width, height); + loop_add_fd(ConnectionNumber(display), x11_handler, POLLIN | POLLERR | POLLHUP); } void x11_cleanup() {