[gimp] app: add intrastructure to send key_release events to tools
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add intrastructure to send key_release events to tools
- Date: Thu, 18 Feb 2010 19:52:43 +0000 (UTC)
commit c0aa4498d23e7737ce5e383c84615dd5ffcbb108
Author: Michael Natterer <mitch gimp org>
Date: Thu Feb 18 20:50:11 2010 +0100
app: add intrastructure to send key_release events to tools
The code is 100% identical to the key_press handling and simply
dispatches key_release events too tools which selected them via
GimpToolControl.
app/display/gimpdisplayshell-callbacks.c | 12 ++++++++++++
app/tools/gimptool.c | 24 ++++++++++++++++++++++++
app/tools/gimptool.h | 6 ++++++
app/tools/tool_manager.c | 21 +++++++++++++++++++++
app/tools/tool_manager.h | 3 +++
5 files changed, 66 insertions(+), 0 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c
index a3910d5..476cae5 100644
--- a/app/display/gimpdisplayshell-callbacks.c
+++ b/app/display/gimpdisplayshell-callbacks.c
@@ -1620,6 +1620,18 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
{
tool_manager_focus_display_active (gimp, display);
+ if (gimp_tool_control_get_wants_all_key_events (active_tool->control))
+ {
+ if (tool_manager_key_release_active (gimp, kevent, display))
+ {
+ /* FIXME: need to do some of the stuff below, like
+ * calling oper_update()
+ */
+
+ return TRUE;
+ }
+ }
+
switch (kevent->keyval)
{
case GDK_space:
diff --git a/app/tools/gimptool.c b/app/tools/gimptool.c
index c199526..c9d59b8 100644
--- a/app/tools/gimptool.c
+++ b/app/tools/gimptool.c
@@ -88,6 +88,9 @@ static void gimp_tool_real_motion (GimpTool *tool,
static gboolean gimp_tool_real_key_press (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
+static gboolean gimp_tool_real_key_release (GimpTool *tool,
+ GdkEventKey *kevent,
+ GimpDisplay *display);
static void gimp_tool_real_modifier_key (GimpTool *tool,
GdkModifierType key,
gboolean press,
@@ -140,6 +143,7 @@ gimp_tool_class_init (GimpToolClass *klass)
klass->button_release = gimp_tool_real_button_release;
klass->motion = gimp_tool_real_motion;
klass->key_press = gimp_tool_real_key_press;
+ klass->key_release = gimp_tool_real_key_release;
klass->modifier_key = gimp_tool_real_modifier_key;
klass->active_modifier_key = gimp_tool_real_active_modifier_key;
klass->oper_update = gimp_tool_real_oper_update;
@@ -335,6 +339,14 @@ gimp_tool_real_key_press (GimpTool *tool,
return FALSE;
}
+static gboolean
+gimp_tool_real_key_release (GimpTool *tool,
+ GdkEventKey *kevent,
+ GimpDisplay *display)
+{
+ return FALSE;
+}
+
static void
gimp_tool_real_modifier_key (GimpTool *tool,
GdkModifierType key,
@@ -692,6 +704,18 @@ gimp_tool_key_press (GimpTool *tool,
return GIMP_TOOL_GET_CLASS (tool)->key_press (tool, kevent, display);
}
+gboolean
+gimp_tool_key_release (GimpTool *tool,
+ GdkEventKey *kevent,
+ GimpDisplay *display)
+{
+ g_return_val_if_fail (GIMP_IS_TOOL (tool), FALSE);
+ g_return_val_if_fail (GIMP_IS_DISPLAY (display), FALSE);
+ g_return_val_if_fail (display == tool->focus_display, FALSE);
+
+ return GIMP_TOOL_GET_CLASS (tool)->key_release (tool, kevent, display);
+}
+
static void
gimp_tool_modifier_key (GimpTool *tool,
GdkModifierType key,
diff --git a/app/tools/gimptool.h b/app/tools/gimptool.h
index 9bdeaeb..4b4c594 100644
--- a/app/tools/gimptool.h
+++ b/app/tools/gimptool.h
@@ -108,6 +108,9 @@ struct _GimpToolClass
gboolean (* key_press) (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
+ gboolean (* key_release) (GimpTool *tool,
+ GdkEventKey *kevent,
+ GimpDisplay *display);
void (* modifier_key) (GimpTool *tool,
GdkModifierType key,
gboolean press,
@@ -172,6 +175,9 @@ void gimp_tool_motion (GimpTool *tool,
gboolean gimp_tool_key_press (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
+gboolean gimp_tool_key_release (GimpTool *tool,
+ GdkEventKey *kevent,
+ GimpDisplay *display);
void gimp_tool_set_focus_display (GimpTool *tool,
GimpDisplay *display);
diff --git a/app/tools/tool_manager.c b/app/tools/tool_manager.c
index ed2d014..5cd034e 100644
--- a/app/tools/tool_manager.c
+++ b/app/tools/tool_manager.c
@@ -358,6 +358,27 @@ tool_manager_key_press_active (Gimp *gimp,
return FALSE;
}
+gboolean
+tool_manager_key_release_active (Gimp *gimp,
+ GdkEventKey *kevent,
+ GimpDisplay *display)
+{
+ GimpToolManager *tool_manager;
+
+ g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
+
+ tool_manager = tool_manager_get (gimp);
+
+ if (tool_manager->active_tool)
+ {
+ return gimp_tool_key_release (tool_manager->active_tool,
+ kevent,
+ display);
+ }
+
+ return FALSE;
+}
+
void
tool_manager_focus_display_active (Gimp *gimp,
GimpDisplay *display)
diff --git a/app/tools/tool_manager.h b/app/tools/tool_manager.h
index 7597a75..54fad22 100644
--- a/app/tools/tool_manager.h
+++ b/app/tools/tool_manager.h
@@ -56,6 +56,9 @@ void tool_manager_motion_active (Gimp *gimp,
gboolean tool_manager_key_press_active (Gimp *gimp,
GdkEventKey *kevent,
GimpDisplay *display);
+gboolean tool_manager_key_release_active (Gimp *gimp,
+ GdkEventKey *kevent,
+ GimpDisplay *display);
void tool_manager_focus_display_active (Gimp *gimp,
GimpDisplay *display);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]