summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 63a289c)
raw | patch | inline | side by side (parent: 63a289c)
author | mjwybrow <mjwybrow@users.sourceforge.net> | |
Thu, 1 Feb 2007 10:58:49 +0000 (10:58 +0000) | ||
committer | mjwybrow <mjwybrow@users.sourceforge.net> | |
Thu, 1 Feb 2007 10:58:49 +0000 (10:58 +0000) |
src/connector-context.cpp | patch | blob | history |
index 644aa05777bf979690454604dad5c22b17a5ce85..476b87bc633acea8dda52cbd0c523d5ea6536991 100644 (file)
static gchar *conn_pt_handle_test(SPConnectorContext *cc, NR::Point& w);
static bool cc_item_is_shape(SPItem *item);
static void cc_selection_changed(Inkscape::Selection *selection, gpointer data);
+static void cc_connector_rerouting_finish(SPConnectorContext *const cc,
+ NR::Point *const p);
static void shape_event_attr_deleted(Inkscape::XML::Node *repr,
Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data);
@@ -561,7 +563,17 @@ connector_handle_button_press(SPConnectorContext *const cc, GdkEventButton const
break;
}
} else if (bevent.button == 3) {
- if (cc->npoints != 0) {
+ if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
+ // A context menu is going to be triggered here,
+ // so end the rerouting operation.
+ cc_connector_rerouting_finish(cc, &p);
+
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+
+ // Don't set ret to TRUE, so we drop through to the
+ // parent handler which will open the context menu.
+ }
+ else if (cc->npoints != 0) {
spcc_connector_finish(cc);
ret = TRUE;
}
@@ -686,30 +698,8 @@ connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton con
}
case SP_CONNECTOR_CONTEXT_REROUTING:
{
- // Clear the temporary path:
- sp_curve_reset(cc->red_curve);
- sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), NULL);
-
- // Test whether we clicked on a connection point
- gchar *shape_label = conn_pt_handle_test(cc, p);
-
- if (shape_label) {
- if (cc->clickedhandle == cc->endpt_handle[0]) {
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-start",shape_label, false);
- }
- else {
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-end",shape_label, false);
- }
- g_free(shape_label);
- }
- cc->clickeditem->setHidden(false);
- sp_conn_adjust_path(SP_PATH(cc->clickeditem));
- cc->clickeditem->updateRepr();
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
- _("Reroute connector"));
- cc_set_active_conn(cc, cc->clickeditem);
+ cc_connector_rerouting_finish(cc, &p);
+
sp_document_ensure_up_to_date(doc);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
return TRUE;
break;
case GDK_Escape:
if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
+
SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
SPDocument *doc = sp_desktop_document(desktop);
- // Clear the temporary path:
- sp_curve_reset(cc->red_curve);
- sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), NULL);
-
- cc->clickeditem->setHidden(false);
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
- _("Reroute connector"));
- cc_set_active_conn(cc, cc->clickeditem);
+
+ cc_connector_rerouting_finish(cc, NULL);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
-
sp_document_undo(doc);
+
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
_("Connector endpoint drag canceled."));
ret = TRUE;
}
+static void
+cc_connector_rerouting_finish(SPConnectorContext *const cc, NR::Point *const p)
+{
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SPDocument *doc = sp_desktop_document(desktop);
+
+ // Clear the temporary path:
+ sp_curve_reset(cc->red_curve);
+ sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), NULL);
+
+ if (p != NULL)
+ {
+ // Test whether we clicked on a connection point
+ gchar *shape_label = conn_pt_handle_test(cc, *p);
+
+ if (shape_label) {
+ if (cc->clickedhandle == cc->endpt_handle[0]) {
+ sp_object_setAttribute(cc->clickeditem,
+ "inkscape:connection-start",shape_label, false);
+ }
+ else {
+ sp_object_setAttribute(cc->clickeditem,
+ "inkscape:connection-end",shape_label, false);
+ }
+ g_free(shape_label);
+ }
+ }
+ cc->clickeditem->setHidden(false);
+ sp_conn_adjust_path(SP_PATH(cc->clickeditem));
+ cc->clickeditem->updateRepr();
+ sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ _("Reroute connector"));
+ cc_set_active_conn(cc, cc->clickeditem);
+}
+
+
static void
spcc_reset_colors(SPConnectorContext *cc)
{