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)
{
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
}
- win->m_blockValueChanged[i] = false;
}
}
}
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);
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);
- 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;
;
}
}
- 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 )
{
}
//-----------------------------------------------------------------------------
-// "scroll_event", (mouse wheel event)
+// "scroll_event" (mouse wheel event)
//-----------------------------------------------------------------------------
static gboolean
wxScrollWinEvent event(eventType, win->GetScrollPos(orient), orient);
event.SetEventObject(win);
- win->m_blockValueChanged[dir] = true;
win->GTKProcessEvent(event);
- win->m_blockValueChanged[dir] = false;
}
}
{
m_scrollBar[dir] = NULL;
m_scrollPos[dir] = 0;
- m_blockValueChanged[dir] = false;
}
m_oldClientWidth =
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);
}
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;
-
+
m_clipPaintRegion = true;
if (GetLayoutDirection() == wxLayout_RightToLeft)