// Shows a dialog modally, returning a return code int wxDialog::ShowModal() { Show(true); // after the event loop ran, the widget might already have been destroyed WXDisplay* display = (WXDisplay*)XtDisplay( (Widget)m_mainWidget ); if (m_modalShowing) return 0; m_eventLoop = new wxEventLoop; m_modalShowing = true; XtAddGrab((Widget) m_mainWidget, True, False); m_eventLoop->Run(); // Now process all events in case they get sent to a destroyed dialog wxFlushEvents( display ); wxDELETE(m_eventLoop); // TODO: is it safe to call this, if the dialog may have been deleted // by now? Probably only if we're using delayed deletion of dialogs. return GetReturnCode(); }
void tmwxOptimizerDialog::DoStartModal() { /* CAF - essentially lifted from wxGTK 2.5.1's wxDialog::ShowModal, up to grabbing the focus. */ if (IsModal()) { wxFAIL_MSG( wxT("wxDialog:ShowModal called twice") ); mStatus = GetReturnCode(); return; } // use the apps top level window as parent if none given unless explicitly // forbidden if (! GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT)) { wxWindow *parent = wxTheApp->GetTopWindow(); if (parent && parent != this && parent -> IsBeingDeleted() && ! (parent->GetExtraStyle() & wxWS_EX_TRANSIENT)) { m_parent = parent; gtk_window_set_transient_for (GTK_WINDOW(m_widget), GTK_WINDOW(parent->m_widget) ); } } wxBeginBusyCursor (); Show (true); SetFocus(); m_modalShowing = true; g_openDialogs++; gtk_grab_add (m_widget); }
int wxDialog::ShowModal() { WX_TESTING_SHOW_MODAL_HOOK(); wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" ); // release the mouse if it's currently captured as the window having it // will be disabled when this dialog is shown -- but will still keep the // capture making it impossible to do anything in the modal dialog itself wxWindow * const win = wxWindow::GetCapture(); if ( win ) win->GTKReleaseMouseAndNotify(); wxWindow * const parent = GetParentForModalDialog(); if ( parent ) { gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(parent->m_widget) ); } wxBusyCursorSuspender cs; // temporarily suppress the busy cursor #if GTK_CHECK_VERSION(2,10,0) unsigned sigId = 0; gulong hookId = 0; #ifndef __WXGTK3__ // Ubuntu overlay scrollbar uses at least GTK 2.24 if (gtk_check_version(2,24,0) == NULL) #endif { sigId = g_signal_lookup("realize", GTK_TYPE_WIDGET); hookId = g_signal_add_emission_hook(sigId, 0, realize_hook, NULL, NULL); } #endif Show( true ); m_modalShowing = true; wxOpenModalDialogLocker modalLock; // NOTE: gtk_window_set_modal internally calls gtk_grab_add() ! gtk_window_set_modal(GTK_WINDOW(m_widget), TRUE); // Run modal dialog event loop. { wxGUIEventLoopTiedPtr modal(&m_modalLoop, new wxGUIEventLoop()); m_modalLoop->Run(); } #if GTK_CHECK_VERSION(2,10,0) if (sigId) g_signal_remove_emission_hook(sigId, hookId); #endif gtk_window_set_modal(GTK_WINDOW(m_widget), FALSE); return GetReturnCode(); }
// Replacement for Show(true) for modal dialogs - returns return code int wxDialog::ShowModal() { if ( !m_isModalStyle ) SetModal(true); Show(true); return GetReturnCode(); }
// show dialog modally int wxDialog::ShowModal() { wxASSERT_MSG( !IsModal(), _T("wxDialog::ShowModal() reentered?") ); m_oldFocus = FindFocus(); m_endModalCalled = false; Show(); // EndModal may have been called from InitDialog handler (called from // inside Show()), which would cause an infinite loop if we didn't take it // into account if ( !m_endModalCalled ) { // modal dialog needs a parent window, so try to find one wxWindow *parent = GetParent(); if ( !parent ) { parent = FindSuitableParent(); } // remember where the focus was wxWindow *oldFocus = m_oldFocus; if ( !oldFocus ) { // VZ: do we really want to do this? oldFocus = parent; } // We have to remember the HWND because we need to check // the HWND still exists (oldFocus can be garbage when the dialog // exits, if it has been destroyed) HWND hwndOldFocus = oldFocus ? GetHwndOf(oldFocus) : NULL; // enter and run the modal loop { wxDialogModalDataTiedPtr modalData(&m_modalData, new wxDialogModalData(this)); modalData->RunLoop(); } // and restore focus // Note that this code MUST NOT access the dialog object's data // in case the object has been deleted (which will be the case // for a modal dialog that has been destroyed before calling EndModal). if ( oldFocus && (oldFocus != this) && ::IsWindow(hwndOldFocus)) { // This is likely to prove that the object still exists if (wxFindWinFromHandle((WXHWND) hwndOldFocus) == oldFocus) oldFocus->SetFocus(); } } return GetReturnCode(); }
// Replacement for Show(TRUE) for modal dialogs - returns return code int wxDialog::ShowModal() { if ( !IsModal() ) { SetModal(TRUE); } Show(TRUE); return GetReturnCode(); }
int wxDialog::ShowModal() { if (IsModal()) { wxFAIL_MSG( wxT("wxDialog:ShowModal called twice") ); return GetReturnCode(); } // use the apps top level window as parent if none given unless explicitly // forbidden if ( !GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) ) { wxWindow *parent = wxTheApp->GetTopWindow(); if ( parent && parent != this && parent->IsBeingDeleted() && !(parent->GetExtraStyle() & wxWS_EX_TRANSIENT) ) { m_parent = parent; gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(parent->m_widget) ); } } wxBusyCursorSuspender cs; // temporarily suppress the busy cursor Show( true ); SetFocus(); m_modalShowing = true; g_openDialogs++; gtk_grab_add( m_widget ); wxEventLoop().Run(); gtk_grab_remove( m_widget ); g_openDialogs--; return GetReturnCode(); }
int wxDialog::ShowModal() { if ( IsModal() ) { wxFAIL_MSG( wxT("wxDialog:ShowModal called twice") ); return GetReturnCode(); } // use the apps top level window as parent if none given unless explicitly // forbidden if ( !GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) ) { wxWindow *parent = wxTheApp->GetTopWindow(); if ( parent && parent != this ) { m_parent = parent; } } Show(true); m_isShowingModal = true; wxASSERT_MSG( !m_windowDisabler, _T("disabling windows twice?") ); #if defined(__WXGTK__) || defined(__WXMGL__) wxBusyCursorSuspender suspender; // FIXME (FIXME_MGL) - make sure busy cursor disappears under MSW too #endif m_windowDisabler = new wxWindowDisabler(this); if ( !m_eventLoop ) m_eventLoop = new wxEventLoop; m_eventLoop->Run(); return GetReturnCode(); }
int wxDialog::ShowModal() { WX_HOOK_MODAL_DIALOG(); if ( IsModal() ) { wxFAIL_MSG( wxT("wxDialog:ShowModal called twice") ); return GetReturnCode(); } // use the apps top level window as parent if none given unless explicitly // forbidden wxWindow * const parent = GetParentForModalDialog(); if ( parent && parent != this ) { m_parent = parent; } Show(true); m_isShowingModal = true; wxASSERT_MSG( !m_windowDisabler, wxT("disabling windows twice?") ); #if defined(__WXGTK__) wxBusyCursorSuspender suspender; #endif m_windowDisabler = new wxWindowDisabler(this); if ( !m_eventLoop ) m_eventLoop = new wxEventLoop; m_eventLoop->Run(); return GetReturnCode(); }
// Replacement for Show(true) for modal dialogs - returns return code int wxDialog::ShowModal() { m_modality = wxDIALOG_MODALITY_APP_MODAL; Show(); wxModalEventLoop modalLoop(this); m_eventLoop = &modalLoop; wxDialog::OSXBeginModalDialog(); modalLoop.Run(); wxDialog::OSXEndModalDialog(); m_eventLoop = NULL; return GetReturnCode(); }
int wxDialog::ShowModal() { wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" ); // release the mouse if it's currently captured as the window having it // will be disabled when this dialog is shown -- but will still keep the // capture making it impossible to do anything in the modal dialog itself wxWindow * const win = wxWindow::GetCapture(); if ( win ) win->GTKReleaseMouseAndNotify(); // use the apps top level window as parent if none given unless explicitly // forbidden if ( !GetParent() && !(GetWindowStyleFlag() & wxDIALOG_NO_PARENT) ) { wxWindow * const parent = GetParentForModalDialog(); if ( parent && parent != this ) { gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(parent->m_widget) ); } } wxBusyCursorSuspender cs; // temporarily suppress the busy cursor Show( true ); m_modalShowing = true; wxOpenModalDialogsCount++; // NOTE: gtk_window_set_modal internally calls gtk_grab_add() ! gtk_window_set_modal(GTK_WINDOW(m_widget), TRUE); // Run modal dialog event loop. { wxGUIEventLoopTiedPtr modal(&m_modalLoop, new wxGUIEventLoop()); m_modalLoop->Run(); } gtk_window_set_modal(GTK_WINDOW(m_widget), FALSE); wxOpenModalDialogsCount--; return GetReturnCode(); }
// show dialog modally int wxDialog::ShowModal() { wxASSERT_MSG( !IsModal(), wxT("ShowModal() can't be called twice") ); Show(); // EndModal may have been called from InitDialog handler (called from // inside Show()) and hidden the dialog back again if ( IsShown() ) { // enter and run the modal loop wxDialogModalDataTiedPtr modalData(&m_modalData, new wxDialogModalData(this)); modalData->RunLoop(); } return GetReturnCode(); }
void DatabaseRegistrationDialog::doWriteConfigSettings( const wxString& prefix) const { BaseDialog::doWriteConfigSettings(prefix); if (createM && GetReturnCode() == wxID_OK) { config().setValue( prefix + Config::pathSeparator + "createDialogAuthentication", choice_authentication->GetSelection()); config().setValue( prefix + Config::pathSeparator + "createDialogCharset", combobox_charset->GetStringSelection()); config().setValue( prefix + Config::pathSeparator + "createDialogPageSize", choice_pagesize->GetStringSelection()); config().setValue( prefix + Config::pathSeparator + "createDialogDialect", choice_dialect->GetStringSelection()); } }
void wxCurlTransferDialog::OnAbort(wxCommandEvent &WXUNUSED(ev)) { // NOTE: the wxCTDS_ABORT flag may be absent if the user wxASSERT(HasFlag(wxCTDS_CAN_ABORT)); if (m_pThread->IsAlive()) { m_pThread->Abort(); EndModal(wxCDRF_USER_ABORTED); } else { wxASSERT(HasFlag(wxCTDS_CAN_START) || !HasFlag(wxCTDS_AUTO_CLOSE)); // thread is not alive: means the user has not // clicked on Start button yet or the download is complete // and the dialog does not auto close // if the transfer has been completed, then the OnEndPerform event handler // has already set the return code to a valid value: EndModal(m_bTransferComplete ? GetReturnCode() : wxCDRF_USER_ABORTED); } }
void onCancel(wxCommandEvent& evt) { m_accepted = false; EndModal(GetReturnCode()); }
void onOk(wxCommandEvent& evt) { m_accepted = true; EndModal(GetReturnCode()); }
int wxDialog::ShowModal() { WX_HOOK_MODAL_DIALOG(); wxASSERT_MSG( !IsModal(), "ShowModal() can't be called twice" ); // release the mouse if it's currently captured as the window having it // will be disabled when this dialog is shown -- but will still keep the // capture making it impossible to do anything in the modal dialog itself wxWindow * const win = wxWindow::GetCapture(); if ( win ) win->GTKReleaseMouseAndNotify(); wxWindow * const parent = GetParentForModalDialog(); if ( parent ) { gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(parent->m_widget) ); } #if GTK_CHECK_VERSION(2,10,0) unsigned sigId = 0; gulong hookId = 0; #ifndef __WXGTK3__ // Ubuntu overlay scrollbar uses at least GTK 2.24 if (gtk_check_version(2,24,0) == NULL) #endif { sigId = g_signal_lookup("realize", GTK_TYPE_WIDGET); hookId = g_signal_add_emission_hook(sigId, 0, realize_hook, NULL, NULL); } #endif // NOTE: this will cause a gtk_grab_add() during Show() gtk_window_set_modal(GTK_WINDOW(m_widget), true); Show( true ); m_modalShowing = true; wxOpenModalDialogLocker modalLock; // Prevent the widget from being destroyed if the user closes the window. // Needed for derived classes which bypass wxTLW::Create(), and therefore // the wxTLW "delete-event" handler is not connected gulong handler_id = g_signal_connect( m_widget, "delete-event", G_CALLBACK(gtk_true), this); // Run modal dialog event loop. { wxGUIEventLoopTiedPtr modal(&m_modalLoop, new wxGUIEventLoop()); m_modalLoop->Run(); } g_signal_handler_disconnect(m_widget, handler_id); #if GTK_CHECK_VERSION(2,10,0) if (sigId) g_signal_remove_emission_hook(sigId, hookId); #endif gtk_window_set_modal(GTK_WINDOW(m_widget), FALSE); return GetReturnCode(); }
void onClose( wxCloseEvent& evt ) { EndModal( GetReturnCode() ); }
SqlResult DiagnosticRecordStorage::GetField(int32_t recNum, DiagnosticField field, app::ApplicationDataBuffer& buffer) const { // Header record. switch (field) { case IGNITE_SQL_DIAG_HEADER_CURSOR_ROW_COUNT: { buffer.PutInt64(GetRowCount()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_HEADER_DYNAMIC_FUNCTION: { buffer.PutString(GetDynamicFunction()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_HEADER_DYNAMIC_FUNCTION_CODE: { buffer.PutInt32(GetDynamicFunctionCode()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_HEADER_NUMBER: { buffer.PutInt32(GetStatusRecordsNumber()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_HEADER_RETURNCODE: { buffer.PutInt32(GetReturnCode()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_HEADER_ROW_COUNT: { buffer.PutInt64(GetRowsAffected()); return SQL_RESULT_SUCCESS; } default: break; } if (recNum < 1 || static_cast<size_t>(recNum) > statusRecords.size()) return SQL_RESULT_NO_DATA; // Status record. const DiagnosticRecord& record = GetStatusRecord(recNum); switch (field) { case IGNITE_SQL_DIAG_STATUS_CLASS_ORIGIN: { buffer.PutString(record.GetClassOrigin()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_COLUMN_NUMBER: { buffer.PutInt32(record.GetColumnNumber()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_CONNECTION_NAME: { buffer.PutString(record.GetConnectionName()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_MESSAGE_TEXT: { buffer.PutString(record.GetMessageText()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_NATIVE: { buffer.PutInt32(0); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_ROW_NUMBER: { buffer.PutInt64(record.GetRowNumber()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_SERVER_NAME: { buffer.PutString(record.GetServerName()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_SQLSTATE: { buffer.PutString(record.GetSqlState()); return SQL_RESULT_SUCCESS; } case IGNITE_SQL_DIAG_STATUS_SUBCLASS_ORIGIN: { buffer.PutString(record.GetSubclassOrigin()); return SQL_RESULT_SUCCESS; } default: break; } return SQL_RESULT_ERROR; }
// // Replacement for Show(true) for modal dialogs - returns return code // int wxDialog::ShowModal() { WX_HOOK_MODAL_DIALOG(); wxASSERT_MSG( !IsModal(), wxT("wxDialog::ShowModal() reentered?") ); m_endModalCalled = false; Show(); // EndModal may have been called from InitDialog handler (called from // inside Show()), which would cause an infinite loop if we didn't take it // into account if ( !m_endModalCalled ) { // modal dialog needs a parent window, so try to find one wxWindow * const parent = GetParentForModalDialog(); // remember where the focus was wxWindow *oldFocus = m_pOldFocus; if ( !oldFocus ) { // VZ: do we really want to do this? oldFocus = parent; } // We have to remember the HWND because we need to check // the HWND still exists (oldFocus can be garbage when the dialog // exits, if it has been destroyed) HWND hwndOldFocus = oldFocus ? GetHwndOf(oldFocus) : NULL; // // Before entering the modal loop, reset the "is in OnIdle()" flag (see // comment in app.cpp) // extern bool gbInOnIdle; bool bWasInOnIdle = gbInOnIdle; gbInOnIdle = false; // enter and run the modal loop { wxDialogModalDataTiedPtr modalData(&m_modalData, new wxDialogModalData(this)); modalData->RunLoop(); } gbInOnIdle = bWasInOnIdle; // and restore focus // Note that this code MUST NOT access the dialog object's data // in case the object has been deleted (which will be the case // for a modal dialog that has been destroyed before calling EndModal). if ( oldFocus && (oldFocus != this) && ::WinIsWindow(vHabmain, hwndOldFocus)) { // This is likely to prove that the object still exists if (wxFindWinFromHandle((WXHWND) hwndOldFocus) == oldFocus) oldFocus->SetFocus(); } } return GetReturnCode(); } // end of wxDialog::ShowModal