ret = win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
}
- // generate wxID_CANCEL if <esc> has been pressed (typically in dialogs)
- if ( !ret &&
- (gdk_event->keyval == GDK_Escape) )
- {
- // however only do it if we have a Cancel button in the dialog,
- // otherwise the user code may get confused by the events from a
- // nonexistent button and, worse, a wxButton might get button event
- // from another button which is not really expected
- wxWindow *winForCancel = win,
- *btnCancel = NULL;
- while ( winForCancel )
- {
- btnCancel = winForCancel->FindWindow(wxID_CANCEL);
- if ( btnCancel )
- {
- // found a cancel button
- break;
- }
-
- if ( winForCancel->IsTopLevel() )
- {
- // no need to look further
- break;
- }
-
- // maybe our parent has a cancel button?
- winForCancel = winForCancel->GetParent();
- }
-
- if ( btnCancel )
- {
- wxCommandEvent eventClick(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
- eventClick.SetEventObject(btnCancel);
- ret = btnCancel->GetEventHandler()->ProcessEvent(eventClick);
- }
- }
-
if (ret)
{
g_signal_stop_emission_by_name (widget, "key_press_event");
m_hasVMT = false;
m_needParent = true;
m_isBeingDeleted = false;
+
+ m_showOnIdle= false;
m_noExpose = false;
m_nativeSizeEvent = false;
m_resizing = false;
}
+bool wxWindowGTK::GtkShowFromOnIdle()
+{
+ 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 true;
+ }
+
+ return false;
+}
+
void wxWindowGTK::OnInternalIdle()
{
+ // Check if we have to show window now
+ if (GtkShowFromOnIdle()) return;
+
if ( m_dirtyTabOrder )
{
m_dirtyTabOrder = false;
SetBackgroundStyle(GetBackgroundStyle());
m_needsStyleChange = false;
}
-
+
// 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)