feat: 统一 current_monitor 切换并让光标跟随 current_monitor 变化
- 新增 wm_set_current_monitor ,切换前记录光标当前所在 monitor 的最后 位置 - 切换到目标 monitor 时按需恢复该 monitor 的光标位置 - 将 action/event/client 中直接赋值 wm.current_monitor 的逻辑改为统一 调用 wm_set_current_monitor - 优化 monitor_restore_cursor_point:首次未初始化时计算并设置位置 - 为 wm_get_monitor_by_area / wm_get_monitor_by_point 增加 returns_nonnull 约束,并让 by_point 复用 by_area
This commit is contained in:
@@ -361,14 +361,13 @@ void monitor_save_cursor_point(monitor_t *monitor) {
|
||||
}
|
||||
|
||||
void monitor_restore_cursor_point(monitor_t *monitor) {
|
||||
if (monitor->position_inited) {
|
||||
xcursor_set_pointer_position(monitor->cursor_position);
|
||||
return;
|
||||
if (!monitor->position_inited) {
|
||||
point_t point = xcursor_query_pointer_position();
|
||||
monitor_t *m = wm_get_monitor_by_point(point);
|
||||
monitor->cursor_position.x = point.x - m->geometry.x + monitor->geometry.x;
|
||||
monitor->cursor_position.y = point.y - m->geometry.y + monitor->geometry.y;
|
||||
monitor->position_inited = true;
|
||||
}
|
||||
|
||||
point_t point = xcursor_query_pointer_position();
|
||||
monitor_t *m = wm_get_monitor_by_point(point);
|
||||
monitor->cursor_position.x = point.x - m->geometry.x + monitor->geometry.x;
|
||||
monitor->cursor_position.y = point.y - m->geometry.y + monitor->geometry.y;
|
||||
monitor->position_inited = true;
|
||||
xcursor_set_pointer_position(monitor->cursor_position);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user