commit
96f2e61ca4
@ -54,6 +54,7 @@ class ChatPage extends StatelessWidget implements PageShape {
|
|||||||
return DashChat(
|
return DashChat(
|
||||||
onSend: (chatMsg) {
|
onSend: (chatMsg) {
|
||||||
chatModel.send(chatMsg);
|
chatModel.send(chatMsg);
|
||||||
|
chatModel.inputNode.requestFocus();
|
||||||
},
|
},
|
||||||
currentUser: chatModel.me,
|
currentUser: chatModel.me,
|
||||||
messages: chatModel
|
messages: chatModel
|
||||||
|
@ -101,6 +101,7 @@ class ConnectionManagerState extends State<ConnectionManager> {
|
|||||||
gFFI.serverModel.updateClientState();
|
gFFI.serverModel.updateClientState();
|
||||||
gFFI.serverModel.tabController.onSelected = (index, _) =>
|
gFFI.serverModel.tabController.onSelected = (index, _) =>
|
||||||
gFFI.chatModel.changeCurrentID(gFFI.serverModel.clients[index].id);
|
gFFI.chatModel.changeCurrentID(gFFI.serverModel.clients[index].id);
|
||||||
|
gFFI.chatModel.isConnManager = true;
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +160,7 @@ class ConnectionManagerState extends State<ConnectionManager> {
|
|||||||
pageViewBuilder: (pageView) => Row(children: [
|
pageViewBuilder: (pageView) => Row(children: [
|
||||||
Expanded(child: pageView),
|
Expanded(child: pageView),
|
||||||
Consumer<ChatModel>(
|
Consumer<ChatModel>(
|
||||||
builder: (_, model, child) => model.isShowChatPage
|
builder: (_, model, child) => model.isShowCMChatPage
|
||||||
? Expanded(child: Scaffold(body: ChatPage()))
|
? Expanded(child: Scaffold(body: ChatPage()))
|
||||||
: Offstage())
|
: Offstage())
|
||||||
])));
|
])));
|
||||||
|
@ -160,15 +160,10 @@ void runConnectionManagerScreen() async {
|
|||||||
);
|
);
|
||||||
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||||
await windowManager.show();
|
await windowManager.show();
|
||||||
|
await Future.wait([windowManager.focus(), windowManager.setOpacity(1)]);
|
||||||
// ensure initial window size to be changed
|
// ensure initial window size to be changed
|
||||||
await windowManager.setSize(kConnectionManagerWindowSize);
|
await windowManager.setSizeAlignment(
|
||||||
await Future.wait([
|
kConnectionManagerWindowSize, Alignment.topRight);
|
||||||
windowManager.setAlignment(Alignment.topRight),
|
|
||||||
windowManager.focus(),
|
|
||||||
windowManager.setOpacity(1)
|
|
||||||
]);
|
|
||||||
// ensure
|
|
||||||
windowManager.setAlignment(Alignment.topRight);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ class ChatModel with ChangeNotifier {
|
|||||||
OverlayState? _overlayState;
|
OverlayState? _overlayState;
|
||||||
OverlayEntry? chatIconOverlayEntry;
|
OverlayEntry? chatIconOverlayEntry;
|
||||||
OverlayEntry? chatWindowOverlayEntry;
|
OverlayEntry? chatWindowOverlayEntry;
|
||||||
|
bool isConnManager = false;
|
||||||
|
|
||||||
final ChatUser me = ChatUser(
|
final ChatUser me = ChatUser(
|
||||||
id: "",
|
id: "",
|
||||||
@ -42,13 +43,13 @@ class ChatModel with ChangeNotifier {
|
|||||||
MessageBody(me, []);
|
MessageBody(me, []);
|
||||||
|
|
||||||
var _currentID = clientModeID;
|
var _currentID = clientModeID;
|
||||||
late bool _isShowChatPage = false;
|
late bool _isShowCMChatPage = false;
|
||||||
|
|
||||||
Map<int, MessageBody> get messages => _messages;
|
Map<int, MessageBody> get messages => _messages;
|
||||||
|
|
||||||
int get currentID => _currentID;
|
int get currentID => _currentID;
|
||||||
|
|
||||||
bool get isShowChatPage => _isShowChatPage;
|
bool get isShowCMChatPage => _isShowCMChatPage;
|
||||||
|
|
||||||
final WeakReference<FFI> parent;
|
final WeakReference<FFI> parent;
|
||||||
|
|
||||||
@ -147,9 +148,11 @@ class ChatModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_isChatOverlayHide() => ((!isDesktop && chatIconOverlayEntry == null) ||
|
||||||
|
chatWindowOverlayEntry == null);
|
||||||
|
|
||||||
toggleChatOverlay() {
|
toggleChatOverlay() {
|
||||||
if ((!isDesktop && chatIconOverlayEntry == null) ||
|
if (_isChatOverlayHide()) {
|
||||||
chatWindowOverlayEntry == null) {
|
|
||||||
gFFI.invokeMethod("enable_soft_keyboard", true);
|
gFFI.invokeMethod("enable_soft_keyboard", true);
|
||||||
if (!isDesktop) {
|
if (!isDesktop) {
|
||||||
showChatIconOverlay();
|
showChatIconOverlay();
|
||||||
@ -161,20 +164,29 @@ class ChatModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showChatPage(int id) async {
|
||||||
|
if (isConnManager) {
|
||||||
|
if (!_isShowCMChatPage) {
|
||||||
|
await toggleCMChatPage(id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (_isChatOverlayHide()) {
|
||||||
|
await toggleChatOverlay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
toggleCMChatPage(int id) async {
|
toggleCMChatPage(int id) async {
|
||||||
if (gFFI.chatModel.currentID != id) {
|
if (gFFI.chatModel.currentID != id) {
|
||||||
gFFI.chatModel.changeCurrentID(id);
|
gFFI.chatModel.changeCurrentID(id);
|
||||||
}
|
}
|
||||||
if (_isShowChatPage) {
|
if (_isShowCMChatPage) {
|
||||||
_isShowChatPage = !_isShowChatPage;
|
_isShowCMChatPage = !_isShowCMChatPage;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
await windowManager.setSize(Size(300, 400));
|
await windowManager.setSizeAlignment(Size(300, 400), Alignment.topRight);
|
||||||
await windowManager.setAlignment(Alignment.topRight);
|
|
||||||
} else {
|
} else {
|
||||||
await windowManager.setSize(Size(600, 400));
|
await windowManager.setSizeAlignment(Size(600, 400), Alignment.topRight);
|
||||||
await Future.delayed(Duration(milliseconds: 100));
|
_isShowCMChatPage = !_isShowCMChatPage;
|
||||||
await windowManager.setAlignment(Alignment.topRight);
|
|
||||||
_isShowChatPage = !_isShowChatPage;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,13 +220,11 @@ class ChatModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
if (text.isEmpty) return;
|
if (text.isEmpty) return;
|
||||||
// mobile: first message show overlay icon
|
// mobile: first message show overlay icon
|
||||||
if (chatIconOverlayEntry == null) {
|
if (!isDesktop && chatIconOverlayEntry == null) {
|
||||||
showChatIconOverlay();
|
showChatIconOverlay();
|
||||||
}
|
}
|
||||||
// desktop: show chat page
|
// show chat page
|
||||||
if (!_isShowChatPage) {
|
await showChatPage(id);
|
||||||
toggleCMChatPage(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
int toId = currentID;
|
int toId = currentID;
|
||||||
|
|
||||||
|
@ -407,9 +407,7 @@ class ServerModel with ChangeNotifier {
|
|||||||
if (client.hasUnreadChatMessage.value) {
|
if (client.hasUnreadChatMessage.value) {
|
||||||
client.hasUnreadChatMessage.value = false;
|
client.hasUnreadChatMessage.value = false;
|
||||||
final chatModel = parent.target!.chatModel;
|
final chatModel = parent.target!.chatModel;
|
||||||
if (!chatModel.isShowChatPage) {
|
chatModel.showChatPage(client.id);
|
||||||
chatModel.toggleCMChatPage(client.id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
page: desktop.buildConnectionCard(client)));
|
page: desktop.buildConnectionCard(client)));
|
||||||
|
@ -60,7 +60,7 @@ dependencies:
|
|||||||
window_manager:
|
window_manager:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/Kingtous/rustdesk_window_manager
|
url: https://github.com/Kingtous/rustdesk_window_manager
|
||||||
ref: 88487257cbafc501599ab4f82ec343b46acec020
|
ref: d1e4b40f4a1ffeb8630696be6883dd31bf307998
|
||||||
desktop_multi_window:
|
desktop_multi_window:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/Kingtous/rustdesk_desktop_multi_window
|
url: https://github.com/Kingtous/rustdesk_desktop_multi_window
|
||||||
|
Loading…
x
Reference in New Issue
Block a user