From: mjwybrow Date: Mon, 8 May 2006 09:48:45 +0000 (+0000) Subject: * knot.h, knot.cpp, connector-context.cpp: X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=888b8e8ab90b308dc1faf2539a33a293f6545d34;p=inkscape.git * knot.h, knot.cpp, connector-context.cpp: Fix glib-gobject-warnings for knots in the connector tool. --- diff --git a/ChangeLog b/ChangeLog index 66680310e..b7a86f6ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ -2006-05-01 Jon A. Cruz +2006-05-07 Michael Wybrow + + * knot.h, knot.cpp, connector-context.cpp: + Fix glib-gobject-warnings for knots in the connector tool. + +2006-05-07 Jon A. Cruz * src/document-subset.cpp: Corrected two bugs, with the minor one hiding the more severe. 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, + _("Connection point: 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", _("Connection point: 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", _("Connector endpoint: 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, + _("Connector endpoint: 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);