diff --git a/src/main.tsx b/src/main.tsx index 02274f65..ed2be7d5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -498,7 +498,6 @@ class CmdInput extends React.Component<{}, {}> { } render() { - console.log("render CmdInput"); let model = GlobalModel; let win = GlobalModel.getActiveWindow(); let ri : RemoteInstanceType = null; @@ -924,6 +923,7 @@ class MainSideBar extends React.Component<{}, {}> { let session : Session = null; let remotes = model.remotes; let remote : RemoteType = null; + let idx : number = 0; return (
@@ -941,8 +941,11 @@ class MainSideBar extends React.Component<{}, {}> {
  • (loading)
  • - -
  • this.handleSessionClick(session.sessionId)}>#{session.name.get()}
  • + +
  • this.handleSessionClick(session.sessionId)}> + {idx+1}  + {session.name.get()} +
  • this.handleNewSession()}> New Session
  • @@ -951,9 +954,9 @@ class MainSideBar extends React.Component<{}, {}> { Shared Sessions

    diff --git a/src/model.ts b/src/model.ts index 523376c6..07c7df09 100644 --- a/src/model.ts +++ b/src/model.ts @@ -963,6 +963,12 @@ class Model { } runUpdate(genUpdate : UpdateMessage, interactive : boolean) { + mobx.action(() => { + this.runUpdate_internal(genUpdate, interactive); + })(); + } + + runUpdate_internal(genUpdate : UpdateMessage, interactive : boolean) { if ("ptydata64" in genUpdate) { let ptyMsg : PtyDataUpdateType = genUpdate; let activeScreen = this.getActiveScreen(); @@ -974,24 +980,22 @@ class Model { } let update : ModelUpdateType = genUpdate; if ("sessions" in update) { - mobx.action(() => { - let oldActiveScreen = this.getActiveScreen(); - genMergeData(this.sessionList, update.sessions, (s : Session) => s.sessionId, (sdata : SessionDataType) => sdata.sessionid, (sdata : SessionDataType) => new Session(sdata), (s : Session) => s.sessionIdx.get()); - if (update.activesessionid) { - this.activateSession(update.activesessionid); - } - else { - let newActiveScreen = this.getActiveScreen(); - if (oldActiveScreen != newActiveScreen) { - if (newActiveScreen == null) { - this.activateScreen(this.activeSessionId.get(), null, oldActiveScreen); - } - else { - this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen); - } + let oldActiveScreen = this.getActiveScreen(); + genMergeData(this.sessionList, update.sessions, (s : Session) => s.sessionId, (sdata : SessionDataType) => sdata.sessionid, (sdata : SessionDataType) => new Session(sdata), (s : Session) => s.sessionIdx.get()); + if (!("activatesessionid" in update)) { + let newActiveScreen = this.getActiveScreen(); + if (oldActiveScreen != newActiveScreen) { + if (newActiveScreen == null) { + this.activateScreen(this.activeSessionId.get(), null, oldActiveScreen); + } + else { + this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen); } } - })(); + } + } + if ("activesessionid" in update) { + this.activateSession(update.activesessionid); } if ("line" in update) { if (update.line != null) { @@ -1182,26 +1186,9 @@ class Model { loadSessionList() { let url = new URL("http://localhost:8080/api/get-all-sessions"); fetch(url).then((resp) => handleJsonFetchResponse(url, resp)).then((data) => { - mobx.action(() => { - let sdatalist : SessionDataType[] = data.data || []; - let slist : Session[] = []; - let activeSessionId = null; - let activeScreenId = null; - for (let i=0; i { this.errorHandler("getting session list", err, false); }); @@ -1209,7 +1196,7 @@ class Model { activateSession(sessionId : string) { let oldActiveSession = this.getActiveSession(); - if (oldActiveSession.sessionId == sessionId) { + if (oldActiveSession != null && oldActiveSession.sessionId == sessionId) { return; } let newSession = this.getSessionById(sessionId); diff --git a/src/sh2.less b/src/sh2.less index 321b4046..a05859ec 100644 --- a/src/sh2.less +++ b/src/sh2.less @@ -223,9 +223,19 @@ html, body, #main { vertical-align: middle; } + .session-num { + color: #777; + font-size: 10px; + } + &.is-active { color: #ddd; font-weight: bold; + + .session-num { + color: #aaa; + font-weight: normal; + } } .sub-label { @@ -754,12 +764,16 @@ body .xterm .xterm-viewport { position: relative; top: -3px; color: #c4a000; + + &.status-init, &.status-disconnected { + color: #c4a000; + } &.status-connected { color: #4e9a06; } - &.status-error, &.status-disconnected { + &.status-error { color: #cc0000; } }