mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-11-02 09:01:43 -05:00
feat: add option drag_tile_to_tile
This commit is contained in:
parent
b0082b1fb8
commit
94f502915e
4 changed files with 46 additions and 1 deletions
|
|
@ -52,6 +52,7 @@ focus_cross_tag=1
|
|||
enable_floating_snap=0
|
||||
snap_distance=30
|
||||
cursor_size=24
|
||||
drag_tile_to_tile=1
|
||||
|
||||
# keyboard
|
||||
repeat_rate=25
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ typedef struct {
|
|||
int no_border_when_single;
|
||||
int snap_distance;
|
||||
int enable_floating_snap;
|
||||
int drag_tile_to_tile;
|
||||
unsigned int swipe_min_threshold;
|
||||
float *scroller_proportion_preset;
|
||||
int scroller_proportion_preset_count;
|
||||
|
|
@ -766,6 +767,8 @@ void parse_config_line(Config *config, const char *line) {
|
|||
config->snap_distance = atoi(value);
|
||||
} else if (strcmp(key, "enable_floating_snap") == 0) {
|
||||
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, "swipe_min_threshold") == 0) {
|
||||
config->swipe_min_threshold = atoi(value);
|
||||
} else if (strcmp(key, "scroller_proportion_preset") == 0) {
|
||||
|
|
@ -1716,6 +1719,7 @@ void override_config(void) {
|
|||
focus_cross_tag = config.focus_cross_tag;
|
||||
no_border_when_single = config.no_border_when_single;
|
||||
snap_distance = config.snap_distance;
|
||||
drag_tile_to_tile = config.drag_tile_to_tile;
|
||||
enable_floating_snap = config.enable_floating_snap;
|
||||
swipe_min_threshold = config.swipe_min_threshold;
|
||||
scroller_prefer_center = config.scroller_prefer_center;
|
||||
|
|
@ -1816,6 +1820,7 @@ void set_value_default() {
|
|||
config.focus_cross_tag = focus_cross_tag;
|
||||
config.no_border_when_single = no_border_when_single;
|
||||
config.snap_distance = snap_distance;
|
||||
config.drag_tile_to_tile = drag_tile_to_tile;
|
||||
config.enable_floating_snap = enable_floating_snap;
|
||||
config.swipe_min_threshold = swipe_min_threshold;
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ int focus_cross_tag = 0;
|
|||
int no_border_when_single = 0;
|
||||
int snap_distance = 30;
|
||||
int enable_floating_snap = 0;
|
||||
int drag_tile_to_tile = 0;
|
||||
unsigned int cursor_size = 24;
|
||||
unsigned int cursor_hide_timeout = 0;
|
||||
|
||||
|
|
|
|||
40
src/maomao.c
40
src/maomao.c
|
|
@ -272,6 +272,7 @@ struct Client {
|
|||
pid_t pid;
|
||||
Client *swallowing, *swallowedby;
|
||||
bool is_clip_to_hide;
|
||||
bool drag_to_tile;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -2537,12 +2538,41 @@ void hold_end(struct wl_listener *listener, void *data) {
|
|||
event->time_msec, event->cancelled);
|
||||
}
|
||||
|
||||
void place_drag_tile_client(Client *c) {
|
||||
Client *tc = NULL;
|
||||
Client *closest_client = NULL;
|
||||
long min_distant = LONG_MAX;
|
||||
long temp_distant;
|
||||
unsigned int x,y;
|
||||
|
||||
wl_list_for_each(tc, &clients, link) {
|
||||
if (tc != c && ISTILED(tc) && VISIBLEON(tc, c->mon)) {
|
||||
x = tc->geom.x + tc->geom.width / 2 - cursor->x;
|
||||
y = tc->geom.y + tc->geom.height / 2 - cursor->y;
|
||||
temp_distant = x * x + y * y;
|
||||
if (temp_distant < min_distant) {
|
||||
min_distant = temp_distant;
|
||||
closest_client = tc;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(closest_client) {
|
||||
wl_list_remove(&c->link);
|
||||
c->link.next = &closest_client->link;
|
||||
c->link.prev = closest_client->link.prev;
|
||||
closest_client->link.prev->next = &c->link;
|
||||
closest_client->link.prev = &c->link;
|
||||
}
|
||||
setfloating(c, 0);
|
||||
}
|
||||
|
||||
void // 鼠标按键事件
|
||||
buttonpress(struct wl_listener *listener, void *data) {
|
||||
struct wlr_pointer_button_event *event = data;
|
||||
struct wlr_keyboard *keyboard;
|
||||
uint32_t mods;
|
||||
Client *c;
|
||||
Client *tmpc;
|
||||
int ji;
|
||||
const MouseBinding *b;
|
||||
struct wlr_surface *surface;
|
||||
|
|
@ -2605,8 +2635,14 @@ buttonpress(struct wl_listener *listener, void *data) {
|
|||
reset_foreign_tolevel(grabc);
|
||||
selmon->prevsel = selmon->sel;
|
||||
selmon->sel = grabc;
|
||||
apply_window_snap(grabc);
|
||||
tmpc = grabc;
|
||||
grabc = NULL;
|
||||
if(tmpc->drag_to_tile && drag_tile_to_tile){
|
||||
place_drag_tile_client(tmpc);
|
||||
} else {
|
||||
apply_window_snap(tmpc);
|
||||
}
|
||||
tmpc->drag_to_tile = false;
|
||||
return;
|
||||
} else {
|
||||
cursor_mode = CurNormal;
|
||||
|
|
@ -4357,6 +4393,7 @@ mapnotify(struct wl_listener *listener, void *data) {
|
|||
c->need_output_flush = 0;
|
||||
c->scroller_proportion = scroller_default_proportion;
|
||||
c->is_open_animation = true;
|
||||
c->drag_to_tile = false;
|
||||
|
||||
if (new_is_master &&
|
||||
strcmp(selmon->pertag->ltidxs[selmon->pertag->curtag]->name,
|
||||
|
|
@ -4628,6 +4665,7 @@ moveresize(const Arg *arg) {
|
|||
|
||||
/* Float the window and tell motionnotify to grab it */
|
||||
if (grabc->isfloating == 0) {
|
||||
grabc->drag_to_tile = true;
|
||||
setfloating(grabc, 1);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue