summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJosh Andler <scislac@gmail.com>2012-01-23 21:04:53 +0000
committerJosh Andler <scislac@gmail.com>2012-01-23 21:04:53 +0000
commit0af058549f04f34689625eb5b767613f89eb0dc6 (patch)
treed2bf2e1a54226c25cb7feb2af625466ee0ba5e7d /src
parentRevert accidental commit in desktop-widget.cpp (diff)
downloadinkscape-0af058549f04f34689625eb5b767613f89eb0dc6.tar.gz
inkscape-0af058549f04f34689625eb5b767613f89eb0dc6.zip
Patch from John Smith for 623660
(bzr r10921)
Diffstat (limited to 'src')
-rw-r--r--src/event-context.cpp2
-rw-r--r--src/ui/tool/control-point-selection.cpp2
-rw-r--r--src/ui/tool/control-point-selection.h2
-rw-r--r--src/ui/tool/control-point.cpp6
-rw-r--r--src/ui/tool/control-point.h4
-rw-r--r--src/ui/tool/curve-drag-point.cpp4
-rw-r--r--src/ui/tool/curve-drag-point.h2
-rw-r--r--src/ui/tool/manipulator.h7
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp4
-rw-r--r--src/ui/tool/multi-path-manipulator.h2
-rw-r--r--src/ui/tool/node-tool.cpp6
-rw-r--r--src/ui/tool/node.cpp8
-rw-r--r--src/ui/tool/node.h4
-rw-r--r--src/ui/tool/path-manipulator.cpp2
-rw-r--r--src/ui/tool/path-manipulator.h2
-rw-r--r--src/ui/tool/selector.cpp14
-rw-r--r--src/ui/tool/selector.h2
-rw-r--r--src/ui/tool/transform-handle-set.cpp2
-rw-r--r--src/ui/tool/transform-handle-set.h2
19 files changed, 39 insertions, 38 deletions
diff --git a/src/event-context.cpp b/src/event-context.cpp
index 19cb9678a..2c0bcaaff 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -1319,7 +1319,7 @@ gboolean sp_event_context_snap_watchdog_callback(gpointer data) {
case DelayedSnapEvent::CONTROL_POINT_HANDLER: {
using Inkscape::UI::ControlPoint;
ControlPoint *point = reinterpret_cast<ControlPoint*> (dse->getItem2());
- point->_eventHandler(dse->getEvent());
+ point->_eventHandler(ec, dse->getEvent());
}
break;
case DelayedSnapEvent::GUIDE_HANDLER: {
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<Gdk::Pixbuf> 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 <gdkmm.h>
#include <gtkmm.h>
#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 <glib.h>
#include <gdk/gdk.h>
#include <boost/shared_ptr.hpp>
+#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<InkNodeTool*>(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<void, Geom::Rect const &, GdkEventButton*> signal_area;
sigc::signal<void, Geom::Point const &, GdkEventButton*> 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; }