Implement auto-creation of ICS logon file
[xboard.git] / gtk / xoptions.c
index d5ade4c..f60f6a3 100644 (file)
@@ -244,7 +244,10 @@ SetWidgetState (Option *opt, int state)
 void
 SetWidgetLabel (Option *opt, char *buf)
 {
-    gtk_label_set_text(opt->handle, buf);
+    if(opt->type == Button) // Chat window uses this routine for changing button labels
+       gtk_button_set_label(opt->handle, buf);
+    else
+       gtk_label_set_text(opt->handle, buf);
 }
 
 void
@@ -438,7 +441,7 @@ CreateMenuPopup (Option *opt, int n, int def)
       return menu;
 }
 
-Option *typeIn; // kludge to distinguish type-in callback from input-box callback
+Option *icsBox; // kludge to distinguish type-in callback from input-box callback
 
 void
 CursorAtEnd (Option *opt)
@@ -447,21 +450,9 @@ CursorAtEnd (Option *opt)
 }
 
 static gboolean
-ICSKeyEvent(GtkWidget *widget, GdkEventKey *event, gpointer g)
-{
-    Option *opt = (Option *) g;
-    if(opt == typeIn) {
-       if(event->keyval == GDK_Return) {
-           char *val;
-           GetWidgetText(opt, &val);
-           TypeInDoneEvent(val);
-           PopDown(TransientDlg);
-           return TRUE;
-       }
-       return FALSE;
-    }
-
-    switch(event->keyval) {
+ICSKeyEvent (int keyval)
+{   // TODO_GTK: arrow-handling should really be integrated in type-in proc, and this should be a backe-end OK handler
+    switch(keyval) {
       case GDK_Return: IcsKey(0); return TRUE;
       case GDK_Up:     IcsKey(1); return TRUE;
       case GDK_Down:  IcsKey(-1); return TRUE;
@@ -613,10 +604,10 @@ AddHandler (Option *opt, DialogClass dlg, int nr)
       case 0: // history (now uses generic textview callback)
       case 1: // comment (likewise)
        break;
-      case 2: // move type-in
-       typeIn = opt;
       case 3: // input box
-       g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (ICSKeyEvent), (gpointer) opt);
+       icsBox = opt;
+      case 2: // move type-in
+       g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (TypeInProc), (gpointer) (dlg<<16 | (opt - dialogOptions[dlg])));
        break;
       case 5: // game list
        g_signal_connect(opt->handle, "button-press-event", G_CALLBACK (GameListEvent), (gpointer) 0 );
@@ -1205,7 +1196,7 @@ printf("n=%d, h=%d, w=%d\n",n,height,width);
             w = option[i].type == Spin || option[i].type == Fractional ? 70 : option[i].max ? option[i].max : 205;
            if(option[i].type == FileName || option[i].type == PathName) w -= 55;
 
-            if (option[i].type==TextBox && option[i].value > 80){                
+            if (option[i].type==TextBox && option[i].value > 80){
                 textview = gtk_text_view_new();                
                 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), option[i].min & T_WRAP ? GTK_WRAP_WORD : GTK_WRAP_NONE);
 #ifdef TODO_GTK
@@ -1219,6 +1210,7 @@ printf("n=%d, h=%d, w=%d\n",n,height,width);
                                                option[i].min & T_VSCRL ? GTK_POLICY_ALWAYS : GTK_POLICY_NEVER);
                 gtk_container_add(GTK_CONTAINER(sw), textview);
                 gtk_widget_set_size_request(GTK_WIDGET(sw), w, -1);
+                gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_OUT);
  
                 textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));                
                 /* check if label is empty */ 
@@ -1389,6 +1381,7 @@ printf("n=%d, h=%d, w=%d\n",n,height,width);
                 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
                 gtk_container_add(GTK_CONTAINER(sw), list);
                 gtk_widget_set_size_request(GTK_WIDGET(sw), option[i].max ? option[i].max : -1, option[i].value ? option[i].value : -1);
+                gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_OUT);
  
                 if(option[i].textValue) // generic callback for double-clicking listbox item
                     g_signal_connect(list, "button-press-event", G_CALLBACK(ListCallback), (gpointer) (dlgNr<<16 | i) );
@@ -1566,9 +1559,7 @@ SetInsertPos (Option *opt, int pos)
 void
 HardSetFocus (Option *opt)
 {
-#ifdef TODO_GTK
-    XSetInputFocus(xDisplay, XtWindow(opt->handle), RevertToPointerRoot, CurrentTime);
-#endif
+    FocusOnWidget(opt, 0); // second arg not used in GDK
 }