Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / views / unix / SkOSWindow_Unix.cpp
index 078a9f9..fad5922 100644 (file)
@@ -200,11 +200,13 @@ static bool MyXNextEventWithDelay(Display* dsp, XEvent* evt) {
     return true;
 }
 
+static Atom wm_delete_window_message;
+
 SkOSWindow::NextXEventResult SkOSWindow::nextXEvent() {
     XEvent evt;
     Display* dsp = fUnixWindow.fDisplay;
 
-    if (!MyXNextEventWithDelay(fUnixWindow.fDisplay, &evt)) {
+    if (!MyXNextEventWithDelay(dsp, &evt)) {
         return kContinue_NextXEventResult;
     }
 
@@ -248,6 +250,11 @@ SkOSWindow::NextXEventResult SkOSWindow::nextXEvent() {
         case KeyRelease:
             this->handleKeyUp(XKeyToSkKey(XkbKeycodeToKeysym(dsp, evt.xkey.keycode, 0, 0)));
             break;
+        case ClientMessage:
+            if ((Atom)evt.xclient.data.l[0] == wm_delete_window_message) {
+                return kQuitRequest_NextXEventResult;
+            }
+            // fallthrough
         default:
             // Do nothing for other events
             break;
@@ -262,6 +269,9 @@ void SkOSWindow::loop() {
     }
     Window win = fUnixWindow.fWin;
 
+    wm_delete_window_message = XInternAtom(dsp, "WM_DELETE_WINDOW", False);
+    XSetWMProtocols(dsp, win, &wm_delete_window_message, 1);
+
     XSelectInput(dsp, win, EVENT_MASK);
 
     bool sentExposeEvent = false;