feat: add option drag_tile_small
Some checks failed
Sync wiki / sync-wiki (push) Has been cancelled
Sync website / sync-website (push) Has been cancelled

This commit is contained in:
DreamMaoMao 2026-05-06 16:43:41 +08:00
parent aa5b907613
commit b9300aac82
5 changed files with 18 additions and 0 deletions

View file

@ -226,6 +226,7 @@ typedef struct {
int32_t snap_distance;
int32_t enable_floating_snap;
int32_t drag_tile_to_tile;
int32_t drag_tile_small;
uint32_t swipe_min_threshold;
float focused_opacity;
float unfocused_opacity;
@ -1445,6 +1446,8 @@ bool parse_option(Config *config, char *key, char *value) {
config->enable_floating_snap = atoi(value);
} else if (strcmp(key, "drag_tile_to_tile") == 0) {
config->drag_tile_to_tile = atoi(value);
} else if (strcmp(key, "drag_tile_small") == 0) {
config->drag_tile_small = atoi(value);
} else if (strcmp(key, "swipe_min_threshold") == 0) {
config->swipe_min_threshold = atoi(value);
} else if (strcmp(key, "focused_opacity") == 0) {
@ -3189,6 +3192,7 @@ void override_config(void) {
config.drag_floating_refresh_interval =
CLAMP_FLOAT(config.drag_floating_refresh_interval, 0.0f, 1000.0f);
config.drag_tile_to_tile = CLAMP_INT(config.drag_tile_to_tile, 0, 1);
config.drag_tile_small = CLAMP_INT(config.drag_tile_small, 0, 1);
config.allow_tearing = CLAMP_INT(config.allow_tearing, 0, 2);
config.allow_shortcuts_inhibit =
CLAMP_INT(config.allow_shortcuts_inhibit, 0, 1);
@ -3358,6 +3362,7 @@ void set_value_default() {
config.no_radius_when_single = 0;
config.snap_distance = 30;
config.drag_tile_to_tile = 0;
config.drag_tile_small = 1;
config.enable_floating_snap = 0;
config.swipe_min_threshold = 1;

View file

@ -378,11 +378,20 @@ int32_t moveresize(const Arg *arg) {
grabc->drag_to_tile = true;
exit_scroller_stack(grabc);
setfloating(grabc, 1);
grabc->drag_tile_float_backup_geom = grabc->float_geom;
grabc->old_stack_inner_per = 0.0f;
grabc->old_master_inner_per = 0.0f;
set_size_per(grabc->mon, grabc);
}
if (grabc && grabc->drag_to_tile && config.drag_tile_small) {
grabc->geom.x = cursor->x - 150;
grabc->geom.y = cursor->y - 150;
grabc->geom.width = 300;
grabc->geom.height = 300;
resize(grabc, grabc->geom, 1);
}
switch (cursor_mode = arg->ui) {
case CurMove:

View file

@ -425,6 +425,7 @@ struct Client {
struct Client *prev_in_stack;
bool enable_drop_area_draw;
int32_t drop_direction;
struct wlr_box drag_tile_float_backup_geom;
};
typedef struct {
@ -2313,6 +2314,7 @@ buttonpress(struct wl_listener *listener, void *data) {
last_apply_drap_time = 0;
if (tmpc->drag_to_tile && config.drag_tile_to_tile) {
place_drag_tile_client(tmpc);
tmpc->float_geom = tmpc->drag_tile_float_backup_geom;
} else {
apply_window_snap(tmpc);
}