diff --git a/src/event-context.cpp b/src/event-context.cpp
index 47c5fac269ed7e2d6b4185bd6c40e583dfbd85a0..7e14d5a492f4106dcdc7f2c97dd37a8487883b23 100644 (file)
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
static gdouble accelerate_scroll(GdkEvent *event, gdouble acceleration, SPCanvas *canvas)
{
guint32 time_diff = ((GdkEventKey *) event)->time - scroll_event_time;
- glong slowest_buffer = canvas->slowest_buffer / 1000; // the buffer time is in usec, but event time is in msec
-
- // reduce time interval by the time it took to paint slowest buffer,
- // so that acceleration does not hiccup on complex slow-rendering drawings
- if ((guint32) slowest_buffer <= time_diff)
- time_diff -= slowest_buffer;
- else
- time_diff = 0;
/* key pressed within 500ms ? (1/2 second) */
if (time_diff > 500 || event->key.keyval != scroll_keyval) {
@@ -440,6 +432,8 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
} else {
Inkscape::Rubberband::get()->start(desktop, motion_dt);
}
+ if (zoom_rb == 2)
+ gobble_motion_events(GDK_BUTTON2_MASK);
}
break;
case GDK_BUTTON_RELEASE:
@@ -600,6 +594,9 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
}
break;
case GDK_SCROLL:
+ {
+ bool ctrl = (event->scroll.state & GDK_CONTROL_MASK);
+ bool wheelzooms = (prefs_get_int_attribute("options.wheelzooms","value", 0) == 1);
/* shift + wheel, pan left--right */
if (event->scroll.state & GDK_SHIFT_MASK) {
switch (event->scroll.direction) {
@@ -614,7 +611,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
}
/* ctrl + wheel, zoom in--out */
- } else if (event->scroll.state & GDK_CONTROL_MASK) {
+ } else if ((ctrl && !wheelzooms) || (!ctrl && wheelzooms)) {
double rel_zoom;
switch (event->scroll.direction) {
case GDK_SCROLL_UP:
@@ -650,6 +647,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
}
}
break;
+ }
default:
break;
}