1204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong/*------------------------------------------------------------------------- 2204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * drawElements Quality Program Tester Core 3204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * ---------------------------------------- 4204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * 5204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * Copyright (c) 2014 The Android Open Source Project 6204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * Copyright (c) 2016 The Khronos Group Inc. 7204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * Copyright (c) 2016 Mun Gwan-gyeong <elongbug@gmail.com> 8204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * 9204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * Licensed under the Apache License, Version 2.0 (the "License"); 10204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * you may not use this file except in compliance with the License. 11204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * You may obtain a copy of the License at 12204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * 13204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * http://www.apache.org/licenses/LICENSE-2.0 14204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * 15204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * Unless required by applicable law or agreed to in writing, software 16204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * distributed under the License is distributed on an "AS IS" BASIS, 17204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * See the License for the specific language governing permissions and 19204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * limitations under the License. 20204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * 21204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong *//*! 22204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * \file 23204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong * \brief wayland utilities. 24204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong *//*--------------------------------------------------------------------*/ 25204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 26b9dd117ad3e52b929c4ee7c3e5d20442ab42b274Slawomir Cygan#include "tcuLnxWayland.hpp" 27204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong#include "gluRenderConfig.hpp" 28204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong#include "deMemory.h" 29204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 30204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong#include <stdio.h> 31204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 32204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongnamespace tcu 33204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 34b9dd117ad3e52b929c4ee7c3e5d20442ab42b274Slawomir Cygannamespace lnx 35204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 36b9dd117ad3e52b929c4ee7c3e5d20442ab42b274Slawomir Cygannamespace wayland 37204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 38204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 39204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongconst struct wl_registry_listener Display::s_registryListener = 40204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 41204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Display::handleGlobal, 42204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Display::handleGlobalRemove 43204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong}; 44204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 45204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongconst struct wl_shell_surface_listener Window::s_shellSurfaceListener = 46204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 47204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Window::handlePing, 48204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Window::handleConfigure, 49204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Window::handlePopupDone, 50204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong}; 51204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 52204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Display::handleGlobal (void* data, struct wl_registry* registry, uint32_t id, const char* interface, uint32_t version) 53204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 54204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong Display* _this = static_cast<Display*>(data); 55204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(version); 56204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 57204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!strcmp(interface, "wl_compositor")) 58204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong _this->m_compositor = static_cast<struct wl_compositor*>(wl_registry_bind(registry, id, &wl_compositor_interface, 3)); 59204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong /* Todo: when the xdg_shell protocol has stablized, we should move wl_shell to xdg_shell. */ 60204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!strcmp(interface, "wl_shell")) 61204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong _this->m_shell = static_cast<struct wl_shell*>(wl_registry_bind(registry, id, &wl_shell_interface, 1)); 62204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 63204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 64204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Display::handleGlobalRemove (void* data, struct wl_registry* registry, uint32_t name) 65204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 66204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(data); 67204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(registry); 68204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(name); 69204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 70204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 71204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongDisplay::Display (EventState& eventState, const char* name) 72204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong : m_eventState (eventState) 73204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong , m_display (DE_NULL) 740b77517458f4c6d0139de6bd27e1544f68cf6525Jason Ekstrand , m_registry (DE_NULL) 750b77517458f4c6d0139de6bd27e1544f68cf6525Jason Ekstrand , m_compositor (DE_NULL) 760b77517458f4c6d0139de6bd27e1544f68cf6525Jason Ekstrand , m_shell (DE_NULL) 77204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 78204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong try 79204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong { 80204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_display = wl_display_connect(name); 81204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_display) 82204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to open display", name, __FILE__, __LINE__); 83204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 84204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_registry = wl_display_get_registry(m_display); 85204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_registry) 86204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to get registry", name, __FILE__, __LINE__); 87204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 88204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_registry_add_listener(m_registry, &s_registryListener, this); 89204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_display_roundtrip(m_display); 90204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_compositor) 91204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to bind compositor", name, __FILE__, __LINE__); 92204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_shell) 93204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to bind shell", name, __FILE__, __LINE__); 94204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong } 95204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong catch (...) 96204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong { 97204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_shell) 98204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_destroy(m_shell); 99204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 100204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_compositor) 101204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_compositor_destroy(m_compositor); 102204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 103204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_registry) 104204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_registry_destroy(m_registry); 105204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 106204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_display) 107204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_display_disconnect(m_display); 108204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 109204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw; 110204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong } 111204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 112204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 113204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongDisplay::~Display (void) 114204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 115204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_shell) 116204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_destroy(m_shell); 117204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 118204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_compositor) 119204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_compositor_destroy(m_compositor); 120204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 121204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_registry) 122204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_registry_destroy(m_registry); 123204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 124204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_display) 125204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_display_disconnect(m_display); 126204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 127204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 128204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Display::processEvents (void) 129204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 130204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 131204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 132204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongWindow::Window (Display& display, int width, int height) 133204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong : m_display (display) 134204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 135204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong try 136204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong { 137204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_surface = wl_compositor_create_surface(display.getCompositor()); 138204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_surface) 139204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to create ", "surface", __FILE__, __LINE__); 140204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 141204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_shellSurface = wl_shell_get_shell_surface(display.getShell(), m_surface); 142204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_shellSurface) 143204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to create ", "shell_surface", __FILE__, __LINE__); 144204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 145204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_surface_add_listener(m_shellSurface, &s_shellSurfaceListener, this); 146204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_surface_set_title(m_shellSurface, "CTS for OpenGL (ES)"); 147204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_surface_set_toplevel(m_shellSurface); 148204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 149204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (width == glu::RenderConfig::DONT_CARE) 150204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong width = DEFAULT_WINDOW_WIDTH; 151204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (height == glu::RenderConfig::DONT_CARE) 152204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong height = DEFAULT_WINDOW_HEIGHT; 153204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 154204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_window = wl_egl_window_create(m_surface, width, height); 155204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (!m_window) 156204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw ResourceError("Failed to create ", "window", __FILE__, __LINE__); 157204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong } 158204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong catch (...) 159204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong { 160204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong throw; 161204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong } 162204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong TCU_CHECK(m_window); 163204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 164204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 165204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::setVisibility (bool visible) 166204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 167204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong m_visible = visible; 168204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 169204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 170204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::getDimensions (int* width, int* height) const 171204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 172204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_egl_window_get_attached_size(m_window, width, height); 173204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 174204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 175204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::setDimensions (int width, int height) 176204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 177204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_egl_window_resize(m_window, width, height, 0, 0); 178204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 179204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 180204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::processEvents (void) 181204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 182204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 183204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 184204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::handlePing (void* data, struct wl_shell_surface* shellSurface, uint32_t serial) 185204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 186204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(data); 187204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_surface_pong(shellSurface, serial); 188204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 189204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 190204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::handleConfigure (void* data, struct wl_shell_surface* shellSurface, uint32_t edges, int32_t width, int32_t height) 191204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 192204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(data); 193204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(shellSurface); 194204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(edges); 195204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(width); 196204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(height); 197204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 198204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 199204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongvoid Window::handlePopupDone (void* data, struct wl_shell_surface* shellSurface) 200204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 201204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(data); 202204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong DE_UNREF(shellSurface); 203204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 204204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 205204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeongWindow::~Window (void) 206204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong{ 207204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_window) 208204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_egl_window_destroy(m_window); 209204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_shellSurface) 210204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_shell_surface_destroy(m_shellSurface); 211204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong if (m_surface) 212204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong wl_surface_destroy(m_surface); 213204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} 214204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong 215204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} // wayland 216b9dd117ad3e52b929c4ee7c3e5d20442ab42b274Slawomir Cygan} // lnx 217204cab3e14d50366384eb129e35b8532e7c948d9Mun Gwan-gyeong} // tcu 218