[WM_ROT] support for rotating prediction window without virtual keyboard
[platform/core/uifw/e17.git] / src / bin / e_int_border_locks.c
1 #include "e.h"
2
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);
10
11 /* Actual config data we will be playing with whil the dialog is active */
12 struct _E_Config_Dialog_Data
13 {
14    E_Border *border;
15    /*- BASIC -*/
16    int       do_what_i_say;
17    int       protect_from_me;
18    int       keep_my_border;
19    int       important_window;
20    int       remember_locks;
21    /*- ADVANCED -*/
22    struct
23    {
24       struct
25       {
26          int location;
27          int size;
28          int stacking;
29          int iconify;
30          int desk; /* unused atm */
31          int sticky;
32          int shade;
33          int maximize;
34          int fullscreen;
35       } user, client;
36       int border;
37       int close;
38       int focus_in; /* unused atm */
39       int focus_out; /* unused atm */
40       int life;
41
42       int remember;
43    } lock;
44 };
45
46 /* a nice easy setup function that does the dirty work */
47 EAPI void
48 e_int_border_locks(E_Border *bd)
49 {
50    E_Config_Dialog *cfd;
51    E_Config_Dialog_View *v;
52
53    v = E_NEW(E_Config_Dialog_View, 1);
54    if (v)
55      {
56         /* methods */
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,
66                                   _("Window Locks"),
67                                   "E", "_border_locks_dialog",
68                                   NULL, 0, v, bd);
69         bd->border_locks_dialog = cfd;
70      }
71 }
72
73 /**--CREATE--**/
74 static void
75 _fill_data(E_Config_Dialog_Data *cfdata)
76 {
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;
103
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;
122 }
123
124 static void *
125 _create_data(E_Config_Dialog *cfd)
126 {
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
130     */
131    E_Config_Dialog_Data *cfdata;
132
133    cfdata = E_NEW(E_Config_Dialog_Data, 1);
134    cfdata->border = cfd->data;
135    _fill_data(cfdata);
136    return cfdata;
137 }
138
139 static void
140 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
141 {
142    /* Free the cfdata */
143    cfdata->border->border_locks_dialog = NULL;
144    free(cfdata);
145 }
146
147 /**--APPLY--**/
148 static int
149 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
150 {
151    int flag;
152    /* Actually take our cfdata settings and apply them in real life */
153
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;
164
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;
175
176    flag = cfdata->important_window;
177    cfdata->border->lock_close = flag;
178    cfdata->border->lock_life = flag;
179
180    flag = cfdata->keep_my_border;
181    cfdata->border->lock_border = flag;
182
183    if (cfdata->remember_locks)
184      {
185         if (!cfdata->border->remember)
186           {
187              cfdata->border->remember = e_remember_new();
188              if (cfdata->border->remember)
189                e_remember_use(cfdata->border->remember);
190           }
191         if (cfdata->border->remember)
192           {
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);
196           }
197      }
198    else
199      {
200         if (cfdata->border->remember)
201           {
202              cfdata->border->remember->apply &= ~E_REMEMBER_APPLY_LOCKS;
203              if (cfdata->border->remember->apply == 0)
204                {
205                   e_remember_unuse(cfdata->border->remember);
206                   e_remember_del(cfdata->border->remember);
207                   cfdata->border->remember = NULL;
208                }
209           }
210      }
211    e_config_save_queue();
212    return 1; /* Apply was OK */
213 }
214
215 static int
216 _advanced_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
217 {
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;
242
243    if (cfdata->lock.remember)
244      {
245         if (!cfdata->border->remember)
246           {
247              cfdata->border->remember = e_remember_new();
248              if (cfdata->border->remember)
249                e_remember_use(cfdata->border->remember);
250           }
251         if (cfdata->border->remember)
252           {
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);
256           }
257      }
258    else
259      {
260         if (cfdata->border->remember)
261           {
262              cfdata->border->remember->apply &= ~E_REMEMBER_APPLY_LOCKS;
263              if (cfdata->border->remember->apply == 0)
264                {
265                   e_remember_unuse(cfdata->border->remember);
266                   e_remember_del(cfdata->border->remember);
267                   cfdata->border->remember = NULL;
268                }
269           }
270      }
271    e_config_save_queue();
272    return 1; /* Apply was OK */
273 }
274
275 /**--GUI--**/
276 static Evas_Object *
277 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
278 {
279    /* generate the core widget layout for a basic dialog */
280    Evas_Object *o, *ob, *of;
281
282    o = e_widget_list_add(evas, 0, 0);
283
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);
296    return o;
297 }
298
299 static Evas_Object *
300 _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
301 {
302    /* generate the core widget layout for an advanced dialog */
303    Evas_Object *o, *ob, *of, *ol;
304
305    ol = e_widget_list_add(evas, 0, 0);
306    o = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale));
307
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);
326
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);
347
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);
356
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);
359    
360
361    return ol;
362 }
363