]> git.mdlowis.com Git - proto/labwc.git/commitdiff
action: Select resize edges for Resize triggered by keybind
authorJohn Lindgren <john@jlindgren.net>
Thu, 15 Sep 2022 12:31:37 +0000 (08:31 -0400)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Thu, 15 Sep 2022 23:42:04 +0000 (01:42 +0200)
include/labwc.h
src/action.c
src/cursor.c

index e422d4b81ed864cafac08b5587a39e5f8cae2774..40b7e351f47dbdf3c10aa3cc5a47189b234326ca 100644 (file)
@@ -545,6 +545,9 @@ struct cursor_context get_cursor_context(struct server *server);
  */
 void cursor_set(struct seat *seat, const char *cursor_name);
 
+uint32_t cursor_get_resize_edges(struct wlr_cursor *cursor,
+       struct cursor_context *ctx);
+
 /**
  * cursor_update_focus - update cursor focus, may update the cursor icon
  * @server - server
index 9eb81cf7c47be280226d78a1f9ad748e2994825a..445644477f589913f23f92750b1d6550cfebcd99 100644 (file)
@@ -167,7 +167,7 @@ show_menu(struct server *server, struct view *view, const char *menu_name)
 
 static struct view *
 view_for_action(struct view *activator, struct server *server,
-       struct action *action)
+       struct action *action, uint32_t *resize_edges)
 {
        /* View is explicitly specified for mousebinds */
        if (activator) {
@@ -178,8 +178,15 @@ view_for_action(struct view *activator, struct server *server,
        switch (action->type) {
        case ACTION_TYPE_FOCUS:
        case ACTION_TYPE_MOVE:
-       case ACTION_TYPE_RESIZE:
-               return get_cursor_context(server).view;
+       case ACTION_TYPE_RESIZE: {
+               struct cursor_context ctx = get_cursor_context(server);
+               if (action->type == ACTION_TYPE_RESIZE) {
+                       /* Select resize edges for the keybind case */
+                       *resize_edges = cursor_get_resize_edges(
+                               server->seat.cursor, &ctx);
+               }
+               return ctx.view;
+       }
        default:
                return desktop_focused_view(server);
        }
@@ -208,7 +215,8 @@ actions_run(struct view *activator, struct server *server,
                 * Refetch view because it may have been changed due to the
                 * previous action
                 */
-               view = view_for_action(activator, server, action);
+               view = view_for_action(activator, server, action,
+                       &resize_edges);
 
                switch (action->type) {
                case ACTION_TYPE_CLOSE:
index ef128300e231890b240ced88279f132170e6194d..60997a200261445ad21dd341ec0a8f2080a9a94e 100644 (file)
@@ -378,8 +378,8 @@ cursor_update_common(struct server *server, struct cursor_context *ctx,
        }
 }
 
-static uint32_t
-determine_resize_edges(struct wlr_cursor *cursor, struct cursor_context *ctx)
+uint32_t
+cursor_get_resize_edges(struct wlr_cursor *cursor, struct cursor_context *ctx)
 {
        uint32_t resize_edges = ssd_resize_edges(ctx->type);
        if (ctx->view && !resize_edges) {
@@ -783,7 +783,7 @@ cursor_button_press(struct seat *seat, struct wlr_pointer_button_event *event)
        struct cursor_context ctx = get_cursor_context(server);
 
        /* Determine closest resize edges in case action is Resize */
-       uint32_t resize_edges = determine_resize_edges(seat->cursor, &ctx);
+       uint32_t resize_edges = cursor_get_resize_edges(seat->cursor, &ctx);
 
        if (ctx.view || ctx.surface) {
                /* Store resize edges for later action processing */