[gimp] Bug 724692 - Canvas rotation stuck with specific order of actions.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 724692 - Canvas rotation stuck with specific order of actions.
- Date: Fri, 16 Mar 2018 15:20:23 +0000 (UTC)
commit b279c2d2177081142bf8ce36850beafe0be1beed
Author: Jehan <jehan girinstud io>
Date: Fri Mar 16 02:31:43 2018 +0100
Bug 724692 - Canvas rotation stuck with specific order of actions.
The bug was affecting actually both canvas rotation and panning when
done with space key. If the first mouse button was also clicked, then
released after the space key, we ended up in some stuck action. It could
only be unstuck by hitting/releasing space again.
I am actually unsure that this was not originally done on purpose,
especially since the code has these 2 status variables space_pressed and
space_release_pending, but really apart from looking at this code, the
behavior just looks very buggy and impracticable.
The new behavior is to just stop the canvas panning/rotation as soon as
space is released (which is also how it is documented in our manual, and
how everyone seems to use the feature). I only kept the variable
space_release_pending, which I use as was used space_pressed before.
app/display/gimpdisplayshell-tool-events.c | 118 ++++++++++++----------------
app/display/gimpdisplayshell.h | 1 -
2 files changed, 50 insertions(+), 69 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c
index e4d04a2..c72690f 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -161,7 +161,7 @@ gimp_display_shell_events (GtkWidget *widget,
if (gimp->busy)
return TRUE;
- /* do not process any key events while BUTTON1 is down. We do this
+ /* do not process most key events while BUTTON1 is down. We do this
* so tools keep the modifier state they were in when BUTTON1 was
* pressed and to prevent accelerators from being invoked.
*/
@@ -174,30 +174,13 @@ gimp_display_shell_events (GtkWidget *widget,
kevent->keyval == GDK_KEY_Alt_L ||
kevent->keyval == GDK_KEY_Alt_R ||
kevent->keyval == GDK_KEY_Meta_L ||
- kevent->keyval == GDK_KEY_Meta_R)
+ kevent->keyval == GDK_KEY_Meta_R ||
+ kevent->keyval == GDK_KEY_space ||
+ kevent->keyval == GDK_KEY_KP_Space)
{
break;
}
- if (event->type == GDK_KEY_PRESS)
- {
- if ((kevent->keyval == GDK_KEY_space ||
- kevent->keyval == GDK_KEY_KP_Space) && shell->space_release_pending)
- {
- shell->space_pressed = TRUE;
- shell->space_release_pending = FALSE;
- }
- }
- else
- {
- if ((kevent->keyval == GDK_KEY_space ||
- kevent->keyval == GDK_KEY_KP_Space) && shell->space_pressed)
- {
- shell->space_pressed = FALSE;
- shell->space_release_pending = TRUE;
- }
- }
-
return TRUE;
}
@@ -222,7 +205,7 @@ gimp_display_shell_events (GtkWidget *widget,
break;
default:
- if (shell->space_pressed || shell->scrolling)
+ if (shell->space_release_pending || shell->scrolling)
return TRUE;
break;
}
@@ -762,7 +745,7 @@ gimp_display_shell_canvas_tool_events_internal (GtkWidget *canvas,
if (! gimp_display_shell_pointer_grab (shell, NULL, 0))
return TRUE;
- if (! shell->space_pressed && ! shell->space_release_pending)
+ if (! shell->space_release_pending)
if (! gimp_display_shell_keyboard_grab (shell, event))
{
gimp_display_shell_pointer_ungrab (shell, NULL);
@@ -875,7 +858,7 @@ gimp_display_shell_canvas_tool_events_internal (GtkWidget *canvas,
if (! shell->pointer_grabbed || shell->scrolling)
return TRUE;
- if (! shell->space_pressed && ! shell->space_release_pending)
+ if (! shell->space_release_pending)
gimp_display_shell_keyboard_ungrab (shell, event);
if (active_tool &&
@@ -904,9 +887,6 @@ gimp_display_shell_canvas_tool_events_internal (GtkWidget *canvas,
&image_coords, 0);
gimp_display_shell_pointer_ungrab (shell, NULL);
-
- if (shell->space_release_pending)
- gimp_display_shell_space_released (shell, event, &image_coords);
}
else if (bevent->button == 2)
{
@@ -1197,27 +1177,27 @@ gimp_display_shell_canvas_tool_events_internal (GtkWidget *canvas,
if (state & GDK_BUTTON1_MASK)
{
- switch (kevent->keyval)
+ if (kevent->keyval == GDK_KEY_Alt_L ||
+ kevent->keyval == GDK_KEY_Alt_R ||
+ kevent->keyval == GDK_KEY_Shift_L ||
+ kevent->keyval == GDK_KEY_Shift_R ||
+ kevent->keyval == GDK_KEY_Control_L ||
+ kevent->keyval == GDK_KEY_Control_R ||
+ kevent->keyval == GDK_KEY_Meta_L ||
+ kevent->keyval == GDK_KEY_Meta_R)
{
- case GDK_KEY_Alt_L: case GDK_KEY_Alt_R:
- case GDK_KEY_Shift_L: case GDK_KEY_Shift_R:
- case GDK_KEY_Control_L: case GDK_KEY_Control_R:
- case GDK_KEY_Meta_L: case GDK_KEY_Meta_R:
- {
- GdkModifierType key;
+ GdkModifierType key;
- key = gimp_display_shell_key_to_state (kevent->keyval);
- state |= key;
+ key = gimp_display_shell_key_to_state (kevent->keyval);
+ state |= key;
- if (active_tool &&
- gimp_tool_control_is_active (active_tool->control) &&
- ! gimp_image_is_empty (image))
- {
- tool_manager_active_modifier_state_active (gimp, state,
- display);
- }
- }
- break;
+ if (active_tool &&
+ gimp_tool_control_is_active (active_tool->control) &&
+ ! gimp_image_is_empty (image))
+ {
+ tool_manager_active_modifier_state_active (gimp, state,
+ display);
+ }
}
}
else
@@ -1326,29 +1306,32 @@ gimp_display_shell_canvas_tool_events_internal (GtkWidget *canvas,
active_tool = tool_manager_get_active (gimp);
- if (state & GDK_BUTTON1_MASK)
+ if ((state & GDK_BUTTON1_MASK) &&
+ (! shell->space_release_pending ||
+ (kevent->keyval != GDK_KEY_space &&
+ kevent->keyval != GDK_KEY_KP_Space)))
{
- switch (kevent->keyval)
+ if (kevent->keyval == GDK_KEY_Alt_L ||
+ kevent->keyval == GDK_KEY_Alt_R ||
+ kevent->keyval == GDK_KEY_Shift_L ||
+ kevent->keyval == GDK_KEY_Shift_R ||
+ kevent->keyval == GDK_KEY_Control_L ||
+ kevent->keyval == GDK_KEY_Control_R ||
+ kevent->keyval == GDK_KEY_Meta_L ||
+ kevent->keyval == GDK_KEY_Meta_R)
{
- case GDK_KEY_Alt_L: case GDK_KEY_Alt_R:
- case GDK_KEY_Shift_L: case GDK_KEY_Shift_R:
- case GDK_KEY_Control_L: case GDK_KEY_Control_R:
- case GDK_KEY_Meta_L: case GDK_KEY_Meta_R:
- {
- GdkModifierType key;
+ GdkModifierType key;
- key = gimp_display_shell_key_to_state (kevent->keyval);
- state &= ~key;
+ key = gimp_display_shell_key_to_state (kevent->keyval);
+ state &= ~key;
- if (active_tool &&
- gimp_tool_control_is_active (active_tool->control) &&
- ! gimp_image_is_empty (image))
- {
- tool_manager_active_modifier_state_active (gimp, state,
- display);
- }
- }
- break;
+ if (active_tool &&
+ gimp_tool_control_is_active (active_tool->control) &&
+ ! gimp_image_is_empty (image))
+ {
+ tool_manager_active_modifier_state_active (gimp, state,
+ display);
+ }
}
}
else
@@ -1597,7 +1580,7 @@ gimp_display_shell_space_pressed (GimpDisplayShell *shell,
{
Gimp *gimp = gimp_display_get_gimp (shell->display);
- if (shell->space_pressed)
+ if (shell->space_release_pending)
return;
if (! gimp_display_shell_keyboard_grab (shell, event))
@@ -1651,7 +1634,7 @@ gimp_display_shell_space_pressed (GimpDisplayShell *shell,
break;
}
- shell->space_pressed = TRUE;
+ shell->space_release_pending = TRUE;
}
static void
@@ -1661,7 +1644,7 @@ gimp_display_shell_space_released (GimpDisplayShell *shell,
{
Gimp *gimp = gimp_display_get_gimp (shell->display);
- if (! shell->space_pressed && ! shell->space_release_pending)
+ if (! shell->space_release_pending)
return;
switch (shell->display->config->space_bar_action)
@@ -1701,7 +1684,6 @@ gimp_display_shell_space_released (GimpDisplayShell *shell,
gimp_display_shell_keyboard_ungrab (shell, event);
- shell->space_pressed = FALSE;
shell->space_release_pending = FALSE;
}
diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h
index 5f93f25..d5aabab 100644
--- a/app/display/gimpdisplayshell.h
+++ b/app/display/gimpdisplayshell.h
@@ -189,7 +189,6 @@ struct _GimpDisplayShell
gboolean inferior_ignore_mode;
- gboolean space_pressed;
gboolean space_release_pending;
const gchar *space_shaded_tool;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]