int window_close(window *wind) { window *prev; d_event event; window_event_result result; if (wind == window_get_front()) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_DEACTIVATED); // Deactivate first if ((result = WINDOW_SEND_EVENT(wind, EVENT_WINDOW_CLOSE)) == window_event_result::handled) { // User 'handled' the event, cancelling close if (wind == window_get_front()) { WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); } return 0; } menu_destroy_hook(wind); if (result != window_event_result::deleted) // don't attempt to re-delete delete wind; if ((prev = window_get_front())) WINDOW_SEND_EVENT(prev, EVENT_WINDOW_ACTIVATED); return 1; }
// Make wind the front window void window_select(window &wind) { window *prev = window_get_front(); d_event event; if (&wind == FrontWindow) return; if (&wind == FirstWindow && wind.next) FirstWindow = FirstWindow->next; if (wind.next) wind.next->prev = wind.prev; if (wind.prev) wind.prev->next = wind.next; wind.prev = FrontWindow; FrontWindow->next = &wind; wind.next = nullptr; FrontWindow = &wind; if (wind.is_visible()) { if (prev) WINDOW_SEND_EVENT(prev, EVENT_WINDOW_DEACTIVATED); WINDOW_SEND_EVENT(&wind, EVENT_WINDOW_ACTIVATED); } }
static void display_win32_alert(const char *message, int error) { window *wind; // Handle Descent's windows properly if ((wind = window_get_front())) { const d_event event{EVENT_WINDOW_DEACTIVATED}; WINDOW_SEND_EVENT(wind); } int fullscreen = (grd_curscreen && gr_check_fullscreen()); if (fullscreen) gr_toggle_fullscreen(); MessageBox(NULL, message, error?"Sorry, a critical error has occurred.":"Attention!", error?MB_OK|MB_ICONERROR:MB_OK|MB_ICONWARNING); if ((wind = window_get_front())) { const d_event event{EVENT_WINDOW_ACTIVATED}; WINDOW_SEND_EVENT(wind); } if (!error && fullscreen) gr_toggle_fullscreen(); }
void display_linux_alert(char *message, int error) { d_event event; window *wind; // Handle Descent's windows properly if ((wind = window_get_front())) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_DEACTIVATED); // TODO: insert messagebox code... if ((wind = window_get_front())) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); }
window *window_set_visible(window &w, int visible) { window *prev = window_get_front(); w.w_visible = visible; auto wind = window_get_front(); // get the new front window d_event event; if (wind == prev) return wind; if (prev) WINDOW_SEND_EVENT(prev, EVENT_WINDOW_DEACTIVATED); if (wind) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); return wind; }
void window::send_creation_events(const void *const createdata) { const auto prev_front = window_get_front(); if (FrontWindow) FrontWindow->next = this; FrontWindow = this; if (prev_front) { d_event event; WINDOW_SEND_EVENT(prev_front, EVENT_WINDOW_DEACTIVATED); } { d_create_event event; event.createdata = createdata; WINDOW_SEND_EVENT(this, EVENT_WINDOW_CREATED); } { d_event event; WINDOW_SEND_EVENT(this, EVENT_WINDOW_ACTIVATED); } }
void display_mac_alert(char *message, int error) { window *wind; d_event event; int fullscreen; bool osX = FALSE; uint response; int16_t itemHit; // Handle Descent's windows properly if ((wind = window_get_front())) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_DEACTIVATED); if (grd_curscreen && (fullscreen = gr_check_fullscreen())) gr_toggle_fullscreen(); osX = ( Gestalt(gestaltSystemVersion, (long *) &response) == noErr) && (response >= 0x01000 ); ShowCursor(); if (osX) { #ifdef TARGET_API_MAC_CARBON DialogRef alert; CFStringRef error_text = CFSTR("Sorry, a critical error has occurred."); CFStringRef text = NULL; text = CFStringCreateWithCString(CFAllocatorGetDefault(), message, kCFStringEncodingMacRoman); if (!text) { if (wind) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); return; } if (CreateStandardAlert(error ? kAlertStopAlert : kAlertNoteAlert, error ? error_text : text, error ? text : NULL, 0, &alert) != noErr) { CFRelease(text); if (wind) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); return; } RunStandardAlert(alert, 0, &itemHit); CFRelease(text); #endif } else { // This #if guard removes both compiler warnings // and complications if we didn't link the (older) Mac OS X SDK that actually supports the following. #if !defined(MAC_OS_X_VERSION_MAX_ALLOWED) || (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4) Str255 error_text = "\pSorry, a critical error has occurred."; Str255 text; CopyCStringToPascal(message, text); StandardAlert(error ? kAlertStopAlert : kAlertNoteAlert, error ? error_text : text, error ? text : NULL, 0, &itemHit); #endif } if ((wind = window_get_front())) WINDOW_SEND_EVENT(wind, EVENT_WINDOW_ACTIVATED); if (grd_curscreen && !error && fullscreen) gr_toggle_fullscreen(); }