aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/examples/win_example.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/elementary/src/examples/win_example.c')
-rw-r--r--libraries/elementary/src/examples/win_example.c327
1 files changed, 327 insertions, 0 deletions
diff --git a/libraries/elementary/src/examples/win_example.c b/libraries/elementary/src/examples/win_example.c
new file mode 100644
index 0000000..87e985d
--- /dev/null
+++ b/libraries/elementary/src/examples/win_example.c
@@ -0,0 +1,327 @@
1/*
2 * gcc -o win_example win_example.c `pkg-config --cflags --libs elementary ecore-x`
3 */
4#ifdef HAVE_ELEMENTARY_X
5# include <Ecore_X.h>
6#endif
7
8#include <Elementary.h>
9
10static void
11_btn_activate_cb(void *data, Evas_Object *obj, void *event)
12{
13 elm_win_activate(data);
14}
15
16static void
17_btn_lower_cb(void *data, Evas_Object *obj, void *event)
18{
19 elm_win_lower(data);
20}
21
22static void
23_btn_raise_cb(void *data, Evas_Object *obj, void *event)
24{
25 elm_win_raise(data);
26}
27
28static void
29_btn_borderless_cb(void *data, Evas_Object *obj, void *event)
30{
31 Eina_Bool flag = elm_win_borderless_get(data);
32 elm_win_borderless_set(data, !flag);
33}
34
35static void
36_btn_shaped_cb(void *data, Evas_Object *obj, void *event)
37{
38 Eina_Bool flag = elm_win_shaped_get(data);
39 elm_win_shaped_set(data, !flag);
40}
41
42static void
43_btn_alpha_cb(void *data, Evas_Object *obj, void *event)
44{
45 Eina_Bool flag = elm_win_alpha_get(data);
46 elm_win_alpha_set(data, !flag);
47}
48
49static void
50_btn_fullscreen_cb(void *data, Evas_Object *obj, void *event)
51{
52 Eina_Bool flag = elm_win_fullscreen_get(data);
53 elm_win_fullscreen_set(data, !flag);
54}
55
56static void
57_btn_maximized_cb(void *data, Evas_Object *obj, void *event)
58{
59 Eina_Bool flag = elm_win_maximized_get(data);
60 elm_win_maximized_set(data, !flag);
61}
62
63static void
64_btn_iconified_cb(void *data, Evas_Object *obj, void *event)
65{
66 Eina_Bool flag = elm_win_iconified_get(data);
67 elm_win_iconified_set(data, !flag);
68}
69
70static void
71_btn_rotation_cb(void *data, Evas_Object *obj, void *event)
72{
73 int angle = elm_win_rotation_get(data);
74 angle = (angle + 90) % 360;
75 elm_win_rotation_set(data, angle);
76}
77
78static void
79_btn_rotation_resize_cb(void *data, Evas_Object *obj, void *event)
80{
81 int angle = elm_win_rotation_get(data);
82 angle = (angle + 90) % 360;
83 elm_win_rotation_with_resize_set(data, angle);
84}
85
86static void
87_btn_sticky_cb(void *data, Evas_Object *obj, void *event)
88{
89 Eina_Bool flag = elm_win_sticky_get(data);
90 elm_win_sticky_set(data, !flag);
91}
92
93static void
94_yes_quit_cb(void *data, Evas_Object *obj, void *event)
95{
96 elm_exit();
97}
98
99static void
100_no_quit_cb(void *data, Evas_Object *obj, void *event)
101{
102 evas_object_del(data);
103}
104
105static void
106_main_win_del_cb(void *data, Evas_Object *obj, void *event)
107{
108 Evas_Object *msg, *box, *box2, *btn, *lbl, *sep;
109
110 msg = elm_notify_add(obj);
111 elm_notify_orient_set(msg, ELM_NOTIFY_ORIENT_CENTER);
112 elm_notify_allow_events_set(msg, EINA_FALSE);
113 evas_object_show(msg);
114
115 box = elm_box_add(obj);
116 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
117 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
118 elm_object_content_set(msg, box);
119 evas_object_show(box);
120
121 lbl = elm_label_add(obj);
122 elm_object_text_set(lbl, "Really want quit?");
123 evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
124 evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
125 elm_box_pack_end(box, lbl);
126 evas_object_show(lbl);
127
128 sep = elm_separator_add(obj);
129 elm_separator_horizontal_set(sep, EINA_TRUE);
130 elm_box_pack_end(box, sep);
131 evas_object_show(sep);
132
133 box2 = elm_box_add(obj);
134 elm_box_horizontal_set(box2, EINA_TRUE);
135 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
136 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
137 elm_box_pack_end(box, box2);
138 evas_object_show(box2);
139
140 btn = elm_button_add(obj);
141 elm_object_text_set(btn, "Yes");
142 elm_box_pack_end(box2, btn);
143 evas_object_show(btn);
144
145 evas_object_smart_callback_add(btn, "clicked", _yes_quit_cb, NULL);
146
147 btn = elm_button_add(obj);
148 elm_object_text_set(btn, "No");
149 elm_box_pack_end(box2, btn);
150 evas_object_show(btn);
151
152 evas_object_smart_callback_add(btn, "clicked", _no_quit_cb, msg);
153}
154
155static void
156_force_focus_cb(void *data, Evas_Object *obj, void *event)
157{
158#ifdef HAVE_ELEMENTARY_X
159 Ecore_X_Window xwin = elm_win_xwindow_get(data);
160 ecore_x_window_focus(xwin);
161#endif
162}
163
164static void
165_win_focused_cb(void *data, Evas_Object *obj, void *event)
166{
167 const char *name = data;
168 printf("Window focused: %s\n", name);
169}
170
171EAPI_MAIN int
172elm_main(int argc, char *argv[])
173{
174 Evas_Object *win, *win2, *bg, *bigbox, *box, *btn, *o;
175 char buf[256];
176
177 elm_app_info_set(elm_main, "elementary", "images/logo.png");
178 win = elm_win_add(NULL, "win-example", ELM_WIN_BASIC);
179 elm_win_title_set(win, "Elm_Win Example");
180 elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
181 evas_object_resize(win, 400, 400);
182 evas_object_show(win);
183
184 evas_object_smart_callback_add(win, "focus,in", _win_focused_cb, "mainwin");
185
186 evas_object_smart_callback_add(win, "delete,request", _main_win_del_cb,
187 NULL);
188
189 bg = elm_bg_add(win);
190 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
191 elm_win_resize_object_add(win, bg);
192 evas_object_show(bg);
193
194 bigbox = elm_box_add(win);
195 elm_box_horizontal_set(bigbox, EINA_TRUE);
196 evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
197 elm_win_resize_object_add(win, bigbox);
198 evas_object_show(bigbox);
199
200 box = elm_box_add(win);
201 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
202 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
203 elm_box_pack_end(bigbox, box);
204 evas_object_show(box);
205
206 win2 = elm_win_add(NULL, "sub-win-example", ELM_WIN_DIALOG_BASIC);
207 elm_win_autodel_set(win2, EINA_TRUE);
208 elm_win_title_set(win2, "Managed window");
209 evas_object_show(win2);
210
211 evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb, "managed");
212
213 o = elm_icon_add(win2);
214 sprintf(buf, "%s/images/logo.png", elm_app_data_dir_get());
215 elm_icon_file_set(o, buf, NULL);
216 elm_icon_resizable_set(o, 0, 0);
217 elm_icon_no_scale_set(o, EINA_TRUE);
218 elm_win_resize_object_add(win2, o);
219 evas_object_show(o);
220
221 o = elm_label_add(win);
222 elm_object_text_set(o, "<b>Managed Window</b>");
223 elm_box_pack_end(box, o);
224 evas_object_show(o);
225
226#define WIN_ACTION(name) \
227 do { \
228 btn = elm_button_add(win); \
229 elm_object_text_set(btn, #name); \
230 elm_box_pack_end(box, btn); \
231 evas_object_show(btn); \
232 evas_object_smart_callback_add(btn, "clicked", _btn_##name##_cb, win2); \
233 } while (0)
234
235 WIN_ACTION(activate);
236 WIN_ACTION(lower);
237 WIN_ACTION(raise);
238 WIN_ACTION(borderless);
239 WIN_ACTION(shaped);
240 WIN_ACTION(alpha);
241 WIN_ACTION(fullscreen);
242 WIN_ACTION(maximized);
243 WIN_ACTION(iconified);
244 WIN_ACTION(rotation);
245 WIN_ACTION(rotation_resize);
246 WIN_ACTION(sticky);
247
248 box = elm_box_add(win);
249 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
250 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
251 elm_box_pack_end(bigbox, box);
252 evas_object_show(box);
253
254 win2 = elm_win_add(NULL, "sub-win-example2", ELM_WIN_BASIC);
255 elm_win_autodel_set(win2, EINA_TRUE);
256 elm_win_title_set(win2, "Non-managed window");
257 elm_win_override_set(win2, EINA_TRUE);
258 evas_object_show(win2);
259
260 evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb,
261 "override");
262
263 o = elm_bg_add(win2);
264 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
265 elm_win_resize_object_add(win2, o);
266 evas_object_show(o);
267
268 bigbox = elm_box_add(win2);
269 evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
270 elm_win_resize_object_add(win2, bigbox);
271 evas_object_show(bigbox);
272
273 o = elm_label_add(win2);
274 elm_object_text_set(o, "This window should have no borders or titlebar.<ps>"
275 "It was set in override mode, so the Window Manager<ps>"
276 "should ignore everything about it.<ps>"
277 "It's up to the program to handle it properly, and some"
278 "of the actions performed on it may not have any effect."
279 );
280 elm_box_pack_end(bigbox, o);
281 evas_object_show(o);
282
283 o = elm_entry_add(win2);
284 elm_object_text_set(o, "See if you can focus me");
285 elm_entry_single_line_set(o, EINA_TRUE);
286 elm_entry_scrollable_set(o, EINA_TRUE);
287 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
288 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
289 elm_box_pack_end(bigbox, o);
290 evas_object_show(o);
291
292 o = elm_separator_add(win2);
293 elm_separator_horizontal_set(o, EINA_TRUE);
294 elm_box_pack_end(bigbox, o);
295 evas_object_show(o);
296
297 o = elm_button_add(win2);
298 elm_object_text_set(o, "Focus me");
299 elm_box_pack_end(bigbox, o);
300 evas_object_show(o);
301
302 evas_object_smart_callback_add(o, "clicked", _force_focus_cb, win2);
303
304 o = elm_label_add(win);
305 elm_object_text_set(o, "<b>Override Window</b>");
306 elm_box_pack_end(box, o);
307 evas_object_show(o);
308
309 WIN_ACTION(activate);
310 WIN_ACTION(lower);
311 WIN_ACTION(raise);
312 WIN_ACTION(borderless);
313 WIN_ACTION(shaped);
314 WIN_ACTION(alpha);
315 WIN_ACTION(fullscreen);
316 WIN_ACTION(maximized);
317 WIN_ACTION(iconified);
318 WIN_ACTION(rotation);
319 WIN_ACTION(rotation_resize);
320 WIN_ACTION(sticky);
321
322 elm_run();
323 elm_shutdown();
324
325 return 0;
326}
327ELM_MAIN()