1. a couple of compilation warnings fixed (strconv/listctrl)

2. now reenable windows disabled by wxWindowDisabler slightly earlier:
   this solves the problem with "wrong" window being brought to top and
   eliminates the need for BringWindowToTop() and SetActiveWindow() in
   our code
3. style wxFRAME_FLOAT_ON_PARENT is now obsolete and unused, all frames
   have WS_EX_APPWINDOW style and appear on the taskbar


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8487 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-10-07 20:19:10 +00:00
parent 98243feda0
commit b0a6bb75bc
8 changed files with 61 additions and 90 deletions

View File

@@ -96,11 +96,14 @@ END_EVENT_TABLE()
// wxDialog construction
// ----------------------------------------------------------------------------
wxDialog::wxDialog()
void wxDialog::Init()
{
m_oldFocus = (wxWindow *)NULL;
m_isShown = FALSE;
m_windowDisabler = (wxWindowDisabler *)NULL;
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
}
@@ -111,9 +114,10 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id,
long style,
const wxString& name)
{
Init();
m_oldFocus = FindFocus();
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
SetName(name);
wxTopLevelWindows.Append(this);
@@ -139,8 +143,6 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID id,
m_windowStyle = style;
m_isShown = FALSE;
if (width < 0)
width = wxDIALOG_DEFAULT_WIDTH;
if (height < 0)
@@ -212,8 +214,7 @@ wxDialog::~wxDialog()
wxTopLevelWindows.DeleteObject(this);
// this will call BringWindowToTop() if necessary to bring back our parent
// window to top
// this will also reenable all the other windows for a modal dialog
Show(FALSE);
if ( !IsModal() )
@@ -342,34 +343,34 @@ void wxDialog::DoShowModal()
if (oldFocus)
hwndOldFocus = (HWND) oldFocus->GetHWND();
// inside this block, all app windows are disabled
// remember where the focus was
if ( !oldFocus )
{
wxWindowDisabler wd(this);
// remember where the focus was
if ( !oldFocus )
{
oldFocus = parent;
if (parent)
hwndOldFocus = (HWND) parent->GetHWND();
}
// enter the modal loop
while ( IsModalShowing() )
{
#if wxUSE_THREADS
wxMutexGuiLeaveOrEnter();
#endif // wxUSE_THREADS
while ( !wxTheApp->Pending() && wxTheApp->ProcessIdle() )
;
// a message came or no more idle processing to do
wxTheApp->DoMessage();
}
oldFocus = parent;
if ( parent )
hwndOldFocus = GetHwndOf(parent);
}
#ifdef __WIN32__
// disable all other app windows
wxASSERT_MSG( !m_windowDisabler, _T("disabling windows twice?") );
m_windowDisabler = new wxWindowDisabler(this);
// enter the modal loop
while ( IsModalShowing() )
{
#if wxUSE_THREADS
wxMutexGuiLeaveOrEnter();
#endif // wxUSE_THREADS
while ( !wxTheApp->Pending() && wxTheApp->ProcessIdle() )
;
// a message came or no more idle processing to do
wxTheApp->DoMessage();
}
#if 0 //def __WIN32__
if ( parent )
::SetActiveWindow(GetHwndOf(parent));
#endif // __WIN32__
@@ -388,16 +389,15 @@ void wxDialog::DoShowModal()
bool wxDialog::Show(bool show)
{
// The following is required when the parent has been disabled, (modal
// dialogs, or modeless dialogs with disabling such as wxProgressDialog).
// Otherwise the parent disappears behind other windows when the dialog is
// hidden.
if ( !show )
{
wxWindow *parent = GetParent();
if ( parent )
// if we had disabled other app windows, reenable them back now because
// if they stay disabled Windows will activate another window (one
// which is enabled, anyhow) and we will lose activation
if ( m_windowDisabler )
{
::BringWindowToTop(GetHwndOf(parent));
delete m_windowDisabler;
m_windowDisabler = NULL;
}
}
@@ -552,6 +552,7 @@ long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
switch ( message )
{
#if 0 // now that we got owner window right it doesn't seem to be needed
case WM_ACTIVATE:
switch ( LOWORD(wParam) )
{
@@ -578,6 +579,7 @@ long wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
// fall through to process it normally as well
}
break;
#endif // 0
case WM_CLOSE:
// if we can't close, tell the system that we processed the