Equip Board Options dialog with themes listbox
[xboard.git] / gtk / xboard.c
index 8017262..60cbe0a 100644 (file)
@@ -425,6 +425,12 @@ ParseColor (int n, char *name)
   if(colorVariable[n]) *(char**)colorVariable[n] = strdup(name);
 }
 
+char *
+Col2Text (int n)
+{
+    return *(char**)colorVariable[n];
+}
+
 void
 ParseTextAttribs (ColorClass cc, char *s)
 {
@@ -523,6 +529,12 @@ GetActualPlacement (GtkWidget *shell, WindowPlacement *wp)
 }
 
 void
+GetPlacement (DialogClass dlg, WindowPlacement *wp)
+{ // wrapper to shield back-end from widget type
+  if(shellUp[dlg]) GetActualPlacement(shells[dlg], wp);
+}
+
+void
 GetWindowCoords ()
 { // wrapper to shield use of window handles from back-end (make addressible by number?)
   // In XBoard this will have to wait until awareness of window parameters is implemented
@@ -533,6 +545,7 @@ GetWindowCoords ()
   if(shellUp[GameListDlg]) GetActualPlacement(shells[GameListDlg], &wpGameList);
   if(shellUp[CommentDlg]) GetActualPlacement(shells[CommentDlg], &wpComment);
   if(shellUp[TagsDlg]) GetActualPlacement(shells[TagsDlg], &wpTags);
+  GetPlacement(ChatDlg, &wpConsole); if(appData.icsActive) wpConsole.visible = shellUp[ChatDlg];
 }
 
 void
@@ -1121,6 +1134,11 @@ main (int argc, char **argv)
       EngineOutputPopUp();
     }
 
+    if( wpConsole.visible && appData.icsActive ) {
+      ChatProc();
+      BoardToTop();
+    }
+
     InitBackEnd2();
 
     if (errorExitStatus == -1) {
@@ -1359,7 +1377,7 @@ EnableNamedMenuItem (char *menuRef, int state)
 {
     MenuItem *item = MenuNameToItem(menuRef);
 
-    if(item) gtk_widget_set_sensitive(item->handle, state);
+    if(item && item->handle) gtk_widget_set_sensitive(item->handle, state);
 }
 
 void
@@ -1560,6 +1578,7 @@ DragProc ()
            if(shellUp[HistoryDlg]) CoDrag(shells[HistoryDlg], &wpMoveHistory);
            if(shellUp[EvalGraphDlg]) CoDrag(shells[EvalGraphDlg], &wpEvalGraph);
            if(shellUp[GameListDlg]) CoDrag(shells[GameListDlg], &wpGameList);
+           if(shellUp[ChatDlg]) CoDrag(shells[ChatDlg], &wpConsole);
         }
        wpMain = wpNew;
        DrawPosition(True, NULL);
@@ -1775,7 +1794,7 @@ void MoveTypeInProc(eventkey)
     buf[0]=eventkey->keyval;
     buf[1]='\0';
     if (eventkey->keyval > 32 && eventkey->keyval < 256)
-       BoxAutoPopUp (buf);
+       ConsoleAutoPopUp (buf);
 }
 
 #ifdef TODO_GTK
@@ -1957,6 +1976,11 @@ DoInputCallback(io, cond, data)
        count = read(is->fd, is->unused,
                     INPUT_SOURCE_BUF_SIZE - (is->unused - is->buf));
        if (count <= 0) {
+           if(count == 0 && is->kind == CPReal && shells[ChatDlg]) { // [HGM] absence of terminal is no error if ICS Console present
+               RemoveInputSource(is); // cease reading stdin
+               stdoutClosed = TRUE;   // suppress future output
+               return True;
+           } 
            (is->func)(is, is->closure, is->buf, count, count ? errno : 0);
            return True;
        }