1 /*
2 * Copyright © 2009-2018 Siyan Panayotov <contact@siyanpanayotov.com>
3 *
4 * This file is part of Viewnior.
5 *
6 * Viewnior is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * Viewnior is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Viewnior. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include <libintl.h>
21 #include <glib/gi18n.h>
22 #define _(String) gettext (String)
23
24 #include "config.h"
25 #include "vnr-prefs.h"
26 #include "vnr-window.h"
27
28 #define UI_PATH PACKAGE_DATA_DIR"/viewnior/vnr-preferences-dialog.ui"
29
30 G_DEFINE_TYPE (VnrPrefs, vnr_prefs, G_TYPE_OBJECT);
31
32 /*************************************************************/
33 /***** Private signal handlers *******************************/
34 /*************************************************************/
35
36 static void
toggle_show_hidden_cb(GtkToggleButton * togglebutton,gpointer user_data)37 toggle_show_hidden_cb (GtkToggleButton *togglebutton, gpointer user_data)
38 {
39 VNR_PREFS(user_data)->show_hidden = gtk_toggle_button_get_active(togglebutton);
40 vnr_prefs_save(VNR_PREFS(user_data));
41 }
42
43 static void
toggle_fit_on_fullscreen_cb(GtkToggleButton * togglebutton,gpointer user_data)44 toggle_fit_on_fullscreen_cb (GtkToggleButton *togglebutton, gpointer user_data)
45 {
46 VNR_PREFS(user_data)->fit_on_fullscreen = gtk_toggle_button_get_active(togglebutton);
47 vnr_prefs_save(VNR_PREFS(user_data));
48 }
49
50 static void
toggle_smooth_images_cb(GtkToggleButton * togglebutton,gpointer user_data)51 toggle_smooth_images_cb (GtkToggleButton *togglebutton, gpointer user_data)
52 {
53 VNR_PREFS(user_data)->smooth_images = gtk_toggle_button_get_active(togglebutton);
54 vnr_prefs_save(VNR_PREFS(user_data));
55 vnr_window_apply_preferences(VNR_WINDOW(VNR_PREFS(user_data)->vnr_win));
56 }
57
58 static void
toggle_confirm_delete_cb(GtkToggleButton * togglebutton,gpointer user_data)59 toggle_confirm_delete_cb (GtkToggleButton *togglebutton, gpointer user_data)
60 {
61 VNR_PREFS(user_data)->confirm_delete = gtk_toggle_button_get_active(togglebutton);
62 vnr_prefs_save(VNR_PREFS(user_data));
63 }
64
65 static void
toggle_reload_on_save_cb(GtkToggleButton * togglebutton,gpointer user_data)66 toggle_reload_on_save_cb (GtkToggleButton *togglebutton, gpointer user_data)
67 {
68 VNR_PREFS(user_data)->reload_on_save = gtk_toggle_button_get_active(togglebutton);
69 vnr_prefs_save(VNR_PREFS(user_data));
70 }
71
72 static void
change_zoom_mode_cb(GtkComboBox * widget,gpointer user_data)73 change_zoom_mode_cb (GtkComboBox *widget, gpointer user_data)
74 {
75 VNR_PREFS(user_data)->zoom = gtk_combo_box_get_active(widget);
76 vnr_prefs_save(VNR_PREFS(user_data));
77 }
78
79 static void
change_desktop_env_cb(GtkComboBox * widget,gpointer user_data)80 change_desktop_env_cb (GtkComboBox *widget, gpointer user_data)
81 {
82 VNR_PREFS(user_data)->desktop = gtk_combo_box_get_active(widget);
83 vnr_prefs_save(VNR_PREFS(user_data));
84 }
85
86 static void
change_jpeg_quality_cb(GtkRange * range,gpointer user_data)87 change_jpeg_quality_cb (GtkRange *range, gpointer user_data)
88 {
89 VNR_PREFS(user_data)->jpeg_quality = (int) gtk_range_get_value(range);
90 vnr_prefs_save(VNR_PREFS(user_data));
91 }
92
93 static void
change_png_compression_cb(GtkRange * range,gpointer user_data)94 change_png_compression_cb (GtkRange *range, gpointer user_data)
95 {
96 VNR_PREFS(user_data)->png_compression = (int) gtk_range_get_value(range);
97 vnr_prefs_save(VNR_PREFS(user_data));
98 }
99
100 static void
change_action_wheel_cb(GtkComboBox * widget,gpointer user_data)101 change_action_wheel_cb (GtkComboBox *widget, gpointer user_data)
102 {
103 VNR_PREFS(user_data)->behavior_wheel = gtk_combo_box_get_active(widget);
104 vnr_prefs_save(VNR_PREFS(user_data));
105 }
106
107 static void
change_action_click_cb(GtkComboBox * widget,gpointer user_data)108 change_action_click_cb (GtkComboBox *widget, gpointer user_data)
109 {
110 VNR_PREFS(user_data)->behavior_click = gtk_combo_box_get_active(widget);
111 vnr_prefs_save(VNR_PREFS(user_data));
112 }
113
114 static void
change_action_modify_cb(GtkComboBox * widget,gpointer user_data)115 change_action_modify_cb (GtkComboBox *widget, gpointer user_data)
116 {
117 VNR_PREFS(user_data)->behavior_modify = gtk_combo_box_get_active(widget);
118 vnr_prefs_save(VNR_PREFS(user_data));
119 }
120
121 static void
change_spin_value_cb(GtkSpinButton * spinbutton,gpointer user_data)122 change_spin_value_cb (GtkSpinButton *spinbutton, gpointer user_data)
123 {
124 int new_value;
125
126 new_value = gtk_spin_button_get_value_as_int (spinbutton);
127
128 VNR_PREFS(user_data)->slideshow_timeout = new_value;
129 vnr_prefs_save(VNR_PREFS(user_data));
130 vnr_window_apply_preferences(VNR_WINDOW(VNR_PREFS(user_data)->vnr_win));
131 }
132
133 static gboolean
key_press_cb(GtkWidget * widget,GdkEventKey * event,gpointer user_data)134 key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
135 {
136 if(event->keyval == GDK_KEY_Escape)
137 {
138 gtk_widget_hide(widget);
139 return TRUE;
140 }
141 else
142 return FALSE;
143 }
144
145 /*************************************************************/
146 /***** Private actions ***************************************/
147 /*************************************************************/
148
149 static void
vnr_prefs_set_default(VnrPrefs * prefs)150 vnr_prefs_set_default(VnrPrefs *prefs)
151 {
152 prefs->zoom = VNR_PREFS_ZOOM_SMART;
153 prefs->show_hidden = FALSE;
154 prefs->fit_on_fullscreen = TRUE;
155 prefs->smooth_images = TRUE;
156 prefs->confirm_delete = TRUE;
157 prefs->slideshow_timeout = 5;
158 prefs->behavior_wheel = VNR_PREFS_WHEEL_ZOOM;
159 prefs->behavior_click = VNR_PREFS_CLICK_ZOOM;
160 prefs->behavior_modify = VNR_PREFS_MODIFY_ASK;
161 prefs->jpeg_quality = 90;
162 prefs->png_compression = 9;
163 prefs->reload_on_save = FALSE;
164 prefs->show_menu_bar = FALSE;
165 prefs->show_toolbar = TRUE;
166 prefs->show_scrollbar = TRUE;
167 prefs->start_maximized = FALSE;
168 prefs->start_slideshow = FALSE;
169 prefs->start_fullscreen = FALSE;
170 prefs->auto_resize = FALSE;
171 prefs->desktop = VNR_PREFS_DESKTOP_AUTO;
172 }
173
174 static GtkWidget *
build_dialog(VnrPrefs * prefs)175 build_dialog (VnrPrefs *prefs)
176 {
177 GtkBuilder *builder;
178 GtkWidget *window;
179 GError *error = NULL;
180
181 GObject *close_button;
182 GtkToggleButton *show_hidden;
183 GtkToggleButton *fit_on_fullscreen;
184 GtkBox *zoom_mode_box;
185 GtkComboBox *zoom_mode;
186 GtkToggleButton *smooth_images;
187 GtkToggleButton *confirm_delete;
188 GtkToggleButton *reload_on_save;
189 GtkSpinButton *slideshow_timeout;
190 GtkTable *behavior_table;
191 GtkComboBox *action_wheel;
192 GtkComboBox *action_click;
193 GtkComboBox *action_modify;
194 GtkRange *jpeg_scale;
195 GtkRange *png_scale;
196
197 GtkBox *desktop_box;
198 GtkComboBox *desktop_env;
199
200 builder = gtk_builder_new ();
201 gtk_builder_add_from_file (builder, UI_PATH, &error);
202
203 if (error != NULL)
204 {
205 g_warning ("%s\n", error->message);
206 g_object_unref(builder);
207 return NULL;
208 }
209
210 window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
211
212 /* Close button */
213 close_button = gtk_builder_get_object (builder, "close_button");
214 g_signal_connect_swapped(close_button, "clicked",
215 G_CALLBACK(gtk_widget_hide_on_delete), window);
216
217 /* Show hidden files checkbox */
218 show_hidden = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "show_hidden"));
219 gtk_toggle_button_set_active( show_hidden, prefs->show_hidden );
220 g_signal_connect(G_OBJECT(show_hidden), "toggled", G_CALLBACK(toggle_show_hidden_cb), prefs);
221
222 /* Fit on fullscreen checkbox */
223 fit_on_fullscreen = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "fit_on_fullscreen"));
224 gtk_toggle_button_set_active( fit_on_fullscreen, prefs->fit_on_fullscreen );
225 g_signal_connect(G_OBJECT(fit_on_fullscreen), "toggled", G_CALLBACK(toggle_fit_on_fullscreen_cb), prefs);
226
227 /* Smooth images checkbox */
228 smooth_images = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "smooth_images"));
229 gtk_toggle_button_set_active( smooth_images, prefs->smooth_images );
230 g_signal_connect(G_OBJECT(smooth_images), "toggled", G_CALLBACK(toggle_smooth_images_cb), prefs);
231
232 /* Confirm delete checkbox */
233 confirm_delete = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "confirm_delete"));
234 gtk_toggle_button_set_active( confirm_delete, prefs->confirm_delete );
235 g_signal_connect(G_OBJECT(confirm_delete), "toggled", G_CALLBACK(toggle_confirm_delete_cb), prefs);
236
237 /* Reload image after save checkbox */
238 reload_on_save = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "reload"));
239 gtk_toggle_button_set_active( reload_on_save, prefs->reload_on_save );
240 g_signal_connect(G_OBJECT(reload_on_save), "toggled", G_CALLBACK(toggle_reload_on_save_cb), prefs);
241
242 /* Slideshow timeout spin button */
243 slideshow_timeout = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "slideshow_timeout"));
244 gtk_spin_button_set_value( slideshow_timeout, (gdouble)prefs->slideshow_timeout);
245 prefs->slideshow_timeout_widget = slideshow_timeout;
246 g_signal_connect(G_OBJECT(slideshow_timeout), "value-changed", G_CALLBACK(change_spin_value_cb), prefs);
247
248 /* JPEG quality scale */
249 jpeg_scale = GTK_RANGE (gtk_builder_get_object (builder, "jpeg_scale"));
250 gtk_range_set_value(jpeg_scale, (gdouble)prefs->jpeg_quality);
251 g_signal_connect(G_OBJECT(jpeg_scale), "value-changed", G_CALLBACK(change_jpeg_quality_cb), prefs);
252
253 /* PNG compression scale */
254 png_scale = GTK_RANGE (gtk_builder_get_object (builder, "png_scale"));
255 gtk_range_set_value(png_scale, (gdouble)prefs->png_compression);
256 g_signal_connect(G_OBJECT(png_scale), "value-changed", G_CALLBACK(change_png_compression_cb), prefs);
257
258 /* Zoom mode combo box */
259 zoom_mode_box = GTK_BOX (gtk_builder_get_object (builder, "zoom_mode_box"));
260
261 zoom_mode = (GtkComboBox*) gtk_combo_box_new_text();
262 gtk_combo_box_append_text(zoom_mode, _("Smart Mode"));
263 gtk_combo_box_append_text(zoom_mode, _("1:1 Mode"));
264 gtk_combo_box_append_text(zoom_mode, _("Fit To Window Mode"));
265 gtk_combo_box_append_text(zoom_mode, _("Last Used Mode"));
266 gtk_combo_box_set_active(zoom_mode, prefs->zoom);
267
268 gtk_box_pack_end (zoom_mode_box, GTK_WIDGET(zoom_mode), FALSE, FALSE, 0);
269 gtk_widget_show(GTK_WIDGET(zoom_mode));
270
271 g_signal_connect(G_OBJECT(zoom_mode), "changed", G_CALLBACK(change_zoom_mode_cb), prefs);
272
273 /* Desktop combo box */
274 desktop_box = GTK_BOX (gtk_builder_get_object (builder, "desktop_box"));
275
276 desktop_env = (GtkComboBox*) gtk_combo_box_new_text();
277 gtk_combo_box_append_text(desktop_env, "GNOME 2");
278 gtk_combo_box_append_text(desktop_env, "GNOME 3");
279 gtk_combo_box_append_text(desktop_env, "XFCE");
280 gtk_combo_box_append_text(desktop_env, "LXDE");
281 gtk_combo_box_append_text(desktop_env, "PUPPY");
282 gtk_combo_box_append_text(desktop_env, "FluxBox");
283 gtk_combo_box_append_text(desktop_env, "Nitrogen");
284 gtk_combo_box_append_text(desktop_env, "MATE");
285 gtk_combo_box_append_text(desktop_env, "Cinnamon");
286 gtk_combo_box_append_text(desktop_env, _("Autodetect"));
287 gtk_combo_box_set_active(desktop_env, prefs->desktop);
288
289 gtk_box_pack_end (desktop_box, GTK_WIDGET(desktop_env), FALSE, FALSE, 0);
290 gtk_widget_show(GTK_WIDGET(desktop_env));
291
292 g_signal_connect(G_OBJECT(desktop_env), "changed", G_CALLBACK(change_desktop_env_cb), prefs);
293
294 /* Behavior combo boxes */
295 behavior_table = GTK_TABLE (gtk_builder_get_object (builder, "behavior_table"));
296
297 action_wheel = (GtkComboBox*) gtk_combo_box_new_text();
298 gtk_combo_box_append_text(action_wheel, _("Navigate images"));
299 gtk_combo_box_append_text(action_wheel, _("Zoom image"));
300 gtk_combo_box_append_text(action_wheel, _("Scroll image up/down"));
301 gtk_combo_box_set_active(action_wheel, prefs->behavior_wheel);
302
303 gtk_table_attach (behavior_table, GTK_WIDGET(action_wheel), 1,2,0,1, GTK_FILL,0, 0,0);
304 gtk_widget_show(GTK_WIDGET(action_wheel));
305 g_signal_connect(G_OBJECT(action_wheel), "changed", G_CALLBACK(change_action_wheel_cb), prefs);
306
307 action_click = (GtkComboBox*) gtk_combo_box_new_text();
308 gtk_combo_box_append_text(action_click, _("Switch zoom modes"));
309 gtk_combo_box_append_text(action_click, _("Enter fullscreen mode"));
310 gtk_combo_box_append_text(action_click, _("Navigate images"));
311 gtk_combo_box_set_active(action_click, prefs->behavior_click);
312
313 gtk_table_attach (behavior_table, GTK_WIDGET(action_click), 1,2,1,2, GTK_FILL,0, 0,0);
314 gtk_widget_show(GTK_WIDGET(action_click));
315 g_signal_connect(G_OBJECT(action_click), "changed", G_CALLBACK(change_action_click_cb), prefs);
316
317 action_modify = (GtkComboBox*) gtk_combo_box_new_text();
318 gtk_combo_box_append_text(action_modify, _("Ask every time"));
319 gtk_combo_box_append_text(action_modify, _("Autosave"));
320 gtk_combo_box_append_text(action_modify, _("Ignore changes"));
321 gtk_combo_box_set_active(action_modify, prefs->behavior_modify);
322
323 gtk_table_attach (behavior_table, GTK_WIDGET(action_modify), 1,2,2,3, GTK_FILL,0, 0,0);
324 gtk_widget_show(GTK_WIDGET(action_modify));
325 g_signal_connect(G_OBJECT(action_modify), "changed", G_CALLBACK(change_action_modify_cb), prefs);
326
327 /* Window signals */
328 g_signal_connect(G_OBJECT(window), "delete-event",
329 G_CALLBACK(gtk_widget_hide_on_delete), NULL);
330 g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press_cb), NULL);
331
332
333 g_object_unref (G_OBJECT (builder));
334
335 return window;
336 }
337
338 static gboolean
vnr_prefs_load(VnrPrefs * prefs)339 vnr_prefs_load (VnrPrefs *prefs)
340 {
341 GKeyFile *conf;
342 GError *error = NULL;
343 const gchar *path;
344
345 path = g_build_filename (g_get_user_config_dir(), PACKAGE, "viewnior.conf", NULL);
346
347 conf = g_key_file_new();
348 g_key_file_load_from_file (conf, path, G_KEY_FILE_NONE, &error);
349
350 g_free((char*)path);
351
352 if(error != NULL)
353 {
354 g_warning("Loading config file: %s. All preferences are set to their default values. Saving ...", error->message);
355 g_key_file_free (conf);
356 return FALSE;
357 }
358
359 prefs->zoom = g_key_file_get_integer (conf, "prefs", "zoom-mode", &error);
360 prefs->fit_on_fullscreen = g_key_file_get_boolean (conf, "prefs", "fit-on-fullscreen", &error);
361 prefs->show_hidden = g_key_file_get_boolean (conf, "prefs", "show-hidden", &error);
362 prefs->smooth_images = g_key_file_get_boolean (conf, "prefs", "smooth-images", &error);
363 prefs->confirm_delete = g_key_file_get_boolean (conf, "prefs", "confirm-delete", &error);
364 prefs->reload_on_save = g_key_file_get_boolean (conf, "prefs", "reload-on-save", &error);
365 prefs->show_menu_bar = g_key_file_get_boolean (conf, "prefs", "show-menu-bar", &error);
366 prefs->show_toolbar = g_key_file_get_boolean (conf, "prefs", "show-toolbar", &error);
367 prefs->show_scrollbar = g_key_file_get_boolean (conf, "prefs", "show-scrollbar", &error);
368 prefs->start_maximized = g_key_file_get_boolean (conf, "prefs", "start-maximized", &error);
369 prefs->slideshow_timeout = g_key_file_get_integer (conf, "prefs", "slideshow-timeout", &error);
370 prefs->auto_resize = g_key_file_get_boolean (conf, "prefs", "auto-resize", &error);
371 prefs->behavior_wheel = g_key_file_get_integer (conf, "prefs", "behavior-wheel", &error);
372 prefs->behavior_click = g_key_file_get_integer (conf, "prefs", "behavior-click", &error);
373 prefs->behavior_modify = g_key_file_get_integer (conf, "prefs", "behavior-modify", &error);
374 prefs->jpeg_quality = g_key_file_get_integer (conf, "prefs", "jpeg-quality", &error);
375 prefs->png_compression = g_key_file_get_integer (conf, "prefs", "png-compression", &error);
376 prefs->desktop = g_key_file_get_integer (conf, "prefs", "desktop", &error);
377
378 if(error != NULL)
379 {
380 g_warning("Parsing config file: %s. All preferences are set to their default values.", error->message);
381 g_key_file_free (conf);
382 return FALSE;
383 }
384
385 g_key_file_free (conf);
386
387 return TRUE;
388 }
389
390 /*************************************************************/
391 /***** Stuff that deals with the type ************************/
392 /*************************************************************/
393
394 static void
vnr_prefs_class_init(VnrPrefsClass * klass)395 vnr_prefs_class_init (VnrPrefsClass * klass) {}
396
397 GObject *
vnr_prefs_new(GtkWidget * vnr_win)398 vnr_prefs_new (GtkWidget *vnr_win)
399 {
400 VnrPrefs *prefs;
401
402 prefs = g_object_new (VNR_TYPE_PREFS, NULL);
403
404 prefs->vnr_win = vnr_win;
405
406 return (GObject *) prefs;
407 }
408
409 static void
vnr_prefs_init(VnrPrefs * prefs)410 vnr_prefs_init (VnrPrefs * prefs)
411 {
412 if ( !vnr_prefs_load (prefs) )
413 {
414 vnr_prefs_set_default(prefs);
415 vnr_prefs_save (prefs);
416 }
417
418 prefs->dialog = NULL;
419 }
420
421 /*************************************************************/
422 /***** Actions ***********************************************/
423 /*************************************************************/
424
425 void
vnr_prefs_show_dialog(VnrPrefs * prefs)426 vnr_prefs_show_dialog(VnrPrefs *prefs)
427 {
428 if (prefs->dialog == NULL)
429 {
430 prefs->dialog = build_dialog (prefs);
431 if (prefs->dialog == NULL)
432 return;
433 }
434 gtk_window_present(GTK_WINDOW(prefs->dialog));
435 }
436
437 gboolean
vnr_prefs_save(VnrPrefs * prefs)438 vnr_prefs_save (VnrPrefs *prefs)
439 {
440 GKeyFile *conf;
441 FILE *rcfile;
442 const gchar *dir;
443 const gchar *path;
444
445 dir = g_build_filename (g_get_user_config_dir(), PACKAGE, NULL);
446 path = g_build_filename (dir, "viewnior.conf", NULL);
447
448 conf = g_key_file_new();
449 g_key_file_set_integer (conf, "prefs", "zoom-mode", prefs->zoom);
450 g_key_file_set_boolean (conf, "prefs", "fit-on-fullscreen", prefs->fit_on_fullscreen);
451 g_key_file_set_boolean (conf, "prefs", "show-hidden", prefs->show_hidden);
452 g_key_file_set_boolean (conf, "prefs", "smooth-images", prefs->smooth_images);
453 g_key_file_set_boolean (conf, "prefs", "confirm-delete", prefs->confirm_delete);
454 g_key_file_set_boolean (conf, "prefs", "reload-on-save", prefs->reload_on_save);
455 g_key_file_set_boolean (conf, "prefs", "show-menu-bar", prefs->show_menu_bar);
456 g_key_file_set_boolean (conf, "prefs", "show-toolbar", prefs->show_toolbar);
457 g_key_file_set_boolean (conf, "prefs", "show-scrollbar", prefs->show_scrollbar);
458 g_key_file_set_boolean (conf, "prefs", "start-maximized", prefs->start_maximized);
459 g_key_file_set_integer (conf, "prefs", "slideshow-timeout", prefs->slideshow_timeout);
460 g_key_file_set_boolean (conf, "prefs", "auto-resize", prefs->auto_resize);
461 g_key_file_set_integer (conf, "prefs", "behavior-wheel", prefs->behavior_wheel);
462 g_key_file_set_integer (conf, "prefs", "behavior-click", prefs->behavior_click);
463 g_key_file_set_integer (conf, "prefs", "behavior-modify", prefs->behavior_modify);
464 g_key_file_set_integer (conf, "prefs", "jpeg-quality", prefs->jpeg_quality);
465 g_key_file_set_integer (conf, "prefs", "png-compression", prefs->png_compression);
466 g_key_file_set_integer (conf, "prefs", "desktop", prefs->desktop);
467
468 if(g_mkdir_with_parents (dir, 0700) != 0)
469 g_warning("Error creating config file's parent directory (%s)\n", dir);
470
471 rcfile = fopen(path , "w");
472
473 if(rcfile != NULL)
474 {
475 fputs(g_key_file_to_data (conf, NULL, NULL), rcfile);
476 fclose(rcfile);
477 }
478 else
479 g_warning("Saving config file: Unable to open the configuration file for writing!\n");
480
481 g_key_file_free (conf);
482 g_free((char*)dir);
483 g_free((char*)path);
484
485 return TRUE;
486 }
487
488 void
vnr_prefs_set_slideshow_timeout(VnrPrefs * prefs,int value)489 vnr_prefs_set_slideshow_timeout (VnrPrefs *prefs, int value)
490 {
491 if (prefs->dialog != NULL)
492 gtk_spin_button_set_value(prefs->slideshow_timeout_widget, (gdouble)value);
493 }
494
495 void
vnr_prefs_set_show_toolbar(VnrPrefs * prefs,gboolean show_toolbar)496 vnr_prefs_set_show_toolbar (VnrPrefs *prefs, gboolean show_toolbar)
497 {
498 if(prefs->show_toolbar != show_toolbar)
499 {
500 prefs->show_toolbar = show_toolbar;
501 vnr_prefs_save(prefs);
502 }
503 }
504
505 void
vnr_prefs_set_show_scrollbar(VnrPrefs * prefs,gboolean show_scrollbar)506 vnr_prefs_set_show_scrollbar (VnrPrefs *prefs, gboolean show_scrollbar)
507 {
508 if(prefs->show_scrollbar != show_scrollbar)
509 {
510 prefs->show_scrollbar = show_scrollbar;
511 vnr_prefs_save(prefs);
512 }
513 }
514
515 void
vnr_prefs_set_show_menu_bar(VnrPrefs * prefs,gboolean show_menu_bar)516 vnr_prefs_set_show_menu_bar (VnrPrefs *prefs, gboolean show_menu_bar)
517 {
518 if(prefs->show_menu_bar != show_menu_bar)
519 {
520 prefs->show_menu_bar = show_menu_bar;
521 vnr_prefs_save(prefs);
522 }
523 }
524