43 #define THEME_DEFAULT CF_DATADIR "/themes/Standard"
103 tmp = gtk_rc_get_default_files();
105 while (tmp && tmp[i]) {
123 while (tmp && tmp[i]) {
136 snprintf(path,
sizeof(path),
"%s/gtkrc",
config_dir);
174 g_assert(
theme != NULL);
183 if (access(
theme, R_OK) == -1) {
188 gtk_rc_add_default_file(
theme);
194 gtk_rc_reparse_all_for_settings(
195 gtk_settings_get_for_screen(gdk_screen_get_default()), TRUE);
197 gtk_settings_get_for_screen(gdk_screen_get_default()));
226 "Configuration not found; trying old configuration files.");
228 "You will need to move your keybindings to the new location.");
230 snprintf(path,
sizeof(path),
"%s/.crossfire/gdefaults2", g_getenv(
"HOME"));
231 if ((fp = fopen(path,
"r")) == NULL) {
234 while (fgets(inbuf,
MAX_BUF - 1, fp)) {
236 inbuf[strlen(inbuf) - 1] =
'\0';
238 if (inbuf[0] ==
'#') {
242 if (!(cp = strchr(inbuf,
':'))) {
251 }
else if (!strcmp(cp,
"True")) {
253 }
else if (!strcmp(cp,
"False")) {
261 "Invalid value/line: %s: %s", inbuf, cp);
277 if (!strcmp(inbuf,
"mapsize")) {
281 "Malformed mapsize option in gdefaults2. Ignoring");
283 }
else if (!strcmp(inbuf,
"theme")) {
287 theme = g_strdup(cp);
289 }
else if (!strcmp(inbuf,
"window_layout")) {
292 }
else if (!strcmp(inbuf,
"nopopups")) {
296 }
else if (!strcmp(inbuf,
"nosplash")) {
299 }
else if (!strcmp(inbuf,
"splash")) {
302 }
else if (!strcmp(inbuf,
"faceset")) {
307 else if (!strcmp(inbuf,
"per_tile_lighting")) {
311 }
else if (!strcmp(inbuf,
"per_pixel_lighting")) {
315 }
else if (!strcmp(inbuf,
"resists")) {
319 }
else if (!strcmp(inbuf,
"sdl")) {
324 "Unknown line in gdefaults2: %s %s", inbuf, cp);
338 "Ignoring invalid 'iconscale' value '%d'; "
339 "must be between 25 and 200.\n",
346 "Ignoring invalid 'mapscale' value '%d'; "
347 "must be between 10 and 200.\n",
354 "No lighting mechanism selected - will not use darkness code");
360 "Ignoring invalid 'resists' value '%d'; "
361 "must be either 0, 1, or 2.\n",
370 "option in gdefaults2. Valid range is 9 to %d",
378 "option in gdefaults2. Valid range is 9 to %d",
383 #if !defined(HAVE_OPENGL)
387 "Display mode is set to OpenGL, but client "
388 "is not compiled with OpenGL support. Reverting to pixmap mode.");
392 #if !defined(HAVE_SDL)
396 "Display mode is set to SDL, but client "
397 "is not compiled with SDL support. Reverting to pixmap mode.");
403 "Image caching is not currently supported in this client. Running without image caching.");
427 perror(
"TCP_NODELAY");
447 GError *error = NULL;
452 g_assert(g_file_test(
config_dir, G_FILE_TEST_IS_DIR) == TRUE);
455 config = g_key_file_new();
465 GError *error = NULL;
476 theme = g_key_file_get_string(
config,
"GTKv2",
"theme", NULL);
490 char *layout = g_key_file_get_string(
config,
"GTKv2",
"window_layout", NULL);
518 GError *error = NULL;
521 g_key_file_set_string(
config,
"GTKv2",
"theme",
theme);
533 g_key_file_to_data(
config, NULL, NULL), -1, &error);
537 "Could not save settings!");
538 g_warning(
"Could not save settings: %s", error->message);
550 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_dialog"));
554 GTK_FILE_CHOOSER(gtk_builder_get_object(
dialog_xml,
"ui_filechooser"));
556 gtk_builder_get_object(
dialog_xml,
"theme_filechooser"));
558 GtkFileFilter *ui_filter = gtk_file_filter_new();
559 gtk_file_filter_add_pattern(ui_filter,
"*.ui");
563 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_echo"));
565 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_fasttcp"));
567 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_timestamp"));
569 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_grad_color"));
571 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_foodbeep"));
573 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_sound"));
575 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_cache"));
577 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_download"));
579 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_fog"));
581 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_smoothing"));
584 GTK_RANGE(gtk_builder_get_object(
dialog_xml,
"config_music_volume"));
589 gtk_builder_get_object(
dialog_xml,
"config_combobox_displaymode"));
591 gtk_builder_get_object(
dialog_xml,
"config_combobox_faceset"));
593 gtk_builder_get_object(
dialog_xml,
"config_combobox_lighting"));
595 GtkWidget *config_button_close =
596 GTK_WIDGET(gtk_builder_get_object(
dialog_xml,
"config_button_close"));
597 g_signal_connect(config_button_close,
"clicked",
603 GtkListStore *display_list =
607 gtk_list_store_append(display_list, &iter);
608 gtk_list_store_set(display_list, &iter, 0,
"OpenGL", 1,
CFG_DM_OPENGL, -1);
611 gtk_list_store_append(display_list, &iter);
612 gtk_list_store_set(display_list, &iter, 0,
"SDL", 1,
CFG_DM_SDL, -1);
614 gtk_list_store_append(display_list, &iter);
615 gtk_list_store_set(display_list, &iter, 0,
"Pixmap", 1,
CFG_DM_PIXMAP, -1);
623 int count = gtk_tree_model_iter_n_children(
624 gtk_combo_box_get_model(GTK_COMBO_BOX(combo_box)), NULL);
625 for (
int i = 0; i < count; i++) {
626 gtk_combo_box_text_remove(combo_box, 0);
680 bool next = gtk_tree_model_get_iter_first(model, &iter);
683 gtk_tree_model_get(model, &iter, 1, ¤t, -1);
688 next = gtk_tree_model_iter_next(model, &iter);
705 GtkTreeModel *model = gtk_combo_box_get_model(combobox);
709 gtk_combo_box_get_active_iter(combobox, &iter);
710 gtk_tree_model_get(model, &iter, column, &result, -1);
756 gtk_tree_model_get(model, &iter, 0, &buf, -1);
763 LOG(
LOG_ERROR,
"read_config_dialog",
"Failed to get face set string from GTK Widget.");
783 if (buf != NULL && g_ascii_strcasecmp(buf,
theme) != 0) {
810 GSList *pane_list, *list_loop;
811 int x, y, w, h, wx, wy;
816 GString *window_root_info = g_string_new(NULL);
817 g_string_printf(window_root_info,
"+%d+%dx%dx%d", wx, wy, w, h);
820 "window_root", window_root_info->str);
821 g_string_free(window_root_info, TRUE);
824 pane_list = gtk_builder_get_objects(
window_xml);
826 for (list_loop = pane_list; list_loop != NULL; list_loop = list_loop->next) {
827 GType type = G_OBJECT_TYPE(list_loop->data);
829 if (type == GTK_TYPE_HPANED || type == GTK_TYPE_VPANED) {
831 gtk_buildable_get_name(list_loop->data),
832 gtk_paned_get_position(GTK_PANED(list_loop->data)));
836 g_slist_free(pane_list);
840 "Window positions saved!");
851 gpointer user_data) {
856 g_signal_stop_emission_by_name(GTK_WIDGET(menuitem),
"activate");
865 GSList *pane_list, *list;
866 pane_list = gtk_builder_get_objects(
window_xml);
870 "window_root", NULL);
872 if (root_size != NULL) {
875 if (sscanf(root_size,
"+%*d+%*dx%dx%d", &w, &h) == 2) {
876 gtk_window_set_default_size(GTK_WINDOW(
window_root), w, h);
883 for (list = pane_list; list != NULL; list = list->next) {
884 GType type = G_OBJECT_TYPE(list->data);
886 if (type == GTK_TYPE_HPANED || type == GTK_TYPE_VPANED) {
888 gtk_buildable_get_name(list->data), NULL);
891 gtk_paned_set_position(GTK_PANED(list->data), position);
896 g_slist_free(pane_list);