From: Arun Persaud Date: Sun, 18 Dec 2011 18:58:49 +0000 (-0800) Subject: Merge branch 'master' into v4.6.x X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=c43235f12d0731c9f81f0693fe02f0162edc29a1;hp=f5a68b1722d6f94be27df96d55d63a68ccb2f00a;p=xboard.git Merge branch 'master' into v4.6.x Conflicts: po/uk.po -- used latest version to resolve merge conflict --- diff --git a/args.h b/args.h index 61336fa..6ea0237 100644 --- a/args.h +++ b/args.h @@ -901,7 +901,7 @@ ParseArgs(GetFunc get, void *cl) while (ch == ' ' || ch == '=' || ch == ':' || ch == '\t') ch = get(cl); if (ch == NULLCHAR || ch == '\n') { - ExitArgError("No value provided for argument", argName, TRUE); + ExitArgError(_("No value provided for argument"), argName, TRUE); } q = argValue; if (ch == '{') { diff --git a/backend.h b/backend.h index 8b45b16..b93f81c 100644 --- a/backend.h +++ b/backend.h @@ -319,9 +319,17 @@ int Explode P((Board board, int fromX, int fromY, int toX, int toY)); typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, ResetButton, SaveButton, FileName, PathName, Slider, Message, Fractional, Label, Break, EndMark } Control; +/* Flags Option.min used for ComboBox: */ +#define COMBO_CALLBACK (1 << 0) +#define NO_GETTEXT (1 << 1) + +/* Flags for Option.min used for Button, SaveButton, EndMark: */ +#define SAME_ROW (1 << 0) +#define NO_OK (1 << 1) + typedef struct _OPT { // [HGM] options: descriptor of UCI-style option int value; // current setting, starts as default - int min; + int min; // Also used for flags int max; void *handle; // for use by front end void *target; // for use by front end diff --git a/filebrowser/selfile.c b/filebrowser/selfile.c index e6edfe4..729453b 100644 --- a/filebrowser/selfile.c +++ b/filebrowser/selfile.c @@ -883,7 +883,7 @@ XsraSelFile(toplevel, prompt, ok, cancel, failed, SFprepareToReturn(); return stderr; } - if ((*name_return)[strlen(*name_return)-1] != '/' && // [HGM] refuse directories + if ((!(*name_return)[0] || (*name_return)[strlen(*name_return)-1] != '/') && // [HGM] refuse directories (fp = SFopenFile(*name_return, mode, prompt, failed))) { SFprepareToReturn(); return fp; diff --git a/po/uk.po b/po/uk.po index af4de56..27ce55a 100644 --- a/po/uk.po +++ b/po/uk.po @@ -5,10 +5,10 @@ # Yuri Chornoivan , 2011. msgid "" msgstr "" -"Project-Id-Version: GNU xboard 4.6.0.20111101\n" +"Project-Id-Version: GNU xboard 4.6.0.20111203\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2011-12-03 08:20-0800\n" -"PO-Revision-Date: 2011-11-03 14:56+0200\n" +"PO-Revision-Date: 2011-12-08 18:41+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -40,7 +40,7 @@ msgstr "помилковий параметр searchTime %s" #: backend.c:1072 #, c-format msgid "Variant %s supported only in ICS mode" -msgstr "" +msgstr "Підтримку варіанта %s передбачено лише у режимі ICS" #: backend.c:1090 #, c-format @@ -61,7 +61,7 @@ msgstr "Помилковий файл позиції" #: backend.c:1377 msgid "Pick new game" -msgstr "" +msgstr "Виберіть нову гру" #: backend.c:1442 msgid "" @@ -77,7 +77,7 @@ msgstr "" #: backend.c:1456 msgid "Can't have a match with no chess programs" -msgstr "" +msgstr "Не можна розпочати матч, якщо не встановлено шахових програм" #: backend.c:1490 #, c-format @@ -124,9 +124,7 @@ msgstr "Робота режиму гри комп’ютером білими р #: backend.c:1641 msgid "TwoMachines mode requires a chess engine" -msgstr "" -"Режимом гри між двома комп’ютерами можна скористатися, лише якщо встановлено " -"шаховий рушій" +msgstr "Режимом гри між двома комп’ютерами можна скористатися, лише якщо встановлено шаховий рушій" #: backend.c:1646 msgid "TwoMachines mode does not work with ICS mode" @@ -156,7 +154,7 @@ msgstr "" #: backend.c:2159 #, c-format msgid "recognized '%s' (%d) as variant %s\n" -msgstr "" +msgstr "розпізнано «%s» (%d) як варіант %s\n" #: backend.c:2224 xboard.c:7310 msgid "Error writing to display" @@ -169,7 +167,7 @@ msgstr "" #: backend.c:3489 msgid "Error gathering move list: two headers" -msgstr "" +msgstr "Помилка під час збирання списку ходів: два заголовки" #: backend.c:3503 #, c-format @@ -178,13 +176,13 @@ msgstr "Рейтинги з заголовка: Б %d, Ч %d\n" #: backend.c:3536 msgid "Error gathering move list: nested" -msgstr "" +msgstr "Помилка під час збирання списку ходів: вкладеність" #: backend.c:3639 backend.c:6667 backend.c:11582 backend.c:13197 #: backend.c:13274 backend.c:13336 #, c-format msgid "%s vs. %s" -msgstr "" +msgstr "%s проти %s" #: backend.c:3768 msgid "Illegal move (rejected by ICS)" @@ -193,7 +191,7 @@ msgstr "Некоректний хід (заборонено ICS)" #: backend.c:4057 #, c-format msgid "%s [%s] vs. %s [%s]" -msgstr "" +msgstr "%s [%s] проти %s [%s]" #: backend.c:4106 msgid "Connection closed by ICS" @@ -219,8 +217,7 @@ msgstr "" #: backend.c:4192 backend.c:9437 msgid "Game too long; increase MAX_MOVES and recompile" -msgstr "" -"Гра є занадто довгою. Збільшіть значення MAX_MOVES і перезберіть програму." +msgstr "Гра є занадто довгою. Збільшіть значення MAX_MOVES і перезберіть програму." #: backend.c:4286 msgid "Error gathering move list: extra board" @@ -234,12 +231,12 @@ msgstr "Не вдалося обробити хід «%s» з ICS" #: backend.c:4781 #, c-format msgid "%s (%d) vs. %s (%d) {%d %d}" -msgstr "" +msgstr "%s (%d) проти %s (%d) {%d %d}" #: backend.c:4785 #, c-format msgid "%s (%d) vs. %s (%d) {%d %d %s}" -msgstr "" +msgstr "%s (%d) проти %s (%d) {%d %d %s}" #: backend.c:4964 #, c-format @@ -248,11 +245,11 @@ msgstr "" #: backend.c:5034 msgid "You cannot do this while you are playing or observing" -msgstr "" +msgstr "Ця дія неможлива у режимі гри або спостереження" #: backend.c:5912 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" -msgstr "" +msgstr "Повторно зберіть програму з підтримкою цих значень BOARD_RANKS і BOARD_FILES!" #: backend.c:6264 msgid "You are playing Black" @@ -303,7 +300,7 @@ msgstr "Рушієм визначення пар повернуто некоре #: backend.c:7924 #, c-format msgid "Illegal move \"%s\" from %s machine" -msgstr "" +msgstr "Некоректний хід «%s» від комп’ютера %s" #: backend.c:8149 msgid "Bad FEN received from engine" @@ -317,13 +314,12 @@ msgstr "У %s не передбачено аналізу" #: backend.c:8359 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" -msgstr "" -"Недозволений хід «%s» (у реєстрації ходу відмовлено шаховою програмою %s)" +msgstr "Недозволений хід «%s» (у реєстрації ходу відмовлено шаховою програмою %s)" #: backend.c:8384 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" -msgstr "" +msgstr "Не вдалося запустити шахову програму %s %s на %s: %s\n" #: backend.c:8405 #, c-format @@ -346,6 +342,8 @@ msgid "" "Machine offers a draw\n" "Select Action / Draw to agree" msgstr "" +"Комп’ютером запропоновано нічию\n" +"Скористайтеся пунктом меню «Дія->Нічия», щоб погодитися" #: backend.c:8667 msgid "failed writing PV" @@ -354,7 +352,7 @@ msgstr "" #: backend.c:8966 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" -msgstr "" +msgstr "Неоднозначний хід у виведених ICS даних: «%s»" #: backend.c:8976 #, c-format @@ -582,17 +580,17 @@ msgstr "" #: backend.c:12900 #, c-format msgid "Still need to make moves for both games\n" -msgstr "" +msgstr "Слід зробити ходити у обох іграх\n" #: backend.c:12904 #, c-format msgid "Still need to make moves for all %d games\n" -msgstr "" +msgstr "Слід зробити ходити у всіх %d іграх\n" #: backend.c:12911 #, c-format msgid "Still need to make a move for game %s\n" -msgstr "" +msgstr "Слід зробити хід у грі %s\n" #: backend.c:12917 #, c-format @@ -607,7 +605,7 @@ msgstr "Програма готова до надсилання пошти\n" #: backend.c:12924 #, c-format msgid "Still need to make moves for games %s\n" -msgstr "" +msgstr "Слід зробити ходи у іграх %s\n" #: backend.c:13081 msgid "Edit comment" @@ -629,12 +627,12 @@ msgstr "Зараз хід білих" #: backend.c:13319 #, c-format msgid "%s vs. %s (%d/%d%s)" -msgstr "" +msgstr "%s проти %s (%d/%d%s)" #: backend.c:13325 backend.c:13330 #, c-format msgid "%s vs. %s (%d-%d-%d)" -msgstr "" +msgstr "%s проти %s (%d-%d-%d)" #: backend.c:13365 #, c-format @@ -683,11 +681,11 @@ msgstr "Цю клітинку зайнято" #: backend.c:13998 backend.c:14024 msgid "There is no pending offer on this move" -msgstr "" +msgstr "У черзі немає пропозицій щодо цього ходу" #: backend.c:14060 backend.c:14071 msgid "Your opponent is not out of time" -msgstr "" +msgstr "У вашого суперника ще залишився час" #: backend.c:14137 msgid "You must make your move before offering a draw" @@ -699,7 +697,7 @@ msgstr "Ви не вивчаєте гру" #: backend.c:14471 msgid "You can't revert while pausing" -msgstr "" +msgstr "Скасовувати ходи у призупиненій грі не можна" #: backend.c:14525 backend.c:14532 msgid "It is your turn" @@ -716,27 +714,27 @@ msgstr "Немає підказки" #: backend.c:15058 #, c-format msgid "Error writing to %s chess program" -msgstr "" +msgstr "Помилка під час спроби запису даних до шахової програми %s" #: backend.c:15061 backend.c:15097 #, c-format msgid "%s program exits in draw position (%s)" -msgstr "" +msgstr "Програма %s завершила роботу у нічийній позиції (%s)" #: backend.c:15093 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" -msgstr "" +msgstr "Помилка: шахова програма %s (%s) несподівано завершила роботу" #: backend.c:15110 #, c-format msgid "Error reading from %s chess program (%s)" -msgstr "" +msgstr "Помилка під час спроби читання даних з шахової програми %s (%s)" #: backend.c:15523 #, c-format msgid "%s engine has too many options\n" -msgstr "" +msgstr "Для рушія %s передбачено занадто багато параметрів\n" #: backend.c:15676 msgid "Displayed move is not current" @@ -748,19 +746,19 @@ msgstr "Не вдалося обробити хід" #: backend.c:15814 backend.c:15836 msgid "Both flags fell" -msgstr "" +msgstr "Обидва прапорці впали" #: backend.c:15816 msgid "White's flag fell" -msgstr "" +msgstr "Прапорець білих впав" #: backend.c:15838 msgid "Black's flag fell" -msgstr "" +msgstr "Прапорець чорних впав" #: backend.c:15972 msgid "Clock adjustment not allowed in auto-flag mode" -msgstr "" +msgstr "Коригування годинника у режимі автоматичних прапорців заборонене" #: backend.c:16782 msgid "Bad FEN position in clipboard" @@ -768,33 +766,32 @@ msgstr "" #: book.c:512 book.c:686 msgid "Polyglot book not valid" -msgstr "" +msgstr "Некоректна бібліотека позицій" #: book.c:572 msgid "Book Fault" -msgstr "" +msgstr "Помилка бібліотеки позицій" #: book.c:689 msgid "Hash keys are different" -msgstr "" +msgstr "Ключі хешів не збігаються" #: engineoutput.c:97 -#, fuzzy, c-format +#, c-format msgid "Engine Output" msgstr "Вивід рушія" #: filebrowser/selfile.c:301 -#, fuzzy msgid "Browse" -msgstr "вибрати" +msgstr "Вибрати" #: filebrowser/selfile.c:404 msgid "Filter on extensions:" -msgstr "" +msgstr "Фільтр суфіксів:" #: filebrowser/selfile.c:785 msgid "Pathname:" -msgstr "" +msgstr "Назва шляху:" #: filebrowser/selfile.c:789 xgamelist.c:761 xgamelist.c:886 xoptions.c:904 #: xoptions.c:1207 @@ -802,13 +799,12 @@ msgid "OK" msgstr "Гаразд" #: filebrowser/selfile.c:793 -#, fuzzy msgid "Cancel" -msgstr "скасувати" +msgstr "Скасувати" #: filebrowser/selfile.c:837 msgid "XsraSelFile: can't get current directory" -msgstr "" +msgstr "XsraSelFile: не вдалося отримати назву поточного каталогу" #: xboard.c:615 msgid "New Game Ctrl+N" @@ -1028,7 +1024,7 @@ msgstr "Перегравання F12" #: xboard.c:702 msgid "Call Flag F5" -msgstr "" +msgstr "Перевірити прапорець F5" #: xboard.c:703 msgid "Draw F6" @@ -1152,11 +1148,11 @@ msgstr "Анімація ходів Ctrl+Shift+A" #: xboard.c:752 msgid "Auto Flag Ctrl+Shift+F" -msgstr "" +msgstr "Автопрапорець Ctrl+Shift+F" #: xboard.c:753 xoptions.c:387 msgid "Auto Flip View" -msgstr "" +msgstr "Автоматичне обертання дошки" #: xboard.c:754 xoptions.c:388 msgid "Blindfold" @@ -1192,7 +1188,7 @@ msgstr "Періодичні оновлення" #: xboard.c:765 msgid "Ponder Next Move Ctrl+Shift+P" -msgstr "" +msgstr "Обдумати наступний хід Ctrl+Shift+P" #: xboard.c:766 msgid "Popup Exit Message" @@ -1333,7 +1329,7 @@ msgstr "Чорні" #: xboard.c:1214 #, c-format msgid "%s: Can't access XPM directory %s\n" -msgstr "" +msgstr "%s: не вдалося отримати доступ до каталогу XPM %s\n" #: xboard.c:1237 #, c-format @@ -1362,22 +1358,22 @@ msgstr "%s: нерозпізнаний колір %s\n" #: xboard.c:1360 #, c-format msgid "%s: can't parse foreground color in `%s'\n" -msgstr "" +msgstr "%s: не вдалося обробити колір тексту у «%s»\n" #: xboard.c:1746 xboard.c:2496 #, c-format msgid "%s: titleWidget geometry error %d %d %d %d %d\n" -msgstr "" +msgstr "%s: помилка у геометричних параметрах titleWidget — %d %d %d %d %d\n" #: xboard.c:1855 #, c-format msgid "%s: can't parse color names; disabling colorization\n" -msgstr "" +msgstr "%s: не вдалося обробити назви кольорів; розфарбовування вимкнено\n" #: xboard.c:2032 #, c-format msgid "%s: can't cd to CHESSDIR: " -msgstr "" +msgstr "%s: не вдалося перейти до каталогу CHESSDIR: " #: xboard.c:2041 #, c-format @@ -1396,12 +1392,12 @@ msgstr "%s: помилковий синтаксис boardSize %s\n" #: xboard.c:2116 #, c-format msgid "%s: unrecognized boardSize name %s\n" -msgstr "" +msgstr "%s: невідома назва boardSize %s\n" #: xboard.c:2141 #, c-format msgid "Error expanding path name \"%s\"\n" -msgstr "" +msgstr "Помилка під час спроби розгортання адреси каталогу «%s»\n" #: xboard.c:2146 #, c-format @@ -1418,27 +1414,27 @@ msgstr "Найближчий розмір %s: %d\n" #: xboard.c:2227 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" -msgstr "" +msgstr "%s: занадто мало кольорів; спробуємо монохромний режим\n" #: xboard.c:2243 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" -msgstr "" +msgstr "білий піксель = 0x%lx, чорний піксель = 0x%lx\n" #: xboard.c:2462 xboard.c:2472 #, c-format msgid "%s: messageWidget geometry error %d %d %d %d %d\n" -msgstr "" +msgstr "%s: помилка у геометричних параметрах messageWidget — %d %d %d %d %d\n" #: xboard.c:3229 #, c-format msgid "Unable to create font set for %s.\n" -msgstr "" +msgstr "Не вдалося створити набір шрифтів для %s.\n" #: xboard.c:3254 #, c-format msgid "%s: no fonts match pattern %s\n" -msgstr "" +msgstr "%s: взірцеві %s не відповідає жоден шрифт\n" #: xboard.c:3296 #, c-format @@ -1454,7 +1450,7 @@ msgstr "%s: помилка завантаження XIM!\n" #: xboard.c:3546 msgid "XIM pieces cannot be used in monochrome mode" -msgstr "" +msgstr "У монохромному режимі не можна користуватися фігурами XIM" #: xboard.c:3550 #, c-format @@ -1488,17 +1484,17 @@ msgstr "Виконано.\n" #: xboard.c:3663 msgid "XPM pieces cannot be used in monochrome mode" -msgstr "" +msgstr "У монохромному режимі не можна користуватися фігурами XPM" #: xboard.c:3673 #, c-format msgid "No builtin XPM pieces of size %d\n" -msgstr "" +msgstr "Немає вбудованих фігур XPM розміру %d\n" #: xboard.c:3683 #, c-format msgid "Error %d loading XPM image \"%s\"\n" -msgstr "" +msgstr "Помилка %d під час спроби завантаження зображення XPM «%s»\n" #: xboard.c:3696 #, c-format @@ -1512,37 +1508,37 @@ msgstr "" #: xboard.c:3719 #, c-format msgid "(Replace by File:%s:) " -msgstr "" +msgstr "(Замінено на File:%s:) " #: xboard.c:3726 xboard.c:3749 xboard.c:3760 #, c-format msgid "Error %d loading XPM file \"%s\"\n" -msgstr "" +msgstr "Помилка %d під час спроби завантаження файла XPM «%s»\n" #: xboard.c:3850 #, c-format msgid "Can't open bitmap file %s" -msgstr "" +msgstr "Не вдалося відкрити файл растрового зображення %s" #: xboard.c:3853 #, c-format msgid "Invalid bitmap in file %s" -msgstr "" +msgstr "Некоректне растрове зображення у файлі %s" #: xboard.c:3856 #, c-format msgid "Ran out of memory reading bitmap file %s" -msgstr "" +msgstr "Під час читання растрового зображення %s було вичерпано обсяг пам’яті" #: xboard.c:3860 #, c-format msgid "Unknown XReadBitmapFile error %d on file %s" -msgstr "" +msgstr "Невідома помилка XReadBitmapFile %d під час обробки файла %s" #: xboard.c:3864 #, c-format msgid "%s: %s...using built-in\n" -msgstr "" +msgstr "%s: %s… використовуємо вбудоване\n" #: xboard.c:3868 #, c-format @@ -1554,9 +1550,8 @@ msgid "Drop" msgstr "Викинути" #: xboard.c:5035 -#, fuzzy msgid "could not open: " -msgstr "Не вдалося обробити хід" +msgstr "Не вдалося відкрити:" #: xboard.c:5061 xboard.c:5187 xboard.c:5235 xboard.c:7141 xboard.c:7182 #: xgamelist.c:767 xgamelist.c:875 xoptions.c:900 xoptions.c:1211 @@ -1601,7 +1596,7 @@ msgstr "Капітан" #: xboard.c:5184 xboard.c:5243 msgid "Defer" -msgstr "" +msgstr "Зменшити пріоритет" #: xboard.c:5306 msgid "ok" @@ -1609,28 +1604,28 @@ msgstr "гаразд" #: xboard.c:5503 msgid "Load game file name?" -msgstr "" +msgstr "Назва файла гри для завантаження?" #: xboard.c:5569 msgid "Load position file name?" -msgstr "" +msgstr "Назва файла позиції для завантаження?" #: xboard.c:5578 msgid "Save game file name?" -msgstr "" +msgstr "Назва файли гри для збереження?" #: xboard.c:5590 msgid "Save position file name?" -msgstr "" +msgstr "Назва файла позиції для збереження?" #: xboard.c:5821 msgid "Can't open temp file" -msgstr "" +msgstr "Не вдалося відкрити тимчасовий файл даних" #: xboard.c:5911 #, c-format msgid "You are not observing a game" -msgstr "" +msgstr "Ви не спостерігаєте за грою" #: xboard.c:5916 #, c-format @@ -1640,7 +1635,7 @@ msgstr "" #: xboard.c:5930 #, c-format msgid "ICS engine analyze starting... \n" -msgstr "" +msgstr "Розпочинаємо аналіз за допомогою рушія ICS… \n" #: xboard.c:6831 msgid " (with Zippy code)" @@ -1655,8 +1650,7 @@ msgid "" "Enhancements Copyright 1992-2009 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" -"%s is free software and carries NO WARRANTY;see the file COPYING for more " -"information." +"%s is free software and carries NO WARRANTY;see the file COPYING for more information." msgstr "" #: xboard.c:7028 @@ -1678,11 +1672,11 @@ msgstr "Нотатка" #: xboard.c:7095 #, c-format msgid "AskQuestionProc needed 4 parameters, got %d\n" -msgstr "" +msgstr "AskQuestionProc потребує 4 параметрів, отримано %d\n" #: xboard.c:7128 msgid "Error writing to chess program" -msgstr "" +msgstr "Помилка під час спроби запису даних до шахової програми" #: xboard.c:7180 msgid "enter" @@ -1691,30 +1685,30 @@ msgstr "увійти" #: xboard.c:7384 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" -msgstr "" +msgstr "Помилка: невідомий користувач %s (шлях — %s)\n" #: xboard.c:7778 msgid "Socket support is not configured in" -msgstr "" +msgstr "Підтримку сокетів ще не налаштовано" #: xboard.c:7869 msgid "internal rcmd not implemented for Unix" -msgstr "" +msgstr "вбудований rcmd ще не реалізовано для Unix" #: xboard.c:8649 #, c-format msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n" -msgstr "" +msgstr "Анімація ходів: фігура %d перестрибує з %d,%d до %d,%d \n" #: xboard.c:8650 #, c-format msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n" -msgstr "" +msgstr "Анімація ходів: фігура %d пересувається з %d,%d до %d,%d \n" #: xengineoutput.c:145 #, c-format msgid "Error %d loading icon image\n" -msgstr "" +msgstr "Помилка %d під час завантаження зображення піктограми\n" #: xengineoutput.c:358 msgid "NPS" @@ -1734,7 +1728,7 @@ msgstr "Граф оцінки позиції" #: xgamelist.c:114 msgid "no games matched your request" -msgstr "" +msgstr "вашому запиту не відповідає жодна гра" #: xgamelist.c:193 xgamelist.c:423 msgid "thresholds" @@ -1742,7 +1736,7 @@ msgstr "порогові значення" #: xgamelist.c:204 xgamelist.c:450 xgamelist.c:457 msgid "find position" -msgstr "" +msgstr "знайти позицію" #: xgamelist.c:215 xgamelist.c:435 msgid "next" @@ -1787,7 +1781,7 @@ msgstr "Не вибрано гри" #: xgamelist.c:438 msgid "Can't go forward any further" -msgstr "" +msgstr "Подальший рух вперед списком неможливий" #: xgamelist.c:442 msgid "prev" @@ -1795,12 +1789,11 @@ msgstr "попер" #: xgamelist.c:541 msgid "There is no game list" -msgstr "" +msgstr "Немає списку ходів гри" #: xgamelist.c:679 -#, fuzzy msgid "Game list not loaded or empty" -msgstr "Ще не завантажено жодної гри" +msgstr "Список гри не завантажено або цей список є порожнім" #: xgamelist.c:775 msgid "No tag selected" @@ -1819,9 +1812,8 @@ msgid "factory" msgstr "" #: xgamelist.c:815 -#, fuzzy msgid "Game-list options" -msgstr "Загальні параметри" +msgstr "Параметри списку гри" #: xhistory.c:145 msgid "Move list" @@ -1829,15 +1821,15 @@ msgstr "Список ходів" #: xoptions.c:303 msgid "First Engine" -msgstr "" +msgstr "Перший рушій" #: xoptions.c:303 msgid "Second Engine" -msgstr "" +msgstr "Другий рушій" #: xoptions.c:352 msgid "Tournament file:" -msgstr "" +msgstr "Файл турніру:" #: xoptions.c:353 msgid "Sync after round (for concurrent playing of a single" @@ -1848,29 +1840,28 @@ msgid "Sync after cycle tourney with multiple XBoards)" msgstr "" #: xoptions.c:355 -#, fuzzy msgid "Tourney participants:" -msgstr "Недостатньо учасників" +msgstr "Учасники турніру:" #: xoptions.c:356 msgid "Select Engine:" -msgstr "" +msgstr "Виберіть рушій:" #: xoptions.c:357 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" -msgstr "" +msgstr "Система турніру (0 = кругова, 1 = почергова):" #: xoptions.c:358 msgid "Number of tourney cycles (or Swiss rounds):" -msgstr "" +msgstr "Кількість раундів турніру (швейцарських раундів):" #: xoptions.c:359 msgid "Default Number of Games in Match (or Pairing):" -msgstr "" +msgstr "Типова кількість ігор у матчі:" #: xoptions.c:360 msgid "Pause between Match Games (msec):" -msgstr "" +msgstr "Проміжок між іграми у матчі (у мілісекундах):" #: xoptions.c:361 msgid "Save Tourney Games on:" @@ -1882,15 +1873,15 @@ msgstr "" #: xoptions.c:363 msgid "Game Number (-1 or -2 = Auto-Increment):" -msgstr "" +msgstr "Номер гри (-1 або -2 = автоматичне збільшення):" #: xoptions.c:364 msgid "File with Start Positions:" -msgstr "" +msgstr "Файл з початковими позиціями:" #: xoptions.c:365 msgid "Position Number (-1 or -2 = Auto-Increment):" -msgstr "" +msgstr "Номер позиції (-1 або -2 = автоматичне збільшення):" #: xoptions.c:366 msgid "Rewind Index after this many Games (0 = never):" @@ -1898,7 +1889,7 @@ msgstr "" #: xoptions.c:367 msgid "Disable own engine books by default" -msgstr "" +msgstr "Типово вимкнути власні бібліотеки позицій рушія" #: xoptions.c:368 msgid "Replace Engine" @@ -1918,11 +1909,11 @@ msgstr "" #: xoptions.c:385 msgid "Animate Moving" -msgstr "" +msgstr "Анімація ходів" #: xoptions.c:386 msgid "Auto Flag" -msgstr "" +msgstr "Автопрапорець" #: xoptions.c:389 msgid "Drop Menu" @@ -1930,7 +1921,7 @@ msgstr "" #: xoptions.c:390 msgid "Hide Thinking from Human" -msgstr "" +msgstr "Приховувати обмірковування від людини" #: xoptions.c:391 msgid "Highlight Dragging (Show Move Targets)" @@ -1938,15 +1929,15 @@ msgstr "" #: xoptions.c:393 msgid "Highlight with Arrow" -msgstr "" +msgstr "Позначити за допомогою стрілки" #: xoptions.c:396 msgid "Periodic Updates (in Analysis Mode)" -msgstr "" +msgstr "Періодичні оновлення (у режимі аналізу)" #: xoptions.c:397 xoptions.c:504 msgid "Ponder Next Move" -msgstr "" +msgstr "Обдумати наступний хід" #: xoptions.c:398 msgid "Popup Exit Messages" @@ -1962,11 +1953,11 @@ msgstr "Показувати координати" #: xoptions.c:402 msgid "Show Target Squares" -msgstr "" +msgstr "Показувати клітинки призначення" #: xoptions.c:403 msgid "Test Legality" -msgstr "" +msgstr "Перевіряти коректність" #: xoptions.c:404 msgid "Flash Moves (0 = no flashing):" @@ -1978,7 +1969,7 @@ msgstr "" #: xoptions.c:406 msgid "Animation Speed (high = slow):" -msgstr "" +msgstr "Швидкість анімації (висока = повільно):" #: xoptions.c:407 msgid "Zoom factor in Evaluation Graph:" @@ -2007,11 +1998,11 @@ msgstr "" #: xoptions.c:448 msgid "wild castle" -msgstr "" +msgstr "дика тура" #: xoptions.c:449 msgid "Superchess" -msgstr "" +msgstr "Супершахи" #: xoptions.c:450 msgid "no castle" @@ -2071,7 +2062,7 @@ msgstr "сокіл (10x8)" #: xoptions.c:464 msgid "two kings" -msgstr "" +msgstr "два королі" #: xoptions.c:465 msgid "Capablanca (10x8)" @@ -2123,7 +2114,7 @@ msgstr "" #: xoptions.c:477 msgid "Number of Board Files:" -msgstr "" +msgstr "Кількість файлів дошки:" #: xoptions.c:478 msgid "Holdings Size:" @@ -2140,15 +2131,15 @@ msgstr "" #: xoptions.c:505 msgid "Maximum Number of CPUs per Engine:" -msgstr "" +msgstr "Максимальна кількість процесорів на рушій:" #: xoptions.c:506 msgid "Polygot Directory:" -msgstr "" +msgstr "Каталог бібліотек Polygot:" #: xoptions.c:507 msgid "Hash-Table Size (MB):" -msgstr "" +msgstr "Розмір таблиці хешів (у МБ):" #: xoptions.c:508 msgid "Nalimov EGTB Path:" @@ -2156,7 +2147,7 @@ msgstr "" #: xoptions.c:509 msgid "EGTB Cache Size (MB):" -msgstr "" +msgstr "Розмір кешу EGTB (у МБ):" #: xoptions.c:510 msgid "Use GUI Book" @@ -2164,7 +2155,7 @@ msgstr "" #: xoptions.c:511 msgid "Opening-Book Filename:" -msgstr "" +msgstr "Назва файла даних дебютів:" #: xoptions.c:512 msgid "Book Depth (moves):" @@ -2192,7 +2183,7 @@ msgstr "" #: xoptions.c:522 msgid "Draw if Insufficient Mating Material" -msgstr "" +msgstr "Нічия, якщо недостатньо фігур для мату" #: xoptions.c:523 msgid "Adjudicate Trivial Draws (3-Move Delay)" @@ -2256,7 +2247,7 @@ msgstr "Мовчазна гра" #: xoptions.c:548 msgid "Seek Graph" -msgstr "" +msgstr "Граф викликів" #: xoptions.c:549 msgid "Auto-Refresh Seek Graph" @@ -2312,7 +2303,7 @@ msgstr "" #: xoptions.c:564 msgid "Kibitz Text Colors:" -msgstr "" +msgstr "Кольори тексту порад:" #: xoptions.c:565 msgid "Tell Text Colors:" @@ -2320,7 +2311,7 @@ msgstr "" #: xoptions.c:566 msgid "Challenge Text Colors:" -msgstr "" +msgstr "Кольори тексту викликів:" #: xoptions.c:567 msgid "Request Text Colors:" @@ -2568,7 +2559,7 @@ msgstr "Запит:" #: xoptions.c:672 msgid "Seek:" -msgstr "" +msgstr "Пошук:" #: xoptions.c:752 msgid "White Piece Color:" @@ -2577,22 +2568,22 @@ msgstr "" #: xoptions.c:754 xoptions.c:760 xoptions.c:766 xoptions.c:772 xoptions.c:778 #: xoptions.c:784 msgid "R" -msgstr "" +msgstr "Ч" #: xoptions.c:755 xoptions.c:761 xoptions.c:767 xoptions.c:773 xoptions.c:779 #: xoptions.c:785 msgid "G" -msgstr "" +msgstr "З" #: xoptions.c:756 xoptions.c:762 xoptions.c:768 xoptions.c:774 xoptions.c:780 #: xoptions.c:786 msgid "B" -msgstr "" +msgstr "С" #: xoptions.c:757 xoptions.c:763 xoptions.c:769 xoptions.c:775 xoptions.c:781 #: xoptions.c:787 msgid "D" -msgstr "" +msgstr "Т" #: xoptions.c:758 msgid "Black Piece Color:" @@ -2675,9 +2666,8 @@ msgid "Board Options" msgstr "" #: xoptions.c:1295 -#, fuzzy msgid "Adjudicate non-ICS Games" -msgstr "Визначити виграш білих" +msgstr "" #: xoptions.c:1306 msgid "Common Engine Settings" @@ -2697,11 +2687,11 @@ msgstr "Параметри партії" #: xoptions.c:1441 msgid "clear" -msgstr "" +msgstr "спорожнити" #: xoptions.c:1442 xoptions.c:1494 msgid "save changes" -msgstr "" +msgstr "зберегти зміни" #: xoptions.c:1501 msgid "Edit book" @@ -2709,7 +2699,7 @@ msgstr "Змінити книгу" #: xoptions.c:1541 msgid "ICS input box" -msgstr "" +msgstr "Поле введення ICS" #: xoptions.c:1568 msgid "Type a move" @@ -2717,7 +2707,7 @@ msgstr "" #: xoptions.c:1599 msgid "Engine Settings" -msgstr "" +msgstr "Параметри рушія" #: xoptions.c:1629 msgid "Select engine from list:" @@ -2749,7 +2739,7 @@ msgstr "" #: xoptions.c:1636 msgid "UCI" -msgstr "" +msgstr "UCI" #: xoptions.c:1637 msgid "WB protocol v1 (do not wait for engine features)" @@ -2776,16 +2766,14 @@ msgid "Load engine" msgstr "" #: xoptions.c:1679 -#, fuzzy msgid "shuffle" -msgstr "Перемішати" +msgstr "перемішати" #: xoptions.c:1680 msgid "Start-position number:" msgstr "Номер початкової позиції:" #: xoptions.c:1681 -#, fuzzy msgid "randomize" msgstr "випадково" diff --git a/xboard.c b/xboard.c index 4d10b37..b74f81c 100644 --- a/xboard.c +++ b/xboard.c @@ -387,6 +387,9 @@ void StopExaminingProc P((Widget w, XEvent *event, String *prms, void UploadProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void BackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void ForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void TempBackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +void TempForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); +Boolean TempBackwardActive = False; void ToStartProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void ToEndProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void RevertProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); @@ -444,7 +447,6 @@ void AboutGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void AboutProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DebugProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void NothingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); -void Iconify P((Widget w, XEvent *event, String *prms, Cardinal *nprms)); void DisplayMove P((int moveNumber)); void DisplayTitle P((char *title)); void ICSInitScript P((void)); @@ -921,7 +923,6 @@ XtActionsRec boardActions[] = { { "PieceMenuPopup", PieceMenuPopup }, { "WhiteClock", WhiteClock }, { "BlackClock", BlackClock }, - { "Iconify", Iconify }, { "ResetProc", ResetProc }, { "NewVariantProc", NewVariantProc }, { "LoadGameProc", LoadGameProc }, @@ -982,6 +983,8 @@ XtActionsRec boardActions[] = { { "UploadProc", UploadProc }, { "BackwardProc", BackwardProc }, { "ForwardProc", ForwardProc }, + { "TempBackwardProc", TempBackwardProc }, + { "TempForwardProc", TempForwardProc }, { "ToStartProc", ToStartProc }, { "ToEndProc", ToEndProc }, { "RevertProc", RevertProc }, @@ -1108,14 +1111,13 @@ char globalTranslations[] = :CtrlH: HideThinkingProc() \n " #endif "\ - :-: Iconify() \n \ :F1: ManProc() \n \ :F2: FlipViewProc() \n \ - .: BackwardProc() \n \ - .: ForwardProc() \n \ - Shift1: AskQuestionProc(\"Direct command\",\ + :Ctrl.: TempBackwardProc() \n \ + :Ctrl.: TempForwardProc() \n \ + :Ctrl1: AskQuestionProc(\"Direct command\",\ \"Send to chess program:\",,1) \n \ - Shift2: AskQuestionProc(\"Direct command\",\ + :Ctrl2: AskQuestionProc(\"Direct command\",\ \"Send to second chess program:\",,2) \n"; char boardTranslations[] = @@ -5641,11 +5643,19 @@ SendPositionSelection(Widget w, Atom *selection, Atom *target, *value_return = targets_tmp; *type_return = XA_ATOM; *length_return = 2; +#if 0 + // This code leads to a read of value_return out of bounds on 64-bit systems. + // Other code which I have seen always sets *format_return to 32 independent of + // sizeof(Atom) without adjusting *length_return. For instance see TextConvertSelection() + // at http://cgit.freedesktop.org/xorg/lib/libXaw/tree/src/Text.c -- BJ *format_return = 8 * sizeof(Atom); if (*format_return > 32) { *length_return *= *format_return / 32; *format_return = 32; } +#else + *format_return = 32; +#endif return True; } else { return False; @@ -5750,11 +5760,19 @@ SendGameSelection(Widget w, Atom *selection, Atom *target, *value_return = targets_tmp; *type_return = XA_ATOM; *length_return = 2; +#if 0 + // This code leads to a read of value_return out of bounds on 64-bit systems. + // Other code which I have seen always sets *format_return to 32 independent of + // sizeof(Atom) without adjusting *length_return. For instance see TextConvertSelection() + // at http://cgit.freedesktop.org/xorg/lib/libXaw/tree/src/Text.c -- BJ *format_return = 8 * sizeof(Atom); if (*format_return > 32) { *length_return *= *format_return / 32; *format_return = 32; } +#else + *format_return = 32; +#endif return True; } else { return False; @@ -6244,6 +6262,37 @@ void BackwardProc(w, event, prms, nprms) BackwardEvent(); } +void TempBackwardProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + if (!TempBackwardActive) { + TempBackwardActive = True; + BackwardEvent(); + } +} + +void TempForwardProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + /* Check to see if triggered by a key release event for a repeating key. + * If so the next queued event will be a key press of the same key at the same time */ + if (XEventsQueued(xDisplay, QueuedAfterReading)) { + XEvent next; + XPeekEvent(xDisplay, &next); + if (next.type == KeyPress && next.xkey.time == event->xkey.time && + next.xkey.keycode == event->xkey.keycode) + return; + } + ForwardEvent(); + TempBackwardActive = False; +} + void ToStartProc(w, event, prms, nprms) Widget w; XEvent *event; @@ -6870,19 +6919,6 @@ void NothingProc(w, event, prms, nprms) return; } -void Iconify(w, event, prms, nprms) - Widget w; - XEvent *event; - String *prms; - Cardinal *nprms; -{ - Arg args[16]; - - fromX = fromY = -1; - XtSetArg(args[0], XtNiconic, True); - XtSetValues(shellWidget, args, 1); -} - void DisplayMessage(message, extMessage) char *message, *extMessage; { diff --git a/xboard.png b/xboard.png index 5643471..e43fbc2 100644 Binary files a/xboard.png and b/xboard.png differ diff --git a/xboard.texi b/xboard.texi index da12bd2..1bf613c 100644 --- a/xboard.texi +++ b/xboard.texi @@ -183,9 +183,7 @@ and defers reading and writing of user settings to a user-specific file like ~/.xboardrc in the user's home directory. When XBoard is iconized, its graphical icon is a white knight if -it is White's turn to move, a black knight if it is Black's turn. See -Iconize in @ref{Keys} below if you have problems getting this -feature to work. +it is White's turn to move, a black knight if it is Black's turn. @node Menus @chapter Menus, buttons, and keys @@ -1584,14 +1582,12 @@ Shows the current XBoard version number. @cindex Keys @cindex Shortcut keys @table @asis -@item Iconize -Pressing the @kbd{-} key iconizes XBoard. The graphical -icon displays a white knight if it is White's move, or a black knight -if it is Black's move. If your X window manager displays only text -icons, not graphical ones, check its documentation; there is probably -a way to enable graphical icons. If you get black and white reversed, -we would like to hear about it; see @ref{Problems} below for -instructions on how to report this problem. +@item Show last move +By hitting @kbd{Ctrl+.} the last move will be re-animated. +@item Send a command directly to the chess engine +Using @kbd{Ctrl+1} a popup window will prompt you for a command that +will be send directly to the first chess engines. @kbd{Ctrl+2} does the +same for a second chess engine, if present. @item Load Next Game @cindex Load Next Game, Menu Item Loads the next game from the last game record file you loaded. @@ -1636,7 +1632,7 @@ BlindfoldProc, BookProc, CallFlagProc, CopyGameProc, CopyPositionProc, DebugProc, DeclineProc, DrawProc, EditCommentProc, EditGameProc, EditPositionProc, EditTagsProc, EnterKeyProc, FlashMovesProc, FlipViewProc, ForwardProc, GetMoveListProc, HighlightLastMoveProc, -HintProc, Iconify, IcsAlarmProc, IcsClientProc, IcsInputBoxProc, +HintProc, IcsAlarmProc, IcsClientProc, IcsInputBoxProc, InfoProc, LoadGameProc, LoadNextGameProc, LoadNextPositionProc, LoadPositionProc, LoadPrevGameProc, LoadPrevPositionProc, LoadSelectedProc, MachineBlackProc, MachineWhiteProc, MailMoveProc, @@ -2672,7 +2668,7 @@ These and most other standard Xt options are accepted. @item -noGUI @cindex noGUI, option Suppresses all GUI functions of XBoard -(to speed up automated ultra-fast engine-engine games, which you don’t want to watch). +(to speed up automated ultra-fast engine-engine games, which you don't want to watch). There will be no board or clock updates, no printing of moves, and no update of the icon on the task bar in this mode. @item -movesound/-xmovesound or -ringBellAfterMoves true/false diff --git a/xoptions.c b/xoptions.c index 36cf573..926f905 100644 --- a/xoptions.c +++ b/xoptions.c @@ -155,7 +155,7 @@ void SpinCallback(w, client_data, call_data) String name, val; Arg args[16]; char buf[MSG_SIZ], *p; - int j; + int j = 0; // Initialiasation is necessary because the text value may be non-numeric causing the scanf conversion to fail int data = (intptr_t) client_data; XtSetArg(args[0], XtNlabel, &name); @@ -163,7 +163,7 @@ void SpinCallback(w, client_data, call_data) GetWidgetText(¤tOption[data], &val); sscanf(val, "%d", &j); - if (strcmp(name, "browse") == 0) { + if (strcmp(name, _("browse")) == 0) { char *q=val, *r; for(r = ""; *q; q++) if(*q == '.') r = q; else if(*q == '/') r = ""; // last dot after last slash if(!strcmp(r, "") && !currentCps && currentOption[data].type == FileName && currentOption[data].textValue) @@ -200,36 +200,45 @@ void ComboSelect(w, addr, index) // callback for all combo items int j = 255 & (intptr_t) addr; values[i] = j; // store in temporary, for transfer at OK - XtSetArg(args[0], XtNlabel, _(((char**)currentOption[i].textValue)[j])); + + if(currentOption[i].min & NO_GETTEXT) + XtSetArg(args[0], XtNlabel, ((char**)currentOption[i].textValue)[j]); + else + XtSetArg(args[0], XtNlabel, _(((char**)currentOption[i].textValue)[j])); + XtSetValues(currentOption[i].handle, args, 1); - if(currentOption[i].min & 1 && !currentCps && comboCallback) (comboCallback)(i); + if(currentOption[i].min & COMBO_CALLBACK && !currentCps && comboCallback) (comboCallback)(i); } -void CreateComboPopup(parent, name, n, mb) +void CreateComboPopup(parent, option, n) Widget parent; - String name; + Option *option; int n; - char *mb[]; { int i=0, j; Widget menu, entry; Arg args[16]; - menu = XtCreatePopupShell(name, simpleMenuWidgetClass, + menu = XtCreatePopupShell(option->name, simpleMenuWidgetClass, parent, NULL, 0); j = 0; XtSetArg(args[j], XtNwidth, 100); j++; // XtSetArg(args[j], XtNright, XtChainRight); j++; - while (mb[i] != NULL) { - XtSetArg(args[j], XtNlabel, _(mb[i])); - entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass, - menu, args, j+1); - XtAddCallback(entry, XtNcallback, - (XtCallbackProc) ComboSelect, - (caddr_t)(intptr_t) (256*n+i)); + char **mb = (char **) option->textValue; + while (mb[i] != NULL) + { + if (option->min & NO_GETTEXT) + XtSetArg(args[j], XtNlabel, mb[i]); + else + XtSetArg(args[j], XtNlabel, _(mb[i])); + entry = XtCreateManagedWidget((String) mb[i], smeBSBObjectClass, + menu, args, j+1); + XtAddCallback(entry, XtNcallback, + (XtCallbackProc) ComboSelect, + (caddr_t)(intptr_t) (256*n+i)); i++; - } + } } @@ -353,7 +362,8 @@ Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &appData.roundSync, "", NULL, CheckBox, N_("Sync after round (for concurrent playing of a single") }, { 0, 0, 0, NULL, (void*) &appData.cycleSync, "", NULL, CheckBox, N_("Sync after cycle tourney with multiple XBoards)") }, { 0xD, 150, 0, NULL, (void*) &engineName, "", NULL, TextBox, N_("Tourney participants:") }, -{ 0, 1, 0, NULL, (void*) &engineChoice, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, +{ 0, COMBO_CALLBACK | NO_GETTEXT, + 0, NULL, (void*) &engineChoice, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, { 0, 0, 10, NULL, (void*) &appData.tourneyType, "", NULL, Spin, N_("Tourney type (0 = round-robin, 1 = gauntlet):") }, { 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles (or Swiss rounds):") }, { 0, 1, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match (or Pairing):") }, @@ -628,7 +638,7 @@ char *soundNames[] = { char *soundFiles[] = { // sound files corresponding to above names "", "$", - "*", // kludge alert: as first thing in the dialog readout this is replaced with the user-given .WAV filename + NULL, // kludge alert: as first thing in the dialog readout this is replaced with the user-given .WAV filename "honkhonk.wav", "cymbal.wav", "ding1.wav", @@ -828,6 +838,7 @@ int GenericReadout(int selected) case Fractional: XtSetArg(args[0], XtNstring, &val); XtGetValues(currentOption[i].handle, args, 1); + x = 0.0; // Initialise because sscanf() will fail if non-numeric text is entered sscanf(val, "%f", &x); if(x > currentOption[i].max) x = currentOption[i].max; if(x < currentOption[i].min) x = currentOption[i].min; @@ -944,7 +955,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) if(!n) { DisplayNote(_("Engine has no options")); currentCps = NULL; return 0; } if(n > 50) width = 4; else if(n>24) width = 2; else width = 1; height = n / width + 1; - if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = 1; // OK on same line + if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = SAME_ROW; // OK on same line currentOption[n].type = EndMark; currentOption[n].target = NULL; // delimit list by callback-less end mark } i = 0; @@ -1034,12 +1045,14 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; if(option[i].type == FileName || option[i].type == PathName) { - w = 50; msg = _("browse"); + msg = _("browse"); + /* automatically scale to width of text */ + XtSetArg(args[j], XtNwidth, (XtArgVal) NULL ); j++; } else { - XtSetArg(args[j], XtNheight, 10); j++; w = 20; msg = "+"; + XtSetArg(args[j], XtNheight, 10); j++; + XtSetArg(args[j], XtNwidth, w); j++; } - XtSetArg(args[j], XtNwidth, w); j++; edit = XtCreateManagedWidget(msg, commandWidgetClass, form, args, j); XtAddCallback(edit, XtNcallback, SpinCallback, (XtPointer)(intptr_t) i); @@ -1084,10 +1097,14 @@ GenericPopUp(Option *option, char *title, int dlgNr) case SaveButton: case Button: j=0; - XtSetArg(args[j], XtNfromVert, option[i].min & 1 ? lastrow : last); j++; + if(option[i].min & SAME_ROW) { + XtSetArg(args[j], XtNfromVert, lastrow); j++; + XtSetArg(args[j], XtNfromHoriz, last); j++; + } else { + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; + } XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; - if(option[i].min & 1) { XtSetArg(args[j], XtNfromHoriz, last); j++; } - else { XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; } if(option[i].max) { XtSetArg(args[j], XtNwidth, option[i].max); j++; } if(option[i].textValue) { // special for buttons of New Variant dialog XtSetArg(args[j], XtNsensitive, appData.noChessProgram || option[i].value < 0 @@ -1130,7 +1147,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNlabel, _(((char**)option[i].textValue)[option[i].value])); j++; option[i].handle = (void*) (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j)); - CreateComboPopup(last, option[i].name, i, (char **) option[i].textValue); + CreateComboPopup(last, option + i, i); values[i] = option[i].value; break; case Break: @@ -1170,7 +1187,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) for(h=0; hxkey), buf, 10, &sym, NULL); XQueryKeymap(xDisplay,keys); metaL = XKeysymToKeycode(xDisplay, XK_Meta_L); metaR = XKeysymToKeycode(xDisplay, XK_Meta_R); - if ( n == 1 && *buf >= 32 && !(keys[metaL>>3]&1<<(metaL&7)) && !(keys[metaR>>3]&1<<(metaR&7))) { // printable, no alt + ctrlL = XKeysymToKeycode(xDisplay, XK_Control_L); + ctrlR = XKeysymToKeycode(xDisplay, XK_Control_R); + if ( n == 1 && *buf >= 32 // printable + && !(keys[metaL>>3]&1<<(metaL&7)) && !(keys[metaR>>3]&1<<(metaR&7)) // no alt key pressed + && !(keys[ctrlL>>3]&1<<(ctrlL&7)) && !(keys[ctrlR>>3]&1<<(ctrlR&7)) // no ctrl key pressed + ) + { if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box if(shells[4]) { // box already exists: append to current contents char *p, newText[MSG_SIZ]; @@ -1626,7 +1650,7 @@ int InstallOK(int n) } Option installOptions[] = { -{ 0, 0, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, +{ 0, NO_GETTEXT, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") }, { 0, 0, 0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") }, { 0, 0, 0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN player tags of engine-engine games") },