git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63266 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
115 lines
3.3 KiB
Plaintext
115 lines
3.3 KiB
Plaintext
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/osx/cocoa/dialog.cpp
|
|
// Purpose: wxDialog class
|
|
// Author: Stefan Csomor
|
|
// Modified by:
|
|
// Created: 1998-01-01
|
|
// RCS-ID: $Id: dialog.cpp 54820 2008-07-29 20:04:11Z SC $
|
|
// Copyright: (c) Stefan Csomor
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
#include "wx/dialog.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#include "wx/utils.h"
|
|
#include "wx/frame.h"
|
|
#include "wx/settings.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/osx/private.h"
|
|
|
|
extern wxList wxModalDialogs;
|
|
|
|
void wxDialog::DoShowWindowModal()
|
|
{
|
|
wxTopLevelWindow* parent = static_cast<wxTopLevelWindow*>(wxGetTopLevelParent(GetParent()));
|
|
|
|
wxASSERT_MSG(parent, "ShowWindowModal requires the dialog to have a parent.");
|
|
|
|
NSWindow* parentWindow = parent->GetWXWindow();
|
|
NSWindow* theWindow = GetWXWindow();
|
|
|
|
[NSApp beginSheet: theWindow
|
|
modalForWindow: parentWindow
|
|
modalDelegate: theWindow
|
|
didEndSelector: nil
|
|
contextInfo: nil];
|
|
}
|
|
|
|
void wxDialog::EndWindowModal()
|
|
{
|
|
[NSApp endSheet: GetWXWindow()];
|
|
}
|
|
|
|
void wxDialog::DoShowModal()
|
|
{
|
|
// If the app hasn't started, flush the event queue
|
|
// If we don't do this, the Dock doesn't get the message that
|
|
// the app has started so will refuse to activate it.
|
|
NSApplication *theNSApp = [NSApplication sharedApplication];
|
|
if (![theNSApp isRunning])
|
|
{
|
|
wxMacAutoreleasePool pool;
|
|
while(NSEvent *event = [theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES])
|
|
{
|
|
[theNSApp sendEvent:event];
|
|
}
|
|
}
|
|
|
|
SetFocus() ;
|
|
/*
|
|
WindowGroupRef windowGroup;
|
|
WindowGroupRef formerParentGroup;
|
|
bool resetGroupParent = false;
|
|
|
|
if ( GetParent() == NULL )
|
|
{
|
|
windowGroup = GetWindowGroup(windowRef) ;
|
|
formerParentGroup = GetWindowGroupParent( windowGroup );
|
|
SetWindowGroupParent( windowGroup, GetWindowGroupOfClass( kMovableModalWindowClass ) );
|
|
resetGroupParent = true;
|
|
}
|
|
*/
|
|
NSWindow* theWindow = GetWXWindow();
|
|
|
|
NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
|
|
while (IsModal())
|
|
{
|
|
wxMacAutoreleasePool autoreleasepool;
|
|
// we cannot break based on the return value, because nested
|
|
// alerts might set this to stopped as well, so it would be
|
|
// unsafe
|
|
[NSApp runModalSession:session];
|
|
|
|
// break if ended, perform no further idle processing
|
|
if (!IsModal())
|
|
break;
|
|
|
|
// do some idle processing
|
|
bool needMore = false;
|
|
if (wxTheApp)
|
|
{
|
|
wxTheApp->ProcessPendingEvents();
|
|
needMore = wxTheApp->ProcessIdle();
|
|
}
|
|
|
|
if (!needMore)
|
|
{
|
|
// no more idle processing wanted - block until the next event
|
|
[theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:NO];
|
|
}
|
|
}
|
|
[NSApp endModalSession:session];
|
|
|
|
/*
|
|
if ( resetGroupParent )
|
|
{
|
|
SetWindowGroupParent( windowGroup , formerParentGroup );
|
|
}
|
|
*/
|
|
}
|