-
Notifications
You must be signed in to change notification settings - Fork 1
/
preferences.c
71 lines (51 loc) · 1.71 KB
/
preferences.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "config.h"
#include "preferences.h"
#include "cinifile.h"
#include <libpath.h>
#include <cfile.h>
#include <glib.h>
static Preferences _prefs;
Preferences* get_preferences()
{
return &_prefs;
}
void prefs_cleanup()
{
cstr_free(_prefs.filepath);
}
Preferences* prefs_file_read()
{
if (!_prefs.filepath)
{
_prefs.filepath = cstr_new_size(32);
cstr_fmt(_prefs.filepath, "%s/%s/", g_get_user_config_dir(), APP_NAME);
g_mkdir_with_parents(c_str(_prefs.filepath), 0700);
cstr_append(_prefs.filepath, APP_NAME);
cstr_append(_prefs.filepath, ".conf");
}
CIniFileAuto *file = cinifile_new();
cinifile_read(file, c_str(_prefs.filepath));
CIniSection *section = cinifile_section(file, "General");
cinisection_int(section, &_prefs.window_width, "WindowWidth", 640);
cinisection_int(section, &_prefs.window_height, "WindowHeight", 480);
cinisection_int(section, &_prefs.window_maximized, "WindowMaximized", 0);
cinisection_int(section, &_prefs.show_all, "ShowAll", 0);
return &_prefs;
}
void prefs_write()
{
CFileAuto *outfile = cfile_new();
if (!cfile_open(outfile, c_str(_prefs.filepath), "wb"))
return;
CStringAuto *line = cstr_new_size(64);
cstr_fmt(line, "[General]\n");
cfile_write(outfile, c_str(line));
cstr_fmt(line, "WindowWidth=%d\n", _prefs.window_width);
cfile_write(outfile, c_str(line));
cstr_fmt(line, "WindowHeight=%d\n", _prefs.window_height);
cfile_write(outfile, c_str(line));
cstr_fmt(line, "WindowMaximized=%d\n", _prefs.window_maximized);
cfile_write(outfile, c_str(line));
cstr_fmt(line, "ShowAll=%d\n", _prefs.show_all);
cfile_write(outfile, c_str(line));
}