Commit a6bb7b1f31dfc3ea06841779e0f47f5136977bf1

Authored by Perry Werneck
1 parent 294acfb7
Exists in develop

Searching for gschemas on standard path.

Showing 1 changed file with 85 additions and 79 deletions   Show diff stats
src/objects/settings/gsettings.c
@@ -30,11 +30,94 @@ @@ -30,11 +30,94 @@
30 #include <pw3270/application.h> 30 #include <pw3270/application.h>
31 #include <pw3270/window.h> 31 #include <pw3270/window.h>
32 32
  33 + /*
  34 + static void failed() {
  35 +
  36 + GtkWidget * dialog = gtk_message_dialog_new_with_markup(
  37 + NULL,
  38 + 0,
  39 + GTK_MESSAGE_ERROR,
  40 + GTK_BUTTONS_CLOSE,
  41 + _("Can't load system settings")
  42 + );
  43 +
  44 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_("Unable to initialize system settings. Application may crash in unexpected ways"));
  45 +
  46 + gtk_window_set_title(GTK_WINDOW(dialog),_("System settings error"));
  47 +
  48 + gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
  49 +
  50 + gtk_widget_show_all(dialog);
  51 +
  52 + gtk_dialog_run(GTK_DIALOG(dialog));
  53 +
  54 + gtk_widget_destroy(dialog);
  55 +
  56 + g_application_quit(g_application_get_default());
  57 +
  58 + }
  59 + */
  60 +
33 static GSettings * settings_new(const gchar *schema_id) { 61 static GSettings * settings_new(const gchar *schema_id) {
34 62
35 GSettings *settings = NULL; 63 GSettings *settings = NULL;
36 64
37 -#if defined(DEBUG) 65 +#if defined(_WIN32)
  66 +
  67 + {
  68 + g_autofree gchar * pkgdir = g_win32_get_package_installation_directory_of_module(NULL);
  69 +
  70 + g_autofree gchar * appdir = g_build_filename(pkgdir,"gschemas.compiled",NULL);
  71 + g_autofree gchar * sysdir = g_build_filename(pkgdir,"share","glib-2.0","schemas","gschemas.compiled",NULL);
  72 +
  73 + const char * names[] = { appdir, sysdir };
  74 + size_t ix;
  75 +
  76 + for(ix = 0; ix < G_N_ELEMENTS(names); ix++) {
  77 +
  78 + if(g_file_test(names[ix],G_FILE_TEST_IS_REGULAR)) {
  79 +
  80 + GError * error = NULL;
  81 + g_autofree gchar *dirname = g_path_get_dirname(names[ix]);
  82 +
  83 + GSettingsSchemaSource * source =
  84 + g_settings_schema_source_new_from_directory(
  85 + dirname,
  86 + NULL,
  87 + TRUE,
  88 + &error
  89 + );
  90 +
  91 + if(error) {
  92 + g_warning("Error loading '%s': %s",names[ix],error->message);
  93 + g_error_free(error);
  94 + return NULL;
  95 + }
  96 +
  97 + GSettingsSchema * schema =
  98 + g_settings_schema_source_lookup(
  99 + source,
  100 + schema_id,
  101 + TRUE);
  102 +
  103 + g_message("Loading '%s'",names[ix]);
  104 + settings = g_settings_new_full(schema, NULL, NULL);
  105 +
  106 + g_settings_schema_source_unref(source);
  107 +
  108 + if(settings) {
  109 + g_message("Got gsettings from %s",names[ix]);
  110 + return settings;
  111 + }
  112 +
  113 + }
  114 + }
  115 +
  116 +
  117 + }
  118 +
  119 +#elif defined(DEBUG)
  120 +
38 { 121 {
39 GError * error = NULL; 122 GError * error = NULL;
40 GSettingsSchemaSource * source = 123 GSettingsSchemaSource * source =
@@ -62,89 +145,12 @@ @@ -62,89 +145,12 @@
62 145
63 g_settings_schema_source_unref(source); 146 g_settings_schema_source_unref(source);
64 } 147 }
65 -#elif defined(_WIN32)  
66 - {  
67 - g_autofree gchar * appdir = g_win32_get_package_installation_directory_of_module(NULL);  
68 - g_autofree gchar * filename = g_build_filename(appdir,"gschemas.compiled",NULL);  
69 -  
70 - // TODO: Scan appdir + filename, appdir + /share/glib-2.0/schemas/  
71 -  
72 - if(g_file_test(filename,G_FILE_TEST_IS_REGULAR)) {  
73 -  
74 - GError * error = NULL;  
75 - g_autofree gchar *dirname = g_path_get_dirname(filename);  
76 -  
77 - GSettingsSchemaSource * source =  
78 - g_settings_schema_source_new_from_directory(  
79 - dirname,  
80 - NULL,  
81 - TRUE,  
82 - &error  
83 - );  
84 -  
85 - if(error) {  
86 - g_warning("Error loading '%s': %s",filename,error->message);  
87 - g_error_free(error);  
88 - return NULL;  
89 - }  
90 -  
91 - GSettingsSchema * schema =  
92 - g_settings_schema_source_lookup(  
93 - source,  
94 - schema_id,  
95 - TRUE);  
96 148
97 - g_message("Loading '%s'",filename);  
98 - settings = g_settings_new_full(schema, NULL, NULL);  
99 -  
100 - g_settings_schema_source_unref(source);  
101 -  
102 - } else {  
103 -  
104 -#ifdef DEBUG  
105 - g_message("Can't find '%s' loading from default path",filename);  
106 -#endif // DEBUG  
107 - settings = g_settings_new(schema_id);  
108 -  
109 - }  
110 - }  
111 #else 149 #else
112 150
113 -#ifdef DEBUG  
114 - g_message("Loading '%s' from default path","gschemas.compiled");  
115 -#endif // DEBUG  
116 -  
117 settings = g_settings_new(schema_id); 151 settings = g_settings_new(schema_id);
118 152
119 -#endif // DEBUG  
120 -  
121 - if(!settings) {  
122 -  
123 - g_warning("Error loading system settings");  
124 -  
125 - GtkWidget * dialog = gtk_message_dialog_new_with_markup(  
126 - NULL,  
127 - 0,  
128 - GTK_MESSAGE_ERROR,  
129 - GTK_BUTTONS_CLOSE,  
130 - _("Can't load system settings")  
131 - );  
132 -  
133 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_("Unable to initialize system settings. Application may crash in unexpected ways"));  
134 -  
135 - gtk_window_set_title(GTK_WINDOW(dialog),_("System settings error"));  
136 -  
137 - gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);  
138 -  
139 - gtk_widget_show_all(dialog);  
140 -  
141 - //g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);  
142 - //g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL);  
143 - gtk_dialog_run(GTK_DIALOG(dialog));  
144 -  
145 - g_application_quit(g_application_get_default());  
146 -  
147 - } 153 +#endif
148 154
149 return settings; 155 return settings;
150 } 156 }