diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index a87c2ac10be27387dfc7346c5a0285a89829fc64..a93753cf78b941755434576294430cf748095c30 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -151,6 +151,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) break; case GDK_MOTION_NOTIFY: if (drag_type != SP_DRAG_NONE) { + desktop->active_guide = guide; Geom::Point const motion_w(event->motion.x, event->motion.y); Geom::Point motion_dt(desktop->w2d(motion_w)); @@ -323,6 +324,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) moved = false; desktop->set_coordinate_status(event_dt); } + desktop->active_guide = nullptr; drag_type = SP_DRAG_NONE; sp_canvas_item_ungrab(item); ret=TRUE; diff --git a/src/desktop.cpp b/src/desktop.cpp index e0ee25c2c68a6a472f01facae9e0dc6bff9a1c08..8a44e9ffb1048e078a1e263873723c845c9f1dd1 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -151,6 +151,7 @@ SPDesktop::SPDesktop() , _active(false) , _image_render_observer(this, "/options/rendering/imageinoutlinemode") , grids_visible(false) + , active_guide(nullptr) { layers = new Inkscape::LayerModel(); layers->_layer_activated_signal.connect(sigc::bind(sigc::ptr_fun(_layer_activated), this)); diff --git a/src/desktop.h b/src/desktop.h index 03cd1d5996cc8eaed2dc1454e71f507ac3587e14..8a7dee8a41d5ac4611d6bc214ff2f6a02b502740 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -186,7 +186,7 @@ public: SPCanvasItem *canvas_debug; ///< shows tiling SPCSSAttr *current; ///< current style bool _focusMode; ///< Whether we're focused working or general working - + SPGuide *active_guide; unsigned int dkey; unsigned int number; guint window_state; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 7f918084dca998972e7d8dc80ab74e33cb938352..1a2fbef87e6ee47985871beeb17dbe769d8be164 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -48,6 +48,7 @@ #include "helper/action.h" +#include "object/sp-guide.h" #include "object/sp-image.h" #include "object/sp-namedview.h" #include "object/sp-root.h" @@ -1043,6 +1044,23 @@ SPDesktopWidget::eventoutside(GtkWidget *widget, GdkEvent *event, SPDesktopWidge { if ((event->type == GDK_MOTION_NOTIFY || event->type == GDK_BUTTON_RELEASE) && !dtw->_canvas->_inside && dtw->desktop->event_context->_button1on) { + if (dtw->desktop->active_guide) { + if (event->type == GDK_MOTION_NOTIFY) { + Geom::Point const motion_w(event->motion.x, event->motion.y); + Geom::Point motion_dt(dtw->desktop->w2d(motion_w)); + dtw->desktop->active_guide->moveto(motion_dt, false); + dtw->desktop->set_coordinate_status(motion_dt); + } else { + dtw->desktop->active_guide->moveto(dtw->desktop->active_guide->getPoint(), false); + dtw->desktop->active_guide->set_normal(dtw->desktop->active_guide->getNormal(), false); + sp_guide_remove(dtw->desktop->active_guide); + dtw->desktop->active_guide = nullptr; + Glib::wrap(GTK_WIDGET(dtw->desktop->getCanvas())) + ->get_window() + ->set_cursor(dtw->desktop->event_context->cursor); + DocumentUndo::done(dtw->desktop->getDocument(), SP_VERB_NONE, _("Delete guide")); + } + } sp_desktop_root_handler(nullptr, event, dtw->desktop); }