From f663680514da83368464df0020d9c2e04ef770c8 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 13 Oct 2011 23:45:18 +0200 Subject: Check object type before asking the tool to do things --- src/mainwindow.c | 18 +++++++++++++----- src/presentation.h | 2 ++ src/tool_image.c | 8 ++++++++ src/tool_select.c | 7 +++++++ src/tool_text.c | 8 ++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index d02268f..7301fe3 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -382,7 +382,11 @@ static gint set_tool_sig(GtkWidget *widget, GtkRadioAction *action, } if ( p->editing_object != NULL ) { - p->cur_tool->select(p->editing_object, p->cur_tool); + if ( p->cur_tool->valid_object(p->editing_object) ) { + p->cur_tool->select(p->editing_object, p->cur_tool); + } else { + p->editing_object = NULL; + } } gdk_window_invalidate_rect(p->drawingarea->window, NULL, FALSE); @@ -645,12 +649,16 @@ static gboolean button_press_sig(GtkWidget *da, GdkEventButton *event, p->editing_object = NULL; } - p->editing_object = clicked; p->drag_status = DRAG_STATUS_NONE; p->drag_reason = DRAG_REASON_NONE; - p->cur_tool->click_select(p, p->cur_tool, x, y, event, - &p->drag_status, - &p->drag_reason); + + if ( p->cur_tool->valid_object(clicked) ) { + p->editing_object = clicked; + p->cur_tool->click_select(p, p->cur_tool, x, y, event, + &p->drag_status, + &p->drag_reason); + } + } gtk_widget_grab_focus(GTK_WIDGET(da)); diff --git a/src/presentation.h b/src/presentation.h index a7db25c..ed962a8 100644 --- a/src/presentation.h +++ b/src/presentation.h @@ -86,6 +86,8 @@ struct toolinfo void (*key_pressed)(struct object *o, guint keyval, struct toolinfo *tip); void (*im_commit)(struct object *o, gchar *str, struct toolinfo *tip); + + int (*valid_object)(struct object *o); }; diff --git a/src/tool_image.c b/src/tool_image.c index af4ada5..2341dff 100644 --- a/src/tool_image.c +++ b/src/tool_image.c @@ -286,6 +286,13 @@ static void im_commit(struct object *o, gchar *str, struct toolinfo *tip) } +static int valid_object(struct object *o) +{ + if ( o->type == IMAGE ) return 1; + return 0; +} + + struct toolinfo *initialise_image_tool() { struct image_toolinfo *ti; @@ -302,6 +309,7 @@ struct toolinfo *initialise_image_tool() ti->base.draw_editing_overlay = draw_overlay; ti->base.key_pressed = key_pressed; ti->base.im_commit = im_commit; + ti->base.valid_object = valid_object; return (struct toolinfo *)ti; } diff --git a/src/tool_select.c b/src/tool_select.c index a3a8c39..2327d0d 100644 --- a/src/tool_select.c +++ b/src/tool_select.c @@ -130,6 +130,12 @@ static void im_commit(struct object *o, gchar *str, struct toolinfo *tip) } +static int valid_object(struct object *o) +{ + return 1; +} + + struct toolinfo *initialise_select_tool() { struct select_toolinfo *ti; @@ -146,6 +152,7 @@ struct toolinfo *initialise_select_tool() ti->base.draw_editing_overlay = draw_overlay; ti->base.key_pressed = key_pressed; ti->base.im_commit = im_commit; + ti->base.valid_object = valid_object; return (struct toolinfo *)ti; } diff --git a/src/tool_text.c b/src/tool_text.c index df3a669..44a477b 100644 --- a/src/tool_text.c +++ b/src/tool_text.c @@ -642,6 +642,13 @@ static void im_commit(struct object *o, gchar *str, struct toolinfo *tip) } +static int valid_object(struct object *o) +{ + if ( o->type == TEXT ) return 1; + return 0; +} + + struct toolinfo *initialise_text_tool(GtkWidget *w) { struct text_toolinfo *ti; @@ -660,6 +667,7 @@ struct toolinfo *initialise_text_tool(GtkWidget *w) ti->base.draw_editing_overlay = draw_overlay; ti->base.key_pressed = key_pressed; ti->base.im_commit = im_commit; + ti->base.valid_object = valid_object; return (struct toolinfo *)ti; } -- cgit v1.2.3