diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt index dc91465b8..f9e2a984a 100644 --- a/docs/CHANGES.txt +++ b/docs/CHANGES.txt @@ -7,7 +7,7 @@ Various contributors (see below, and AUTHORS.txt) https://tuxpaint.org/ -2023.March.19 (0.9.29) ### RC2 +2023.March.21 (0.9.29) ### RC2 * Improvements to "Stamp" tool: ----------------------------- * Stamps may now be rotated. @@ -199,6 +199,13 @@ https://tuxpaint.org/ Blocks, Chalk, and Drip (hence this being listed as a bug fix). h/t Pere for discovering this. + * On touch devices, the color pipette tool could easilly be + immediately dismissed due to the 'button up' event happening + right where the "Back" dismissal/cancel button appeared. + Now only pays attention to 'release' if the button was down. + Bill Kendrick + h/t Pere for reporting this. + * SDL1.2 supported "SDL_VIDEO_WINDOW_POS" environment variable, but SDL2 does not; so reimplemented it ourselves. (See ENVARS docs.) Bill Kendrick diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 589e26d87..674856d54 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (See COPYING.txt) - June 14, 2002 - March 19, 2023 + June 14, 2002 - March 21, 2023 */ #include "platform.h" @@ -24390,7 +24390,7 @@ static int do_color_sel(int temp_mode) int stepx, stepy; int number_of_steps = 20; int i, dx, dy; - int done, chose; + int done, chose, mouse_was_down; int back_left, back_top; int color_sel_x = 0, color_sel_y = 0; int want_animated_popups; @@ -24593,6 +24593,8 @@ static int do_color_sel(int temp_mode) r_color_sel.y + r_color_sel.h / 2); #endif + mouse_was_down = temp_mode; + do { while (SDL_PollEvent(&event)) @@ -24625,47 +24627,54 @@ static int do_color_sel(int temp_mode) done = 1; } } - else if (event.type == SDL_MOUSEBUTTONUP - && valid_click(event.button.button)) + else if (event.type == SDL_MOUSEBUTTONDOWN) { - if (event.button.x >= r_canvas.x && - event.button.x < r_canvas.x + r_canvas.w && - event.button.y >= r_canvas.y - && event.button.y < r_canvas.y + r_canvas.h) + mouse_was_down = 1; + } + else if (event.type == SDL_MOUSEBUTTONUP) + { + if (valid_click(event.button.button && mouse_was_down)) { - /* Picked a color in the canvas, and released! */ - - chose = 1; - done = 1; - - x = event.button.x - r_canvas.x; - y = event.button.y - r_canvas.y; - - color_sel_x = x; - color_sel_y = y; - } - else - { - if (!temp_mode) + if (event.button.x >= r_canvas.x && + event.button.x < r_canvas.x + r_canvas.w && + event.button.y >= r_canvas.y + && event.button.y < r_canvas.y + r_canvas.h) { - if (event.button.x >= back_left && - event.button.x < back_left + img_back->w && - event.button.y >= back_top - && event.button.y < back_top + img_back->h) + /* Picked a color in the canvas, and released! */ + + chose = 1; + done = 1; + + x = event.button.x - r_canvas.x; + y = event.button.y - r_canvas.y; + + color_sel_x = x; + color_sel_y = y; + } + else + { + if (!temp_mode) { - /* Full UI mode: Decided to go Back; abort */ - + if (event.button.x >= back_left && + event.button.x < back_left + img_back->w && + event.button.y >= back_top + && event.button.y < back_top + img_back->h) + { + /* Full UI mode: Decided to go Back; abort */ + + chose = 0; + done = 1; + } + } + else + { + /* Temp mode: Released outside of canvas; abort */ chose = 0; done = 1; } } - else - { - /* Temp mode: Released outside of canvas; abort */ - chose = 0; - done = 1; - } } + mouse_was_down = 0; } else if (event.type == SDL_MOUSEMOTION) {