OSDN Git Service

0911ec3f6fc6f44d33b3220a9e6897c9d3351ea7
[gpet/origin.git] / src / conf.c
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 /*
3  * Gui Policy Editor for TOMOYO Linux
4  *
5  * conf.c
6  * Copyright (C) Yoshihiro Kusuno 2010 <yocto@users.sourceforge.jp>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
21  */
22
23 #ifdef HAVE_CONFIG_H
24 #  include <config.h>
25 #endif
26
27 #include <gconf/gconf-client.h>
28 #include <gtk/gtk.h>
29 #include <glib/gi18n.h>
30
31 #include "gpet.h"
32
33 #define PRINT_WARN(err) {g_warning("%s", err->message);g_error_free(err);err = NULL;}
34
35 #define DIRECTORY               "/apps/gpet"
36 #define WINDOW_POSITION DIRECTORY"/window_position"
37 #define WINDOW_SIZE             DIRECTORY"/window_size"
38 #define ACL_WINDOW_SIZE DIRECTORY"/acl_window_size"
39 #define PANED_POSITION  DIRECTORY"/paned_position"
40
41 void read_config(transition_t *tran)
42 {
43         GConfClient     *client;
44         GError          *err = NULL;
45         gint            x, y, w, h;
46         GtkPaned        *paned;
47         gint            paned_position;
48
49         gtk_widget_set_size_request(tran->window, 640, 480);
50         gtk_widget_set_size_request(tran->acl_window, 600, 400);
51
52         client = gconf_client_get_default();
53         if (!gconf_client_dir_exists(client, DIRECTORY, &err)) {
54                 return;
55         }
56
57         if (gconf_client_get_pair(client, WINDOW_POSITION,
58                         GCONF_VALUE_INT, GCONF_VALUE_INT, &x, &y, &err))
59                 gtk_window_move(GTK_WINDOW(tran->window), x, y);
60         else
61                 PRINT_WARN(err);
62
63         if (gconf_client_get_pair(client, WINDOW_SIZE,
64                         GCONF_VALUE_INT, GCONF_VALUE_INT, &w, &h, &err))
65                 gtk_window_set_default_size(GTK_WINDOW(tran->window), w, h);
66         else
67                 PRINT_WARN(err);
68
69         if (gconf_client_get_pair(client, ACL_WINDOW_SIZE,
70                         GCONF_VALUE_INT, GCONF_VALUE_INT, &w, &h, &err))
71                 gtk_window_set_default_size(GTK_WINDOW(tran->acl_window), w, h);
72         else
73                 PRINT_WARN(err);
74
75         /* get gpet.c main()*/
76         paned = g_object_get_data(G_OBJECT(tran->window), "pane");
77         if (paned) {
78                 paned_position = gconf_client_get_int(
79                                         client, PANED_POSITION, &err);
80                 if (!err)
81                         gtk_paned_set_position(paned, paned_position);
82                 else
83                         PRINT_WARN(err);
84         }
85 }
86
87 void write_config(transition_t *tran)
88 {
89         GConfClient     *client;
90         GError          *err = NULL;
91         gint            x, y, w, h;
92         GtkPaned        *paned;
93         gint            paned_position;
94
95         client = gconf_client_get_default();
96         if (!gconf_client_dir_exists(client, DIRECTORY, &err)) {
97                 gconf_client_add_dir(client, DIRECTORY,
98                                 GCONF_CLIENT_PRELOAD_NONE, &err);
99         }
100         if (err) {
101                 PRINT_WARN(err);
102                 return;
103         }
104
105         gtk_window_get_position(GTK_WINDOW(tran->window), &x, &y);
106         if (!gconf_client_set_pair(client, WINDOW_POSITION,
107                         GCONF_VALUE_INT, GCONF_VALUE_INT, &x, &y, &err)) {
108                 PRINT_WARN(err);
109         }
110
111         gtk_window_get_size(GTK_WINDOW(tran->window), &w, &h);
112         if (!gconf_client_set_pair(client, WINDOW_SIZE,
113                         GCONF_VALUE_INT, GCONF_VALUE_INT, &w, &h, &err)) {
114                 PRINT_WARN(err);
115         }
116
117         gtk_window_get_size(GTK_WINDOW(tran->acl_window), &w, &h);
118         if (!gconf_client_set_pair(client, ACL_WINDOW_SIZE,
119                         GCONF_VALUE_INT, GCONF_VALUE_INT, &w, &h, &err)) {
120                 PRINT_WARN(err);
121         }
122
123         paned = g_object_get_data(G_OBJECT(tran->window), "pane");
124         if (!tran->acl_detached && paned) {
125                 paned_position = gtk_paned_get_position(paned);
126                 if (!gconf_client_set_int(client, PANED_POSITION,
127                                                 paned_position, &err)) {
128                         PRINT_WARN(err);
129                 }
130         }
131 }
132