virtual WXWidget GetHandle() const { return m_widget; }
- // I don't want users to override what's done in idle so everything that
- // has to be done in idle time in order for wxGTK to work is done in
- // OnInternalIdle
virtual void OnInternalIdle();
// Internal represention of Update()
// the layouting functions have to be called later on
// (i.e. in idle time, implemented in OnInternalIdle() ).
void GtkUpdateSize() { m_sizeSet = false; }
+
+
+ // Called when a window should delay showing itself
+ // until idle time. This partly mimmicks defered
+ // sizing under MSW.
+ void GtkShowOnIdle() { m_showOnIdle = true; }
// fix up the mouse event coords, used by wxListBox only so far
virtual void FixUpMouseEvent(GtkWidget * WXUNUSED(widget),
// background style until OnIdle
bool m_mouseButtonDown:1;
bool m_blockScrollEvent:1;
+
+ bool m_showOnIdle:1; // postpone showing the window until idle
// C++ has no virtual methods in the constrcutor of any class but we need
// different methods of inserting a child window into a wxFrame,
m_hasVMT = false;
m_needParent = true;
m_isBeingDeleted = false;
+
+ m_showOnIdle= false;
m_noExpose = false;
m_nativeSizeEvent = false;
m_needsStyleChange = false;
}
+ if (IsShown() && m_showOnIdle && !GTK_WIDGET_VISIBLE (m_widget))
+ {
+ GtkAllocation alloc;
+ alloc.x = m_x;
+ alloc.y = m_y;
+ alloc.width = m_width;
+ alloc.height = m_height;
+ gtk_widget_size_allocate( m_widget, &alloc );
+ gtk_widget_show( m_widget );
+ wxShowEvent eventShow(GetId(), true);
+ eventShow.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(eventShow);
+ m_showOnIdle = false;
+ return;
+ }
// Update invalidated regions.
GtkUpdate();
}
if (show)
- gtk_widget_show( m_widget );
+ {
+ if (!m_showOnIdle)
+ {
+ gtk_widget_show( m_widget );
+ wxShowEvent eventShow(GetId(), show);
+ eventShow.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(eventShow);
+ }
+ }
else
+ {
gtk_widget_hide( m_widget );
-
- wxShowEvent eventShow(GetId(), show);
- eventShow.SetEventObject(this);
-
- GetEventHandler()->ProcessEvent(eventShow);
+ wxShowEvent eventShow(GetId(), show);
+ eventShow.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(eventShow);
+ }
return true;
}
if (newParent)
{
+ if (GTK_WIDGET_VISIBLE (newParent->m_widget))
+ {
+ m_showOnIdle = true;
+ gtk_widget_hide( m_widget );
+ }
+
/* insert GTK representation */
(*(newParent->m_insertCallback))(newParent, this);
}
if (m_wxwindow)
{
+ if (!GTK_PIZZA(m_wxwindow)->bin_window) return;
+
GdkRectangle gdk_rect,
*p;
if (rect)