Skip to content

Commit 8f5f804

Browse files
committed
浮窗和验证窗口的修复和优化
- 优化 **浮窗点击识别**,减少误识别为拖动 - 修复 **验证窗口线程**,修复线程未清理导致的崩溃 - 修复 **托盘关于功能**,修复绕过安全验证问题 - 修复 **收纳浮窗无焦点**,修复无焦点模式未生效
1 parent 3f407ba commit 8f5f804

5 files changed

Lines changed: 53 additions & 12 deletions

File tree

CHANGELOG/v2.2.0/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ v2.0 - Koharu(小鸟游星野) release 3
77

88
## 💡 功能优化
99

10+
- 优化 **浮窗点击识别**,减少误识别为拖动
1011
- 优化 **安全验证逻辑**,统一使用项目验证系统
1112
- 优化 **软件退出**,解决退出缓慢问题
1213
- 优化 **URL 注册**,无需管理员权限即可完成
@@ -16,8 +17,11 @@ v2.0 - Koharu(小鸟游星野) release 3
1617
## 🐛 修复问题
1718

1819
- 修复 **URL命令解析**,修复命令匹配错误
20+
- 修复 **验证窗口线程**,修复线程未清理导致的崩溃
21+
- 修复 **托盘关于功能**,修复绕过安全验证问题
1922
- 修复 **重启功能**,解决无法重启异常
2023
- 修复 **URL 注册**,修复注册失败问题
24+
- 修复 **收纳浮窗无焦点**,修复无焦点模式未生效
2125

2226
## 🔧 其它变更
2327

app/common/IPC_URL/url_command_handler.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,12 @@ def _request_verification(
313313

314314
def execute_command():
315315
"""验证通过后执行命令"""
316-
return self._execute_command(command, params)
316+
try:
317+
result = self._execute_command(command, params)
318+
logger.debug(f"验证后执行命令完成: {command}, 结果: {result}")
319+
return result
320+
except Exception as e:
321+
logger.error(f"验证后执行命令失败: {command}, 错误: {e}")
317322

318323
# 调用验证窗口
319324
create_verify_password_window(on_verified=execute_command, operation_type=op)

app/core/window_manager.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,35 @@ def _recreate_settings_window(self) -> None:
232232

233233
def show_settings_window_about(self) -> None:
234234
"""显示关于窗口"""
235-
if self.settings_window is None:
236-
self.create_settings_window()
235+
from app.common.safety.verify_ops import (
236+
should_require_password,
237+
require_and_run,
238+
)
237239

238-
if self.settings_window is not None:
239-
self.settings_window.show_settings_window_about()
240+
def on_verified() -> None:
241+
"""验证通过后,正常打开关于窗口"""
242+
if self.settings_window is None:
243+
self.create_settings_window()
244+
245+
if self.settings_window is not None:
246+
self.show_settings_window("aboutInterface", is_preview=False)
247+
248+
def on_preview() -> None:
249+
"""点击预览按钮后,以预览模式打开关于窗口"""
250+
if self.settings_window is None:
251+
self.create_settings_window()
252+
253+
if self.settings_window is not None:
254+
self.show_settings_window("aboutInterface", is_preview=True)
255+
256+
if should_require_password("open_settings"):
257+
logger.debug("打开关于窗口需要验证")
258+
require_and_run(
259+
"open_settings", self.main_window, on_verified, on_preview=on_preview
260+
)
261+
else:
262+
logger.debug("打开关于窗口无需验证")
263+
on_verified()
240264

241265
def create_float_window(self) -> None:
242266
"""创建浮窗实例"""

app/view/another_window/security/verify_password.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -585,14 +585,14 @@ def __cancel(self):
585585
self.usb_poll_timer.stop()
586586
if hasattr(self, "_usb_thread"):
587587
try:
588-
self._usb_thread.quit()
589-
self._usb_thread.wait(300)
588+
self._usb_thread.terminate()
589+
self._usb_thread.wait(500)
590590
except Exception:
591591
pass
592592
if hasattr(self, "_verify_thread"):
593593
try:
594-
self._verify_thread.quit()
595-
self._verify_thread.wait(300)
594+
self._verify_thread.terminate()
595+
self._verify_thread.wait(500)
596596
except Exception:
597597
pass
598598
except Exception:
@@ -602,3 +602,8 @@ def __cancel(self):
602602
parent.close()
603603
break
604604
parent = parent.parent()
605+
606+
def closeEvent(self, event):
607+
"""窗口关闭时清理线程"""
608+
self.__cancel()
609+
super().closeEvent(event)

app/view/floating_window/levitation.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class LevitationWindow(QWidget):
4646
DEFAULT_ICON_SIZE = QSize(24, 24) # 图标大小
4747
DEFAULT_SPACING = 6
4848
DEFAULT_MARGINS = 6 # 贴边隐藏时的最小间距
49-
DRAG_THRESHOLD = 8 # 拖拽触发阈值,增加阈值避免误识别按钮点击为拖动
50-
MIN_DRAG_TIME = 50 # 最小拖动识别时间(毫秒),避免极短时间内的移动被识别为拖动
49+
DRAG_THRESHOLD = 12 # 拖拽触发阈值,增加阈值避免误识别按钮点击为拖动
50+
MIN_DRAG_TIME = 100 # 最小拖动识别时间(毫秒),避免极短时间内的移动被识别为拖动
5151

5252
def __init__(self, parent=None):
5353
"""初始化悬浮窗窗口"""
@@ -1435,9 +1435,12 @@ def _create_arrow_button(self, direction, x, y):
14351435
Qt.FramelessWindowHint
14361436
| Qt.WindowStaysOnTopHint
14371437
| Qt.Tool
1438-
| Qt.NoFocus
14391438
| Qt.NoDropShadowWindowHint
14401439
)
1440+
if self._do_not_steal_focus:
1441+
self.arrow_widget.setWindowFlags(
1442+
self.arrow_widget.windowFlags() | Qt.WindowDoesNotAcceptFocus
1443+
)
14411444

14421445
# 设置容器透明
14431446
self.arrow_widget.setAttribute(Qt.WA_TranslucentBackground)

0 commit comments

Comments
 (0)