Use Ctl-E in ICS chat to end chat
[xboard.git] / gtk / xoptions.c
index 5c35c8e..1ce5442 100644 (file)
@@ -51,7 +51,7 @@ extern char *getenv();
 #include <cairo/cairo-xlib.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
-#ifdef __APPLE__
+#ifdef OSXAPP
 #  include <gtkmacintegration/gtkosxapplication.h>
 #endif
 
@@ -425,7 +425,7 @@ CreateMenuPopup (Option *opt, int n, int def)
       {
        char *msg = mb[i].string;
        if(!msg) break;
-#ifdef __APPLE__
+#ifdef OSXAPP
        if(!strcmp(msg, "Quit ")) continue;             // Quit item will appear automatically in App menu
        if(!strcmp(msg, "About XBoard")) msg = "About"; // 'XBoard' will be appended automatically when moved to App menu 1st item
 #endif
@@ -443,7 +443,7 @@ CreateMenuPopup (Option *opt, int n, int def)
            GdkModifierType accelerator_mods;
 
            gtk_accelerator_parse(mb[i].accel, &accelerator_key, &accelerator_mods);
-#ifdef __APPLE__
+#ifdef OSXAPP
            if(accelerator_mods & GDK_CONTROL_MASK) {  // in OSX use Meta where Linux uses Ctrl
                accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
                accelerator_mods |= GDK_META_MASK;     // set Meta flag
@@ -502,6 +502,8 @@ TypeInProc (GtkWidget *widget, GdkEventKey *event, gpointer gdata)
     shiftState = event->state & GDK_SHIFT_MASK;
     controlState = event->state & GDK_CONTROL_MASK;
     switch(event->keyval) {
+      case 'e':       return (controlState && IcsHist( 5, opt, dlg));
+      case 'h':       return (controlState && IcsHist( 8, opt, dlg));
       case 'n':       return (controlState && IcsHist(14, opt, dlg));
       case 'o':       return (controlState && IcsHist(15, opt, dlg));
       case GDK_Tab:   IcsHist(10, opt, dlg); break;
@@ -1016,7 +1018,9 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata)
     gtkfilter     = gtk_file_filter_new();
     gtkfilter_all = gtk_file_filter_new();
 
-    char fileext[MSG_SIZ];
+    char fileext[MSG_SIZ], *filter = currentOption[opt_i].textValue;
+
+    StartDir(filter, NULL); // change to start directory for this file type
 
     /* select file or folder depending on option_type */
     if (currentOption[opt_i].type == PathName)
@@ -1060,9 +1064,10 @@ void BrowseGTK(GtkWidget *widget, gpointer gdata)
         filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
         entry = currentOption[opt_i].handle;
         gtk_entry_set_text (GTK_ENTRY (entry), filename);
+       StartDir(filter, filename); // back to original, and remember this one
         g_free (filename);
-
       }
+    else StartDir(filter, ""); // change back to original directory
     gtk_widget_destroy (dialog);
     dialog = NULL;
 }
@@ -1430,7 +1435,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
                g_signal_connect(label, "button-press-event", G_CALLBACK(MemoEvent), (gpointer) &option[i]);
                gtk_widget_set_sensitive(label, TRUE);
            }
-            Pack(hbox, table, label, left, left+2, top, 0);
+            Pack(hbox, table, label, left, left+3, top, 0);
            break;
           case SaveButton:
           case Button:
@@ -1529,7 +1534,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            break;
          case Graph:
            option[i].handle = (void*) (graph = gtk_drawing_area_new());
-//            gtk_widget_set_size_request(graph, option[i].max, option[i].value);
+            gtk_widget_set_size_request(graph, option[i].max, option[i].value);
            if(0){ GtkAllocation a;
                a.x = 0; a.y = 0; a.width = option[i].max, a.height = option[i].value;
                gtk_widget_set_allocation(graph, &a);
@@ -1562,13 +1567,13 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
          case DropDown:
            top--;
            msg = _(option[i].name); // write name on the menu button
-#ifndef __APPLE__
+#ifndef OSXAPP
            if(tinyLayout) { strcpy(def, msg); def[tinyLayout] = NULLCHAR; msg = def; } // clip menu text to keep menu bar small
 #endif
 //         XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name));  j++;
 //         XtSetArg(args[j], XtNlabel, msg);  j++;
            option[i].handle = (void*)
-               (menuButton = gtk_menu_item_new_with_label(msg));
+               (menuButton = gtk_menu_item_new_with_mnemonic(msg));
            gtk_widget_show(menuButton);
            option[i].textValue = (char*) (menu = CreateMenuPopup(option + i, i + 256*dlgNr, -1));
            gtk_menu_item_set_submenu(GTK_MENU_ITEM (menuButton), menu);
@@ -1590,7 +1595,7 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            break;
          case BarEnd:
            top--;
-#ifndef __APPLE__
+#ifndef OSXAPP
             gtk_table_attach(GTK_TABLE(table), menuBar, left, left+r, top, top+1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 1);
 
            if(option[i].target) ((ButtonCallback*)option[i].target)(boxStart); // callback that can make sizing decisions
@@ -1627,6 +1632,11 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
     }
 
     gtk_table_resize(GTK_TABLE(table), top+1, r);
+    if(dlgNr == BoardWindow && appData.fixedSize) { // inhibit sizing
+       GtkWidget *h = gtk_hbox_new(FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (h), table, TRUE, FALSE, 2);
+       table = h;
+    }
     if(pane)
        gtk_box_pack_start (GTK_BOX (pane), table, expandable, TRUE, 0);
     else
@@ -1666,6 +1676,9 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
        gtk_window_resize(GTK_WINDOW(dialog), wp[dlgNr]->width, wp[dlgNr]->height);
     }
 
+    for(i=0; option[i].type != EndMark; i++) if(option[i].type == Graph)
+       gtk_widget_set_size_request(option[i].handle, -1, -1); // remove size requests after realization, so user can shrink
+
     return 1; // tells caller he must do initialization (e.g. add specific event handlers)
 }