3 /* PROTOTYPES - same all the time */
4 static void *_create_data(E_Config_Dialog *cfd);
5 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
9 static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
11 /* Actual config data we will be playing with whil the dialog is active */
12 struct _E_Config_Dialog_Data
30 int desk; /* unused atm */
38 int focus_in; /* unused atm */
39 int focus_out; /* unused atm */
46 /* a nice easy setup function that does the dirty work */
48 e_int_border_locks(E_Border *bd)
51 E_Config_Dialog_View *v;
53 v = E_NEW(E_Config_Dialog_View, 1);
57 v->create_cfdata = _create_data;
58 v->free_cfdata = _free_data;
59 v->basic.apply_cfdata = _basic_apply_data;
60 v->basic.create_widgets = _basic_create_widgets;
61 v->advanced.apply_cfdata = _advanced_apply_data;
62 v->advanced.create_widgets = _advanced_create_widgets;
63 v->override_auto_apply = 1;
64 /* create config diaolg for bd object/data */
65 cfd = e_config_dialog_new(bd->zone->container,
67 "E", "_border_locks_dialog",
69 bd->border_locks_dialog = cfd;
75 _fill_data(E_Config_Dialog_Data *cfdata)
77 cfdata->lock.user.location = (int)cfdata->border->lock_user_location & 0x1;
78 cfdata->lock.user.size = (int)cfdata->border->lock_user_size & 0x1;
79 cfdata->lock.user.stacking = (int)cfdata->border->lock_user_stacking & 0x1;
80 cfdata->lock.user.iconify = (int)cfdata->border->lock_user_iconify & 0x1;
81 cfdata->lock.user.desk = (int)cfdata->border->lock_user_desk & 0x1;
82 cfdata->lock.user.sticky = (int)cfdata->border->lock_user_sticky & 0x1;
83 cfdata->lock.user.shade = (int)cfdata->border->lock_user_shade & 0x1;
84 cfdata->lock.user.maximize = (int)cfdata->border->lock_user_maximize & 0x1;
85 cfdata->lock.user.fullscreen = (int)cfdata->border->lock_user_fullscreen & 0x1;
86 cfdata->lock.client.location = (int)cfdata->border->lock_client_location & 0x1;
87 cfdata->lock.client.size = (int)cfdata->border->lock_client_size & 0x1;
88 cfdata->lock.client.stacking = (int)cfdata->border->lock_client_stacking & 0x1;
89 cfdata->lock.client.iconify = (int)cfdata->border->lock_client_iconify & 0x1;
90 cfdata->lock.client.desk = (int)cfdata->border->lock_client_desk & 0x1;
91 cfdata->lock.client.sticky = (int)cfdata->border->lock_client_sticky & 0x1;
92 cfdata->lock.client.shade = (int)cfdata->border->lock_client_shade & 0x1;
93 cfdata->lock.client.maximize = (int)cfdata->border->lock_client_maximize & 0x1;
94 cfdata->lock.client.fullscreen = (int)cfdata->border->lock_client_fullscreen & 0x1;
95 cfdata->lock.border = (int)cfdata->border->lock_border & 0x1;
96 cfdata->lock.close = (int)cfdata->border->lock_close & 0x1;
97 cfdata->lock.focus_in = (int)cfdata->border->lock_focus_in & 0x1;
98 cfdata->lock.focus_out = (int)cfdata->border->lock_focus_out & 0x1;
99 cfdata->lock.life = (int)cfdata->border->lock_life & 0x1;
100 if ((cfdata->border->remember) &&
101 (cfdata->border->remember->apply & E_REMEMBER_APPLY_LOCKS))
102 cfdata->lock.remember = 1;
104 /* figure out basic config from the current locks */
105 if (cfdata->lock.user.location || cfdata->lock.user.size ||
106 cfdata->lock.user.stacking || cfdata->lock.user.iconify ||
107 cfdata->lock.user.desk || cfdata->lock.user.sticky ||
108 cfdata->lock.user.shade || cfdata->lock.user.maximize ||
109 cfdata->lock.user.fullscreen)
110 cfdata->protect_from_me = 1;
111 if (cfdata->lock.client.location || cfdata->lock.client.size ||
112 cfdata->lock.client.stacking || cfdata->lock.client.iconify ||
113 cfdata->lock.client.desk || cfdata->lock.client.sticky ||
114 cfdata->lock.client.shade || cfdata->lock.client.maximize ||
115 cfdata->lock.client.fullscreen)
116 cfdata->do_what_i_say = 1;
117 if (cfdata->lock.border)
118 cfdata->keep_my_border = 1;
119 if (cfdata->lock.close || cfdata->lock.life)
120 cfdata->important_window = 1;
121 cfdata->remember_locks = cfdata->lock.remember;
125 _create_data(E_Config_Dialog *cfd)
127 /* Create cfdata - cfdata is a temporary block of config data that this
128 * dialog will be dealing with while configuring. it will be applied to
129 * the running systems/config in the apply methods
131 E_Config_Dialog_Data *cfdata;
133 cfdata = E_NEW(E_Config_Dialog_Data, 1);
134 cfdata->border = cfd->data;
140 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
142 /* Free the cfdata */
143 cfdata->border->border_locks_dialog = NULL;
149 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
152 /* Actually take our cfdata settings and apply them in real life */
154 flag = cfdata->do_what_i_say;
155 cfdata->border->lock_client_location = flag;
156 cfdata->border->lock_client_size = flag;
157 cfdata->border->lock_client_stacking = flag;
158 cfdata->border->lock_client_iconify = flag;
159 cfdata->border->lock_client_desk = 0;
160 cfdata->border->lock_client_sticky = flag;
161 cfdata->border->lock_client_shade = flag;
162 cfdata->border->lock_client_maximize = flag;
163 cfdata->border->lock_client_fullscreen = flag;
165 flag = cfdata->protect_from_me;
166 cfdata->border->lock_user_location = flag;
167 cfdata->border->lock_user_size = flag;
168 cfdata->border->lock_user_stacking = flag;
169 cfdata->border->lock_user_iconify = flag;
170 cfdata->border->lock_user_desk = 0;
171 cfdata->border->lock_user_sticky = flag;
172 cfdata->border->lock_user_shade = flag;
173 cfdata->border->lock_user_maximize = flag;
174 cfdata->border->lock_user_fullscreen = flag;
176 flag = cfdata->important_window;
177 cfdata->border->lock_close = flag;
178 cfdata->border->lock_life = flag;
180 flag = cfdata->keep_my_border;
181 cfdata->border->lock_border = flag;
183 if (cfdata->remember_locks)
185 if (!cfdata->border->remember)
187 cfdata->border->remember = e_remember_new();
188 if (cfdata->border->remember)
189 e_remember_use(cfdata->border->remember);
191 if (cfdata->border->remember)
193 cfdata->border->remember->apply |= E_REMEMBER_APPLY_LOCKS;
194 e_remember_default_match_set(cfdata->border->remember, cfdata->border);
195 e_remember_update(cfdata->border);
200 if (cfdata->border->remember)
202 cfdata->border->remember->apply &= ~E_REMEMBER_APPLY_LOCKS;
203 if (cfdata->border->remember->apply == 0)
205 e_remember_unuse(cfdata->border->remember);
206 e_remember_del(cfdata->border->remember);
207 cfdata->border->remember = NULL;
211 e_config_save_queue();
212 return 1; /* Apply was OK */
216 _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
218 /* Actually take our cfdata settings and apply them in real life */
219 cfdata->border->lock_user_location = cfdata->lock.user.location;
220 cfdata->border->lock_user_size = cfdata->lock.user.size;
221 cfdata->border->lock_user_stacking = cfdata->lock.user.stacking;
222 cfdata->border->lock_user_iconify = cfdata->lock.user.iconify;
223 cfdata->border->lock_user_desk = cfdata->lock.user.desk;
224 cfdata->border->lock_user_sticky = cfdata->lock.user.sticky;
225 cfdata->border->lock_user_shade = cfdata->lock.user.shade;
226 cfdata->border->lock_user_maximize = cfdata->lock.user.maximize;
227 cfdata->border->lock_user_fullscreen = cfdata->lock.user.fullscreen;
228 cfdata->border->lock_client_location = cfdata->lock.client.location;
229 cfdata->border->lock_client_size = cfdata->lock.client.size;
230 cfdata->border->lock_client_stacking = cfdata->lock.client.stacking;
231 cfdata->border->lock_client_iconify = cfdata->lock.client.iconify;
232 cfdata->border->lock_client_desk = cfdata->lock.client.desk;
233 cfdata->border->lock_client_sticky = cfdata->lock.client.sticky;
234 cfdata->border->lock_client_shade = cfdata->lock.client.shade;
235 cfdata->border->lock_client_maximize = cfdata->lock.client.maximize;
236 cfdata->border->lock_client_fullscreen = cfdata->lock.client.fullscreen;
237 cfdata->border->lock_border = cfdata->lock.border;
238 cfdata->border->lock_close = cfdata->lock.close;
239 cfdata->border->lock_focus_in = cfdata->lock.focus_in;
240 cfdata->border->lock_focus_out = cfdata->lock.focus_out;
241 cfdata->border->lock_life = cfdata->lock.life;
243 if (cfdata->lock.remember)
245 if (!cfdata->border->remember)
247 cfdata->border->remember = e_remember_new();
248 if (cfdata->border->remember)
249 e_remember_use(cfdata->border->remember);
251 if (cfdata->border->remember)
253 cfdata->border->remember->apply |= E_REMEMBER_APPLY_LOCKS;
254 e_remember_default_match_set(cfdata->border->remember, cfdata->border);
255 e_remember_update(cfdata->border);
260 if (cfdata->border->remember)
262 cfdata->border->remember->apply &= ~E_REMEMBER_APPLY_LOCKS;
263 if (cfdata->border->remember->apply == 0)
265 e_remember_unuse(cfdata->border->remember);
266 e_remember_del(cfdata->border->remember);
267 cfdata->border->remember = NULL;
271 e_config_save_queue();
272 return 1; /* Apply was OK */
277 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
279 /* generate the core widget layout for a basic dialog */
280 Evas_Object *o, *ob, *of;
282 o = e_widget_list_add(evas, 0, 0);
284 of = e_widget_framelist_add(evas, _("Generic Locks"), 0);
285 ob = e_widget_check_add(evas, _("Prevent this window from moving on its own"), &(cfdata->do_what_i_say));
286 e_widget_framelist_object_append(of, ob);
287 ob = e_widget_check_add(evas, _("Prevent this window from being changed by me"), &(cfdata->protect_from_me));
288 e_widget_framelist_object_append(of, ob);
289 ob = e_widget_check_add(evas, _("Prevent this window from being closed"), &(cfdata->important_window));
290 e_widget_framelist_object_append(of, ob);
291 ob = e_widget_check_add(evas, _("Do not allow the border to change on this window"), &(cfdata->keep_my_border));
292 e_widget_framelist_object_append(of, ob);
293 e_widget_list_object_append(o, of, 1, 1, 0.5);
294 ob = e_widget_check_add(evas, _("Remember the Locks for this window appears"), &(cfdata->remember_locks));
295 e_widget_list_object_append(o, ob, 0, 0, 0.0);
300 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
302 /* generate the core widget layout for an advanced dialog */
303 Evas_Object *o, *ob, *of, *ol;
305 ol = e_widget_list_add(evas, 0, 0);
306 o = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale));
308 of = e_widget_frametable_add(evas, _("Prevent Changes In:"), 0);
309 ob = e_widget_check_add(evas, _("Position"), &(cfdata->lock.client.location));
310 e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
311 ob = e_widget_check_add(evas, _("Size"), &(cfdata->lock.client.size));
312 e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
313 ob = e_widget_check_add(evas, _("Stacking"), &(cfdata->lock.client.stacking));
314 e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
315 ob = e_widget_check_add(evas, _("Iconified state"), &(cfdata->lock.client.iconify));
316 e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
317 ob = e_widget_check_add(evas, _("Stickiness"), &(cfdata->lock.client.sticky));
318 e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
319 ob = e_widget_check_add(evas, _("Shaded state"), &(cfdata->lock.client.shade));
320 e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
321 ob = e_widget_check_add(evas, _("Maximized state"), &(cfdata->lock.client.maximize));
322 e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
323 ob = e_widget_check_add(evas, _("Fullscreen state"), &(cfdata->lock.client.fullscreen));
324 e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
325 e_widget_toolbook_page_append(o, NULL, _("Program Locks"), of, 1, 1, 1, 1, 0.5, 0.0);
327 of = e_widget_frametable_add(evas, _("Prevent Changes In:"), 0);
328 ob = e_widget_check_add(evas, _("Position"), &(cfdata->lock.user.location));
329 e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
330 ob = e_widget_check_add(evas, _("Size"), &(cfdata->lock.user.size));
331 e_widget_frametable_object_append(of, ob, 0, 1, 1, 1, 1, 1, 1, 1);
332 ob = e_widget_check_add(evas, _("Stacking"), &(cfdata->lock.user.stacking));
333 e_widget_frametable_object_append(of, ob, 0, 2, 1, 1, 1, 1, 1, 1);
334 ob = e_widget_check_add(evas, _("Iconified state"), &(cfdata->lock.user.iconify));
335 e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1);
336 ob = e_widget_check_add(evas, _("Stickiness"), &(cfdata->lock.user.sticky));
337 e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 1, 1);
338 ob = e_widget_check_add(evas, _("Shaded state"), &(cfdata->lock.user.shade));
339 e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
340 ob = e_widget_check_add(evas, _("Maximized state"), &(cfdata->lock.user.maximize));
341 e_widget_frametable_object_append(of, ob, 1, 1, 1, 1, 1, 1, 1, 1);
342 ob = e_widget_check_add(evas, _("Fullscreen state"), &(cfdata->lock.user.fullscreen));
343 e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
344 ob = e_widget_check_add(evas, _("Border style"), &(cfdata->lock.border));
345 e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
346 e_widget_toolbook_page_append(o, NULL, _("User Locks"), of, 1, 1, 1, 1, 0.5, 0.0);
348 of = e_widget_framelist_add(evas, _("Prevent:"), 0);
349 ob = e_widget_check_add(evas, _("Closing the window"), &(cfdata->lock.close));
350 e_widget_framelist_object_append(of, ob);
351 ob = e_widget_check_add(evas, _("Logging out while this window is open"), &(cfdata->lock.life));
352 e_widget_framelist_object_append(of, ob);
353 e_widget_toolbook_page_append(o, NULL, _("Behavior Locks"), of, 1, 1, 1, 1, 0.5, 0.0);
354 e_widget_toolbook_page_show(o, 0);
355 e_widget_list_object_append(ol, o, 1, 1, 0.5);
357 ob = e_widget_check_add(evas, _("Remember these Locks"), &(cfdata->lock.remember));
358 e_widget_list_object_append(ol, ob, 1, 1, 0.5);