summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormjwybrow <mjwybrow@users.sourceforge.net>2006-05-08 09:48:45 +0000
committermjwybrow <mjwybrow@users.sourceforge.net>2006-05-08 09:48:45 +0000
commit4e6c2398d4881f9be46fca4d900f36d3d724b3a7 (patch)
treebaa967a82ef5d85f132106954b92b16129ad8a0d /src
parentFixed a couple of bugs (diff)
downloadinkscape-4e6c2398d4881f9be46fca4d900f36d3d724b3a7.tar.gz
inkscape-4e6c2398d4881f9be46fca4d900f36d3d724b3a7.zip
* knot.h, knot.cpp, connector-context.cpp:
Fix glib-gobject-warnings for knots in the connector tool. (bzr r764)
Diffstat (limited to 'src')
-rw-r--r--src/connector-context.cpp103
-rw-r--r--src/knot.cpp3
-rw-r--r--src/knot.h1
3 files changed, 44 insertions, 63 deletions
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index edb9a8b45..798725363 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -954,6 +954,8 @@ static gboolean
cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot)
{
g_assert (knot != NULL);
+
+ g_object_ref(knot);
SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(
knot->desktop->event_context);
@@ -962,11 +964,8 @@ cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot)
switch (event->type) {
case GDK_ENTER_NOTIFY:
- gtk_object_set (GTK_OBJECT (knot->item), "fill_color",
- knot->fill [SP_KNOT_STATE_MOUSEOVER], NULL);
- gtk_object_set (GTK_OBJECT (knot->item), "stroke_color",
- knot->stroke [SP_KNOT_STATE_MOUSEOVER], NULL);
-
+ sp_knot_set_flag(knot, SP_KNOT_MOUSEOVER, TRUE);
+
cc->active_handle = knot;
if (knot->tip)
@@ -974,26 +973,25 @@ cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot)
knot->desktop->event_context->defaultMessageContext()->set(
Inkscape::NORMAL_MESSAGE, knot->tip);
}
-
+
consumed = TRUE;
break;
case GDK_LEAVE_NOTIFY:
- gtk_object_set (GTK_OBJECT (knot->item), "fill_color",
- knot->fill [SP_KNOT_STATE_NORMAL], NULL);
- gtk_object_set (GTK_OBJECT (knot->item), "stroke_color",
- knot->stroke [SP_KNOT_STATE_NORMAL], NULL);
+ sp_knot_set_flag(knot, SP_KNOT_MOUSEOVER, FALSE);
cc->active_handle = NULL;
-
+
if (knot->tip) {
knot->desktop->event_context->defaultMessageContext()->clear();
}
-
+
consumed = TRUE;
break;
default:
break;
}
+
+ g_object_unref(knot);
return consumed;
}
@@ -1079,32 +1077,23 @@ static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
// Set center connection point.
if ( cc->connpthandle == NULL ) {
- SPKnot * knot = (SPKnot*)g_object_new (SP_TYPE_KNOT, 0);
-
- knot->desktop = cc->desktop;
- knot->flags = SP_KNOT_VISIBLE;
-
- knot->item = sp_canvas_item_new (sp_desktop_controls(cc->desktop),
- SP_TYPE_CTRL,
- "anchor", GTK_ANCHOR_CENTER,
- "filled", TRUE,
- "stroked", TRUE,
- "mode", SP_KNOT_MODE_XOR,
- NULL);
+ SPKnot *knot = sp_knot_new(cc->desktop,
+ _("<b>Connection point</b>: click or drag to create a new connector"));
- gtk_signal_connect (GTK_OBJECT (knot->item), "event",
- GTK_SIGNAL_FUNC (cc_generic_knot_handler), knot);
+ knot->setShape(SP_KNOT_SHAPE_SQUARE);
+ knot->setSize(8);
+ knot->setAnchor(GTK_ANCHOR_CENTER);
+ knot->setFill(0xffffff00, 0xff0000ff, 0xff0000ff);
+ sp_knot_update_ctrl(knot);
- knot->fill [SP_KNOT_STATE_NORMAL] = 0xffffff00;
- knot->fill [SP_KNOT_STATE_MOUSEOVER] = 0xff0000ff;
- knot->stroke [SP_KNOT_STATE_NORMAL] = 0x01000000;
+ // We don't want to use the standard knot handler,
+ //since we don't want this knot to be draggable.
+ g_signal_handler_disconnect(G_OBJECT(knot->item),
+ knot->_event_handler_id);
+ knot->_event_handler_id = 0;
- g_object_set(G_OBJECT(knot),
- "shape", SP_KNOT_SHAPE_SQUARE,
- "size", 8,
- "anchor", GTK_ANCHOR_CENTER,
- "tip", _("<b>Connection point</b>: click or drag to create a new connector"),
- NULL);
+ gtk_signal_connect(GTK_OBJECT(knot->item), "event",
+ GTK_SIGNAL_FUNC(cc_generic_knot_handler), knot);
cc->connpthandle = knot;
}
@@ -1159,32 +1148,24 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
// Create the handle if it doesn't exist
if ( cc->endpt_handle[i] == NULL ) {
- SPKnot * knot = (SPKnot*) g_object_new (SP_TYPE_KNOT, 0);
-
- knot->desktop = cc->desktop;
- knot->flags = SP_KNOT_VISIBLE;
-
- knot->item = sp_canvas_item_new (sp_desktop_controls (cc->desktop),
- SP_TYPE_CTRL,
- "anchor", GTK_ANCHOR_CENTER,
- "filled", TRUE,
- "stroked", TRUE,
- "mode", SP_KNOT_MODE_XOR,
- NULL);
-
- knot->fill [SP_KNOT_STATE_NORMAL] = 0xffffff00;
- knot->stroke [SP_KNOT_STATE_NORMAL] = 0x000000ff;
- knot->stroke [SP_KNOT_STATE_DRAGGING] = 0x000000ff;
- knot->stroke [SP_KNOT_STATE_MOUSEOVER] = 0x000000ff;
-
- g_object_set(G_OBJECT(knot),
- "shape", SP_KNOT_SHAPE_DIAMOND,
- "size", 10,
- "tip", _("<b>Connector endpoint</b>: drag to reroute or connect to new shapes"),
- NULL);
-
- gtk_signal_connect (GTK_OBJECT (knot->item), "event",
- GTK_SIGNAL_FUNC (cc_generic_knot_handler), knot);
+ SPKnot *knot = sp_knot_new(cc->desktop,
+ _("<b>Connector endpoint</b>: drag to reroute or connect to new shapes"));
+
+ knot->setShape(SP_KNOT_SHAPE_SQUARE);
+ knot->setSize(7);
+ knot->setAnchor(GTK_ANCHOR_CENTER);
+ knot->setFill(0xffffff00, 0xff0000ff, 0xff0000ff);
+ knot->setStroke(0x000000ff, 0x000000ff, 0x000000ff);
+ sp_knot_update_ctrl(knot);
+
+ // We don't want to use the standard knot handler,
+ //since we don't want this knot to be draggable.
+ g_signal_handler_disconnect(G_OBJECT(knot->item),
+ knot->_event_handler_id);
+ knot->_event_handler_id = 0;
+
+ gtk_signal_connect(GTK_OBJECT(knot->item), "event",
+ GTK_SIGNAL_FUNC(cc_generic_knot_handler), knot);
cc->endpt_handle[i] = knot;
}
diff --git a/src/knot.cpp b/src/knot.cpp
index c8d2f2065..40246ce01 100644
--- a/src/knot.cpp
+++ b/src/knot.cpp
@@ -62,7 +62,6 @@ static void sp_knot_init(SPKnot *knot);
static void sp_knot_dispose(GObject *object);
static int sp_knot_handler(SPCanvasItem *item, GdkEvent *event, SPKnot *knot);
-static void sp_knot_set_flag(SPKnot *knot, guint flag, bool set);
static void sp_knot_set_ctrl_state(SPKnot *knot);
static GObjectClass *parent_class;
@@ -582,7 +581,7 @@ NR::Point sp_knot_position(SPKnot const *knot)
/**
* Set flag in knot, with side effects.
*/
-static void sp_knot_set_flag(SPKnot *knot, guint flag, bool set)
+void sp_knot_set_flag(SPKnot *knot, guint flag, bool set)
{
g_assert(knot != NULL);
g_assert(SP_IS_KNOT(knot));
diff --git a/src/knot.h b/src/knot.h
index c3ae07963..f948b3dfc 100644
--- a/src/knot.h
+++ b/src/knot.h
@@ -147,6 +147,7 @@ SPKnot *sp_knot_new(SPDesktop *desktop, gchar const *tip = NULL);
void sp_knot_show(SPKnot *knot);
void sp_knot_hide(SPKnot *knot);
+void sp_knot_set_flag(SPKnot *knot, guint flag, bool set);
void sp_knot_update_ctrl(SPKnot *knot);
void sp_knot_request_position(SPKnot *knot, NR::Point *pos, guint state);