2 * gcc -o win_example win_example.c `pkg-config --cflags --libs elementary ecore-x`
4 #include <Elementary.h>
7 # include "elementary_config.h"
9 # define __UNUSED__ __attribute__((unused))
10 # define PACKAGE_DATA_DIR "../../data"
14 _btn_activate_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
16 elm_win_activate(data);
20 _btn_lower_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
26 _btn_raise_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
32 _btn_borderless_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
34 Eina_Bool flag = elm_win_borderless_get(data);
35 elm_win_borderless_set(data, !flag);
39 _btn_shaped_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
41 Eina_Bool flag = elm_win_shaped_get(data);
42 elm_win_shaped_set(data, !flag);
46 _btn_alpha_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
48 Eina_Bool flag = elm_win_alpha_get(data);
49 elm_win_alpha_set(data, !flag);
53 _btn_fullscreen_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
55 Eina_Bool flag = elm_win_fullscreen_get(data);
56 elm_win_fullscreen_set(data, !flag);
60 _btn_maximized_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
62 Eina_Bool flag = elm_win_maximized_get(data);
63 elm_win_maximized_set(data, !flag);
67 _btn_iconified_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
69 Eina_Bool flag = elm_win_iconified_get(data);
70 elm_win_iconified_set(data, !flag);
74 _btn_rotation_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
76 int angle = elm_win_rotation_get(data);
77 angle = (angle + 90) % 360;
78 elm_win_rotation_set(data, angle);
82 _btn_rotation_resize_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
84 int angle = elm_win_rotation_get(data);
85 angle = (angle + 90) % 360;
86 elm_win_rotation_with_resize_set(data, angle);
90 _btn_sticky_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
92 Eina_Bool flag = elm_win_sticky_get(data);
93 elm_win_sticky_set(data, !flag);
97 _yes_quit_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
103 _no_quit_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
105 evas_object_del(data);
109 _main_win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
111 Evas_Object *msg, *box, *box2, *btn, *lbl, *sep;
113 msg = elm_notify_add(obj);
114 elm_notify_orient_set(msg, ELM_NOTIFY_ORIENT_CENTER);
115 elm_notify_repeat_events_set(msg, EINA_FALSE);
116 evas_object_show(msg);
118 box = elm_box_add(obj);
119 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
120 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
121 elm_object_content_set(msg, box);
122 evas_object_show(box);
124 lbl = elm_label_add(obj);
125 elm_object_text_set(lbl, "Really want quit?");
126 evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
127 evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
128 elm_box_pack_end(box, lbl);
129 evas_object_show(lbl);
131 sep = elm_separator_add(obj);
132 elm_separator_horizontal_set(sep, EINA_TRUE);
133 elm_box_pack_end(box, sep);
134 evas_object_show(sep);
136 box2 = elm_box_add(obj);
137 elm_box_horizontal_set(box2, EINA_TRUE);
138 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
139 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
140 elm_box_pack_end(box, box2);
141 evas_object_show(box2);
143 btn = elm_button_add(obj);
144 elm_object_text_set(btn, "Yes");
145 elm_box_pack_end(box2, btn);
146 evas_object_show(btn);
148 evas_object_smart_callback_add(btn, "clicked", _yes_quit_cb, NULL);
150 btn = elm_button_add(obj);
151 elm_object_text_set(btn, "No");
152 elm_box_pack_end(box2, btn);
153 evas_object_show(btn);
155 evas_object_smart_callback_add(btn, "clicked", _no_quit_cb, msg);
159 _force_focus_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
161 Ecore_X_Window xwin = elm_win_xwindow_get(data);
162 ecore_x_window_focus(xwin);
166 _win_focused_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
168 const char *name = data;
169 printf("Window focused: %s\n", name);
173 elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
175 Evas_Object *win, *win2, *bg, *bigbox, *box, *btn, *o;
177 win = elm_win_add(NULL, "win-example", ELM_WIN_BASIC);
178 elm_win_title_set(win, "Elm_Win Example");
179 elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
180 evas_object_resize(win, 400, 400);
181 evas_object_show(win);
183 evas_object_smart_callback_add(win, "focus,in", _win_focused_cb, "mainwin");
185 evas_object_smart_callback_add(win, "delete,request", _main_win_del_cb,
188 bg = elm_bg_add(win);
189 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
190 elm_win_resize_object_add(win, bg);
191 evas_object_show(bg);
193 bigbox = elm_box_add(win);
194 elm_box_horizontal_set(bigbox, EINA_TRUE);
195 evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
196 elm_win_resize_object_add(win, bigbox);
197 evas_object_show(bigbox);
199 box = elm_box_add(win);
200 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
201 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
202 elm_box_pack_end(bigbox, box);
203 evas_object_show(box);
205 win2 = elm_win_add(NULL, "sub-win-example", ELM_WIN_DIALOG_BASIC);
206 elm_win_autodel_set(win2, EINA_TRUE);
207 elm_win_title_set(win2, "Managed window");
208 evas_object_show(win2);
210 evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb, "managed");
212 o = elm_icon_add(win2);
213 elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/logo.png", NULL);
214 elm_icon_resizable_set(o, 0, 0);
215 elm_icon_no_scale_set(o, EINA_TRUE);
216 elm_win_resize_object_add(win2, o);
219 o = elm_label_add(win);
220 elm_object_text_set(o, "<b>Managed Window</b>");
221 elm_box_pack_end(box, o);
224 #define WIN_ACTION(name) \
226 btn = elm_button_add(win); \
227 elm_object_text_set(btn, #name); \
228 elm_box_pack_end(box, btn); \
229 evas_object_show(btn); \
230 evas_object_smart_callback_add(btn, "clicked", _btn_##name##_cb, win2); \
233 WIN_ACTION(activate);
236 WIN_ACTION(borderless);
239 WIN_ACTION(fullscreen);
240 WIN_ACTION(maximized);
241 WIN_ACTION(iconified);
242 WIN_ACTION(rotation);
243 WIN_ACTION(rotation_resize);
246 box = elm_box_add(win);
247 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
248 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
249 elm_box_pack_end(bigbox, box);
250 evas_object_show(box);
252 win2 = elm_win_add(NULL, "sub-win-example2", ELM_WIN_BASIC);
253 elm_win_autodel_set(win2, EINA_TRUE);
254 elm_win_title_set(win2, "Non-managed window");
255 elm_win_override_set(win2, EINA_TRUE);
256 evas_object_show(win2);
258 evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb,
261 o = elm_bg_add(win2);
262 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
263 elm_win_resize_object_add(win2, o);
266 bigbox = elm_box_add(win2);
267 evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
268 elm_win_resize_object_add(win2, bigbox);
269 evas_object_show(bigbox);
271 o = elm_label_add(win2);
272 elm_object_text_set(o, "This window should have no borders or titlebar.<ps>"
273 "It was set in override mode, so the Window Manager<ps>"
274 "should ignore everything about it.<ps>"
275 "It's up to the program to handle it properly, and some"
276 "of the actions performed on it may not have any effect."
278 elm_box_pack_end(bigbox, o);
281 o = elm_entry_add(win2);
282 elm_object_text_set(o, "See if you can focus me");
283 elm_entry_single_line_set(o, EINA_TRUE);
284 elm_entry_scrollable_set(o, EINA_TRUE);
285 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
286 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
287 elm_box_pack_end(bigbox, o);
290 o = elm_separator_add(win2);
291 elm_separator_horizontal_set(o, EINA_TRUE);
292 elm_box_pack_end(bigbox, o);
295 o = elm_button_add(win2);
296 elm_object_text_set(o, "Focus me");
297 elm_box_pack_end(bigbox, o);
300 evas_object_smart_callback_add(o, "clicked", _force_focus_cb, win2);
302 o = elm_label_add(win);
303 elm_object_text_set(o, "<b>Override Window</b>");
304 elm_box_pack_end(box, o);
307 WIN_ACTION(activate);
310 WIN_ACTION(borderless);
313 WIN_ACTION(fullscreen);
314 WIN_ACTION(maximized);
315 WIN_ACTION(iconified);
316 WIN_ACTION(rotation);
317 WIN_ACTION(rotation_resize);