Files
wxWidgets/src/osx/cocoa/dialog.mm
Stefan Csomor 4d572a2cac simplifying code, removing outdated API
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63266 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-01-25 22:27:42 +00:00

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 );
}
*/
}