Commit 6bedda13c02a6692a93ad6486e3a6dbc9ad58fc0 Parent: 7dc71ce1bf1c6432c80378dc2dd567a35f4d4a8f Author: mcol <mcol@posteo.net> Date: 2020-12-05 18:02:36 +0000 Committer: mcol <mcol@posteo.net> Committed: 2020-12-05 18:02:36 +0000 Replace save_pan and reset_pan with only reset_zoom save_pan was made redundant by the marking system, but resetting the zoom is an important functionality so that was added as a standalone action.
src/config.c Modified
@@ -50,10 +50,8 @@ kb->action = &prev_desk; else if (strcasecmp(name, "pan_desk") == 0) kb->action = &pan_desk; - else if (strcasecmp(name, "reset_pan") == 0) - kb->action = &reset_pan; - else if (strcasecmp(name, "save_pan") == 0) - kb->action = &save_pan; + else if (strcasecmp(name, "reset_zoom") == 0) + kb->action = &reset_zoom; else if (strcasecmp(name, "zoom_in") == 0) { kb->action = &zoom_desk; kb->data = calloc(1, sizeof(int));
src/action.h Modified
@@ -10,8 +10,7 @@ void next_desk(struct server *server, void *data); void prev_desk(struct server *server, void *data); void pan_desk(struct server *server, void *data); -void reset_pan(struct server *server, void *data); -void save_pan(struct server *server, void *data); +void reset_zoom(struct server *server, void *data); void zoom_desk(struct server *server, void *data); void zoom_desk_mouse(struct server *server, void *data); void set_mark(struct server *server, void *data);
src/action.c Modified
@@ -1,6 +1,7 @@ #include <sys/vt.h> #include <wlr/backend.h> #include <wlr/backend/session.h> +#include <wlr/types/wlr_output_layout.h> #include "action.h" #include "desk.h" @@ -74,23 +75,23 @@ } -void reset_pan(struct server *server, void *data) { +void reset_zoom(struct server *server, void *data) { struct desk *desk = server->current_desk; + double f = 1 / desk->zoom; + struct wlr_box *extents = wlr_output_layout_get_box(server->output_layout, NULL); + double fx = extents->width * (f - 1) / 2; + double fy = extents->height * (f - 1) / 2; struct view *view; wl_list_for_each(view, &desk->views, link) { - view->x -= desk->panned_x; - view->y -= desk->panned_y; + view->x -= fx; + view->y -= fy; } - desk->panned_x = desk->panned_y = 0; + desk->panned_x -= fx; + desk->panned_y -= fy; desk->zoom = 1; } -void save_pan(struct server *server, void *data) { - server->current_desk->panned_x = server->current_desk->panned_y = 0; -} - - void zoom_desk(struct server *server, void *data) { /* dir > 0 ? zoom in : zoom out */ struct desk *desk = server->current_desk;
deskwm.conf Modified
@@ -38,10 +38,9 @@ bind Ctrl q close_current_window bind Tab next_desk bind ISO_Left_Tab prev_desk -bind r save_pan -bind Shift r reset_pan bind i zoom_in bind o zoom_out +bind r reset_zoom # The line after 'exec' is executed by /bin/sh bind Return exec wterm