Basic support for Move action

- Add Move as a default mouse binding for a Titlebar Press action
- Remove the hard-coded handling in cursor_button()

Example config snippet:

    <mouse>
      <context name="Titlebar">
        <mousebind button="Left" action="Press">
          <action name="Focus"/>
          <action name="Raise"/>
          <action name="Move"/>
        </mousebind>
      </context>
    </mouse>
This commit is contained in:
John Lindgren 2021-11-26 13:03:15 -05:00 committed by Johan Malm
parent 687993370f
commit c01d1f124c
5 changed files with 20 additions and 8 deletions

View file

@ -430,6 +430,8 @@ struct view *desktop_surface_and_view_at(struct server *server, double lx,
double ly, struct wlr_surface **surface, double *sx, double *sy,
int *view_area);
struct view *desktop_view_at_cursor(struct server *server);
void cursor_init(struct seat *seat);
void keyboard_init(struct seat *seat);

View file

@ -72,6 +72,11 @@ action(struct server *server, const char *action, const char *command)
if (view) {
view_minimize(view, true);
}
} else if (!strcasecmp(action, "Move")) {
struct view *view = desktop_view_at_cursor(server);
if (view) {
interactive_begin(view, LAB_INPUT_STATE_MOVE, 0);
}
} else {
wlr_log(WLR_ERROR, "action (%s) not supported", action);
}

View file

@ -465,6 +465,7 @@ load_default_key_bindings(void)
static struct {
const char *context, *button, *event, *action, *command;
} mouse_combos[] = {
{ "TitleBar", "Left", "Press", "Move", NULL },
{ "TitleBar", "Left", "DoubleClick", "ToggleMaximize", NULL },
{ "Close", "Left", "Click", "Close", NULL },
{ "Iconify", "Left", "Click", "Iconify", NULL},

View file

@ -574,15 +574,8 @@ cursor_button(struct wl_listener *listener, void *data)
mousebindings:
if (event->state == WLR_BUTTON_RELEASED) {
handle_release_mousebinding(server, event->button, view_area);
return;
} else if (event->state == WLR_BUTTON_PRESSED) {
if (handle_press_mousebinding(server, event->button, view_area)) {
return;
}
}
if (view_area == LAB_SSD_PART_TITLEBAR) {
interactive_begin(view, LAB_INPUT_STATE_MOVE, 0);
handle_press_mousebinding(server, event->button, view_area);
}
}

View file

@ -342,3 +342,14 @@ desktop_surface_and_view_at(struct server *server, double lx, double ly,
}
return NULL;
}
struct view *
desktop_view_at_cursor(struct server *server) {
double sx, sy;
struct wlr_surface *surface;
int view_area = LAB_SSD_NONE;
return desktop_surface_and_view_at(server,
server->seat.cursor->x, server->seat.cursor->y,
&surface, &sx, &sy, &view_area);
}