attributes inheritance fix; apply style to both m_wxwindow and m_widget (patch 984858)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28785 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2004-08-14 22:42:23 +00:00
parent 97357eecf1
commit 40bab631d2
4 changed files with 50 additions and 8 deletions

View File

@@ -251,6 +251,16 @@ static bool g_activeFrameLostFocus = FALSE;
// yet, defer setting the focus to idle time.
wxWindowGTK *g_delayedFocus = (wxWindowGTK*) NULL;
// When GTK+ focus_in/out signal is being processed, we shouldn't do
// any focus changes
static bool gs_inFocusSignalHandler = false;
struct InFocusHandlerLock
{
InFocusHandlerLock() { gs_inFocusSignalHandler = true; }
~InFocusHandlerLock() { gs_inFocusSignalHandler = false; }
};
// if we detect that the app has got/lost the focus, we set this variable to
// either TRUE or FALSE and an activate event will be sent during the next
// OnIdle() call and it is reset to -1: this value means that we shouldn't
@@ -1963,6 +1973,8 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
GdkEvent *WXUNUSED(event),
wxWindow *win )
{
InFocusHandlerLock flock;
DEBUG_MAIN_THREAD
if (g_isIdle)
@@ -2057,6 +2069,8 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEventFocus *gdk_event, wxWindowGTK *win )
{
DEBUG_MAIN_THREAD
InFocusHandlerLock flock;
if (g_isIdle)
wxapp_install_idle_handler();
@@ -2946,6 +2960,8 @@ void wxWindowGTK::PostCreation()
(gpointer) this );
}
InheritAttributes();
m_hasVMT = TRUE;
// unless the window was created initially hidden (i.e. Hide() had been
@@ -3606,6 +3622,14 @@ void wxWindowGTK::SetFocus()
return;
}
if (gs_inFocusSignalHandler)
{
wxLogTrace(TRACE_FOCUS,
_T("in focus handler, delaying SetFocus(%p)"), this);
g_delayedFocus = this;
return;
}
if (m_wxwindow)
{
if (!GTK_WIDGET_HAS_FOCUS (m_wxwindow))
@@ -4233,10 +4257,8 @@ void wxWindowGTK::ApplyWidgetStyle(bool forceStyle)
void wxWindowGTK::DoApplyWidgetStyle(GtkRcStyle *style)
{
if (m_wxwindow)
// should we also do m_widget in this case?
gtk_widget_modify_style(m_wxwindow, style);
else
gtk_widget_modify_style(m_widget, style);
gtk_widget_modify_style(m_widget, style);
}