aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2011-10-13 23:45:18 +0200
committerThomas White <taw@bitwiz.org.uk>2011-10-13 23:45:18 +0200
commitf663680514da83368464df0020d9c2e04ef770c8 (patch)
treebd93db3eb900665e6a07c1edb1e4186798f62c18
parent2e0f09d78f28c576d9a10dfcd1eeaae81e3baa07 (diff)
Check object type before asking the tool to do things
-rw-r--r--src/mainwindow.c18
-rw-r--r--src/presentation.h2
-rw-r--r--src/tool_image.c8
-rw-r--r--src/tool_select.c7
-rw-r--r--src/tool_text.c8
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;
}