summaryrefslogtreecommitdiffstats
path: root/src/desktop-events.cpp
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-06-01 00:13:36 +0000
committerJohn Smith <removethis.john.q.public@bigmail.com>2012-06-01 00:13:36 +0000
commite095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a (patch)
tree6ad9cba2a5dc09bae951c2cd1f02e0da955bd4bb /src/desktop-events.cpp
parentGtkmm fixes for sp-widget (diff)
downloadinkscape-e095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a.tar.gz
inkscape-e095d5b14ab1c46bbc5d23d86c025fdbb01eeb8a.zip
Fix for 951580 : Ruler click toggles guide visibility
(bzr r11448)
Diffstat (limited to 'src/desktop-events.cpp')
-rw-r--r--src/desktop-events.cpp42
1 files changed, 33 insertions, 9 deletions
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index 7a0c144ce..57a07fee3 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -82,10 +82,12 @@ int sp_desktop_root_handler(SPCanvasItem */*item*/, GdkEvent *event, SPDesktop *
static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidget *dtw, bool horiz)
{
- static bool dragging = false;
+ static bool clicked = false;
+ static bool dragged = false;
static SPCanvasItem *guide = NULL;
static Geom::Point normal;
int wx, wy;
+ static gint xp = 0, yp = 0; // where drag started
SPDesktop *desktop = dtw->desktop;
GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(dtw->canvas));
@@ -103,14 +105,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
switch (event->type) {
case GDK_BUTTON_PRESS:
if (event->button.button == 1) {
- dragging = true;
+ clicked = true;
+ dragged = false;
+ // save click origin
+ xp = (gint) event->button.x;
+ yp = (gint) event->button.y;
Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));
Geom::Point const event_dt(desktop->w2d(event_w));
- // explicitly show guidelines; if I draw a guide, I want them on
- desktop->namedview->setGuides(true);
-
// calculate the normal of the guidelines when dragged from the edges of rulers.
Geom::Point normal_bl_to_tr(-1.,1.); //bottomleft to topright
Geom::Point normal_tr_to_bl(1.,1.); //topright to bottomleft
@@ -157,10 +160,24 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
}
break;
case GDK_MOTION_NOTIFY:
- if (dragging) {
+ if (clicked) {
Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win));
Geom::Point event_dt(desktop->w2d(event_w));
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ gint tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
+ if ( ( abs( (gint) event->motion.x - xp ) < tolerance )
+ && ( abs( (gint) event->motion.y - yp ) < tolerance ) ) {
+ break;
+ }
+
+ dragged = true;
+
+ // explicitly show guidelines; if I draw a guide, I want them on
+ if ((horiz ? wy : wx) >= 0) {
+ desktop->namedview->setGuides(true);
+ }
+
if (!(event->motion.state & GDK_SHIFT_MASK)) {
sp_dt_ruler_snap_new_guide(desktop, guide, event_dt, normal);
}
@@ -172,7 +189,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
}
break;
case GDK_BUTTON_RELEASE:
- if (dragging && event->button.button == 1) {
+ if (clicked && event->button.button == 1) {
sp_event_context_discard_delayed_snap_event(desktop->event_context);
gdk_pointer_ungrab(event->button.time);
@@ -183,8 +200,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
sp_dt_ruler_snap_new_guide(desktop, guide, event_dt, normal);
}
- dragging = false;
-
gtk_object_destroy(GTK_OBJECT(guide));
guide = NULL;
if ((horiz ? wy : wx) >= 0) {
@@ -198,6 +213,15 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
_("Create guide"));
}
desktop->set_coordinate_status(event_dt);
+
+ if (!dragged) {
+ // Ruler click (without drag) toggle the guide visibility on and off
+ Inkscape::XML::Node *repr = desktop->namedview->getRepr();
+ sp_namedview_toggle_guides(sp_desktop_document(desktop), repr);
+ }
+
+ clicked = false;
+ dragged = false;
}
default:
break;