int dw = 0;
int dh = 0;
- if (win->HasScrolling())
+ if (win->m_hasScrolling)
{
GtkScrolledWindow *scroll_window = GTK_SCROLLED_WINDOW(widget);
(win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
{
wxNavigationKeyEvent new_event;
- new_event.SetEventObject( win );
+ new_event.SetEventObject( win->GetParent() );
/* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */
new_event.SetDirection( (gdk_event->keyval == GDK_Tab) );
/* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
new_event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) );
new_event.SetCurrentFocus( win );
- ret = win->GetEventHandler()->ProcessEvent( new_event );
+ ret = win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
}
/* generate wxID_CANCEL if <esc> has been pressed (typically in dialogs) */
static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget),
GdkEventButton *WXUNUSED(gdk_event),
- wxWindow *win )
+ wxWindow *win)
{
DEBUG_MAIN_THREAD
//
// if (gdk_event->window != widget->slider) return FALSE;
- win->SetScrolling( TRUE );
+ g_blockEventsOnScroll = TRUE;
+ win->m_isScrolling = TRUE;
return FALSE;
}
// "button_release_event" from scrollbar
//-----------------------------------------------------------------------------
-static gint gtk_scrollbar_button_release_callback( GtkRange *WXUNUSED(widget),
+static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
GdkEventButton *WXUNUSED(gdk_event),
- wxWindow *win )
+ wxWindow *win)
{
DEBUG_MAIN_THREAD
//
// if (gdk_event->window != widget->slider) return FALSE;
- win->SetScrolling( FALSE );
+ wxASSERT( win->m_isScrolling );
+
+ g_blockEventsOnScroll = FALSE;
+ win->m_isScrolling = FALSE;
+
+ wxEventType command = wxEVT_SCROLLWIN_THUMBTRACK;
+ int value = -1;
+ int dir = -1;
+
+ GtkScrolledWindow *scrolledWindow = GTK_SCROLLED_WINDOW(win->m_widget);
+ if (widget == GTK_RANGE(scrolledWindow->hscrollbar))
+ {
+ value = (int)(win->m_hAdjust->value+0.5);
+ dir = wxHORIZONTAL;
+ }
+ if (widget == GTK_RANGE(scrolledWindow->vscrollbar))
+ {
+ value = (int)(win->m_vAdjust->value+0.5);
+ dir = wxVERTICAL;
+ }
+
+ wxScrollWinEvent event( command, value, dir );
+ event.SetScrolling( FALSE );
+ event.SetEventObject( win );
+ win->GetEventHandler()->ProcessEvent( event );
return FALSE;
}
//-----------------------------------------------------------------------------
static
-void gtk_window_size_callback( GtkWidget *widget,
- GtkAllocation *alloc,
+void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
+ GtkAllocation *WXUNUSED(alloc),
wxWindow *win )
{
if (g_isIdle)
wxapp_install_idle_handler();
- wxSizeEvent event( win->GetSize(), win->GetId() );
- event.SetEventObject( win );
- win->GetEventHandler()->ProcessEvent( event );
+ 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 );
+ }
}
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;
-}