X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/473d087e563d557a572ee85dd12778f37f8f18ec..61b1a1af1ba8da56161786f6a71233932b5b2e72:/src/gtk1/window.cpp diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index e138b71350..64f720e2ae 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -1577,56 +1577,12 @@ static void gtk_window_hscroll_callback( GtkAdjustment *adjust, wxWindow *win ) win->GetEventHandler()->ProcessEvent( event ); } -//----------------------------------------------------------------------------- -// "changed" from m_vAdjust -//----------------------------------------------------------------------------- - -static void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win ) -{ - DEBUG_MAIN_THREAD - - if (g_isIdle) - wxapp_install_idle_handler(); - - if (g_blockEventsOnDrag) return; - if (!win->m_hasVMT) return; - - wxEventType command = wxEVT_SCROLLWIN_THUMBTRACK; - int value = (int)(win->m_vAdjust->value+0.5); - - wxScrollWinEvent event( command, value, wxVERTICAL ); - event.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( event ); -} - -//----------------------------------------------------------------------------- -// "changed" from m_hAdjust -//----------------------------------------------------------------------------- - -static void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *win ) -{ - DEBUG_MAIN_THREAD - - if (g_isIdle) - wxapp_install_idle_handler(); - - if (g_blockEventsOnDrag) return; - if (!win->m_hasVMT) return; - - wxEventType command = wxEVT_SCROLLWIN_THUMBTRACK; - int value = (int)(win->m_hAdjust->value+0.5); - - wxScrollWinEvent event( command, value, wxHORIZONTAL ); - event.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( event ); -} - //----------------------------------------------------------------------------- // "button_press_event" from scrollbar //----------------------------------------------------------------------------- -static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget), - GdkEventButton *WXUNUSED(gdk_event), +static gint gtk_scrollbar_button_press_callback( GtkRange *widget, + GdkEventButton *gdk_event, wxWindow *win) { DEBUG_MAIN_THREAD @@ -1634,13 +1590,8 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *WXUNUSED(widget), if (g_isIdle) wxapp_install_idle_handler(); -// don't test here as we can release the mouse while being over -// a different window than the slider -// -// if (gdk_event->window != widget->slider) return FALSE; - g_blockEventsOnScroll = TRUE; - win->m_isScrolling = TRUE; + win->m_isScrolling = (gdk_event->window == widget->slider); return FALSE; } @@ -1655,38 +1606,39 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *widget, { DEBUG_MAIN_THREAD - // don't test here as we can release the mouse while being over // a different window than the slider // // if (gdk_event->window != widget->slider) return 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)) + if (win->m_isScrolling) { - value = (int)(win->m_vAdjust->value+0.5); - dir = wxVERTICAL; + 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 ); } - wxScrollWinEvent event( command, value, dir ); - event.SetScrolling( FALSE ); - event.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( event ); - + win->m_isScrolling = FALSE; + return FALSE; } @@ -2119,11 +2071,6 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, gtk_signal_connect( GTK_OBJECT(m_vAdjust), "value_changed", (GtkSignalFunc) gtk_window_vscroll_callback, (gpointer) this ); - gtk_signal_connect( GTK_OBJECT(m_hAdjust), "changed", - (GtkSignalFunc) gtk_window_hscroll_change_callback, (gpointer) this ); - gtk_signal_connect(GTK_OBJECT(m_vAdjust), "changed", - (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this ); - gtk_widget_show( m_wxwindow ); if (m_parent) @@ -3332,25 +3279,9 @@ void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible, } if (orient == wxHORIZONTAL) - { - gtk_signal_disconnect_by_func( GTK_OBJECT(m_hAdjust), - (GtkSignalFunc) gtk_window_hscroll_change_callback, (gpointer) this ); - gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "changed" ); - - gtk_signal_connect( GTK_OBJECT(m_hAdjust), "changed", - (GtkSignalFunc) gtk_window_hscroll_change_callback, (gpointer) this ); - } else - { - gtk_signal_disconnect_by_func( GTK_OBJECT(m_vAdjust), - (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this ); - gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); - - gtk_signal_connect( GTK_OBJECT(m_vAdjust), "changed", - (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this ); - } } void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) )