X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=a2cd3c5a3be222a48e79e8b5b5360b2da7b53932;hb=fd5232356b95d30941de9dfd49444a1953eaa38a;hp=39805c9348f7951a571386a781311fb34437e316;hpb=5d0f6311ab9e40e026d6ba26fa15e4ba6a5aead3;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 39805c9..a2cd3c5 100644 --- a/dialogs.c +++ b/dialogs.c @@ -1706,7 +1706,7 @@ PromotionPopUp (char choice) //---------------------------- Chat Windows ---------------------------------------------- -static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT]; +static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT], *inputs[MAX_CHAT], *icsLine, *tmpLine; static int activePartner, hidden = 1; void ChatSwitch P((int n)); @@ -1796,6 +1796,10 @@ IcsHist (int n, Option *opt, DialogClass dlg) if(hidden) BoardToTop(); else PaneSwitch(); break; + case 14: + for(chat=0; chat < MAX_CHAT; chat++) if(!chatPartner[chat][0]) break; + if(chat < MAX_CHAT) ChatSwitch(chat + 1); + break; case 10: // chat = start = (activePartner - hidden + MAX_CHAT) % MAX_CHAT; while(!dirty[chat = (chat + 1)%MAX_CHAT]) if(chat == start) break; @@ -1871,17 +1875,30 @@ ChatOK (int n) } void +DelayedSetText () +{ + SetWidgetText(&chatOptions[CHAT_IN], tmpLine, ChatDlg); + SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine)); +} + +void DelayedScroll () { // If we do this immediately it does it before shrinking the memo, so the lower half remains hidden (Ughh!) SetInsertPos(&chatOptions[CHAT_ICS], 999999); + SetWidgetText(&chatOptions[CHAT_IN], tmpLine, ChatDlg); + SetInsertPos(&chatOptions[CHAT_IN], strlen(tmpLine)); } void ChatSwitch (int n) { int i, j; + char *v; Show(&chatOptions[CHAT_PANE], 0); // show if(hidden) ScheduleDelayedEvent(DelayedScroll, 50); // Awful! + else ScheduleDelayedEvent(DelayedSetText, 50); + GetWidgetText(&chatOptions[CHAT_IN], &v); + if(hidden) { ASSIGN(icsLine, v); } else { ASSIGN(inputs[activePartner], v); } hidden = 0; activePartner = --n; if(!texts[n]) texts[n] = strdup(""); @@ -1893,14 +1910,24 @@ ChatSwitch (int n) SetWidgetLabel(&chatOptions[++j], *chatPartner[i] ? chatPartner[i] : _("New Chat")); SetColor(dirty[i] ? "#FFC000" : "#FFFFFF", &chatOptions[j]); } - SetWidgetText(&chatOptions[CHAT_IN], "", ChatDlg); + if(!inputs[n]) { ASSIGN(inputs[n], ""); } +// SetWidgetText(&chatOptions[CHAT_IN], inputs[n], ChatDlg); // does not work (in this widget only) +// SetInsertPos(&chatOptions[CHAT_IN], strlen(inputs[n])); + tmpLine = inputs[n]; // for the delayed event HardSetFocus(&chatOptions[strcmp(chatPartner[n], "") ? CHAT_IN : CHAT_PARTNER], 0); } void PaneSwitch () { + char *v; Show(&chatOptions[CHAT_PANE], hidden = 1); // hide + GetWidgetText(&chatOptions[CHAT_IN], &v); + ASSIGN(inputs[activePartner], v); + if(!icsLine) { ASSIGN(icsLine, ""); } + tmpLine = icsLine; ScheduleDelayedEvent(DelayedSetText, 50); +// SetWidgetText(&chatOptions[CHAT_IN], icsLine, ChatDlg); // does not work (in this widget only) +// SetInsertPos(&chatOptions[CHAT_IN], strlen(icsLine)); } static void @@ -1926,7 +1953,8 @@ ChatProc () { if(GenericPopUp(chatOptions, _("ICS Interaction"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel)) AddHandler(&chatOptions[CHAT_PARTNER], ChatDlg, 2), AddHandler(&chatOptions[CHAT_IN], ChatDlg, 2); // treats return as OK - PaneSwitch(); HardSetFocus(&chatOptions[CHAT_IN], 0); + Show(&chatOptions[CHAT_PANE], hidden = 1); // hide + HardSetFocus(&chatOptions[CHAT_IN], 0); MarkMenu("View.OpenChatWindow", ChatDlg); CursorAtEnd(&chatOptions[CHAT_IN]); }