updated copyright for 2016
[xboard.git] / gtk / xoptions.c
index 67675ff..7e91a24 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * xoptions.c -- Move list window, part of X front end for XBoard
  *
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
  * ------------------------------------------------------------------------
  *
  * GNU XBoard is free software: you can redistribute it and/or modify
@@ -444,10 +444,24 @@ CreateMenuPopup (Option *opt, int n, int def)
 
            gtk_accelerator_parse(mb[i].accel, &accelerator_key, &accelerator_mods);
 #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
-           }
+          if(accelerator_mods & GDK_CONTROL_MASK &&
+             accelerator_key != 'v' &&          // don't use Cmd+V as this is a OS text edit command
+             accelerator_key != 'c' &&           // and Cmd+C
+             accelerator_key != 'x' &&          // and CMD+X
+             accelerator_key != 'a'           // and CMD+A
+             ) {  // in OSX use Meta (Cmd) where Linux uses Ctrl
+              accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
+              accelerator_mods |= GDK_META_MASK;     // set Meta flag
+                 } else if (accelerator_mods & GDK_CONTROL_MASK &&
+                                        accelerator_key == 'v' ||
+                                        accelerator_key == 'c' ||
+                                        accelerator_key == 'x' ||
+                                        accelerator_key == 'a'
+                                        ) { // For these conflicting commands, lets make them alt-cmd
+                         accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
+                         accelerator_mods |= GDK_META_MASK;
+                         accelerator_mods |= GDK_MOD1_MASK;
+                 } 
 #endif
            gtk_widget_add_accelerator (GTK_WIDGET(entry), "activate",GtkAccelerators,
                                        accelerator_key, accelerator_mods, GTK_ACCEL_VISIBLE);
@@ -502,6 +516,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 +1032,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 +1078,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 +1449,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+3, top, 0);
+            Pack(hbox, table, label, left, left+r, top, 0);
            break;
           case SaveButton:
           case Button:
@@ -1563,12 +1582,16 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
            top--;
            msg = _(option[i].name); // write name on the menu button
 #ifndef OSXAPP
-           if(tinyLayout) { strcpy(def, msg); def[tinyLayout] = NULLCHAR; msg = def; } // clip menu text to keep menu bar small
+           if(tinyLayout) { // clip menu text to keep menu bar small
+               int clip = tinyLayout + 1;
+               strcpy(def, msg + (msg[clip-1] == '_'));
+               def[clip] = NULLCHAR; msg = def;
+           }
 #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);