1 /* Included directly into dhp-object.c just to keep this whole mess out
2 * of that file until it's not done so stupidly. */
3
devhelp_plugin_load_settings(DevhelpPlugin * self,const gchar * filename)4 void devhelp_plugin_load_settings(DevhelpPlugin *self, const gchar *filename)
5 {
6 GError *error;
7 GKeyFile *kf;
8 gboolean value;
9
10 g_return_if_fail(DEVHELP_IS_PLUGIN(self));
11
12 kf = g_key_file_new();
13 self->priv->kf = kf;
14
15 if (!g_key_file_load_from_file(kf, filename, G_KEY_FILE_KEEP_COMMENTS, NULL))
16 return;
17
18 if (g_key_file_has_group(kf, "webview"))
19 {
20 gchar *last_uri = NULL;
21 if (g_key_file_has_key(kf, "webview", "location", NULL))
22 {
23 gint location = g_key_file_get_integer(kf, "webview", "location", NULL);
24 switch(location)
25 {
26 case 0:
27 devhelp_plugin_set_webview_location(self,
28 DEVHELP_PLUGIN_WEBVIEW_LOCATION_NONE);
29 break;
30 case 1:
31 devhelp_plugin_set_webview_location(self,
32 DEVHELP_PLUGIN_WEBVIEW_LOCATION_SIDEBAR);
33 break;
34 case 2:
35 devhelp_plugin_set_webview_location(self,
36 DEVHELP_PLUGIN_WEBVIEW_LOCATION_MESSAGE_WINDOW);
37 break;
38 case 3:
39 devhelp_plugin_set_webview_location(self,
40 DEVHELP_PLUGIN_WEBVIEW_LOCATION_MAIN_NOTEBOOK);
41 break;
42 default:
43 g_warning("Unknown webview location %d", location);
44 break;
45 }
46 }
47
48 if (g_key_file_has_key(kf, "webview", "focus_webview_on_search", NULL))
49 {
50 self->priv->focus_webview_on_search = \
51 g_key_file_get_boolean(kf, "webview", "focus_webview_on_search", NULL);
52 }
53
54 if (g_key_file_has_key(kf, "webview", "last_uri", NULL))
55 {
56 last_uri = g_key_file_get_string(kf, "webview", "last_uri", NULL);
57 if (last_uri != NULL && strlen(last_uri) == 0)
58 {
59 g_free(last_uri);
60 last_uri = NULL;
61 }
62 }
63
64 if (g_key_file_has_key(kf, "webview", "custom_homepage", NULL))
65 {
66 gchar *custom_homepage;
67
68 custom_homepage = g_key_file_get_string(kf, "webview", "custom_homepage", NULL);
69 if (custom_homepage != NULL && strlen(custom_homepage) == 0)
70 {
71 g_free(custom_homepage);
72 custom_homepage = NULL;
73 }
74 else if (custom_homepage != NULL)
75 {
76 g_free(last_uri); /* always NULL or valid string */
77 last_uri = g_strdup(custom_homepage);
78 }
79 self->priv->custom_homepage = custom_homepage;
80 }
81
82 if (last_uri != NULL)
83 {
84 devhelp_plugin_set_webview_uri(self, last_uri);
85 g_free(last_uri);
86 }
87
88 } /* webview group */
89
90 if (g_key_file_has_group(kf, "doc_providers"))
91 {
92
93 if (g_key_file_has_key(kf, "doc_providers", "devhelp", NULL))
94 {
95 error = NULL;
96 value = g_key_file_get_boolean(kf, "doc_providers", "devhelp", &error);
97 if (error != NULL)
98 g_error_free(error);
99 else
100 devhelp_plugin_set_use_devhelp(self, value);
101 }
102
103 if (g_key_file_has_key(kf, "doc_providers", "man_pages", NULL))
104 {
105 error = NULL;
106 value = g_key_file_get_boolean(kf, "doc_providers", "man_pages", &error);
107 if (error != NULL)
108 g_error_free(error);
109 else
110 devhelp_plugin_set_use_man(self, value);
111 }
112
113 if (g_key_file_has_key(kf, "doc_providers", "codesearch", NULL))
114 {
115 error = NULL;
116 value = g_key_file_get_boolean(kf, "doc_providers", "codesearch", &error);
117 if (error != NULL)
118 g_error_free(error);
119 else
120 devhelp_plugin_set_use_codesearch(self, value);
121 }
122
123 } /* doc_providers group */
124
125 if (g_key_file_has_group(kf, "devhelp"))
126 {
127 if (g_key_file_has_key(kf, "devhelp", "show_devhelp_sidebar", NULL))
128 {
129 error = NULL;
130 value = g_key_file_get_boolean(kf, "devhelp", "show_devhelp_sidebar", &error);
131 if (error != NULL)
132 g_error_free(error);
133 else
134 devhelp_plugin_set_devhelp_sidebar_visible(self, value);
135 }
136
137 if (g_key_file_has_key(kf, "devhelp", "set_sidebar_tabs_bottom", NULL))
138 {
139 error = NULL;
140 value = g_key_file_get_boolean(kf, "devhelp", "set_sidebar_tabs_bottom", &error);
141 if (error != NULL)
142 g_error_free(error);
143 else
144 devhelp_plugin_set_sidebar_tabs_bottom(self, value);
145 }
146
147 if (g_key_file_has_key(kf, "devhelp", "focus_sidebar_on_search", NULL))
148 {
149 error = NULL;
150 value = g_key_file_get_boolean(kf, "devhelp", "focus_sidebar_on_search", &error);
151 if (error != NULL)
152 g_error_free(error);
153 else
154 self->priv->focus_sidebar_on_search = value;
155 }
156
157 } /* devhelp group */
158
159 if (g_key_file_has_group(kf, "man_pages"))
160 {
161
162 if (g_key_file_has_key(kf, "man_pages", "prog_path", NULL))
163 {
164 gchar *man_path;
165 error = NULL;
166 man_path = g_key_file_get_string(kf, "man_pages", "prog_path", &error);
167 if (error != NULL)
168 g_error_free(error);
169 else if (strlen(man_path) == 0)
170 g_free(man_path);
171 else
172 {
173 g_free(self->priv->man_prog_path);
174 self->priv->man_prog_path = man_path;
175 }
176 }
177
178 if (g_key_file_has_key(kf, "man_pages", "pager_prog", NULL))
179 {
180 gchar *pager;
181 error = NULL;
182 pager = g_key_file_get_string(kf, "man_pages", "pager_prog", &error);
183 if (error != NULL)
184 g_error_free(error);
185 else if (strlen(pager) == 0)
186 g_free(pager);
187 else
188 {
189 g_free(self->priv->man_pager_prog);
190 self->priv->man_pager_prog = pager;
191 }
192 }
193
194 if (g_key_file_has_key(kf, "man_pages", "section_order", NULL))
195 {
196 gchar *sect;
197 error = NULL;
198 sect = g_key_file_get_string(kf, "man_pages", "section_order", &error);
199 if (error != NULL)
200 g_error_free(error);
201 else if (strlen(sect) == 0)
202 g_free(sect);
203 else
204 {
205 g_free(self->priv->man_section_order);
206 self->priv->man_section_order = sect;
207 }
208 }
209
210 } /* man_pages group */
211
212 if (g_key_file_has_group(kf, "codesearch"))
213 {
214 gchar *uri;
215
216 if (g_key_file_has_key(kf, "codesearch", "base_uri", NULL))
217 {
218 error = NULL;
219 uri = g_key_file_get_string(kf, "codesearch", "base_uri", &error);
220 if (error != NULL)
221 g_error_free(error);
222 else if (strlen(uri) == 0)
223 g_free(uri);
224 else
225 {
226 g_free(self->priv->codesearch_base_uri);
227 self->priv->codesearch_base_uri = uri;
228 }
229 }
230
231 if (g_key_file_has_key(kf, "codesearch", "uri_params", NULL))
232 {
233 error = NULL;
234 uri = g_key_file_get_string(kf, "codesearch", "uri_params", &error);
235 if (error != NULL)
236 g_error_free(error);
237 else if (strlen(uri) == 0)
238 g_free(uri);
239 else
240 {
241 g_free(self->priv->codesearch_params);
242 self->priv->codesearch_params = uri;
243 }
244 }
245
246 if (g_key_file_has_key(kf, "codesearch", "use_lang_for_search", NULL))
247 {
248 error = NULL;
249 value = g_key_file_get_boolean(kf, "codesearch", "use_lang_for_search", &error);
250 if (error != NULL)
251 g_error_free(error);
252 else
253 self->priv->codesearch_use_lang = value;
254 }
255
256 } /* codesearch group */
257
258 if (g_key_file_has_group(kf, "misc"))
259 {
260 gint pos;
261 error = NULL;
262 pos = g_key_file_get_integer(kf, "misc", "main_notebook_tab_pos", &error);
263 if (error != NULL)
264 g_error_free(error);
265 else
266 {
267 switch (pos)
268 {
269 case 0:
270 self->priv->main_nb_tab_pos = GTK_POS_LEFT;
271 break;
272 case 1:
273 self->priv->main_nb_tab_pos = GTK_POS_RIGHT;
274 break;
275 case 2:
276 self->priv->main_nb_tab_pos = GTK_POS_TOP;
277 break;
278 case 3:
279 self->priv->main_nb_tab_pos = GTK_POS_BOTTOM;
280 break;
281 }
282 if (self->priv->location == DEVHELP_PLUGIN_WEBVIEW_LOCATION_MAIN_NOTEBOOK)
283 {
284 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(self->priv->main_notebook),
285 self->priv->main_nb_tab_pos);
286 }
287 }
288 } /* misc group */
289 }
290
291
devhelp_plugin_store_settings(DevhelpPlugin * self,const gchar * filename)292 void devhelp_plugin_store_settings(DevhelpPlugin *self, const gchar *filename)
293 {
294 gchar *text;
295 GKeyFile *kf;
296
297 g_return_if_fail(DEVHELP_IS_PLUGIN(self));
298
299 if (self->priv->kf == NULL)
300 self->priv->kf = g_key_file_new();
301 kf = self->priv->kf;
302
303 g_key_file_set_integer(kf, "webview", "location", (gint)self->priv->location);
304 g_key_file_set_boolean(kf, "webview", "focus_webview_on_search", self->priv->focus_webview_on_search);
305 g_key_file_set_string(kf, "webview", "custom_homepage", self->priv->custom_homepage != NULL ? self->priv->custom_homepage : "");
306 g_key_file_set_string(kf, "webview", "last_uri", devhelp_plugin_get_webview_uri(self));
307
308 g_key_file_set_boolean(kf, "doc_providers", "devhelp", self->priv->use_devhelp);
309 g_key_file_set_boolean(kf, "doc_providers", "man_pages", self->priv->use_man);
310 g_key_file_set_boolean(kf, "doc_providers", "codesearch", self->priv->use_codesearch);
311
312 g_key_file_set_boolean(kf, "devhelp", "show_devhelp_sidebar",
313 #if GTK_CHECK_VERSION(2,18,0)
314 gtk_widget_get_visible(self->priv->sb_notebook)
315 #else
316 GTK_WIDGET_VISIBLE(self->priv->sb_notebook)
317 #endif
318 );
319 g_key_file_set_boolean(kf, "devhelp", "set_sidebar_tabs_bottom", devhelp_plugin_get_sidebar_tabs_bottom(self));
320 g_key_file_set_boolean(kf, "devhelp", "focus_sidebar_on_search", self->priv->focus_sidebar_on_search);
321
322 g_key_file_set_string(kf, "man_pages", "prog_path", self->priv->man_prog_path);
323 g_key_file_set_string(kf, "man_pages", "page_prog", self->priv->man_pager_prog);
324 g_key_file_set_string(kf, "man_pages", "section_order", self->priv->man_section_order);
325
326 g_key_file_set_string(kf, "codesearch", "base_uri", self->priv->codesearch_base_uri);
327 g_key_file_set_string(kf, "codesearch", "uri_params", self->priv->codesearch_params != NULL ? self->priv->codesearch_params : "");
328 g_key_file_set_boolean(kf, "codesearch", "use_lang_for_search", self->priv->codesearch_use_lang);
329
330 switch(self->priv->main_nb_tab_pos)
331 {
332 case GTK_POS_LEFT:
333 g_key_file_set_integer(kf, "misc", "main_notebook_tab_pos", 0);
334 break;
335 case GTK_POS_RIGHT:
336 g_key_file_set_integer(kf, "misc", "main_notebook_tab_pos", 1);
337 break;
338 case GTK_POS_TOP:
339 g_key_file_set_integer(kf, "misc", "main_notebook_tab_pos", 2);
340 break;
341 case GTK_POS_BOTTOM:
342 g_key_file_set_integer(kf, "misc", "main_notebook_tab_pos", 3);
343 break;
344 }
345
346 text = g_key_file_to_data(kf, NULL, NULL);
347 g_file_set_contents(filename, text, -1, NULL);
348 g_free(text);
349 }
350