Merge pull request #3193 from Kingtous/master

fix: allowing idle scroll events
This commit is contained in:
RustDesk 2023-02-13 16:38:36 +08:00 committed by GitHub
commit 51757b3f9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 9 deletions

View File

@ -1735,6 +1735,7 @@ Future<void> updateSystemWindowTheme() async {
} }
} }
} }
/// macOS only /// macOS only
/// ///
/// Note: not found a general solution for rust based AVFoundation bingding. /// Note: not found a general solution for rust based AVFoundation bingding.
@ -1762,3 +1763,27 @@ Future<PermissionAuthorizeType> osxCanRecordAudio() async {
Future<bool> osxRequestAudio() async { Future<bool> osxRequestAudio() async {
return await kMacOSPermChannel.invokeMethod("requestRecordAudio"); 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, scrollController: _scrollController,
child: CustomScrollView( child: CustomScrollView(
controller: _scrollController, controller: _scrollController,
physics: NeverScrollableScrollPhysics(), physics: DraggableNeverScrollableScrollPhysics(),
slivers: [ slivers: [
SliverList( SliverList(
delegate: SliverChildListDelegate([ delegate: SliverChildListDelegate([

View File

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

View File

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