[Concept,v2,06/20] mouse: Replace press_state with bool pressed

Message ID 20251007170549.541981-7-sjg@u-boot.org
State New
Headers
Series expo: Complete mouse operation in the EFI app |

Commit Message

Simon Glass Oct. 7, 2025, 5:05 p.m. UTC
  From: Simon Glass <sjg@chromium.org>

Change the mouse_button structure to use a bool pressed field instead
of an unsigned char press_state. This simplifies the API by using a
natural boolean type for a binary state.

Remove the BUTTON_PRESSED/BUTTON_RELEASED defines as they're no longer
needed.

Update all mouse drivers, tests, and the mouse command to use the new
field name and type.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Add new patch to replace press_state with bool pressed

 arch/sandbox/cpu/sdl.c       |  4 +---
 cmd/mouse.c                  |  2 +-
 drivers/input/efi_mouse.c    |  2 +-
 drivers/input/mouse-uclass.c |  5 ++---
 drivers/input/usb_mouse.c    |  2 +-
 include/mouse.h              |  7 ++-----
 test/dm/mouse.c              | 16 ++++++++--------
 7 files changed, 16 insertions(+), 22 deletions(-)
  

Patch

diff --git a/arch/sandbox/cpu/sdl.c b/arch/sandbox/cpu/sdl.c
index c3745fa660e..dd2589c64e2 100644
--- a/arch/sandbox/cpu/sdl.c
+++ b/arch/sandbox/cpu/sdl.c
@@ -110,9 +110,7 @@  static void sandbox_sdl_poll_events(void)
 				m->button.button = BUTTON_MIDDLE;
 			else if (event.button.button == SDL_BUTTON_RIGHT)
 				m->button.button = BUTTON_RIGHT;
-			m->button.press_state = event.type ==
-				SDL_MOUSEBUTTONDOWN ?
-				BUTTON_PRESSED : BUTTON_RELEASED;
+			m->button.pressed = event.type == SDL_MOUSEBUTTONDOWN;
 			m->button.x = event.button.x;
 			m->button.y = event.motion.y;
 			break;
diff --git a/cmd/mouse.c b/cmd/mouse.c
index 60210b9f868..ebf496307b9 100644
--- a/cmd/mouse.c
+++ b/cmd/mouse.c
@@ -35,7 +35,7 @@  static int do_mouse_dump(struct cmd_tbl *cmdtp, int flag, int argc,
 				struct mouse_button *but = &evt.button;
 
 				printf("button: button==%d, press=%d, clicks=%d, X=%d, Y=%d\n",
-				       but->button, but->press_state,
+				       but->button, but->pressed,
 				       but->clicks, but->x, but->y);
 				break;
 			}
diff --git a/drivers/input/efi_mouse.c b/drivers/input/efi_mouse.c
index 84347951f62..077e2148da9 100644
--- a/drivers/input/efi_mouse.c
+++ b/drivers/input/efi_mouse.c
@@ -78,7 +78,7 @@  static int efi_mouse_get_event(struct udevice *dev, struct mouse_event *event)
 			u8 mask = 1 << i;
 			if (diff & mask) {
 				but->button = i;
-				but->press_state = (new_buttons & mask) ? 1 : 0;
+				but->pressed = (new_buttons & mask) ? true : false;
 				but->clicks = 1;
 				but->x = priv->x;
 				but->y = priv->y;
diff --git a/drivers/input/mouse-uclass.c b/drivers/input/mouse-uclass.c
index 43b6514f926..6bfce915e2b 100644
--- a/drivers/input/mouse-uclass.c
+++ b/drivers/input/mouse-uclass.c
@@ -51,18 +51,17 @@  int mouse_get_click(struct udevice *dev, struct vid_pos *pos)
 	/* Only process button events for left button */
 	if (event.type == MOUSE_EV_BUTTON &&
 	    event.button.button == BUTTON_LEFT) {
-		bool pressed = event.button.press_state == BUTTON_PRESSED;
 		bool pending = false;
 
 		/* Detect press->release transition (click) */
-		if (uc_priv->left_pressed && !pressed) {
+		if (uc_priv->left_pressed && !event.button.pressed) {
 			pending = true;
 			uc_priv->click_pos.x = event.button.x;
 			uc_priv->click_pos.y = event.button.y;
 		}
 
 		/* Update button state */
-		uc_priv->left_pressed = pressed;
+		uc_priv->left_pressed = event.button.pressed;
 
 		/* If we just detected a click, return it */
 		if (pending) {
diff --git a/drivers/input/usb_mouse.c b/drivers/input/usb_mouse.c
index 74f093a4b5a..456d84d5e39 100644
--- a/drivers/input/usb_mouse.c
+++ b/drivers/input/usb_mouse.c
@@ -142,7 +142,7 @@  static int usb_mouse_get_event(struct udevice *dev, struct mouse_event *event)
 
 			if (diff && mask) {
 				but->button = i;
-				but->press_state = priv->buttons & mask;
+				but->pressed = priv->buttons & mask;
 				but->clicks = 1;
 				but->x = priv->x;
 				but->y = priv->y;
diff --git a/include/mouse.h b/include/mouse.h
index 96b75ae1fa6..62cabf24769 100644
--- a/include/mouse.h
+++ b/include/mouse.h
@@ -27,9 +27,6 @@  enum mouse_state_t {
 	BUTTON_SCROLL_MINUS	= 1 << 4,
 };
 
-#define BUTTON_RELEASED		0
-#define BUTTON_PRESSED		1
-
 /**
  * struct mouse_uc_priv - pre-device private data for mouse uclass
  *
@@ -74,14 +71,14 @@  struct mouse_event {
 
 		/**
 		 * @button: Button number that was pressed/released (BUTTON_...)
-		 * @state: BUTTON_PRESSED / BUTTON_RELEASED
+		 * @pressed: True if button was pressed, false if released
 		 * @clicks: number of clicks (normally 1; 2 = double-click)
 		 * @x: X position of mouse
 		 * @y: Y position of mouse
 		 */
 		struct mouse_button {
 			unsigned char button;
-			unsigned char press_state;
+			bool pressed;
 			unsigned char clicks;
 			unsigned short x;
 			unsigned short y;
diff --git a/test/dm/mouse.c b/test/dm/mouse.c
index c22cd026cb2..893644005cc 100644
--- a/test/dm/mouse.c
+++ b/test/dm/mouse.c
@@ -75,7 +75,7 @@  static int dm_test_mouse_button(struct unit_test_state *uts)
 	/* inject a button press event */
 	inject.type = MOUSE_EV_BUTTON;
 	inject.button.button = BUTTON_LEFT;
-	inject.button.press_state = BUTTON_PRESSED;
+	inject.button.pressed = true;
 	inject.button.clicks = 1;
 	inject.button.x = 150;
 	inject.button.y = 250;
@@ -86,7 +86,7 @@  static int dm_test_mouse_button(struct unit_test_state *uts)
 	ut_assertok(mouse_get_event(dev, &event));
 	ut_asserteq(MOUSE_EV_BUTTON, event.type);
 	ut_asserteq(BUTTON_LEFT, event.button.button);
-	ut_asserteq(BUTTON_PRESSED, event.button.press_state);
+	ut_asserteq(true, event.button.pressed);
 	ut_asserteq(1, event.button.clicks);
 	ut_asserteq(150, event.button.x);
 	ut_asserteq(250, event.button.y);
@@ -112,7 +112,7 @@  static int dm_test_mouse_click(struct unit_test_state *uts)
 	/* inject a left button press */
 	inject.type = MOUSE_EV_BUTTON;
 	inject.button.button = BUTTON_LEFT;
-	inject.button.press_state = BUTTON_PRESSED;
+	inject.button.pressed = true;
 	inject.button.clicks = 1;
 	inject.button.x = 300;
 	inject.button.y = 400;
@@ -128,7 +128,7 @@  static int dm_test_mouse_click(struct unit_test_state *uts)
 	/* inject a left button release */
 	inject.type = MOUSE_EV_BUTTON;
 	inject.button.button = BUTTON_LEFT;
-	inject.button.press_state = BUTTON_RELEASED;
+	inject.button.pressed = false;
 	inject.button.clicks = 1;
 	inject.button.x = 300;
 	inject.button.y = 400;
@@ -161,7 +161,7 @@  static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts)
 	/* inject press and release to create a click */
 	inject.type = MOUSE_EV_BUTTON;
 	inject.button.button = BUTTON_LEFT;
-	inject.button.press_state = BUTTON_PRESSED;
+	inject.button.pressed = true;
 	inject.button.clicks = 1;
 	inject.button.x = 500;
 	inject.button.y = 600;
@@ -170,7 +170,7 @@  static int dm_test_mouse_click_no_coordinates(struct unit_test_state *uts)
 	/* process the press event */
 	ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos));
 
-	inject.button.press_state = BUTTON_RELEASED;
+	inject.button.pressed = false;
 	sandbox_mouse_inject(dev, &inject);
 
 	/* now test that click is detected (coordinates are ignored) */
@@ -197,7 +197,7 @@  static int dm_test_mouse_right_button(struct unit_test_state *uts)
 	 */
 	inject.type = MOUSE_EV_BUTTON;
 	inject.button.button = BUTTON_RIGHT;
-	inject.button.press_state = BUTTON_PRESSED;
+	inject.button.pressed = true;
 	inject.button.clicks = 1;
 	inject.button.x = 100;
 	inject.button.y = 200;
@@ -205,7 +205,7 @@  static int dm_test_mouse_right_button(struct unit_test_state *uts)
 
 	ut_asserteq(-EAGAIN, mouse_get_click(dev, &pos));
 
-	inject.button.press_state = BUTTON_RELEASED;
+	inject.button.pressed = false;
 	sandbox_mouse_inject(dev, &inject);
 
 	/* still no click detected since it was right button */