]> icculus.org git repositories - dana/obconf.git/blob - src/dock.c
conflicting accels
[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, "Left"))        pos = POSITION_LEFT;
77     else if (!strcasecmp(s, "Right"))       pos = POSITION_RIGHT;
78     else if (!strcasecmp(s, "BottomLeft"))  pos = POSITION_BOTTOMLEFT;
79     else if (!strcasecmp(s, "Bottom"))      pos = POSITION_BOTTOM;
80     else if (!strcasecmp(s, "BottomRight")) pos = POSITION_BOTTOMRIGHT;
81     else if (!strcasecmp(s, "Floating"))    pos = POSITION_FLOATING;
82     else                                    pos = POSITION_TOPLEFT;
83     g_free(s);
84     gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos);
85
86     w = get_widget("dock_float_x");
87     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
88                               tree_get_int("dock/floatingX", 0));
89
90     w = get_widget("dock_float_y");
91     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
92                               tree_get_int("dock/floatingY", 0));
93
94     s = tree_get_string("dock/stacking", "Top");
95     if(!strcasecmp(s, "Normal"))
96         w = get_widget("dock_stack_normal");
97     else if(!strcasecmp(s, "Bottom"))
98         w = get_widget("dock_stack_bottom");
99     else
100         w = get_widget("dock_stack_top");
101     g_free(s);
102     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE);
103
104     w = get_widget("dock_direction");
105     s = tree_get_string("dock/direction", "Vertical");
106     if (!strcasecmp(s, "Horizontal")) pos = DIRECTION_HORIZONTAL;
107     else                              pos = DIRECTION_VERTICAL;
108     g_free(s);
109     gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos);
110
111     w = get_widget("dock_nostrut");
112     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
113                                  tree_get_bool("dock/noStrut", FALSE));
114
115     w = get_widget("dock_hide");
116     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w),
117                                  tree_get_bool("dock/autoHide", FALSE));
118
119     w = get_widget("dock_hide_delay");
120     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
121                               tree_get_int("dock/hideDelay", 300));
122
123     w = get_widget("dock_show_delay");
124     gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
125                               tree_get_int("dock/showDelay", 300));
126
127     dock_enable_stuff();
128
129     mapping = FALSE;
130 }
131
132 static void dock_enable_stuff()
133 {
134     GtkWidget *w, *s;
135     gboolean b;
136
137     w = get_widget("dock_position");
138     b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) == POSITION_FLOATING;
139
140     s = get_widget("dock_float_x");
141     gtk_widget_set_sensitive(s, b);
142     s = get_widget("dock_float_y");
143     gtk_widget_set_sensitive(s, b);
144     s = get_widget("dock_float_label");
145     gtk_widget_set_sensitive(s, b);
146     s = get_widget("dock_float_label_x");
147     gtk_widget_set_sensitive(s, b);
148     s = get_widget("dock_nostrut");
149     gtk_widget_set_sensitive(s, !b);
150
151     w = get_widget("dock_hide");
152     b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
153
154     s = get_widget("dock_hide_delay");
155     gtk_widget_set_sensitive(s, b);
156     s = get_widget("dock_hide_label");
157     gtk_widget_set_sensitive(s, b);
158     s = get_widget("dock_hide_label_units");
159     gtk_widget_set_sensitive(s, b);
160     s = get_widget("dock_show_delay");
161     gtk_widget_set_sensitive(s, b);
162     s = get_widget("dock_show_label");
163     gtk_widget_set_sensitive(s, b);
164     s = get_widget("dock_show_label_units");
165     gtk_widget_set_sensitive(s, b);
166 }
167
168 void on_dock_top_left_activate(GtkMenuItem *w, gpointer data)
169 {
170     if (mapping) return;
171
172     tree_set_string("dock/position", "TopLeft");
173     dock_enable_stuff();
174 }
175
176 void on_dock_top_activate(GtkMenuItem *w, gpointer data)
177 {
178     if (mapping) return;
179
180     tree_set_string("dock/position", "Top");
181     dock_enable_stuff();
182 }
183
184 void on_dock_top_right_activate(GtkMenuItem *w, gpointer data)
185 {
186     if (mapping) return;
187
188     tree_set_string("dock/position", "TopRight");
189     dock_enable_stuff();
190 }
191
192 void on_dock_left_activate(GtkMenuItem *w, gpointer data)
193 {
194     if (mapping) return;
195
196     tree_set_string("dock/position", "Left");
197     dock_enable_stuff();
198 }
199
200 void on_dock_right_activate(GtkMenuItem *w, gpointer data)
201 {
202     if (mapping) return;
203
204     tree_set_string("dock/position", "Right");
205     dock_enable_stuff();
206 }
207
208 void on_dock_bottom_left_activate(GtkMenuItem *w, gpointer data)
209 {
210     if (mapping) return;
211
212     tree_set_string("dock/position", "BottomLeft");
213     dock_enable_stuff();
214 }
215
216 void on_dock_bottom_activate(GtkMenuItem *w, gpointer data)
217 {
218     if (mapping) return;
219
220     tree_set_string("dock/position", "Bottom");
221     dock_enable_stuff();
222 }
223
224 void on_dock_bottom_right_activate(GtkMenuItem *w, gpointer data)
225 {
226     if (mapping) return;
227
228     tree_set_string("dock/position", "BottomRight");
229     dock_enable_stuff();
230 }
231
232 void on_dock_floating_activate(GtkMenuItem *w, gpointer data)
233 {
234     if (mapping) return;
235
236     tree_set_string("dock/position", "Floating");
237     dock_enable_stuff();
238 }
239
240 void on_dock_float_x_value_changed(GtkSpinButton *w, gpointer data)
241 {
242     if (mapping) return;
243
244     tree_set_int("dock/floatingX", gtk_spin_button_get_value_as_int(w));
245 }
246
247 void on_dock_float_y_value_changed(GtkSpinButton *w, gpointer data)
248 {
249     if (mapping) return;
250
251     tree_set_int("dock/floatingY", gtk_spin_button_get_value_as_int(w));
252 }
253
254 void on_dock_stacking_top_toggled(GtkToggleButton *w, gpointer data)
255 {
256     if (mapping) return;
257
258     if(gtk_toggle_button_get_active(w))
259         tree_set_string("dock/stacking", "Top");
260 }
261
262 void on_dock_stacking_normal_toggled(GtkToggleButton *w, gpointer data)
263 {
264     if (mapping) return;
265
266     if(gtk_toggle_button_get_active(w))
267         tree_set_string("dock/stacking", "Normal");
268 }
269
270 void on_dock_stacking_bottom_toggled(GtkToggleButton *w, gpointer data)
271 {
272     if (mapping) return;
273
274     if(gtk_toggle_button_get_active(w))
275         tree_set_string("dock/stacking", "Bottom");
276 }
277
278 void on_dock_horizontal_activate(GtkMenuItem *w, gpointer data)
279 {
280     if (mapping) return;
281
282     tree_set_string("dock/direction", "Horizontal");
283 }
284
285 void on_dock_vertical_activate(GtkMenuItem *w, gpointer data)
286 {
287     if (mapping) return;
288
289     tree_set_string("dock/direction", "Vertical");
290 }
291
292 void on_dock_nostrut_toggled(GtkToggleButton *w, gpointer data)
293 {
294     if (mapping) return;
295
296     tree_set_bool("dock/noStrut", gtk_toggle_button_get_active(w));
297 }
298
299 void on_dock_hide_toggled(GtkToggleButton *w, gpointer data)
300 {
301     if (mapping) return;
302
303     tree_set_bool("dock/autoHide", gtk_toggle_button_get_active(w));
304     dock_enable_stuff();
305 }
306
307 void on_dock_hide_delay_value_changed(GtkSpinButton *w, gpointer data)
308 {
309     if (mapping) return;
310
311     tree_set_int("dock/hideDelay",
312                  gtk_spin_button_get_value_as_int(w));
313 }
314
315 void on_dock_show_delay_value_changed(GtkSpinButton *w, gpointer data)
316 {
317     if (mapping) return;
318
319     tree_set_int("dock/showDelay",
320                  gtk_spin_button_get_value_as_int(w));
321 }
322