int dw = 0;
int dh = 0;
- if (win->HasScrolling())
+ if (win->m_hasScrolling)
{
GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(widget);
static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget),
GdkEventButton *WXUNUSED(gdk_event),
- wxWindow *win )
+ wxWindow *WXUNUSED(win))
{
DEBUG_MAIN_THREAD
//
// if (gdk_event->window != widget->slider) return FALSE;
- win->SetScrolling( TRUE );
+ g_blockEventsOnScroll = TRUE;
return FALSE;
}
static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
GdkEventButton *WXUNUSED(gdk_event),
- wxWindow *win )
+ wxWindow *WXUNUSED(win))
{
DEBUG_MAIN_THREAD
//
// if (gdk_event->window != widget->slider) return FALSE;
- win->SetScrolling( FALSE );
+ g_blockEventsOnScroll = FALSE;
return FALSE;
}
// "size_allocate"
//-----------------------------------------------------------------------------
+static
+void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
+ GtkAllocation *WXUNUSED(alloc),
+ wxWindow *win )
+{
+ if (g_isIdle)
+ wxapp_install_idle_handler();
+
+ if (!win->m_hasScrolling) return;
+
+ int client_width = 0;
+ int client_height = 0;
+ win->GetClientSize( &client_width, &client_height );
+ if ((client_width == win->m_oldClientWidth) && (client_height == win->m_oldClientHeight))
+ return;
+
+ win->m_oldClientWidth = client_width;
+ win->m_oldClientHeight = client_height;
+
+ if (!win->m_nativeSizeEvent)
+ {
+ wxSizeEvent event( win->GetSize(), win->GetId() );
+ event.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent( event );
+ }
+}
+
+
#ifdef HAVE_XIM
#define WXUNUSED_UNLESS_XIM(param) param
#else
/* Resize XIM window */
static
-void gtk_wxwindow_size_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget),
- GtkAllocation * WXUNUSED_UNLESS_XIM(alloc),
- wxFrame * WXUNUSED_UNLESS_XIM(win) )
+void gtk_wxwindow_size_callback( GtkWidget* WXUNUSED_UNLESS_XIM(widget),
+ GtkAllocation* WXUNUSED_UNLESS_XIM(alloc),
+ wxWindow* WXUNUSED_UNLESS_XIM(win) )
{
if (g_isIdle)
wxapp_install_idle_handler();
-
+
#ifdef HAVE_XIM
if (!win->m_ic)
return;
m_nativeSizeEvent = FALSE;
m_hasScrolling = FALSE;
- m_isScrolling = FALSE;
m_hAdjust = (GtkAdjustment*) NULL;
m_vAdjust = (GtkAdjustment*) NULL;
if (m_wxwindow)
{
- /* Initialize XIM support. */
+ /* Catch native resize events. */
+ gtk_signal_connect( GTK_OBJECT(m_wxwindow), "size_allocate",
+ GTK_SIGNAL_FUNC(gtk_window_size_callback), (gpointer)this );
+
+ /* Initialize XIM support. */
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "realize",
GTK_SIGNAL_FUNC(gtk_wxwindow_realized_callback), (gpointer) this );
-
- /* And resize XIM window. */
+
+ /* And resize XIM window. */
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "size_allocate",
GTK_SIGNAL_FUNC(gtk_wxwindow_size_callback), (gpointer)this );
}
m_height+border+bottom_border );
}
+ if (m_hasScrolling)
+ {
+ GetClientSize( &m_oldClientWidth, &m_oldClientHeight );
+ }
+
/*
wxPrintf( "OnSize sent from " );
if (GetClassInfo() && GetClassInfo()->GetClassName())
dh += 1 * 2;
}
- if (HasScrolling())
+ if (m_hasScrolling)
{
GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
dh += 1 * 2;
}
- if (HasScrolling())
+ if (m_hasScrolling)
{
GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(m_widget);
m_vAdjust->value = fpos;
}
-/*
- if (!m_isScrolling)
+ if (m_wxwindow->window)
{
-*/
- if (m_wxwindow->window)
- {
- if (orient == wxHORIZONTAL)
- gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "value_changed" );
- else
- gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
- }
-/*
+ if (orient == wxHORIZONTAL)
+ gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "value_changed" );
+ else
+ gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
}
-*/
}
int wxWindow::GetScrollThumb( int orient ) const
}
*/
}
-
-void wxWindow::SetScrolling(bool scroll)
-{
- m_isScrolling = g_blockEventsOnScroll = scroll;
-}