//-----------------------------------------------------------------------------
// size
-// I don't any longer intercept GTK's internal resize events (except frames)
+// I don't any longer intercept GTK's internal resize events, except
+// for frames and from within MDI and tabbed windows (client area
+// size determined internally by GTK, not wxWin).
/*
void gtk_window_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
//-----------------------------------------------------------------------------
// focus_in
-void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+gint gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
{
- if (g_blockEventsOnDrag) return;
+ if (g_blockEventsOnDrag) return FALSE;
if (win->m_wxwindow)
{
if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow))
};
};
- if (!win->HasVMT()) return;
+ if (!win->HasVMT()) return FALSE;
/*
printf( "OnSetFocus from " );
wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ return win->ProcessEvent( event );
};
//-----------------------------------------------------------------------------
// focus out
-void gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
+gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win )
{
- if (g_blockEventsOnDrag) return;
+ if (g_blockEventsOnDrag) return FALSE;
if (win->m_wxwindow)
{
if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow))
GTK_WIDGET_UNSET_FLAGS (win->m_wxwindow, GTK_HAS_FOCUS);
};
- if (!win->HasVMT()) return;
+ if (!win->HasVMT()) return FALSE;
/*
printf( "OnKillFocus from " );
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
event.SetEventObject( win );
- win->ProcessEvent( event );
+ return win->ProcessEvent( event );
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// enter
-bool gtk_window_enter_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win )
+bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
+ if (widget->window != gdk_event->window) return TRUE;
+
if (g_blockEventsOnDrag) return FALSE;
if (widget->window)
gdk_window_set_cursor( widget->window, win->m_cursor->GetCursor() );
- return TRUE;
+ wxMouseEvent event( wxEVT_ENTER_WINDOW );
+ event.SetEventObject( win );
+ return win->ProcessEvent( event );
};
//-----------------------------------------------------------------------------
// leave
-bool gtk_window_leave_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *WXUNUSED(win) )
+bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
{
+ if (widget->window != gdk_event->window) return TRUE;
+
if (g_blockEventsOnDrag) return FALSE;
if (widget->window)
gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() );
- return TRUE;
+ wxMouseEvent event( wxEVT_LEAVE_WINDOW );
+ event.SetEventObject( win );
+ return win->ProcessEvent( event );
};
//-----------------------------------------------------------------------------
m_drawingOffsetX = 0;
m_drawingOffsetY = 0;
m_pDropTarget = NULL;
+ m_resizing = FALSE;
};
wxWindow::wxWindow( wxWindow *parent, wxWindowID id,
m_drawingOffsetX = 0;
m_drawingOffsetY = 0;
m_pDropTarget = NULL;
+ m_resizing = FALSE;
}
void wxWindow::PostCreation(void)
void wxWindow::SetSize( int x, int y, int width, int height, int sizeFlags )
{
+ if (m_resizing) return; // I don't like recursions
+ m_resizing = TRUE;
+
int newX = x;
int newY = y;
int newW = width;
wxSizeEvent event( wxSize(m_width,m_height), GetId() );
event.SetEventObject( this );
ProcessEvent( event );
+
+ m_resizing = FALSE;
};
void wxWindow::SetSize( int width, int height )
void wxWindow::GetSize( int *width, int *height ) const
{
- (*width) = m_width;
- (*height) = m_height;
+ if (width) (*width) = m_width;
+ if (height) (*height) = m_height;
};
void wxWindow::SetClientSize( int width, int height )
};
};
+ // wxNotebooks are very special, so they have their own AddChild
+
if (IsKindOf(CLASSINFO(wxNotebook)))
{
wxNotebook *tab = (wxNotebook*)this;
m_vAdjust->page_increment = (float)(wxMax(fthumb-2,0));
m_vAdjust->page_size = fthumb;
};
-
+
if (m_wxwindow->window)
{
if (orient == wxHORIZONTAL)
else
gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" );
-// gtk_widget_set_usize( m_widget, m_width, m_height );
+ gtk_widget_set_usize( m_widget, m_width, m_height );
};
};