From cd66c3d84a3795694e67fa80f453ee34e0ff285a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Wed, 8 Jun 2011 07:51:01 +0200 Subject: Ignore terminals when hovering above selection. Also fix checking for the shift key and rename the "object" variable to "object_at_cursor" in button handlers. --- liblogdiag/ld-diagram-view.c | 58 ++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 24 deletions(-) (limited to 'liblogdiag/ld-diagram-view.c') diff --git a/liblogdiag/ld-diagram-view.c b/liblogdiag/ld-diagram-view.c index 8b0afe0..18912f4 100644 --- a/liblogdiag/ld-diagram-view.c +++ b/liblogdiag/ld-diagram-view.c @@ -1307,6 +1307,13 @@ check_terminals (LdDiagramView *self, const LdPoint *point) { GList *objects, *iter; CheckTerminalsData data; + LdDiagramObject *object_at_cursor; + + hide_terminals (self); + + object_at_cursor = get_object_at_point (self, point); + if (object_at_cursor && is_object_selected (self, object_at_cursor)) + return; data.found = FALSE; data.point = *point; @@ -1321,8 +1328,6 @@ check_terminals (LdDiagramView *self, const LdPoint *point) check_symbol_terminals (self, iter->data, &data); } - hide_terminals (self); - if (data.found) { self->priv->terminal_hovered = TRUE; @@ -2165,7 +2170,7 @@ on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data) LdPoint point; LdDiagramView *self; AddObjectData *data; - LdDiagramObject *object; + LdDiagramObject *object_at_cursor; point.x = event->x; point.y = event->y; @@ -2183,9 +2188,9 @@ on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data) rotate_symbol (self, LD_DIAGRAM_SYMBOL (data->object)); break; case OPER_0: - object = get_object_at_point (self, &point); - if (object && LD_IS_DIAGRAM_SYMBOL (object)) - rotate_symbol (self, LD_DIAGRAM_SYMBOL (object)); + object_at_cursor = get_object_at_point (self, &point); + if (object_at_cursor && LD_IS_DIAGRAM_SYMBOL (object_at_cursor)) + rotate_symbol (self, LD_DIAGRAM_SYMBOL (object_at_cursor)); return FALSE; } } @@ -2211,28 +2216,33 @@ on_button_press (GtkWidget *widget, GdkEventButton *event, gpointer user_data) break; case OPER_0: self->priv->drag_start_pos = point; + object_at_cursor = get_object_at_point (self, &point); - if (self->priv->terminal_hovered) + if (self->priv->terminal_hovered + && (!ld_diagram_get_selection (self->priv->diagram) + || !object_at_cursor + || !is_object_selected (self, object_at_cursor))) { - self->priv->drag_operation = OPER_CONNECT; - break; - } + if (ld_diagram_get_selection (self->priv->diagram)) + ld_diagram_unselect_all (self->priv->diagram); - object = get_object_at_point (self, &point); - if (!object) - { - ld_diagram_unselect_all (self->priv->diagram); - self->priv->drag_operation = OPER_SELECT; + self->priv->drag_operation = OPER_CONNECT; } - else if (!is_object_selected (self, object)) + else if (object_at_cursor) { - if (event->state != GDK_SHIFT_MASK) - ld_diagram_unselect_all (self->priv->diagram); - ld_diagram_select (self->priv->diagram, object); + if (!is_object_selected (self, object_at_cursor)) + { + if (!(event->state & GDK_SHIFT_MASK)) + ld_diagram_unselect_all (self->priv->diagram); + ld_diagram_select (self->priv->diagram, object_at_cursor); + } self->priv->drag_operation = OPER_MOVE_SELECTION; } else - self->priv->drag_operation = OPER_MOVE_SELECTION; + { + ld_diagram_unselect_all (self->priv->diagram); + self->priv->drag_operation = OPER_SELECT; + } break; } return FALSE; @@ -2243,7 +2253,7 @@ on_button_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { LdPoint point; LdDiagramView *self; - LdDiagramObject *object; + LdDiagramObject *object_at_cursor; if (event->button != 1) return FALSE; @@ -2264,12 +2274,12 @@ on_button_release (GtkWidget *widget, GdkEventButton *event, gpointer user_data) LD_DIAGRAM_VIEW_GET_CLASS (self)->cancel_operation_signal, 0); break; case OPER_0: - object = get_object_at_point (self, &point); - if (object && is_object_selected (self, object)) + object_at_cursor = get_object_at_point (self, &point); + if (object_at_cursor && is_object_selected (self, object_at_cursor)) { if (!(event->state & GDK_SHIFT_MASK)) ld_diagram_unselect_all (self->priv->diagram); - ld_diagram_select (self->priv->diagram, object); + ld_diagram_select (self->priv->diagram, object_at_cursor); } break; } -- cgit v1.2.3