diff --git a/.gitignore b/.gitignore index 8277c10f45b7198dcbadd312ba62709488d3a188..bb34c7f726098724943995d95bca925bc997ec7c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ build-release/ *.pyc build-aux/flatpak/build/ .flatpak-builder -*.swp diff --git a/app/diagram.c b/app/diagram.c index f7830f56fba5731d0a4a3e0fb6c3e27631ac7261..5b066d3c724456e76c6ed64b10524fdfa1895873 100644 --- a/app/diagram.c +++ b/app/diagram.c @@ -1062,9 +1062,19 @@ diagram_find_clicked_object_except (Diagram *dia, avoid); } -/* +/** + * diagram_find_closest_handle: + * @dia: Diagram object + * @closest: (out): Handle object + * @object: DiaObject + * @pos: Point object + * * Always returns the last handle in an object that has - * the closest distance + * the closest distance unless dia->data->selected was + * null. Check that Handle object is not null. + * + * Returns: last Handle with closest distance or 1000000.0 + * if nothing is selected */ real diagram_find_closest_handle(Diagram *dia, Handle **closest, @@ -1080,6 +1090,10 @@ diagram_find_closest_handle(Diagram *dia, Handle **closest, *closest = NULL; + if (G_UNLIKELY (!dia->data->selected)) { + return mindist; + } + l = dia->data->selected; while (l!=NULL) { obj = (DiaObject *) l->data; @@ -1089,9 +1103,9 @@ diagram_find_closest_handle(Diagram *dia, Handle **closest, /* Note: Uses manhattan metric for speed... */ dist = distance_point_point_manhattan(pos, &handle->pos); if (dist<=mindist) { - mindist = dist; - *closest = handle; - *object = obj; + mindist = dist; + *closest = handle; + *object = obj; } } diff --git a/app/modify_tool.c b/app/modify_tool.c index a86b8328c1b7d43ec0ce7d03dd8dc7c1a78bf9b5..526206e150d84faee52dcb29e2e72352eec1ed58 100644 --- a/app/modify_tool.c +++ b/app/modify_tool.c @@ -243,7 +243,7 @@ static int do_if_clicked_handle(DDisplay *ddisp, ModifyTool *tool, handle = NULL; diagram_find_closest_handle(ddisp->diagram, &handle, &obj, clickedpoint); - if (handle_is_clicked(ddisp, handle, clickedpoint)) { + if (handle && handle_is_clicked (ddisp, handle, clickedpoint)) { tool->state = STATE_MOVE_HANDLE; tool->break_connections = TRUE; tool->last_to = handle->pos;