mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-14 05:34:21 -04:00
feat: add option hotarea_corner
This commit is contained in:
parent
2e6e23633e
commit
30692f6da0
3 changed files with 61 additions and 11 deletions
|
|
@ -232,6 +232,7 @@ typedef struct {
|
||||||
int32_t center_when_single_stack;
|
int32_t center_when_single_stack;
|
||||||
|
|
||||||
uint32_t hotarea_size;
|
uint32_t hotarea_size;
|
||||||
|
uint32_t hotarea_corner;
|
||||||
uint32_t enable_hotarea;
|
uint32_t enable_hotarea;
|
||||||
uint32_t ov_tab_mode;
|
uint32_t ov_tab_mode;
|
||||||
int32_t overviewgappi;
|
int32_t overviewgappi;
|
||||||
|
|
@ -1452,6 +1453,8 @@ void parse_option(Config *config, char *key, char *value) {
|
||||||
config->center_when_single_stack = atoi(value);
|
config->center_when_single_stack = atoi(value);
|
||||||
} else if (strcmp(key, "hotarea_size") == 0) {
|
} else if (strcmp(key, "hotarea_size") == 0) {
|
||||||
config->hotarea_size = atoi(value);
|
config->hotarea_size = atoi(value);
|
||||||
|
} else if (strcmp(key, "hotarea_corner") == 0) {
|
||||||
|
config->hotarea_corner = atoi(value);
|
||||||
} else if (strcmp(key, "enable_hotarea") == 0) {
|
} else if (strcmp(key, "enable_hotarea") == 0) {
|
||||||
config->enable_hotarea = atoi(value);
|
config->enable_hotarea = atoi(value);
|
||||||
} else if (strcmp(key, "ov_tab_mode") == 0) {
|
} else if (strcmp(key, "ov_tab_mode") == 0) {
|
||||||
|
|
@ -2739,6 +2742,7 @@ void override_config(void) {
|
||||||
|
|
||||||
// 概述模式设置
|
// 概述模式设置
|
||||||
hotarea_size = CLAMP_INT(config.hotarea_size, 1, 1000);
|
hotarea_size = CLAMP_INT(config.hotarea_size, 1, 1000);
|
||||||
|
hotarea_corner = CLAMP_INT(config.hotarea_corner, 0, 3);
|
||||||
enable_hotarea = CLAMP_INT(config.enable_hotarea, 0, 1);
|
enable_hotarea = CLAMP_INT(config.enable_hotarea, 0, 1);
|
||||||
ov_tab_mode = CLAMP_INT(config.ov_tab_mode, 0, 1);
|
ov_tab_mode = CLAMP_INT(config.ov_tab_mode, 0, 1);
|
||||||
overviewgappi = CLAMP_INT(config.overviewgappi, 0, 1000);
|
overviewgappi = CLAMP_INT(config.overviewgappi, 0, 1000);
|
||||||
|
|
@ -2901,8 +2905,9 @@ void set_value_default() {
|
||||||
|
|
||||||
config.numlockon = numlockon; // 是否打开右边小键盘
|
config.numlockon = numlockon; // 是否打开右边小键盘
|
||||||
|
|
||||||
config.ov_tab_mode = ov_tab_mode; // alt tab切换模式
|
config.ov_tab_mode = ov_tab_mode; // alt tab切换模式
|
||||||
config.hotarea_size = hotarea_size; // 热区大小,10x10
|
config.hotarea_size = hotarea_size; // 热区大小,10x10
|
||||||
|
config.hotarea_corner = hotarea_corner;
|
||||||
config.enable_hotarea = enable_hotarea; // 是否启用鼠标热区
|
config.enable_hotarea = enable_hotarea; // 是否启用鼠标热区
|
||||||
config.smartgaps =
|
config.smartgaps =
|
||||||
smartgaps; /* 1 means no outer gap when there is only one window */
|
smartgaps; /* 1 means no outer gap when there is only one window */
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,9 @@ int32_t log_level = WLR_ERROR;
|
||||||
uint32_t numlockon = 0; // 是否打开右边小键盘
|
uint32_t numlockon = 0; // 是否打开右边小键盘
|
||||||
uint32_t capslock = 0; // 是否启用快捷键
|
uint32_t capslock = 0; // 是否启用快捷键
|
||||||
|
|
||||||
uint32_t ov_tab_mode = 0; // alt tab切换模式
|
uint32_t ov_tab_mode = 0; // alt tab切换模式
|
||||||
uint32_t hotarea_size = 10; // 热区大小,10x10
|
uint32_t hotarea_size = 10; // 热区大小,10x10
|
||||||
|
uint32_t hotarea_corner = BOTTOM_LEFT;
|
||||||
uint32_t enable_hotarea = 1; // 是否启用鼠标热区
|
uint32_t enable_hotarea = 1; // 是否启用鼠标热区
|
||||||
int32_t smartgaps = 0; /* 1 means no outer gap when there is only one window */
|
int32_t smartgaps = 0; /* 1 means no outer gap when there is only one window */
|
||||||
int32_t sloppyfocus = 1; /* focus follows mouse */
|
int32_t sloppyfocus = 1; /* focus follows mouse */
|
||||||
|
|
|
||||||
58
src/mango.c
58
src/mango.c
|
|
@ -143,6 +143,8 @@
|
||||||
#define BAKED_POINTS_COUNT 256
|
#define BAKED_POINTS_COUNT 256
|
||||||
|
|
||||||
/* enums */
|
/* enums */
|
||||||
|
enum { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT };
|
||||||
|
|
||||||
enum { VERTICAL, HORIZONTAL };
|
enum { VERTICAL, HORIZONTAL };
|
||||||
enum { SWIPE_UP, SWIPE_DOWN, SWIPE_LEFT, SWIPE_RIGHT };
|
enum { SWIPE_UP, SWIPE_DOWN, SWIPE_LEFT, SWIPE_RIGHT };
|
||||||
enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */
|
enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */
|
||||||
|
|
@ -1215,17 +1217,59 @@ void toggle_hotarea(int32_t x_root, int32_t y_root) {
|
||||||
if (grabc)
|
if (grabc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
unsigned hx = selmon->m.x + hotarea_size;
|
// 根据热角位置计算不同的热区坐标
|
||||||
unsigned hy = selmon->m.y + selmon->m.height - hotarea_size;
|
unsigned hx, hy;
|
||||||
|
|
||||||
if (enable_hotarea == 1 && selmon->is_in_hotarea == 0 && y_root > hy &&
|
switch (hotarea_corner) {
|
||||||
x_root < hx && x_root >= selmon->m.x &&
|
case BOTTOM_RIGHT: // 右下角
|
||||||
y_root <= (selmon->m.y + selmon->m.height)) {
|
hx = selmon->m.x + selmon->m.width - hotarea_size;
|
||||||
|
hy = selmon->m.y + selmon->m.height - hotarea_size;
|
||||||
|
break;
|
||||||
|
case TOP_LEFT: // 左上角
|
||||||
|
hx = selmon->m.x + hotarea_size;
|
||||||
|
hy = selmon->m.y + hotarea_size;
|
||||||
|
break;
|
||||||
|
case TOP_RIGHT: // 右上角
|
||||||
|
hx = selmon->m.x + selmon->m.width - hotarea_size;
|
||||||
|
hy = selmon->m.y + hotarea_size;
|
||||||
|
break;
|
||||||
|
case BOTTOM_LEFT: // 左下角(默认)
|
||||||
|
default:
|
||||||
|
hx = selmon->m.x + hotarea_size;
|
||||||
|
hy = selmon->m.y + selmon->m.height - hotarea_size;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断鼠标是否在热区内
|
||||||
|
int in_hotarea = 0;
|
||||||
|
|
||||||
|
switch (hotarea_corner) {
|
||||||
|
case BOTTOM_RIGHT: // 右下角
|
||||||
|
in_hotarea = (y_root > hy && x_root > hx &&
|
||||||
|
x_root <= (selmon->m.x + selmon->m.width) &&
|
||||||
|
y_root <= (selmon->m.y + selmon->m.height));
|
||||||
|
break;
|
||||||
|
case TOP_LEFT: // 左上角
|
||||||
|
in_hotarea = (y_root < hy && x_root < hx && x_root >= selmon->m.x &&
|
||||||
|
y_root >= selmon->m.y);
|
||||||
|
break;
|
||||||
|
case TOP_RIGHT: // 右上角
|
||||||
|
in_hotarea = (y_root < hy && x_root > hx &&
|
||||||
|
x_root <= (selmon->m.x + selmon->m.width) &&
|
||||||
|
y_root >= selmon->m.y);
|
||||||
|
break;
|
||||||
|
case BOTTOM_LEFT: // 左下角(默认)
|
||||||
|
default:
|
||||||
|
in_hotarea = (y_root > hy && x_root < hx && x_root >= selmon->m.x &&
|
||||||
|
y_root <= (selmon->m.y + selmon->m.height));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enable_hotarea == 1 && selmon->is_in_hotarea == 0 && in_hotarea) {
|
||||||
toggleoverview(&arg);
|
toggleoverview(&arg);
|
||||||
selmon->is_in_hotarea = 1;
|
selmon->is_in_hotarea = 1;
|
||||||
} else if (enable_hotarea == 1 && selmon->is_in_hotarea == 1 &&
|
} else if (enable_hotarea == 1 && selmon->is_in_hotarea == 1 &&
|
||||||
(y_root <= hy || x_root >= hx || x_root < selmon->m.x ||
|
!in_hotarea) {
|
||||||
y_root > (selmon->m.y + selmon->m.height))) {
|
|
||||||
selmon->is_in_hotarea = 0;
|
selmon->is_in_hotarea = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue