2 * gcc -o win_example win_example.c `pkg-config --cflags --libs elementary ecore-x`
4 #ifdef HAVE_ELEMENTARY_X
8 #include <Elementary.h>
9 #define DATA_DIR "../../data"
12 _btn_activate_cb(void *data, Evas_Object *obj, void *event)
14 elm_win_activate(data);
18 _btn_lower_cb(void *data, Evas_Object *obj, void *event)
24 _btn_raise_cb(void *data, Evas_Object *obj, void *event)
30 _btn_borderless_cb(void *data, Evas_Object *obj, void *event)
32 Eina_Bool flag = elm_win_borderless_get(data);
33 elm_win_borderless_set(data, !flag);
37 _btn_shaped_cb(void *data, Evas_Object *obj, void *event)
39 Eina_Bool flag = elm_win_shaped_get(data);
40 elm_win_shaped_set(data, !flag);
44 _btn_alpha_cb(void *data, Evas_Object *obj, void *event)
46 Eina_Bool flag = elm_win_alpha_get(data);
47 elm_win_alpha_set(data, !flag);
51 _btn_fullscreen_cb(void *data, Evas_Object *obj, void *event)
53 Eina_Bool flag = elm_win_fullscreen_get(data);
54 elm_win_fullscreen_set(data, !flag);
58 _btn_maximized_cb(void *data, Evas_Object *obj, void *event)
60 Eina_Bool flag = elm_win_maximized_get(data);
61 elm_win_maximized_set(data, !flag);
65 _btn_iconified_cb(void *data, Evas_Object *obj, void *event)
67 Eina_Bool flag = elm_win_iconified_get(data);
68 elm_win_iconified_set(data, !flag);
72 _btn_rotation_cb(void *data, Evas_Object *obj, void *event)
74 int angle = elm_win_rotation_get(data);
75 angle = (angle + 90) % 360;
76 elm_win_rotation_set(data, angle);
80 _btn_rotation_resize_cb(void *data, Evas_Object *obj, void *event)
82 int angle = elm_win_rotation_get(data);
83 angle = (angle + 90) % 360;
84 elm_win_rotation_with_resize_set(data, angle);
88 _btn_sticky_cb(void *data, Evas_Object *obj, void *event)
90 Eina_Bool flag = elm_win_sticky_get(data);
91 elm_win_sticky_set(data, !flag);
95 _yes_quit_cb(void *data, Evas_Object *obj, void *event)
101 _no_quit_cb(void *data, Evas_Object *obj, void *event)
103 evas_object_del(data);
107 _main_win_del_cb(void *data, Evas_Object *obj, void *event)
109 Evas_Object *msg, *box, *box2, *btn, *lbl, *sep;
111 msg = elm_notify_add(obj);
112 elm_notify_orient_set(msg, ELM_NOTIFY_ORIENT_CENTER);
113 elm_notify_allow_events_set(msg, EINA_FALSE);
114 evas_object_show(msg);
116 box = elm_box_add(obj);
117 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
118 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
119 elm_object_content_set(msg, box);
120 evas_object_show(box);
122 lbl = elm_label_add(obj);
123 elm_object_text_set(lbl, "Really want quit?");
124 evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
125 evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
126 elm_box_pack_end(box, lbl);
127 evas_object_show(lbl);
129 sep = elm_separator_add(obj);
130 elm_separator_horizontal_set(sep, EINA_TRUE);
131 elm_box_pack_end(box, sep);
132 evas_object_show(sep);
134 box2 = elm_box_add(obj);
135 elm_box_horizontal_set(box2, EINA_TRUE);
136 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
137 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
138 elm_box_pack_end(box, box2);
139 evas_object_show(box2);
141 btn = elm_button_add(obj);
142 elm_object_text_set(btn, "Yes");
143 elm_box_pack_end(box2, btn);
144 evas_object_show(btn);
146 evas_object_smart_callback_add(btn, "clicked", _yes_quit_cb, NULL);
148 btn = elm_button_add(obj);
149 elm_object_text_set(btn, "No");
150 elm_box_pack_end(box2, btn);
151 evas_object_show(btn);
153 evas_object_smart_callback_add(btn, "clicked", _no_quit_cb, msg);
157 _force_focus_cb(void *data, Evas_Object *obj, void *event)
159 #ifdef HAVE_ELEMENTARY_X
160 Ecore_X_Window xwin = elm_win_xwindow_get(data);
161 ecore_x_window_focus(xwin);
166 _win_focused_cb(void *data, Evas_Object *obj, void *event)
168 const char *name = data;
169 printf("Window focused: %s\n", name);
173 elm_main(int argc, char *argv[])
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, 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);