41 #define THEME_DEFAULT CF_DATADIR "/themes/Standard"
100 tmp = gtk_rc_get_default_files();
102 while (tmp && tmp[i]) {
120 while (tmp && tmp[i]) {
133 snprintf(path,
sizeof(path),
"%s/gtkrc",
config_dir);
171 g_assert(
theme != NULL);
180 if (access(
theme, R_OK) == -1) {
185 gtk_rc_add_default_file(
theme);
191 gtk_rc_reparse_all_for_settings(
192 gtk_settings_get_for_screen(gdk_screen_get_default()), TRUE);
194 gtk_settings_get_for_screen(gdk_screen_get_default()));
223 "Configuration not found; trying old configuration files.");
225 "You will need to move your keybindings to the new location.");
227 snprintf(path,
sizeof(path),
"%s/.crossfire/gdefaults2", g_getenv(
"HOME"));
228 if ((fp = fopen(path,
"r")) == NULL) {
231 while (fgets(inbuf,
MAX_BUF - 1, fp)) {
233 inbuf[strlen(inbuf) - 1] =
'\0';
235 if (inbuf[0] ==
'#') {
239 if (!(cp = strchr(inbuf,
':'))) {
248 }
else if (!strcmp(cp,
"True")) {
250 }
else if (!strcmp(cp,
"False")) {
258 "Invalid value/line: %s: %s", inbuf, cp);
274 if (!strcmp(inbuf,
"mapsize")) {
278 "Malformed mapsize option in gdefaults2. Ignoring");
280 }
else if (!strcmp(inbuf,
"theme")) {
284 theme = g_strdup(cp);
286 }
else if (!strcmp(inbuf,
"window_layout")) {
289 }
else if (!strcmp(inbuf,
"nopopups")) {
293 }
else if (!strcmp(inbuf,
"nosplash")) {
296 }
else if (!strcmp(inbuf,
"splash")) {
299 }
else if (!strcmp(inbuf,
"faceset")) {
304 else if (!strcmp(inbuf,
"per_tile_lighting")) {
308 }
else if (!strcmp(inbuf,
"per_pixel_lighting")) {
312 }
else if (!strcmp(inbuf,
"resists")) {
316 }
else if (!strcmp(inbuf,
"sdl")) {
321 "Unknown line in gdefaults2: %s %s", inbuf, cp);
335 "Ignoring invalid 'iconscale' value '%d'; "
336 "must be between 25 and 200.\n",
343 "Ignoring invalid 'mapscale' value '%d'; "
344 "must be between 10 and 200.\n",
351 "No lighting mechanism selected - will not use darkness code");
357 "Ignoring invalid 'resists' value '%d'; "
358 "must be either 0, 1, or 2.\n",
367 "option in gdefaults2. Valid range is 9 to %d",
375 "option in gdefaults2. Valid range is 9 to %d",
380 #if !defined(HAVE_OPENGL)
384 "Display mode is set to OpenGL, but client "
385 "is not compiled with OpenGL support. Reverting to pixmap mode.");
389 #if !defined(HAVE_SDL)
393 "Display mode is set to SDL, but client "
394 "is not compiled with SDL support. Reverting to pixmap mode.");
400 "Image caching is not currently supported in this client. Running without image caching.");
424 perror(
"TCP_NODELAY");
443 GError *error = NULL;
448 g_assert(g_file_test(
config_dir, G_FILE_TEST_IS_DIR) == TRUE);
451 config = g_key_file_new();
461 GError *error = NULL;
472 theme = g_key_file_get_string(
config,
"GTKv2",
"theme", NULL);
486 char *layout = g_key_file_get_string(
config,
"GTKv2",
"window_layout", NULL);
514 GError *error = NULL;
517 g_key_file_set_string(
config,
"GTKv2",
"theme",
theme);
529 g_key_file_to_data(
config, NULL, NULL), -1, &error);
533 "Could not save settings!");
534 g_warning(
"Could not save settings: %s", error->message);
541 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_dialog"));
545 GTK_FILE_CHOOSER(gtk_builder_get_object(
dialog_xml,
"ui_filechooser"));
547 gtk_builder_get_object(
dialog_xml,
"theme_filechooser"));
549 GtkFileFilter *ui_filter = gtk_file_filter_new();
550 gtk_file_filter_add_pattern(ui_filter,
"*.ui");
554 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_echo"));
556 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_fasttcp"));
558 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_timestamp"));
560 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_grad_color"));
562 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_foodbeep"));
564 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_sound"));
566 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_cache"));
568 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_download"));
570 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_fog"));
572 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_smoothing"));
575 gtk_builder_get_object(
dialog_xml,
"config_combobox_displaymode"));
577 gtk_builder_get_object(
dialog_xml,
"config_combobox_faceset"));
579 gtk_builder_get_object(
dialog_xml,
"config_combobox_lighting"));
581 GtkWidget *config_button_close =
582 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_close"));
583 g_signal_connect(config_button_close,
"clicked",
589 GtkListStore *display_list =
593 gtk_list_store_append(display_list, &iter);
594 gtk_list_store_set(display_list, &iter, 0,
"OpenGL", 1,
CFG_DM_OPENGL, -1);
597 gtk_list_store_append(display_list, &iter);
598 gtk_list_store_set(display_list, &iter, 0,
"SDL", 1,
CFG_DM_SDL, -1);
600 gtk_list_store_append(display_list, &iter);
601 gtk_list_store_set(display_list, &iter, 0,
"Pixmap", 1,
CFG_DM_PIXMAP, -1);
609 int count = gtk_tree_model_iter_n_children(
610 gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box)), NULL);
611 for (
int i = 0; i < count; i++) {
612 gtk_combo_box_text_remove(combo_box, 0);
666 bool next = gtk_tree_model_get_iter_first(model, &iter);
669 gtk_tree_model_get(model, &iter, 1, ¤t, -1);
674 next = gtk_tree_model_iter_next(model, &iter);
689 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
693 gtk_combo_box_get_active_iter(combobox, &iter);
694 gtk_tree_model_get(model, &iter, column, &result, -1);
740 gtk_tree_model_get(model, &iter, 0, &buf, -1);
747 LOG(
LOG_ERROR,
"read_config_dialog",
"Failed to get face set string from GTK Widget.");
767 if (buf != NULL && g_ascii_strcasecmp(buf,
theme) != 0) {
794 GSList *pane_list, *list_loop;
795 int x, y, w, h, wx, wy;
800 GString *window_root_info = g_string_new(NULL);
801 g_string_printf(window_root_info,
"+%d+%dx%dx%d", wx, wy, w, h);
804 "window_root", window_root_info->str);
805 g_string_free(window_root_info, TRUE);
808 pane_list = gtk_builder_get_objects(
window_xml);
810 for (list_loop = pane_list; list_loop != NULL; list_loop = list_loop->next) {
811 GType type = G_OBJECT_TYPE(list_loop->data);
813 if (type == GTK_TYPE_HPANED || type == GTK_TYPE_VPANED) {
815 gtk_buildable_get_name(list_loop->data),
816 gtk_paned_get_position(GTK_PANED(list_loop->data)));
820 g_slist_free(pane_list);
824 "Window positions saved!");
835 gpointer user_data) {
840 g_signal_stop_emission_by_name(GTK_WIDGET(menuitem),
"activate");
849 GSList *pane_list, *list;
850 pane_list = gtk_builder_get_objects(
window_xml);
854 "window_root", NULL);
856 if (root_size != NULL) {
859 if (sscanf(root_size,
"+%*d+%*dx%dx%d", &w, &h) == 2) {
860 gtk_window_set_default_size(GTK_WINDOW(
window_root), w, h);
867 for (list = pane_list; list != NULL; list = list->next) {
868 GType type = G_OBJECT_TYPE(list->data);
870 if (type == GTK_TYPE_HPANED || type == GTK_TYPE_VPANED) {
872 gtk_buildable_get_name(list->data), NULL);
875 gtk_paned_set_position(GTK_PANED(list->data), position);
880 g_slist_free(pane_list);