ui/winui/window.cpp

changeset 477
be34594ee942
parent 471
063a9f29098c
equal deleted inserted replaced
476:31213068c2ba 477:be34594ee942
61 using namespace winrt::Windows::Foundation; 61 using namespace winrt::Windows::Foundation;
62 using namespace winrt::Windows::Storage::Pickers; 62 using namespace winrt::Windows::Storage::Pickers;
63 63
64 UiWindow::UiWindow(winrt::Microsoft::UI::Xaml::Window& win) : window(win) {} 64 UiWindow::UiWindow(winrt::Microsoft::UI::Xaml::Window& win) : window(win) {}
65 65
66 extern "C" static void ui_window_widget_destroy(UiObject *obj) {
67 obj->ref = 1;
68 obj->wobj->window.Close();
69 }
70
66 UiObject* ui_window(const char* title, void* window_data) { 71 UiObject* ui_window(const char* title, void* window_data) {
67 UiObject* obj = ui_simple_window(title, window_data); 72 UiObject* obj = ui_simple_window(title, window_data);
68 73
69 /* 74 /*
70 if (uic_get_menu_list()) { 75 if (uic_get_menu_list()) {
176 window.SetTitleBar(titleBar); 181 window.SetTitleBar(titleBar);
177 182
178 obj->wobj = new UiWindow(window); 183 obj->wobj = new UiWindow(window);
179 ui_context_add_window_destructor(obj->ctx, obj->wobj); 184 ui_context_add_window_destructor(obj->ctx, obj->wobj);
180 185
181 window.Closed([obj](IInspectable const& sender, WindowEventArgs) { 186 window.Closed([obj](IInspectable const& sender, WindowEventArgs e) {
182 if (obj->ctx->close_callback) { 187 uic_context_prepare_close(obj->ctx);
183 UiEvent evt; 188 obj->ref--;
184 evt.obj = obj; 189 if (obj->ref > 0) {
185 evt.document = obj->ctx->document; 190 obj->wobj->window.AppWindow().Hide();
186 evt.window = obj->window; 191 e.Handled(true);
187 evt.eventdata = NULL;
188 evt.intval = 0;
189 obj->ctx->close_callback(&evt, obj->ctx->close_data);
190 } else { 192 } else {
191 ui_context_destroy(obj->ctx); 193 uic_object_destroy(obj);
192 } 194 }
193 }); 195 });
194 196
195 obj->container = new UiBoxContainer(grid, UI_BOX_CONTAINER_VBOX, 0, 0); 197 obj->container = new UiBoxContainer(grid, UI_BOX_CONTAINER_VBOX, 0, 0);
196 198

mercurial