From: Robert Roebling Date: Sat, 23 Jun 2007 16:55:26 +0000 (+0000) Subject: Upport scrolling changes and mouse wheel changes. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/40e5ebbf98728d627e4d3c9e3a57f28f5bb8fcb9?ds=inline Upport scrolling changes and mouse wheel changes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46667 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index b98ee769da..c28f5532c9 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -265,10 +265,6 @@ public: // horizontal/vertical scroll position double m_scrollPos[ScrollDir_Max]; - // if true, don't notify about adjustment change (without resetting the - // flag, so this has to be done manually) - bool m_blockValueChanged[ScrollDir_Max]; - // return the scroll direction index corresponding to the given orientation // (which is wxVERTICAL or wxHORIZONTAL) static ScrollDir ScrollDirFromOrient(int orient) diff --git a/src/gtk/scrolbar.cpp b/src/gtk/scrolbar.cpp index fcf9edc55e..07716cf86a 100644 --- a/src/gtk/scrolbar.cpp +++ b/src/gtk/scrolbar.cpp @@ -32,11 +32,9 @@ gtk_value_changed(GtkRange* range, wxScrollBar* win) if (eventType != wxEVT_NULL) { const int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL; - const int i = orient == wxVERTICAL; const int value = win->GetThumbPosition(); wxScrollEvent event(eventType, win->GetId(), value, orient); event.SetEventObject(win); - win->m_blockValueChanged[i] = true; win->GetEventHandler()->ProcessEvent(event); if (!win->m_isScrolling) { @@ -44,7 +42,6 @@ gtk_value_changed(GtkRange* range, wxScrollBar* win) event.SetEventObject(win); win->GetEventHandler()->ProcessEvent(event); } - win->m_blockValueChanged[i] = false; } } } @@ -144,7 +141,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, m_scrollBar[int(isVertical)] = (GtkRange*)m_widget; - g_signal_connect(m_widget, "value_changed", + g_signal_connect_after(m_widget, "value_changed", G_CALLBACK(gtk_value_changed), this); g_signal_connect(m_widget, "button_press_event", G_CALLBACK(gtk_button_press_event), this); @@ -201,11 +198,14 @@ void wxScrollBar::SetThumbPosition( int viewStart ) m_scrollPos[i] = adj->value = viewStart; - // If a "value_changed" signal emission is not already in progress - if (!m_blockValueChanged[i]) - { - gtk_adjustment_value_changed(adj); - } + + g_signal_handlers_disconnect_by_func( m_widget, + (gpointer)gtk_value_changed, this); + + gtk_adjustment_value_changed(adj); + + g_signal_connect_after(m_widget, "value_changed", + G_CALLBACK(gtk_value_changed), this); } } diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 00ad8466f5..7af19166b5 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1240,15 +1240,6 @@ template void InitMouseEvent(wxWindowGTK *win, event.m_leftDown = (gdk_event->state & GDK_BUTTON1_MASK); event.m_middleDown = (gdk_event->state & GDK_BUTTON2_MASK); event.m_rightDown = (gdk_event->state & GDK_BUTTON3_MASK); - if (event.GetEventType() == wxEVT_MOUSEWHEEL) - { - event.m_linesPerAction = 3; - event.m_wheelDelta = 120; - if (((GdkEventButton*)gdk_event)->button == 4) - event.m_wheelRotation = 120; - else if (((GdkEventButton*)gdk_event)->button == 5) - event.m_wheelRotation = -120; - } wxPoint pt = win->GetClientAreaOrigin(); event.m_x = (wxCoord)gdk_event->x - pt.x; @@ -1545,13 +1536,6 @@ gtk_window_button_press_callback( GtkWidget *widget, ; } } - else if (gdk_event->button == 4 || gdk_event->button == 5) - { - if (gdk_event->type == GDK_BUTTON_PRESS ) - { - event_type = wxEVT_MOUSEWHEEL; - } - } if ( event_type == wxEVT_NULL ) { @@ -1742,7 +1726,7 @@ gtk_window_motion_notify_callback( GtkWidget *widget, } //----------------------------------------------------------------------------- -// "scroll_event", (mouse wheel event) +// "scroll_event" (mouse wheel event) //----------------------------------------------------------------------------- static gboolean @@ -2020,9 +2004,7 @@ gtk_scrollbar_value_changed(GtkRange* range, wxWindow* win) wxScrollWinEvent event(eventType, win->GetScrollPos(orient), orient); event.SetEventObject(win); - win->m_blockValueChanged[dir] = true; win->GTKProcessEvent(event); - win->m_blockValueChanged[dir] = false; } } @@ -2264,7 +2246,6 @@ void wxWindowGTK::Init() { m_scrollBar[dir] = NULL; m_scrollPos[dir] = 0; - m_blockValueChanged[dir] = false; } m_oldClientWidth = @@ -2400,7 +2381,7 @@ bool wxWindowGTK::Create( wxWindow *parent, g_signal_handler_block(m_scrollBar[dir], handler_id); // these handlers get notified when scrollbar slider moves - g_signal_connect(m_scrollBar[dir], "value_changed", + g_signal_connect_after(m_scrollBar[dir], "value_changed", G_CALLBACK(gtk_scrollbar_value_changed), this); } @@ -4178,11 +4159,13 @@ void wxWindowGTK::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh)) pos = 0; m_scrollPos[dir] = adj->value = pos; - // If a "value_changed" signal emission is not already in progress - if (!m_blockValueChanged[dir]) - { - gtk_adjustment_value_changed(adj); - } + g_signal_handlers_disconnect_by_func( m_scrollBar[dir], + (gpointer)gtk_scrollbar_value_changed, this); + + gtk_adjustment_value_changed(adj); + + g_signal_connect_after(m_scrollBar[dir], "value_changed", + G_CALLBACK(gtk_scrollbar_value_changed), this); } } @@ -4272,7 +4255,7 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) // No scrolling requested. if ((dx == 0) && (dy == 0)) return; - + m_clipPaintRegion = true; if (GetLayoutDirection() == wxLayout_RightToLeft)