| | 806 | /* Prefs - copied straight from main-x11.c and hacked. |
|---|
| | 807 | * It'd probably be better to use something more gtkish, |
|---|
| | 808 | * but at lest we'll have prefs. */ |
|---|
| | 809 | |
|---|
| | 810 | static void save_prefs(void) |
|---|
| | 811 | { |
|---|
| | 812 | FILE *fff; |
|---|
| | 813 | int i; |
|---|
| | 814 | int x,y; |
|---|
| | 815 | |
|---|
| | 816 | /* Open the settings file */ |
|---|
| | 817 | fff = my_fopen(settings, "w"); |
|---|
| | 818 | |
|---|
| | 819 | /* Oops */ |
|---|
| | 820 | if (!fff) return; |
|---|
| | 821 | |
|---|
| | 822 | /* Header */ |
|---|
| | 823 | fprintf(fff, "# %s GTK settings\n\n", VERSION_NAME); |
|---|
| | 824 | |
|---|
| | 825 | /* Number of term windows to open */ |
|---|
| | 826 | fprintf(fff, "TERM_WINS=%d\n\n", term_windows_open); |
|---|
| | 827 | |
|---|
| | 828 | /* Save window prefs */ |
|---|
| | 829 | for (i = 0; i < MAX_TERM_DATA; i++) |
|---|
| | 830 | { |
|---|
| | 831 | term_data *td = &data[i]; |
|---|
| | 832 | |
|---|
| | 833 | if (!td->t.mapped_flag) continue; |
|---|
| | 834 | |
|---|
| | 835 | /* Header */ |
|---|
| | 836 | fprintf(fff, "# Term %d\n", i); |
|---|
| | 837 | |
|---|
| | 838 | |
|---|
| | 839 | gtk_window_get_position(GTK_WINDOW(td->window), &x, &y); |
|---|
| | 840 | |
|---|
| | 841 | /* |
|---|
| | 842 | * This doesn't seem to work under various WMs |
|---|
| | 843 | * since the decoration messes the position up |
|---|
| | 844 | * |
|---|
| | 845 | * Hack -- Use saved window positions. |
|---|
| | 846 | * This means that we won't remember ingame repositioned |
|---|
| | 847 | * windows, but also means that WMs won't screw predefined |
|---|
| | 848 | * positions up. -CJN- |
|---|
| | 849 | */ |
|---|
| | 850 | |
|---|
| | 851 | /* Window specific location (x) */ |
|---|
| | 852 | fprintf(fff, "AT_X_%d=%d\n", i, x); |
|---|
| | 853 | |
|---|
| | 854 | /* Window specific location (y) */ |
|---|
| | 855 | fprintf(fff, "AT_Y_%d=%d\n", i, y); |
|---|
| | 856 | |
|---|
| | 857 | /* Window specific cols */ |
|---|
| | 858 | fprintf(fff, "COLS_%d=%d\n", i, td->cols); |
|---|
| | 859 | |
|---|
| | 860 | /* Window specific rows */ |
|---|
| | 861 | fprintf(fff, "ROWS_%d=%d\n", i, td->rows); |
|---|
| | 862 | |
|---|
| | 863 | /* Window specific font name */ |
|---|
| | 864 | fprintf(fff, "FONT_%d=%s\n", i, pango_font_description_to_string(td->font)); |
|---|
| | 865 | |
|---|
| | 866 | /* Window specific tile width */ |
|---|
| | 867 | fprintf(fff, "TILE_WIDTH_%d=%d\n", i, td->tile_wid); |
|---|
| | 868 | |
|---|
| | 869 | /* Window specific tile height */ |
|---|
| | 870 | fprintf(fff, "TILE_HEIGHT_%d=%d\n", i, td->tile_hgt); |
|---|
| | 871 | |
|---|
| | 872 | /* Footer */ |
|---|
| | 873 | fprintf(fff, "\n"); |
|---|
| | 874 | } |
|---|
| | 875 | |
|---|
| | 876 | /* Close */ |
|---|
| | 877 | (void)my_fclose(fff); |
|---|
| | 878 | } |
|---|
| | 879 | |
|---|
| | 880 | static int check_env_i(char* name, int i, int dfault) |
|---|
| | 881 | { |
|---|
| | 882 | cptr str; |
|---|
| | 883 | int val; |
|---|
| | 884 | char buf[1024]; |
|---|
| | 885 | |
|---|
| | 886 | sprintf(buf, name, i); |
|---|
| | 887 | str = getenv(buf); |
|---|
| | 888 | val = (str != NULL) ? atoi(str) : -1; |
|---|
| | 889 | |
|---|
| | 890 | if (val <= 0) val = dfault; |
|---|
| | 891 | |
|---|
| | 892 | return val; |
|---|
| | 893 | } |
|---|
| | 894 | |
|---|
| | 895 | static int get_value(cptr buf) |
|---|
| | 896 | { |
|---|
| | 897 | cptr str; |
|---|
| | 898 | int i; |
|---|
| | 899 | |
|---|
| | 900 | str = strstr(buf, "="); |
|---|
| | 901 | i = (str != NULL) ? atoi(str + 1) : -1; |
|---|
| | 902 | |
|---|
| | 903 | return i; |
|---|
| | 904 | } |
|---|
| | 905 | |
|---|
| | 906 | static void load_prefs(term_data *td, int i) |
|---|
| | 907 | { |
|---|
| | 908 | cptr font = ""; |
|---|
| | 909 | |
|---|
| | 910 | int x = 0; |
|---|
| | 911 | int y = 0; |
|---|
| | 912 | |
|---|
| | 913 | int cols = 80; |
|---|
| | 914 | int rows = 24; |
|---|
| | 915 | |
|---|
| | 916 | cptr str; |
|---|
| | 917 | |
|---|
| | 918 | int val; |
|---|
| | 919 | |
|---|
| | 920 | FILE *fff; |
|---|
| | 921 | |
|---|
| | 922 | char buf[1024]; |
|---|
| | 923 | char cmd[40]; |
|---|
| | 924 | char font_name[256]; |
|---|
| | 925 | |
|---|
| | 926 | int line = 0; |
|---|
| | 927 | |
|---|
| | 928 | |
|---|
| | 929 | |
|---|
| | 930 | /* Build the filename and open the file */ |
|---|
| | 931 | path_build(settings, sizeof(settings), ANGBAND_DIR_USER, "gtk-settings.prf"); |
|---|
| | 932 | fff = my_fopen(settings, "r"); |
|---|
| | 933 | |
|---|
| | 934 | /* File exists */ |
|---|
| | 935 | if ((fff) && (!ignore_prefs)) |
|---|
| | 936 | { |
|---|
| | 937 | /* Process the file */ |
|---|
| | 938 | while (0 == my_fgets(fff, buf, sizeof(buf))) |
|---|
| | 939 | { |
|---|
| | 940 | /* Count lines */ |
|---|
| | 941 | line++; |
|---|
| | 942 | |
|---|
| | 943 | /* Skip "empty" lines, "blank" lines, and comments */ |
|---|
| | 944 | if (!buf[0]) continue; |
|---|
| | 945 | if (isspace((unsigned char)buf[0])) continue; |
|---|
| | 946 | if (buf[0] == '#') continue; |
|---|
| | 947 | |
|---|
| | 948 | /* Window specific location (x) */ |
|---|
| | 949 | sprintf(cmd, "AT_X_%d", i); |
|---|
| | 950 | |
|---|
| | 951 | if (prefix(buf, cmd)) |
|---|
| | 952 | { |
|---|
| | 953 | x = get_value(buf); |
|---|
| | 954 | continue; |
|---|
| | 955 | } |
|---|
| | 956 | |
|---|
| | 957 | /* Window specific location (y) */ |
|---|
| | 958 | sprintf(cmd, "AT_Y_%d", i); |
|---|
| | 959 | |
|---|
| | 960 | if (prefix(buf, cmd)) |
|---|
| | 961 | { |
|---|
| | 962 | y = get_value(buf); |
|---|
| | 963 | continue; |
|---|
| | 964 | } |
|---|
| | 965 | |
|---|
| | 966 | /* Window specific cols */ |
|---|
| | 967 | sprintf(cmd, "COLS_%d", i); |
|---|
| | 968 | |
|---|
| | 969 | if (prefix(buf, cmd)) |
|---|
| | 970 | { |
|---|
| | 971 | val = get_value(buf); |
|---|
| | 972 | if (val > 0) cols = val; |
|---|
| | 973 | continue; |
|---|
| | 974 | } |
|---|
| | 975 | |
|---|
| | 976 | |
|---|
| | 977 | /* Window specific rows */ |
|---|
| | 978 | sprintf(cmd, "ROWS_%d", i); |
|---|
| | 979 | |
|---|
| | 980 | if (prefix(buf, cmd)) |
|---|
| | 981 | { |
|---|
| | 982 | val = get_value(buf); |
|---|
| | 983 | if (val > 0) rows = val; |
|---|
| | 984 | continue; |
|---|
| | 985 | } |
|---|
| | 986 | |
|---|
| | 987 | /* Window specific font name */ |
|---|
| | 988 | sprintf(cmd, "FONT_%d", i); |
|---|
| | 989 | |
|---|
| | 990 | if (prefix(buf, cmd)) |
|---|
| | 991 | { |
|---|
| | 992 | str = strstr(buf, "="); |
|---|
| | 993 | if (str != NULL) |
|---|
| | 994 | { |
|---|
| | 995 | my_strcpy(font_name, str + 1, sizeof(font_name)); |
|---|
| | 996 | font = font_name; |
|---|
| | 997 | } |
|---|
| | 998 | continue; |
|---|
| | 999 | } |
|---|
| | 1000 | |
|---|
| | 1001 | /* Window specific tile width */ |
|---|
| | 1002 | sprintf(cmd, "TILE_WIDTH_%d", i); |
|---|
| | 1003 | |
|---|
| | 1004 | if (prefix(buf, cmd)) |
|---|
| | 1005 | { |
|---|
| | 1006 | val = get_value(buf); |
|---|
| | 1007 | if (val > 0) td->tile_wid = val; |
|---|
| | 1008 | continue; |
|---|
| | 1009 | } |
|---|
| | 1010 | |
|---|
| | 1011 | /* Window specific tile height */ |
|---|
| | 1012 | sprintf(cmd, "TILE_HEIGHT_%d", i); |
|---|
| | 1013 | |
|---|
| | 1014 | if (prefix(buf, cmd)) |
|---|
| | 1015 | { |
|---|
| | 1016 | val = get_value(buf); |
|---|
| | 1017 | if (val > 0) td->tile_hgt = val; |
|---|
| | 1018 | continue; |
|---|
| | 1019 | } |
|---|
| | 1020 | } |
|---|
| | 1021 | |
|---|
| | 1022 | /* Close */ |
|---|
| | 1023 | my_fclose(fff); |
|---|
| | 1024 | } |
|---|
| | 1025 | |
|---|
| | 1026 | /* |
|---|
| | 1027 | * Env-vars overwrite the settings in the settings file |
|---|
| | 1028 | */ |
|---|
| | 1029 | |
|---|
| | 1030 | x = check_env_i("ANGBAND_X11_AT_X_%d", i, x); |
|---|
| | 1031 | y = check_env_i("ANGBAND_X11_AT_Y_%d", i, y); |
|---|
| | 1032 | cols = check_env_i("ANGBAND_X11_COLS_%d", i, cols); |
|---|
| | 1033 | rows = check_env_i("ANGBAND_X11_ROWS_%d", i, rows); |
|---|
| | 1034 | |
|---|
| | 1035 | /* Window specific font name */ |
|---|
| | 1036 | sprintf(buf, "ANGBAND_X11_FONT_%d", i); |
|---|
| | 1037 | str = getenv(buf); |
|---|
| | 1038 | if (str) font = str; |
|---|
| | 1039 | |
|---|
| | 1040 | if (cols <= 0) cols = 80; |
|---|
| | 1041 | if (rows <= 0) rows = 24; |
|---|
| | 1042 | if ((x <= 0) && (y <= 0)) |
|---|
| | 1043 | { |
|---|
| | 1044 | x = 100; |
|---|
| | 1045 | y = 100; |
|---|
| | 1046 | } |
|---|
| | 1047 | |
|---|
| | 1048 | td->cols = cols; |
|---|
| | 1049 | td->rows = rows; |
|---|
| | 1050 | |
|---|
| | 1051 | if (font != "") load_font_by_name(td, font); |
|---|
| | 1052 | |
|---|
| | 1053 | gtk_widget_set_size_request(GTK_WIDGET(td->drawing_area), td->cols * td->font_wid + 1, td->rows * td->font_hgt + 1); |
|---|
| | 1054 | gtk_window_move( GTK_WINDOW(td->window), x, y); |
|---|
| | 1055 | } |
|---|
| | 1056 | |
|---|