diff --git a/src/objects/settings/gsettings.c b/src/objects/settings/gsettings.c index 1ff44f8..869ee79 100644 --- a/src/objects/settings/gsettings.c +++ b/src/objects/settings/gsettings.c @@ -30,11 +30,94 @@ #include #include + /* + static void failed() { + + GtkWidget * dialog = gtk_message_dialog_new_with_markup( + NULL, + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("Can't load system settings") + ); + + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_("Unable to initialize system settings. Application may crash in unexpected ways")); + + gtk_window_set_title(GTK_WINDOW(dialog),_("System settings error")); + + gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + + gtk_widget_show_all(dialog); + + gtk_dialog_run(GTK_DIALOG(dialog)); + + gtk_widget_destroy(dialog); + + g_application_quit(g_application_get_default()); + + } + */ + static GSettings * settings_new(const gchar *schema_id) { GSettings *settings = NULL; -#if defined(DEBUG) +#if defined(_WIN32) + + { + g_autofree gchar * pkgdir = g_win32_get_package_installation_directory_of_module(NULL); + + g_autofree gchar * appdir = g_build_filename(pkgdir,"gschemas.compiled",NULL); + g_autofree gchar * sysdir = g_build_filename(pkgdir,"share","glib-2.0","schemas","gschemas.compiled",NULL); + + const char * names[] = { appdir, sysdir }; + size_t ix; + + for(ix = 0; ix < G_N_ELEMENTS(names); ix++) { + + if(g_file_test(names[ix],G_FILE_TEST_IS_REGULAR)) { + + GError * error = NULL; + g_autofree gchar *dirname = g_path_get_dirname(names[ix]); + + GSettingsSchemaSource * source = + g_settings_schema_source_new_from_directory( + dirname, + NULL, + TRUE, + &error + ); + + if(error) { + g_warning("Error loading '%s': %s",names[ix],error->message); + g_error_free(error); + return NULL; + } + + GSettingsSchema * schema = + g_settings_schema_source_lookup( + source, + schema_id, + TRUE); + + g_message("Loading '%s'",names[ix]); + settings = g_settings_new_full(schema, NULL, NULL); + + g_settings_schema_source_unref(source); + + if(settings) { + g_message("Got gsettings from %s",names[ix]); + return settings; + } + + } + } + + + } + +#elif defined(DEBUG) + { GError * error = NULL; GSettingsSchemaSource * source = @@ -62,89 +145,12 @@ g_settings_schema_source_unref(source); } -#elif defined(_WIN32) - { - g_autofree gchar * appdir = g_win32_get_package_installation_directory_of_module(NULL); - g_autofree gchar * filename = g_build_filename(appdir,"gschemas.compiled",NULL); - - // TODO: Scan appdir + filename, appdir + /share/glib-2.0/schemas/ - - if(g_file_test(filename,G_FILE_TEST_IS_REGULAR)) { - - GError * error = NULL; - g_autofree gchar *dirname = g_path_get_dirname(filename); - - GSettingsSchemaSource * source = - g_settings_schema_source_new_from_directory( - dirname, - NULL, - TRUE, - &error - ); - - if(error) { - g_warning("Error loading '%s': %s",filename,error->message); - g_error_free(error); - return NULL; - } - - GSettingsSchema * schema = - g_settings_schema_source_lookup( - source, - schema_id, - TRUE); - g_message("Loading '%s'",filename); - settings = g_settings_new_full(schema, NULL, NULL); - - g_settings_schema_source_unref(source); - - } else { - -#ifdef DEBUG - g_message("Can't find '%s' loading from default path",filename); -#endif // DEBUG - settings = g_settings_new(schema_id); - - } - } #else -#ifdef DEBUG - g_message("Loading '%s' from default path","gschemas.compiled"); -#endif // DEBUG - settings = g_settings_new(schema_id); -#endif // DEBUG - - if(!settings) { - - g_warning("Error loading system settings"); - - GtkWidget * dialog = gtk_message_dialog_new_with_markup( - NULL, - 0, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("Can't load system settings") - ); - - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_("Unable to initialize system settings. Application may crash in unexpected ways")); - - gtk_window_set_title(GTK_WINDOW(dialog),_("System settings error")); - - gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); - - gtk_widget_show_all(dialog); - - //g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); - //g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); - gtk_dialog_run(GTK_DIALOG(dialog)); - - g_application_quit(g_application_get_default()); - - } +#endif return settings; } -- libgit2 0.21.2