fix: allowing idle scroll events

This commit is contained in:
Kingtous 2023-02-13 16:18:46 +08:00
parent 0c8ca1a4fc
commit 9492f401f4
4 changed files with 35 additions and 9 deletions

View File

@ -1735,6 +1735,7 @@ Future<void> updateSystemWindowTheme() async {
}
}
}
/// macOS only
///
/// Note: not found a general solution for rust based AVFoundation bingding.
@ -1762,3 +1763,27 @@ Future<PermissionAuthorizeType> osxCanRecordAudio() async {
Future<bool> osxRequestAudio() async {
return await kMacOSPermChannel.invokeMethod("requestRecordAudio");
}
class DraggableNeverScrollableScrollPhysics extends ScrollPhysics {
/// Creates scroll physics that does not let the user scroll.
const DraggableNeverScrollableScrollPhysics({super.parent});
@override
DraggableNeverScrollableScrollPhysics applyTo(ScrollPhysics? ancestor) {
return DraggableNeverScrollableScrollPhysics(parent: buildParent(ancestor));
}
@override
bool shouldAcceptUserOffset(ScrollMetrics position) {
// TODO: find a better solution to check if the offset change is caused by the scrollbar.
// Workaround: when dragging with the scrollbar, it always triggers an [IdleScrollActivity].
if (position is ScrollPositionWithSingleContext) {
// ignore: invalid_use_of_protected_member, invalid_use_of_visible_for_testing_member
return position.activity is IdleScrollActivity;
}
return false;
}
@override
bool get allowImplicitScrolling => false;
}

View File

@ -120,7 +120,7 @@ class _ConnectionPageState extends State<ConnectionPage>
scrollController: _scrollController,
child: CustomScrollView(
controller: _scrollController,
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
slivers: [
SliverList(
delegate: SliverChildListDelegate([

View File

@ -75,6 +75,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
scrollController: _leftPaneScrollController,
child: SingleChildScrollView(
controller: _leftPaneScrollController,
physics: DraggableNeverScrollableScrollPhysics(),
child: Column(
children: [
buildTip(context),

View File

@ -128,7 +128,7 @@ class _DesktopSettingPageState extends State<DesktopSettingPage>
scrollController: controller,
child: PageView(
controller: controller,
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
children: const [
_General(),
_Safety(),
@ -170,7 +170,7 @@ class _DesktopSettingPageState extends State<DesktopSettingPage>
return DesktopScrollWrapper(
scrollController: scrollController,
child: ListView(
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
controller: scrollController,
children: tabs
.asMap()
@ -234,7 +234,7 @@ class _GeneralState extends State<_General> {
return DesktopScrollWrapper(
scrollController: scrollController,
child: ListView(
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
controller: scrollController,
children: [
theme(),
@ -456,7 +456,7 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin {
return DesktopScrollWrapper(
scrollController: scrollController,
child: SingleChildScrollView(
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
controller: scrollController,
child: Column(
children: [
@ -908,7 +908,7 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin {
scrollController: scrollController,
child: ListView(
controller: scrollController,
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
children: [
_lock(locked, 'Unlock Network Settings', () {
locked = false;
@ -1094,7 +1094,7 @@ class _DisplayState extends State<_Display> {
scrollController: scrollController,
child: ListView(
controller: scrollController,
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
children: [
viewStyle(context),
scrollStyle(context),
@ -1334,7 +1334,7 @@ class _AccountState extends State<_Account> {
return DesktopScrollWrapper(
scrollController: scrollController,
child: ListView(
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
controller: scrollController,
children: [
_Card(title: 'Account', children: [accountAction()]),
@ -1378,7 +1378,7 @@ class _AboutState extends State<_About> {
scrollController: scrollController,
child: SingleChildScrollView(
controller: scrollController,
physics: NeverScrollableScrollPhysics(),
physics: DraggableNeverScrollableScrollPhysics(),
child: _Card(title: '${translate('About')} RustDesk', children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,