Various changes to focus handling when TLW start.

Changed wxWindow::Clear() to use m_clearRegion.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15191 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-04-17 22:44:31 +00:00
parent 82550f2324
commit d7fa7eaa2d
17 changed files with 286 additions and 108 deletions

View File

@@ -46,17 +46,15 @@
extern void wxapp_install_idle_handler();
extern bool g_isIdle;
extern int g_openDialogs;
// ----------------------------------------------------------------------------
// event tables
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// data
// ----------------------------------------------------------------------------
extern wxList wxPendingDelete;
extern wxList wxPendingDelete;
extern int g_openDialogs;
extern wxWindowGTK *g_delayedFocus;
// ----------------------------------------------------------------------------
// debug
@@ -68,14 +66,6 @@ extern void debug_focus_in( GtkWidget* widget, const wxChar* name, const wxChar
#endif
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// GTK callbacks
// ----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// "focus" from m_window
//-----------------------------------------------------------------------------
@@ -164,6 +154,18 @@ gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *WX
return FALSE;
}
//-----------------------------------------------------------------------------
// local code
//-----------------------------------------------------------------------------
static wxWindow* wxGetTopLevelParent(wxWindow *win)
{
wxWindow *p = win;
while (p && !p->IsTopLevel())
p = p->GetParent();
return p;
}
//-----------------------------------------------------------------------------
// "realize" from m_widget
//-----------------------------------------------------------------------------
@@ -200,8 +202,30 @@ gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget), wxTopLevelWindowGTK *
win->SetIcons( iconsOld );
}
// we set the focus to the child that accepts the focus. this
// doesn't really have to be done in "realize" but why not?
// We need to set the focus to some child. Either, this
// has been done already or will be done in the next
// idle cycle, or we will set it ourselves.
if (g_delayedFocus)
{
if (wxGetTopLevelParent(g_delayedFocus))
return;
else
g_delayedFocus = NULL;
}
wxWindow *currentFocus = wxWindow::FindFocus();
if (currentFocus)
{
// I am not sure if this ever can happen,
// since the TLW is just about to get
// created and its children probably don't
// have any focus.
if (wxGetTopLevelParent(currentFocus) == win)
return;
}
// We set the focus to the child that accepts the focus.
wxWindowList::Node *node = win->GetChildren().GetFirst();
while (node)
{
@@ -211,7 +235,7 @@ gtk_frame_realized_callback( GtkWidget * WXUNUSED(widget), wxTopLevelWindowGTK *
child->SetFocus();
break;
}
node = node->GetNext();
}
}