snprintf(buf2 + (q-p), MSG_SIZ -(q-p), "%s%s", clickedWord, q+5);
p = buf2;
}
+ if(!strcmp(p, "$copy")) { // special case for copy selection
+ CopySomething(clickedWord);
+ } else
if(!strcmp(p, "$chat")) { // special case for opening chat
NewChat(clickedWord);
} else
//---------------------------- Chat Windows ----------------------------------------------
static char *line, *memo, *chatMemo, *partner, *texts[MAX_CHAT], dirty[MAX_CHAT], *inputs[MAX_CHAT], *icsLine, *tmpLine;
-static int activePartner, hidden = 1;
+static int activePartner;
+int hidden = 1;
void ChatSwitch P((int n));
int ChatOK P((int n));
int
ContextMenu (Option *opt, int button, int x, int y, char *text, int index)
{ // callback for ICS-output clicks; handles button 3, passes on other events
- char *start, *end;
int h;
if(button == -3) return TRUE; // supress default GTK context menu on up-click
if(button != 3) return FALSE;
- start = end = text + index; // figure out what text was clicked
- while(isalnum(*end)) end++;
- while(start > text && isalnum(start[-1])) start--;
- clickedWord[0] = NULLCHAR;
- if(end-start >= 80) end = start + 80; // intended for small words and numbers
- strncpy(clickedWord, start, end-start); clickedWord[end-start] = NULLCHAR;
+ if(index == -1) { // pre-existing selection in memo
+ strncpy(clickedWord, text, MSG_SIZ);
+ } else { // figure out what word was clicked
+ char *start, *end;
+ start = end = text + index;
+ while(isalnum(*end)) end++;
+ while(start > text && isalnum(start[-1])) start--;
+ clickedWord[0] = NULLCHAR;
+ if(end-start >= 80) end = start + 80; // intended for small words and numbers
+ strncpy(clickedWord, start, end-start); clickedWord[end-start] = NULLCHAR;
+ }
click = !shellUp[TextMenuDlg]; // request auto-popdown of textmenu when we popped it up
h = wpTextMenu.height; // remembered height of text menu
if(h <= 0) h = 65; // when not available, position w.r.t. top
if(hidden) BoardToTop();
else PaneSwitch();
break;
+ case 15:
+ NewChat(lastTalker);
+ break;
case 14:
for(chat=0; chat < MAX_CHAT; chat++) if(!chatPartner[chat][0]) break;
if(chat < MAX_CHAT) ChatSwitch(chat + 1);
// from here on it could be back-end
if(line[strlen(line)-1] == '\n') line[strlen(line)-1] = NULLCHAR;
SaveInHistory(line);
- if(hidden) snprintf(buf, MSG_SIZ, "%s\n", line); else // command for ICS
+ if(hidden || !*chatPartner[activePartner]) snprintf(buf, MSG_SIZ, "%s\n", line); else // command for ICS
if(!strcmp("whispers", chatPartner[activePartner]))
snprintf(buf, MSG_SIZ, "whisper %s\n", line); // WHISPER box uses "whisper" to send
else if(!strcmp("shouts", chatPartner[activePartner]))
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
Show(&chatOptions[CHAT_PANE], hidden = 1); // hide
- HardSetFocus(&chatOptions[CHAT_IN], 0);
+// HardSetFocus(&chatOptions[CHAT_IN], 0);
MarkMenu("View.OpenChatWindow", ChatDlg);
CursorAtEnd(&chatOptions[CHAT_IN]);
}