1 #include "e_mod_comp_shared_types.h"
2 #include "e_mod_comp.h"
3 #include "e_mod_comp_atoms.h"
4 #include "e_mod_comp_debug.h"
5 #include "e_mod_comp_effect_image_launch.h"
8 #include "effect_image_launch.h"
9 #include "effect_win_rotation.h"
11 #define FAKE_TABLE_PATH "/usr/share/themes/LaunchColorTable.xml"
12 #define APP_DEFINE_GROUP_NAME "effect"
14 /* local subsystem functions */
15 static void _show_done(void *data, Evas_Object *obj, const char *emission, const char *source);
16 static void _hide_done(void *data, Evas_Object *obj, const char *emission, const char *source);
17 static Eina_Bool _launch_timeout(void *data);
18 /* local subsystem globals */
20 /* externally accessible functions */
21 E_Comp_Effect_Image_Launch *
22 _effect_mod_image_launch_new(Evas *e,
25 E_Comp_Effect_Image_Launch *eff;
29 E_Comp_Win *layers_cw = NULL;
34 E_CHECK_RETURN(e, NULL);
36 eff = E_NEW(E_Comp_Effect_Image_Launch, 1);
37 E_CHECK_RETURN(eff, NULL);
39 eff->shobj = edje_object_add(e);
40 E_CHECK_GOTO(eff->shobj, error);
42 //get ecore_evas and save
44 ee = ecore_evas_ecore_evas_get(e);
45 E_CHECK_GOTO(ee, error);
49 ok = edje_object_file_set
51 _comp_mod->conf->shadow_file,
53 E_CHECK_GOTO(ok, error);
58 evas_object_move(eff->shobj, 0, 0);
59 evas_object_resize(eff->shobj, w, h);
61 edje_object_signal_callback_add
62 (eff->shobj, "fake,action,hide,done", "fake",
65 edje_object_signal_callback_add
66 (eff->shobj, "fake,action,show,done", "fake",
72 _effect_mod_image_launch_free(eff);
77 _effect_mod_image_launch_free(E_Comp_Effect_Image_Launch *eff)
80 if (eff->shobj) evas_object_del(eff->shobj);
81 if (eff->obj) evas_object_del(eff->obj);
86 _effect_mod_image_launch_handler_message(Ecore_X_Event_Client_Message *ev)
88 E_Comp_Effect_Image_Launch *eff;
92 E_CHECK_RETURN(ev, 0);
94 c = e_mod_comp_find(ev->win);
96 E_CHECK_RETURN(c->fake_image_launch, 0);
99 E_CHECK_RETURN(eff, 0);
101 eff->file_type = ev->data.l[0]; //fake effect file type
102 eff->rot = ev->data.l[1]; //rotation value
103 eff->indicator_show = ev->data.l[2]; //indicator flag value
104 eff->theme_type = ev->data.l[3]; //fake effect theme type
106 file = ecore_x_window_prop_string_get
107 (ev->win, ATOM_IMAGE_LAUNCH_FILE);
108 E_CHECK_RETURN(file, 0);
110 ELBF(ELBT_COMP, 0, 0,
111 "%15.15s| type:%d, ROT:%d, Indi:%d, theme:%d", "FAKE SHOW",
112 eff->file_type, eff->rot, eff->indicator_show, eff->theme_type);
114 ELBF(ELBT_COMP, 0, 0,
115 "%15.15s| File:%s", "FAKE SHOW", file);
118 _effect_mod_image_launch_show(eff, file);
125 _effect_mod_image_launch_show(E_Comp_Effect_Image_Launch *eff,
128 E_Comp *c = e_mod_comp_util_get();
129 E_Comp_Win *bg_cw = NULL;
134 E_Comp_Canvas *canvas;
137 E_CHECK_RETURN(eff, 0);
138 E_CHECK_RETURN(eff->evas, 0);
139 E_CHECK_RETURN(eff->ecore_evas, 0);
140 E_CHECK_RETURN(file, 0);
141 E_CHECK_RETURN(c, 0);
142 E_CHECK_RETURN(!(eff->running), 0);
144 grabbed = e_mod_comp_util_grab_home_key_set(EINA_TRUE);
145 E_CHECK_RETURN(grabbed, 0);
147 eff->running = EINA_TRUE;
149 bg_cw = e_mod_comp_util_win_normal_get(NULL, EINA_TRUE);
152 E_CHECK_GOTO(!TYPE_LOCKSCREEN_CHECK(bg_cw), error);
153 _effect_mod_object_win_set(bg_cw, "e,state,visible,on,noeffect");
156 if (eff->file_type == E_FAKE_EFFECT_FILE_TYPE_IMAGE)
158 eff->obj = evas_object_image_add(eff->evas);
159 E_CHECK_GOTO(eff->obj, error);
160 evas_object_image_file_set(eff->obj, file, NULL);
161 err = evas_object_image_load_error_get(eff->obj);
162 E_CHECK_GOTO(err == EVAS_LOAD_ERROR_NONE, error);
164 evas_object_image_size_get(eff->obj, &(img_w), &(img_h));
165 evas_object_image_fill_set(eff->obj, 0, 0, img_w, img_h);
166 evas_object_image_filled_set(eff->obj, EINA_TRUE);
167 evas_object_show(eff->obj);
174 path = strtok(file, ":");
175 E_CHECK_GOTO(path, error);
177 eff->obj = edje_object_add(eff->evas);
178 E_CHECK_GOTO(eff->obj, error);
179 edje_object_file_set (eff->obj, path, APP_DEFINE_GROUP_NAME);
181 evas_object_move(eff->obj, 0, 0);
182 evas_object_resize(eff->obj, eff->w, eff->h);
183 evas_object_show(eff->obj);
184 evas_object_lower(eff->obj);
187 res = edje_object_part_swallow
188 (eff->shobj, "fake.swallow.content", eff->obj);
189 E_CHECK_GOTO(res, error);
191 evas_object_show(eff->shobj);
193 canvas = eina_list_nth(c->canvases, 0);
194 ly = e_mod_comp_canvas_layer_get(canvas, "effect");
197 evas_object_data_set(eff->shobj, "comp.effect_obj.ly", ly);
198 e_mod_comp_layer_populate(ly, eff->shobj);
202 _effect_mod_above_wins_set(bg_cw, EINA_TRUE);
204 eff->indicator_obj = ecore_evas_extn_plug_new(eff->ecore_evas);
205 E_CHECK_GOTO(eff->indicator_obj, error);
207 if ((eff->rot == 0) || (eff->rot == 180))//portrait mode
209 e_layout_child_move(eff->shobj, 0, 0);
210 e_layout_child_resize(eff->shobj, eff->w, eff->h);
211 //get indicator object
212 if (eff->indicator_show)
214 if (!ecore_evas_extn_plug_connect(eff->indicator_obj, "elm_indicator_portrait", 0, EINA_FALSE))
215 eff->indicator_show = 0;
218 else //landscape mode
220 e_layout_child_move(eff->shobj, (eff->w - eff->h)/2, (eff->h - eff->w)/2);
221 e_layout_child_resize(eff->shobj, eff->h, eff->w);
222 //get indicator object
223 if (eff->indicator_show)
225 if (!ecore_evas_extn_plug_connect(eff->indicator_obj, "elm_indicator_landscape", 0, EINA_FALSE))
226 eff->indicator_show = 0;
230 if (eff->indicator_show)
232 evas_object_show(eff->indicator_obj);
233 res = edje_object_part_swallow
234 (eff->shobj, "fake.swallow.indicator", eff->indicator_obj);
235 E_CHECK_GOTO(res, error);
243 _effect_mod_signal_add
245 "fake,state,visible,90,on", "fake");
248 _effect_mod_signal_add
250 "fake,state,visible,180,on", "fake");
253 _effect_mod_signal_add
255 "fake,state,visible,270,on", "fake");
258 _effect_mod_signal_add
260 "fake,state,visible,on", "fake");
269 _effect_mod_signal_add
271 "fake,state,visible,90,on,noeffect", "fake");
274 _effect_mod_signal_add
276 "fake,state,visible,180,on,noeffect", "fake");
279 _effect_mod_signal_add
281 "fake,state,visible,270,on,noeffect", "fake");
284 _effect_mod_signal_add
286 "fake,state,visible,on,noeffect", "fake");
290 eff->timeout = ecore_timer_add(20.0f, _launch_timeout, eff);
291 e_mod_comp_util_screen_input_region_set(EINA_TRUE);
293 e_mod_comp_render_queue(c);
297 eff->running = EINA_FALSE;
299 e_mod_comp_util_grab_home_key_set(EINA_FALSE);
304 _effect_mod_image_launch_hide(E_Comp_Effect_Image_Launch *eff)
306 E_Comp *c = e_mod_comp_util_get();
307 E_CHECK_RETURN(c, 0);
308 E_CHECK_RETURN(eff, 0);
311 ecore_timer_del(eff->timeout);
319 _effect_mod_signal_add
321 "fake,state,visible,90,off", "fake");
324 _effect_mod_signal_add
326 "fake,state,visible,180,off", "fake");
329 _effect_mod_signal_add
331 "fake,state,visible,270,off", "fake");
334 _effect_mod_signal_add
336 "fake,state,visible,off", "fake");
341 _effect_mod_signal_add
343 "fake,state,visible,off,noeffect", "fake");
345 e_mod_comp_render_queue(c);
350 _effect_mod_image_launch_window_check(E_Comp_Effect_Image_Launch *eff, E_Comp_Win *cw)
352 E_CHECK_RETURN(eff, 0);
353 E_CHECK_RETURN(eff->running, 0);
354 E_CHECK_RETURN(cw, 0);
355 E_CHECK_RETURN(cw->bd, 0);
357 if ( REGION_EQUAL_TO_ROOT(cw) && TYPE_NORMAL_CHECK(cw))
361 else if ((e_config->use_tiled_desk_layout) &&
362 (cw->bd->client.e.state.ly.support) &&
363 TYPE_NORMAL_CHECK(cw))
371 _effect_mod_image_launch_running_check(E_Comp_Effect_Image_Launch *eff)
373 E_CHECK_RETURN(eff, 0);
378 _effect_mod_image_launch_fake_show_done_check(E_Comp_Effect_Image_Launch *eff)
380 E_CHECK_RETURN(eff, 0);
381 return eff->fake_image_show_done;
385 _effect_mod_image_launch_window_set(E_Comp_Effect_Image_Launch *eff,
388 E_CHECK_RETURN(eff, 0);
389 E_CHECK_RETURN(w, 0);
395 _effect_mod_image_launch_disable(E_Comp_Effect_Image_Launch *eff)
398 E_CHECK(eff->running);
400 ELBF(ELBT_COMP, 0, 0,
401 "%15.15s|", "FAKE DISABLE");
403 #if SEND_LAUNCHING_DONE
406 E_Comp_Win *cw = NULL;
407 cw = e_mod_comp_win_find(eff->win);
408 if ((cw) && (cw->bd))
410 ecore_x_client_message32_send (cw->bd->client.win, ATOM_WINDOW_LAUNCHING_EFFECT_DONE,
411 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE, 0, 0, 0, 0, 0);
412 e_msg_send("comp.message", "launching.done", cw->bd->client.win, NULL, NULL, NULL, NULL);
417 eff->running = EINA_FALSE;
418 eff->fake_image_show_done= EINA_FALSE;
421 e_mod_comp_util_screen_input_region_set(EINA_FALSE);
422 e_mod_comp_util_grab_home_key_set(EINA_FALSE);
424 E_Comp_Canvas *canvas = NULL;
425 E_Comp_Layer *ly = NULL;
427 E_Comp *c = e_mod_comp_util_get();
430 e_mod_comp_win_shape_input_update(c);
431 canvas = eina_list_nth(c->canvases, 0);
435 ecore_timer_del(eff->timeout);
438 if (eff->indicator_show)
440 edje_object_part_unswallow(eff->shobj, eff->indicator_obj);
441 evas_object_hide(eff->indicator_obj);
442 evas_object_del(eff->indicator_obj);
443 eff->indicator_obj = NULL;
445 edje_object_part_unswallow(eff->shobj, eff->obj);
447 evas_object_hide(eff->shobj);
448 evas_object_hide(eff->obj);
449 evas_object_del(eff->obj);
452 e_layout_unpack(eff->shobj);
455 ly = e_mod_comp_canvas_layer_get(canvas, "effect");
459 e_mod_comp_layer_effect_set(ly, EINA_FALSE);
460 evas_object_hide(ly->layout);
462 evas_object_data_del(eff->shobj, "comp.effect_obj.ly");
466 _show_done(void *data,
467 Evas_Object *obj __UNUSED__,
468 const char *emission __UNUSED__,
469 const char *source __UNUSED__)
472 E_Comp_Effect_Image_Launch *eff;
473 eff = (E_Comp_Effect_Image_Launch *)data;
476 eff->fake_image_show_done = EINA_TRUE;
480 cw = e_mod_comp_win_find(eff->win);
483 _effect_mod_signal_add
484 (cw, NULL, "e,state,visible,on,noeffect", "e");
485 e_mod_comp_comp_event_src_visibility_send(cw);
486 _effect_mod_image_launch_disable(eff);
488 e_mod_comp_win_render_queue(cw);
492 _hide_done(void *data,
493 Evas_Object *obj __UNUSED__,
494 const char *emission __UNUSED__,
495 const char *source __UNUSED__)
497 E_Comp_Effect_Image_Launch *eff;
498 E_Comp_Canvas *canvas = NULL;
499 E_Comp_Layer *ly = NULL;
501 E_Comp *c = e_mod_comp_util_get();
503 eff = (E_Comp_Effect_Image_Launch *)data;
506 e_mod_comp_util_screen_input_region_set(EINA_FALSE);
507 e_mod_comp_util_grab_home_key_set(EINA_FALSE);
509 if (eff->indicator_show)
511 edje_object_part_unswallow(eff->shobj, eff->indicator_obj);
512 evas_object_hide(eff->indicator_obj);
513 eff->indicator_obj = NULL;
515 edje_object_part_unswallow(eff->shobj, eff->obj);
516 evas_object_hide(eff->shobj);
517 evas_object_hide(eff->obj);
520 e_layout_unpack(eff->shobj);
523 e_mod_comp_win_shape_input_update(c);
524 canvas = eina_list_nth(c->canvases, 0);
528 ly = e_mod_comp_canvas_layer_get(canvas, "effect");
531 e_mod_comp_layer_effect_set(ly, EINA_FALSE);
533 evas_object_data_del(eff->shobj, "comp.effect_obj.ly");
537 _launch_timeout(void *data)
539 E_Comp_Effect_Image_Launch *eff;
540 E_Comp *c = e_mod_comp_util_get();
541 eff = (E_Comp_Effect_Image_Launch *)data;
543 E_CHECK_RETURN(c, 0);
544 E_CHECK_RETURN(eff, 0);
546 _effect_mod_image_launch_disable(eff);
547 e_mod_comp_render_queue(c);