]> icculus.org git repositories - dana/obconf.git/blob - src/dock.c
Stop using libglade
[dana/obconf.git] / src / dock.c
1 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
2
3    dock.c for ObConf, the configuration tool for Openbox
4    Copyright (c) 2003-2007   Dana Jansens
5    Copyright (c) 2003        Tim Riley
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    See the COPYING file for a copy of the GNU General Public License.
18 */
19
20 #include "main.h"
21 #include "tree.h"
22
23 static gboolean mapping = FALSE;
24
25 #define POSITION_TOPLEFT     0
26 #define POSITION_TOP         1
27 #define POSITION_TOPRIGHT    2
28 #define POSITION_LEFT        3
29 #define POSITION_RIGHT       4
30 #define POSITION_BOTTOMLEFT  5
31 #define POSITION_BOTTOM      6
32 #define POSITION_BOTTOMRIGHT 7
33 #define POSITION_FLOATING    8
34
35 #define DIRECTION_VERTICAL   0
36 #define DIRECTION_HORIZONTAL 1
37
38 static void dock_enable_stuff();
39
40 void dock_setup_tab()
41 {
42     GtkWidget *w, *w1, *w2;
43     GtkSizeGroup *group;
44     gchar *s;
45     gint pos;
46
47     mapping = TRUE;
48
49     w1    = get_widget("dock_position");
50     w2    = get_widget("dock_direction");
51     group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
52     gtk_size_group_add_widget(group, w1);
53     gtk_size_group_add_widget(group, w2);
54
55     w1    = get_widget("dock_position_label");
56     w2    = get_widget("dock_direction_label");
57     group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
58     gtk_size_group_add_widget(group, w1);
59     gtk_size_group_add_widget(group, w2);
60
61     w1    = get_widget("dock_hide_label");
62     w2    = get_widget("dock_show_label");
63     group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
64     gtk_size_group_add_widget(group, w1);
65     gtk_size_group_add_widget(group, w2);
66
67     w1    = get_widget("dock_hide_delay");
68     w2    = get_widget("dock_show_delay");
69     group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
70     gtk_size_group_add_widget(group, w1);
71     gtk_size_group_add_widget(group, w2);
72
73     w = get_widget("dock_position");
74     s = tree_get_string("dock/position", "TopLeft");
75     if (!strcasecmp(s, "Top"))              pos = POSITION_TOP;
76     else if (!strcasecmp(s, "TopRight"))    pos = POSITION_TOPRIGHT;
77     else if (!strcasecmp(s, "Left"))        pos = POSITION_LEFT;
78     else if (!strcasecmp(s, "Right"))       pos = POSITION_RIGHT;
79     else if (!strcasecmp(s, "BottomLeft"))  pos = POSITION_BOTTOMLEFT;
80     else if (!strcasecmp(s, "Bottom"))      pos = POSITION_BOTTOM;
81     else if (!strcasecmp(s, "BottomRight")) pos = POSITION_BOTTOMRIGHT;
82     else if (!strcasecmp(s, "Floating"))    pos = POSITION_FLOATING;
83     else                                    pos = POSITION_TOPLEFT;
84     g_free(s);
85     gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos);
86
87     w = get_widget("dock_float_x");
88     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
89                               tree_get_int("dock/floatingX", 0));
90
91     w = get_widget("dock_float_y");
92     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
93                               tree_get_int("dock/floatingY", 0));
94
95     s = tree_get_string("dock/stacking", "Above");
96     if(!strcasecmp(s, "Normal"))
97         w = get_widget("dock_stack_normal");
98     else if(!strcasecmp(s, "Below"))
99         w = get_widget("dock_stack_bottom");
100     else
101         w = get_widget("dock_stack_top");
102     g_free(s);
103     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
104
105     w = get_widget("dock_direction");
106     s = tree_get_string("dock/direction", "Vertical");
107     if (!strcasecmp(s, "Horizontal")) pos = DIRECTION_HORIZONTAL;
108     else                              pos = DIRECTION_VERTICAL;
109     g_free(s);
110     gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos);
111
112     w = get_widget("dock_nostrut");
113     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
114                                  tree_get_bool("dock/noStrut", FALSE));
115
116     w = get_widget("dock_hide");
117     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
118                                  tree_get_bool("dock/autoHide", FALSE));
119
120     w = get_widget("dock_hide_delay");
121     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
122                               tree_get_int("dock/hideDelay", 300));
123
124     w = get_widget("dock_show_delay");
125     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
126                               tree_get_int("dock/showDelay", 300));
127
128     dock_enable_stuff();
129
130     mapping = FALSE;
131 }
132
133 static void dock_enable_stuff()
134 {
135     GtkWidget *w, *s;
136     gboolean b;
137
138     w = get_widget("dock_position");
139     b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) == POSITION_FLOATING;
140
141     s = get_widget("dock_float_x");
142     gtk_widget_set_sensitive(s, b);
143     s = get_widget("dock_float_y");
144     gtk_widget_set_sensitive(s, b);
145     s = get_widget("dock_float_label");
146     gtk_widget_set_sensitive(s, b);
147     s = get_widget("dock_float_label_x");
148     gtk_widget_set_sensitive(s, b);
149     s = get_widget("dock_nostrut");
150     gtk_widget_set_sensitive(s, !b);
151
152     w = get_widget("dock_hide");
153     b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
154
155     s = get_widget("dock_hide_delay");
156     gtk_widget_set_sensitive(s, b);
157     s = get_widget("dock_hide_label");
158     gtk_widget_set_sensitive(s, b);
159     s = get_widget("dock_hide_label_units");
160     gtk_widget_set_sensitive(s, b);
161     s = get_widget("dock_show_delay");
162     gtk_widget_set_sensitive(s, b);
163     s = get_widget("dock_show_label");
164     gtk_widget_set_sensitive(s, b);
165     s = get_widget("dock_show_label_units");
166     gtk_widget_set_sensitive(s, b);
167 }
168
169 void on_dock_position_changed(GtkComboBox *w, gpointer data)
170 {
171     if (mapping) return;
172
173     switch (gtk_combo_box_get_active(w)) {
174     case 0:
175       tree_set_string("dock/position", "TopLeft");
176       break;
177     case 1:
178       tree_set_string("dock/position", "Top");
179       break;
180     case 2:
181       tree_set_string("dock/position", "TopRight");
182       break;
183     case 3:
184       tree_set_string("dock/position", "Left");
185       break;
186     case 4:
187       tree_set_string("dock/position", "Right");
188       break;
189     case 5:
190       tree_set_string("dock/position", "BottomLeft");
191       break;
192     case 6:
193       tree_set_string("dock/position", "Bottom");
194       break;
195     case 7:
196       tree_set_string("dock/position", "BottomRight");
197       break;
198     case 8:
199       tree_set_string("dock/position", "Floating");
200       break;
201     }
202     dock_enable_stuff();
203 }
204
205 void on_dock_float_x_value_changed(GtkSpinButton *w, gpointer data)
206 {
207     if (mapping) return;
208
209     tree_set_int("dock/floatingX", gtk_spin_button_get_value_as_int(w));
210 }
211
212 void on_dock_float_y_value_changed(GtkSpinButton *w, gpointer data)
213 {
214     if (mapping) return;
215
216     tree_set_int("dock/floatingY", gtk_spin_button_get_value_as_int(w));
217 }
218
219 void on_dock_stacking_top_toggled(GtkToggleButton *w, gpointer data)
220 {
221     if (mapping) return;
222
223     if(gtk_toggle_button_get_active(w))
224         tree_set_string("dock/stacking", "Above");
225 }
226
227 void on_dock_stacking_normal_toggled(GtkToggleButton *w, gpointer data)
228 {
229     if (mapping) return;
230
231     if(gtk_toggle_button_get_active(w))
232         tree_set_string("dock/stacking", "Normal");
233 }
234
235 void on_dock_stacking_bottom_toggled(GtkToggleButton *w, gpointer data)
236 {
237     if (mapping) return;
238
239     if(gtk_toggle_button_get_active(w))
240         tree_set_string("dock/stacking", "Below");
241 }
242
243 void on_dock_direction_changed(GtkComboBox *w, gpointer data)
244 {
245     if (mapping) return;
246
247     switch (gtk_combo_box_get_active(w)) {
248     case 0:
249       tree_set_string("dock/direction", "Vertical");
250       break;
251     case 1:
252       tree_set_string("dock/direction", "Horizontal");
253       break;
254     }
255 }
256
257 void on_dock_nostrut_toggled(GtkToggleButton *w, gpointer data)
258 {
259     if (mapping) return;
260
261     tree_set_bool("dock/noStrut", gtk_toggle_button_get_active(w));
262 }
263
264 void on_dock_hide_toggled(GtkToggleButton *w, gpointer data)
265 {
266     if (mapping) return;
267
268     tree_set_bool("dock/autoHide", gtk_toggle_button_get_active(w));
269     dock_enable_stuff();
270 }
271
272 void on_dock_hide_delay_value_changed(GtkSpinButton *w, gpointer data)
273 {
274     if (mapping) return;
275
276     tree_set_int("dock/hideDelay",
277                  gtk_spin_button_get_value_as_int(w));
278 }
279
280 void on_dock_show_delay_value_changed(GtkSpinButton *w, gpointer data)
281 {
282     if (mapping) return;
283
284     tree_set_int("dock/showDelay",
285                  gtk_spin_button_get_value_as_int(w));
286 }
287