diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index dc4dc2c94..c13a87d41 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -33,8 +33,6 @@ const int kMobileMaxDisplayHeight = 1280; const int kDesktopMaxDisplayWidth = 1920; const int kDesktopMaxDisplayHeight = 1080; -const int kDesktopDoubleClickTimeMilli = 200; - const Size kConnectionManagerWindowSize = Size(300, 400); // Tabbar transition duration, now we remove the duration const Duration kTabTransitionDuration = Duration.zero; diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart index 042158fcb..63122df88 100644 --- a/flutter/lib/desktop/pages/file_manager_page.dart +++ b/flutter/lib/desktop/pages/file_manager_page.dart @@ -57,7 +57,8 @@ class _FileManagerPageState extends State final _breadCrumbScrollerRemote = ScrollController(); /// [_lastClickTime], [_lastClickEntry] help to handle double click - int _lastClickTime = DateTime.now().millisecondsSinceEpoch; + int _lastClickTime = + DateTime.now().millisecondsSinceEpoch - bind.getDoubleClickTime() - 1000; Entry? _lastClickEntry; final _dropMaskVisible = false.obs; // TODO impl drop mask @@ -404,7 +405,7 @@ class _FileManagerPageState extends State final elapsed = current - _lastClickTime; _lastClickTime = current; if (_lastClickEntry == entry) { - if (elapsed < kDesktopDoubleClickTimeMilli) { + if (elapsed < bind.getDoubleClickTime()) { return true; } } else { diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 229e8bd35..c21f58e4b 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -178,7 +178,7 @@ typedef LabelGetter = Rx Function(String key); /// [_lastClickTime], help to handle double click int _lastClickTime = - DateTime.now().millisecondsSinceEpoch - kDesktopDoubleClickTimeMilli - 1000; + DateTime.now().millisecondsSinceEpoch - bind.getDoubleClickTime() - 1000; class DesktopTab extends StatelessWidget { final bool showLogo; @@ -311,7 +311,7 @@ class DesktopTab extends StatelessWidget { final current = DateTime.now().millisecondsSinceEpoch; final elapsed = current - _lastClickTime; _lastClickTime = current; - if (elapsed < kDesktopDoubleClickTimeMilli) { + if (elapsed < bind.getDoubleClickTime()) { // onDoubleTap toggleMaximize(isMainWindow) .then((value) => isMaximized.value = value); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 45bcd12e3..1c53829f1 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -804,8 +804,8 @@ pub fn main_is_root() -> bool { is_root() } -pub fn main_is_release() -> bool { - is_release() +pub fn get_double_click_time() -> SyncReturn { + SyncReturn(crate::platform::get_double_click_time() as _) } pub fn main_start_dbus_server() { diff --git a/src/platform/linux.rs b/src/platform/linux.rs index a02c4618b..3a779b577 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -684,3 +684,10 @@ pub fn check_super_user_permission() -> ResultType { let status = std::process::Command::new("pkexec").arg(arg).status()?; Ok(status.success() && status.code() == Some(0)) } + +pub fn get_double_click_time() -> u32 { + // to-do + // GtkSettings *settings = gtk_settings_get_default (); + // g_object_get (settings, "gtk-double-click-time", &double_click_time, NULL); + 500 as _ +} diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 3273a22a5..9a474321e 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -537,3 +537,9 @@ pub fn quit_gui() { let () = msg_send!(NSApp(), terminate: nil); }; } + + +pub fn get_double_click_time() -> u32 { + // to-do: https://github.com/servo/core-foundation-rs/blob/786895643140fa0ee4f913d7b4aeb0c4626b2085/cocoa/src/appkit.rs#L2823 + 500 as _ +} diff --git a/src/platform/windows.rs b/src/platform/windows.rs index ae9574f33..b067f514b 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1632,3 +1632,7 @@ pub fn is_foreground_window_elevated() -> ResultType { fn get_current_pid() -> u32 { unsafe { GetCurrentProcessId() } } + +pub fn get_double_click_time() -> u32 { + unsafe { GetDoubleClickTime() } +}