git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46667
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// horizontal/vertical scroll position
double m_scrollPos[ScrollDir_Max];
// 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)
// return the scroll direction index corresponding to the given orientation
// (which is wxVERTICAL or wxHORIZONTAL)
static ScrollDir ScrollDirFromOrient(int orient)
if (eventType != wxEVT_NULL)
{
const int orient = win->HasFlag(wxSB_VERTICAL) ? wxVERTICAL : wxHORIZONTAL;
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);
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)
{
win->GetEventHandler()->ProcessEvent(event);
if (!win->m_isScrolling)
{
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
}
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
}
- win->m_blockValueChanged[i] = false;
m_scrollBar[int(isVertical)] = (GtkRange*)m_widget;
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);
G_CALLBACK(gtk_value_changed), this);
g_signal_connect(m_widget, "button_press_event",
G_CALLBACK(gtk_button_press_event), this);
m_scrollPos[i] =
adj->value = 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);
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);
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;
wxPoint pt = win->GetClientAreaOrigin();
event.m_x = (wxCoord)gdk_event->x - pt.x;
- 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 )
{
if ( event_type == wxEVT_NULL )
{
}
//-----------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------
-// "scroll_event", (mouse wheel event)
+// "scroll_event" (mouse wheel event)
//-----------------------------------------------------------------------------
static gboolean
//-----------------------------------------------------------------------------
static gboolean
wxScrollWinEvent event(eventType, win->GetScrollPos(orient), orient);
event.SetEventObject(win);
wxScrollWinEvent event(eventType, win->GetScrollPos(orient), orient);
event.SetEventObject(win);
- win->m_blockValueChanged[dir] = true;
win->GTKProcessEvent(event);
win->GTKProcessEvent(event);
- win->m_blockValueChanged[dir] = false;
{
m_scrollBar[dir] = NULL;
m_scrollPos[dir] = 0;
{
m_scrollBar[dir] = NULL;
m_scrollPos[dir] = 0;
- m_blockValueChanged[dir] = false;
g_signal_handler_block(m_scrollBar[dir], handler_id);
// these handlers get notified when scrollbar slider moves
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);
}
G_CALLBACK(gtk_scrollbar_value_changed), this);
}
pos = 0;
m_scrollPos[dir] = adj->value = pos;
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);
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
m_clipPaintRegion = true;
if (GetLayoutDirection() == wxLayout_RightToLeft)
m_clipPaintRegion = true;
if (GetLayoutDirection() == wxLayout_RightToLeft)