diff --git a/src/main.tsx b/src/main.tsx
index 56a3149a8..d9e160e2b 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -559,7 +559,7 @@ class ScreenTabs extends React.Component<{session : Session}, {}> {
if (screen == null) {
return;
}
- GlobalModel.activateScreen(screen.sessionId, screen.screenId);
+ GlobalModel.submitCommand(sprintf("/s %s", screenId));
}
render() {
@@ -572,7 +572,7 @@ class ScreenTabs extends React.Component<{session : Session}, {}> {
return (
- this.handleSwitchScreen(screen.screenId)}>
+
this.handleSwitchScreen(screen.screenId, index+1)}>
{screen.name.get()}
⌘{index+1}
diff --git a/src/model.ts b/src/model.ts
index 11bb442b6..c4c25ffde 100644
--- a/src/model.ts
+++ b/src/model.ts
@@ -534,7 +534,7 @@ class Model {
if (newScreenId == null) {
return;
}
- this.activateScreen(activeSession.sessionId, newScreenId);
+ this.submitCommand(sprintf("/s %s", newScreenId));
}
onDigitCmd(e : any, arg : {digit: number}, mods : KeyModsType) {
@@ -558,13 +558,17 @@ class Model {
}
if ("sessions" in message) {
let sessionUpdateMsg : SessionUpdateType = message;
- console.log("update-sessions", sessionUpdateMsg.sessions);
mobx.action(() => {
let oldActiveScreen = this.getActiveScreen();
genMergeData(this.sessionList, sessionUpdateMsg.sessions, (s : Session) => s.sessionId, (sdata : SessionDataType) => sdata.sessionid, (sdata : SessionDataType) => new Session(sdata), (s : Session) => s.sessionIdx.get());
let newActiveScreen = this.getActiveScreen();
if (oldActiveScreen != newActiveScreen) {
- this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen);
+ if (newActiveScreen == null) {
+ this.activateScreen(this.activeSessionId.get(), null, oldActiveScreen);
+ }
+ else {
+ this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen);
+ }
}
})();
@@ -741,6 +745,7 @@ class Model {
})();
let curScreen = this.getActiveScreen();
if (curScreen == null) {
+ this.ws.pushMessage({type: "watchscreen", sessionid: sessionId});
return;
}
this.ws.pushMessage({type: "watchscreen", sessionid: curScreen.sessionId, screenid: curScreen.screenId});
diff --git a/src/ws.ts b/src/ws.ts
index 17d46610a..c70cca7bf 100644
--- a/src/ws.ts
+++ b/src/ws.ts
@@ -117,7 +117,12 @@ class WSControl {
return;
}
if (this.messageCallback) {
- this.messageCallback(eventData);
+ try {
+ this.messageCallback(eventData);
+ }
+ catch (e) {
+ console.log("[error] messageCallback", e);
+ }
}
}