From 0af058549f04f34689625eb5b767613f89eb0dc6 Mon Sep 17 00:00:00 2001 From: Josh Andler Date: Mon, 23 Jan 2012 13:04:53 -0800 Subject: Patch from John Smith for 623660 (bzr r10921) --- src/ui/tool/control-point-selection.cpp | 2 +- src/ui/tool/control-point-selection.h | 2 +- src/ui/tool/control-point.cpp | 6 +++--- src/ui/tool/control-point.h | 4 ++-- src/ui/tool/curve-drag-point.cpp | 4 ++-- src/ui/tool/curve-drag-point.h | 2 +- src/ui/tool/manipulator.h | 7 ++++--- src/ui/tool/multi-path-manipulator.cpp | 4 ++-- src/ui/tool/multi-path-manipulator.h | 2 +- src/ui/tool/node-tool.cpp | 6 +++--- src/ui/tool/node.cpp | 8 ++++---- src/ui/tool/node.h | 4 ++-- src/ui/tool/path-manipulator.cpp | 2 +- src/ui/tool/path-manipulator.h | 2 +- src/ui/tool/selector.cpp | 14 +++++++------- src/ui/tool/selector.h | 2 +- src/ui/tool/transform-handle-set.cpp | 2 +- src/ui/tool/transform-handle-set.h | 2 +- 18 files changed, 38 insertions(+), 37 deletions(-) (limited to 'src/ui') diff --git a/src/ui/tool/control-point-selection.cpp b/src/ui/tool/control-point-selection.cpp index 308359c33..3e20fb3c7 100644 --- a/src/ui/tool/control-point-selection.cpp +++ b/src/ui/tool/control-point-selection.cpp @@ -577,7 +577,7 @@ void ControlPointSelection::_commitHandlesTransform(CommitEvent ce) signal_commit.emit(ce); } -bool ControlPointSelection::event(GdkEvent *event) +bool ControlPointSelection::event(SPEventContext *event_context, GdkEvent *event) { // implement generic event handling that should apply for all control point selections here; // for example, keyboard moves and transformations. This way this functionality doesn't need diff --git a/src/ui/tool/control-point-selection.h b/src/ui/tool/control-point-selection.h index 67bd07644..f5eb47026 100644 --- a/src/ui/tool/control-point-selection.h +++ b/src/ui/tool/control-point-selection.h @@ -90,7 +90,7 @@ public: void invertSelection(); void spatialGrow(SelectableControlPoint *origin, int dir); - virtual bool event(GdkEvent *); + virtual bool event(SPEventContext *, GdkEvent *); void transform(Geom::Affine const &m); void align(Geom::Dim2 d); diff --git a/src/ui/tool/control-point.cpp b/src/ui/tool/control-point.cpp index 3c4ce25fe..0228e943e 100644 --- a/src/ui/tool/control-point.cpp +++ b/src/ui/tool/control-point.cpp @@ -299,11 +299,11 @@ void ControlPoint::_setPixbuf(Glib::RefPtr p) // re-routes events into the virtual function int ControlPoint::_event_handler(SPCanvasItem */*item*/, GdkEvent *event, ControlPoint *point) { - return point->_eventHandler(event) ? TRUE : FALSE; + return point->_eventHandler(point->_desktop->event_context, event) ? TRUE : FALSE; } // main event callback, which emits all other callbacks. -bool ControlPoint::_eventHandler(GdkEvent *event) +bool ControlPoint::_eventHandler(SPEventContext *event_context, GdkEvent *event) { // NOTE the static variables below are shared for all points! // TODO handle clicks and drags from other buttons too @@ -320,7 +320,7 @@ bool ControlPoint::_eventHandler(GdkEvent *event) { case GDK_BUTTON_PRESS: next_release_doubleclick = 0; - if (event->button.button == 1) { + if (event->button.button == 1 && !event_context->space_panning) { // 1st mouse button click. internally, start dragging, but do not emit signals // or change position until drag tolerance is exceeded. _drag_event_origin[Geom::X] = event->button.x; diff --git a/src/ui/tool/control-point.h b/src/ui/tool/control-point.h index 72106403e..0719370f7 100644 --- a/src/ui/tool/control-point.h +++ b/src/ui/tool/control-point.h @@ -17,9 +17,9 @@ #include #include #include <2geom/point.h> - #include "util/accumulators.h" #include "display/sodipodi-ctrl.h" +#include "event-context.h" class SPDesktop; @@ -92,7 +92,7 @@ public: static Glib::ustring format_tip(char const *format, ...) G_GNUC_PRINTF(1,2); // temporarily public, until snap delay is refactored a little - virtual bool _eventHandler(GdkEvent *event); + virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event); protected: ControlPoint(SPDesktop *d, Geom::Point const &initial_pos, Gtk::AnchorType anchor, diff --git a/src/ui/tool/curve-drag-point.cpp b/src/ui/tool/curve-drag-point.cpp index 8dafb55d7..97e0ab7e7 100644 --- a/src/ui/tool/curve-drag-point.cpp +++ b/src/ui/tool/curve-drag-point.cpp @@ -44,14 +44,14 @@ CurveDragPoint::CurveDragPoint(PathManipulator &pm) setVisible(false); } -bool CurveDragPoint::_eventHandler(GdkEvent *event) +bool CurveDragPoint::_eventHandler(SPEventContext *event_context, GdkEvent *event) { // do not process any events when the manipulator is empty if (_pm.empty()) { setVisible(false); return false; } - return ControlPoint::_eventHandler(event); + return ControlPoint::_eventHandler(event_context, event); } bool CurveDragPoint::grabbed(GdkEventMotion */*event*/) diff --git a/src/ui/tool/curve-drag-point.h b/src/ui/tool/curve-drag-point.h index 42a4930c8..819b7dbe1 100644 --- a/src/ui/tool/curve-drag-point.h +++ b/src/ui/tool/curve-drag-point.h @@ -27,7 +27,7 @@ public: void setSize(double sz) { _setSize(sz); } void setTimeValue(double t) { _t = t; } void setIterator(NodeList::iterator i) { first = i; } - virtual bool _eventHandler(GdkEvent *event); + virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event); protected: virtual Glib::ustring _getTip(unsigned state); virtual void dragged(Geom::Point &, GdkEventMotion *); diff --git a/src/ui/tool/manipulator.h b/src/ui/tool/manipulator.h index 68185b4d4..ffed370d3 100644 --- a/src/ui/tool/manipulator.h +++ b/src/ui/tool/manipulator.h @@ -18,6 +18,7 @@ #include #include #include +#include "event-context.h" class SPDesktop; namespace Inkscape { @@ -39,7 +40,7 @@ public: virtual ~Manipulator() {} /// Handle input event. Returns true if handled. - virtual bool event(GdkEvent *)=0; + virtual bool event(SPEventContext *, GdkEvent *)=0; SPDesktop *const _desktop; }; @@ -144,9 +145,9 @@ public: } } - virtual bool event(GdkEvent *event) { + virtual bool event(SPEventContext *event_context, GdkEvent *event) { for (typename MapType::iterator i = _mmap.begin(); i != _mmap.end(); ++i) { - if ((*i).second->event(event)) return true; + if ((*i).second->event(event_context, event)) return true; } return false; } diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index 6a671feb6..92d4d002c 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -546,7 +546,7 @@ void MultiPathManipulator::updateOutlineColors() //} } -bool MultiPathManipulator::event(GdkEvent *event) +bool MultiPathManipulator::event(SPEventContext *event_context, GdkEvent *event) { _tracker.event(event); guint key = 0; @@ -726,7 +726,7 @@ bool MultiPathManipulator::event(GdkEvent *event) case GDK_MOTION_NOTIFY: combine_motion_events(_desktop->canvas, event->motion, 0); for (MapType::iterator i = _mmap.begin(); i != _mmap.end(); ++i) { - if (i->second->event(event)) return true; + if (i->second->event(event_context, event)) return true; } break; default: break; diff --git a/src/ui/tool/multi-path-manipulator.h b/src/ui/tool/multi-path-manipulator.h index 36ea8831c..2e890ecb2 100644 --- a/src/ui/tool/multi-path-manipulator.h +++ b/src/ui/tool/multi-path-manipulator.h @@ -36,7 +36,7 @@ class MultiPathManipulator : public PointManipulator { public: MultiPathManipulator(PathSharedData &data, sigc::connection &chg); virtual ~MultiPathManipulator(); - virtual bool event(GdkEvent *event); + virtual bool event(SPEventContext *, GdkEvent *event); bool empty() { return _mmap.empty(); } unsigned size() { return _mmap.empty(); } diff --git a/src/ui/tool/node-tool.cpp b/src/ui/tool/node-tool.cpp index 33020982e..40e299ee6 100644 --- a/src/ui/tool/node-tool.cpp +++ b/src/ui/tool/node-tool.cpp @@ -457,9 +457,9 @@ gint ink_node_tool_root_handler(SPEventContext *event_context, GdkEvent *event) InkNodeTool *nt = static_cast(event_context); static Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (nt->_multipath->event(event)) return true; - if (nt->_selector->event(event)) return true; - if (nt->_selected_nodes->event(event)) return true; + if (nt->_multipath->event(event_context, event)) return true; + if (nt->_selector->event(event_context, event)) return true; + if (nt->_selected_nodes->event(event_context, event)) return true; switch (event->type) { diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp index b73566317..2dc55e31c 100644 --- a/src/ui/tool/node.cpp +++ b/src/ui/tool/node.cpp @@ -225,7 +225,7 @@ char const *Handle::handle_type_to_localized_string(NodeType type) } } -bool Handle::_eventHandler(GdkEvent *event) +bool Handle::_eventHandler(SPEventContext *event_context, GdkEvent *event) { switch (event->type) { @@ -251,7 +251,7 @@ bool Handle::_eventHandler(GdkEvent *event) default: break; } - return ControlPoint::_eventHandler(event); + return ControlPoint::_eventHandler(event_context, event); } bool Handle::grabbed(GdkEventMotion *) @@ -779,7 +779,7 @@ NodeType Node::parse_nodetype(char x) } /** Customized event handler to catch scroll events needed for selection grow/shrink. */ -bool Node::_eventHandler(GdkEvent *event) +bool Node::_eventHandler(SPEventContext *event_context, GdkEvent *event) { int dir = 0; @@ -820,7 +820,7 @@ bool Node::_eventHandler(GdkEvent *event) } bail_out: - return ControlPoint::_eventHandler(event); + return ControlPoint::_eventHandler(event_context, event); } /** Select or deselect a node in this node's subpath based on its path distance from this node. diff --git a/src/ui/tool/node.h b/src/ui/tool/node.h index 8c59206b7..88f5b8882 100644 --- a/src/ui/tool/node.h +++ b/src/ui/tool/node.h @@ -103,7 +103,7 @@ public: protected: Handle(NodeSharedData const &data, Geom::Point const &initial_pos, Node *parent); - virtual bool _eventHandler(GdkEvent *event); + virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event); virtual void dragged(Geom::Point &, GdkEventMotion *); virtual bool grabbed(GdkEventMotion *); virtual void ungrabbed(GdkEventButton *); @@ -150,7 +150,7 @@ public: static NodeType parse_nodetype(char x); static char const *node_type_to_localized_string(NodeType type); // temporarily public - virtual bool _eventHandler(GdkEvent *event); + virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event); Inkscape::SnapCandidatePoint snapCandidatePoint(); protected: virtual void dragged(Geom::Point &, GdkEventMotion *); diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp index c2eca5f75..0063833ee 100644 --- a/src/ui/tool/path-manipulator.cpp +++ b/src/ui/tool/path-manipulator.cpp @@ -158,7 +158,7 @@ PathManipulator::~PathManipulator() } /** Handle motion events to update the position of the curve drag point. */ -bool PathManipulator::event(GdkEvent *event) +bool PathManipulator::event(SPEventContext *event_context, GdkEvent *event) { if (empty()) return false; diff --git a/src/ui/tool/path-manipulator.h b/src/ui/tool/path-manipulator.h index 62daf9a50..fe73555c8 100644 --- a/src/ui/tool/path-manipulator.h +++ b/src/ui/tool/path-manipulator.h @@ -56,7 +56,7 @@ public: PathManipulator(MultiPathManipulator &mpm, SPPath *path, Geom::Affine const &edit_trans, guint32 outline_color, Glib::ustring lpe_key); ~PathManipulator(); - virtual bool event(GdkEvent *); + virtual bool event(SPEventContext *, GdkEvent *); bool empty(); void writeXML(); diff --git a/src/ui/tool/selector.cpp b/src/ui/tool/selector.cpp index fdd0fc51f..f5448b48a 100644 --- a/src/ui/tool/selector.cpp +++ b/src/ui/tool/selector.cpp @@ -41,12 +41,12 @@ public: gtk_object_destroy(_rubber); } SPDesktop *desktop() { return _desktop; } - bool event(GdkEvent *e) { - return _eventHandler(e); + bool event(SPEventContext *ec, GdkEvent *e) { + return _eventHandler(ec, e); } protected: - virtual bool _eventHandler(GdkEvent *event) { + virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event) { if (event->type == GDK_KEY_PRESS && shortcut_key(event->key) == GDK_Escape && sp_canvas_item_is_visible(_rubber)) { @@ -54,7 +54,7 @@ protected: sp_canvas_item_hide(_rubber); return true; } - return ControlPoint::_eventHandler(event); + return ControlPoint::_eventHandler(event_context, event); } private: @@ -99,7 +99,7 @@ Selector::~Selector() delete _dragger; } -bool Selector::event(GdkEvent *event) +bool Selector::event(SPEventContext *event_context, GdkEvent *event) { // The hidden control point will capture all events after it obtains the grab, // but it relies on this function to initiate it. If we pass only first button @@ -108,9 +108,9 @@ bool Selector::event(GdkEvent *event) case GDK_BUTTON_PRESS: // Do not pass button presses other than left button to the control point. // This way middle click and right click can be handled in SPEventContext. - if (event->button.button == 1) { + if (event->button.button == 1 && !event_context->space_panning) { _dragger->setPosition(_desktop->w2d(event_point(event->motion))); - return _dragger->event(event); + return _dragger->event(event_context, event); } break; default: break; diff --git a/src/ui/tool/selector.h b/src/ui/tool/selector.h index 05d72c208..7e2759b69 100644 --- a/src/ui/tool/selector.h +++ b/src/ui/tool/selector.h @@ -28,7 +28,7 @@ class Selector : public Manipulator { public: Selector(SPDesktop *d); virtual ~Selector(); - virtual bool event(GdkEvent *); + virtual bool event(SPEventContext *, GdkEvent *); sigc::signal signal_area; sigc::signal signal_point; diff --git a/src/ui/tool/transform-handle-set.cpp b/src/ui/tool/transform-handle-set.cpp index 7a12f4fbd..730a0934c 100644 --- a/src/ui/tool/transform-handle-set.cpp +++ b/src/ui/tool/transform-handle-set.cpp @@ -717,7 +717,7 @@ void TransformHandleSet::setBounds(Geom::Rect const &r, bool preserve_center) } } -bool TransformHandleSet::event(GdkEvent*) +bool TransformHandleSet::event(SPEventContext *, GdkEvent*) { return false; } diff --git a/src/ui/tool/transform-handle-set.h b/src/ui/tool/transform-handle-set.h index 8ce7011c5..f5f208e6f 100644 --- a/src/ui/tool/transform-handle-set.h +++ b/src/ui/tool/transform-handle-set.h @@ -38,7 +38,7 @@ public: TransformHandleSet(SPDesktop *d, SPCanvasGroup *th_group); virtual ~TransformHandleSet(); - virtual bool event(GdkEvent *); + virtual bool event(SPEventContext *, GdkEvent *); bool visible() { return _visible; } Mode mode() { return _mode; } -- cgit v1.2.3