mouse: Replace press_state with bool pressed

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.

Series-changes: 2
- Add new patch to replace press_state with bool pressed

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-10-07 06:02:15 -06:00
parent 90964bf740
commit 03c65c2b94
7 changed files with 16 additions and 22 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 */