Merge pull request #4866 from pangeachat/4865-message-button-goes-down-then-back-up

chore: keep message button depressed
This commit is contained in:
ggurdin 2025-12-17 09:25:35 -05:00 committed by GitHub
commit a8084c51ba
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 28 deletions

View file

@ -783,7 +783,6 @@ class ChatController extends State<ChatPageWithRoom>
choreographer.dispose();
activityController.dispose();
MatrixState.pAnyState.closeAllOverlays(force: true);
showToolbarStream.close();
stopMediaStream.close();
_levelSubscription?.cancel();
_analyticsSubscription?.cancel();
@ -791,6 +790,7 @@ class ChatController extends State<ChatPageWithRoom>
_router.routeInformationProvider.removeListener(_onRouteChanged);
scrollController.dispose();
inputFocus.dispose();
depressMessageButton.dispose();
TokensUtil.clearNewTokenCache();
//Pangea#
super.dispose();
@ -1614,6 +1614,8 @@ class ChatController extends State<ChatPageWithRoom>
if (!mounted) return;
if (!_isToolbarOpen && selectedEvents.isEmpty) return;
MatrixState.pAnyState.closeAllOverlays();
depressMessageButton.value = false;
setState(() {
selectedEvents.clear();
showEmojiPicker = false;
@ -1952,6 +1954,8 @@ class ChatController extends State<ChatPageWithRoom>
editEvent = null;
});
// #Pangea
ValueNotifier<bool> depressMessageButton = ValueNotifier(false);
String? get buttonEventID => timeline!.events
.firstWhereOrNull(
(event) =>
@ -1971,9 +1975,6 @@ class ChatController extends State<ChatPageWithRoom>
)
?.eventId;
final StreamController<String> showToolbarStream =
StreamController.broadcast();
final StreamController<void> stopMediaStream = StreamController.broadcast();
bool get _isToolbarOpen =>
@ -2043,13 +2044,13 @@ class ChatController extends State<ChatPageWithRoom>
// you've clicked a message so lets turn this off
InstructionsEnum.clickMessage.setToggledOff(true);
showToolbarStream.add(event.eventId);
if (!kIsWeb) {
HapticFeedback.mediumImpact();
}
stopMediaStream.add(null);
if (buttonEventID == event.eventId) {
depressMessageButton.value = true;
Future.delayed(const Duration(milliseconds: 200), () {
if (_router.state.path != ':roomid') {
// The user has navigated away from the chat,

View file

@ -581,29 +581,10 @@ class Message extends StatelessWidget {
child: MouseRegion(
cursor:
SystemMouseCursors.click,
child: PressableButton(
buttonHeight: 5,
triggerAnimation: controller
.showToolbarStream
.stream
.where(
(eventID) =>
eventID ==
event.eventId,
),
depressed: !isButton,
borderRadius: borderRadius,
onPressed: () {
showToolbar(
pangeaMessageEvent,
);
},
color: color,
visible:
isButton && !noBubble,
builder: (context, _, __) =>
// Pangea#
Container(
child: ValueListenableBuilder(
valueListenable: controller
.depressMessageButton,
child: Container(
decoration: BoxDecoration(
color: noBubble
? Colors.transparent
@ -823,6 +804,31 @@ class Message extends StatelessWidget {
),
),
),
// #Pangea
builder: (
context,
depressed,
child,
) =>
PressableButton(
buttonHeight: 5,
depressed: !isButton ||
depressed,
borderRadius:
borderRadius,
onPressed: () {
showToolbar(
pangeaMessageEvent,
);
},
color: color,
visible:
isButton && !noBubble,
builder:
(context, _, __) =>
child!,
),
// Pangea#
),
),
),