Added a mechanism allowing a toplevel window to delay its deactivation
event. This will come in handy for MDI among other things. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24545 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -4,9 +4,9 @@
|
|||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2002/12/08
|
// Created: 2002/12/08
|
||||||
// RCS-ID: $Id:
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) 2002 David Elliott
|
// Copyright: (c) 2002 David Elliott
|
||||||
// Licence: wxWindows license
|
// Licence: wxWindows licence
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __WX_COCOA_TOPLEVEL_H__
|
#ifndef __WX_COCOA_TOPLEVEL_H__
|
||||||
@@ -68,6 +68,7 @@ public:
|
|||||||
virtual void CocoaDelegate_windowDidBecomeMain(void);
|
virtual void CocoaDelegate_windowDidBecomeMain(void);
|
||||||
virtual void CocoaDelegate_windowDidResignMain(void);
|
virtual void CocoaDelegate_windowDidResignMain(void);
|
||||||
virtual wxMenuBar* GetAppMenuBar(wxCocoaNSWindow *win);
|
virtual wxMenuBar* GetAppMenuBar(wxCocoaNSWindow *win);
|
||||||
|
static void DeactivatePendingWindow();
|
||||||
protected:
|
protected:
|
||||||
void SetNSWindow(WX_NSWindow cocoaNSWindow);
|
void SetNSWindow(WX_NSWindow cocoaNSWindow);
|
||||||
WX_NSWindow m_cocoaNSWindow;
|
WX_NSWindow m_cocoaNSWindow;
|
||||||
@@ -75,10 +76,12 @@ protected:
|
|||||||
virtual void CocoaReplaceView(WX_NSView oldView, WX_NSView newView);
|
virtual void CocoaReplaceView(WX_NSView oldView, WX_NSView newView);
|
||||||
static unsigned int NSWindowStyleForWxStyle(long style);
|
static unsigned int NSWindowStyleForWxStyle(long style);
|
||||||
|
|
||||||
|
static wxTopLevelWindowCocoa *sm_cocoaDeactivateWindow;
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Implementation
|
// Implementation
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
public:
|
public:
|
||||||
|
virtual bool Destroy();
|
||||||
// Pure virtuals
|
// Pure virtuals
|
||||||
virtual void Maximize(bool maximize = true);
|
virtual void Maximize(bool maximize = true);
|
||||||
virtual bool IsMaximized() const;
|
virtual bool IsMaximized() const;
|
||||||
|
@@ -261,6 +261,7 @@ void wxApp::CocoaDelegate_applicationDidBecomeActive()
|
|||||||
|
|
||||||
void wxApp::CocoaDelegate_applicationWillResignActive()
|
void wxApp::CocoaDelegate_applicationWillResignActive()
|
||||||
{
|
{
|
||||||
|
wxTopLevelWindowCocoa::DeactivatePendingWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxApp::CocoaDelegate_applicationDidResignActive()
|
void wxApp::CocoaDelegate_applicationDidResignActive()
|
||||||
|
@@ -45,6 +45,8 @@ wxWindowList wxModelessWindows;
|
|||||||
// wxTopLevelWindowCocoa implementation
|
// wxTopLevelWindowCocoa implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
wxTopLevelWindowCocoa *wxTopLevelWindowCocoa::sm_cocoaDeactivateWindow = NULL;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxTopLevelWindowCocoa creation
|
// wxTopLevelWindowCocoa creation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -135,11 +137,22 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent,
|
|||||||
|
|
||||||
wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa()
|
wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa()
|
||||||
{
|
{
|
||||||
|
wxASSERT(sm_cocoaDeactivateWindow!=this);
|
||||||
wxAutoNSAutoreleasePool pool;
|
wxAutoNSAutoreleasePool pool;
|
||||||
DestroyChildren();
|
DestroyChildren();
|
||||||
SetNSWindow(NULL);
|
SetNSWindow(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::Destroy()
|
||||||
|
{
|
||||||
|
if(sm_cocoaDeactivateWindow==this)
|
||||||
|
{
|
||||||
|
sm_cocoaDeactivateWindow = NULL;
|
||||||
|
wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey();
|
||||||
|
}
|
||||||
|
return wxTopLevelWindowBase::Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxTopLevelWindowCocoa Cocoa Specifics
|
// wxTopLevelWindowCocoa Cocoa Specifics
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -174,8 +187,16 @@ void wxTopLevelWindowCocoa::CocoaReplaceView(WX_NSView oldView, WX_NSView newVie
|
|||||||
[m_cocoaNSWindow setContentView:newView];
|
[m_cocoaNSWindow setContentView:newView];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*static*/ void wxTopLevelWindowCocoa::DeactivatePendingWindow()
|
||||||
|
{
|
||||||
|
if(sm_cocoaDeactivateWindow)
|
||||||
|
sm_cocoaDeactivateWindow->wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey();
|
||||||
|
sm_cocoaDeactivateWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void)
|
void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void)
|
||||||
{
|
{
|
||||||
|
DeactivatePendingWindow();
|
||||||
wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey",this);
|
wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey",this);
|
||||||
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId());
|
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId());
|
||||||
event.SetEventObject(this);
|
event.SetEventObject(this);
|
||||||
|
Reference in New Issue
Block a user