Added SetActive to wxEventLoop

Ensured Yield has a wxEventLoop (wxX11)
Process size event explicitly in top-level SetSize (wxX11)
Added wxYield to wxTopLevelWindow::Show (wxX11)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14763 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2002-03-24 21:19:27 +00:00
parent 2bc524f358
commit df0e1b64e3
4 changed files with 47 additions and 3 deletions

View File

@ -47,6 +47,9 @@ public:
// return currently active (running) event loop, may be NULL
static wxEventLoop *GetActive() { return ms_activeLoop; }
// set currently active (running) event loop
static void SetActive(wxEventLoop* loop) { ms_activeLoop = loop; }
protected:
// the pointer to the port specific implementation class
class WXDLLEXPORT wxEventLoopImpl *m_impl;

View File

@ -991,6 +991,16 @@ bool wxApp::Yield(bool onlyIfNeeded)
s_inYield = TRUE;
// Make sure we have an event loop object,
// or Pending/Dispatch will fail
wxEventLoop* eventLoop = wxEventLoop::GetActive();
wxEventLoop* newEventLoop = NULL;
if (!eventLoop)
{
newEventLoop = new wxEventLoop;
wxEventLoop::SetActive(newEventLoop);
}
while (wxTheApp && wxTheApp->Pending())
wxTheApp->Dispatch();
@ -999,6 +1009,12 @@ bool wxApp::Yield(bool onlyIfNeeded)
#endif
ProcessIdle();
if (newEventLoop)
{
wxEventLoop::SetActive(NULL);
delete newEventLoop;
}
s_inYield = FALSE;
return TRUE;

View File

@ -280,7 +280,6 @@ bool wxTopLevelWindowX11::Show(bool show)
m_needResizeInIdle = FALSE;
}
if (show)
{
// This does the layout _before_ the
@ -292,8 +291,10 @@ bool wxTopLevelWindowX11::Show(bool show)
Layout();
}
}
wxYield();
return wxWindowX11::Show(show);
bool ret = wxWindowX11::Show(show);
return ret;
}
// ----------------------------------------------------------------------------
@ -637,8 +638,9 @@ void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{
// wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height);
#if 0
// wxLogDebug( "Setting pos: %d, %d", x, y );
wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
#endif
XSync(wxGlobalDisplay(), False);
@ -715,6 +717,11 @@ void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int siz
XSync(wxGlobalDisplay(), False);
XSync(wxGlobalDisplay(), False);
#endif
#if 1
wxSizeEvent event(wxSize(width, height), GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
#endif
}
void wxTopLevelWindowX11::DoGetPosition(int *x, int *y) const

View File

@ -735,6 +735,8 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const
void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{
// wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height);
Window xwindow = (Window) GetMainWindow();
wxCHECK_RET( xwindow, wxT("invalid window") );
@ -775,10 +777,18 @@ void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags)
}
DoMoveWindow( new_x, new_y, new_w, new_h );
#if 0
wxSizeEvent event(wxSize(new_w, new_h), GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
#endif
}
void wxWindowX11::DoSetClientSize(int width, int height)
{
// wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height);
Window xwindow = (Window) GetMainWindow();
wxCHECK_RET( xwindow, wxT("invalid window") );
@ -787,6 +797,12 @@ void wxWindowX11::DoSetClientSize(int width, int height)
XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
#if 0
wxSizeEvent event(wxSize(width, height), GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
#endif
#else
XWindowAttributes attr;
@ -1053,6 +1069,8 @@ void wxWindowX11::SendEraseEvents()
void wxWindowX11::SendPaintEvents()
{
// wxLogDebug("SendPaintEvents: %s (%ld)", GetClassInfo()->GetClassName(), GetId());
m_clipPaintRegion = TRUE;
wxNcPaintEvent nc_paint_event( GetId() );