if( e_accessibility.ZoomUI.status == ZOOM_OUT )
{
- XIChangeProperty(e_accessibility.disp, e_accessibility.touch_deviceid[0], e_accessibility.atomInputTransform,
- e_accessibility.atomFloat, 32, PropModeReplace, (unsigned char*)&identity_matrix, 9);
+ for( i = 0 ; i < 3 ; i++ )
+ {
+ XIChangeProperty(e_accessibility.disp, e_accessibility.touch_deviceid[i], e_accessibility.atomInputTransform,
+ e_accessibility.atomFloat, 32, PropModeReplace, (unsigned char*)&identity_matrix, 9);
+ }
+ XSync(e_accessibility.disp, False);
}
else
{
XIChangeProperty(e_accessibility.disp, e_accessibility.touch_deviceid[i], e_accessibility.atomInputTransform,
e_accessibility.atomFloat, 32, PropModeReplace, (unsigned char*)&e_accessibility.tmatrix[0], 9);
}
+ XSync(e_accessibility.disp, False);
}
}
--- /dev/null
+/*-----------------------------------------------------*/
+/* group "dialog_without_dim" */
+/*-----------------------------------------------------*/
+group { name: "dialog_without_dim";
+ images {
+ image: "comp-sh1.png" COMP;
+ image: "bt_glow.png" COMP;
+ }
+ parts {
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 0;
+ rel1 {
+ relative: -1.0 -1.0;
+ offset: -9999 -9999;
+ }
+ rel2 {
+ relative: 2.0 2.0;
+ offset: 9999 9999;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: 255 255 255 255;
+ }
+ description { state: "visible" 1.0;
+ inherit: "visible" 0.0;
+ }
+ description { state: "switcher" 0.0;
+ inherit: "visible" 0.0;
+ visible: 1;
+ color: 255 255 255 255;
+ }
+ description { state: "default" 1.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: 255 255 255 255;
+ }
+ description { state: "default" 0.5;
+ inherit: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "shower";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 0.35 0.35;
+ }
+ rel2 {
+ relative: 0.65 0.65;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ }
+ description { state: "visible" 1.0;
+ inherit: "visible" 0.0;
+ }
+ description { state: "switcher" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ }
+ description { state: "indicator_raise_above" 0.0;
+ inherit : "default" 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ }
+ description { state: "indicator_raise_above" 0.1;
+ inherit : "default" 0.0;
+ rel1 {
+ relative: 0.0 -1.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ }
+ }
+ }
+ part { name: "persp";
+ type: RECT;
+ description { state: "default" 0.0;
+ min: 10 10;
+ max: 10 10;
+ visible: 0;
+ perspective.zplane: 0;
+ perspective.focal: 1000;
+ }
+ description { state: "visible" 1.0;
+ inherit: "default" 0.0;
+ perspective.zplane: 0;
+ perspective.focal: 1000;
+ }
+ description { state: "switcher" 0.0;
+ inherit: "default" 0.0;
+ perspective.zplane: -500;
+ perspective.focal: 1000;
+ }
+ description { state: "switcher2" 0.0;
+ inherit: "default" 0.0;
+ perspective.zplane: -500;
+ perspective.focal: 1000;
+ }
+ }
+ part { name: "e.swallow.content";
+ type: SWALLOW;
+ clip_to: "clipper";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 {
+ to: "shower";
+ }
+ rel2 {
+ to: "shower";
+ }
+ }
+ description { state: "default" 1.0;
+ inherit: "default" 0.0;
+ rel1.relative: 0 0;
+ rel2.relative: 1.0 1.0;
+ }
+ description { state: "default" 0.5;
+ inherit: "default" 0.0;
+ rel1.relative: 0 0;
+ rel2.relative: 1.0 1.0;
+ }
+ description { state: "visible" 1.0;
+ rel1 {
+ to: "shower";
+ }
+ rel2 {
+ to: "shower";
+ }
+ map {
+ on: 1;
+ smooth: 1;
+ backface_cull: 0;
+ perspective_on: 1;
+ alpha: 0;
+ perspective: "persp";
+ rotation {
+ x: 0;
+ y: 0;
+ z: 0;
+ }
+ }
+ }
+ description { state: "switcher" 0.0;
+ rel1 {
+ to: "shower";
+ }
+ rel2 {
+ to: "shower";
+ }
+ map {
+ on: 1;
+ smooth: 1;
+ backface_cull: 0;
+ perspective_on: 1;
+ alpha: 1;
+ perspective: "persp";
+ rotation {
+ x: 0;
+ y: 75;
+ z: 0;
+ }
+ }
+ }
+ description { state: "switcher2" 0.0;
+ rel1 {
+ to: "shower";
+ }
+ rel2 {
+ to: "shower";
+ }
+ map {
+ on: 1;
+ smooth: 1;
+ backface_cull: 0;
+ perspective_on: 1;
+ alpha: 1;
+ perspective: "persp";
+ rotation {
+ x: 0;
+ y: 45;
+ z: 0;
+ }
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "show1";
+ signal: "e,state,visible,on";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "e.swallow.content";
+ after: "show2";
+ }
+ program { name: "show2";
+ action: STATE_SET "visible" 0.0;
+ transition: DECELERATE 0.2;
+ target: "clipper";
+ target: "shower";
+ after : "show3";
+ }
+ program { name: "show3";
+ action: SIGNAL_EMIT "e,action,show,done" "e";
+ }
+ program { name: "hide1";
+ signal: "e,state,visible,off";
+ source: "e";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "hide2";
+ }
+ program { name: "hide2";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.2;
+ target: "clipper";
+ target: "shower";
+ after: "hide3";
+ }
+ program { name: "hide3";
+ action: SIGNAL_EMIT "e,action,hide,done" "e";
+ }
+ program { name: "raise_above_hide1";
+ signal: "e,state,raise_above,off";
+ source: "e";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "raise_above_hide2";
+ }
+ program { name: "raise_above_hide2";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.2;
+ target: "clipper";
+ target: "shower";
+ after: "raise_above_hide3";
+ }
+ program { name: "raise_above_hide3";
+ action: SIGNAL_EMIT "e,action,raise_above_hide,done" "e";
+ }
+ program { name: "raise_above_hide_post_work";
+ signal: "e,state,raise_above_post,on";
+ source: "e";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ }
+ program { name: "switcher_on";
+ signal: "e,state,switcher,on";
+ source: "e";
+ action: STATE_SET "visible" 1.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ target: "e.swallow.content";
+ after: "switcher_on2";
+ }
+ program { name: "switcher_on2";
+ action: STATE_SET "switcher" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ target: "e.swallow.content";
+ after: "switcher_on3";
+ }
+ program { name: "switcher_on3";
+ action: STATE_SET "switcher2" 0.0;
+ target: "e.swallow.content";
+ transition: LINEAR 0.3;
+ after: "switcher_on4";
+ }
+ program { name: "switcher_on4";
+ action: STATE_SET "visible" 1.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ target: "e.swallow.content";
+ after: "switcher_on5";
+ }
+ program { name: "switcher_on5";
+ action: SIGNAL_EMIT "e,action,show,done" "e";
+ }
+ program { name: "switcher_on_top";
+ signal: "e,state,switcher_top,on";
+ source: "e";
+ action: STATE_SET "visible" 1.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ target: "e.swallow.content";
+ after: "switcher_on_top2";
+ after: "switcher_on_top2_2";
+ }
+ program { name: "switcher_on_top2";
+ action: STATE_SET "switcher" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ transition: LINEAR 0.3;
+ after: "switcher_on_top3";
+ }
+ program { name: "switcher_on_top2_2";
+ action: STATE_SET "switcher2" 0.0;
+ target: "e.swallow.content";
+ transition: ACCELERATE 0.3;
+ }
+ program { name: "switcher_on_top3";
+ action: STATE_SET "visible" 1.0;
+ target: "clipper";
+ target: "shower";
+ target: "persp";
+ target: "e.swallow.content";
+ after: "switcher_on_top4";
+ }
+ program { name: "switcher_on_top4";
+ action: SIGNAL_EMIT "e,action,show,done" "e";
+ }
+ program { name: "raise_above3";
+ signal: "e,state,raise_above3,on";
+ source: "e";
+ action: STATE_SET "indicator_raise_above" 0.0;
+ target: "shower";
+ after: "raise_above3_2";
+ }
+ program { name: "raise_above3_2";
+ action : STATE_SET "indicator_raise_above" 0.1;
+ transition: SINUSOIDAL 0.2;
+ target: "shower";
+ after : "raise_above3_3";
+ }
+ program { name: "raise_above3_3";
+ action : STATE_SET "indicator_raise_above" 0.1;
+ transition: LINEAR 0.16;
+ target: "shower";
+ after : "raise_above3_4";
+ }
+ program { name: "raise_above3_4";
+ action : STATE_SET "indicator_raise_above" 0.0;
+ transition: SINUSOIDAL 0.2;
+ target: "shower";
+ after : "raise_above3_done";
+ }
+ program { name: "raise_above3_done";
+ action: SIGNAL_EMIT "e,action,raise_above3,done" "e";
+ }
+ program { name: "show1_noeffect";
+ signal: "e,state,visible,on,noeffect";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "e.swallow.content";
+ after: "show2_noeffect";
+ }
+ program { name: "show2_noeffect";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "show3";
+ }
+ program { name: "hide1_noeffect";
+ signal: "e,state,visible,off,noeffect";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "hide3";
+ }
+ program { name: "show_background1";
+ signal: "e,state,background,visible,on";
+ source: "e";
+ after: "show_background2";
+ }
+ program { name: "show_background2";
+ action: SIGNAL_EMIT "e,action,background,show,done" "e";
+ }
+ program { name: "hide_background1";
+ signal: "e,state,background,visible,off";
+ source: "e";
+ after: "hide_background2";
+ }
+ program { name: "hide_background2";
+ action: SIGNAL_EMIT "e,action,background,hide,done" "e";
+ }
+ program { name: "show1_custom0";
+ signal: "e,state,visible,on,custom0";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "e.swallow.content";
+ after: "show2_custom0";
+ }
+ program { name: "show2_custom0";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "show3";
+ }
+ program { name: "hide1_custom0";
+ signal: "e,state,visible,off,custom0";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "hide2";
+ }
+ program { name: "show1_custom1";
+ signal: "e,state,visible,on,custom1";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "e.swallow.content";
+ after: "show2_custom1";
+ }
+ program { name: "show2_custom1";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "show3";
+ }
+ program { name: "hide1_custom1";
+ signal: "e,state,visible,off,custom1";
+ source: "e";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "hide2";
+ }
+ }
+} /* end of group "dialog" */
mouse_events: 1;\r
description { state: "default" 0.0;\r
visible: 0;\r
- color: 255 255 255 255;\r
+ color: 255 255 255 1;\r
rel1 {\r
relative: -1.0 -1.0;\r
offset: -9999 -9999;\r
}\r
description { state: "default-180" 0.0;\r
visible: 0;\r
- color: 255 255 255 255;\r
+ color: 255 255 255 1;\r
rel1 {\r
relative: -1.0 -1.0;\r
offset: -9999 -9999;\r
}\r
description { state: "default-90" 0.0;\r
visible: 0;\r
- color: 255 255 255 255;\r
+ color: 255 255 255 1;\r
rel1 {\r
relative: -1.0 -1.0;\r
offset: -9999 -9999;\r
}\r
description { state: "default-270" 0.0;\r
visible: 0;\r
- color: 255 255 255 255;\r
+ color: 255 255 255 1;\r
rel1 {\r
relative: -1.0 -1.0;\r
offset: -9999 -9999;\r
description { state: "default" 0.0;\r
visible: 0;\r
rel1 {\r
- relative: 0.45 0.45; // fake effect start size\r
+ relative: 0.2 0.2; // fake effect start size\r
}\r
rel2 {\r
- relative: 0.55 0.55; // fake effect start size\r
+ relative: 0.8 0.8; // fake effect start size\r
}\r
}\r
description { state: "visible" 0.0;\r
description { state: "default-180" 0.0;\r
visible: 0;\r
rel1 {\r
- relative: 0.45 0.45; // fake effect start size\r
+ relative: 0.2 0.2; // fake effect start size\r
}\r
rel2 {\r
- relative: 0.55 0.55; // fake effect start size\r
+ relative: 0.8 0.8; // fake effect start size\r
}\r
}\r
description { state: "visible-180" 0.0;\r
description { state: "default-90" 0.0;\r
visible: 0;\r
rel1 {\r
- relative: 0.45 0.45; // fake effect start size\r
+ relative: 0.2 0.2; // fake effect start size\r
}\r
rel2 {\r
- relative: 0.55 0.55; // fake effect start size\r
+ relative: 0.8 0.8; // fake effect start size\r
}\r
}\r
description { state: "visible-90" 0.0;\r
description { state: "default-270" 0.0;\r
visible: 0;\r
rel1 {\r
- relative: 0.45 0.45; // fake effect start size\r
+ relative: 0.2 0.2; // fake effect start size\r
}\r
rel2 {\r
- relative: 0.55 0.55; // fake effect start size\r
+ relative: 0.8 0.8; // fake effect start size\r
}\r
}\r
description { state: "visible-270" 0.0;\r
smooth: 0;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 0;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 0;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 0;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 1;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 1;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 1;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
smooth: 1;\r
backface_cull: 0;\r
perspective_on: 1;\r
- alpha: 0;\r
+ alpha: 1;\r
perspective: "persp";\r
rotation {\r
x: 0;\r
target: "shower";\r
target: "fake.swallow.content";\r
target: "fake.swallow.indicator";\r
- transition: DECELERATE 0.3;\r
+ transition: DECELERATE 0.2;\r
after: "show3";\r
}\r
program { name: "show3";\r
target: "shower";\r
target: "fake.swallow.content";\r
target: "fake.swallow.indicator";\r
- transition: DECELERATE 0.3;\r
+ transition: DECELERATE 0.2;\r
after: "show3";\r
}\r
program { name: "rotation-right1";\r
target: "shower";\r
target: "fake.swallow.content";\r
target: "fake.swallow.indicator";\r
- transition: DECELERATE 0.3;\r
+ transition: DECELERATE 0.2;\r
after: "show3";\r
}\r
program { name: "rotation-left1";\r
target: "shower";\r
target: "fake.swallow.content";\r
target: "fake.swallow.indicator";\r
- transition: DECELERATE 0.3;\r
+ transition: DECELERATE 0.2;\r
after: "show3";\r
}\r
program { name: "hide1";\r
target: "shower";\r
target: "fake.swallow.indicator";\r
target: "fake.swallow.content";\r
- transition: DECELERATE 0.4;\r
+ transition: DECELERATE 0.3;\r
after: "hide2";\r
}\r
program { name: "hide2";\r
target: "shower";\r
target: "fake.swallow.indicator";\r
target: "fake.swallow.content";\r
- transition: DECELERATE 0.4;\r
+ transition: DECELERATE 0.3;\r
after: "hide2";\r
}\r
program { name: "hide-rotate-right1";\r
target: "shower";\r
target: "fake.swallow.indicator";\r
target: "fake.swallow.content";\r
- transition: DECELERATE 0.4;\r
+ transition: DECELERATE 0.3;\r
after: "hide2";\r
}\r
program { name: "hide-rotate-left1";\r
target: "shower";\r
target: "fake.swallow.indicator";\r
target: "fake.swallow.content";\r
- transition: DECELERATE 0.4;\r
+ transition: DECELERATE 0.3;\r
after: "hide2";\r
}\r
program { name: "show_noeffect1";\r
target: "shower";
after: "hide3";
}
- program { name: "show_background1";
- signal: "e,state,background,visible,on";
- source: "e";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background2";
- }
- program { name: "show_background2";
- action: STATE_SET "background" 0.0;
- transition: LINEAR 0.2656;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background3";
- }
- program { name: "show_background3";
- action: STATE_SET "background" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background4";
- }
- program { name: "show_background4";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background5";
- }
- program { name: "show_background5";
- action: SIGNAL_EMIT "e,action,background,show,done" "e";
- }
- program { name: "hide_background1";
- signal: "e,state,background,visible,off";
- source: "e";
- action: STATE_SET "background" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "hide_background2";
- }
- program { name: "hide_background2";
- action: STATE_SET "background" 0.0;
- target: "shower";
- target: "clipper";
- target: "e.swallow.content";
- after: "hide_background3";
- }
- program { name: "hide_background3";
- action: STATE_SET "visible" 0.0;
- transition: DECELERATE 0.35;
- target: "shower";
- target: "clipper";
- target: "e.swallow.content";
- after: "hide_background4";
- }
- program { name: "hide_background4";
- action: SIGNAL_EMIT "e,action,background,hide,done" "e";
- }
- program { name: "show_fake_background1";
- signal: "e,state,fake,background,visible,on";
- source: "e";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_fake_background2";
- }
- program { name: "show_fake_background2";
- action: STATE_SET "background" 0.0;
- transition: LINEAR 0.4565;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background3";
- }
program { name: "show1_custom0";
signal: "e,state,visible,on,custom0";
source: "e";
after: "show-done";
}
program { name: "show-done";
- action: SIGNAL_EMIT "e,action,rotation,done" "e";
+ action: SIGNAL_EMIT "e,action,show,done" "e";
}
program { name: "show_noeffect";
signal: "e,state,visible,on,noeffect";
mouse_events: 0;
description { state: "default" 0.0;
visible: 0;
- rel1.relative: 0.25 0.25;
+ rel1.relative: 0.2 0.2;
rel1.offset: 0 0;
- rel2.relative: 0.75 0.75;
+ rel2.relative: 0.8 0.8;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
// app launching effect
program { name: "show2";
action: STATE_SET "visible" 0.0;
- transition: DECELERATE 0.3;
+ transition: DECELERATE 0.2;
target: "clipper";
target: "shower";
target: "e.swallow.content";
}
program { name: "hide2";
action: STATE_SET "hide" 0.0;
- transition: DECELERATE 0.4;
+ transition: DECELERATE 0.3;
target: "clipper";
target: "shower";
after: "hide3";
program { name: "hide4";
action: SIGNAL_EMIT "e,action,hide,done" "e";
}
+ program { name: "mirror_hide1";
+ signal: "e,state,mirror,visible,off";
+ source: "e";
+ action: STATE_SET "visible" 0.0;
+ target: "clipper";
+ target: "shower";
+ target: "e.swallow.content";
+ after: "mirror_hide2";
+ }
+ program { name: "mirror_hide2";
+ action: STATE_SET "hide" 0.0;
+ transition: DECELERATE 0.3;
+ target: "clipper";
+ target: "shower";
+ after: "mirror_hide3";
+ }
+ program { name: "mirror_hide3";
+ action: STATE_SET "default" 0.0;
+ target: "clipper";
+ target: "shower";
+ after: "mirror_hide4";
+ }
+ program { name: "mirror_hide4";
+ action: SIGNAL_EMIT "e,action,mirror,hide,done" "e";
+ }
program { name: "raise_above_show1";
signal: "e,state,raise_above,on";;
source: "e";
// app launching effect
program { name: "raise_above_show2";
action: STATE_SET "visible" 0.0;
- transition: DECELERATE 0.3;
+ transition: DECELERATE 0.2;
target: "clipper";
target: "shower";
target: "e.swallow.content";
}
program { name: "raise_above_hide2";
action: STATE_SET "default" 0.0;
- transition: DECELERATE 0.32;
- target: "clipper";
- target: "shower";
- after: "raise_above_hide3";
- }
- program { name: "raise_above_hide3";
- action: STATE_SET "default" 0.0;
- transition: LINEAR 0.2;
+ transition: DECELERATE 0.3;
target: "clipper";
target: "shower";
after: "raise_above_hide4";
target: "shower";
after: "hide3";
}
- program { name: "show_background1";
- signal: "e,state,background,visible,on";
- source: "e";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background2";
- }
- program { name: "show_background2";
- action: STATE_SET "background" 0.0;
- transition: LINEAR 0.2656;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background3";
- }
- program { name: "show_background3";
- action: STATE_SET "background" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background4";
- }
- program { name: "show_background4";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background5";
- }
- program { name: "show_background5";
- action: SIGNAL_EMIT "e,action,background,show,done" "e";
- }
- program { name: "hide_background1";
- signal: "e,state,background,visible,off";
- source: "e";
- action: STATE_SET "background" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "hide_background2";
- }
- program { name: "hide_background2";
- action: STATE_SET "background" 0.0;
- transition: LINEAR 0.0415;
- target: "shower";
- target: "clipper";
- target: "e.swallow.content";
- after: "hide_background3";
- }
- program { name: "hide_background3";
- action: STATE_SET "visible" 0.0;
- transition: DECELERATE 0.2075;
- target: "shower";
- target: "clipper";
- target: "e.swallow.content";
- after: "hide_background4";
- }
- program { name: "hide_background4";
- action: SIGNAL_EMIT "e,action,background,hide,done" "e";
- }
- program { name: "show_fake_background1";
- signal: "e,state,fake,background,visible,on";
- source: "e";
- action: STATE_SET "visible" 0.0;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_fake_background2";
- }
- program { name: "show_fake_background2";
- action: STATE_SET "background" 0.0;
- transition: LINEAR 0.4565;
- target: "clipper";
- target: "shower";
- target: "e.swallow.content";
- after: "show_background3";
- }
program { name: "show1_custom0";
signal: "e,state,visible,on,custom0";
source: "e";
+++ /dev/null
-/*-----------------------------------------------------*/\r
-/* group "wnd_rot_prev_pixmap" */\r
-/*-----------------------------------------------------*/\r
-group { name: "wnd_rot_prev_pixmap";\r
- #include "../common/comp-script.edc"\r
- parts {\r
- part { name: "clipper";\r
- type: RECT;\r
- mouse_events: 0;\r
- description { state: "default" 0.0;\r
- visible: 0;\r
- color: 0 0 0 0;\r
- rel1.relative: -1.0 -1.0;\r
- rel1.offset: -9999 -9999;\r
- rel2.relative: 2.0 2.0;\r
- rel2.offset: 9999 9999;\r
- }\r
- description { state: "visible" 0.0;\r
- inherit: "default" 0.0;\r
- visible: 0;\r
- color: 255 255 255 255;\r
- }\r
- description { state: "hide" 0.0;\r
- inherit: "default" 0.0;\r
- visible: 0;\r
- color: 255 255 255 128;\r
- }\r
- } /* end of part "clipper" */\r
- part { name: "persp";\r
- type: RECT;\r
- description { state: "default" 0.0;\r
- min: 1 1;\r
- max: 1 1;\r
- visible: 0;\r
- perspective.zplane: 0;\r
- perspective.focal: 1000;\r
- }\r
- description { state: "visible" 0.0;\r
- inherit: "default" 0.0;\r
- perspective.zplane: 0;\r
- }\r
- description { state: "hide" 0.0;\r
- inherit: "default" 0.0;\r
- perspective.zplane: 0;\r
- }\r
- } /* end of part "persp" */\r
- part { name: "shower";\r
- type: RECT;\r
- mouse_events: 0;\r
- description { state: "default" 0.0;\r
- visible: 0;\r
- rel1.relative: 0.0 0.0;\r
- rel2.relative: 1.0 1.0;\r
- }\r
- } /* end of part "shower" */\r
- part { name: "e.swallow.content";\r
- type: SWALLOW;\r
- clip_to: "clipper";\r
- mouse_events: 0;\r
- description { state: "default" 0.0;\r
- rel1.to: "shower";\r
- rel2.to: "shower";\r
- map {\r
- on: 1;\r
- smooth: 1;\r
- backface_cull: 0;\r
- perspective_on: 1;\r
- alpha: 1;\r
- perspective: "persp";\r
- rotation.x: 0.0;\r
- rotation.y: 0.0;\r
- rotation.z: 0.0;\r
- }\r
- }\r
- description { state: "visible" 0.0;\r
- inherit: "default" 0.0;\r
- map.rotation.z: 0.0;\r
- }\r
- description { state: "visible-rot--270" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
- map.rotation.z: -270.0;\r
- }\r
- description { state: "visible-rot--180" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
-#if USE_ORI\r
- map.rotation.z: -180.0;\r
-#else\r
- map.rotation.z: -45.0;\r
-#endif\r
- }\r
- description { state: "visible-rot--90" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
-#if USE_ORI\r
- map.rotation.z: -90.0;\r
-#else\r
- map.rotation.z: -22.0;\r
-#endif\r
- rel1.offset: 160 -160;\r
- rel2.offset: 160 -160;\r
- }\r
- description { state: "visible-rot-0" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
- map.rotation.z: 0.0;\r
- }\r
- description { state: "visible-rot-90" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
-#if USE_ORI\r
- map.rotation.z: 90.0;\r
-#else\r
- map.rotation.z: 22.0;\r
-#endif\r
- rel1.offset: -160 -160;\r
- rel2.offset: -160 -160;\r
- }\r
- description { state: "visible-rot-180" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
-#if USE_ORI\r
- map.rotation.z: 180.0;\r
-#else\r
- map.rotation.z: 45.0;\r
-#endif\r
- }\r
- description { state: "visible-rot-270" 0.0;\r
- inherit: "default" 0.0;\r
- map.perspective: "persp";\r
- map.rotation.z: 270.0;\r
- }\r
- } /* end of part "swallow" */\r
- #include "../common/comp-part-logger.edc"\r
- } /* end of parts */\r
- programs {\r
- // ------------------------------------------------\r
- program { name: "prog-clipper-show";\r
- signal: "e,state,visible,on";\r
- source: "e";\r
- action: STATE_SET "default" 0.0;\r
- target: "clipper";\r
- after: "prog-clipper-show-done";\r
- }\r
- program { name: "prog-clipper-show-done";\r
- action: STATE_SET "visible" 0.0;\r
- target: "clipper";\r
- }\r
- program { name: "prog-clipper-hide";\r
- signal: "e,state,visible,off";\r
- source: "*";\r
- action: STATE_SET "visible" 0.0;\r
- target: "clipper";\r
- target: "persp";\r
- after: "prog-clipper-hide-done";\r
- }\r
- program { name: "prog-clipper-hide-done";\r
- action: STATE_SET "hide" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_CLIPPER_HIDE;\r
- target: "clipper";\r
- target: "persp";\r
- }\r
- // ------------------------------------------------\r
- program { name: "prog-emit-show-done";\r
- action: SIGNAL_EMIT "e,action,show,done" "e";\r
- }\r
- program { name: "prog-emit-window-rotation-done";\r
- action: SIGNAL_EMIT "e,action,window,rotation,done" "e";\r
- }\r
- program { name: "prog-swallow-show";\r
- signal: "e,state,visible,on";\r
- source: "e";\r
- action: STATE_SET "default" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-show-done";\r
- }\r
- program { name: "prog-swallow-show-done";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-emit-show-done";\r
- }\r
- program { name: "prog-swallow-show-rotation-180";\r
- signal: "e,state,visible,on";\r
- source: "e.rot.180";\r
- action: STATE_SET "default" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-show-rotation-180-done";\r
- }\r
- program { name: "prog-swallow-show-rotation-180-done";\r
- action: STATE_SET "visible-rot-180" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-emit-show-done";\r
- }\r
- // ------------------------------------------------\r
- program { name: "prog-swallow-hide-rotation--270";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.-270";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation--270-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation--270-done";\r
- action: STATE_SET "visible-rot--270" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation--180";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.-180";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation--180-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation--180-done";\r
- action: STATE_SET "visible-rot--180" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation--90";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.-90";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation--90-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation--90-done";\r
- action: STATE_SET "visible-rot--90" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
-\r
- program { name: "prog-swallow-hide-rotation-0";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.0";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation-0-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-0-done";\r
- action: STATE_SET "visible-rot-0" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-90";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.90";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation-90-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-90-done";\r
- action: STATE_SET "visible-rot-90" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-180";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.180";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation-180-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-180-done";\r
- action: STATE_SET "visible-rot-180" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-270";\r
- signal: "e,state,visible,off";\r
- source: "e.rot.270";\r
- action: STATE_SET "visible" 0.0;\r
- target: "e.swallow.content";\r
- after: "prog-swallow-hide-rotation-270-done";\r
- }\r
- program { name: "prog-swallow-hide-rotation-270-done";\r
- action: STATE_SET "visible-rot-270" 0.0;\r
- transition: DURATION_WND_ROT_PREV_PIXMAP_SWALLOW_HIDE;\r
- target: "e.swallow.content";\r
- after: "prog-emit-window-rotation-done";\r
- }\r
- // ------------------------------------------------\r
- } /* end of programs */\r
-} /* end of group "wnd_rot_prev_pixmap" */\r
#include "group/shadow_twist.edc"
/*-----------------------------------------------------*/
- /* group "wnd_rot_prev_pixmap" */
- /*-----------------------------------------------------*/
- #include "group/wnd_rot_prev_pixmap.edc"
-
- /*-----------------------------------------------------*/
/* group "shadow_fade" */
/*-----------------------------------------------------*/
#include "group/shadow_fade.edc"
#include "group/dialog.edc"
/*-----------------------------------------------------*/
+ /* group "dialog_without_dim" */
+ /*-----------------------------------------------------*/
+ #include "group/dialog_without_dim.edc"
+
+ /*-----------------------------------------------------*/
/* group "indicator" */
/*-----------------------------------------------------*/
#include "group/indicator.edc"
pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH)
pkg_LTLIBRARIES = module.la
-module_la_SOURCES = e_mod_comp_animation.c \
- e_mod_comp_animation.h \
- e_mod_comp_atoms.c \
+module_la_SOURCES = e_mod_comp_atoms.c \
e_mod_comp_atoms.h \
e_mod_comp_bg_win.c \
e_mod_comp_bg_win.h \
e_mod_comp_effect.h \
e_mod_comp_effect_image_launch.c \
e_mod_comp_effect_image_launch.h \
- e_mod_comp_effect_tm.c \
- e_mod_comp_effect_tm.h \
e_mod_comp_effect_win_rotation.c \
e_mod_comp_effect_win_rotation.h \
e_mod_comp_hw_ov_win.c \
static E_Comp_Win *_e_mod_comp_win_find(Ecore_X_Window win);
static E_Comp_Win *_e_mod_comp_border_client_find(Ecore_X_Window win);
static Eina_Bool _e_mod_comp_cb_update(E_Comp *c);
+static Evas_Object *_e_mod_comp_mirror_handler_add(E_Comp *c);
static Eina_Bool _e_mod_comp_win_is_border(E_Comp_Win *cw);
static void _e_mod_comp_cb_pending_after(void *data, E_Manager *man, E_Manager_Comp_Source *src);
static E_Comp *_e_mod_comp_find(Ecore_X_Window root);
return;
}
- // update obj geometry when task switcher is not open
- // or task switcher is open and new window is added
- cw->defer_move_resize = EINA_FALSE;
- if ((!cw->c->switcher) ||
- ((cw->c->switcher) && (!cw->first_show_worked)) ||
- ((cw->c->switcher) && TYPE_INDICATOR_CHECK(cw)))
- {
- if (!cw->move_lock)
- e_mod_comp_win_comp_objs_move(cw, cw->x, cw->y);
- e_mod_comp_win_comp_objs_resize(cw,
- cw->pw + (cw->border * 2),
- cw->ph + (cw->border * 2));
- }
- else
- {
- cw->defer_move_resize = EINA_TRUE;
- }
+ if (!cw->move_lock)
+ e_mod_comp_win_comp_objs_move(cw, cw->x, cw->y);
+ e_mod_comp_win_comp_objs_resize(cw,
+ cw->pw + (cw->border * 2),
+ cw->ph + (cw->border * 2));
if ((cw->c->gl)
&& (_comp_mod->conf->texture_from_pixmap)
if ((!cw) || (cw != canvas->nocomp.cw) ||
(canvas->nocomp.force_composite))
{
- L(LT_EVENT_X,
- "COMP|%31s|new_w:0x%08x|nocomp.cw:0x%08x canvas:%d\n",
- "NOCOMP_END", cw ? e_mod_comp_util_client_xid_get(cw) : 0,
- e_mod_comp_util_client_xid_get(canvas->nocomp.cw),
- canvas->num);
+ ELBF(ELBT_COMP, 0,
+ cw ? e_mod_comp_util_client_xid_get(cw) : 0,
+ "NOCOMP_END nocomp.cw:0x%08x canvas:%d",
+ e_mod_comp_util_client_xid_get(canvas->nocomp.cw),
+ canvas->num);
e_mod_comp_canvas_nocomp_end(canvas);
}
if (obj == cw->bd)
{
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|", "OBJECT_DEL");
+
if (cw->counter)
{
Ecore_X_Window _w = e_mod_comp_util_client_xid_get(cw);
ecore_x_e_comp_sync_cancel_send(_w);
ecore_x_sync_counter_inc(cw->counter, 1);
cw->sync_info.val++;
+
+ ELBF(ELBT_COMP, 1, _w, "%15.15s", "SYNC_CANCEL");
}
if (cw->bd) eina_hash_del(borders, e_util_winid_str_get(cw->bd->client.win), cw);
cw->bd = NULL;
if (cw->defer_raise)
{
- L(LT_EFFECT,
- "[COMP] w:0x%08x force win to raise. bd:%s\n",
- e_mod_comp_util_client_xid_get(cw),
- cw->bd ? "O" : "X");
+ ELBF(ELBT_COMP, 0,
+ e_mod_comp_util_client_xid_get(cw),
+ "EDJ_DONE Force win to raise bd:%d",
+ cw->bd);
E_Comp_Win *_cw;
EINA_INLIST_FOREACH(cw->c->wins, _cw)
cw->force = 1;
if (cw->defer_hide)
{
- L(LT_EVENT_X,
- "COMP|%31s|w:0x%08x|force win to hide. bd:%s\n",
- "EDJ_DONE", e_mod_comp_util_client_xid_get(cw),
- cw->bd ? "O" : "X");
+ ELBF(ELBT_COMP, 0,
+ e_mod_comp_util_client_xid_get(cw),
+ "EDJ_DONE Force win to hide bd:%d",
+ cw->bd);
_e_mod_comp_win_hide(cw);
}
cw->force = 1;
if (cw->delete_me)
{
- L(LT_EVENT_X,
- "COMP|%31s|w:0x%08x|force win to delete. bd:%s\n",
- "EDJ_DONE", e_mod_comp_util_client_xid_get(cw),
- cw->bd ? "O" : "X");
+ ELBF(ELBT_COMP, 0,
+ e_mod_comp_util_client_xid_get(cw),
+ "EDJ_DONE Force win to del bd:%d",
+ cw->bd);
_e_mod_comp_win_del(cw);
}
cw->bd ? cw->bd->client.netwm.name : NULL);
#endif
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "SHOW_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|SHOW_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "show,done");
+ cw->launched = EINA_TRUE;
cw->show_done = EINA_TRUE;
e_mod_comp_done_defer(cw);
}
E_Comp_Win *cw = (E_Comp_Win *)data;
E_CHECK(cw);
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "HIDE_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|HIDE_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "hide,done");
E_Comp_Win *cw = data;
E_CHECK(cw);
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "RAISE_SHOW_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|RAISE_SHOW_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "raise,show,done");
E_Comp_Win *cw = data;
E_CHECK(cw);
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "RAISE_HIDE_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|RAISE_HIDE_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "raise,hide,done");
E_Comp_Win *cw = data;
E_CHECK(cw);
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "BG_SHOW_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|BG_SHOW_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "bg,show,done");
E_Comp_Win *cw = data;
E_CHECK(cw);
- L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s\n", "SIGNAL",
- e_mod_comp_util_client_xid_get(cw),
- "BG_HIDE_DONE");
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|BG_HIDE_DONE", "SIGNAL");
e_mod_comp_effect_signal_del(cw, obj, "bg,hide,done");
e_mod_comp_done_defer(cw);
}
+
+static void
+_e_mod_comp_mirror_hide_done(void *data,
+ Evas_Object *obj,
+ const char *emission __UNUSED__,
+ const char *source __UNUSED__)
+{
+ E_Comp *c = data;
+ E_CHECK(c);
+
+ ELBF(ELBT_COMP, 0, 0,
+ "%15.15s|MIRROR_HIDE_DONE", "SIGNAL");
+ edje_object_part_unswallow(c->mirror_handler, c->mirror_obj);
+
+ evas_object_hide(c->mirror_handler);
+ evas_object_hide(c->mirror_obj);
+ evas_object_del(c->mirror_obj);
+}
+
static void
_e_mod_comp_win_sync_setup(E_Comp_Win *cw,
Ecore_X_Window win)
}
}
+static void
+_e_mod_comp_win_shadow_setup_error_get(E_Comp_Win *cw,
+ Evas_Object *o,
+ const char *msg,
+ const char *file)
+{
+ Ecore_X_Window win = e_mod_comp_util_client_xid_get(cw);
+
+ fprintf(stdout,
+ "[E17-comp] EDC file ERROR win:0x%08x o:%p %s FILE:%s\n",
+ win, o, msg, file);
+
+ ELBF(ELBT_COMP, 0, win,
+ "%15.15s|ERROR o:%p %s",
+ "EDC", o, msg);
+
+ ELBF(ELBT_COMP, 0, win,
+ "%15.15s|ERROR FILE:%s",
+ "EDC", file);
+
+ e_mod_comp_debug_edje_error_get(o, win);
+}
+
EINTERN void
e_mod_comp_win_shadow_setup(E_Comp_Win *cw,
E_Comp_Object *co)
}
if (_comp_mod->conf->shadow_file)
- ok = edje_object_file_set
- (co->shadow, _comp_mod->conf->shadow_file,
- e_mod_comp_policy_win_shadow_group_get(cw));
+ {
+ ok = edje_object_file_set
+ (co->shadow, _comp_mod->conf->shadow_file,
+ e_mod_comp_policy_win_shadow_group_get(cw));
+
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|FILE:%s GROUP:%s", "EDC",
+ _comp_mod->conf->shadow_file,
+ e_mod_comp_policy_win_shadow_group_get(cw));
+ }
if (!ok)
{
- fprintf(stdout, "[E17-comp] EDC file ERROR win:0x%08x %s(%d) f:%s\n",
- cw->win, __func__, __LINE__, _comp_mod->conf->shadow_file);
- e_mod_comp_debug_edje_error_get
- (co->shadow, e_mod_comp_util_client_xid_get(cw));
+ _e_mod_comp_win_shadow_setup_error_get
+ (cw, co->shadow, "SHADOW_FILE",
+ _comp_mod->conf->shadow_file);
if (_comp_mod->conf->shadow_style)
{
snprintf(buf, sizeof(buf), "e/comp/%s",
_comp_mod->conf->shadow_style);
+
ok = e_theme_edje_object_set(co->shadow,
"base/theme/borders",
buf);
}
if (!ok)
{
+ _e_mod_comp_win_shadow_setup_error_get
+ (cw, co->shadow, "STYLE",
+ _comp_mod->conf->shadow_style);
+
ok = e_theme_edje_object_set(co->shadow,
"base/theme/borders",
"e/comp/default");
// fallback to local shadow.edj - will go when default theme supports this
if (!ok)
{
- fprintf(stdout, "[E17-comp] EDC file ERROR win:0x%08x %s(%d)\n",
- cw->win, __func__, __LINE__);
- e_mod_comp_debug_edje_error_get
- (co->shadow, e_mod_comp_util_client_xid_get(cw));
+ _e_mod_comp_win_shadow_setup_error_get
+ (cw, co->shadow, "STYLE_DEFAULT",
+ "e/comp/default");
+
snprintf(buf, sizeof(buf), "%s/shadow.edj",
e_module_dir_get(_comp_mod->module));
ok = edje_object_file_set(co->shadow, buf, "shadow");
+
+ if (!ok)
+ {
+ _e_mod_comp_win_shadow_setup_error_get
+ (cw, co->shadow, "LOCAL", buf);
+ }
}
if (!edje_object_part_swallow(co->shadow,
"e.swallow.content",
co->img))
{
- fprintf(stdout, "[E17-comp] EDC swallow ERROR win:0x%08x %s(%d)\n",
- cw->win, __func__, __LINE__);
+ fprintf(stdout,
+ "[E17-comp] EDC swallow ERROR win:0x%08x %s(%d) o:%p img:%p\n",
+ cw->win, __func__, __LINE__, co->shadow, co->img);
+
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|SWALLOW_ERROR o:%p img:%p",
+ "EDC", co->shadow, co->img);
}
e_mod_comp_debug_edje_error_get
{
free(cw);
e_mod_comp_x_grab_set(c, EINA_FALSE);
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|ERROR", "OBJECT_ADD");
return NULL;
}
}
e_mod_comp_x_grab_set(c, EINA_FALSE);
+ cw->launched = EINA_FALSE;
return cw;
}
{
cw->defer_hide = 0;
if (!cw->hidden_override)
- {
- if (cw->defer_move_resize)
- {
- if (!cw->move_lock)
- e_mod_comp_win_comp_objs_move(cw, cw->x, cw->y);
- e_mod_comp_win_comp_objs_resize(cw,
- cw->pw + (cw->border * 2),
- cw->ph + (cw->border * 2));
- cw->defer_move_resize = EINA_FALSE;
- }
- e_mod_comp_win_comp_objs_force_show(cw);
- }
+ e_mod_comp_win_comp_objs_force_show(cw);
}
}
e_mod_comp_bg_win_handler_show(cw);
EINA_INLIST_GET(cw2));
v2 = e_mod_comp_util_win_visible_get(cw);
- if ((v1) && (!v2))
+ if ((cw2) == (cw->c->lower_win))
+ lower = e_mod_comp_policy_win_lower_check(cw, below);
+ else if ((v1) && (!v2))
lower = e_mod_comp_policy_win_lower_check(cw, below);
else if ((!v1) && (v2))
raise = e_mod_comp_policy_win_restack_check(cw, cw2);
{
if (canvas->ee_win == ev->win) return ECORE_CALLBACK_PASS_ON;
}
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x\n",
- "X_CREATE", ev->win);
+ ELBF(ELBT_COMP, 0, ev->win, "%15.15s|", "X_CREATE");
cw = _e_mod_comp_win_add(c, ev->win);
if (cw)
_e_mod_comp_win_configure(cw,
Ecore_X_Event_Window_Destroy *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|bd:%d c:0x%08x cw:%p\n",
- "X_DESTROY", ev->win, _e_mod_comp_win_is_border(cw),
- e_mod_comp_util_client_xid_get(cw), cw);
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|w:0x%08x|bd:%d cw:%p", "X_DESTROY",
+ ev->win, _e_mod_comp_win_is_border(cw), cw);
if (!cw->c->nocomp && cw->animating) cw->delete_me = 1;
else _e_mod_comp_win_del(cw);
return ECORE_CALLBACK_PASS_ON;
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (cw->visible) return ECORE_CALLBACK_PASS_ON;
if (_e_mod_comp_win_is_border(cw)) return ECORE_CALLBACK_PASS_ON;
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|bd:%d c:0x%08x cw:%p\n",
- "X_SHOW", ev->win, _e_mod_comp_win_is_border(cw),
- e_mod_comp_util_client_xid_get(cw), cw);
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|w:0x%08x|bd:%d cw:%p", "X_SHOW",
+ ev->win, _e_mod_comp_win_is_border(cw), cw);
_e_mod_comp_win_show(cw);
return ECORE_CALLBACK_PASS_ON;
}
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (!cw->visible) return ECORE_CALLBACK_PASS_ON;
if (_e_mod_comp_win_is_border(cw)) return ECORE_CALLBACK_PASS_ON;
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|bd:%d c:0x%08x cw:%p\n",
- "X_HIDE", ev->win, _e_mod_comp_win_is_border(cw),
- e_mod_comp_util_client_xid_get(cw), cw);
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|w:0x%08x|bd:%d cw:%p", "X_HIDE",
+ ev->win, _e_mod_comp_win_is_border(cw), cw);
_e_mod_comp_win_real_hide(cw);
return ECORE_CALLBACK_PASS_ON;
}
Ecore_X_Event_Window_Reparent *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|bd:%d c:0x%08x cw:%p TO rw:0x%08x\n",
- "X_REPARENT", ev->win, _e_mod_comp_win_is_border(cw),
- e_mod_comp_util_client_xid_get(cw), cw, ev->parent);
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|w:0x%08x|bd:%d cw:%p TO parent:0x%08x", "X_REPARENT",
+ ev->win, _e_mod_comp_win_is_border(cw), cw, ev->parent);
if (ev->parent != cw->c->man->root)
{
- L(LT_EVENT_X, "COMP|%31s|w:0x%08x\n", "DEL", ev->win);
+ ELBF(ELBT_COMP, 1, e_mod_comp_util_client_xid_get(cw),
+ "DEL 0x%08x", ev->win);
_e_mod_comp_win_del(cw);
}
return ECORE_CALLBACK_PASS_ON;
if (val != 0)
{
c->animatable = EINA_TRUE;
+ c->keyboard_effect = EINA_TRUE;
if (_comp_mod->conf->default_window_effect != 1)
{
_comp_mod->conf->default_window_effect = 1;
else
{
c->animatable = EINA_FALSE;
+ c->keyboard_effect = EINA_FALSE;
if (_comp_mod->conf->default_window_effect != 0)
{
_comp_mod->conf->default_window_effect = 0;
E_Comp_Canvas *canvas;
E_Comp* c = _e_mod_comp_find(ev->border->zone->container->manager->root);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_ADD",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x", "BD_ADD", ev->border->win);
if (!c) return ECORE_CALLBACK_PASS_ON;
if (_e_mod_comp_win_find(ev->border->win)) return ECORE_CALLBACK_PASS_ON;
E_Event_Border_Remove *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->border->win);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_DEL",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x cw:%p", "BD_DEL", ev->border->win, cw);
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (cw->bd == ev->border)
if (!ev->border->borderless)
e_mod_comp_effect_signal_add(cw, NULL, "e,state,shadow,off", "e");
+ if (e_mod_comp_policy_app_close_check(cw))
+ e_mod_comp_effect_signal_add(cw, NULL, "e,state,visible,off", "e");
+
_e_mod_comp_object_del(cw, ev->border);
}
return ECORE_CALLBACK_PASS_ON;
E_Event_Border_Show *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->border->win);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_SHOW",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x cw:%p", "BD_SHOW", ev->border->win, cw);
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (cw->visible) return ECORE_CALLBACK_PASS_ON;
E_Event_Border_Hide *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->border->win);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_HIDE",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x cw:%p", "BD_HIDE", ev->border->win, cw);
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (!cw->visible) return ECORE_CALLBACK_PASS_ON;
E_Event_Border_Iconify *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->border->win);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_ICONIFY",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x", "BD_ICONIFY", ev->border->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
// fimxe: special iconfiy anim
E_Event_Border_Uniconify *ev = event;
E_Comp_Win *cw = _e_mod_comp_win_find(ev->border->win);
- L(LT_EVENT_X,
- "COMP|ev:%15.15s|w:0x%08x|c:0x%08x\n", "BD_UNICONIFY",
- ev->border->win, ev->border->client.win);
+ ELBF(ELBT_COMP, 0, ev->border->client.win,
+ "%15.15s|bd:0x%08x", "BD_UNICONIFY", ev->border->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
// fimxe: special uniconfiy anim
_e_mod_comp_src_input_region_set_func(void *data __UNUSED__,
E_Manager *man __UNUSED__,
E_Manager_Comp_Source *src,
- int x,
- int y,
- int w,
- int h)
+ int x,
+ int y,
+ int w,
+ int h)
{
E_Comp_Win *cw = (E_Comp_Win *)src;
Eina_Bool res = EINA_FALSE;
return EINA_TRUE;
}
+static int
+_e_mod_comp_input_region_new_func(void *data __UNUSED__,
+ E_Manager *man __UNUSED__)
+{
+ E_Comp *c = e_mod_comp_util_get();
+ E_CHECK_RETURN(c, 0);
+
+ return e_mod_comp_shape_input_new(c);
+}
+
static Eina_Bool
-_e_mod_comp_input_region_set_func(void *data __UNUSED__,
- E_Manager *man __UNUSED__,
- int x,
- int y,
- int w,
- int h)
+_e_mod_comp_input_region_set_func(void *data __UNUSED__,
+ E_Manager *man __UNUSED__,
+ int id,
+ int x,
+ int y,
+ int w,
+ int h)
{
E_Comp *c = e_mod_comp_util_get();
Eina_Bool res = EINA_FALSE;
- E_CHECK_RETURN(c, 0);
+ E_CHECK_RETURN(c, EINA_FALSE);
- if (!c->shape_input)
- c->shape_input = e_mod_comp_shape_input_new();
- E_CHECK_RETURN(c->shape_input, 0);
+ if (id <= 0) return EINA_FALSE;
- res = e_mod_comp_win_shape_input_rect_set(c->shape_input, x, y, w, h);
- E_CHECK_RETURN(res, 0);
+ res = e_mod_comp_shape_input_set(c, id, x, y, w, h);
+ if (res)
+ {
+ e_mod_comp_win_shape_input_invalid_set(c, 1);
+ _e_mod_comp_render_queue(c);
+ }
- e_mod_comp_win_shape_input_invalid_set(c, 1);
- _e_mod_comp_render_queue(c);
- return EINA_TRUE;
+ return res;
+}
+
+static Eina_Bool
+_e_mod_comp_input_region_del_func(void *data __UNUSED__,
+ E_Manager *man __UNUSED__,
+ int id)
+{
+ E_Comp *c = e_mod_comp_util_get();
+ Eina_Bool res = EINA_FALSE;
+ E_CHECK_RETURN(c, 0);
+
+ if (id <= 0) return EINA_FALSE;
+
+ res = e_mod_comp_shape_input_del(c, id);
+ if (res)
+ {
+ e_mod_comp_win_shape_input_invalid_set(c, 1);
+ _e_mod_comp_render_queue(c);
+ }
+ return res;
}
static Eina_Bool
_e_mod_comp_win_hide(cw);
}
+static Evas_Object *
+_e_mod_comp_mirror_handler_add(E_Comp *c)
+{
+ Evas_Object *shobj;
+ int ok = 0;
+ int w, h;
+ E_CHECK_RETURN(c, NULL);
+
+ shobj = edje_object_add(_e_mod_comp_evas_get_func(c, c->man));
+ E_CHECK_RETURN(shobj, NULL);
+
+ ok = edje_object_file_set (shobj, _comp_mod->conf->shadow_file, "shadow_fade");
+ E_CHECK_RETURN(ok, NULL);
+
+ edje_object_signal_callback_add(shobj, "e,action,mirror,hide,done","e", _e_mod_comp_mirror_hide_done, c);
+ evas_object_move(shobj, 0, 0);
+
+ ecore_x_window_size_get(c->win, &w, &h);
+ evas_object_resize(shobj, w, h);
+
+ return shobj;
+}
+
static E_Comp *
_e_mod_comp_add(E_Manager *man)
{
wname = wclass = NULL;
cw = _e_mod_comp_win_add(c, wins[i]);
if (!cw) continue;
+ if (i == _comp_mod->conf->lower_layer)
+ c->lower_win = cw;
ecore_x_window_geometry_get(cw->win, &x, &y, &w, &h);
border = ecore_x_window_border_width_get(cw->win);
if (wins[i] == c->win) continue;
c->comp.func.screen_lock = e_mod_comp_screen_lock_func;
c->comp.func.screen_unlock = e_mod_comp_screen_unlock_func;
c->comp.func.src_input_region_set = _e_mod_comp_src_input_region_set_func;
+ c->comp.func.input_region_new = _e_mod_comp_input_region_new_func;
c->comp.func.input_region_set = _e_mod_comp_input_region_set_func;
+ c->comp.func.input_region_del = _e_mod_comp_input_region_del_func;
c->comp.func.src_move_lock = _e_mod_comp_src_move_lock_func;
c->comp.func.src_move_unlock = _e_mod_comp_src_move_unlock_func;
c->comp.func.composite_mode_set = _e_mod_comp_composite_mode_set;
if (c->new_up_timer) ecore_timer_del(c->new_up_timer);
if (c->update_job) ecore_job_del(c->update_job);
if (c->wins_list) eina_list_free(c->wins_list);
+ if (c->mirror_handler) evas_object_del(c->mirror_handler);
ecore_x_window_free(c->cm_selection);
ecore_x_e_comp_sync_supported_set(c->man->root, 0);
ecore_x_screen_is_composited_set(c->man->num, 0);
- e_mod_comp_win_shape_input_free(c->shape_input);
+
+ if (c->shape_inputs) eina_list_free(c->shape_inputs);
free(c);
}
ecore_x_window_size_get(c->win, &w, &h);
c->eff_img = e_mod_comp_effect_image_launch_new(c->evas, w, h);
}
+
+ c->mirror_handler = _e_mod_comp_mirror_handler_add(c);
+
compositors = eina_list_append(compositors, c);
e_mod_comp_util_set(c, man);
ecore_animator_frametime_set(1.0f/60.0f);
+++ /dev/null
-#include "e_mod_comp_shared_types.h"
-#include "e_mod_comp_debug.h"
-#include "e_mod_comp.h"
-
-/* local subsystem functions */
-static void _e_mod_comp_animation_done(void *data);
-
-/* local subsystem globals */
-static Eina_List *transfers = NULL;
-
-/* externally accessible functions */
-EINTERN E_Comp_Transfer *
-e_mod_comp_animation_transfer_new(void)
-{
- E_Comp_Transfer *tr;
- tr = E_NEW(E_Comp_Transfer, 1);
- transfers = eina_list_append(transfers, tr);
- return tr;
-}
-
-EINTERN void
-e_mod_comp_animation_transfer_free(E_Comp_Transfer *tr)
-{
- E_Comp_Win *cw = NULL;
- E_CHECK(tr);
- transfers = eina_list_remove(transfers, tr);
- if (tr->animator)
- ecore_animator_del(tr->animator);
- tr->animator = NULL;
- if (tr->obj)
- {
- cw = evas_object_data_get(tr->obj, "src");
- if (cw) cw->transfer = NULL;
- }
- tr->obj = NULL;
- E_FREE(tr);
-}
-
-EINTERN Eina_Bool
-e_mod_comp_animation_on_rotate_top(void *data)
-{
- E_Comp_Transfer *transfer;
- double elapsed_time;
-
- E_Comp_Win *cw = data;
- E_CHECK_RETURN(cw, 0);
- if (!(transfer = cw->transfer)) return EINA_FALSE;
- elapsed_time = ecore_loop_time_get() - transfer->begin_time ;
- if (elapsed_time > transfer->duration) elapsed_time = transfer->duration;
-
- float frame = elapsed_time / transfer->duration;
- evas_object_move(transfer->obj, transfer->from + (transfer->len * frame) , 0);
-
- Evas_Coord x, y, w, h;
- Evas_Map* map;
- float half_w, half_h;
- float degree;
-
- map = evas_map_new(4);
- E_CHECK_RETURN(map, 0);
- evas_map_smooth_set(map, EINA_TRUE);
- evas_map_util_points_populate_from_object_full(map, transfer->obj, 0);
- evas_object_geometry_get(transfer->obj, &x, &y, &w, &h);
- half_w = (float) w * 0.5;
- half_h = (float) h * 0.5;
- degree = ROTATE_ANGLE_BEGIN + (ROTATE_ANGLE_TOP * frame);
- evas_map_util_3d_rotate(map, 0, degree, 0, x + half_w, y + half_h, 0);
- evas_map_util_3d_perspective(map, x + half_w, y + half_h, (-500) + 500 * frame, 1000);
- evas_object_map_enable_set(transfer->obj, EINA_TRUE);
- evas_object_map_set(transfer->obj, map);
- evas_map_free(map);
-
- if (elapsed_time == transfer->duration)
- {
- if (cw->animating == 1)
- {
- cw->animating = 0;
- }
- _e_mod_comp_animation_done(cw);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_animation_on_rotate_left(void *data)
-{
- E_Comp_Transfer *transfer;
- double elapsed_time;
-
- E_Comp_Win *cw = data;
- if (!cw) return EINA_FALSE;
- if (!(transfer = cw->transfer)) return EINA_FALSE;
- elapsed_time = ecore_loop_time_get() - transfer->begin_time ;
- if (elapsed_time > transfer->duration) elapsed_time = transfer->duration;
-
- float frame = elapsed_time / transfer->duration;
- evas_object_move(transfer->obj, transfer->from , 0);
-
- Evas_Coord x, y, w, h;
- Evas_Map* map;
- float half_w, half_h;
- float degree;
-
- map = evas_map_new(4);
- E_CHECK_RETURN(map, 0);
- evas_map_smooth_set(map, EINA_TRUE);
- evas_map_util_points_populate_from_object_full(map, transfer->obj, 0);
- evas_object_geometry_get(transfer->obj, &x, &y, &w, &h);
- half_w = (float) w * 0.5;
- half_h = (float) h * 0.5;
- degree = ROTATE_ANGLE_BEGIN + (ROTATE_ANGLE_LEFT * frame);
- evas_map_util_3d_rotate(map, 0, degree, 0, x + half_w, y + half_h, 0);
- evas_map_util_3d_perspective(map, x + half_w, y + half_h, -500, 1000);
- evas_object_map_enable_set(transfer->obj, EINA_TRUE);
- evas_object_map_set(transfer->obj, map);
- evas_map_free(map);
-
- if (elapsed_time == transfer->duration)
- {
- cw->animating = 0;
- _e_mod_comp_animation_done(cw);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_animation_on_translate(void *data)
-{
- E_Comp_Win *cw;
- E_Comp_Transfer *transfer, *rotate;
- Evas_Coord x, y, w, h;
- Evas_Map* map;
- float half_w, half_h;
- float degree, frame, translate_x;
- double elapsed_time;
-
- cw = (E_Comp_Win *)data;
- E_CHECK_RETURN(cw, 0);
-
- transfer = cw->transfer;
- E_CHECK_RETURN(transfer, 0);
-
- elapsed_time = ecore_loop_time_get() - transfer->begin_time;
- if (elapsed_time > transfer->duration) elapsed_time = transfer->duration;
-
- frame = elapsed_time / transfer->duration;
- translate_x = transfer->from + (transfer->len * frame);
- evas_object_move(transfer->obj, translate_x , 0);
-
- map = evas_map_new(4);
- E_CHECK_RETURN(map, 0);
-
- evas_map_smooth_set(map, EINA_TRUE);
- evas_map_util_points_populate_from_object_full(map, transfer->obj, 0);
- evas_object_geometry_get(transfer->obj, &x, &y, &w, &h);
- half_w = (float) w * 0.5;
- half_h = (float) h * 0.5;
- degree = 70.0f;
- evas_map_util_3d_rotate(map, 0, degree, 0, x + half_w, y + half_h, 0);
- evas_map_util_3d_perspective(map, x + half_w, y + half_h, -500, 1000);
- evas_object_map_enable_set(transfer->obj, EINA_TRUE);
- evas_object_map_set(transfer->obj, map);
- evas_map_free(map);
-
- if (elapsed_time != transfer->duration) return EINA_TRUE;
-
- rotate = e_mod_comp_animation_transfer_new();
- E_CHECK_RETURN(rotate, 0);
-
- rotate->obj = transfer->obj;
- rotate->duration = SWITCHER_DURATION_ROTATE;
- rotate->begin_time = ecore_loop_time_get();
- rotate->from = transfer->from + transfer->len;
- if (transfer->selected)
- {
- rotate->len = -(rotate->from);
- rotate->animator = ecore_animator_add(e_mod_comp_animation_on_rotate_top, cw);
- }
- else
- {
- rotate->len = 0;
- rotate->animator = ecore_animator_add(e_mod_comp_animation_on_rotate_left, cw);
- }
- if (transfer->animator) ecore_animator_del(transfer->animator);
- transfer->animator = NULL;
-
- e_mod_comp_animation_transfer_free(cw->transfer);
- cw->transfer = rotate;
- return EINA_FALSE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_animation_transfer_list_clear(void)
-{
- E_Comp_Transfer *tr;
- E_CHECK_RETURN(transfers, 0);
- EINA_LIST_FREE(transfers, tr)
- {
- if (!tr) continue;
- e_mod_comp_animation_transfer_free(tr);
- }
- transfers = NULL;
- return EINA_TRUE;
-}
-
-/* local subsystem functions */
-static void
-_e_mod_comp_animation_done(void *data)
-{
- E_Comp_Win *cw = (E_Comp_Win *)data;
- E_CHECK(cw);
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s cw->transfer:%p\n",
- "EFF", e_mod_comp_util_client_xid_get(cw),
- "ANIMATE_DONE", cw->transfer);
-
- E_CHECK_GOTO(cw->transfer, postjob);
-
- evas_object_map_enable_set(cw->transfer->obj, EINA_FALSE);
- evas_object_move(cw->transfer->obj, 0,0);
-
- e_mod_comp_animation_transfer_free(cw->transfer);
- cw->transfer = NULL;
-
-postjob:
- e_mod_comp_done_defer(cw);
-}
+++ /dev/null
-#ifdef E_TYPEDEFS
-#else
-#ifndef E_MOD_COMP_ANIMATION_H
-#define E_MOD_COMP_ANIMATION_H
-
-#define SWITCHER_DURATION_TRANSLATE (0.33)
-#define SWITCHER_DURATION_ROTATE (0.33)
-#define SWITCHER_DURATION_TOP ((SWITCHER_DURATION_TRANSLATE) + (SWITCHER_DURATION_ROTATE))
-#define WINDOW_SPACE (100)
-#define ROTATE_ANGLE_BEGIN (70)
-#define ROTATE_ANGLE_TOP (-70)
-#define ROTATE_ANGLE_LEFT (-30)
-
-typedef struct _E_Comp_Transfer E_Comp_Transfer;
-
-struct _E_Comp_Transfer
-{
- Evas_Object *obj;
- float from;
- float len;
- double begin_time;
- double duration;
- Ecore_Animator *animator;
- Eina_Bool selected;
-};
-
-/* transfer functions */
-EINTERN E_Comp_Transfer *e_mod_comp_animation_transfer_new(void);
-EINTERN void e_mod_comp_animation_transfer_free(E_Comp_Transfer *tr);
-EINTERN Eina_Bool e_mod_comp_animation_transfer_list_clear(void);
-
-/* animation functions */
-EINTERN Eina_Bool e_mod_comp_animation_on_rotate_top(void *data);
-EINTERN Eina_Bool e_mod_comp_animation_on_rotate_left(void *data);
-EINTERN Eina_Bool e_mod_comp_animation_on_translate(void *data);
-
-#endif
-#endif
cw = canvas->nocomp.prepare.cw;
E_CHECK_RETURN(cw, EINA_FALSE);
- L(LT_EVENT_X,
- "COMP|%31s|w:0x%08x|canvas:%d dmg:%d\n",
- "NOCOMP_BEGIN", e_mod_comp_util_client_xid_get(cw),
- canvas->num, cw->dmg_updates);
+ ELBF(ELBT_COMP, 0,
+ e_mod_comp_util_client_xid_get(cw),
+ "NOCOMP_BEGIN canvas:%d dmg:%d",
+ canvas->num, cw->dmg_updates);
e_mod_comp_hw_ov_win_msg_show
(E_COMP_LOG_TYPE_NOCOMP,
cw = canvas->nocomp.cw;
E_CHECK_RETURN(cw, EINA_FALSE);
- L(LT_EVENT_X,
- "COMP|%31s|nocomp.cw:0x%08x canvas:%d\n",
- "NOCOMP_END", e_mod_comp_util_client_xid_get(cw),
- canvas->num);
+ ELBF(ELBT_COMP, 0,
+ e_mod_comp_util_client_xid_get(cw),
+ "NOCOMP_END canvas:%d",
+ canvas->num, cw->dmg_updates);
e_mod_comp_hw_ov_win_msg_show
(E_COMP_LOG_TYPE_NOCOMP,
E_CONFIG_VAL(D, T, keyboard_effect, UCHAR);
E_CONFIG_VAL(D, T, fake_image_launch, UCHAR);
E_CONFIG_VAL(D, T, fake_launch_layer, INT);
+ E_CONFIG_VAL(D, T, lower_layer, INT);
E_CONFIG_VAL(D, T, defer_raise_effect, UCHAR);
E_CONFIG_VAL(D, T, max_lock_screen_time, DOUBLE);
E_CONFIG_VAL(D, T, damage_timeout, DOUBLE);
cfg->keyboard_effect = 0;
cfg->fake_image_launch = 0;
cfg->fake_launch_layer = 0;
+ cfg->lower_layer = 5;
cfg->defer_raise_effect = 0;
cfg->max_lock_screen_time = 2.0;
cfg->damage_timeout = 10.0;
unsigned char keyboard_effect;
unsigned char fake_image_launch;
int fake_launch_layer;
+ int lower_layer;
unsigned char defer_raise_effect;
double max_lock_screen_time;
double damage_timeout;
e_mod_comp_debug_edje_error_get(Evas_Object *o,
Ecore_X_Window win)
{
- int err = EDJE_LOAD_ERROR_NONE;
- E_CHECK_RETURN(o, 0);
+ Edje_Load_Error err = edje_object_load_error_get(o);
+ char *_err_msg = NULL;
+ Eina_Bool res = EINA_TRUE;
- if ((err = edje_object_load_error_get(o)) != EDJE_LOAD_ERROR_NONE)
+ if (err != EDJE_LOAD_ERROR_NONE)
{
switch (err)
{
- case EDJE_LOAD_ERROR_GENERIC: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_GENERIC! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_DOES_NOT_EXIST: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_DOES_NOT_EXIST! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_PERMISSION_DENIED: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_PERMISSION_DENIED! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_CORRUPT_FILE: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_CORRUPT_FILE! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_UNKNOWN_FORMAT: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_UNKNOWN_FORMAT! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_INCOMPATIBLE_FILE: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_INCOMPATIBLE_FILE! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_UNKNOWN_COLLECTION: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_UNKNOWN_COLLECTION! win:0x%08x\n", win); break;
- case EDJE_LOAD_ERROR_RECURSIVE_REFERENCE: fprintf(stderr, "[E17-comp] EDJE_LOAD_ERROR_RECURSIVE_REFERENCE! win:0x%08x\n", win); break;
- default:
- break;
+ case EDJE_LOAD_ERROR_GENERIC: _err_msg = strdup("ERR_GENERIC"); break;
+ case EDJE_LOAD_ERROR_DOES_NOT_EXIST: _err_msg = strdup("ERR_DOES_NOT_EXIST"); break;
+ case EDJE_LOAD_ERROR_PERMISSION_DENIED: _err_msg = strdup("ERR_PERMISSION_DENIED"); break;
+ case EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED: _err_msg = strdup("ERR_RESOURCE_ALLOCATION_FAILED"); break;
+ case EDJE_LOAD_ERROR_CORRUPT_FILE: _err_msg = strdup("ERR_CORRUPT_FILE"); break;
+ case EDJE_LOAD_ERROR_UNKNOWN_FORMAT: _err_msg = strdup("ERR_UNKNOWN_FORMAT"); break;
+ case EDJE_LOAD_ERROR_INCOMPATIBLE_FILE: _err_msg = strdup("ERR_INCOMPATIBLE_FILE"); break;
+ case EDJE_LOAD_ERROR_UNKNOWN_COLLECTION: _err_msg = strdup("ERR_UNKNOWN_COLLECTION"); break;
+ case EDJE_LOAD_ERROR_RECURSIVE_REFERENCE: _err_msg = strdup("ERR_RECURSIVE_REFERENCE"); break;
+ default: _err_msg = strdup("ERR_UNKNOWN_ERROR"); break;
}
- return EINA_FALSE;
+ res = EINA_FALSE;
}
- return EINA_TRUE;
+
+ if (res) _err_msg = strdup("SUCCESS");
+ fprintf(stderr, "[E17-comp] %s win:0x%08x o:%p\n", _err_msg, win, o);
+ ELBF(ELBT_COMP, 0, win, "%15.15s|o:%p %s", "EDC", o, _err_msg);
+ free(_err_msg);
+
+ return res;
}
EINTERN Eina_Bool
#include "e_mod_comp.h"
#include "e_mod_comp_atoms.h"
#include "e_mod_comp_debug.h"
-#include "e_mod_comp_effect_tm.h"
#include <X11/Xlib.h>
struct _E_Comp_Effect_Type
/* local subsystem functions */
static E_Comp_Effect_Style _effect_style_get(Ecore_X_Atom a);
-static void _bg_show(E_Comp_Win *cw);
-static void _bg_hide(E_Comp_Win *cw);
static void _effect_stage_enable(E_Comp_Win *cw, E_Comp_Win *cw2);
static Eina_Bool _state_send(E_Comp_Win *cw, Eina_Bool state);
static Eina_Bool _effect_animating_check(const char *emission);
{
// special contonl this signal
edje_object_signal_emit(job->o, job->emission, job->src);
+
+ ELBF(ELBT_COMP, 0, job->win,
+ "%15.15s|EMIT %s", "SIGNAL",
+ job->emission);
+
effect_jobs = eina_list_remove(effect_jobs, job);
E_FREE(job);
}
{
// do effect signal emit
edje_object_signal_emit(job->o, job->emission, job->src);
+
+ ELBF(ELBT_COMP, 0, job->win,
+ "%15.15s|EMIT %s", "SIGNAL",
+ job->emission);
}
- else if (strncmp(job->emission, "e,state,background,visible,off", sizeof("e,state,background,visible,off")) == 0)
- {
- e_mod_comp_explicit_background_hide_done(cw);
- }
- else if (strncmp(job->emission, "e,state,background,visible,on", sizeof("e,state,background,visible,on")) == 0)
- {
- e_mod_comp_explicit_background_show_done(cw);
- }
- else if (strncmp(job->emission, "e,state,window,rotation,", sizeof("e,state,window,rotation,")) == 0)
+ else if (strncmp(job->emission, "e,state,window,rotation,", sizeof("e,state,window,rotation")) == 0)
{
e_mod_comp_explicit_win_rotation_done(cw);
}
else
{
edje_object_signal_emit(job->o, job->emission, job->src);
+
+ ELBF(ELBT_COMP, 0, job->win,
+ "%15.15s|EMIT %s", "SIGNAL",
+ job->emission);
}
}
}
else
{ // effect for not window ex) capture. etc...
edje_object_signal_emit(job->o, job->emission, job->src);
+
+ ELBF(ELBT_COMP, 0, job->win,
+ "%15.15s|EMIT %s", "SIGNAL",
+ job->emission);
+
effect_jobs = eina_list_remove(effect_jobs, job);
E_FREE(job);
}
{
E_Comp_Effect_Style st;
Eina_Bool animatable, launch;
+ E_Comp_Win *bg_cw = NULL;
char emission[64];
E_CHECK(cw);
E_CHECK(cw->c);
{
case E_COMP_EFFECT_STYLE_DEFAULT:
launch = e_mod_comp_policy_app_launch_check(cw);
- if (launch) _bg_show(cw);
+ if (launch)
+ {
+ if (!(cw->launched))
+ {
+ e_mod_comp_effect_signal_add
+ (cw, NULL, "e,state,visible,on", "e");
+ }
+ else
+ {
+ e_mod_comp_effect_signal_add
+ (cw, NULL, "e,state,visible,on,noeffect", "e");
+ }
+ goto postjob;
+ }
if (TYPE_KEYBOARD_CHECK(cw))
{
}
else
e_mod_comp_effect_signal_add
- (cw, NULL, "e,state,visible,on", "e");
+ (cw, NULL, "e,state,visible,on,noeffect", "e");
break;
case E_COMP_EFFECT_STYLE_NONE:
e_mod_comp_effect_signal_add
e_mod_comp_effect_win_hide(E_Comp_Win *cw)
{
E_Comp_Effect_Style st;
- Eina_Bool animatable, close;
+ Eina_Bool animatable;
+ Eina_Bool close = EINA_FALSE;
char emission[64];
E_CHECK_RETURN(cw, 0);
E_CHECK_RETURN(cw->c, 0);
switch (st)
{
case E_COMP_EFFECT_STYLE_DEFAULT:
- close = e_mod_comp_policy_app_close_check(cw);
- if (!cw->animating && close)
- _bg_hide(cw);
if (TYPE_KEYBOARD_CHECK(cw))
{
if (cw->c->keyboard_effect)
(cw, NULL, "e,state,visible,off,noeffect", "e");
}
else
- e_mod_comp_effect_signal_add
- (cw, NULL, "e,state,visible,off", "e");
+ ;
break;
case E_COMP_EFFECT_STYLE_NONE:
e_mod_comp_effect_signal_add
E_CHECK(cw2);
L(LT_EFFECT,
- "[COMP] %18.18s w:0x%08x %s tm:%d tm->obscured:%d\n",
+ "[COMP] %18.18s w:0x%08x %s\n",
"EFF", e_mod_comp_util_client_xid_get(cw),
- "RAISE_ABOVE", cw->c->switcher,
- cw->c->switcher_obscured);
+ "RAISE_ABOVE");
while (_cw->defer_hide || !(REGION_EQUAL_TO_ROOT(_cw)) ||
_cw->input_only || _cw->invalid ||
if (e_mod_comp_policy_app_launch_check(cw))
{
e_mod_comp_win_comp_objs_stack_above(cw, cw2);
- _effect_stage_enable(_cw, cw);
- e_mod_comp_effect_signal_add
- (_cw, NULL,
- "e,state,background,visible,on", "e");
- e_mod_comp_effect_signal_add
- (cw, NULL, "e,state,raise_above,on", "e");
- }
+ if (cw->launched)
+ e_mod_comp_effect_signal_add
+ (cw, NULL, "e,state,raise_above,on", "e"); }
else if (e_mod_comp_policy_app_close_check(_cw))
{
if (cw->c->defer_raise_effect)
else
e_mod_comp_win_comp_objs_stack_above(cw, cw2);
- _effect_stage_enable(cw, _cw);
- e_mod_comp_effect_signal_add
- (_cw, NULL, "e,state,raise_above,off", "e");
- e_mod_comp_effect_signal_add
- (cw, NULL, "e,state,background,visible,off", "e");
+ e_mod_comp_effect_mirror_handler_hide(cw, _cw);
}
else
{
e_mod_comp_effect_win_lower(E_Comp_Win *cw,
E_Comp_Win *cw2)
{
- Eina_Bool close = EINA_FALSE;
E_CHECK(cw);
E_CHECK(cw2);
cw->defer_raise = EINA_TRUE;
- close = e_mod_comp_policy_app_close_check(cw);
- if (close)
+ if (e_mod_comp_policy_app_close_check(cw))
+ e_mod_comp_effect_signal_add
+ (cw, NULL, "e,state,raise_above,off", "e");
+}
+
+EINTERN void
+e_mod_comp_effect_mirror_handler_hide(E_Comp_Win *cw,
+ E_Comp_Win *cw2)
+{
+ E_Manager_Comp_Source *src = NULL;
+ E_Comp_Object *co;
+ E_Comp *c;
+ Eina_Bool res;
+ Eina_Inlist *l;
+
+ E_CHECK(cw);
+ E_CHECK(cw2);
+
+ c = cw->c;
+ E_CHECK(c);
+ E_CHECK(c->mirror_handler);
+
+ src = e_manager_comp_src_get(c->man, cw2->win);
+ c->mirror_obj = e_manager_comp_src_image_mirror_add(c->man, src);
+
+ res = edje_object_part_swallow(c->mirror_handler, "e.swallow.content", c->mirror_obj);
+ E_CHECK(res);
+
+ evas_object_show(c->mirror_obj);
+ evas_object_show(c->mirror_handler);
+
+ EINA_LIST_FOREACH(cw->objs, l, co)
{
- _effect_stage_enable(cw2, cw);
- e_mod_comp_effect_signal_add
- (cw2, NULL, "e,state,background,visible,off", "e");
+ if (!co) continue;
+ if (!co->shadow) continue ;
+ evas_object_stack_above(c->mirror_handler, co->shadow);
}
- e_mod_comp_effect_signal_add
- (cw, NULL, "e,state,raise_above,off", "e");
+ e_mod_comp_effect_signal_add
+ (NULL, c->mirror_handler, "e,state,mirror,visible,off", "e");
+
}
+
EINTERN void
e_mod_comp_effect_disable_stage(E_Comp *c,
E_Comp_Win *cw)
}
}
-#define _CHECK(c, s, e) { \
- if (!strncmp(s, e, strlen(s))) \
- { \
- L(LT_EFFECT, \
- "[COMP] %18.18s w:0x%08x %s\n", \
- "SIGNAL", \
- e_mod_comp_util_client_xid_get(c), \
- e); \
- } \
+#define _CHECK(c, s, e) { \
+ if (!strncmp(s, e, strlen(s))) \
+ { \
+ ELBF(ELBT_COMP, 0, \
+ e_mod_comp_util_client_xid_get(c), \
+ "%15.15s|%s", "SIGNAL", e); \
+ } \
}
EINTERN Eina_Bool
_CHECK(cw, "e,state,visible,off,custom0,180",emission);
_CHECK(cw, "e,state,visible,off,custom0,270",emission);
_CHECK(cw, "e,state,visible,off,custom1", emission);
- _CHECK(cw, "e,state,background,visible,on", emission);
- _CHECK(cw, "e,state,background,visible,off", emission);
_CHECK(cw, "e,state,raise_above,off", emission);
_CHECK(cw, "e,state,raise_above_post,on", emission);
_CHECK(cw, "e,state,switcher_top,on", emission);
return E_COMP_EFFECT_STYLE_NONE;
}
-static void
-_bg_show(E_Comp_Win *cw)
-{
- E_Comp_Win *bg_cw = NULL;
- bg_cw = e_mod_comp_util_win_below_get(cw, 0);
- E_CHECK(bg_cw);
-
- _effect_stage_enable(cw, bg_cw);
- e_mod_comp_effect_signal_add
- (bg_cw, NULL,
- "e,state,background,visible,on", "e");
-}
-
-static void
-_bg_hide(E_Comp_Win *cw)
-{
- E_Comp_Win *bg_cw = NULL;
- bg_cw = e_mod_comp_util_win_below_get(cw, 0);
- E_CHECK(bg_cw);
-
- _effect_stage_enable(cw, bg_cw);
- e_mod_comp_effect_signal_add
- (bg_cw, NULL,
- "e,state,background,visible,off", "e");
-}
-
-static void
-_effect_stage_enable(E_Comp_Win *cw,
- E_Comp_Win *cw2)
-{
- E_Comp_Win *_cw = cw;
- Eina_Inlist *l;
- E_Comp_Canvas *canvas;
- Eina_List *ll;
- E_Comp_Object *co;
- Eina_Bool visible = 0;
- E_CHECK(cw);
- E_CHECK(cw2);
-
- // do hide window which is not related window animation effect.
- while ((l = EINA_INLIST_GET(_cw)->prev) != NULL)
- {
- visible = 0;
- _cw = _EINA_INLIST_CONTAINER(_cw, l);
- E_CHECK(_cw);
- if ((_cw->invalid) || (_cw->input_only) ||
- (_cw->win == cw->win) ||
- (_cw->win == cw2->win) ||
- TYPE_INDICATOR_CHECK(_cw))
- {
- continue;
- }
-
- EINA_LIST_FOREACH(_cw->objs, ll, co)
- {
- if (!co) continue;
- if (evas_object_visible_get(co->shadow))
- {
- visible = 1;
- break;
- }
- }
- if (!visible) continue;
-
- _cw->animate_hide = EINA_TRUE;
-
- EINA_LIST_FOREACH(_cw->objs, ll, co)
- {
- if (!co) continue;
- evas_object_hide(co->shadow);
- }
- }
-
- EINA_LIST_FOREACH(cw->c->canvases, ll, canvas)
- {
- if (!canvas) continue;
- if (canvas->use_bg_img) continue;
- evas_object_lower(canvas->bg_img);
- }
-
- EINA_LIST_FOREACH(cw->objs, ll, co)
- {
- if (!co) continue;
- if (!cw->hidden_override && cw->show_done)
- evas_object_show(co->shadow);
- }
- EINA_LIST_FOREACH(cw2->objs, ll, co)
- {
- if (!co) continue;
- if (!cw2->hidden_override && cw2->show_done)
- evas_object_show(co->shadow);
- }
-
- cw->animate_hide = EINA_FALSE;
- cw2->animate_hide = EINA_FALSE;
- cw->effect_stage = EINA_TRUE;
- cw->c->effect_stage = EINA_TRUE;
-}
-
static Eina_Bool
_state_send(E_Comp_Win *cw,
Eina_Bool state)
EINTERN Eina_Bool e_mod_comp_effect_win_hide(E_Comp_Win *cw);
EINTERN void e_mod_comp_effect_win_restack(E_Comp_Win *cw, E_Comp_Win *cw2);
EINTERN void e_mod_comp_effect_win_lower(E_Comp_Win *cw, E_Comp_Win *cw2);
+EINTERN void e_mod_comp_effect_mirror_handler_hide(E_Comp_Win *cw, E_Comp_Win *cw2);
EINTERN void e_mod_comp_effect_disable_stage(E_Comp *c, E_Comp_Win *cw);
EINTERN Eina_Bool e_mod_comp_effect_signal_add(E_Comp_Win *cw, Evas_Object *o, const char *emission, const char *src);
EINTERN Eina_Bool e_mod_comp_effect_signal_del(E_Comp_Win *cw, Evas_Object *obj, const char *name);
static void _show_done(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _hide_done(void *data, Evas_Object *obj, const char *emission, const char *source);
static Eina_Bool _launch_timeout(void *data);
-static void _invisible_win_hide(E_Comp_Win *cw, Eina_Bool show);
-static E_Comp_Win *_bg_win_get(void);
static E_Comp_Win *_appinapp_bottom_win_get(E_Comp_Win *normal_top);
/* local subsystem globals */
E_CHECK_GOTO(res, error);
}
- // background hide effect
- if(c->animatable)
- {
- bg_cw = _bg_win_get();
- if (bg_cw)
- {
- _invisible_win_hide(bg_cw, EINA_TRUE);
- }
- }
-
// set position of fake launch image
if (eff->layer_obj)
{
e_mod_comp_effect_image_launch_hide(E_Comp_Effect_Image_Launch *eff)
{
E_Comp *c = e_mod_comp_util_get();
- E_Comp_Win *bg_cw = NULL;
E_CHECK_RETURN(c, 0);
E_CHECK_RETURN(eff, 0);
ecore_timer_del(eff->timeout);
eff->timeout = NULL;
- // background hide effect
- if(c->animatable)
- {
- bg_cw = _bg_win_get();
- if (bg_cw)
- {
- _invisible_win_hide(bg_cw, EINA_FALSE);
- }
- }
-
if (c->animatable)
{
switch (eff->rot)
return _cw;
}
-
-static E_Comp_Win *
-_bg_win_get(void)
-{
- E_Comp *c = e_mod_comp_util_get();
- E_Comp_Win *cw = NULL;
- E_CHECK_RETURN(c, 0);
-
- EINA_INLIST_REVERSE_FOREACH(c->wins, cw)
- {
- if ((cw->visible) &&
- (REGION_EQUAL_TO_ROOT(cw)) &&
- (!cw->invalid) && (!cw->input_only) &&
- (TYPE_NORMAL_CHECK(cw)))
- {
- return cw;
- }
- if(TYPE_HOME_CHECK(cw))
- return cw;
- }
- return NULL;
-}
-
-
static void
_show_done(void *data,
Evas_Object *obj __UNUSED__,
{
E_Comp_Effect_Image_Launch *eff;
E_Comp *c = e_mod_comp_util_get();
- E_Comp_Win *bg_cw = NULL;
eff = (E_Comp_Effect_Image_Launch *)data;
E_CHECK_RETURN(c, 0);
eff->win = 0;
eff->fake_image_show_done = EINA_FALSE;
- // background hide effect
- bg_cw = _bg_win_get();
- if (bg_cw)
- {
- _invisible_win_hide(bg_cw, EINA_FALSE);
- }
-
if (c->animatable)
{
switch (eff->rot)
return EINA_FALSE;
}
-
-static void
-_invisible_win_hide(E_Comp_Win *cw,
- Eina_Bool show)
-{
- E_Comp *c = e_mod_comp_util_get();
- Eina_List *ll;
- E_Comp_Object *co;
- Eina_Bool visible = 0;
- E_Comp_Canvas *canvas;
- E_Comp_Win *_cw = cw;
- Eina_Inlist *l;
-
- E_CHECK(cw);
- E_CHECK(c);
-
- while ((l = EINA_INLIST_GET(_cw)->prev) != NULL)
- {
- visible = 0;
- _cw = _EINA_INLIST_CONTAINER(_cw, l);
- E_CHECK(_cw);
- if ((!_cw) ||
- (_cw->invalid) ||
- (_cw->input_only) ||
- (_cw->win == cw->win) ||
- TYPE_INDICATOR_CHECK(_cw))
- {
- continue;
- }
-
- EINA_LIST_FOREACH(_cw->objs, ll, co)
- {
- if (!co) continue;
- if (evas_object_visible_get(co->shadow))
- {
- visible = 1;
- break;
- }
- }
- if (!visible) continue;
-
- // do hide window which is not related window animation effect.
- _cw->animate_hide = EINA_TRUE;
- EINA_LIST_FOREACH(_cw->objs, ll, co)
- {
- if (!co) continue;
- evas_object_hide(co->shadow);
- }
- }
-
- EINA_LIST_FOREACH(cw->c->canvases, ll, canvas)
- {
- if (!canvas) continue;
- if (canvas->use_bg_img) continue;
- evas_object_lower(canvas->bg_img);
- }
-
- EINA_LIST_FOREACH(cw->objs, ll, co)
- {
- if (!co) continue;
- if (!cw->hidden_override && cw->show_done)
- evas_object_show(co->shadow);
- }
-
- cw->animate_hide = EINA_FALSE;
- cw->c->effect_stage = EINA_TRUE;
-
- if (show)
- {
- if (c->animatable)
- e_mod_comp_effect_signal_add
- (cw, NULL,
- "e,state,background,visible,on", "e");
- else
- e_mod_comp_effect_signal_add
- (cw, NULL,
- "e,state,background,visible,on,noeffect", "e");
- }
- else
- {
- if (c->animatable)
- e_mod_comp_effect_signal_add
- (cw, NULL,
- "e,state,background,visible,off", "e");
- else
- e_mod_comp_effect_signal_add
- (cw, NULL,
- "e,state,background,visible,off,noeffect", "e");
- }
-}
+++ /dev/null
-#include "e_mod_comp_shared_types.h"
-#include "e_mod_comp.h"
-#include "e_mod_comp_debug.h"
-#include "e_mod_comp_effect_screen_capture.h"
-
-struct _E_Comp_Effect_Screen_Capture
-{
- Evas_Object *obj;
- struct {
- int x, y, w, h;
- } geom;
-};
-
-/* local subsystem functions */
-static void _show_done(void *data, Evas_Object *obj, const char *emission, const char *source);
-
-/* screen capture effect functions */
-EINTERN E_Comp_Effect_Screen_Capture *
-e_mod_comp_effect_screen_capture_new(Evas *evas,
- int w, int h)
-{
- E_Comp_Effect_Screen_Capture *cap;
- int ok;
-
- E_CHECK_RETURN(evas, 0);
- E_CHECK_RETURN((w <= 0), 0);
- E_CHECK_RETURN((h <= 0), 0);
- E_CHECK_RETURN(_comp_mod, 0);
- E_CHECK_RETURN(_comp_mod->conf, 0);
-
- cap = E_NEW(E_Comp_Effect_Screen_Capture, 1);
- E_CHECK_RETURN(cap, 0);
-
- cap->geom.x = 0;
- cap->geom.y = 0;
- cap->geom.w = w;
- cap->geom.h = h;
-
- cap->obj = edje_object_add(evas);
- E_CHECK_GOTO(cap->obj, error);
-
- ok = edje_object_file_set(cap->obj,
- _comp_mod->conf->shadow_file,
- "capture_effect");
- E_CHECK_GOTO(ok, error);
-
- evas_object_move(cap->obj, 0, 0);
- evas_object_resize(cap->obj, w, h);
-
- edje_object_signal_callback_add
- (cap->obj, "img,capture,show,done", "img", _show_done, cap);
-
- return cap;
-
-error:
- if (cap)
- {
- if (cap->obj)
- {
- e_mod_comp_debug_edje_error_get(cap->obj, 0);
- evas_object_del(cap->obj);
- cap->obj = NULL;
- }
- E_FREE(cap);
- }
- return NULL;
-}
-
-EINTERN void
-e_mod_comp_effect_screen_capture_free(E_Comp_Effect_Screen_Capture *cap)
-{
- E_CHECK(cap);
- if (evas_object_visible_get(cap->obj))
- evas_object_hide(cap->obj);
- E_FREE(cap);
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_screen_capture_handler_message(Ecore_X_Event_Client_Message *ev)
-{
- E_Comp *c;
- Evas_Object *o;
- E_CHECK_RETURN(ev, 0);
-
- c = e_mod_comp_find(ev->win);
- E_CHECK_RETURN(c, 0);
- E_CHECK_RETURN(c->animatable, 0);
- E_CHECK_RETURN(c->eff_cap, 0);
-
- o = c->eff_cap->obj;
- E_CHECK_RETURN(o, 0);
-
- evas_object_show(o);
- evas_object_raise(o);
- e_mod_comp_effect_signal_add
- (NULL, o, "img,state,capture,on", "img");
-
- return EINA_TRUE;
-}
-
-/* local subsystem functions */
-static void
-_show_done(void *data,
- Evas_Object *obj __UNUSED__,
- const char *emission __UNUSED__,
- const char *source __UNUSED__)
-{
- E_Comp_Effect_Screen_Capture *cap;
- cap = (E_Comp_Effect_Screen_Capture *)data;
- E_CHECK(cap);
-
- e_mod_comp_effect_animating_set(NULL, NULL, EINA_FALSE);
-
- if (evas_object_visible_get(cap->obj))
- evas_object_hide(cap->obj);
-}
+++ /dev/null
-#ifdef E_TYPEDEFS
-#else
-#ifndef E_MOD_COMP_EFFECT_SCREEN_CAPTURE_H
-#define E_MOD_COMP_EFFECT_SCREEN_CAPTURE_H
-
-typedef struct _E_Comp_Effect_Screen_Capture E_Comp_Effect_Screen_Capture;
-
-/* screen capture effect functions */
-EINTERN E_Comp_Effect_Screen_Capture *e_mod_comp_effect_screen_capture_new(Evas *evas, int w, int h);
-EINTERN void e_mod_comp_effect_screen_capture_free(E_Comp_Effect_Screen_Capture *cap);
-EINTERN Eina_Bool e_mod_comp_effect_screen_capture_handler_message(Ecore_X_Event_Client_Message *ev);
-
-#endif
-#endif
+++ /dev/null
-#include "e_mod_comp_shared_types.h"
-#include "e_mod_comp.h"
-#include "e_mod_comp_debug.h"
-#include "e_mod_comp_effect_tm.h"
-
-/* local subsystem functions */
-static void _defer_raise_clear(void);
-static Eina_Bool _valid_win_check(E_Comp_Win *cw);
-static Eina_Bool _win_size_check(E_Comp_Win *cw);
-static Eina_Bool _win_bg_item_init(E_Comp *c);
-
-/* local subsystem globals */
-
-/* externally accessible functions */
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_bg_show(E_Comp_Win *cw)
-{
- E_Comp_Win *_cw;
- E_Comp_Object *co;
- int i = 0, _x = 0;
-
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw->c, 0);
- E_CHECK_RETURN(cw->c->animatable, 0);
-
- _defer_raise_clear();
- e_mod_comp_animation_transfer_list_clear();
- cw->c->switcher_animating = EINA_TRUE;
- cw->c->selected_pos = 0;
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s\n", "EFF",
- e_mod_comp_util_client_xid_get(cw), "BG_SHOW_TM");
-
- EINA_INLIST_REVERSE_FOREACH(cw->c->wins, _cw)
- {
- if (!_cw) continue;
- if (!_win_size_check(_cw)) continue;
- if (!_valid_win_check(_cw)) continue;
-
- i++;
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s [%d]\n", "EFF",
- e_mod_comp_util_client_xid_get(_cw), "BG_SHOW_TM", i);
-
- // move all windows to each stack position
- _x = (i + 1) * (-WINDOW_SPACE) + (_cw->c->man->w);
- co = eina_list_data_get(cw->objs);
- if (!co) continue;
- evas_object_move(co->shadow, _x, 0);
-
- if (i == 1)
- {
- // top window
- e_mod_comp_effect_signal_add
- (_cw, NULL, "e,state,switcher_top,on", "e");
- }
- else
- {
- // left of top window
- e_mod_comp_effect_signal_add
- (_cw, NULL, "e,state,switcher,on", "e");
- }
- }
-
- cw->c->switcher = EINA_TRUE;
- cw->c->switcher_obscured = !(e_mod_comp_util_win_visible_get(cw));
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_bg_hide(E_Comp_Win *cw)
-{
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw->c, 0);
- E_CHECK_RETURN(cw->c->animatable, 0);
-
- if (cw->c->switcher_obscured) return EINA_TRUE;
-
- e_mod_comp_animation_transfer_list_clear();
- cw->c->switcher_animating = EINA_TRUE;
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s\n", "EFF",
- e_mod_comp_util_client_xid_get(cw), "BG_HIDE_TM");
-
- _win_bg_item_init(cw->c);
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_state_update(E_Comp *c)
-{
- E_Comp_Win *_cw;
- E_CHECK_RETURN(c->switcher, 0);
- Eina_Bool res = EINA_FALSE;
-
- // if task switcher is open, just set defer_raise
- // and do jump effect in _e_mod_comp_window_hide_effect
- EINA_INLIST_REVERSE_FOREACH(c->wins, _cw)
- {
- if (!_cw) continue;
- if (TYPE_TASKMANAGER_CHECK(_cw))
- {
- // just return without visibility update
- // while task switcher is closing
- if (_cw->defer_hide) break;
- if (_cw->c->switcher_animating) break;
-
- c->switcher_obscured = !(e_mod_comp_util_win_visible_get(_cw));
- res = EINA_TRUE;
- break;
- }
- }
-
- L(LT_EFFECT, "[COMP] %18.18s tm:%d obscured:%d\n",
- "EFF", c->switcher, c->switcher_obscured);
-
- return res;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_raise_above(E_Comp_Win *cw,
- E_Comp_Win *cw2)
-{
- Eina_Bool raise;
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw->c, 0);
-
- cw->defer_raise = EINA_TRUE;
- raise = e_mod_comp_policy_win_restack_check(cw, cw2);
- E_CHECK_RETURN(raise, 0);
-
- cw->c->switcher_animating = EINA_TRUE;
-
- e_mod_comp_animation_transfer_list_clear();
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s sel:%d defer_raise:1\n",
- "EFF", e_mod_comp_util_client_xid_get(cw), "RAISE_ABOVE_TM",
- cw->c->selected_pos);
-
- _win_bg_item_init(cw->c);
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_handler_show_done(E_Comp_Win *cw)
-{
- E_CHECK_RETURN(cw, 0);
- E_Comp_Win *_cw;
-
- cw->c->switcher_animating = EINA_FALSE;
-
- EINA_INLIST_REVERSE_FOREACH(cw->c->wins, _cw)
- {
- if (!_cw) continue;
- if (!_cw->visible) continue;
- e_mod_comp_win_comp_objs_move(_cw, _cw->x, _cw->y);
- e_mod_comp_win_comp_objs_resize(_cw,
- _cw->pw + (_cw->border * 2),
- _cw->ph + (_cw->border * 2));
- _cw->defer_move_resize = EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_handler_hide_done(E_Comp_Win *cw)
-{
- E_CHECK_RETURN(cw, 0);
- E_Comp_Win *_cw;
- if (cw->c->selected_pos > 0) cw->c->selected_pos = 0;
-
- // task switcher is closed
- cw->c->switcher = EINA_FALSE;
- cw->c->switcher_obscured = EINA_TRUE;
- cw->c->switcher_animating = EINA_FALSE;
-
- EINA_INLIST_FOREACH(cw->c->wins, _cw)
- {
- if (!_cw) continue;
- if (!_cw->visible) continue;
- if (!_cw->defer_move_resize) continue;
- e_mod_comp_win_comp_objs_move(_cw, _cw->x, _cw->y);
- e_mod_comp_win_comp_objs_resize(_cw,
- _cw->pw + (_cw->border * 2),
- _cw->ph + (_cw->border * 2));
- _cw->defer_move_resize = EINA_FALSE;
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s\n", "EFF",
- e_mod_comp_util_client_xid_get(_cw), "HIDE_DONE_BG_ITEM");
- }
-
- _defer_raise_clear();
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_comp_effect_tm_handler_raise_above_pre(E_Comp_Win *cw,
- E_Comp_Win *cw2)
-{
- E_CHECK_RETURN(cw, 0);
- int i = 0;
- E_Comp_Win *_cw;
-
- E_CHECK_RETURN(cw, 0);
- E_CHECK_RETURN(cw->c, 0);
- E_CHECK_RETURN(cw->c->man, 0);
- E_CHECK_RETURN(cw->c->switcher, 0);
-
- e_mod_comp_effect_tm_state_update(cw->c);
- E_CHECK_RETURN((!cw->c->switcher_obscured), 0);
-
- EINA_INLIST_REVERSE_FOREACH(cw->c->wins, _cw)
- {
- if ((_cw->visible) &&
- (!TYPE_INDICATOR_CHECK(cw)) &&
- (!TYPE_TASKMANAGER_CHECK(cw)) &&
- SIZE_EQUAL_TO_ROOT(_cw))
- {
- i++;
- if (_cw == cw)
- {
- cw->c->selected_pos = i;
- break;
- }
- }
- }
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x sel:%d\n", "EFF",
- e_mod_comp_util_client_xid_get(cw), cw->c->selected_pos);
-
- cw->c->wins_invalid = 1;
- cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw));
- cw->c->wins = eina_inlist_append_relative(cw->c->wins,
- EINA_INLIST_GET(cw),
- EINA_INLIST_GET(cw2));
- return EINA_TRUE;
-}
-
-/* local subsystem functions */
-static void
-_defer_raise_clear(void)
-{
- E_Comp *c = e_mod_comp_util_get();
- E_Comp_Win *cw;
- E_CHECK(c);
-
- EINA_INLIST_FOREACH(c->wins, cw)
- {
- if (!cw) continue;
- if (cw->defer_raise)
- {
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s\n",
- "EFF", e_mod_comp_util_client_xid_get(cw),
- "TM_DEFER_RAISE_CLEAR");
- e_mod_comp_done_defer(cw);
- }
- }
- e_mod_comp_effect_disable_stage(c, NULL);
-}
-
-static Eina_Bool
-_valid_win_check(E_Comp_Win *cw)
-{
- E_Comp_Object *co = eina_list_data_get(cw->objs);
- E_CHECK_RETURN(co, 0);
- if (cw->visible &&
- evas_object_visible_get(co->shadow) &&
- evas_object_visible_get(co->img) &&
- !(TYPE_INDICATOR_CHECK(cw)) &&
- !(TYPE_QUICKPANEL_CHECK(cw)) &&
- !(TYPE_TASKMANAGER_CHECK(cw)) &&
- !(STATE_INSET_CHECK(cw)))
- {
- return EINA_TRUE;
- }
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_win_size_check(E_Comp_Win *cw)
-{
- if (SIZE_EQUAL_TO_ROOT(cw))
- return EINA_TRUE;
-
- if (!TYPE_NORMAL_CHECK(cw))
- return EINA_FALSE;
-
- cw->animate_hide = EINA_TRUE;
- e_mod_comp_win_comp_objs_hide(cw);
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_win_bg_item_init(E_Comp *c)
-{
- E_Comp_Win *_cw;
- E_Comp_Transfer *tr;
- E_Comp_Object *co;
- int i = 0;
-
- EINA_INLIST_REVERSE_FOREACH(c->wins, _cw)
- {
- if (!_cw) continue;
- if (!_win_size_check(_cw)) continue;
- if (!_valid_win_check(_cw)) continue;
-
- i++;
-
- L(LT_EFFECT, "[COMP] %18.18s w:0x%08x %s [%d/%d]\n", "EFF",
- e_mod_comp_util_client_xid_get(_cw), "ADD_TM_BG_ITEM",
- i, c->selected_pos);
-
- e_mod_comp_effect_animating_set(c, _cw, EINA_TRUE);
-
- tr = e_mod_comp_animation_transfer_new();
- E_CHECK_GOTO(tr, error);
-
- _cw->transfer = tr;
- co = eina_list_data_get(_cw->objs);
- if (!co) continue;
- tr->obj = co->shadow;
-
- if ((c->selected_pos == 0) ||
- (c->selected_pos == 1))
- {
- // if window is not selected, skip translation stage
- // and do rotation stage
- tr->from = i * (- WINDOW_SPACE) + (c->man->w -100);
- tr->duration = SWITCHER_DURATION_TOP;
- tr->begin_time = ecore_loop_time_get();
- if (i == 1)
- {
- // top window
- tr->len = -(tr->from);
- tr->animator = ecore_animator_add
- (e_mod_comp_animation_on_rotate_top, _cw);
- }
- else
- {
- // left of top window
- tr->len = 0;
- tr->animator = ecore_animator_add
- (e_mod_comp_animation_on_rotate_left, _cw);
- }
- }
- else
- {
- // if certain window is selected, do translation stage
- // and rotation stage
- tr->len = (c->selected_pos - 1) * WINDOW_SPACE;
- tr->begin_time = ecore_loop_time_get();
- tr->duration = SWITCHER_DURATION_TRANSLATE;
- tr->animator = ecore_animator_add(e_mod_comp_animation_on_translate, _cw);
- if (i == 1)
- {
- // top window
- tr->selected = EINA_TRUE;
- tr->from = c->selected_pos * (-WINDOW_SPACE) + (c->man->w -100);
- }
- else
- {
- // left of top window
- // if left of top window is selected,
- // other windows's position is adjusted
- if (c->selected_pos >= i)
- tr->from = (i-1) * (-WINDOW_SPACE) + (c->man->w -100);
- else
- tr->from = i * (-WINDOW_SPACE) + (c->man->w -100);
- }
- }
- }
-
- return EINA_TRUE;
-
-error:
- e_mod_comp_animation_transfer_list_clear();
- return EINA_FALSE;
-}
+++ /dev/null
-#ifdef E_TYPEDEFS
-#else
-#ifndef E_MOD_COMP_EFFECT_TM_H
-#define E_MOD_COMP_EFFECT_TM_H
-
-/* effect functions for taskmanager */
-EINTERN Eina_Bool e_mod_comp_effect_tm_bg_show(E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_effect_tm_bg_hide(E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_effect_tm_state_update(E_Comp *c);
-EINTERN Eina_Bool e_mod_comp_effect_tm_raise_above(E_Comp_Win *cw, E_Comp_Win *cw2);
-EINTERN Eina_Bool e_mod_comp_effect_tm_handler_show_done(E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_effect_tm_handler_hide_done(E_Comp_Win *cw);
-EINTERN Eina_Bool e_mod_comp_effect_tm_handler_raise_above_pre(E_Comp_Win *cw, E_Comp_Win *cw2);
-
-#endif
-#endif
{
Eina_Bool ready : 1;
Eina_Bool run : 1;
- Ecore_Timer *timeout;
struct {
int req;
int cur;
/* local subsystem functions */
static Eina_Bool _win_rotation_begin(E_Comp_Win *cw, Eina_Bool timeout);
static void _win_rotation_done(void *data, Evas_Object *obj, const char *emission, const char *source);
-static Eina_Bool _angle_get(Ecore_X_Window win, int *req, int *curr);
-static Eina_Bool _begin_timeout(void *data);
-static Eina_Bool _end_timeout(void *data);
+static Eina_Bool _angle_get(E_Comp_Win *cw, int *req, int *curr);
/* externally accessible functions */
EINTERN E_Comp_Effect_Win_Rotation *
e_mod_comp_effect_win_rotation_free(E_Comp_Effect_Win_Rotation *r)
{
E_CHECK(r);
- if (r->timeout) ecore_timer_del(r->timeout);
- r->timeout = NULL;
E_FREE(r);
}
int req_angle = -1;
int cur_angle = -1;
Eina_Bool res, effect;
- Ecore_X_Sync_Counter counter;
Ecore_X_Window win;
E_Comp_Effect_Win_Rotation *r;
+ E_Comp_Canvas *canvas = NULL;
+ Eina_List *l;
E_CHECK_RETURN(ev, 0);
E_CHECK_RETURN(ev->win, 0);
return EINA_FALSE;
}
- res = _angle_get(win, &req_angle, &cur_angle);
+ res = _angle_get(cw, &req_angle, &cur_angle);
if (!res) return EINA_FALSE;
cw->angle = req_angle;
r->ready = EINA_TRUE;
r->ang.req = req_angle;
r->ang.cur = cur_angle;
- if (r->timeout) ecore_timer_del(r->timeout);
- r->timeout = ecore_timer_add(4.0f, _begin_timeout, cw);
+
+ if (_comp_mod->conf->nocomp_fs)
+ {
+ EINA_LIST_FOREACH(cw->c->canvases, l, canvas)
+ {
+ if (canvas->nocomp.mode != E_NOCOMP_MODE_RUN) continue;
+ if ((cw->nocomp) && (cw == canvas->nocomp.cw))
+ {
+ L(LT_EVENT_X,
+ "COMP|%31s|new_w:0x%08x|nocomp.cw:0x%08x canvas:%d\n",
+ "ROTATION_HANDLER NOCOMP_END",
+ cw ? e_mod_comp_util_client_xid_get(cw) : 0,
+ e_mod_comp_util_client_xid_get(canvas->nocomp.cw),
+ canvas->num);
+ e_mod_comp_canvas_nocomp_end(canvas);
+ }
+ }
+ }
L(LT_EVENT_X, "COMP|%31s|%d\n",
"ready", r->ready);
{
E_CHECK_RETURN(cw, 0);
E_CHECK_RETURN(cw->eff_winrot, 0);
+ if (e_mod_comp_effect_win_roation_run_check(cw->eff_winrot))
+ _win_rotation_done(cw, NULL, NULL, NULL);
e_mod_comp_effect_win_rotation_free(cw->eff_winrot);
cw->eff_winrot = NULL;
return EINA_TRUE;
"COMP|%31s|timeout:%d\n",
"win_rot_begin", timeout);
- if (r->timeout)
- {
- ecore_timer_del(r->timeout);
- r->timeout = NULL;
- }
-
- switch (r->ang.req - r->ang.cur)
+ switch (r->ang.cur - r->ang.req)
{
case -270: e_mod_comp_effect_signal_add(cw, NULL, "e,state,window,rotation,90", "e"); break;
case -180: e_mod_comp_effect_signal_add(cw, NULL, "e,state,window,rotation,180", "e"); break;
}
}
- r->timeout = ecore_timer_add(4.0f, _end_timeout, cw);
return EINA_TRUE;
}
E_CHECK(cw->eff_winrot);
r = cw->eff_winrot;
- if (r->timeout)
- {
- ecore_timer_del(r->timeout);
- r->timeout = NULL;
- }
if (!cw->show_done) cw->show_done = EINA_TRUE;
}
static Eina_Bool
-_angle_get(Ecore_X_Window win,
+_angle_get(E_Comp_Win *cw,
int *req,
int *curr)
{
- Eina_Bool res = EINA_FALSE;
- int ret, count;
- int angle[2] = {-1, -1};
- unsigned char* data = NULL;
-
- E_CHECK_RETURN(win, 0);
+ E_CHECK_RETURN(cw, 0);
+ E_CHECK_RETURN(cw->bd, 0);
E_CHECK_RETURN(req, 0);
E_CHECK_RETURN(curr, 0);
- ret = ecore_x_window_prop_property_get
- (win, ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
- ECORE_X_ATOM_CARDINAL, 32, &data, &count);
- if (ret <= 0)
- {
- if (data) E_FREE(data);
- return res;
- }
-
- if (ret && data)
- {
- memcpy(&angle, data, sizeof (int)*count);
- if (count == 2) res = EINA_TRUE;
- }
-
- if (data) E_FREE(data);
-
- *req = angle[_WND_REQUEST_ANGLE_IDX];
- *curr = angle[_WND_CURR_ANGLE_IDX];
-
- if (angle[0] == -1 &&
- angle[1] == -1)
- {
- res = EINA_FALSE;
- }
+ *req = cw->bd->client.e.state.rot.prev;
+ *curr = cw->bd->client.e.state.rot.curr;
L(LT_EVENT_X,
- "COMP|%31s|%d=>%d count:%d res:%s\n",
+ "COMP|%31s|w:0x%08x|%d=>%d\n",
"rot_prop_get",
- angle[_WND_CURR_ANGLE_IDX],
- angle[_WND_REQUEST_ANGLE_IDX],
- count, res ? "Ture" : "False");
-
- return res;
-}
-
-static Eina_Bool
-_begin_timeout(void *data)
-{
- E_Comp_Win *cw = (E_Comp_Win*)data;
- E_CHECK_RETURN(cw, 0);
- fprintf(stderr, "[E17-comp] %s(%d) w:0x%08x\n",
- __func__, __LINE__,
- e_mod_comp_util_client_xid_get(cw));
- _win_rotation_begin(cw, EINA_TRUE);
- return ECORE_CALLBACK_CANCEL;
-}
+ e_mod_comp_util_client_xid_get(cw),
+ *req,
+ *curr);
-static Eina_Bool
-_end_timeout(void *data)
-{
- E_Comp_Win *cw = (E_Comp_Win*)data;
- E_CHECK_RETURN(cw, 0);
- fprintf(stderr,"[E17-comp] %s(%d) w:0x%08x\n",
- __func__, __LINE__,
- e_mod_comp_util_client_xid_get(cw));
- _win_rotation_done((void*)cw, NULL, NULL, NULL);
- return ECORE_CALLBACK_CANCEL;
+ return EINA_TRUE;
}
EINTERN Eina_Bool
if (st == E_COMP_EFFECT_STYLE_NONE)
return EINA_FALSE;
- res = _angle_get(win, &req_angle, &cur_angle);
+ res = _angle_get(cw, &req_angle, &cur_angle);
if (!res)
return EINA_FALSE;
- cw->angle = req_angle;
+ cw->angle = cur_angle;
cw->angle %= 360;
return EINA_TRUE;
{
co->shadow = edje_object_add(canvas->evas);
co->img = evas_object_image_filled_add(canvas->evas);
+
+ if ((!co->shadow) || (!co->img))
+ {
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|ERROR shadow:%p img:%p evas:%p argb:%d canvas_num:%d",
+ "OBJECT_CREATE", co->shadow, co->img,
+ canvas->evas, cw->argb, canvas->num);
+ }
+
evas_object_image_colorspace_set(co->img, EVAS_COLORSPACE_ARGB8888);
if (cw->argb) evas_object_image_alpha_set(co->img, 1);
else evas_object_image_alpha_set(co->img, 0);
else
{
co->shadow = evas_object_rectangle_add(canvas->evas);
+
+ if (!co->shadow)
+ {
+ ELBF(ELBT_COMP, 0, e_mod_comp_util_client_xid_get(cw),
+ "%15.15s|ERROR shadow:%p evas:%p canvas_num:%d",
+ "OBJECT_CREATE", co->shadow, canvas->evas,
+ canvas->num);
+ }
+
evas_object_color_set(co->shadow, 0, 0, 0, 0);
}
}
}
}
-}
+}
\ No newline at end of file
{
if (!shadow_hash) shadow_hash = eina_hash_string_superfast_new(NULL);
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_UNKNOWN), "shadow" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DESKTOP), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DOCK), "shadow_fade");
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TOOLBAR), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_MENU), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_UTILITY), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_SPLASH), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DIALOG), "dialog" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_NORMAL), "shadow_fade");
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DROPDOWN_MENU), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_POPUP_MENU), "shadow" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TOOLTIP), "shadow" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_NOTIFICATION), "dialog" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_COMBO), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DND), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_MENUSCREEN), "home_screen");
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_QUICKPANEL_BASE),"quickpanel" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_QUICKPANEL), "quickpanel" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TASKMANAGER), "taskmgr" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_LIVEMAGAZINE), "home_screen");
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_LOCKSCREEN), "lockscreen" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_INDICATOR), "indicator" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TICKERNOTI), "dialog" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DEBUGGING_INFO), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_APPTRAY), "app_tray" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_BACKGROUND), "no-effect" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_KEYBOARD), "keyboard" );
- eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_SUB), "shadow" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_UNKNOWN), "shadow" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DESKTOP), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DOCK), "shadow_fade" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TOOLBAR), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_MENU), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_UTILITY), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_SPLASH), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DIALOG), "dialog" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_NORMAL), "shadow_fade" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DROPDOWN_MENU), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_POPUP_MENU), "shadow" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TOOLTIP), "shadow" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_NOTIFICATION), "dialog" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_COMBO), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DND), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_MENUSCREEN), "home_screen" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_QUICKPANEL_BASE),"quickpanel" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_QUICKPANEL), "quickpanel" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TASKMANAGER), "taskmgr" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_LIVEMAGAZINE), "home_screen" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_LOCKSCREEN), "lockscreen" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_INDICATOR), "indicator" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_TICKERNOTI), "dialog_without_dim");
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_DEBUGGING_INFO), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_APPTRAY), "app_tray" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_MINI_APPTRAY), "app_tray" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_VOLUME), "dialog_without_dim");
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_BACKGROUND), "no-effect" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_KEYBOARD), "keyboard" );
+ eina_hash_add(shadow_hash, e_util_winid_str_get(E_COMP_WIN_TYPE_ISF_SUB), "no-effect" );
return 1;
}
E_CHECK_RETURN(cw->bd, 0);
E_CHECK_RETURN(cw->objs, 0);
- if ((_comp_mod->conf->nocomp_fs) &&
- (cw->c->nocomp))
- {
- return EINA_FALSE;
- }
-
animatable = e_mod_comp_effect_state_get(cw->eff_type);
E_CHECK_RETURN(animatable, 0);
#include "e_mod_comp_canvas.h"
#include "e_mod_comp_object.h"
#include "e_mod_comp_policy.h"
-#include "e_mod_comp_animation.h"
#include "e_mod_comp_effect_win_rotation.h"
-#include "e_mod_comp_effect_tm.h"
#include "e_mod_comp_effect.h"
#include "e_mod_comp_win_type.h"
#include "e_mod_comp_screen.h"
// added for tizen
Eina_Bool animatable : 1; // if this value is true then window can show animaton. otherwise, window can not show animation effect.
- Eina_Bool switcher : 1; // task switcher is open
- Eina_Bool switcher_obscured : 1; //task switcher is obscured
- Eina_Bool switcher_animating : 1; // task switcher effect is running
- int selected_pos; // selected window's position when task switcher is open
Eina_Bool effect_stage : 1;
E_Comp_Screen_Lock lock;
E_Comp_Screen_Rotation rotation;
Eina_Bool keyboard_effect : 1; // True: Compositor Show Keyborad Window Effect / False: Compositor do not show keyboard window effect
Eina_Bool defer_raise_effect : 1; // True : Compositor defer evas object restack on window effect
Eina_Bool fake_image_launch : 1; // True : Enable Fake Image Launch feature
+ E_Comp_Win *lower_win; // For saving window on backkey(lower) event
+
+ // home key effect
+ Evas_Object *mirror_obj; // image(mirror) object
+ Evas_Object *mirror_handler; // shadow(edj) object
// fake image launch
E_Comp_Effect_Image_Launch *eff_img;
Evas *evas;
- E_Comp_Win_Shape_Input *shape_input; // Comp's Global Shape input region
+ Eina_List *shape_inputs;
};
struct _E_Comp_Win
Eina_Bool show_done : 1 ; // check for show is done
Eina_Bool effect_stage: 1; // check for if background window is hided or not.
Eina_Bool defer_raise; // flag to defer to raise
- Eina_Bool defer_move_resize; // flag to defer to move_resize for shobj
E_Comp_Effect_Type *eff_type;
E_Comp_Effect_Win_Rotation *eff_winrot; // image launch effect
E_Comp_Win_Type win_type;
- E_Comp_Transfer *transfer;
E_Comp_Win_Shape_Input *shape_input;
E_Comp_BG_Win *bgwin;
Eina_Bool move_lock : 1; // lock / unlock evas_object's move. evas_object represents window.
int angle; // window's current angle property
+ Eina_Bool launched : 1; //flag for checking whether launch or not
// ov object
Ecore_X_Image *ov_xim;
(!_cw->invalid) &&
(!_cw->input_only) &&
(!TYPE_APPTRAY_CHECK(_cw)) &&
+ (!TYPE_MINI_APPTRAY_CHECK(_cw)) &&
REGION_EQUAL_TO_ROOT(_cw))
{
if (normal_check)
int x, y, w, h;
};
+struct _E_Comp_Shape_Input
+{
+ int id;
+ int x, y, w, h;
+};
+
/* local subsystem functions */
+static int
+_e_mod_comp_shape_input_new_id_get(E_Comp *c)
+{
+ int new_id = 1;
+ E_Comp_Shape_Input *shape_input = NULL;
+ Eina_List *l = NULL;
+ Eina_Bool create_id = EINA_FALSE;
+
+ E_CHECK_RETURN(c, 0);
+
+ while (new_id < INT_MAX)
+ {
+ create_id = EINA_TRUE;
+
+ EINA_LIST_FOREACH(c->shape_inputs, l, shape_input)
+ {
+ if (shape_input->id == new_id)
+ {
+ new_id++;
+ create_id = EINA_FALSE;
+ break;
+ }
+ }
+
+ if (create_id) break;
+ }
+
+ if (create_id) return new_id;
+ else return 0;
+}
/* externally accessible functions */
+EINTERN int
+e_mod_comp_shape_input_new(E_Comp *c)
+{
+ int id = 0;
+ E_Comp_Shape_Input *shape_input;
+ E_CHECK_RETURN(c, 0);
+
+ id = _e_mod_comp_shape_input_new_id_get(c);
+ if (id)
+ {
+ shape_input = E_NEW(E_Comp_Shape_Input, 1);
+ E_CHECK_RETURN(shape_input, 0);
+
+ shape_input->id = id;
+ c->shape_inputs = eina_list_append(c->shape_inputs, shape_input);
+ }
+ return id;
+}
+
+EINTERN Eina_Bool
+e_mod_comp_shape_input_set(E_Comp *c,
+ int id,
+ int x,
+ int y,
+ int w,
+ int h)
+{
+ Eina_Bool found = EINA_FALSE;
+ E_Comp_Shape_Input *shape_input = NULL;
+ Eina_List *l = NULL;
+
+ E_CHECK_RETURN(c, EINA_FALSE);
+ if ( id <= 0 ) return EINA_FALSE;
+
+ EINA_LIST_FOREACH(c->shape_inputs, l, shape_input)
+ {
+ if (shape_input->id == id)
+ {
+ shape_input->x = x;
+ shape_input->y = y;
+ shape_input->w = w;
+ shape_input->h = h;
+ found = EINA_TRUE;
+ break;
+ }
+ }
+
+ return found;
+}
+
+EINTERN Eina_Bool
+e_mod_comp_shape_input_del(E_Comp *c,
+ int id)
+{
+ E_Comp_Shape_Input *shape_input = NULL;
+ E_Comp_Shape_Input *find_shape_input = NULL;
+ Eina_List *l = NULL;
+ Eina_Bool found = EINA_FALSE;
+
+ E_CHECK_RETURN(c, EINA_FALSE);
+ if ( id <= 0 ) return EINA_FALSE;
+
+ EINA_LIST_FOREACH(c->shape_inputs, l, shape_input)
+ {
+ if (shape_input->id == id)
+ {
+ find_shape_input = shape_input;
+ found = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (find_shape_input)
+ {
+ c->shape_inputs = eina_list_remove(c->shape_inputs, find_shape_input);
+ memset(find_shape_input, 0, sizeof(E_Comp_Shape_Input));
+ E_FREE(find_shape_input);
+ }
+
+ return found;
+}
+
EINTERN Eina_Bool
e_mod_comp_win_shape_input_update(E_Comp *c)
{
E_Comp_Win *_cw = NULL;
Eina_List *l = NULL;
E_Comp_Canvas *canvas = NULL;
+ E_Comp_Shape_Input *shape_input = NULL;
pixman_region32_t vis_part;
pixman_region32_t win_part;
pixman_region32_copy(&vis_part, &res_part);
}
- if ((c->shape_input) // comp's global shape input region apply
- && (E_INTERSECTS(0, 0, c->man->w, c->man->h,
- c->shape_input->x, c->shape_input->y,
- c->shape_input->w, c->shape_input->h)))
+ EINA_LIST_FOREACH(c->shape_inputs, l, shape_input)
{
- pixman_region32_init_rect(&comp_input_part,
- c->shape_input->x,
- c->shape_input->y,
- c->shape_input->w,
- c->shape_input->h);
-
- pixman_region32_copy(&res_input_part, &sum_input_part);
- pixman_region32_union(&sum_input_part, &res_input_part, &comp_input_part);
+ if (E_INTERSECTS(0, 0, c->man->w, c->man->h,
+ shape_input->x, shape_input->y,
+ shape_input->w, shape_input->h))
+ {
+ pixman_region32_init_rect(&comp_input_part,
+ shape_input->x,
+ shape_input->y,
+ shape_input->w,
+ shape_input->h);
+
+ pixman_region32_copy(&res_input_part, &sum_input_part);
+ pixman_region32_union(&sum_input_part, &res_input_part, &comp_input_part);
+ }
}
input_rects = pixman_region32_rectangles(&sum_input_part, &num_input_rects);
}
EINTERN E_Comp_Win_Shape_Input *
-e_mod_comp_shape_input_new(void)
-{
- E_Comp_Win_Shape_Input *input;
- input = E_NEW(E_Comp_Win_Shape_Input, 1);
- return input;
-}
-
-EINTERN E_Comp_Win_Shape_Input *
e_mod_comp_win_shape_input_new(E_Comp_Win *cw)
{
Eina_List *l;
evas_object_pass_events_set(co->img, EINA_FALSE);
evas_object_pass_events_set(co->shadow, EINA_FALSE);
}
- return e_mod_comp_shape_input_new();
+
+ return E_NEW(E_Comp_Win_Shape_Input, 1);
}
EINTERN void
#define E_MOD_COMP_WIN_SHAPE_INPUT_H
typedef struct _E_Comp_Win_Shape_Input E_Comp_Win_Shape_Input;
+typedef struct _E_Comp_Shape_Input E_Comp_Shape_Input;
/* shape input region functions */
-EINTERN E_Comp_Win_Shape_Input *e_mod_comp_shape_input_new(void);
EINTERN E_Comp_Win_Shape_Input *e_mod_comp_win_shape_input_new(E_Comp_Win *cw);
EINTERN void e_mod_comp_win_shape_input_free(E_Comp_Win_Shape_Input *input);
EINTERN Eina_Bool e_mod_comp_win_shape_input_rect_set(E_Comp_Win_Shape_Input *input, int x, int y, int w, int h);
EINTERN Eina_Bool e_mod_comp_win_shape_input_invalid_set(E_Comp *c, Eina_Bool set);
EINTERN Eina_Bool e_mod_comp_win_shape_input_update(E_Comp *c);
-
+EINTERN int e_mod_comp_shape_input_new(E_Comp *c);
+EINTERN Eina_Bool e_mod_comp_shape_input_set(E_Comp *c, int id, int x, int y, int w, int h);
+EINTERN Eina_Bool e_mod_comp_shape_input_del(E_Comp *c, int id);
#endif
#endif
E_COMP_WIN_CLASS_TYPE_TICKERNOTI,
E_COMP_WIN_CLASS_TYPE_DEBUGGING_INFO,
E_COMP_WIN_CLASS_TYPE_APPTRAY,
+ E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
+ E_COMP_WIN_CLASS_TYPE_VOLUME,
E_COMP_WIN_CLASS_TYPE_BACKGROUND,
E_COMP_WIN_CLASS_TYPE_ISF,
} E_Comp_Win_Class_Type;
E_COMP_WIN_NAME_TYPE_INDICATOR,
E_COMP_WIN_NAME_TYPE_TICKERNOTI,
E_COMP_WIN_NAME_TYPE_APPTRAY,
+ E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
+ E_COMP_WIN_NAME_TYPE_VOLUME,
E_COMP_WIN_NAME_TYPE_BACKGROUND,
E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
E_COMP_WIN_NAME_TYPE_ISF_SUB,
"TASK_MANAGER",
"LIVE_MAGAZINE",
"LOCK_SCREEN",
+ "lockscreen",
"INDICATOR",
- "tickernoti-syspopup",
+ "quickpanel",
"DEBUGGING_INFO",
"APP_TRAY",
+ "MINIAPP_TRAY",
+ "volume",
"BACKGROUND",
"ISF",
};
"TASK_MANAGER",
"Live Magazine",
"LOCK_SCREEN",
+ "lockscreen",
"INDICATOR",
- "noti-window",
+ "noti_win",
"APP_TRAY",
+ "MINIAPP_TRAY",
+ "volume",
"BACKGROUND",
// E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD
"Virtual Keyboard",
E_COMP_WIN_CLASS_TYPE_TASKMANAGER,
E_COMP_WIN_CLASS_TYPE_LIVEMAGAZINE,
E_COMP_WIN_CLASS_TYPE_LOCKSCREEN,
+ E_COMP_WIN_CLASS_TYPE_LOCKSCREEN,
E_COMP_WIN_CLASS_TYPE_INDICATOR,
E_COMP_WIN_CLASS_TYPE_TICKERNOTI,
E_COMP_WIN_CLASS_TYPE_DEBUGGING_INFO,
E_COMP_WIN_CLASS_TYPE_APPTRAY,
+ E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
+ E_COMP_WIN_CLASS_TYPE_VOLUME,
E_COMP_WIN_CLASS_TYPE_BACKGROUND,
E_COMP_WIN_CLASS_TYPE_ISF
};
E_COMP_WIN_NAME_TYPE_TASKMANAGER,
E_COMP_WIN_NAME_TYPE_LIVEMAGAZINE,
E_COMP_WIN_NAME_TYPE_LOCKSCREEN,
+ E_COMP_WIN_NAME_TYPE_LOCKSCREEN,
E_COMP_WIN_NAME_TYPE_INDICATOR,
E_COMP_WIN_NAME_TYPE_TICKERNOTI,
E_COMP_WIN_NAME_TYPE_APPTRAY,
+ E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
+ E_COMP_WIN_NAME_TYPE_VOLUME,
E_COMP_WIN_NAME_TYPE_BACKGROUND,
E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
E_COMP_WIN_NAME_TYPE_ISF_SUB
res = E_COMP_WIN_TYPE_LIVEMAGAZINE;
break;
case E_COMP_WIN_CLASS_TYPE_LOCKSCREEN:
- if ((ntype == E_COMP_WIN_NAME_TYPE_LOCKSCREEN) &&
- (wtype == ECORE_X_WINDOW_TYPE_NOTIFICATION))
+ if (ntype == E_COMP_WIN_NAME_TYPE_LOCKSCREEN)
res = E_COMP_WIN_TYPE_LOCKSCREEN;
break;
case E_COMP_WIN_CLASS_TYPE_INDICATOR:
res = E_COMP_WIN_TYPE_DEBUGGING_INFO;
break;
case E_COMP_WIN_CLASS_TYPE_ISF:
- if (wtype != ECORE_X_WINDOW_TYPE_NORMAL)
+ if (wtype != ECORE_X_WINDOW_TYPE_UTILITY)
break;
else if (ntype == E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD)
res = E_COMP_WIN_TYPE_ISF_KEYBOARD;
case E_COMP_WIN_CLASS_TYPE_APPTRAY:
if (ntype == E_COMP_WIN_NAME_TYPE_APPTRAY)
res = E_COMP_WIN_TYPE_APPTRAY;
+ break;
+ case E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY:
+ if (ntype == E_COMP_WIN_NAME_TYPE_MINI_APPTRAY)
+ res = E_COMP_WIN_TYPE_MINI_APPTRAY;
+ break;
+ case E_COMP_WIN_CLASS_TYPE_VOLUME:
+ if ((ntype == E_COMP_WIN_NAME_TYPE_VOLUME) &&
+ (wtype == ECORE_X_WINDOW_TYPE_NOTIFICATION))
+ res = E_COMP_WIN_TYPE_VOLUME;
+ break;
case E_COMP_WIN_CLASS_TYPE_BACKGROUND:
if (ntype == E_COMP_WIN_NAME_TYPE_BACKGROUND)
res = E_COMP_WIN_TYPE_BACKGROUND;
#define TYPE_APPTRAY_CHECK(a) \
((a)->win_type == E_COMP_WIN_TYPE_APPTRAY)
+#define TYPE_MINI_APPTRAY_CHECK(a) \
+ ((a)->win_type == E_COMP_WIN_TYPE_MINI_APPTRAY)
+
typedef enum _E_Comp_Win_Type
{
E_COMP_WIN_TYPE_UNKNOWN = 0,
E_COMP_WIN_TYPE_TICKERNOTI,
E_COMP_WIN_TYPE_DEBUGGING_INFO,
E_COMP_WIN_TYPE_APPTRAY,
+ E_COMP_WIN_TYPE_MINI_APPTRAY,
+ E_COMP_WIN_TYPE_VOLUME,
E_COMP_WIN_TYPE_BACKGROUND,
E_COMP_WIN_TYPE_ISF_KEYBOARD,
E_COMP_WIN_TYPE_ISF_SUB,
} DEVICEMGR_CFG;
typedef struct _E_Devicemgr_Config E_Devicemgr_Config;
+typedef struct _E_Devicemgr_Config_Rotation E_Devicemgr_Config_Rotation;
/* external variable to store active config */
extern E_Devicemgr_Config *_e_devicemgr_cfg;
Eina_Bool isPopUpEnabled;
/**< popup enable/disable status */
} ScrnConf;
+ Eina_List *rotation;
+};
+
+struct _E_Devicemgr_Config_Rotation
+{
+ Eina_Bool enable;
+ int angle;
};
#endif//_E_DEVICEMGR_PRIVATE_H_
\r
/* local variables */\r
static E_Config_DD *_devicemgr_conf_edd = NULL;\r
+static E_Config_DD *_devicemgr_conf_rotation_edd = NULL;\r
\r
static void _e_mod_devicemgr_config_free(void);\r
static void _e_mod_devicemgr_config_new(void);\r
/* create config structure for module */\r
_devicemgr_conf_edd = E_CONFIG_DD_NEW("Devicemgr_Config", E_Devicemgr_Config);\r
\r
+ _devicemgr_conf_rotation_edd = E_CONFIG_DD_NEW("E_Devicemgr_Config_Rotation",\r
+ E_Devicemgr_Config_Rotation);\r
+#undef T\r
+#undef D\r
+#define T E_Devicemgr_Config_Rotation\r
+#define D _devicemgr_conf_rotation_edd\r
+ E_CONFIG_VAL(D, T, enable, UCHAR);\r
+ E_CONFIG_VAL(D, T, angle, INT);\r
+\r
#undef T\r
#undef D\r
#define T E_Devicemgr_Config\r
E_CONFIG_VAL(D, T, ScrnConf.enable, UCHAR);\r
E_CONFIG_VAL(D, T, ScrnConf.default_dispmode, INT);\r
E_CONFIG_VAL(D, T, ScrnConf.isPopUpEnabled, UCHAR);\r
+ E_CONFIG_LIST(D, T, rotation, _devicemgr_conf_rotation_edd);\r
\r
/* attempt to load existing configuration */\r
_e_devicemgr_cfg = e_config_domain_load(E_DEVICEMGR_CFG, _devicemgr_conf_edd);\r
if (!_e_devicemgr_cfg) return;\r
\r
/* free config structure */\r
+ E_CONFIG_DD_FREE(_devicemgr_conf_rotation_edd);\r
E_FREE(_e_devicemgr_cfg);\r
}\r
\r
{
{SC_EXT_RES_1920X1080, 0.0, NULL},
{SC_EXT_RES_1280X720, 0.0, NULL},
+ {SC_EXT_RES_720X480, 0.0, NULL},
+ {SC_EXT_RES_720X576, 0.0, NULL},
};
static char *str_output[3] = {
"ACTIVE",
};
-static char *str_resolution[3] = {
+static char *str_resolution[5] = {
"null",
"1920x1080",
"1280x720",
+ "720x480",
+ "720x576",
};
/* Calculates the vertical refresh rate of a mode. */
case SC_EXT_RES_1280X720:
str = str_resolution[2];
break;
+ case SC_EXT_RES_720X480:
+ str = str_resolution[3];
+ break;
+ case SC_EXT_RES_720X576:
+ str = str_resolution[4];
+ break;
default:
str = str_resolution[0];
break;
resolution = SC_EXT_RES_1920X1080;
else if (!strcmp (res_name, str_resolution[2]))
resolution = SC_EXT_RES_1280X720;
+ else if (!strcmp (res_name, str_resolution[3]))
+ resolution = SC_EXT_RES_720X480;
+ else if (!strcmp (res_name, str_resolution[4]))
+ resolution = SC_EXT_RES_720X576;
else
resolution = SC_EXT_RES_NULL;
SC_EXT_RES_NULL, /* null */
SC_EXT_RES_1920X1080, /* 1920 x 1080 */
SC_EXT_RES_1280X720, /* 1280 x 720 */
+ SC_EXT_RES_720X480, /* 720 x 480 */
+ SC_EXT_RES_720X576, /* 720 x 576 */
} SC_EXT_RES;
/* send status */
#include <sensor.h>
#include <vconf.h>
#include <X11/Xlib.h>
+#include "e_devicemgr_privates.h"
#include "sf_rotation_devicemgr.h"
typedef struct _E_DM_Sensor_Rotation E_DM_Sensor_Rotation;
Ecore_Timer *retry_timer;
int retry_count;
Eina_Bool lock;
+ Eina_Bool connected;
};
/* static global variables */
static Ecore_X_Atom ATOM_DEVICE_ROTATION_ANGLE = 0;
/* local subsystem functions */
-static void _sensor_connect(void);
-static void _sensor_disconnect(void);
+static Eina_Bool _sensor_connect(void);
+static Eina_Bool _sensor_disconnect(void);
static Eina_Bool _sensor_connect_retry_timeout(void *data);
static void _sensor_rotation_changed_cb(unsigned int event_type, sensor_event_data_t *event, void *data);
static void _vconf_cb_lock_change(keynode_t *node, void *data);
Eina_Bool
e_mod_sf_rotation_init(void)
{
+ int r = 0, lock = 0;
+ Eina_Bool res = EINA_FALSE;
+
+ rot.connected = EINA_FALSE;
rot.retry_count = 0;
- _sensor_connect();
+ res = _sensor_connect();
+ if (res)
+ {
+ r = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &lock);
+ if (r)
+ {
+ ELBF(ELBT_ROT, 0, 0,
+ "ERR! AUTO_ROTATE_SCREEN_BOOL get failed. "
+ "r:%d lock:%d", r, lock);
+ }
+ else
+ {
+ rot.lock = !lock;
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
+ _vconf_cb_lock_change,
+ NULL);
+ ELBF(ELBT_ROT, 0, 0,
+ "AUTO_ROTATE_SCREEN_BOOL get succeeded. "
+ "lock:%d rot.locK%d", lock, rot.lock);
+ }
+ }
_sensor_rotation_set(0);
return EINA_TRUE;
}
Eina_Bool
e_mod_sf_rotation_deinit(void)
{
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, _vconf_cb_lock_change);
_sensor_disconnect();
return EINA_TRUE;
}
/* local subsystem functions */
-static void
+static Eina_Bool
_sensor_connect(void)
{
int h, r, lock = 0;
+ if (rot.connected) return EINA_TRUE;
if (rot.retry_timer)
{
rot.started = EINA_TRUE;
rot.retry_count = 0;
rot.lock = EINA_FALSE;
+ rot.connected = EINA_TRUE;
ELB(ELBT_ROT, "sf_connect succeeded", h);
-
- r = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &lock);
- if (r)
- {
- ELBF(ELBT_ROT, 0, 0,
- "ERR! AUTO_ROTATE_SCREEN_BOOL get failed. "
- "r:%d lock:%d", r, lock);
- }
- else
- {
- rot.lock = !lock;
- vconf_notify_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
- _vconf_cb_lock_change,
- NULL);
- ELBF(ELBT_ROT, 0, 0,
- "AUTO_ROTATE_SCREEN_BOOL get succeeded. "
- "lock:%d rot.locK%d", lock, rot.lock);
- }
- return;
+ return EINA_TRUE;
error:
if (rot.retry_count <= 20)
_sensor_connect_retry_timeout,
NULL);
}
- return;
+ return EINA_FALSE;
}
-static void
+static Eina_Bool
_sensor_disconnect(void)
{
int r;
+ if (!rot.connected) return EINA_TRUE;
- vconf_ignore_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, _vconf_cb_lock_change);
rot.lock = EINA_FALSE;
if (rot.retry_timer)
if (rot.handle < 0)
{
ELB(ELBT_ROT, "ERR! invalid handle", rot.handle);
- return;
+ goto error;
}
if (rot.started)
{
- r = sf_unregister_event(rot.handle,
- ACCELEROMETER_EVENT_ROTATION_CHECK);
+ r = sf_stop(rot.handle);
if (r < 0)
{
- ELB(ELBT_ROT, "ERR! sf_unregister_event failed", r);
- return;
+ ELB(ELBT_ROT, "ERR! sf_stop failed", r);
+ goto error;
}
- r = sf_stop(rot.handle);
+ r = sf_unregister_event(rot.handle,
+ ACCELEROMETER_EVENT_ROTATION_CHECK);
if (r < 0)
{
- ELB(ELBT_ROT, "ERR! sf_stop failed", r);
- return;
+ ELB(ELBT_ROT, "ERR! sf_unregister_event failed", r);
+ goto error;
}
rot.started = EINA_TRUE;
}
if (r < 0)
{
ELB(ELBT_ROT, "ERR! sf_disconnect failed", r);
- return;
+ goto error;
}
rot.handle = -1;
+ rot.connected = EINA_FALSE;
+ ELB(ELBT_ROT, "sf_disconnect succeeded", NULL);
+ return EINA_TRUE;
+error:
+ return EINA_FALSE;
}
static Eina_Bool
_sensor_connect_retry_timeout(void *data)
{
+ int r = 0, lock = 0;
+ Eina_Bool res = EINA_FALSE;
+
if (rot.retry_timer)
{
ecore_timer_del(rot.retry_timer);
}
rot.retry_count++;
ELB(ELBT_ROT, "retrying to connect sensor", rot.retry_count);
- _sensor_connect();
+ res = _sensor_connect();
+ if (res)
+ {
+ r = vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &lock);
+ if (r)
+ {
+ ELBF(ELBT_ROT, 0, 0,
+ "ERR! AUTO_ROTATE_SCREEN_BOOL get failed. "
+ "r:%d lock:%d", r, lock);
+ }
+ else
+ {
+ rot.lock = !lock;
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
+ _vconf_cb_lock_change,
+ NULL);
+ ELBF(ELBT_ROT, 0, 0,
+ "AUTO_ROTATE_SCREEN_BOOL get succeeded. "
+ "lock:%d rot.locK%d", lock, rot.lock);
+ }
+ }
+
return ECORE_CALLBACK_CANCEL;
}
static int
_ang_get(enum accelerometer_rotate_state state)
{
- int ang = -1;
+ E_Devicemgr_Config_Rotation *cr = NULL;
+ Eina_List *l = NULL;
+ int ang = -1, res = -1;
/* change CW (SensorFW) to CCW(EFL) */
switch (state)
{
- case ROTATION_EVENT_0: ang = 0; break;
- case ROTATION_EVENT_90: ang = 270; break;
- case ROTATION_EVENT_180: ang = 180; break;
- case ROTATION_EVENT_270: ang = 90; break;
+ case ROTATION_EVENT_0: ang = 0; break;
+ case ROTATION_EVENT_90: ang = 270; break;
+ case ROTATION_EVENT_180: ang = 180; break;
+ case ROTATION_EVENT_270: ang = 90; break;
default:
- ELB(ELBT_ROT, "ERR! unknown state", state);
+ ELB(ELBT_ROT, "ERR! unknown state", state);
break;
}
- return ang;
+ EINA_LIST_FOREACH(_e_devicemgr_cfg->rotation, l, cr)
+ {
+ if (!cr) continue;
+ if (cr->angle == ang)
+ {
+ if (cr->enable)
+ res = ang;
+ break;
+ }
+ }
+
+ return res;
}
static void
ELBF(ELBT_ROT, 0, 0, "ROT_EV state:%d angle:%d", state, ang);
- e_zone_rotation_set(zone, ang);
- rot.state = state;
+ if (ang != -1)
+ e_zone_rotation_set(zone, ang);
+ rot.state = state;
_sensor_rotation_set(ang);
}
E_Manager *m = NULL;
E_Zone *zone = NULL;
int lock = 0, z_ang = -1, ang = -1;
+ Eina_Bool res = EINA_FALSE;
if (!node)
{
ELB(ELBT_ROT, "ERR! node is NULL", 0);
if (lock)
{
+ // disconnect sensor for reducing the current sinking.
+ _sensor_disconnect();
if (zone) e_zone_rotation_set(zone, 0);
rot.state = ROTATION_EVENT_0;
}
else
{
- enum accelerometer_rotate_state state;
- if (sf_check_rotation(&state) < 0)
+ // connect sensor for auto rotation.
+ res = _sensor_connect();
+ ELB(ELBT_ROT, "_sensor_connect() res", res);
+ if (res)
{
- ELB(ELBT_ROT, "ERR! getting rotation failed", state);
- }
- else
- {
- ang = _ang_get(state);
- if (zone) z_ang = e_zone_rotation_get(zone);
- if ((ang != -1) && (ang != z_ang))
+ enum accelerometer_rotate_state state;
+ if (sf_check_rotation(&state) < 0)
+ {
+ ELB(ELBT_ROT, "ERR! getting rotation failed", state);
+ }
+ else
{
- if (zone) e_zone_rotation_set(zone, ang);
- rot.state = state;
- _sensor_rotation_set(ang);
+ ang = _ang_get(state);
+ if (zone) z_ang = e_zone_rotation_get(zone);
+ if ((ang != -1) && (ang != z_ang))
+ {
+ if (zone) e_zone_rotation_set(zone, ang);
+ rot.state = state;
+ _sensor_rotation_set(ang);
+ }
}
}
}
unsigned char changed :1;
unsigned int layer;
+
+ E_Border *below_bd;
};
/* define layer values here so we don't have to grep through code to change */
/* layer level 10 (450~) */
+# define POL_QUICKPANEL_LAYER 450
/* layer level 9 (400~449) */
# define POL_NOTIFICATION_LAYER_HIGH 400
# define POL_NOTIFICATION_LAYER_NORMAL 350
/* layer level 7 (300~349) */
-# define POL_QUICKPANEL_LAYER 300
# define POL_NOTIFICATION_LAYER 300
# define POL_INDICATOR_LAYER 300
# define POL_NOTIFICATION_LAYER_LOW 300
# define POL_FULLSCREEN_LAYER 250
/* layer level 5 (200~249) */
+# define POL_APPTRAY_LAYER 200
/* layer level 4 (150~199) */
# define POL_STATE_ABOVE_LAYER 150
int type __UNUSED__,
void *event);
-static Eina_Bool _e_mod_floating_cb_move_resize_request(void *data __UNUSED__,
- int type __UNUSED__,
- void *event);
static Eina_Bool _e_mod_floating_cb_client_message(void *data,
int type,
void *event);
int type,
void *event);
-/* border event callback function */
-static Eina_Bool _e_mod_floating_cb_mouse_up(void *data,
- int type __UNUSED__,
- void *event);
-static Eina_Bool _e_mod_floating_cb_mouse_move(void *data,
- int type __UNUSED__,
- void *event);
-
-// E Border hook
-static void _e_mod_floating_cb_hook_resize_begin(void *data __UNUSED__,
- void *data2);
-
/* general function */
static int _e_mod_floating_atom_init(void);
static void _e_mod_floating_border_list_add(E_Border *bd);
static void _e_mod_floating_border_list_del(E_Border *bd);
-static void _e_mod_floating_border_handler_remove(E_Illume_Floating_Border *ft_bd);
static void _e_mod_hints_floating_list_set(void);
static E_Illume_Floating_Border* _e_mod_floating_get_floating_border(Ecore_X_Window win);
static void _e_mod_floating_window_state_change(Ecore_X_Event_Window_Property *ev);
/* for automatically align the floating windows */
static void _e_mod_floating_smart_cleanup(Ecore_X_Event_Client_Message *event);
-/* for top or bottom maximize */
-static void _e_mod_floating_maximize_coords_handle(E_Illume_Floating_Border *ft_bd,
- int x,
- int y);
-static void _e_mod_floating_maximize(E_Border *bd, E_Illume_Maximize max);
-static void _e_mod_floating_maximize_internal(E_Border *bd, E_Illume_Maximize max);
-
/* for controlling app-in-app window */
static Ecore_X_Atom E_ILLUME_ATOM_FLOATING_WINDOW_ALIGN;
static Ecore_X_Atom E_ILLUME_ATOM_FLOATING_WINDOW_CHANGE_VISIBLE;
NULL));
_fw_hdls =
eina_list_append(_fw_hdls,
- ecore_event_handler_add(ECORE_X_EVENT_WINDOW_MOVE_RESIZE_REQUEST,
- _e_mod_floating_cb_move_resize_request,
- NULL));
- _fw_hdls =
- eina_list_append(_fw_hdls,
ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
_e_mod_floating_cb_client_message,
NULL));
_e_mod_floating_cb_window_property,
NULL));
- _fw_hooks =
- eina_list_append(_fw_hooks,
- e_border_hook_add(E_BORDER_HOOK_RESIZE_BEGIN,
- _e_mod_floating_cb_hook_resize_begin,
- NULL));
-
_idle_enterer = ecore_idle_enterer_add(_e_mod_floating_cb_idle_enterer, NULL);
ret = _e_mod_floating_atom_init();
return;
}
- _e_mod_floating_border_handler_remove(ft_bd);
-
L(LT_FLOATING, "%s(%d) Floating window is removed in list, win:0x%08x\n",
__func__, __LINE__, bd->win);
}
static void
-_e_mod_floating_border_handler_remove(E_Illume_Floating_Border *ft_bd)
-{
- EINA_SAFETY_ON_NULL_RETURN(ft_bd);
- EINA_SAFETY_ON_NULL_RETURN(ft_bd->handlers);
-
- L(LT_FLOATING, "%s(%d) Mouse event handler is removed, win: 0x%08x\n",
- __func__, __LINE__, ft_bd->bd->client.win);
-
- E_FREE_LIST(ft_bd->handlers, ecore_event_handler_del);
-}
-
-static void
_e_mod_hints_floating_list_set(void)
{
Eina_List *ml = NULL, *cl = NULL;
}
static Eina_Bool
-_e_mod_floating_cb_move_resize_request(void *data __UNUSED__,
- int type __UNUSED__,
- void *event)
-{
- Ecore_X_Event_Window_Move_Resize_Request *e;
- E_Illume_Floating_Border *ft_bd = NULL;
-
- e = event;
- ft_bd = _e_mod_floating_get_floating_border(e->win);
- if (!ft_bd)
- {
- L(LT_FLOATING, "%s(%d) No window in floating list, win: 0x%08x\n",
- __func__, __LINE__, e->win);
- goto end;
- }
-
- if (ft_bd->handlers == NULL)
- {
- L(LT_FLOATING, "%s(%d) Mouse event handler is added, win: 0x%08x\n",
- __func__, __LINE__, e->win);
- ft_bd->handlers = eina_list_append(ft_bd->handlers,
- ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
- _e_mod_floating_cb_mouse_up,
- ft_bd));
- ft_bd->handlers = eina_list_append(ft_bd->handlers,
- ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
- _e_mod_floating_cb_mouse_move,
- ft_bd));
- }
-
-end:
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
_e_mod_floating_cb_client_message(void *data __UNUSED__,
int type __UNUSED__,
void *event)
}
static Eina_Bool
-_e_mod_floating_cb_mouse_up(void *data,
- int type __UNUSED__,
- void *event)
-{
- Ecore_Event_Mouse_Button *ev;
- E_Illume_Floating_Border *ft_bd = NULL;
- E_Border *bd = NULL;
-
- EINA_SAFETY_ON_NULL_GOTO(event, end);
- EINA_SAFETY_ON_NULL_GOTO(data, end);
-
- ev = event;
- ft_bd = data;
- bd = ft_bd->bd;
- EINA_SAFETY_ON_NULL_GOTO(bd, end);
-
- if ((ev->event_window != bd->win) &&
- (ev->event_window != bd->event_win) &&
- (ev->window != bd->event_win))
- goto end;
-
- L(LT_FLOATING, "%s(%d) mouse up state, border: 0x%08x\n",
- __func__, __LINE__, ev->window);
-
- if (!ft_bd->moving) goto end;
- ft_bd->moving = 0;
-
- if (e_illume_border_is_fixed(bd)) goto end;
-
- _e_mod_floating_maximize_coords_handle(ft_bd, ev->root.x, ev->root.y);
- _e_mod_floating_border_handler_remove(ft_bd);
-
-end:
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
-_e_mod_floating_cb_mouse_move(void *data,
- int type __UNUSED__,
- void *event)
-{
- Ecore_Event_Mouse_Move *ev;
- E_Illume_Floating_Border *ft_bd = NULL;
- E_Border *bd = NULL;
- int new_x = 0, new_y = 0;
- int threshold = _e_illume_cfg->floating_control_threshold;
-
- EINA_SAFETY_ON_NULL_GOTO(event, end);
- EINA_SAFETY_ON_NULL_GOTO(data, end);
-
- ev = event;
- ft_bd = data;
- bd = ft_bd->bd;
- EINA_SAFETY_ON_NULL_GOTO(bd, end);
-
- if ((ev->event_window != bd->win) &&
- (ev->event_window != bd->event_win) &&
- (ev->window != bd->event_win))
- goto end;
-
- if (!bd->moving) goto end;
- ft_bd->moving = 1;
-
- L(LT_FLOATING, "%s(%d) mouse move state, border: 0x%08x\n",
- __func__, __LINE__, ev->window);
-
- if (e_illume_border_is_fixed(bd)) goto end;
-
- if (ft_bd->state.maximize_by_illume == 0) goto end;
- ft_bd->state.maximize_by_illume = 0;
-
- e_border_unmaximize(bd, E_ILLUME_MAXIMIZE_BOTH);
-
- new_x = ev->root.x - (bd->w / 2);
- new_y = ev->root.y - threshold;
-
- if ((bd->moveinfo.down.button >= 1) && (bd->moveinfo.down.button <= 3))
- {
- bd->mouse.last_down[bd->moveinfo.down.button - 1].x = new_x;
- bd->mouse.last_down[bd->moveinfo.down.button - 1].y = new_y;
- }
-
- e_border_move(bd, new_x, new_y);
-
-end:
- return ECORE_CALLBACK_PASS_ON;
-}
-
-/* if user resize the window in maximized by gesture,
- * change this window back into un-maximize state.
- */
-static void
-_e_mod_floating_cb_hook_resize_begin(void *data __UNUSED__,
- void *data2)
-{
- E_Illume_Floating_Border *ft_bd = NULL;
- E_Border *bd = NULL;
-
- EINA_SAFETY_ON_NULL_RETURN(data2);
- bd = data2;
- ft_bd = _e_mod_floating_get_floating_border(bd->win);
- EINA_SAFETY_ON_NULL_RETURN(ft_bd);
-
- if (ft_bd->state.maximize_by_illume)
- {
- ft_bd->state.maximize_by_illume = 0;
- bd->maximized = 0;
- }
-}
-
-static Eina_Bool
_e_mod_floating_cb_idle_enterer(void *data __UNUSED__)
{
E_Illume_Floating_Border *ft_bd = NULL;
L(LT_FLOATING, "%s(%d) idle state, win: 0x%08x\n",
__func__, __LINE__, bd->client.win);
- if (ft_bd->defer.maximize_top)
- {
- _e_mod_floating_maximize(bd,
- E_MAXIMIZE_FULLSCREEN |
- E_ILLUME_MAXIMIZE_TOP);
- ft_bd->state.maximize_by_illume = 1;
- ft_bd->defer.maximize_top = 0;
- }
- else if (ft_bd->defer.maximize_bottom)
- {
- _e_mod_floating_maximize(bd,
- E_MAXIMIZE_FULLSCREEN |
- E_ILLUME_MAXIMIZE_BOTTOM);
- ft_bd->state.maximize_by_illume = 1;
- ft_bd->defer.maximize_bottom = 0;
- }
-
if (ft_bd->defer.close)
{
e_border_act_close_begin(ft_bd->bd);
return;
}
-
-static void
-_e_mod_floating_maximize_coords_handle(E_Illume_Floating_Border *ft_bd,
- int x,
- int y)
-{
- E_Border *bd = NULL;
- const int margin = _e_illume_cfg->floating_control_threshold;
-
- EINA_SAFETY_ON_NULL_RETURN(ft_bd);
- EINA_SAFETY_ON_NULL_RETURN(ft_bd->bd);
- bd = ft_bd->bd;
-
- if ((y >= 0) && (y <= margin))
- {
- ft_bd->defer.maximize_top = 1;
- ft_bd->changed = 1;
- }
- else if ((y >= (bd->zone->h - margin)) && (y <= (bd->zone->h -1)))
- {
- ft_bd->defer.maximize_bottom = 1;
- ft_bd->changed = 1;
- }
-}
-
-static void
-_e_mod_floating_maximize(E_Border *bd, E_Illume_Maximize max)
-{
- E_OBJECT_CHECK(bd);
- E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
-
- if (!(max & E_ILLUME_MAXIMIZE_DIRECTION)) max |= E_ILLUME_MAXIMIZE_BOTH;
-
- if ((bd->shaded) || (bd->shading)) return;
- ecore_x_window_shadow_tree_flush();
- if (bd->fullscreen)
- e_border_unfullscreen(bd);
- if (((bd->maximized & E_ILLUME_MAXIMIZE_DIRECTION) ==
- (max & E_MAXIMIZE_DIRECTION)) ||
- ((bd->maximized & E_ILLUME_MAXIMIZE_DIRECTION) ==
- E_ILLUME_MAXIMIZE_BOTH)) return;
- if (bd->new_client)
- {
- bd->need_maximize = 1;
- bd->maximized &= ~E_ILLUME_MAXIMIZE_TYPE;
- bd->maximized |= max;
- return;
- }
-
- bd->pre_res_change.valid = 0;
- if (!(bd->maximized & E_ILLUME_MAXIMIZE_HORIZONTAL))
- {
- bd->saved.x = bd->x - bd->zone->x;
- bd->saved.w = bd->w;
- }
- if (!(bd->maximized & E_ILLUME_MAXIMIZE_VERTICAL))
- {
- bd->saved.y = bd->y - bd->zone->y;
- bd->saved.h = bd->h;
- }
-
- bd->saved.zone = bd->zone->num;
- e_hints_window_size_set(bd);
-
- e_border_raise(bd);
-
- _e_mod_floating_maximize_internal(bd, max);
-
- bd->maximized &= ~E_ILLUME_MAXIMIZE_TYPE;
- bd->maximized |= max;
-
- e_hints_window_maximized_set(bd, bd->maximized & E_ILLUME_MAXIMIZE_HORIZONTAL,
- bd->maximized & E_ILLUME_MAXIMIZE_VERTICAL);
- e_remember_update(bd);
-}
-
-static void
-_e_mod_floating_maximize_internal(E_Border *bd, E_Illume_Maximize max)
-{
- int x1, yy1;
- int w, h;
-
- switch (max & E_ILLUME_MAXIMIZE_TYPE)
- {
- case E_ILLUME_MAXIMIZE_FULLSCREEN:
- w = bd->zone->w;
- h = bd->zone->h;
-
- e_border_resize_limit(bd, &w, &h);
- x1 = bd->zone->x + (bd->zone->w - w) / 2;
- yy1 = bd->zone->y + (bd->zone->h - h) / 2;
-
- switch (max & E_ILLUME_MAXIMIZE_DIRECTION)
- {
- case E_ILLUME_MAXIMIZE_BOTH:
- e_border_move_resize(bd, x1, yy1, w, h);
- break;
-
- case E_ILLUME_MAXIMIZE_VERTICAL:
- e_border_move_resize(bd, bd->x, yy1, bd->w, h);
- break;
-
- case E_ILLUME_MAXIMIZE_HORIZONTAL:
- e_border_move_resize(bd, x1, bd->y, w, bd->h);
- break;
-
- case E_ILLUME_MAXIMIZE_BOTTOM:
- e_border_move_resize(bd, bd->zone->x, bd->zone->h / 2, w, h / 2);
- break;
-
- case E_ILLUME_MAXIMIZE_TOP:
- e_border_move_resize(bd, bd->zone->x, bd->zone->y, w, h / 2);
- break;
- }
- break;
- }
-}
typedef struct _E_Illume_Floating_Border E_Illume_Floating_Border;
-typedef enum _E_Illume_Maximize
-{
- E_ILLUME_MAXIMIZE_NONE = 0x00000000,
- E_ILLUME_MAXIMIZE_FULLSCREEN = 0x00000001,
- E_ILLUME_MAXIMIZE_SMART = 0x00000002,
- E_ILLUME_MAXIMIZE_EXPAND = 0x00000003,
- E_ILLUME_MAXIMIZE_FILL = 0x00000004,
- E_ILLUME_MAXIMIZE_TYPE = 0x0000000f,
- E_ILLUME_MAXIMIZE_VERTICAL = 0x00000010,
- E_ILLUME_MAXIMIZE_HORIZONTAL = 0x00000020,
- E_ILLUME_MAXIMIZE_BOTH = 0x00000030,
- E_ILLUME_MAXIMIZE_BOTTOM = 0x00000070,
- E_ILLUME_MAXIMIZE_TOP = 0x000000b0,
- E_ILLUME_MAXIMIZE_DIRECTION = 0x000000f0
-} E_Illume_Maximize;
-
struct _E_Illume_Floating_Border
{
E_Border *bd;
Eina_List *handlers;
- unsigned char moving :1;
-
struct{
- unsigned char maximize_top :1;
- unsigned char maximize_bottom :1;
unsigned char close :1;
} defer;
unsigned char changed :1;
-
- struct{
- unsigned char maximize_by_illume :1;
- } state;
};
int e_mod_floating_init(void);
static Ecore_X_Window _e_mod_quickpanel_active_window_get(Ecore_X_Window root);
static void _e_mod_quickpanel_property_root_angle_change(Ecore_X_Event_Window_Property *event);
static void _e_mod_quickpanel_property_active_win_change(Ecore_X_Event_Window_Property *event);
+static void _e_mod_quickpanel_property_quickpanel_state_change(Ecore_X_Event_Window_Property *event);
static int _e_mod_quickpanel_bg_layout_add(E_Illume_Quickpanel *qp);
static int _e_mod_quickpanel_bg_layout_del(E_Illume_Quickpanel *qp);
EINTERN Eina_Bool _e_mod_quickpanel_layer_fetch(E_Illume_Quickpanel *qp, E_Border *bd);
EINTERN void _e_mod_quickpanel_layer_update(E_Illume_Quickpanel *qp);
+static E_Border* _e_mod_quickpanel_find_below_notification(E_Border *qp_bd);
+static void _e_mod_quickpanel_check_hide(E_Border *bd);
+
+
/* local variables */
static Eina_List *_qp_hdls = NULL;
static E_Border_Hook *_qp_hook = NULL;
return ECORE_CALLBACK_PASS_ON;
}
+ _e_mod_quickpanel_check_hide(ev->border);
+
if (!ev->border->client.illume.quickpanel.quickpanel)
return ECORE_CALLBACK_PASS_ON;
if (e_illume_border_is_quickpanel(ev->border))
{
qp->bd = ev->border;
-
- root = ecore_x_window_root_get(qp->bd->win);
- active_win = _e_mod_quickpanel_active_window_get(root);
- if (active_win)
- {
- active_bd = e_border_find_by_client_window(active_win);
- if (active_bd)
- qp->changes.layer = _e_mod_quickpanel_layer_fetch(qp, active_bd);
- else
- {
- qp->layer = POL_QUICKPANEL_LAYER;
- qp->changes.layer = 1;
- }
-
- L(LT_QUICKPANEL, "[ILLUME2][QP] %s(%d).. Initializing QP layer: %d\n",
- __func__, __LINE__, qp->layer);
-
- if (qp->changes.layer) qp->changed = 1;
- }
+ qp->layer = POL_QUICKPANEL_LAYER;
+ qp->changes.layer = 1;
+ qp->changed = 1;
}
// Disable effect of the quickpanel window
if (!(qp = e_illume_quickpanel_by_zone_get(active_bd->zone)))
return;
- // Updating quickpanel's layer by active window
- if (e_illume_border_is_quickpanel(active_bd) == EINA_FALSE)
- {
- qp->changes.layer = _e_mod_quickpanel_layer_fetch(qp, active_bd);
- if (qp->changes.layer)
- {
- L(LT_QUICKPANEL, "[ILLUME2][QP] %s(%d).. Fetch QP layer: %d\n",
- __func__, __LINE__, qp->layer);
- qp->changed = 1;
- }
- }
-
if (e_illume_border_is_lock_screen(active_bd))
{
if (!qp->is_lock)
}
}
+static void
+_e_mod_quickpanel_property_quickpanel_state_change(Ecore_X_Event_Window_Property *event)
+{
+ E_Illume_Quickpanel *qp;
+ E_Zone *zone;
+ Ecore_X_Illume_Quickpanel_State state;
+
+ zone = e_util_zone_window_find(event->win);
+ if (!zone) return;
+
+ if (!(qp = e_illume_quickpanel_by_zone_get(zone)))
+ return;
+
+ // check qp is visible
+ state = ecore_x_e_illume_quickpanel_state_get(event->win);
+ if (state == ECORE_X_ILLUME_QUICKPANEL_STATE_ON)
+ qp->below_bd = _e_mod_quickpanel_find_below_notification(qp->bd);
+ else
+ qp->below_bd = NULL;
+
+ L(LT_QUICKPANEL, "[ILLUME2][QP] %s(%d)... QUICK PANEL's below win:0x%07x\n", __func__, __LINE__, qp->below_bd ? qp->below_bd->client.win : (unsigned int)NULL);
+}
+
static Eina_Bool _e_mod_quickpanel_cb_property(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_X_Event_Window_Property *ev;
{
_e_mod_quickpanel_property_active_win_change(ev);
}
+ else if (ev->atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE)
+ {
+ _e_mod_quickpanel_property_quickpanel_state_change(ev);
+ }
return ECORE_CALLBACK_PASS_ON;
}
if (!ev) return ECORE_CALLBACK_PASS_ON;
if (e_illume_border_is_quickpanel(ev->border)) return ECORE_CALLBACK_PASS_ON;
- root = ecore_x_window_root_get(ev->border->win);
- active_win = _e_mod_quickpanel_active_window_get(root);
- if (!active_win) return ECORE_CALLBACK_PASS_ON;
-
- // fetching quickpanel's layer
- if (ev->border->client.win == active_win)
- {
- qp = e_illume_quickpanel_by_zone_get(ev->border->zone);
- if (qp)
- {
- qp->changes.layer = _e_mod_quickpanel_layer_fetch(qp, ev->border);
- if (qp->changes.layer)
- {
- L(LT_QUICKPANEL, "[ILLUME2][QP] %s(%d).. Fetch QP layer: %d\n",
- __func__, __LINE__, qp->layer);
- qp->changed = 1;
- }
- }
- }
+ _e_mod_quickpanel_check_hide(ev->border);
return ECORE_CALLBACK_PASS_ON;
}
__func__, __LINE__, qp->layer);
e_border_layer_set(qp->bd, qp->layer);
}
+
+static E_Border*
+_e_mod_quickpanel_find_below_notification(E_Border *qp_bd)
+{
+ int i;
+ Eina_List *l;
+
+ if (!qp_bd) return NULL;
+ if (!qp_bd->zone) return NULL;
+
+ /* Find the windows below this one
+ - NOTIFICATION HIGH : 9
+ - NOTIFICATION NORMAL : 8
+ - NOTIFICATION LOW : 7
+ */
+ for (i = 9; i >= 7; i--)
+ {
+ E_Border *b;
+
+ EINA_LIST_REVERSE_FOREACH(qp_bd->zone->container->layers[i].clients, l, b)
+ {
+ if (!b) continue;
+ if (b->zone != qp_bd->zone) continue;
+
+ if ((b->x >= qp_bd->zone->w) || (b->y >= qp_bd->zone->h)) continue;
+ if (((b->x + b->w) <= 0) || ((b->y + b->h) <= 0)) continue;
+
+ return b;
+ }
+ }
+
+ return NULL;
+}
+
+static void _e_mod_quickpanel_check_hide(E_Border *bd)
+{
+ E_Illume_Quickpanel *qp;
+ if (!bd) return;
+
+ if (bd->layer >= POL_NOTIFICATION_LAYER_LOW)
+ {
+ qp = e_illume_quickpanel_by_zone_get(bd->zone);
+ if (qp)
+ {
+ // check qp is visible
+ Ecore_X_Illume_Quickpanel_State state;
+ E_Border *below_bd;
+
+ state = ecore_x_e_illume_quickpanel_state_get(bd->zone->black_win);
+ if (state == ECORE_X_ILLUME_QUICKPANEL_STATE_ON)
+ {
+ // check qp's below is chaged or not
+ below_bd = _e_mod_quickpanel_find_below_notification(qp->bd);
+ if (qp->bd != below_bd)
+ {
+ ecore_x_e_illume_quickpanel_state_send(bd->zone->black_win, ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+ L(LT_QUICKPANEL, "[ILLUME2][QP] %s(%d).. Send Quickpanel state OFF.\n", __func__, __LINE__);
+ }
+ }
+ }
+ }
+}
{
E_Border *parent;
int mw, mh, nx, ny;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
// printf("\tLayout Dialog: %s\n", bd->client.icccm.name);
/* make sure it's the required width & height */
if ((bd->w != mw) || (bd->h != mh))
- {
- _policy_border_resize(bd, mw, mh);
- }
+ resize = EINA_TRUE;
/* make sure it's in the correct position */
if ((bd->x != nx) || (bd->y != ny))
- _policy_border_move(bd, nx, ny);
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, nx, ny, mw, mh);
+ else if (resize)
+ _policy_border_resize(bd, mw, mh);
+ else if (move)
+ _policy_border_move(bd, nx, ny);
/* set layer if needed */
if (bd->layer != POL_DIALOG_LAYER) e_border_layer_set(bd, POL_DIALOG_LAYER);
_policy_zone_layout_splash(E_Border *bd, E_Illume_Config_Zone *cz)
{
int mw, mh, nx, ny;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
if ((!bd) || (!cz)) return;
ny = (bd->zone->y + ((bd->zone->h - mh) / 2));
if ((bd->w != mw) || (bd->h != mh))
- _policy_border_resize(bd, mw, mh);
+ resize = EINA_TRUE;
if ((bd->x != nx) || (bd->y != ny))
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, nx, ny, mw, mh);
+ else if (resize)
+ _policy_border_resize(bd, mw, mh);
+ else if (move)
_policy_border_move(bd, nx, ny);
}
if ((bd->w != bd->zone->w) || (bd->h != bd->zone->h))
_policy_border_resize(bd, bd->zone->w, bd->zone->h);
}
+
+ /* set layer if needed */
+ if (bd->layer != POL_APPTRAY_LAYER)
+ e_border_layer_set(bd, POL_APPTRAY_LAYER);
}
static void
if ((bd->w != bd->zone->w) || (bd->h != bd->zone->h))
_policy_border_resize(bd, bd->zone->w, bd->zone->h);
}
+
+ /* set layer if needed */
+ if (bd->layer != POL_APPTRAY_LAYER)
+ e_border_layer_set(bd, POL_APPTRAY_LAYER);
}
/* policy functions */
}
xwin_info->bd_info = NULL;
xwin_info->attr.visible = 0;
+ xwin_info->viewable = EINA_FALSE;
xwin_info->is_drawed = EINA_FALSE;
}
+ E_Illume_Border_Info* bd_info = _policy_get_border_info(bd);
+ if (bd_info)
+ {
+ if (bd_info->resize_req.mouse.down)
+ {
+ e_grabinput_release(bd->event_win, bd->event_win);
+
+ if (bd_info->resize_req.mouse.resize)
+ {
+ Evas_Object *o = (Evas_Object *)e_object_data_get(E_OBJECT(bd));
+ if (o) evas_object_del(o);
+ }
+
+ /* set property on zone window that a drag is finished */
+ ecore_x_e_illume_drag_set(bd->zone->black_win, 0);
+
+ _policy_border_illume_handlers_remove(bd_info);
+ }
+ }
+
_policy_delete_border_info_list (bd);
if (e_illume_border_is_indicator(bd))
void
_policy_border_pre_fetch(E_Border *bd)
{
+#ifdef _F_DEICONIFY_APPROVE_
+ Eina_Bool change_parent = EINA_TRUE;
+#endif
+
if (!bd) return;
if (bd->new_client)
/* If we already have a parent, remove it */
if (bd->parent)
{
+#ifdef _F_DEICONIFY_APPROVE_
+ if (bd_parent == bd->parent) change_parent = EINA_FALSE;
+#endif
bd->parent->transients = eina_list_remove(bd->parent->transients, bd);
if (bd->parent->modal == bd) bd->parent->modal = NULL;
bd->parent = NULL;
L(LT_ICONIFY, "[ILLUME2][ICONIFY] %s(%d).. win:0x%07x(iconic:%d, by_wm:%d), parent:0x%07x(iconic:%d)\n", __func__, __LINE__, bd->client.win, bd->iconic, xwin_info ? xwin_info->iconify_by_wm : -100, bd_parent->client.win, bd_parent->iconic);
if (_e_illume_cfg->use_force_iconify)
{
- if (xwin_info && xwin_info->iconify_by_wm)
+ if (!bd_parent->iconic)
{
- if (bd->iconic)
+ if (xwin_info && xwin_info->iconify_by_wm)
{
- L(LT_ICONIFY, "[ILLUME2][ICONIFY] %s(%d).. FORCE UNICONIFY... win:0x%07x\n", __func__, __LINE__, bd->client.win);
- _policy_border_force_uniconify(bd);
+ if (bd->iconic)
+ {
+ L(LT_ICONIFY, "[ILLUME2][ICONIFY] %s(%d).. FORCE UNICONIFY... win:0x%07x\n", __func__, __LINE__, bd->client.win);
+ _policy_border_force_uniconify(bd);
+ }
}
}
}
}
}
}
+
+#ifdef _F_DEICONIFY_APPROVE_
+ if (change_parent)
+ {
+ E_Border *ancestor_bd;
+ bd->client.e.state.deiconify_approve.render_done = 0;
+
+ ancestor_bd = bd->client.e.state.deiconify_approve.ancestor;
+ if ((ancestor_bd) &&
+ (!e_object_is_del(E_OBJECT(ancestor_bd))))
+ {
+ ancestor_bd->client.e.state.deiconify_approve.req_list = eina_list_remove(ancestor_bd->client.e.state.deiconify_approve.req_list, bd);
+ bd->client.e.state.deiconify_approve.ancestor = NULL;
+
+ if ((ancestor_bd->client.e.state.deiconify_approve.req_list == NULL) &&
+ (ancestor_bd->client.e.state.deiconify_approve.render_done))
+ {
+ if (ancestor_bd->client.e.state.deiconify_approve.wait_timer)
+ {
+ ecore_timer_del(ancestor_bd->client.e.state.deiconify_approve.wait_timer);
+ ancestor_bd->client.e.state.deiconify_approve.wait_timer = NULL;
+ e_border_uniconify(ancestor_bd);
+ }
+ }
+ }
+ }
+#endif
+
bd->client.icccm.fetch.transient_for = 0;
}
}
{
fprintf (out, "%3i 0x%07x %4i %4i %6i %6i %5i %5i %5i %5i %5i %5i yes(0x%07x)\n",
i++, xwin_info->id, xwin_info->attr.w, xwin_info->attr.h, xwin_info->attr.x, xwin_info->attr.y, xwin_info->attr.depth,
- xwin_info->attr.visible, xwin_info->visibility, xwin_info->comp_vis, xwin_info->bd_info->border->iconic, xwin_info->iconify_by_wm, xwin_info->bd_info->border->client.win);
+ xwin_info->viewable, xwin_info->visibility, xwin_info->comp_vis, xwin_info->bd_info->border->iconic, xwin_info->iconify_by_wm, xwin_info->bd_info->border->client.win);
}
else
{
fprintf (out, "%3i 0x%07x %4i %4i %6i %6i %5i %5i %5i %5i 0 %3i no(NULL)\n",
i++, xwin_info->id, xwin_info->attr.w, xwin_info->attr.h, xwin_info->attr.x, xwin_info->attr.y, xwin_info->attr.depth,
- xwin_info->attr.visible, xwin_info->visibility, xwin_info->comp_vis, xwin_info->iconify_by_wm);
+ xwin_info->viewable, xwin_info->visibility, xwin_info->comp_vis, xwin_info->iconify_by_wm);
}
}
else
{
fprintf (out, "%3i 0x%07x %4i %4i %6i %6i %5i %5i %5i %5i 0 %3i no(NULL)\n",
i++, xwin_info->id, xwin_info->attr.w, xwin_info->attr.h, xwin_info->attr.x, xwin_info->attr.y, xwin_info->attr.depth,
- xwin_info->attr.visible, xwin_info->visibility, xwin_info->comp_vis, xwin_info->iconify_by_wm);
+ xwin_info->viewable, xwin_info->visibility, xwin_info->comp_vis, xwin_info->iconify_by_wm);
}
}
fprintf (out, "---------------------------------------------------------------------------------------------\n" );
{
E_Border* bd;
int layer;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
ILLUME2_TRACE ("[ILLUME2-NEW] %s(%d)... LAYOUT_SINGLE... bd_info's border = %x, client win = 0x%07x\n", __func__, __LINE__, bd_info->border, bd_info->border->client.win);
{
if ((bd->x != bd_info->resize_req.mouse.x) ||
(bd->y != bd_info->resize_req.mouse.y))
- _policy_border_move(bd,
- bd_info->resize_req.mouse.x,
- bd_info->resize_req.mouse.y);
+ move = EINA_TRUE;
if ((bd->w != bd_info->resize_req.mouse.w) ||
(bd->h != bd_info->resize_req.mouse.h))
- _policy_border_resize(bd,
- bd_info->resize_req.mouse.w,
- bd_info->resize_req.mouse.h);
+ resize = EINA_TRUE;
+
+ if (move && resize)
+ {
+ e_border_move_resize(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+ else if (move)
+ {
+ _policy_border_move(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y);
+ }
+ else if (resize)
+ {
+ _policy_border_resize(bd,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
bd_info->resize_req.need_change = 0;
L(LT_AIA, "[ILLUME2][AIA] %s(%d)... bd move resize... (%d, %d, %d, %d)\n", __func__, __LINE__, bd->x, bd->y, bd->w, bd->h);
{
if ((bd->x != bd_info->resize_req.mouse.x) ||
(bd->y != bd_info->resize_req.mouse.y))
- _policy_border_move(bd,
- bd_info->resize_req.mouse.x,
- bd_info->resize_req.mouse.y);
+ move = EINA_TRUE;
if ((bd->w != bd_info->resize_req.mouse.w) ||
(bd->h != bd_info->resize_req.mouse.h))
- _policy_border_resize(bd,
- bd_info->resize_req.mouse.w,
- bd_info->resize_req.mouse.h);
+ resize = EINA_TRUE;
+
+ if (move && resize)
+ {
+ e_border_move_resize(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+ else if (move)
+ {
+ _policy_border_move(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y);
+ }
+ else if (resize)
+ {
+ _policy_border_resize(bd,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+
L(LT_AIA, "[ILLUME2][AIA] %s(%d)... bd move resize... (%d, %d, %d, %d)\n", __func__, __LINE__, bd->x, bd->y, bd->w, bd->h);
bd_info->resize_req.need_change = 0;
}
else
{
if ((bd->w != bd->zone->w) || (bd->h != bd->zone->h))
- _policy_border_resize(bd, bd->zone->w, bd->zone->h);
+ resize = EINA_TRUE;
if ((bd->x != bd->zone->x) || (bd->y != bd->zone->y))
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, bd->zone->x, bd->zone->y, bd->zone->w, bd->zone->h);
+ else if (resize)
+ _policy_border_resize(bd, bd->zone->w, bd->zone->h);
+ else if (move)
_policy_border_move(bd, bd->zone->x, bd->zone->y);
}
E_Border* temp_bd;
int ny, nh;
int layer;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
ILLUME2_TRACE ("[ILLUME2-NEW] %s(%d)... LAYOUT_DUAL_TOP... bd_info's border = %x, client win = 0x%07x\n", __func__, __LINE__, bd_info->border, bd_info->border->client.win);
/* resize if needed */
if ((bd->w != bd->zone->w) || (bd->h != nh))
- _policy_border_resize(bd, bd->zone->w, nh);
+ resize = EINA_TRUE;
/* move to correct position (relative to zone) if needed */
if ((bd->x != bd->zone->x) || (bd->y != ny))
- _policy_border_move(bd, bd->zone->x, ny);
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, bd->zone->x, ny, bd->zone->w, nh);
+ else if (resize)
+ _policy_border_resize(bd, bd->zone->w, nh);
+ else if (move)
+ _policy_border_move(bd, bd->zone->x, ny);
/* set layer if needed */
_policy_zone_layout_app_layer_set (bd, layer);
E_Border* temp_bd;
int ky, kh, nx, nw;
int layer;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
ILLUME2_TRACE ("[ILLUME2-NEW] %s(%d)... LAYOUT_DUAL_LEFT... bd_info's border = %x, client win = 0x%07x\n", __func__, __LINE__, bd_info->border, bd_info->border->client.win);
/* resize if needed */
if ((bd->w != nw) || (bd->h != kh))
- _policy_border_resize(bd, nw, kh);
+ resize = EINA_TRUE;
/* move to correct position (relative to zone) if needed */
if ((bd->x != nx) || (bd->y != ky))
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, nx, ky, nw, kh);
+ else if (resize)
+ _policy_border_resize(bd, nw, kh);
+ else if (move)
_policy_border_move(bd, nx, ky);
/* set layer if needed */
E_Border* bd;
E_Border *app;
int iy, ny, nh;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
ILLUME2_TRACE ("[ILLUME2-NEW] %s(%d)... LAYOUT_DUAL_CUSTOM... bd_info's border = %x, client win = 0x%07x\n", __func__, __LINE__, bd_info->border, bd_info->border->client.win);
/* make sure it's the required width & height */
if ((bd->w != bd->zone->w) || (bd->h != nh))
- _policy_border_resize(bd, bd->zone->w, nh);
+ resize = EINA_TRUE;
/* move to correct position (relative to zone) if needed */
if ((bd->x != bd->zone->x) || (bd->y != ny))
- _policy_border_move(bd, bd->zone->x, ny);
+ move = EINA_TRUE;
+
+ if (resize && move)
+ e_border_move_resize(bd, bd->zone->x, ny, bd->zone->w, nh);
+ else if (resize)
+ _policy_border_resize(bd, bd->zone->w, nh);
+ else if (move)
+ _policy_border_move(bd, bd->zone->x, ny);
/* set layer if needed */
if (bd->layer != POL_APP_LAYER)
if (indi_bd->zone != bd->zone) continue;
if (e_illume_border_is_indicator(bd)) continue;
if (e_illume_border_is_keyboard(bd)) continue;
- if (e_illume_border_is_keyboard_sub(bd)) continue;
if (bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) continue;
if (!_policy_border_indicator_state_change(indi_bd, bd))
{
Eina_Bool ret = EINA_FALSE;
E_Illume_XWin_Info *child_xwin_info = NULL;
- E_Border *l, *child = NULL;
+ Eina_List *l;
+ E_Border *child = NULL;
EINA_LIST_FOREACH(bd->transients, l, child)
{
if (xwin_info->attr.input_only) continue;
// skip "unmap" window
- if ((xwin_info->attr.visible == 0) &&
+ if ((xwin_info->viewable == 0) &&
(xwin_info->iconify_by_wm == 0)) continue;
if (!xwin_info->is_drawed) continue;
#ifdef USE_DLOG
LOGD("[WM] SEND VISIBILITY. win:0x%07x (old:%d -> new:%d)", xwin_info->bd_info->border->client.win, old_vis, xwin_info->visibility);
#endif
+ L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] SEND VISIBILITY NOTIFY (Line:%d)... win:0x%07x (old:%d -> new:%d)\n", __LINE__, bd->client.win, old_vis, xwin_info->visibility);
_policy_send_visibility_notify(bd->client.win, xwin_info->visibility);
if (xwin_info->visibility == E_ILLUME_VISIBILITY_UNOBSCURED)
return EINA_FALSE;
}
+ xwin_info->viewable = xwin_info->attr.viewable;
+
bd = e_border_find_by_window (win);
xwin_info->bd_info = _policy_get_border_info(bd);
xwin_info->argb = ecore_x_window_argb_get (win);
return ;
}
- xwin_info->attr.visible = 1;
+ xwin_info->viewable = EINA_TRUE;
if (xwin_info->comp_vis)
{
return;
}
- xwin_info->attr.visible = 0;
+ xwin_info->viewable = EINA_FALSE;
L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. visibility is changed... win:0x%07x\n", __func__, __LINE__, event->win);
_g_visibility_changed = EINA_TRUE;
E_Illume_XWin_Info* temp_xwin_info;
E_Illume_XWin_Info* target_xwin_info;
int check_visibility;
+ int changed_size;
Ecore_X_Window target_win;
L (LT_XWIN, "[ILLUME2][XWIN] %s(%d).. win:0x%07x...\n", __func__, __LINE__, event->win);
old_above_xwin_info = NULL;
new_above_xwin_info = NULL;
check_visibility = 0;
+ changed_size = 0;
target_win = event->win;
xwin_info = _policy_xwin_info_find (event->win);
target_xwin_info = xwin_info;
if ((xwin_info->attr.x != event->x) ||
- (xwin_info->attr.y != event->y) ||
- (xwin_info->attr.w != event->w) ||
+ (xwin_info->attr.y != event->y))
+ {
+ check_visibility = 1;
+ }
+
+ if ((xwin_info->attr.w != event->w) ||
(xwin_info->attr.h != event->h))
- check_visibility = 1;
+ {
+ changed_size = 1;
+ check_visibility = 1;
+ }
xwin_info->attr.x = event->x;
xwin_info->attr.y = event->y;
_e_illume_xwin_info_list = eina_inlist_remove (_e_illume_xwin_info_list, EINA_INLIST_GET(xwin_info));
if (new_above_xwin_info)
- _e_illume_xwin_info_list = eina_inlist_append_relative (_e_illume_xwin_info_list, EINA_INLIST_GET(xwin_info), EINA_INLIST_GET(new_above_xwin_info));
+ _e_illume_xwin_info_list = eina_inlist_append_relative (_e_illume_xwin_info_list, EINA_INLIST_GET(xwin_info), EINA_INLIST_GET(new_above_xwin_info));
else
- _e_illume_xwin_info_list = eina_inlist_prepend (_e_illume_xwin_info_list, EINA_INLIST_GET(xwin_info));
+ _e_illume_xwin_info_list = eina_inlist_prepend (_e_illume_xwin_info_list, EINA_INLIST_GET(xwin_info));
if (check_visibility == 1)
{
- if (target_xwin_info->attr.visible)
+ if (target_xwin_info->viewable)
{
if (target_xwin_info->comp_vis)
{
+ if (changed_size)
+ {
+ L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. SIZE is changed... target win:0x%07x\n", __func__, __LINE__, target_xwin_info->id);
+ target_xwin_info->is_drawed = EINA_FALSE;
+ return;
+ }
+
+ L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. visibility is changed... win:0x%07x\n", __func__, __LINE__, event->win);
+ _g_visibility_changed = EINA_TRUE;
+ }
+ else if (target_xwin_info->iconify_by_wm)
+ {
L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. visibility is changed... win:0x%07x\n", __func__, __LINE__, event->win);
_g_visibility_changed = EINA_TRUE;
}
}
}
-void _policy_window_sync_draw_done (Ecore_X_Event_Client_Message* event)
+void _policy_window_sync_draw_done(Ecore_X_Event_Client_Message* event)
{
E_Border* bd;
+ E_Illume_XWin_Info *xwin_info;
+ Ecore_X_Window win;
+
+ win = event->data.l[0];
+ bd = e_border_find_by_client_window(win);
+ if (!bd) return;
+
+ xwin_info = _policy_xwin_info_find(bd->win);
+ if (!xwin_info) return;
+
+ if (!xwin_info->is_drawed)
+ {
+ if (xwin_info->comp_vis)
+ {
+ xwin_info->is_drawed = EINA_TRUE;
+ L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. visibility is changed... win:0x%07x\n", __func__, __LINE__, event->win);
+ _g_visibility_changed = EINA_TRUE;
+ }
+ else if (xwin_info->iconify_by_wm)
+ {
+ xwin_info->is_drawed = EINA_TRUE;
+ L(LT_VISIBILITY, "[ILLUME2][VISIBILITY] %s(%d).. visibility is changed... win:0x%07x\n", __func__, __LINE__, event->win);
+ _g_visibility_changed = EINA_TRUE;
+ }
+ }
}
/* Setting window mode requires window stack change and window geometry
ELBF(ELBT_ILLUME, 0, event->win,
"GET WIN_STATE_CHANGE_REQ bd:0x%08x(%d->%d) counter:0x%08x val:%d",
- bd ? bd->client.win : NULL,
+ bd ? bd->client.win : (unsigned int)NULL,
bd ? bd->client.illume.win_state.state : 0,
state,
counter, val);
// ignore the angle of special borders - like indicator, keyboard, quickpanel, etc.
if (e_illume_border_is_indicator(bd)) return;
if (e_illume_border_is_keyboard(bd)) return;
- if (e_illume_border_is_keyboard_sub(bd)) return;
if (e_illume_border_is_quickpanel(bd)) return;
if (e_illume_border_is_quickpanel_popup(bd)) return;
{
E_Border* bd;
int layer;
+ Eina_Bool resize = EINA_FALSE;
+ Eina_Bool move = EINA_FALSE;
bd = bd_info->border;
if (!bd)
}
if ((bd->x != new_x) || (bd->y != new_y))
- _policy_border_move(bd, new_x, new_y);
+ move = EINA_TRUE;
if ((bd->w != new_w) || (bd->h != new_h))
+ resize = EINA_TRUE;
+
+ if (move && resize)
+ e_border_move_resize(bd, new_x, new_y, new_w, new_h);
+ else if (move)
+ _policy_border_move(bd, new_x, new_y);
+ else if (resize)
_policy_border_resize(bd, new_w, new_h);
}
else
{
if ((bd->x != bd_info->resize_req.mouse.x) ||
(bd->y != bd_info->resize_req.mouse.y))
- _policy_border_move(bd,
- bd_info->resize_req.mouse.x,
- bd_info->resize_req.mouse.y);
+ move = EINA_TRUE;
if ((bd->w != bd_info->resize_req.mouse.w) ||
(bd->h != bd_info->resize_req.mouse.h))
- _policy_border_resize(bd,
- bd_info->resize_req.mouse.w,
- bd_info->resize_req.mouse.h);
+ resize = EINA_TRUE;
+
+ if (move && resize)
+ {
+ e_border_move_resize(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+ else if (move)
+ {
+ _policy_border_move(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y);
+ }
+ else if (resize)
+ {
+ _policy_border_resize(bd,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
bd_info->resize_req.need_change = 0;
L(LT_AIA, "[ILLUME2][AIA] %s(%d)... bd move resize... (%d, %d, %d, %d)\n", __func__, __LINE__, bd->x, bd->y, bd->w, bd->h);
{
if ((bd->x != bd_info->resize_req.mouse.x) ||
(bd->y != bd_info->resize_req.mouse.y))
- _policy_border_move(bd,
- bd_info->resize_req.mouse.x,
- bd_info->resize_req.mouse.y);
+ move = EINA_TRUE;
if ((bd->w != bd_info->resize_req.mouse.w) ||
(bd->h != bd_info->resize_req.mouse.h))
- _policy_border_resize(bd,
- bd_info->resize_req.mouse.w,
- bd_info->resize_req.mouse.h);
+ resize = EINA_TRUE;
+
+ if (move && resize)
+ {
+ e_border_move_resize(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+ else if (move)
+ {
+ _policy_border_move(bd,
+ bd_info->resize_req.mouse.x,
+ bd_info->resize_req.mouse.y);
+ }
+ else if (resize)
+ {
+ _policy_border_resize(bd,
+ bd_info->resize_req.mouse.w,
+ bd_info->resize_req.mouse.h);
+ }
+
L(LT_AIA, "[ILLUME2][AIA] %s(%d)... bd move resize... (%d, %d, %d, %d)\n", __func__, __LINE__, bd->x, bd->y, bd->w, bd->h);
bd_info->resize_req.need_change = 0;
}
if (bd->zone != zone) continue;
if (e_illume_border_is_indicator(bd)) continue;
if (e_illume_border_is_keyboard(bd)) continue;
- if (e_illume_border_is_keyboard_sub(bd)) continue;
if (e_illume_border_is_quickpanel(bd)) continue;
if (e_illume_border_is_quickpanel_popup(bd)) continue;
if (bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) continue;
if (e_illume_border_is_clipboard(bd)) return;
if (e_illume_border_is_app_tray(bd)) return;
if (e_illume_border_is_miniapp_tray(bd)) return;
- if (bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) return;
+// if (bd->client.illume.win_state.state == ECORE_X_ILLUME_WINDOW_STATE_FLOATING) return;
xwin_info->iconify_by_wm = 1;
if ((!xwin_info->argb) ||
(xwin_info->argb && xwin_info->bd_info->opaque))
{
- L(LT_ICONIFY, "[ILLUME2][ICONIFY] %s(%d)... ALREADY FULLY-OBSCURED... by win:0x%07x visible:%d (visibility:%d)\n", __func__, __LINE__, b->client.win, b->visible, xwin_info->visibility);
+ L(LT_ICONIFY, "[ILLUME2][ICONIFY] %s(%d)... win:0x%07x, ALREADY FULLY-OBSCURED... by win:0x%07x visible:%d (visibility:%d)\n", __func__, __LINE__, bd->client.win, b->client.win, b->visible, xwin_info->visibility);
break;
}
}
Eina_Bool iconify_by_wm;
Eina_Bool comp_vis;
Eina_Bool is_drawed;
+ Eina_Bool viewable : 1; // map state
E_Illume_Border_Info* bd_info;
};
e_mod_move_util.h \
e_mod_move_indicator.c \
e_mod_move_indicator.h \
- e_mod_move_indicator_controller.c \
- e_mod_move_indicator_controller.h \
e_mod_move_apptray.c \
e_mod_move_apptray.h \
e_mod_move_quickpanel.c \
// if log list is full, delete first log
E_Move_Event_Log *first_log = (E_Move_Event_Log*)eina_list_nth(m->ev_logs, 0);
m->ev_logs = eina_list_remove(m->ev_logs, first_log);
+ memset(first_log, 0, sizeof(E_Move_Event_Log));
+ E_FREE(first_log);
}
m->ev_logs = eina_list_append(m->ev_logs, log);
}
// if log list is full, delete first log
E_Move_Event_Log *first_log = (E_Move_Event_Log*)eina_list_nth(m->ev_logs, 0);
m->ev_logs = eina_list_remove(m->ev_logs, first_log);
+ memset(first_log, 0, sizeof(E_Move_Event_Log));
+ E_FREE(first_log);
}
m->ev_logs = eina_list_append(m->ev_logs, log);
}
_e_mod_move_prop_indicator_geometry(ev);
else if (a == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE)
_e_mod_move_prop_indicator_type(ev);
- else if (a == ATOM_MV_APPTRAY_STATE)
+ else if (a == ATOM_MV_MINI_APPTRAY_STATE)
_e_mod_move_prop_mini_apptray_state(ev);
return ECORE_CALLBACK_PASS_ON;
void *event)
{
Ecore_X_Window win;
- Ecore_X_Window target_win;
E_Move_Border *mb = NULL;
int fully_obscured;
Ecore_X_Event_Window_Visibility_Change *ev;
if (fully_obscured)
{
mb->visibility = E_MOVE_VISIBILITY_STATE_FULLY_OBSCURED;
-
- if (e_mod_move_indicator_controller_unset_policy_check(mb))
- e_mod_move_indicator_controller_unset(mb->m);
-
}
else
{
mb->visibility = E_MOVE_VISIBILITY_STATE_VISIBLE;
-
- if (e_mod_move_indicator_controller_set_policy_check(mb))
- {
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- e_mod_move_indicator_controller_unset(mb->m);
-
- e_mod_move_indicator_controller_set(mb);
- }
-
}
return ECORE_CALLBACK_PASS_ON;
E_CHECK_RETURN(ev, ECORE_CALLBACK_PASS_ON);
E_CHECK_RETURN(ev->border, ECORE_CALLBACK_PASS_ON);
+
+ ELBF(ELBT_MOVE, 0, ev->border->win,
+ "%15.15s| BD_MOVE w:0x%08x c:0x%08x ev[%d,%d]",
+ "MOVE", ev->border->win, ev->border->client.win, ev->border->x, ev->border->y);
+
mb = _e_mod_move_border_find(ev->border->win);
E_CHECK_RETURN(m, ECORE_CALLBACK_PASS_ON);
E_CHECK_RETURN(mb, ECORE_CALLBACK_PASS_ON);
"[MOVE] ev:%15.15s w1:0x%08x c1:0x%08x w2:0x%08x c2:0x%08x\n",
"BD_RAISE_ABOVE", ev->border->win, ev->border->client.win,
ev->stack->win, ev->stack->client.win);
+ ELBF(ELBT_MOVE, 0, ev->border->win,
+ "%15.15s| BD_RAISE_ABOVE w1:0x%08x c1:0x%08x w2:0x%08x c2:0x%08x",
+ "MOVE", ev->border->win, ev->border->client.win,
+ ev->stack->win, ev->stack->client.win);
}
else
{
L(LT_EVENT_BD,
"[MOVE] ev:%15.15s w:0x%08x c:0x%08x\n",
"BD_LOWER", ev->border->win, ev->border->client.win);
+ ELBF(ELBT_MOVE, 0, ev->border->win,
+ "%15.15s| BD_LOWER w:0x%08x c:0x%08x",
+ "MOVE", ev->border->win, ev->border->client.win);
}
}
else if (ev->type == E_STACKING_BELOW)
"[MOVE] ev:%15.15s w1:0x%08x c1:0x%08x w2:0x%08x c2:0x%08x\n",
"BD_LOWER_BELOW", ev->border->win, ev->border->client.win,
ev->stack->win, ev->stack->client.win);
+ ELBF(ELBT_MOVE, 0, ev->border->win,
+ "%15.15s| BD_LOWER_BELOW w1:0x%08x c1:0x%08x w2:0x%08x c2:0x%08x",
+ "MOVE", ev->border->win, ev->border->client.win,
+ ev->stack->win, ev->stack->client.win);
}
else
{
L(LT_EVENT_BD,
"[MOVE] ev:%15.15s w:0x%08x c:0x%08x\n",
"BD_RAISE", ev->border->win, ev->border->client.win);
+ ELBF(ELBT_MOVE, 0, ev->border->win,
+ "%15.15s| BD_RAISE w:0x%08x c:0x%08x",
+ "MOVE", ev->border->win, ev->border->client.win);
}
}
L(LT_EVENT_BD,
"[MOVE] ev:%15.15s w:0x%08x c:0x%08x\n", "BD_NEW_HOOK",
bd->win, bd->client.win);
+ ELBF(ELBT_MOVE, 0, bd->win,
+ "%15.15s| BD_NEW_HOOK w:0x%08x c:0x%08x",
+ "MOVE", bd->win, bd->client.win);
if (_e_mod_move_border_find(bd->win)) return;
L(LT_EVENT_BD,
"[MOVE] ev:%15.15s w:0x%08x c:0x%08x\n", "BD_DEL_HOOK",
bd->win, bd->client.win);
+ ELBF(ELBT_MOVE, 0, bd->win,
+ "%15.15s| BD_DEL_HOOK w:0x%08x c:0x%08x",
+ "MOVE", bd->win, bd->client.win);
// border is not processed by _e_border_eval()
// - case: bd_new -> bd_del
E_Move *m = e_mod_move_util_get();
E_Manager *man = (E_Manager *)obj;
E_Manager_Comp_Source *src = (E_Manager_Comp_Source *)msgdata;
+ E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
+ E_Move_Indicator_Widget *indi_widget = NULL;
L(LT_EVENT_X, "[MOVE] ev:E_MSG '%s':'%s'\n", name, info);
E_CHECK(m);
// handle only comp.manager msg
- if (strncmp(name, "comp.manager", sizeof("comp.manager"))) return;
-
- if (!strncmp(info, "resize.comp", sizeof("resize.comp")))
+ if (!strncmp(name, "comp.manager", sizeof("comp.manager")))
{
- L(LT_EVENT_X,
- "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
- info, e_manager_comp_src_window_get(man,src), man, src);
- }
- else if (!strncmp(info, "add.src", sizeof("add.src")))
- {
- L(LT_EVENT_X,
- "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
- info, e_manager_comp_src_window_get(man,src), man, src);
- }
- else if (!strncmp(info, "del.src", sizeof("del.src")))
- {
- L(LT_EVENT_X,
- "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
- info, e_manager_comp_src_window_get(man,src), man, src);
- }
- else if (!strncmp(info, "config.src", sizeof("config.src")))
- {
- L(LT_EVENT_X,
- "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
- info, e_manager_comp_src_window_get(man,src), man, src);
- // if Quickpanel is OnScreen then move quickpanel's below window with animation position.
- if (e_mod_move_quickpanel_visible_check()
- && !m->qp_scroll_with_clipping
- && !e_mod_move_quickpanel_objs_animation_state_get(e_mod_move_quickpanel_find()))
+ if (!strncmp(info, "resize.comp", sizeof("resize.comp")))
+ {
+ L(LT_EVENT_X,
+ "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
+ info, e_manager_comp_src_window_get(man,src), man, src);
+ }
+ else if (!strncmp(info, "add.src", sizeof("add.src")))
+ {
+ L(LT_EVENT_X,
+ "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
+ info, e_manager_comp_src_window_get(man,src), man, src);
+ }
+ else if (!strncmp(info, "del.src", sizeof("del.src")))
+ {
+ L(LT_EVENT_X,
+ "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
+ info, e_manager_comp_src_window_get(man,src), man, src);
+ }
+ else if (!strncmp(info, "config.src", sizeof("config.src")))
{
- e_mod_move_quickpanel_below_window_reset();
- e_mod_move_quickpanel_objs_move(e_mod_move_quickpanel_find(), 0, 0);
+ L(LT_EVENT_X,
+ "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
+ info, e_manager_comp_src_window_get(man,src), man, src);
+ // if Quickpanel is OnScreen then move quickpanel's below window with animation position.
+ if (e_mod_move_quickpanel_visible_check()
+ && !m->qp_scroll_with_clipping
+ && !e_mod_move_quickpanel_objs_animation_state_get(e_mod_move_quickpanel_find()))
+ {
+ e_mod_move_quickpanel_below_window_reset();
+ e_mod_move_quickpanel_objs_move(e_mod_move_quickpanel_find(), 0, 0);
+ }
+
+ // if indicator widget mode, then apply indicator widget visibility, position
+ if (m->elm_indicator_mode) e_mod_move_indicator_widget_apply();
+
+ e_mod_move_mini_apptray_widget_apply();
}
+ else if (!strncmp(info, "visibility.src", sizeof("visibility.src")))
+ {
+ L(LT_EVENT_X,
+ "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
+ info, e_manager_comp_src_window_get(man,src), man, src);
+ // if Quickpanel is OnScreen then move quickpanel's below window with animation position.
+ if (e_mod_move_quickpanel_visible_check()
+ && !m->qp_scroll_with_clipping
+ && !e_mod_move_quickpanel_objs_animation_state_get(e_mod_move_quickpanel_find()))
+ {
+ e_mod_move_quickpanel_below_window_reset();
+ e_mod_move_quickpanel_objs_move(e_mod_move_quickpanel_find(), 0, 0);
+ }
- // if indicator widget mode, then apply indicator widget visibility, position
- if (m->elm_indicator_mode) e_mod_move_indicator_widget_apply();
+ // if indicator widget mode, then apply indicator widget visibility, position
+ if (m->elm_indicator_mode) e_mod_move_indicator_widget_apply();
- e_mod_move_mini_apptray_widget_apply();
+ e_mod_move_mini_apptray_widget_apply();
+ }
}
- else if (!strncmp(info, "visibility.src", sizeof("visibility.src")))
+ else if (!strncmp(name, "screen-reader", sizeof("screen-reader")))
{
- L(LT_EVENT_X,
- "[MOVE] ev:E_MSG %15.15s w:0x%08x manager: %p, comp_src: %p\n",
- info, e_manager_comp_src_window_get(man,src), man, src);
- // if Quickpanel is OnScreen then move quickpanel's below window with animation position.
- if (e_mod_move_quickpanel_visible_check()
- && !m->qp_scroll_with_clipping
- && !e_mod_move_quickpanel_objs_animation_state_get(e_mod_move_quickpanel_find()))
+ if (!strncmp(info, "enable", sizeof("enable")))
{
- e_mod_move_quickpanel_below_window_reset();
- e_mod_move_quickpanel_objs_move(e_mod_move_quickpanel_find(), 0, 0);
- }
+ L(LT_EVENT_X, "[MOVE] ev:E_MSG [%s:%s]\n", name, info);
+ if (!m->screen_reader_state) // if screen-reader is not activate then work.
+ {
+ m->screen_reader_state = EINA_TRUE;
- // if indicator widget mode, then apply indicator widget visibility, position
- if (m->elm_indicator_mode) e_mod_move_indicator_widget_apply();
+ indi_widget = e_mod_move_indicator_widget_get();
+ if (indi_widget) e_mod_move_indicator_widget_del(indi_widget);
- e_mod_move_mini_apptray_widget_apply();
+ mini_apptray_widget = e_mod_move_mini_apptray_widget_get();
+ if (mini_apptray_widget) e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
+ }
+ }
+ else if (!strncmp(info, "disable", sizeof("disable")))
+ {
+ L(LT_EVENT_X, "[MOVE] ev:E_MSG [%s:%s]\n", name, info);
+ if (m->screen_reader_state) // if screen-reader is activate then work.
+ {
+ m->screen_reader_state = EINA_FALSE;
+ if (m->elm_indicator_mode) e_mod_move_indicator_widget_apply();
+ e_mod_move_mini_apptray_widget_apply();
+ }
+ }
}
}
int x = 0; int y = 0; int w = 0; int h = 0;
int angles[2];
E_Move *m = e_mod_move_util_get();
+ E_Border *bd = NULL;
E_CHECK(mb);
E_CHECK(m);
+ bd = mb->bd;
+ E_CHECK(bd);
+
e_mod_move_border_type_setup(mb);
+ mb->argb = ecore_x_window_argb_get(bd->win);
// Add Move Control Object
_e_mod_move_ctl_obj_add(mb);
// if current window is Indicator, then get indicator_geometry_property.
if (TYPE_INDICATOR_CHECK(mb))
- _e_mod_move_prop_indicator_geometry_get(win, m);
+ {
+ e_mod_move_util_prop_indicator_cmd_win_set(win, m);
+ _e_mod_move_prop_indicator_geometry_get(win, m);
+ }
}
static void
_e_mod_move_bd_del_intern(E_Move_Border *mb)
{
E_Move *m = NULL;
- Ecore_X_Window target_win;
E_CHECK(mb);
m = e_mod_move_util_get();
}
}
- if (!m->elm_indicator_mode)
- {
- // if indicator destroy and indicator controller is visible then destroy indicator controller
- if (TYPE_INDICATOR_CHECK(mb))
- {
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- e_mod_move_indicator_controller_unset(mb->m);
- }
- }
-
- // if indicator controller target win is destroy then destroy indicator controller
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- {
- if (mb->client_win == target_win)
- e_mod_move_indicator_controller_unset(mb->m);
- }
-
if (mb->shape_input) e_mod_move_border_shape_input_free(mb);
if (mb->contents) e_mod_move_border_contents_free(mb);
if (mb->anim_data) _e_mod_move_bd_anim_data_del(mb);
mb->y + shape_input_y);
}
}
-
- if (!m->elm_indicator_mode)
- {
- // update indicator_contoller's evas_object size & shape mask region
- if (TYPE_INDICATOR_CHECK(mb))
- {
- Ecore_X_Window target_win;
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- e_mod_move_indicator_controller_update(mb->m);
- }
- }
-
}
static void
E_CHECK_RETURN(state, EINA_FALSE);
ret = ecore_x_window_prop_card32_get(win,
- ATOM_MV_APPTRAY_STATE,
+ ATOM_MV_MINI_APPTRAY_STATE,
&mini_apptray_state,
1);
_e_mod_move_prop_indicator_state(Ecore_X_Event_Window_Property *ev)
{
Ecore_X_Window win;
- Ecore_X_Window target_win;
Eina_Bool indicator_state;
E_Move_Border *mb = NULL;
E_Move *m = NULL;
if (indicator_state)
{
mb->indicator_state = E_MOVE_INDICATOR_STATE_ON;
-
- if ((!m->elm_indicator_mode)
- && e_mod_move_indicator_controller_unset_policy_check(mb))
- {
- e_mod_move_indicator_controller_unset(mb->m);
- }
}
else
{
mb->indicator_state = E_MOVE_INDICATOR_STATE_OFF;
-
- if ((!m->elm_indicator_mode)
- &&e_mod_move_indicator_controller_set_policy_check(mb))
- {
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- e_mod_move_indicator_controller_unset(mb->m);
- e_mod_move_indicator_controller_set(mb);
- }
}
// control indicator widget state.
if (m->elm_indicator_mode)
_e_mod_move_prop_fullscreen_indicator_show_state(Ecore_X_Event_Window_Property *ev)
{
Ecore_X_Window win;
- Ecore_X_Window target_win;
Eina_Bool fullscreen_indicator_show_state;
E_Move_Border *mb = NULL;
E_Move *m = NULL;
if (fullscreen_indicator_show_state)
{
mb->fullscreen_indicator_show_state = E_MOVE_FULLSCREEN_INDICATOR_SHOW_STATE_ON;
-
- if ((!m->elm_indicator_mode)
- &&e_mod_move_indicator_controller_set_policy_check(mb))
- {
- if (e_mod_move_indicator_controller_state_get(mb->m, &target_win))
- e_mod_move_indicator_controller_unset(mb->m);
- e_mod_move_indicator_controller_set(mb);
- }
}
else
{
mb->fullscreen_indicator_show_state = E_MOVE_FULLSCREEN_INDICATOR_SHOW_STATE_OFF;
-
- if ((!m->elm_indicator_mode)
- &&e_mod_move_indicator_controller_unset_policy_check(mb))
- {
- e_mod_move_indicator_controller_unset(mb->m);
- }
}
}
m = e_mod_move_util_get();
E_CHECK_RETURN(m, EINA_FALSE);
- // if mini_apptray exist, then apply global input region
- E_CHECK_RETURN(e_mod_move_mini_apptray_find(), EINA_TRUE);
- E_CHECK_RETURN(e_mod_move_mini_apptray_widget_get(), EINA_TRUE);
-
- switch (e_mod_move_util_root_angle_get())
- {
- case 90:
- case 180:
- case 270:
- // currently, support angle 0 only. because, application is not ready yet.
- e_manager_comp_input_region_set(m->man, 0, 0, 0, 0);
- break;
- case 0:
- default :
- e_manager_comp_input_region_set(m->man,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h);
- break;
- }
-
return EINA_TRUE;
}
comp_obj_visible = e_mod_move_util_compositor_object_visible_get(mb);
- if (REGION_INSIDE_ZONE(mb, zone)) state = EINA_TRUE;
- else state = EINA_FALSE;
-
+ if (open)
+ {
+ if (mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE) state = EINA_TRUE;
+ else state = EINA_FALSE;
+ }
+ else
+ {
+ if (REGION_INSIDE_ZONE(mb, zone)) state = EINA_TRUE;
+ else state = EINA_FALSE;
+ }
if ((!m->elm_indicator_mode)
&& e_mod_move_indicator_click_get())
{
{
if (mb == qp_mb) // Quickpanel Case
{
- if ((at_mb) && (REGION_INSIDE_ZONE(at_mb, mb->bd->zone)))
+ if ((at_mb) && (at_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
{
L(LT_EVENT_X,
"[MOVE] ev:%15.15s _NET_WM_WINDOW_SHOW error. w:0x%07x(state:%d) request:%d, Apptray in On Screen\n",
return EINA_FALSE;
}
+ if ((mini_at_mb) && (mini_at_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
+ {
+ L(LT_EVENT_X,
+ "[MOVE] ev:%15.15s _NET_WM_WINDOW_SHOW error. w:0x%07x(state:%d) request:%d, Mini Apptray in On Screen\n",
+ "X_CLIENT_MESSAGE", win, state, open);
+ return EINA_FALSE;
+ }
+
if ((fullscr_mb = e_mod_move_util_visible_fullscreen_window_find()))
{
E_CHECK_RETURN(e_mod_move_panel_scrollable_get(fullscr_mb, E_MOVE_PANEL_TYPE_QUICKPANEL), EINA_FALSE);
}
else if (mb == at_mb) // Apptray Case
{
- if ((qp_mb) && (REGION_INSIDE_ZONE(qp_mb, mb->bd->zone)))
+ if ((qp_mb) && (qp_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
{
L(LT_EVENT_X,
"[MOVE] ev:%15.15s _NET_WM_WINDOW_SHOW error. w:0x%07x(state:%d) request:%d, Quickpanel in On Screen\n",
}
else if (mb == mini_at_mb) // MINI_Apptray Case
{
- if ((qp_mb) && (REGION_INSIDE_ZONE(qp_mb, mb->bd->zone)))
+ if ((qp_mb) && (qp_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
{
L(LT_EVENT_X,
"[MOVE] ev:%15.15s _NET_WM_WINDOW_SHOW error. w:0x%07x(state:%d) request:%d, Quickpanel in On Screen\n",
return EINA_FALSE;
}
- if ((at_mb) && (REGION_INSIDE_ZONE(at_mb, mb->bd->zone)))
+ if ((at_mb) && (at_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
{
L(LT_EVENT_X,
"[MOVE] ev:%15.15s _NET_WM_WINDOW_SHOW error. w:0x%07x(state:%d) request:%d, Apptray in On Screen\n",
_e_mod_move_msg_window_show_internal_mini_apptray_check(mini_at_mb);
e_mod_move_mini_apptray_dim_show(mini_at_mb);
- e_mod_move_mini_apptray_objs_add(mini_at_mb);
- // mini_apptray_objs_animation_layer_set
- e_mod_move_mini_apptray_objs_animation_layer_set(mini_at_mb);
+
+ if (REGION_INSIDE_ZONE(mini_at_mb, mini_at_mb->bd->zone))
+ {
+ e_mod_move_mini_apptray_e_border_move(mini_at_mb, -10000, -10000);
+ e_mod_move_mini_apptray_objs_add_with_pos(mini_at_mb, -10000, -10000);
+ }
+ else
+ e_mod_move_mini_apptray_objs_add(mini_at_mb);
// send mini_apptray to "move start message".
LOG(LOG_DEBUG, "WM_WINDOW_SHOW", "[e17:X_CLIENT_MESSAGE:ApptrayShow:ANIMATION_START]");
m->indicator_apptray_region_ratio.landscape = _move_mod->conf->indicator_apptray_landscape_region_ratio;
m->qp_scroll_with_visible_win = _move_mod->conf->qp_scroll_with_visible_win;
m->qp_scroll_with_clipping = _move_mod->conf->qp_scroll_with_clipping;
- m->flick_speed_limit = _move_mod->conf->flick_speed_limit;
+ m->flick_limit.speed = _move_mod->conf->flick_limit.speed;
+ m->flick_limit.angle = _move_mod->conf->flick_limit.angle;
+ m->flick_limit.distance = _move_mod->conf->flick_limit.distance;
+ m->flick_limit.distance_rate = _move_mod->conf->flick_limit.distance_rate;
m->animation_duration = _move_mod->conf->animation_duration;
m->dim_max_opacity = _move_mod->conf->dim_max_opacity;
m->dim_min_opacity = _move_mod->conf->dim_min_opacity;
_e_mod_move_apptray_cb_motion_move, mb);
e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_apptray_cb_motion_end, mb);
- e_mod_move_event_send_all_set(mco->event, EINA_TRUE);
+ e_mod_move_event_propagate_type_set(mco->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
}
EINTERN E_Move_Border *
e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
e_mod_move_bd_move_objs_show(mb);
+ if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
}
return EINA_TRUE;
}
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_APPTRAY_CHECK(mb), EINA_FALSE);
e_mod_move_bd_move_objs_del(mb, mb->objs);
+ e_mod_move_util_rotation_unlock(mb->m);
mb->objs = NULL;
return EINA_TRUE;
}
e_mod_move_bd_move_dim_objs_show(at_data->dim_objs);
at_data->opacity = dim_min;
mb->data = at_data;
- e_mod_move_util_rotation_lock(mb->m);
// it is used for apptray input only window
_e_mod_move_apptray_bg_touch_win_show(mb);
e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_TRUE);
at_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
- if (at_data->dim_objs)
- e_mod_move_util_rotation_lock(mb->m);
}
if (at_data->dim_objs)
{
// it is used for apptray input only window
_e_mod_move_apptray_bg_touch_win_hide(mb);
- e_mod_move_util_rotation_unlock(mb->m);
-
// Composite mode set false
e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_FALSE);
EINTERN Ecore_X_Atom ATOM_CLIENT_PANEL = 0;
EINTERN Ecore_X_Atom ATOM_MV_PANEL_SCROLLABLE_STATE = 0;
EINTERN Ecore_X_Atom ATOM_MV_INDICATOR_GEOMETRY = 0;
+EINTERN Ecore_X_Atom ATOM_INDICATOR_CMD_WIN = 0;
+EINTERN Ecore_X_Atom ATOM_ACTIVE_INDICATOR_WIN = 0;
/* local subsystem globals */
static Eina_Hash *atoms_hash = NULL;
"_E_MOVE_QUICKPANEL_STATE",
"_NET_CLIENT_PANEL",
"_E_MOVE_PANEL_SCROLLABLE_STATE",
- "_E_MOVE_INDICATOR_GEOMETRY"
+ "_E_MOVE_INDICATOR_GEOMETRY",
+ "_E_INDICATOR_CMD_WIN",
+ "_E_ACTIVE_INDICATOR_WIN"
};
static const char *external_atom_names[] = {
ATOM_CLIENT_PANEL = atoms[i++];
ATOM_MV_PANEL_SCROLLABLE_STATE = atoms[i++];
ATOM_MV_INDICATOR_GEOMETRY = atoms[i++];
+ ATOM_INDICATOR_CMD_WIN = atoms[i++];
+ ATOM_ACTIVE_INDICATOR_WIN = atoms[i++];
for (i = 0; i < n; i++)
{
extern EINTERN Ecore_X_Atom ATOM_CLIENT_PANEL;
extern EINTERN Ecore_X_Atom ATOM_MV_PANEL_SCROLLABLE_STATE;
extern EINTERN Ecore_X_Atom ATOM_MV_INDICATOR_GEOMETRY;
+extern EINTERN Ecore_X_Atom ATOM_INDICATOR_CMD_WIN;
+extern EINTERN Ecore_X_Atom ATOM_ACTIVE_INDICATOR_WIN;
EINTERN int e_mod_move_atoms_init(void);
EINTERN int e_mod_move_atoms_shutdown(void);
#define TYPE_PWLOCK_CHECK(a) \
((a)->type == E_MOVE_BORDER_TYPE_PWLOCK)
+#define TYPE_NOTIFICATION_CHECK(a) \
+ ((a)->type == E_MOVE_BORDER_TYPE_NOTIFICATION)
+
typedef enum _E_Move_Border_Type
{
E_MOVE_BORDER_TYPE_UNKNOWN = 0,
E_CONFIG_VAL(D, T, qp_scroll_with_clipping, UCHAR);
E_CONFIG_VAL(D, T, dim_max_opacity, INT);
E_CONFIG_VAL(D, T, dim_min_opacity, INT);
- E_CONFIG_VAL(D, T, flick_speed_limit, DOUBLE);
+ E_CONFIG_VAL(D, T, flick_limit.speed, DOUBLE);
+ E_CONFIG_VAL(D, T, flick_limit.angle, DOUBLE);
+ E_CONFIG_VAL(D, T, flick_limit.distance, DOUBLE);
+ E_CONFIG_VAL(D, T, flick_limit.distance_rate, DOUBLE);
E_CONFIG_VAL(D, T, animation_duration, DOUBLE);
E_CONFIG_VAL(D, T, event_log, UCHAR);
E_CONFIG_VAL(D, T, event_log_count, INT);
cfg->qp_scroll_with_clipping = 1;
cfg->dim_max_opacity = 200;
cfg->dim_min_opacity = 0;
- cfg->flick_speed_limit = 200.0;
+ cfg->flick_limit.speed = 200.0;
+ cfg->flick_limit.angle = 0.26; // tangent angle . angle 15's tangent value
+ cfg->flick_limit.distance = 105.0; // sqrt((50 * 50) + (50 * 50)) * 1.5
+ cfg->flick_limit.distance_rate = 0.1; // screen's 10%
cfg->animation_duration = 0.4;
cfg->event_log = 1;
cfg->event_log_count = 600;
cfg->indicator_widget_geometry[E_MOVE_ANGLE_270].h = 1280;
// mini_apptray widget gemometry setting
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x = 0;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y = 1230;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y = 1260;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w = 720;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h = 50;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x = 670;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h = 20;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].x = 700;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].y = 0;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w = 50;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].w = 20;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_90].h = 1280;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].x = 0;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].y = 0;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].w = 720;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h = 50;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_180].h = 20;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].x = 0;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].y = 0;
- cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w = 50;
+ cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].w = 20;
cfg->mini_apptray_widget_geometry[E_MOVE_ANGLE_270].h = 1280;
return cfg;
unsigned char qp_scroll_with_clipping; // 1: quickpanel scroll with clipping 0: qp scroll without clipping
int dim_max_opacity; // dim max opacity
int dim_min_opacity; // dim min opacity
- double flick_speed_limit; // flick speed limitation
+
+ struct {
+ double speed;
+ double angle;
+ double distance;
+ double distance_rate;
+ } flick_limit; // indicator / quickpanel / apptray flick limitation
+
double animation_duration; // apptray / quickpanel move animation duration
unsigned char event_log; // 1 :ecore & evas_object debug event logging 0: do not log event
int event_log_count; // ecore & evas_object debug event logging count
zy = mco->zone->y;
}
evas_object_move(mco->obj, x - zx, y - zy);
+ mco->geometry.x = x;
+ mco->geometry.y = y;
}
}
if (!mco) continue;
if (!mco->obj) continue;
evas_object_resize(mco->obj, w, h);
+ mco->geometry.w = w;
+ mco->geometry.h = h;
}
}
}
}
+EINTERN void
+e_mod_move_bd_move_ctl_objs_geometry_get(E_Move_Border *mb,
+ int *x,
+ int *y,
+ int *w,
+ int *h)
+{
+ Eina_List *l;
+ E_Move_Control_Object *mco;
+
+ E_CHECK(mb);
+ E_CHECK(x);
+ E_CHECK(y);
+ E_CHECK(w);
+ E_CHECK(h);
+
+ EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
+ {
+ if (!mco) continue;
+ *x = mco->geometry.x;
+ *y = mco->geometry.y;
+ *w = mco->geometry.w;
+ *h = mco->geometry.h;
+ }
+}
+
/* local subsystem functions */
static void
_e_mod_move_cb_control_object_del(void *data,
Evas_Object *obj; // compositor's evas(window) object
E_Move_Event *event; // evas object's event handler object
+
+ struct {
+ int x;
+ int y;
+ int w;
+ int h;
+ } geometry;
};
EINTERN E_Move_Control_Object *e_mod_move_ctl_obj_add(E_Move_Border *mb, E_Move_Canvas *canvas);
EINTERN void e_mod_move_bd_move_ctl_objs_lower(E_Move_Border *mb);
EINTERN void e_mod_move_bd_move_ctl_objs_stack_above(E_Move_Border *mb, E_Move_Border *mb2);
EINTERN void e_mod_move_bd_move_ctl_objs_color_set(E_Move_Border *mb, int r, int g, int b, int a);
+EINTERN void e_mod_move_bd_move_ctl_objs_geometry_get(E_Move_Border *mb, int *x, int *y, int *w, int *h);
#endif
#endif
static void _e_mod_move_debug_borders_visibility_dump(E_Move *m, FILE *fs);
static void _e_mod_move_debug_event_cb_dump(E_Move *m, FILE *fs);
static void _e_mod_move_debug_control_objects_info_dump(E_Move *m, E_Move_Canvas *canvas, FILE *fs);
-static void _e_mod_move_debug_indicator_controller_info_dump(E_Move *m, E_Move_Canvas *canvas, FILE *fs);
static void _e_mod_move_debug_canvas_info_dump(E_Move *m, E_Move_Canvas *canvas, FILE *fs);
static void _e_mod_move_debug_evas_stack_dump(E_Move *m, E_Move_Canvas *canvas, FILE *fs);
static void _e_mod_move_debug_dim_objects_info_dump(E_Move *m, E_Move_Canvas *canvas, FILE *fs);
static void _e_mod_move_debug_event_logs_dump(E_Move *m, FILE *fs);
static void _e_mod_move_debug_control_objects_visible_set(E_Move *m, E_Move_Canvas *canvas, Eina_Bool visi);
static void _e_mod_move_debug_widget_objects_visible_set(E_Move *m, E_Move_Canvas *canvas, Eina_Bool visi);
-static void _e_mod_move_debug_indicator_controller_objects_visible_set(E_Move *m, E_Move_Canvas *canvas, Eina_Bool visi);
static void _e_mod_move_debug_objects_visible_set(Eina_Bool visi);
/* local subsystem functions */
i++;
}
fprintf(fs, "E------------------------------------------------------------------------------------------------------------------------------------\n");
+ fprintf(fs, "\nB-------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
+ fprintf(fs, " Screen Reader State: %d\n", m->screen_reader_state);
+ fprintf(fs, "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
}
static void
}
static void
-_e_mod_move_debug_indicator_controller_info_dump(E_Move *m,
- E_Move_Canvas *canvas,
- FILE *fs)
-{
- Eina_List *l;
- E_Move_Evas_Object *meo, *_meo = NULL;
- int x, y, w, h, i = 1;
- Ecore_X_Window cid = 0;
- Ecore_X_Window target_win;
- char *netwm_name = NULL;
- E_Move_Indicator_Controller *mic = NULL;
-
- fprintf(fs, "\n\nB----------------------------------------------------------------------------------------------\n");
- fprintf(fs, " <MOVE MODULE> Indicator Controller Object Info ( It is used for FullScreen Window ) \n");
- fprintf(fs, "-----------------------------------------------------------------------------------------------\n");
- if (canvas->zone)
- {
- fprintf(fs, " canvas->zone:%p num:%d %d,%d %dx%d\n",
- (void *)canvas->zone, canvas->zone->num,
- canvas->zone->x, canvas->zone->y,
- canvas->zone->w, canvas->zone->h);
- }
- fprintf(fs, "------------------------------------------------------------------------------------------------\n");
-
- fprintf(fs, "------------------------------------------------------------------------------------------------\n");
- fprintf(fs, " NO TARGET_WIN_ID indicator_control_obj found_o ex ey ew eh | V | NETWM_NAME\n");
- fprintf(fs, "------------------------------------------------------------------------------------------------\n");
- Evas_Object *o = evas_object_top_get(canvas->evas);
- Eina_Bool found = 0;
-
- if (e_mod_move_indicator_controller_state_get(m, &target_win))
- {
- mic = m->indicator_controller;
- if (mic)
- {
- while (o)
- {
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- if (meo->canvas != canvas) continue;
- if (meo->obj == o)
- {
- found = 1;
- _meo = meo;
- break;
- }
- }
-
- evas_object_geometry_get(o, &x, &y, &w, &h);
- if (found && _meo)
- {
- cid = target_win;
- ecore_x_netwm_name_get(cid, &netwm_name);
- fprintf(fs,
- " %2d 0x%07x %p %p %4d %4d %4d x %4d %s %s\n",
- i,
- target_win,
- (void *)_meo->obj,
- (void *)o,
- x, y, w, h,
- evas_object_visible_get(_meo->obj) ? "v" : "",
- netwm_name ? netwm_name : "");
- }
-
- o = evas_object_below_get(o);
- found = 0;
- _meo = NULL;
- if (netwm_name) free(netwm_name);
- netwm_name = NULL;
- cid = 0;
- i++;
- }
- }
- }
- fprintf(fs, "E-----------------------------------------------------------------------------------------------\n");
-}
-
-static void
_e_mod_move_debug_canvas_info_dump(E_Move *m,
E_Move_Canvas *canvas,
FILE *fs)
}
static void
-_e_mod_move_debug_indicator_controller_objects_visible_set(E_Move *m,
- E_Move_Canvas *canvas,
- Eina_Bool visi)
-{
- Eina_List *l;
- E_Move_Evas_Object *meo, *_meo = NULL;
- Evas_Object *o = evas_object_top_get(canvas->evas);
- Eina_Bool found = 0;
- Ecore_X_Window target_win;
- E_Move_Indicator_Controller *mic = NULL;
-
- if (e_mod_move_indicator_controller_state_get(m, &target_win))
- {
- mic = m->indicator_controller;
- while (o)
- {
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- if (meo->canvas != canvas) continue;
- if (meo->obj == o)
- {
- found = 1;
- _meo = meo;
- break;
- }
- }
-
- if (found && _meo)
- {
- if (visi)
- e_mod_move_evas_objs_color_set(mic->objs, 0, 255, 0, 100);
- else
- e_mod_move_evas_objs_color_set(mic->objs, 0, 0, 0, 0);
- }
-
- o = evas_object_below_get(o);
- found = 0;
- _meo = NULL;
- }
- }
-}
-
-static void
_e_mod_move_debug_objects_visible_set(Eina_Bool visi)
{
E_Move *m = NULL;
if (!canvas) continue;
_e_mod_move_debug_control_objects_visible_set(m, canvas, visi);
_e_mod_move_debug_widget_objects_visible_set(m, canvas, visi);
- _e_mod_move_debug_indicator_controller_objects_visible_set(m,
- canvas,
- visi);
}
}
_e_mod_move_debug_control_objects_info_dump(m, canvas, fs);
_e_mod_move_debug_canvas_info_dump(m, canvas, fs);
_e_mod_move_debug_dim_objects_info_dump(m, canvas, fs);
- _e_mod_move_debug_indicator_controller_info_dump(m, canvas, fs);
}
_e_mod_move_debug_event_logs_dump(m, fs);
struct _E_Move_Event
{
- E_Move_Event_State state;
- Evas_Object *obj;
- Eina_List *queue;
- Eina_Bool send_all;
- Eina_Bool find_redirect_win;
- Eina_Bool click;
- E_Move_Event_Data_Type data_type;
+ E_Move_Event_State state;
+ Evas_Object *obj;
+ Eina_List *queue;
+ Eina_Bool click;
+ E_Move_Event_Data_Type data_type;
+ E_Move_Event_Propagate_Type propagate_type;
struct {
- Ecore_X_Window id;
- int angle;
- E_Move_Event_Angle_Cb fn_angle_get;
+ Ecore_X_Window id;
+ int angle;
+ E_Move_Event_Angle_Cb fn_angle_get;
+ E_Move_Event_Win_Find_Cb fn_win_find;
} win;
struct {
// if log list is full, delete first log
E_Move_Event_Log *first_log = (E_Move_Event_Log*)eina_list_nth(m->ev_logs, 0);
m->ev_logs = eina_list_remove(m->ev_logs, first_log);
+ memset(first_log, 0, sizeof(E_Move_Event_Log));
+ E_FREE(first_log);
}
m->ev_logs = eina_list_append(m->ev_logs, log);
}
EVAS_CALLBACK_MOUSE_DOWN);
if (!motion) goto event_pass;
- if (ev->find_redirect_win)
+ if (ev->win.fn_win_find)
{
- E_Border* find_bd = e_mod_move_util_border_find_by_pointer(motion->coord.x, motion->coord.y);
- if (find_bd) ev->win.id = find_bd->client.win;
+ Ecore_X_Window find_win;
+ find_win = ev->win.fn_win_find(motion);
+
+ if (find_win) ev->win.id = find_win;
else ev->win.id = 0;
}
e_mod_move_event_angle_set(ev, angles[0]);
}
- if (ev->send_all)
+ // E_MOVE_EVENT_PROPAGATE_TYPE_NONE case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_NONE)
+ {
+ _ev_cb_call(ev, motion);
+ _motion_info_free(motion);
+ motion = NULL;
+ goto event_none;
+ }
+
+ // E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY)
{
- // ev->state = E_MOVE_EVENT_STATE_HOLD; // is it right?
_ev_cb_call(ev, motion);
_motion_info_free(motion);
motion = NULL;
goto event_pass;
}
+ // E_MOVE_EVENT_PROPAGATE_TYPE_DEFERRED case
if (!ev->ev_check.cb)
{
ev->state = E_MOVE_EVENT_STATE_HOLD;
ev->obj,
event_info,
EVAS_CALLBACK_MOUSE_DOWN);
+ return;
+
+event_none:
+ ev->state = E_MOVE_EVENT_STATE_PASS;
+ return;
}
static void
}
#endif
- if (ev->send_all)
+ // E_MOVE_EVENT_PROPAGATE_TYPE_NONE case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_NONE)
+ {
+ motion = _motion_info_new(event_info,
+ EVAS_CALLBACK_MOUSE_MOVE);
+ if (!motion) goto event_none;
+ _ev_cb_call(ev, motion);
+ _motion_info_free(motion);
+ motion = NULL;
+ goto event_none;
+ }
+
+ // E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY)
{
motion = _motion_info_new(event_info,
EVAS_CALLBACK_MOUSE_MOVE);
goto event_pass;
}
+ // E_MOVE_EVENT_PROPAGATE_TYPE_DEFERRED case
switch (ev->state)
{
case E_MOVE_EVENT_STATE_CHECK:
ev->obj,
event_info,
EVAS_CALLBACK_MOUSE_MOVE);
+ return;
+
+event_none:
+ ev->state = E_MOVE_EVENT_STATE_PASS;
+ e_mod_move_event_data_clear(ev);
}
static void
// if log list is full, delete first log
E_Move_Event_Log *first_log = (E_Move_Event_Log*)eina_list_nth(m->ev_logs, 0);
m->ev_logs = eina_list_remove(m->ev_logs, first_log);
+ memset(first_log, 0, sizeof(E_Move_Event_Log));
+ E_FREE(first_log);
}
m->ev_logs = eina_list_append(m->ev_logs, log);
}
}
#endif
- if (ev->send_all)
+ // E_MOVE_EVENT_PROPAGATE_TYPE_NONE case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_NONE)
+ {
+ motion = _motion_info_new(event_info,
+ EVAS_CALLBACK_MOUSE_UP);
+ if (!motion) goto event_none;
+ _ev_cb_call(ev, motion);
+ _motion_info_free(motion);
+ motion = NULL;
+ goto event_none;
+ }
+
+ // E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY case
+ if (ev->propagate_type == E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY)
{
motion = _motion_info_new(event_info,
EVAS_CALLBACK_MOUSE_UP);
goto event_pass;
}
+ // E_MOVE_EVENT_PROPAGATE_TYPE_DEFERRED case
switch (ev->state)
{
case E_MOVE_EVENT_STATE_CHECK:
event_info,
EVAS_CALLBACK_MOUSE_UP);
ev->state = E_MOVE_EVENT_STATE_UNKOWN;
+ return;
+
+event_none:
+ ev->state = E_MOVE_EVENT_STATE_PASS;
+ e_mod_move_event_data_clear(ev);
+ ev->state = E_MOVE_EVENT_STATE_UNKOWN;
}
static Eina_Bool
{
case EVAS_CALLBACK_MOUSE_DOWN:
down = event_info;
- ecore_x_mouse_down_send(id,
- down->canvas.x -x,
- down->canvas.y -y,
- down->button);
+ e_mod_move_util_mouse_down_send(id,
+ down->canvas.x -x,
+ down->canvas.y -y,
+ down->button);
break;
case EVAS_CALLBACK_MOUSE_UP:
up = event_info;
- ecore_x_mouse_up_send(id,
- up->canvas.x -x,
- up->canvas.y -y,
- up->button);
+ e_mod_move_util_mouse_up_send(id,
+ up->canvas.x -x,
+ up->canvas.y -y,
+ up->button);
break;
case EVAS_CALLBACK_MOUSE_MOVE:
move = event_info;
- ecore_x_mouse_move_send(id,
- move->cur.output.x -x,
- move->cur.output.y -y);
+ e_mod_move_util_mouse_move_send(id,
+ move->cur.output.x -x,
+ move->cur.output.y -y);
break;
default:
ev->win.id = 0;
ev->win.angle = 0;
ev->win.fn_angle_get = NULL;
+ ev->win.fn_win_find = NULL;
ev->ev_check.cb = NULL;
ev->ev_check.data = NULL;
ev->obj = NULL;
}
EINTERN Eina_Bool
-e_mod_move_event_send_all_set(E_Move_Event *ev,
- Eina_Bool send_all)
+e_mod_move_event_propagate_type_set(E_Move_Event *ev,
+ E_Move_Event_Propagate_Type type)
{
if (!ev) return EINA_FALSE;
- ev->send_all = send_all;
+ ev->propagate_type = type;
return EINA_TRUE;
}
}
EINTERN Eina_Bool
-e_mod_move_event_find_redirect_win_set(E_Move_Event *ev,
- Eina_Bool find_redirect_win)
+e_mod_move_event_win_find_cb_set(E_Move_Event *ev,
+ E_Move_Event_Win_Find_Cb cb)
{
if (!ev) return EINA_FALSE;
- ev->find_redirect_win = find_redirect_win;
+ ev->win.fn_win_find = cb;
return EINA_TRUE;
}
+
+EINTERN Ecore_X_Window
+e_mod_move_event_win_get(E_Move_Event *ev)
+{
+ if (!ev) return 0;
+ return ev->win.id;
+}
typedef struct _E_Move_Event E_Move_Event;
typedef struct _E_Move_Event_Motion_Info E_Move_Event_Motion_Info;
-typedef enum _E_Move_Event_Type E_Move_Event_Type;
-typedef enum _E_Move_Event_State E_Move_Event_State;
-typedef enum _E_Move_Event_Data_Type E_Move_Event_Data_Type;
+typedef enum _E_Move_Event_Type E_Move_Event_Type;
+typedef enum _E_Move_Event_State E_Move_Event_State;
+typedef enum _E_Move_Event_Data_Type E_Move_Event_Data_Type;
+typedef enum _E_Move_Event_Propagate_Type E_Move_Event_Propagate_Type;
-typedef Eina_Bool (*E_Move_Event_Cb) (void *, void *);
-typedef Eina_Bool (*E_Move_Event_Angle_Cb) (Ecore_X_Window, int *, int *);
-typedef E_Move_Event_State (*E_Move_Event_Check_Cb) (E_Move_Event *, void *);
+typedef Eina_Bool (*E_Move_Event_Cb) (void *, void *);
+typedef Eina_Bool (*E_Move_Event_Angle_Cb) (Ecore_X_Window, int *, int *);
+typedef E_Move_Event_State (*E_Move_Event_Check_Cb) (E_Move_Event *, void *);
+typedef Ecore_X_Window (*E_Move_Event_Win_Find_Cb) (void *);
enum _E_Move_Event_Type
{
E_MOVE_EVENT_DATA_TYPE_WIDGET_INDICATOR
};
+enum _E_Move_Event_Propagate_Type
+{
+ E_MOVE_EVENT_PROPAGATE_TYPE_NONE = 0,
+ E_MOVE_EVENT_PROPAGATE_TYPE_DEFERRED,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY
+};
+
/* event management functions */
EINTERN E_Move_Event *e_mod_move_event_new(Ecore_X_Window win, Evas_Object *obj);
EINTERN void e_mod_move_event_free(E_Move_Event *ev);
EINTERN Eina_Bool e_mod_move_event_click_set(E_Move_Event *ev, Eina_Bool click);
EINTERN Eina_Bool e_mod_move_event_click_get(E_Move_Event *ev);
EINTERN Eina_Bool e_mod_move_event_data_clear(E_Move_Event *ev);
-EINTERN Eina_Bool e_mod_move_event_send_all_set(E_Move_Event *ev, Eina_Bool send_all);
+EINTERN Eina_Bool e_mod_move_event_propagate_type_set(E_Move_Event *ev, E_Move_Event_Propagate_Type type);
EINTERN Eina_Bool e_mod_move_event_data_type_set(E_Move_Event *ev, E_Move_Event_Data_Type type);
-EINTERN Eina_Bool e_mod_move_event_find_redirect_win_set(E_Move_Event *ev, Eina_Bool find_redirect_win);
-
+EINTERN Eina_Bool e_mod_move_event_win_find_cb_set(E_Move_Event *ev, E_Move_Event_Win_Find_Cb cb);
+EINTERN Ecore_X_Window e_mod_move_event_win_get(E_Move_Event *ev);
#endif
#endif
double speed = 0.0;
int dx, dy;
double dt;
+ double tand = 0.0;
+ double flick_angle = 0.0;
+ double distance = 0.0;
+ double flick_distance = 0.0;
Eina_Bool state = EINA_FALSE;
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(mb->m, EINA_FALSE);
E_CHECK_RETURN(mb->flick_data, EINA_FALSE);
flick = mb->flick_data;
- flick_speed = mb->m->flick_speed_limit;
+ flick_speed = mb->m->flick_limit.speed;
+ flick_angle = mb->m->flick_limit.angle;
+ flick_distance = mb->m->flick_limit.distance;
dx = flick->ex - flick->sx;
dy = flick->ey - flick->sy;
{
case 90:
case 270:
- if ((abs(dy)*3) > abs(dx)) return EINA_FALSE;
+ tand = 1.0 * abs(dx) / abs(dy);
+ if (tand < flick_angle) return EINA_FALSE;
break;
case 0:
case 180:
default :
- if ((abs(dx)*3) > abs(dy)) return EINA_FALSE;
+ tand = 1.0 * abs(dy) / abs(dx);
+ if (tand < flick_angle) return EINA_FALSE;
break;
}
}
- speed = sqrt((dx * dx) + (dy * dy)) / dt;
+ distance = sqrt((dx * dx) + (dy * dy));
+ if (distance < flick_distance) return EINA_FALSE;
+ speed = distance / dt;
if (speed > flick_speed) state = EINA_TRUE;
return state;
}
EINTERN Eina_Bool
+e_mod_move_flick_state_get2(E_Move_Border *mb)
+{
+ E_Move_Flick_Data *flick;
+ Eina_Bool state = EINA_FALSE;
+ E_Zone *zone = NULL;
+ double flick_distance_rate = 0.0;
+ double check_distance = 0.0;
+ int x = 0, y = 0;
+ int zone_w = 0, zone_h = 0;
+
+ E_CHECK_RETURN(mb, EINA_FALSE);
+ E_CHECK_RETURN(mb->m, EINA_FALSE);
+ E_CHECK_RETURN(mb->bd, EINA_FALSE);
+ E_CHECK_RETURN(mb->bd->zone, EINA_FALSE);
+ E_CHECK_RETURN(mb->flick_data, EINA_FALSE);
+
+ flick = mb->flick_data;
+ x = flick->ex;
+ y = flick->ey;
+
+ zone = mb->bd->zone;
+ zone_w = zone->w;
+ zone_h = zone->h;
+
+ flick_distance_rate = mb->m->flick_limit.distance_rate;
+
+ switch(mb->angle)
+ {
+ case 90:
+ check_distance = zone_w * ( 1.0 - flick_distance_rate);
+ if (check_distance > x ) state = EINA_TRUE;
+ break;
+ case 180:
+ check_distance = zone_h * flick_distance_rate;
+ if (check_distance < y ) state = EINA_TRUE;
+ break;
+ case 270:
+ check_distance = zone_w * flick_distance_rate;
+ if (check_distance < x ) state = EINA_TRUE;
+ break;
+ case 0:
+ default :
+ check_distance = zone_h * ( 1.0 - flick_distance_rate);
+ if (check_distance > y ) state = EINA_TRUE;
+ break;
+ }
+
+ return state;
+}
+
+EINTERN Eina_Bool
e_mod_move_flick_data_get(E_Move_Border *mb,
int *sx,
int *sy,
EINTERN Eina_Bool e_mod_move_flick_data_init(E_Move_Border *mb, int x, int y);
EINTERN Eina_Bool e_mod_move_flick_data_update(E_Move_Border *mb, int x, int y);
EINTERN Eina_Bool e_mod_move_flick_state_get(E_Move_Border *mb, Eina_Bool direction_check);
+EINTERN Eina_Bool e_mod_move_flick_state_get2(E_Move_Border *mb);
EINTERN void e_mod_move_flick_data_free(E_Move_Border *mb);
EINTERN Eina_Bool e_mod_move_flick_data_get(E_Move_Border *mb, int *sx, int *sy, int *ex, int *ey, double *st, double *et);
_e_mod_move_indicator_cb_motion_move, mb);
e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_indicator_cb_motion_end, mb);
- e_mod_move_event_send_all_set(mco->event, EINA_TRUE);
+ e_mod_move_event_propagate_type_set(mco->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
if (e_mod_move_border_shape_input_new(mb))
e_mod_move_border_shape_input_rect_set(mb, mb->x, mb->y, mb->w, mb->h);
+++ /dev/null
-#include "e_mod_move_shared_types.h"
-#include "e_mod_move_debug.h"
-#include "e_mod_move.h"
-
-/* local subsystem functions */
-static Eina_Bool _e_mod_move_indi_ctl_event_clear(E_Move_Indicator_Controller *mic);
-static Eina_Bool _e_mod_move_indi_ctl_cb_motion_start(void *data, void *event_info);
-static Eina_Bool _e_mod_move_indi_ctl_cb_motion_move(void *data, void *event_info);
-static Eina_Bool _e_mod_move_indi_ctl_cb_motion_end(void *data, void *event_info);
-static void _e_mod_move_indi_ctl_obj_event_setup(E_Move_Indicator_Controller *mic, E_Move_Evas_Object *meo);
-
-/* local subsystem functions */
-static Eina_Bool
-_e_mod_move_indi_ctl_event_clear(E_Move_Indicator_Controller *mic)
-{
- Eina_Bool click = EINA_FALSE;
- E_Move_Evas_Object *meo = NULL;
- Eina_List *l;
-
- E_CHECK_RETURN(mic, EINA_FALSE);
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- click = e_mod_move_event_click_get(meo->event);
- }
- E_CHECK_RETURN(click, EINA_FALSE);
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- e_mod_move_event_data_clear(meo->event);
- e_mod_move_event_click_set(meo->event, EINA_FALSE);
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_mod_move_indi_ctl_cb_motion_start(void *data,
- void *event_info)
-{
- E_Move *m = NULL;
- E_Move_Border *indi_mb = NULL;
- E_Move_Border *target_mb = NULL;
- E_Move_Indicator_Controller *mic = (E_Move_Indicator_Controller *)data;
- E_Move_Event_Motion_Info *info;
- E_Move_Evas_Object *meo = NULL;
- Eina_List *l;
-
- info = (E_Move_Event_Motion_Info *)event_info;
- m = e_mod_move_util_get();
- if (!mic || !info || !m) return EINA_FALSE;
- L(LT_EVENT_OBJ,
- "[MOVE] ev:%15.15s (%d,%d) %s()\n", "EVAS_OBJ",
- info->coord.x, info->coord.y, __func__);
-
- // check indicator and if indicator does not exist, then destroy data, and hide
- target_mb = e_mod_move_border_client_find(mic->target_win);
- if (!target_mb)
- {
- // event clear
- _e_mod_move_indi_ctl_event_clear(mic);
- e_mod_move_evas_objs_del(mic->objs);
- memset(mic, 0, sizeof(E_Move_Indicator_Controller));
- E_FREE(mic);
- m->indicator_controller = NULL;
- return EINA_FALSE;
- }
-
- indi_mb = e_mod_move_indicator_find();
- if (!indi_mb)
- {
- //e_mod_move_indicator_controller_unset(m);
- return EINA_FALSE;
- }
-
- // position check & and if position is not at indicator then destroy data, and hide
- if (!E_INSIDE(info->coord.x, info->coord.y,
- indi_mb->x, indi_mb->y, indi_mb->w, indi_mb->h))
- {
- //e_mod_move_indicator_controller_unset(m);
- if (indi_mb->visible)
- {
- e_border_hide(indi_mb->bd,2);
-
- e_mod_move_evas_objs_move(mic->objs, indi_mb->x, indi_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, indi_mb->w, indi_mb->h);
- e_mod_move_border_shape_input_rect_set(target_mb,
- indi_mb->x,
- indi_mb->y,
- indi_mb->w,
- indi_mb->h);
- }
- return EINA_FALSE;
- }
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- e_mod_move_event_click_set(meo->event, EINA_TRUE);
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_mod_move_indi_ctl_cb_motion_move(void *data,
- void *event_info)
-{
- E_Move *m = NULL;
- E_Move_Indicator_Controller *mic = (E_Move_Indicator_Controller *)data;
- E_Move_Event_Motion_Info *info;
- E_Move_Evas_Object *meo = NULL;
- E_Move_Border *indi_mb = NULL;
- E_Move_Border *target_mb = NULL;
- Eina_List *l;
- Eina_Bool click = EINA_FALSE;
- int angle = 0;
- int d0, d1;
- E_Zone *zone = NULL;
-
- info = (E_Move_Event_Motion_Info *)event_info;
- m = e_mod_move_util_get();
- if (!mic || !info || !m) return EINA_FALSE;
-
- L(LT_EVENT_OBJ,
- "[MOVE] ev:%15.15s (%d,%d) %s()\n", "EVAS_OBJ",
- info->coord.x, info->coord.y, __func__);
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- click = e_mod_move_event_click_get(meo->event);
- }
- E_CHECK_RETURN(click, EINA_FALSE);
-
- // check indicator and if indicator does not exist, then destroy data, and hide
- target_mb = e_mod_move_border_client_find(mic->target_win);
- if (!target_mb)
- {
- // event clear
- _e_mod_move_indi_ctl_event_clear(mic);
- e_mod_move_evas_objs_del(mic->objs);
- memset(mic, 0, sizeof(E_Move_Indicator_Controller));
- E_FREE(mic);
- m->indicator_controller = NULL;
- return EINA_FALSE;
- }
-
- indi_mb = e_mod_move_indicator_find();
- if (!indi_mb)
- {
- return EINA_FALSE;
- }
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- angle = e_mod_move_event_angle_get(meo->event);
- }
-
- zone = indi_mb->bd->zone;
- d0 = d1 = 0;
- switch (angle)
- {
- case 90:
- d0 = info->coord.x;
- d1 = indi_mb->w*2;
- break;
- case 180:
- d0 = zone->h - (indi_mb->h*2);
- d1 = info->coord.y;
- break;
- case 270:
- d0 = zone->w - (indi_mb->w*2);
- d1 = info->coord.x;
- break;
- case 0:
- default :
- d0 = info->coord.y;
- d1 = indi_mb->h*2;
- break;
- }
-
- if (d0 > d1)
- {
- e_border_show(indi_mb->bd);
-
- e_mod_move_evas_objs_move(mic->objs, target_mb->x, target_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, target_mb->w, target_mb->h);
- e_mod_move_border_shape_input_rect_set(target_mb,
- 0,
- 0,
- target_mb->w,
- target_mb->h);
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_mod_move_indi_ctl_cb_motion_end(void *data,
- void *event_info)
-{
- E_Move *m = NULL;
- E_Move_Indicator_Controller *mic = (E_Move_Indicator_Controller *)data;
- E_Move_Event_Motion_Info *info;
- E_Move_Evas_Object *meo = NULL;
- E_Move_Border *indi_mb = NULL;
- E_Move_Border *target_mb = NULL;
- Eina_List *l;
- Eina_Bool click = EINA_FALSE;
- int angle = 0;
- int d0, d1;
- E_Zone *zone = NULL;
- Eina_Bool ret = EINA_FALSE;
-
- info = (E_Move_Event_Motion_Info *)event_info;
- m = e_mod_move_util_get();
- if (!mic || !info || !m) return EINA_FALSE;
-
- L(LT_EVENT_OBJ,
- "[MOVE] ev:%15.15s (%d,%d) %s()\n", "EVAS_OBJ",
- info->coord.x, info->coord.y, __func__);
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- click = e_mod_move_event_click_get(meo->event);
- }
- E_CHECK_RETURN(click, EINA_FALSE);
-
- // check indicator and if indicator does not exist, then destroy data, and hide
- target_mb = e_mod_move_border_client_find(mic->target_win);
- if (!target_mb)
- {
- // event clear
- _e_mod_move_indi_ctl_event_clear(mic);
- e_mod_move_evas_objs_del(mic->objs);
- memset(mic, 0, sizeof(E_Move_Indicator_Controller));
- E_FREE(mic);
- m->indicator_controller = NULL;
- return EINA_FALSE;
- }
-
- indi_mb = e_mod_move_indicator_find();
- E_CHECK_GOTO(indi_mb, finish);
-
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- angle = e_mod_move_event_angle_get(meo->event);
- }
-
- zone = indi_mb->bd->zone;
- d0 = d1 = 0;
- switch (angle)
- {
- case 90:
- d0 = info->coord.x;
- d1 = indi_mb->w*2;
- break;
- case 180:
- d0 = zone->h - (indi_mb->h*2);
- d1 = info->coord.y;
- break;
- case 270:
- d0 = zone->w - (indi_mb->w*2);
- d1 = info->coord.x;
- break;
- case 0:
- default :
- d0 = info->coord.y;
- d1 = indi_mb->h*2;
- break;
- }
-
- if (d0 > d1)
- {
- if (!indi_mb->visible)
- {
- e_border_show(indi_mb->bd);
- e_mod_move_evas_objs_move(mic->objs, target_mb->x, target_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, target_mb->w, target_mb->h);
- e_mod_move_border_shape_input_rect_set(target_mb,
- 0,
- 0,
- target_mb->w,
- target_mb->h);
- ret = EINA_TRUE;
- }
- }
- else
- {
- if (indi_mb->visible)
- {
- e_border_hide(indi_mb->bd,2);
- //e_mod_move_indicator_controller_unset(m);
- e_mod_move_evas_objs_move(mic->objs, indi_mb->x, indi_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, indi_mb->w, indi_mb->h);
- e_mod_move_border_shape_input_rect_set(target_mb,
- indi_mb->x,
- indi_mb->y,
- indi_mb->w,
- indi_mb->h);
- }
- }
-
-finish:
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- e_mod_move_event_click_set(meo->event, EINA_FALSE);
- }
- return ret;
-}
-
-static void
-_e_mod_move_indi_ctl_obj_event_setup(E_Move_Indicator_Controller *mic,
- E_Move_Evas_Object *meo)
-{
- E_CHECK(mic);
- E_CHECK(meo);
-
- meo->event = e_mod_move_event_new(mic->target_win, meo->obj);
- E_CHECK(meo->event);
-
- e_mod_move_event_data_type_set(meo->event, E_MOVE_EVENT_DATA_TYPE_NONE);
- e_mod_move_event_angle_cb_set(meo->event,
- e_mod_move_util_win_prop_angle_get);
- e_mod_move_event_cb_set(meo->event, E_MOVE_EVENT_TYPE_MOTION_START,
- _e_mod_move_indi_ctl_cb_motion_start, mic);
- e_mod_move_event_cb_set(meo->event, E_MOVE_EVENT_TYPE_MOTION_MOVE,
- _e_mod_move_indi_ctl_cb_motion_move, mic);
- e_mod_move_event_cb_set(meo->event, E_MOVE_EVENT_TYPE_MOTION_END,
- _e_mod_move_indi_ctl_cb_motion_end, mic);
- e_mod_move_event_send_all_set(meo->event, EINA_TRUE);
-}
-
-/* externally accessible functions */
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_set(E_Move_Border *target_mb)
-{
- E_Move *m = NULL;
- E_Move_Border *indi_mb = NULL;
- Ecore_X_Window win;
- E_Move_Indicator_Controller *mic = NULL;
- E_Move_Evas_Object *meo = NULL;
- Eina_List *l;
-
- E_CHECK_RETURN(target_mb, EINA_FALSE);
- indi_mb = e_mod_move_indicator_find();
- E_CHECK_RETURN(indi_mb, EINA_FALSE);
- m = e_mod_move_util_get();
- E_CHECK_RETURN(m, EINA_FALSE);
-
- if (e_mod_move_indicator_controller_state_get(m, &win))
- e_mod_move_indicator_controller_unset(m);
-
- mic = E_NEW(E_Move_Indicator_Controller, 1);
- E_CHECK_RETURN(mic, EINA_FALSE);
-
- mic->target_win = target_mb->bd->client.win;
- mic->objs = e_mod_move_evas_objs_add(m, NULL);
- if (mic->objs)
- {
- e_mod_move_evas_objs_move(mic->objs, indi_mb->x, indi_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, indi_mb->w, indi_mb->h);
- e_mod_move_evas_objs_layer_set(mic->objs, EVAS_LAYER_MAX - 1);
- e_mod_move_evas_objs_color_set(mic->objs, 0, 0, 0, 0);
- e_mod_move_evas_objs_show(mic->objs);
- e_mod_move_evas_objs_raise(mic->objs);
-
- // Set Input Shape Mask
- if (e_mod_move_border_shape_input_new(target_mb))
- {
- e_mod_move_border_shape_input_rect_set(target_mb,
- indi_mb->x,
- indi_mb->y,
- indi_mb->w,
- indi_mb->h);
- }
-
- // Set Event Handler
- EINA_LIST_FOREACH(mic->objs, l, meo)
- {
- if (!meo) continue;
- _e_mod_move_indi_ctl_obj_event_setup(mic, meo);
- }
-
- m->indicator_controller = mic;
- }
- else
- {
- memset(mic, 0, sizeof(E_Move_Indicator_Controller));
- E_FREE(mic);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_unset(E_Move *m)
-{
- Ecore_X_Window win;
- E_Move_Indicator_Controller *mic = NULL;
- E_Move_Border *target_mb = NULL;
- E_CHECK_RETURN(m, EINA_FALSE);
- E_CHECK_RETURN(e_mod_move_indicator_controller_state_get(m, &win),
- EINA_FALSE);
-
- mic = m->indicator_controller;
- E_CHECK_RETURN(mic, EINA_FALSE);
-
- _e_mod_move_indi_ctl_event_clear(mic);
- e_mod_move_evas_objs_del(mic->objs);
-
- // input shape mask clear
- if ((target_mb = e_mod_move_border_client_find(mic->target_win)))
- {
- if (target_mb->shape_input)
- {
- e_mod_move_border_shape_input_rect_set(target_mb, 0, 0, 0, 0);
- e_mod_move_border_shape_input_free(target_mb);
- }
- }
-
- memset(mic, 0, sizeof(E_Move_Indicator_Controller));
- E_FREE(mic);
- m->indicator_controller = NULL;
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_update(E_Move *m)
-{
- Ecore_X_Window win;
- E_Move_Indicator_Controller *mic = NULL;
- E_Move_Border *indi_mb = NULL;
- E_Move_Border *target_mb = NULL;
- E_CHECK_RETURN(m, EINA_FALSE);
- E_CHECK_RETURN(e_mod_move_indicator_controller_state_get(m, &win),
- EINA_FALSE);
-
- mic = m->indicator_controller;
- E_CHECK_RETURN(mic, EINA_FALSE);
-
- indi_mb = e_mod_move_indicator_find();
- E_CHECK_RETURN(indi_mb, EINA_FALSE);
- if (indi_mb->visible) return EINA_FALSE;
-
- e_mod_move_evas_objs_move(mic->objs, indi_mb->x, indi_mb->y);
- e_mod_move_evas_objs_resize(mic->objs, indi_mb->w, indi_mb->h);
-
- if ((target_mb = e_mod_move_border_client_find(mic->target_win)))
- {
- e_mod_move_border_shape_input_rect_set(target_mb,
- indi_mb->x,
- indi_mb->y,
- indi_mb->w,
- indi_mb->h);
- }
- else
- {
- L(LT_EVENT_OBJ,
- "[MOVE] ev:%15.15s w:0x%08x %s %s()\n", "EVAS_OBJ",
- mic->target_win,
- "Indicator Controller Target Window doest not exist!!!!!",
- __func__);
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_state_get(E_Move *m,
- Ecore_X_Window *win)
-{
- E_Move_Indicator_Controller *mic = NULL;
- E_CHECK_RETURN(m, EINA_FALSE);
- E_CHECK_RETURN(win, EINA_FALSE);
-
- mic = m->indicator_controller;
- E_CHECK_RETURN(mic, EINA_FALSE);
-
- *win = mic->target_win;
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_set_policy_check(E_Move_Border *target_mb)
-{
- E_Move_Border *indi_mb = NULL;
- E_Zone *zone = NULL;
- E_CHECK_RETURN(target_mb, EINA_FALSE);
- if (TYPE_QUICKPANEL_CHECK(target_mb)) return EINA_FALSE;
- if (TYPE_APPTRAY_CHECK(target_mb)) return EINA_FALSE;
- if (TYPE_INDICATOR_CHECK(target_mb)) return EINA_FALSE;
-
- if (target_mb->visibility != E_MOVE_VISIBILITY_STATE_VISIBLE)
- return EINA_FALSE;
-
- indi_mb = e_mod_move_indicator_find();
- E_CHECK_RETURN(indi_mb, EINA_FALSE);
-
- //if (indi_mb->visible)
- if (target_mb->indicator_state != E_MOVE_INDICATOR_STATE_OFF)
- return EINA_FALSE;
-
- // if full screen indicator show feature is disabled, do not show indicator controller
- if (target_mb->fullscreen_indicator_show_state == E_MOVE_FULLSCREEN_INDICATOR_SHOW_STATE_OFF)
- return EINA_FALSE;
-
- zone = indi_mb->bd->zone;
- if (target_mb->bd->zone != zone)
- return EINA_FALSE;
-
- if ( (zone->x != target_mb->x)
- || (zone->y != target_mb->y)
- || (zone->w != target_mb->w)
- || (zone->h != target_mb->h))
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-EINTERN Eina_Bool
-e_mod_move_indicator_controller_unset_policy_check(E_Move_Border *target_mb)
-{
- E_Move *m = NULL;
- Ecore_X_Window win;
- Eina_Bool ret = EINA_FALSE;
- E_CHECK_RETURN(target_mb, EINA_FALSE);
-
- m = e_mod_move_util_get();
- E_CHECK_RETURN(m, EINA_FALSE);
-
- if (e_mod_move_indicator_controller_state_get(m, &win))
- {
- if (win == target_mb->bd->client.win)
- ret = EINA_TRUE;
- }
-
- return ret;
-}
+++ /dev/null
-#ifdef E_TYPEDEFS
-#else
-#ifndef E_MOD_MOVE_INDICATOR_CONTROLLER_H
-#define E_MOD_MOVE_INDICATOR_CONTROLLER_H
-
-struct _E_Move_Indicator_Controller
-{
- Ecore_X_Window target_win; // target client window id
- Eina_List *objs; // list of E_Move_Evas_Object.
-};
-
-typedef struct _E_Move_Indicator_Controller E_Move_Indicator_Controller;
-
-EINTERN Eina_Bool e_mod_move_indicator_controller_set(E_Move_Border *target_mb);
-EINTERN Eina_Bool e_mod_move_indicator_controller_unset(E_Move *m);
-EINTERN Eina_Bool e_mod_move_indicator_controller_update(E_Move *m);
-EINTERN Eina_Bool e_mod_move_indicator_controller_state_get(E_Move *m, Ecore_X_Window *win);
-EINTERN Eina_Bool e_mod_move_indicator_controller_set_policy_check(E_Move_Border *target_mb);
-EINTERN Eina_Bool e_mod_move_indicator_controller_unset_policy_check(E_Move_Border *target_mb);
-
-#endif
-#endif
#include "e_mod_move.h"
/* local subsystem functions */
-static Eina_Bool _e_mod_move_indicator_widget_apptray_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
-static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
-static Eina_Bool _e_mod_move_indicator_widget_apptray_move_get(E_Move_Indicator_Widget *indi_widget);
-static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_get(E_Move_Indicator_Widget *indi_widget);
-static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(E_Move_Border *at_mb);
-static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Border *qp_mb);
-static Eina_Bool _e_mod_move_indicator_widget_quickpanel_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
-static Eina_Bool _e_mod_move_indicator_widget_apptray_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
-static Eina_Bool _e_mod_move_indicator_widget_home_region_release_check(E_Move_Indicator_Widget *indi_widget, Eina_Bool apptray_move, int angle, Evas_Point pos);
-static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start(void *data, void *event_info);
-static Eina_Bool _e_mod_move_indicator_widget_cb_motion_move(void *data, void *event_info);
-static Eina_Bool _e_mod_move_indicator_widget_cb_motion_end(void *data, void *event_info);
-static void _e_mod_move_indicator_widget_obj_event_setup(E_Move_Indicator_Widget *indicator_widget, E_Move_Widget_Object *mwo);
-static Eina_Bool _e_mod_move_indicator_widget_scrollable_object_movable_check(E_Move_Border *mb, Evas_Point pos);
+static Eina_Bool _e_mod_move_indicator_widget_apptray_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
+static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_set(E_Move_Indicator_Widget *indi_widget, Eina_Bool state);
+static Eina_Bool _e_mod_move_indicator_widget_apptray_move_get(E_Move_Indicator_Widget *indi_widget);
+static Eina_Bool _e_mod_move_indicator_widget_quickpanel_move_get(E_Move_Indicator_Widget *indi_widget);
+static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_apptray_check(E_Move_Border *at_mb);
+static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start_internal_quickpanel_check(E_Move_Border *qp_mb);
+static Eina_Bool _e_mod_move_indicator_widget_quickpanel_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
+static Eina_Bool _e_mod_move_indicator_widget_apptray_flick_process(E_Move_Indicator_Widget *indi_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
+static Eina_Bool _e_mod_move_indicator_widget_home_region_release_check(E_Move_Indicator_Widget *indi_widget, Eina_Bool apptray_move, int angle, Evas_Point pos);
+static Eina_Bool _e_mod_move_indicator_widget_cb_motion_start(void *data, void *event_info);
+static Eina_Bool _e_mod_move_indicator_widget_cb_motion_move(void *data, void *event_info);
+static Eina_Bool _e_mod_move_indicator_widget_cb_motion_end(void *data, void *event_info);
+static void _e_mod_move_indicator_widget_obj_event_setup(E_Move_Indicator_Widget *indicator_widget, E_Move_Widget_Object *mwo);
+static Eina_Bool _e_mod_move_indicator_widget_scrollable_object_movable_check(E_Move_Border *mb, Evas_Point pos);
+static Eina_Bool _e_mod_move_indicator_widget_target_window_find_by_pointer(Ecore_X_Window *win, int x, int y);
+static Ecore_X_Window _e_mod_move_indicator_widget_event_win_find(void *event_info);
+static Eina_Bool _e_mod_move_indicator_widget_target_window_policy_check(E_Move_Border *mb);
+static Eina_Bool _e_mod_move_indicator_widget_event_send_policy_check(E_Move_Indicator_Widget *indi_widget, Evas_Point pos);
/* local subsystem functions */
static Eina_Bool
E_Move_Indicator_Widget *indi_widget = (E_Move_Indicator_Widget *)data;
E_Move_Border *mb = NULL;
+ E_Move_Border *ev_mb = NULL;
E_Move_Border *qp_mb = NULL;
E_Move_Border *at_mb = NULL;
E_Move_Event_Motion_Info *info;
Eina_Bool clicked = EINA_FALSE;
Eina_List *l;
E_Move_Scroll_Region_Indicator scroll_region = E_MOVE_SCROLL_REGION_NONE;
+ Ecore_X_Window ev_win = 0;
info = (E_Move_Event_Motion_Info *)event_info;
m = e_mod_move_util_get();
E_CHECK_RETURN(indi_widget, EINA_FALSE);
+
+ // clicked window indicator policy check
+ EINA_LIST_FOREACH(indi_widget->objs, l, mwo)
+ {
+ if (!mwo) continue;
+ ev_win = e_mod_move_event_win_get(mwo->event);
+ }
+ ev_mb = e_mod_move_border_client_find(ev_win);
+ E_CHECK_RETURN(_e_mod_move_indicator_widget_target_window_policy_check(ev_mb),
+ EINA_FALSE);
+
mb = e_mod_move_border_client_find(indi_widget->win);
if (!m || !mb || !indi_widget || !info) return EINA_FALSE;
if (!qp_mv_state && !at_mv_state) goto finish;
e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
- flick_state = e_mod_move_flick_state_get(mb, EINA_FALSE);
+ flick_state = e_mod_move_flick_state_get(mb, EINA_TRUE);
if (qp_mv_state)
{
e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_indicator_widget_cb_motion_end,
indicator_widget);
- e_mod_move_event_send_all_set(mwo->event, EINA_TRUE);
+ e_mod_move_event_win_find_cb_set(mwo->event,
+ _e_mod_move_indicator_widget_event_win_find);
+ e_mod_move_event_propagate_type_set(mwo->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
}
static Eina_Bool
return ret;
}
+static Eina_Bool
+_e_mod_move_indicator_widget_target_window_find_by_pointer(Ecore_X_Window *win,
+ int x,
+ int y)
+{
+ E_Move *m = NULL;
+ E_Move_Border *find_mb = NULL;
+ Eina_Bool found = EINA_FALSE;
+ Eina_Bool ret = EINA_FALSE;
+ Ecore_X_Window noti_win = 0;
+ Eina_Bool noti_win_saved = EINA_FALSE;
+
+ E_CHECK_RETURN(win, EINA_FALSE);
+ m = e_mod_move_util_get();
+ E_CHECK_RETURN(m, EINA_FALSE);
+
+ EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
+ {
+ if (!find_mb->bd) continue;
+
+ // finding visible border
+ if (!find_mb->visible) continue;
+
+ // finding pointed border
+ if (!E_INSIDE(x, y, find_mb->bd->x, find_mb->bd->y,
+ find_mb->bd->w, find_mb->bd->h))
+ continue;
+
+ // if notification , alpha, and indicator_state_none then search again below.
+ if (TYPE_NOTIFICATION_CHECK(find_mb)
+ && (find_mb->argb)
+ && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_NONE))
+ {
+ if (!noti_win_saved)
+ {
+ noti_win = find_mb->bd->client.win;
+ noti_win_saved = EINA_TRUE;
+ }
+ continue;
+ }
+ else
+ {
+ found = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (found)
+ {
+ if ((find_mb)
+ && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_ON))
+ {
+ *win = find_mb->bd->client.win;
+ ret = EINA_TRUE;
+ }
+ else
+ {
+ if (noti_win_saved)
+ {
+ *win = noti_win;
+ ret = EINA_TRUE;
+ }
+ else
+ {
+ *win = find_mb->bd->client.win;
+ ret = EINA_TRUE;
+ }
+ }
+ }
+
+ return ret;
+}
+
+static Ecore_X_Window
+_e_mod_move_indicator_widget_event_win_find(void *event_info)
+{
+ E_Move_Event_Motion_Info *info = NULL;
+ E_Border *find_bd = NULL;
+ Ecore_X_Window win = 0, res_win = 0;
+ info = (E_Move_Event_Motion_Info *)event_info;
+
+ E_CHECK_RETURN(info, 0);
+
+ find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
+
+ if (_e_mod_move_indicator_widget_target_window_find_by_pointer(&win,
+ info->coord.x,
+ info->coord.y))
+ {
+ res_win = win;
+ }
+
+ L(LT_EVENT_OBJ,
+ "[MOVE] ev:%15.15s INDICATOR_WIDGET_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
+ "EVAS_OBJ", res_win, info->coord.x, info->coord.y);
+
+ return res_win;
+}
+
+static Eina_Bool
+_e_mod_move_indicator_widget_target_window_policy_check(E_Move_Border *mb)
+{
+ E_Move *m = e_mod_move_util_get();
+ E_Zone *zone = NULL;
+ Eina_Bool ret = EINA_FALSE;
+ E_Border *bd = NULL;
+
+ E_CHECK_RETURN(m, EINA_FALSE);
+ E_CHECK_RETURN(mb, EINA_FALSE);
+
+ bd = mb->bd;
+ E_CHECK_RETURN(bd, EINA_FALSE);
+ zone = bd->zone;
+ E_CHECK_RETURN(zone, EINA_FALSE);
+
+ if (REGION_EQUAL_TO_ZONE(mb, zone) // check fullscreen
+ && (zone->id == 0) // change zone->id comparing to bd's profile property (mobile)
+ && (mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
+ && (mb->indicator_type == E_MOVE_INDICATOR_TYPE_1))
+ {
+ ret = EINA_TRUE;
+ }
+
+ return ret;
+}
+
+static Eina_Bool
+_e_mod_move_indicator_widget_event_send_policy_check(E_Move_Indicator_Widget *indi_widget,
+ Evas_Point pos)
+{
+ int x = 0, y = 0, w = 0, h = 0;
+ Eina_Bool ret = EINA_FALSE;
+
+ E_CHECK_RETURN(indi_widget, EINA_FALSE);
+
+ e_mod_move_widget_objs_geometry_get(indi_widget->objs, &x ,&y, &w, &h);
+
+ if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
+
+ return ret;
+}
+
/* externally accessible functions */
/* set current indicator widget */
m = e_mod_move_util_get();
E_CHECK_RETURN(m, EINA_FALSE);
+ // fix later
EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
{
if (!find_mb->bd) continue;
}
if (found
- && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
- && (find_mb->indicator_type == E_MOVE_INDICATOR_TYPE_1)
- && !(TYPE_INDICATOR_CHECK(find_mb))
+// && (find_mb->indicator_state == E_MOVE_INDICATOR_STATE_ON)
+// && (find_mb->indicator_type == E_MOVE_INDICATOR_TYPE_1)
+// && !(TYPE_INDICATOR_CHECK(find_mb))
&& !(TYPE_APPTRAY_CHECK(find_mb))
&& !(TYPE_QUICKPANEL_CHECK(find_mb)))
{
EINTERN void
e_mod_move_indicator_widget_apply(void)
{
- E_Move *m = NULL;
- Ecore_X_Window target_win;
+ E_Move *m = NULL;
E_Move_Indicator_Widget *indi_widget = NULL;
+ Ecore_X_Window target_win;
+ E_Move_Border *target_mb = NULL;
m = e_mod_move_util_get();
E_CHECK(m);
+ if (m->screen_reader_state) return;
if (e_mod_move_indicator_widget_target_window_find(&target_win))
{
+ target_mb = e_mod_move_border_client_find(target_win);
// if previous indicator widget is created
if ((indi_widget = e_mod_move_indicator_widget_get()))
{
// if current indicator widget's win is not equal to finded win
// then del previous indicator_widget and add new indicator widget.
e_mod_move_indicator_widget_del(indi_widget);
-
e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
+ if (!TYPE_NOTIFICATION_CHECK(target_mb))
+ e_mod_move_util_prop_active_indicator_win_set(target_win, m);
}
}
else
//if previous indicator widget is not creagted
//then add new indicator widget.
e_mod_move_indicator_widget_set(e_mod_move_indicator_widget_add(target_win));
+ if (!TYPE_NOTIFICATION_CHECK(target_mb))
+ e_mod_move_util_prop_active_indicator_win_set(target_win, m);
}
}
else
e_mod_move_widget_objs_color_set(indi_widget->objs, 0, 0, 0, 0);
e_mod_move_widget_objs_show(indi_widget->objs);
e_mod_move_widget_objs_raise(indi_widget->objs);
-#if 0 // for debug
- e_mod_move_widget_objs_color_set(indi_widget->objs, 0, 0, 255, 128);
-#endif
// Set Input Shape Mask
- if (e_mod_move_border_shape_input_new(mb))
- e_mod_move_border_shape_input_rect_set(mb, x, y, w, h);
+ if ((indi_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
+ {
+ e_manager_comp_input_region_id_set(m->man,
+ indi_widget->input_region_id,
+ x, y, w, h);
+ }
else
goto error_cleanup;
}
if ((mb = e_mod_move_border_client_find(indi_widget->win)))
{
- e_mod_move_border_shape_input_free(mb);
+ if (indi_widget->input_region_id)
+ e_manager_comp_input_region_id_del(m->man, indi_widget->input_region_id);
// if indicaor widget is deleted, then apptray or quickpanel's mirror object hide with animation
if (indi_widget->quickpanel_move)
e_mod_move_widget_objs_resize(indi_widget->objs, w, h);
//change Input Shape Mask
- e_mod_move_border_shape_input_rect_set(mb, x, y, w, h);
+ if (indi_widget->input_region_id)
+ {
+ e_manager_comp_input_region_id_set(m->man,
+ indi_widget->input_region_id,
+ x, y, w, h);
+ }
ret = EINA_TRUE;
}
}
// indicator type is not type_1 -> delete current indicator widget
e_mod_move_indicator_widget_del(indi_widget);
e_mod_move_indicator_widget_set(NULL);
+#if 1
+ // change later
+ e_mod_move_indicator_widget_apply();
+#endif
}
}
else
Eina_Bool quickpanel_move;
Eina_Bool apptray_move;
Evas_Point pos; // mouse position
+ int input_region_id;
};
typedef struct _E_Move_Indicator_Widget E_Move_Indicator_Widget;
static Eina_Bool _e_mod_move_mini_apptray_objs_animation_frame(void *data, double pos);
static Eina_Bool _e_mod_move_mini_apptray_flick_process(E_Move_Border *mb, int angle, Eina_Bool state);
static Eina_Bool _e_mod_move_mini_apptray_dim_objs_apply(E_Move_Border *mb, int x, int y);
+static Eina_Bool _e_mod_move_mini_apptray_ctl_event_send_policy_check(E_Move_Border *mb, Evas_Point pos);
/* local subsystem functions */
static Eina_Bool
e_mod_move_mini_apptray_objs_add(mb);
- // mini_apptray_objs_animation_layer_set
- e_mod_move_mini_apptray_objs_animation_layer_set(mb);
-
// send mini_apptray to "move start message".
e_mod_move_mini_apptray_anim_state_send(mb, EINA_TRUE);
return EINA_TRUE;
int angle = 0;
Eina_Bool click = EINA_FALSE;
E_Zone *zone = NULL;
+ int x = 0, y = 0;
+ int cx, cy, cw, ch;
+ Eina_Bool contents_region = EINA_FALSE;
info = (E_Move_Event_Motion_Info *)event_info;
if (!mb || !info) return EINA_FALSE;
click = e_mod_move_event_click_get(mco->event);
}
E_CHECK_RETURN(click, EINA_FALSE);
-/// change later?
-// todo flick-up
+
+ if (_e_mod_move_mini_apptray_ctl_event_send_policy_check(mb, info->coord))
+ {
+ EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
+ {
+ if (!mco) continue;
+ e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
+ }
+ }
+ else
+ {
+ EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
+ {
+ if (!mco) continue;
+ e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
+ }
+ }
+
+ contents_region = e_mod_move_border_contents_rect_get(mb, &cx, &cy ,&cw, &ch);
+
switch (angle)
{
case 0:
- if (info->coord.y < mb->h)
- e_mod_move_mini_apptray_objs_move(mb, 0, info->coord.y - mb->h);
+ if (info->coord.y > (zone->h - mb->h))
+ {
+ if (contents_region)
+ {
+ if (info->coord.y > cy) y = info->coord.y - cy;
+ }
+ else
+ {
+ y = info->coord.y;
+ }
+ }
break;
case 90:
- if (info->coord.x < mb->w)
- e_mod_move_mini_apptray_objs_move(mb, info->coord.x - mb->w, 0);
+ if (info->coord.x > (zone->w - mb->w))
+ {
+ if (contents_region)
+ {
+ if (info->coord.x > cx) x = info->coord.x - cx;
+ }
+ else
+ {
+ x = info->coord.x;
+ }
+ }
break;
case 180:
- if (info->coord.y > (zone->h - mb->h))
- e_mod_move_mini_apptray_objs_move(mb, 0, info->coord.y);
+ if (info->coord.y < mb->h)
+ {
+ if (contents_region)
+ {
+ if (info->coord.y < ch) y = info->coord.y - ch;
+ }
+ else
+ {
+ y = info->coord.y - mb->h;
+ }
+ }
break;
case 270:
- if (info->coord.x > (zone->w - mb->w))
- e_mod_move_mini_apptray_objs_move(mb, info->coord.x, 0);
+ if (info->coord.x < mb->w)
+ {
+ if (contents_region)
+ {
+ if (info->coord.x < cw) x = info->coord.x - cw;
+ }
+ else
+ {
+ x = info->coord.x - mb->w;
+ }
+ }
break;
default :
break;
}
+ e_mod_move_mini_apptray_objs_move(mb, x, y);
+
return EINA_TRUE;
}
}
E_CHECK_GOTO(click, finish);
+ // event send all set
+ EINA_LIST_FOREACH(mb->ctl_objs, l, mco)
+ {
+ if (!mco) continue;
+ e_mod_move_event_propagate_type_set(mco->event, E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
+ }
+
e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
flick_state = e_mod_move_flick_state_get(mb, EINA_FALSE);
if (_e_mod_move_mini_apptray_flick_process(mb, angle, flick_state))
switch (angle)
{
- // change later
- // todo flick-up
case 0:
- check_h = mb->y + mb->h;
+ check_h = mb->h;
if (check_h) check_h /= 2;
- if (info->coord.y < check_h)
+ if (info->coord.y > (zone->h - check_h))
{
- e_mod_move_mini_apptray_e_border_move(mb, 0, mb->h * -1);
- e_mod_move_mini_apptray_objs_animation_move(mb, 0, mb->h * -1);
+ e_mod_move_mini_apptray_e_border_move(mb, 0, zone->h);
+ e_mod_move_mini_apptray_objs_animation_move(mb, 0, zone->h);
}
else
{
- e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
+ e_mod_move_mini_apptray_objs_animation_move(mb, 0, (zone->h - mb->h));
}
break;
case 90:
check_w = mb->w;
if (check_w) check_w /= 2;
- if (info->coord.x < check_w)
+ if (info->coord.x > (zone->w - check_w))
{
- e_mod_move_mini_apptray_e_border_move(mb, mb->w * -1, 0);
- e_mod_move_mini_apptray_objs_animation_move(mb, mb->w * -1, 0);
+ e_mod_move_mini_apptray_e_border_move(mb, zone->w, 0);
+ e_mod_move_mini_apptray_objs_animation_move(mb, zone->w, 0);
}
else
{
- e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
+ e_mod_move_mini_apptray_objs_animation_move(mb, zone->w - mb->w, 0);
}
break;
case 180:
- check_h = mb->h;
+ check_h = mb->y + mb->h;
if (check_h) check_h /= 2;
- if (info->coord.y > (zone->h - check_h))
+ if (info->coord.y < check_h)
{
- e_mod_move_mini_apptray_e_border_move(mb, 0, zone->h);
- e_mod_move_mini_apptray_objs_animation_move(mb, 0, zone->h);
+ e_mod_move_mini_apptray_e_border_move(mb, 0, mb->h * -1);
+ e_mod_move_mini_apptray_objs_animation_move(mb, 0, mb->h * -1);
}
else
{
- e_mod_move_mini_apptray_objs_animation_move(mb, 0, (zone->h - mb->h));
+ e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
}
break;
case 270:
check_w = mb->w;
if (check_w) check_w /= 2;
- if (info->coord.x > (zone->w - check_w))
+ if (info->coord.x < check_w)
{
- e_mod_move_mini_apptray_e_border_move(mb, zone->w, 0);
- e_mod_move_mini_apptray_objs_animation_move(mb, zone->w, 0);
+ e_mod_move_mini_apptray_e_border_move(mb, mb->w * -1, 0);
+ e_mod_move_mini_apptray_objs_animation_move(mb, mb->w * -1, 0);
}
else
{
- e_mod_move_mini_apptray_objs_animation_move(mb, zone->w - mb->w, 0);
+ e_mod_move_mini_apptray_objs_animation_move(mb, 0, 0);
}
break;
default :
if (pos >= 1.0)
{
- // mini_apptray_objs_animation_layer_unset
- e_mod_move_mini_apptray_objs_animation_layer_unset(mb);
-
if (!(REGION_INSIDE_ZONE(mb, mb->bd->zone)))
{
e_border_focus_set(mb->bd, 0, 0);
- e_border_lower(mb->bd);
e_mod_move_mini_apptray_dim_hide(mb);
}
}
e_mod_move_flick_data_free(mb);
-// change later
-// doto flick-up
+
switch (angle)
{
- case 90: x = mb->w * -1; y = 0; break;
- case 180: x = 0; y = zone->h; break;
- case 270: x = zone->w; y = 0; break;
+ case 90: x = zone->w; y = 0; break;
+ case 180: x = 0; y = mb->h * -1; break;
+ case 270: x = mb->w * -1; y = 0; break;
case 0:
- default : x = 0; y = mb->h * -1; break;
+ default : x = 0; y = zone->h; break;
}
e_mod_move_mini_apptray_e_border_move(mb, x, y);
return EINA_TRUE;
}
+static Eina_Bool
+_e_mod_move_mini_apptray_ctl_event_send_policy_check(E_Move_Border *mb,
+ Evas_Point pos)
+{
+ int x = 0, y = 0, w = 0, h = 0;
+ Eina_Bool ret = EINA_FALSE;
+
+ E_CHECK_RETURN(mb, EINA_FALSE);
+ E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
+
+ e_mod_move_bd_move_ctl_objs_geometry_get(mb, &x ,&y, &w, &h);
+
+ if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
+
+ return ret;
+}
+
/* externally accessible functions */
EINTERN void
e_mod_move_mini_apptray_ctl_obj_event_setup(E_Move_Border *mb,
_e_mod_move_mini_apptray_cb_motion_move, mb);
e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_mini_apptray_cb_motion_end, mb);
- e_mod_move_event_send_all_set(mco->event, EINA_TRUE);
+ e_mod_move_event_propagate_type_set(mco->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
}
EINTERN E_Move_Border *
e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
e_mod_move_bd_move_objs_show(mb);
+ if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
+ }
+ return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_mini_apptray_objs_add_with_pos(E_Move_Border *mb,
+ int x,
+ int y)
+{
+ Eina_Bool mirror = EINA_TRUE;
+ E_CHECK_RETURN(mb, EINA_FALSE);
+ E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
+
+ if (!(mb->objs))
+ {
+ mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
+ e_mod_move_bd_move_objs_move(mb, x, y);
+ e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
+ e_mod_move_bd_move_objs_show(mb);
+ if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
}
return EINA_TRUE;
}
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
e_mod_move_bd_move_objs_del(mb, mb->objs);
+ e_mod_move_util_rotation_unlock(mb->m);
mb->objs = NULL;
return EINA_TRUE;
}
e_mod_move_mini_apptray_dim_hide(mb);
E_FREE(mini_apptray_data);
mb->data = NULL;
+ e_mod_move_mini_apptray_widget_apply();// disable/destory mini_apptray_widget related datas
return EINA_TRUE;
}
zone->w, zone->h,
x, y, mb->w, mb->h))
{
- e_border_raise(mb->bd);
e_border_focus_set(mb->bd, 1, 1);
}
else
e_mod_move_bd_move_dim_objs_show(mini_apptray_data->dim_objs);
mini_apptray_data->opacity = dim_min;
mb->data = mini_apptray_data;
- e_mod_move_util_rotation_lock(mb->m);
}
else
{
e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_TRUE);
mini_apptray_data->dim_objs = e_mod_move_bd_move_dim_objs_add(mb);
- if (mini_apptray_data->dim_objs)
- e_mod_move_util_rotation_lock(mb->m);
}
if (mini_apptray_data->dim_objs)
{
mini_apptray_data->dim_objs = NULL;
mini_apptray_data->opacity = dim_min;
- e_mod_move_util_rotation_unlock(mb->m);
-
// Composite mode set false
e_mod_move_util_compositor_composite_mode_set(mb->m, EINA_FALSE);
{
E_Zone *zone;
int x, y;
+ int cx, cy, cw, ch;
+ Eina_Bool contents_region = EINA_FALSE;
E_CHECK_RETURN(mb, EINA_FALSE);
E_CHECK_RETURN(TYPE_MINI_APPTRAY_CHECK(mb), EINA_FALSE);
angle = ((angle % 360) / 90) * 90;
zone = mb->bd->zone;
+ contents_region = e_mod_move_border_contents_rect_get(mb, &cx, &cy ,&cw, &ch);
+
// change later
// todo flick-up position
switch (angle)
{
- case 90: x = zone->x + zone->w; y = 0; break;
- case 180: x = 0; y = mb->h * -1; break;
- case 270: x = mb->w * -1; y = 0; break;
+ case 90:
+ if (contents_region) { x = zone->x + zone->w - cx; y = 0; }
+ else { x = zone->x + zone->w; y = 0; }
+ break;
+ case 180:
+ if (contents_region) { x = 0; y = mb->h * -1 + (mb->h - ch); }
+ else { x = 0; y = mb->h * -1; }
+ break;
+ case 270:
+ if (contents_region) { x = mb->w * -1 + (mb->w - cw); y = 0; }
+ else { x = mb->w * -1; y = 0; }
+ break;
case 0:
- default : x = 0; y = zone->y + zone->h; break;
+ default :
+ if (contents_region) { x = 0; y = zone->y + zone->h - cy; }
+ else { x = 0; y = zone->y + zone->h; }
+ break;
}
_e_mod_move_mini_apptray_objs_position_set(mb, x, y);
EINTERN Eina_Bool e_mod_move_mini_apptray_click_get(void);
EINTERN Eina_Bool e_mod_move_mini_apptray_event_clear(void);
EINTERN Eina_Bool e_mod_move_mini_apptray_objs_add(E_Move_Border *mb);
+EINTERN Eina_Bool e_mod_move_mini_apptray_objs_add_with_pos(E_Move_Border *mb, int x, int y);
EINTERN Eina_Bool e_mod_move_mini_apptray_objs_del(E_Move_Border *mb);
EINTERN Eina_Bool e_mod_move_mini_apptray_objs_move(E_Move_Border *mb, int x, int y);
EINTERN Eina_Bool e_mod_move_mini_apptray_objs_raise(E_Move_Border *mb);
#include "e_mod_move.h"
/* local subsystem functions */
-static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_move_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget, Eina_Bool state);
-static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_move_get(E_Move_Mini_Apptray_Widget *mini_apptray_widget);
-static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Move_Border *mini_apptray_mb);
-static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
-static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start(void *data, void *event_info);
-static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_move(void *data, void *event_info);
-static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_end(void *data, void *event_info);
-static void _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Widget_Object *mwo);
+static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_move_set(E_Move_Mini_Apptray_Widget *mini_apptray_widget, Eina_Bool state);
+static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_move_get(E_Move_Mini_Apptray_Widget *mini_apptray_widget);
+static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start_internal_mini_apptray_check(E_Move_Border *mini_apptray_mb);
+static Eina_Bool _e_mod_move_mini_apptray_widget_mini_apptray_flick_process(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Border *mb2, int angle, Eina_Bool state);
+static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_start(void *data, void *event_info);
+static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_move(void *data, void *event_info);
+static Eina_Bool _e_mod_move_mini_apptray_widget_cb_motion_end(void *data, void *event_info);
+static Ecore_X_Window _e_mod_move_mini_apptray_event_win_find(void *event_info);
+static void _e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget, E_Move_Widget_Object *mwo);
+static Eina_Bool _e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget, Evas_Point pos);
/* local subsystem functions */
static Eina_Bool
break;
}
}
+
if (found
- && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION))
+ && (find_mb->bd->client.netwm.type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
+ && REGION_EQUAL_TO_ZONE(find_mb, find_mb->bd->zone))
{
return EINA_FALSE;
}
// check if notification window is on-screen.
e_mod_move_mini_apptray_dim_show(mini_apptray_mb);
- e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
- // mini_apptray_objs_animation_layer_set
- e_mod_move_mini_apptray_objs_animation_layer_set(mini_apptray_mb);
+ if (REGION_INSIDE_ZONE(mini_apptray_mb, mini_apptray_mb->bd->zone))
+ e_mod_move_mini_apptray_objs_add_with_pos(mini_apptray_mb, -10000, -10000);
+ else
+ e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
return EINA_TRUE;
}
Evas_Event_Mouse_Down *mouse_down_event = NULL;
Eina_Bool clicked = EINA_FALSE;
Eina_List *l;
+ E_Move_Border *ev_mb = NULL;
+ Ecore_X_Window ev_win = 0;
info = (E_Move_Event_Motion_Info *)event_info;
m = e_mod_move_util_get();
E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
- mb = e_mod_move_border_client_find(mini_apptray_widget->win);
+ // clicked window indicator policy check
+ EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
+ {
+ if (!mwo) continue;
+ ev_win = e_mod_move_event_win_get(mwo->event);
+ }
+ ev_mb = e_mod_move_border_client_find(ev_win);
+ // Check Mini Apptray State ( property )
+ if ((ev_mb)
+ && (ev_mb->mini_apptray_state == E_MOVE_MINI_APPTRAY_STATE_OFF))
+ return EINA_FALSE;
+
+ mb = e_mod_move_border_client_find(mini_apptray_widget->win);
if (!m || !mb || !mini_apptray_widget || !info) return EINA_FALSE;
mouse_down_event = info->event_info;
/* check if apptray exists on the current zone */
mini_apptray_mb = e_mod_move_mini_apptray_find();
if ((mini_apptray_mb) &&
- (REGION_INSIDE_ZONE(mini_apptray_mb, mb->bd->zone)))
+ (mini_apptray_mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE))
{
L(LT_EVENT_OBJ,
"[MOVE] ev:%15.15s w:0x%08x MINI_APPTRAY_WIDGET_MOTION_START %s\n",
return EINA_FALSE;
}
+ if ((mini_apptray_mb) &&
+ (REGION_INSIDE_ZONE(mini_apptray_mb, mb->bd->zone)))
+ {
+ e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, -10000, -10000);
+ }
+
EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
{
if (!mwo) continue;
goto error_cleanup;
}
- e_mod_move_mini_apptray_e_border_raise(mini_apptray_mb);
+ //e_mod_move_mini_apptray_e_border_raise(mini_apptray_mb);
_e_mod_move_mini_apptray_widget_mini_apptray_move_set(mini_apptray_widget, EINA_TRUE);
e_mod_move_mini_apptray_objs_animation_start_position_set(mini_apptray_mb,
mb->angle);
Eina_List *l;
Eina_Bool click = EINA_FALSE;
int angle;
+ Eina_Bool flick_state = EINA_FALSE;
+ E_Move_Border *mini_apptray_mb = NULL;
info = (E_Move_Event_Motion_Info *)event_info;
m = e_mod_move_util_get();
if (!mwo) continue;
click = e_mod_move_event_click_get(mwo->event);
}
-
E_CHECK_RETURN(click, EINA_FALSE);
-// do not work on moving just work on flick action
+ // do not work on moving just work on flick action
+ e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
+ flick_state = e_mod_move_flick_state_get2(mb);
+
+ if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
+ {
+ mini_apptray_mb = e_mod_move_mini_apptray_find();
+
+ if (_e_mod_move_mini_apptray_widget_mini_apptray_flick_process(mini_apptray_widget,
+ mini_apptray_mb,
+ angle, flick_state))
+ {
+ return EINA_TRUE;
+ }
+ }
+
#if 0
if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
{
if (need_move)
e_mod_move_mini_apptray_objs_move(mini_apptray_mb, x, y);
}
-#endif
+
mini_apptray_widget->pos = info->coord; // save mouse move position
+#endif
return EINA_TRUE;
}
Eina_Bool click = EINA_FALSE;
Eina_Bool flick_state = EINA_FALSE;
int angle = 0;
+ Ecore_X_Window ev_win = 0;
info = (E_Move_Event_Motion_Info *)event_info;
m = e_mod_move_util_get();
E_CHECK_GOTO(click, error_cleanup);
e_mod_move_flick_data_update(mb, info->coord.x, info->coord.y);
- flick_state = e_mod_move_flick_state_get(mb, EINA_TRUE);
+ flick_state = e_mod_move_flick_state_get2(mb);
if (_e_mod_move_mini_apptray_widget_mini_apptray_move_get(mini_apptray_widget))
{
// if mini_apptray animation is not called, must destory datas explicit
if (mini_apptray_mb)
{
- e_mod_move_mini_apptray_objs_animation_layer_unset(mini_apptray_mb);
e_border_focus_set(mini_apptray_mb ->bd, 0, 0);
- e_border_lower(mini_apptray_mb ->bd);
e_mod_move_mini_apptray_dim_hide(mini_apptray_mb );
e_mod_move_mini_apptray_objs_del(mini_apptray_mb );
}
}
#endif
+ // if flick check fail then, redirect event
+ EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
+ {
+ if (!mwo) continue;
+ ev_win = e_mod_move_event_win_get(mwo->event);
+ }
+
+ if (ev_win)
+ {
+ e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, mini_apptray_widget->pos);
+ e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_DOWN, mini_apptray_widget->pos);
+ e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_MOVE, info->coord);
+ e_mod_move_mouse_event_send(ev_win, E_MOVE_MOUSE_EVENT_UP, info->coord);
+ }
+
mini_apptray_widget->pos = info->coord; // save mouse up position
EINA_LIST_FOREACH(mini_apptray_widget->objs, l, mwo)
return EINA_TRUE;
}
+static Ecore_X_Window
+_e_mod_move_mini_apptray_event_win_find(void *event_info)
+{
+ E_Move_Event_Motion_Info *info = NULL;
+ E_Border *find_bd = NULL;
+ Ecore_X_Window win = 0;
+ info = (E_Move_Event_Motion_Info *)event_info;
+
+ E_CHECK_RETURN(info, 0);
+
+ find_bd = e_mod_move_util_border_find_by_pointer(info->coord.x, info->coord.y);
+
+ if (find_bd) win = find_bd->client.win;
+ else win = 0;
+
+ L(LT_EVENT_OBJ,
+ "[MOVE] ev:%15.15s MINI_APPTRAY_EVENT_WIN_FIND w:0x%08x (%4d,%4d)\n",
+ "EVAS_OBJ", win, info->coord.x, info->coord.y);
+
+ return win;
+}
+
static void
_e_mod_move_mini_apptray_widget_obj_event_setup(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
E_Move_Widget_Object *mwo)
e_mod_move_event_cb_set(mwo->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_mini_apptray_widget_cb_motion_end,
mini_apptray_widget);
- e_mod_move_event_send_all_set(mwo->event, EINA_TRUE);
- e_mod_move_event_find_redirect_win_set(mwo->event, EINA_TRUE);
+ e_mod_move_event_propagate_type_set(mwo->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_NONE);
+ e_mod_move_event_win_find_cb_set(mwo->event,
+ _e_mod_move_mini_apptray_event_win_find);
+}
+
+static Eina_Bool
+_e_mod_move_mini_apptray_widget_event_send_policy_check(E_Move_Mini_Apptray_Widget *mini_apptray_widget,
+ Evas_Point pos)
+{
+ int x = 0, y = 0, w = 0, h = 0;
+ Eina_Bool ret = EINA_FALSE;
+
+ E_CHECK_RETURN(mini_apptray_widget, EINA_FALSE);
+
+ e_mod_move_widget_objs_geometry_get(mini_apptray_widget->objs, &x ,&y, &w, &h);
+
+ if (E_INSIDE(pos.x, pos.y, x, y, w, h)) ret = EINA_TRUE;
+
+ return ret;
}
/* externally accessible functions */
m = e_mod_move_util_get();
E_CHECK_RETURN(m, EINA_FALSE);
+ // fix later
EINA_INLIST_REVERSE_FOREACH(m->borders, find_mb)
{
if (!find_mb->bd) continue;
EINTERN void
e_mod_move_mini_apptray_widget_apply(void)
{
- E_Move *m = NULL;
- Ecore_X_Window target_win;
+ E_Move *m = NULL;
E_Move_Mini_Apptray_Widget *mini_apptray_widget = NULL;
+ E_Move_Border *mini_apptray_mb = NULL;
+ Ecore_X_Window target_win;
m = e_mod_move_util_get();
E_CHECK(m);
- E_CHECK(e_mod_move_mini_apptray_find());
+ if (m->screen_reader_state) return;
+
+ mini_apptray_mb = e_mod_move_mini_apptray_find();
+ if (!mini_apptray_mb)
+ {
+ if ((mini_apptray_widget = e_mod_move_mini_apptray_widget_get()))
+ e_mod_move_mini_apptray_widget_del(mini_apptray_widget);
+ return;
+ }
if (e_mod_move_mini_apptray_widget_target_window_find(&target_win))
{
e_mod_move_widget_objs_raise(mini_apptray_widget->objs);
// Set Input Shape Mask
- switch (e_mod_move_util_root_angle_get())
+ // change later
+ if ((mini_apptray_widget->input_region_id = e_manager_comp_input_region_id_new(m->man)))
{
- case 90:
- case 180:
- case 270:
- // currently, support angle 0 only. because, application is not ready yet.
- break;
- case 0:
- default :
- e_manager_comp_input_region_set(m->man,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h);
- break;
+ e_manager_comp_input_region_id_set(m->man,
+ mini_apptray_widget->input_region_id,
+ x, y, w, h);
+ }
+ else
+ {
+ goto error_cleanup;
}
}
else
E_CHECK(mini_apptray_widget);
m = e_mod_move_util_get();
- if (e_mod_move_mini_apptray_widget_click_get(mini_apptray_widget))
- ecore_x_mouse_up_send(mini_apptray_widget->win,
- mini_apptray_widget->pos.x,
- mini_apptray_widget->pos.y,
- 1);
-
if ((mb = e_mod_move_border_client_find(mini_apptray_widget->win)))
{
// compositor's input region free
- e_manager_comp_input_region_set(m->man, 0, 0, 0, 0);
+ // change later
+ if (mini_apptray_widget->input_region_id)
+ {
+ e_manager_comp_input_region_id_del(m->man,
+ mini_apptray_widget->input_region_id);
+ }
// if mini_apptray_widget is deleted, then mini_apptray's mirror object hide with animation
if (mini_apptray_widget->mini_apptray_move)
E_CHECK_GOTO(mini_apptray_mb, error_cleanup);
zone = mini_apptray_mb->bd->zone;
-// following geometry will be changed. for flick-down effect
switch (mb->angle)
{
- case 0:
- x = 0;
- y = mini_apptray_mb->h * -1;
- break;
case 90:
- x = mini_apptray_mb->w * -1;
+ x = zone->w;
y = 0;
break;
case 180:
x = 0;
- y = zone->h;
+ y = mini_apptray_mb->h * -1;
break;
case 270:
- x = zone->w;
+ x = mini_apptray_mb->w * -1;
y = 0;
break;
+ case 0:
default :
x = 0;
- y = mini_apptray_mb->h * -1;
+ y = zone->h;
break;
}
if (e_mod_move_mini_apptray_objs_animation_state_get(mini_apptray_mb))
}
e_mod_move_mini_apptray_objs_add(mini_apptray_mb);
- // mini_apptray_objs_animation_layer_set
- e_mod_move_mini_apptray_objs_animation_layer_set(mini_apptray_mb);
-
e_mod_move_mini_apptray_e_border_move(mini_apptray_mb, x, y);
e_mod_move_mini_apptray_objs_animation_move(mini_apptray_mb, x, y);
L(LT_EVENT_OBJ,
e_mod_move_widget_objs_resize(mini_apptray_widget->objs, w, h);
// Set Input Shape Mask
- switch (e_mod_move_util_root_angle_get())
+ // change later
+ if (mini_apptray_widget->input_region_id)
{
- case 90:
- case 180:
- case 270:
- // currently, support angle 0 only. because, application is not ready yet.
- break;
- case 0:
- default :
- e_manager_comp_input_region_set(m->man,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].x,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].y,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].w,
- m->mini_apptray_widget_geometry[E_MOVE_ANGLE_0].h);
- break;
+ e_manager_comp_input_region_id_set(m->man,
+ mini_apptray_widget->input_region_id,
+ x, y, w, h);
}
ret = EINA_TRUE;
Ecore_X_Window win;
Eina_Bool mini_apptray_move;
Evas_Point pos; // mouse position
+ int input_region_id;
};
typedef struct _E_Move_Mini_Apptray_Widget E_Move_Mini_Apptray_Widget;
mo->obj = e_manager_comp_src_shadow_get(m->man, comp_src);
E_CHECK_GOTO(mo->obj, error_cleanup);
evas_object_data_set(mo->obj,"comp_shadow_obj", mo->obj);
-
+ //comp's shadow obj move lock
+ e_manager_comp_src_move_lock(m->man, comp_src);
evas_object_event_callback_add(mo->obj, EVAS_CALLBACK_DEL,
_e_mod_move_cb_comp_object_del, mb);
}
e_mod_move_bd_move_objs_del(E_Move_Border *mb,
Eina_List *objs)
{
+ E_Move *m = NULL;
+ E_Manager_Comp_Source *comp_src = NULL;
E_Move_Object *mo;
+
E_CHECK(mb);
E_CHECK(objs);
+
+ m = mb->m;
+ E_CHECK(m);
+
EINA_LIST_FREE(objs, mo)
{
if (mo->mirror) e_mod_move_util_border_hidden_set(mb, EINA_FALSE);
+ else
+ {
+ if (mb->bd)
+ {
+ comp_src = e_manager_comp_src_get(m->man, mb->bd->win);
+ if (comp_src)
+ {
+ e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
+ //comp's shadow obj move unlock
+ e_manager_comp_src_move_unlock(m->man, comp_src);
+ }
+ }
+ }
e_mod_move_obj_del(mo);
}
}
zy = mo->zone->y;
}
evas_object_move(mo->obj, x - zx, y - zy);
+
+ mo->geometry.x = x;
+ mo->geometry.y = y;
}
}
if (!mo) continue;
if (!mo->obj) continue;
evas_object_resize(mo->obj, w, h);
+
+ mo->geometry.w = w;
+ mo->geometry.h = h;
}
}
}
}
+EINTERN void
+e_mod_move_bd_move_objs_geometry_get(E_Move_Border *mb,
+ int *x,
+ int *y,
+ int *w,
+ int *h)
+{
+ Eina_List *l;
+ E_Move_Object *mo;
+
+ E_CHECK(mb);
+ E_CHECK(x);
+ E_CHECK(y);
+ E_CHECK(w);
+ E_CHECK(h);
+
+ EINA_LIST_FOREACH(mb->objs, l, mo)
+ {
+ if (!mo) continue;
+ *x = mo->geometry.x;
+ *y = mo->geometry.y;
+ *w = mo->geometry.w;
+ *h = mo->geometry.h;
+ }
+}
+
/* local subsystem functions */
static void
_e_mod_move_cb_comp_object_del(void *data,
Evas_Object *obj; // compositor's evas(window) object
Eina_Bool mirror; // TRUE: use compositor's mirror_obj / FALSE: use compositor's shadow_obj
Evas_Object *clipper;// clipping evas object
+
+ struct {
+ int x;
+ int y;
+ int w;
+ int h;
+ } geometry;
};
EINTERN E_Move_Object *e_mod_move_obj_add(E_Move_Border *mb, E_Move_Canvas *canvas, Eina_Bool mirror);
EINTERN void e_mod_move_bd_move_objs_clipper_hide(E_Move_Border *mb);
EINTERN void e_mod_move_bd_move_objs_clipper_move(E_Move_Border *mb, int x, int y);
EINTERN void e_mod_move_bd_move_objs_clipper_resize(E_Move_Border *mb, int w, int h);
+EINTERN void e_mod_move_bd_move_objs_geometry_get(E_Move_Border *mb, int *x, int *y, int *w, int *h);
#endif
#endif
}
// Set No Composite Mode & Rotation UnLock & Destroy below win's mirror object
e_mod_move_quickpanel_stage_deinit(mb);
+
+ ecore_x_e_illume_quickpanel_state_set(zone->black_win, ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
}
// if scroll with clipping use case, hold below windows until only animation is working
L(LT_EVENT_OBJ,
"[MOVE] ev:%15.15s w:0x%08x %s() \n",
"EVAS_OBJ", mb->bd->win, __func__);
- mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
- e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
- e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
- e_mod_move_bd_move_objs_show(mb);
+
+ if (TYPE_NOTIFICATION_CHECK(mb))
+ mb->objs = e_mod_move_bd_move_objs_add(mb, !mirror);
+ else
+ {
+ mb->objs = e_mod_move_bd_move_objs_add(mb, mirror);
+ e_mod_move_bd_move_objs_move(mb, mb->x, mb->y);
+ e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
+ e_mod_move_bd_move_objs_show(mb);
+ }
}
}
}
_e_mod_move_quickpanel_cb_motion_move, mb);
e_mod_move_event_cb_set(mco->event, E_MOVE_EVENT_TYPE_MOTION_END,
_e_mod_move_quickpanel_cb_motion_end, mb);
- e_mod_move_event_send_all_set(mco->event, EINA_TRUE);
+ e_mod_move_event_propagate_type_set(mco->event,
+ E_MOVE_EVENT_PROPAGATE_TYPE_IMMEDIATELY);
}
EINTERN E_Move_Border *
e_mod_move_bd_move_objs_resize(mb, mb->w, mb->h);
e_mod_move_bd_move_objs_show(mb);
+ if (mb->objs) e_mod_move_util_rotation_lock(mb->m);
+
if (m->qp_scroll_with_clipping)
{
e_mod_move_quickpanel_objs_clipper_add(mb);
}
e_mod_move_bd_move_objs_del(mb, mb->objs);
+ e_mod_move_util_rotation_unlock(mb->m);
mb->objs = NULL;
ECORE_X_ILLUME_QUICKPANEL_STATE_ON);
}
}
+
+ ecore_x_e_illume_quickpanel_state_set(zone->black_win, ECORE_X_ILLUME_QUICKPANEL_STATE_ON);
}
e_border_move(bd, x, y);
// Composite mode set true
e_mod_move_util_compositor_composite_mode_set(m, EINA_TRUE);
- e_mod_move_util_rotation_lock(m);
return EINA_TRUE;
}
_e_mod_move_quickpanel_below_window_unset();
}
- e_mod_move_util_rotation_unlock(m);
-
// Composite mode set false
e_mod_move_util_compositor_composite_mode_set(m, EINA_FALSE);
return EINA_TRUE;
#include "e_mod_move_flick.h"
#include "e_mod_move_dim_object.h"
#include "e_mod_move_evas_object.h"
-#include "e_mod_move_indicator_controller.h"
#include "e_mod_move_widget_object.h"
#include "e_mod_move_indicator_widget.h"
#include "e_mod_move_mini_apptray_widget.h"
double landscape;
} indicator_apptray_region_ratio; // indicator's always region ratio
+ struct {
+ double speed;
+ double angle;
+ double distance;
+ double distance_rate;
+ } flick_limit; // indicator / quickpanel / apptray flick limit check
+
Eina_Bool qp_scroll_with_visible_win : 1;
Eina_Bool qp_scroll_with_clipping : 1;
- double flick_speed_limit; // indicator / quickpanel / apptray flick speed limit check
double animation_duration; // apptray / quickpanel move animation duration
int dim_max_opacity; // dim max opacity
int dim_min_opacity; // dim min opacity
- E_Move_Indicator_Controller *indicator_controller; // indicator_controller
Eina_Bool ev_log : 1; // 1 :ecore & evas_object debug event logging 0: do not log event
int ev_log_cnt; // ecore & evas_object debug event logging count
Eina_List *ev_logs; // debug_event_log list
Eina_Bool elm_indicator_mode : 1; // 1: indicator widget mode / 0: indicator window mode
E_Move_Indicator_Widget *indicator_widget; // indicator widget data ( it contains widget object, internal data)
E_Move_Mini_Apptray_Widget *mini_apptray_widget; // mini_apptray widget data ( it contains widget object, internal data)
+ Eina_Bool screen_reader_state : 1; // screen reader state enabled or disabled
struct {
int x;
Eina_List *objs; // list of E_Move_Object. ( it represts Compositor's Shadow Object or Mirror Object)
Eina_List *ctl_objs; // list of E_Move_Control_Object. E_Move_Control_Object has E_Move_Event.
Eina_Bool visible : 1; // is visible. if border is visible, Object could move.
+ Eina_Bool argb : 1; // is argb
E_Move_Border_Type type;
E_Move_Border_Shape_Input *shape_input; // it reprents window's input shape mask info
E_Move_Border_Contents *contents; // it reprents window's contents region info
return angle;
}
+
+EINTERN void
+e_mod_move_mouse_event_send(Ecore_X_Window id,
+ E_Move_Mouse_Event_Type type,
+ Evas_Point pt)
+{
+ E_Border *bd = NULL;
+ Evas_Coord x = 0, y =0, w, h;
+ int button = 1;
+
+ E_CHECK(id);
+
+ bd = e_border_find_all_by_client_window(id);
+ if (bd)
+ {
+ x = bd->x;
+ y = bd->y;
+ w = bd->w;
+ h = bd->h;
+ }
+ else ecore_x_window_geometry_get(id, &x, &y, &w, &h);
+
+ switch (type)
+ {
+ case E_MOVE_MOUSE_EVENT_DOWN:
+ e_mod_move_util_mouse_down_send(id,
+ pt.x - x,
+ pt.y - y,
+ button);
+ break;
+
+ case E_MOVE_MOUSE_EVENT_UP:
+ e_mod_move_util_mouse_up_send(id,
+ pt.x - x,
+ pt.y - y,
+ button);
+ break;
+
+ case E_MOVE_MOUSE_EVENT_MOVE:
+ e_mod_move_util_mouse_move_send(id,
+ pt.x -x,
+ pt.y -y);
+ break;
+
+ default:
+ break;
+ }
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_mouse_down_send(Ecore_X_Window id,
+ int x,
+ int y,
+ int button)
+{
+ XEvent xev;
+ Ecore_X_Window root;
+ int root_x = 0, root_y = 0;
+
+ root = ecore_x_window_root_get(id);
+ ecore_x_pointer_last_xy_get(&root_x, &root_y);
+ xev.xbutton.type = ButtonPress;
+ xev.xbutton.window = id;
+ xev.xbutton.root = root;
+ xev.xbutton.subwindow = id;
+ xev.xbutton.time = ecore_x_current_time_get();
+ xev.xbutton.x = x;
+ xev.xbutton.y = y;
+ xev.xbutton.x_root = root_x;
+ xev.xbutton.y_root = root_y;
+ xev.xbutton.state = 1 << button;
+ xev.xbutton.button = button;
+ xev.xbutton.same_screen = 1;
+ return XSendEvent(ecore_x_display_get(), id, True, ButtonPressMask, &xev) ? EINA_TRUE : EINA_FALSE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_mouse_up_send(Ecore_X_Window id,
+ int x,
+ int y,
+ int button)
+{
+ XEvent xev;
+ Ecore_X_Window root;
+ int root_x = 0, root_y = 0;
+
+ root = ecore_x_window_root_get(id);
+ ecore_x_pointer_last_xy_get(&root_x, &root_y);
+ xev.xbutton.type = ButtonRelease;
+ xev.xbutton.window = id;
+ xev.xbutton.root = root;
+ xev.xbutton.subwindow = id;
+ xev.xbutton.time = ecore_x_current_time_get();
+ xev.xbutton.x = x;
+ xev.xbutton.y = y;
+ xev.xbutton.x_root = root_x;
+ xev.xbutton.y_root = root_y;
+ xev.xbutton.state = 0;
+ xev.xbutton.button = button;
+ xev.xbutton.same_screen = 1;
+ return XSendEvent(ecore_x_display_get(), id, True, ButtonReleaseMask, &xev) ? EINA_TRUE : EINA_FALSE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_mouse_move_send(Ecore_X_Window id,
+ int x,
+ int y)
+{
+ XEvent xev;
+ Ecore_X_Window root;
+ int root_x = 0, root_y = 0;
+
+ root = ecore_x_window_root_get(id);
+ ecore_x_pointer_last_xy_get(&root_x, &root_y);
+ xev.xmotion.type = MotionNotify;
+ xev.xmotion.window = id;
+ xev.xmotion.root = root;
+ xev.xmotion.subwindow = id;
+ xev.xmotion.time = ecore_x_current_time_get();
+ xev.xmotion.x = x;
+ xev.xmotion.y = y;
+ xev.xmotion.x_root = root_x;
+ xev.xmotion.y_root = root_y;
+ xev.xmotion.state = 0;
+ xev.xmotion.is_hint = 0;
+ xev.xmotion.same_screen = 1;
+ return XSendEvent(ecore_x_display_get(), id, True, PointerMotionMask, &xev) ? EINA_TRUE : EINA_FALSE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_prop_indicator_cmd_win_get(Ecore_X_Window *win,
+ E_Move *m)
+{
+ int ret = -1;
+ Ecore_X_Window indi_cmd_win;
+
+ E_CHECK_RETURN(win, EINA_FALSE);
+ E_CHECK_RETURN(m, EINA_FALSE);
+
+ ret = ecore_x_window_prop_window_get(m->man->root,
+ ATOM_INDICATOR_CMD_WIN,
+ &indi_cmd_win, 1);
+
+ if (ret == -1) return EINA_FALSE;
+
+ *win = indi_cmd_win;
+
+ return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_prop_indicator_cmd_win_set(Ecore_X_Window win,
+ E_Move *m)
+{
+ Ecore_X_Window indi_cmd_win;
+
+ E_CHECK_RETURN(win, EINA_FALSE);
+ E_CHECK_RETURN(m, EINA_FALSE);
+
+ if (e_mod_move_util_prop_indicator_cmd_win_get(&indi_cmd_win, m))
+ {
+ if (indi_cmd_win != win )
+ ecore_x_window_prop_window_set(m->man->root,
+ ATOM_INDICATOR_CMD_WIN,
+ &win, 1);
+ }
+ else
+ {
+ ecore_x_window_prop_window_set(m->man->root,
+ ATOM_INDICATOR_CMD_WIN,
+ &win, 1);
+ }
+ return EINA_TRUE;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_prop_active_indicator_win_get(Ecore_X_Window *win,
+ E_Move *m)
+{
+ int ret_prop = -1;
+ Eina_Bool ret = EINA_FALSE;
+ Ecore_X_Window indi_active_win;
+ Ecore_X_Window indi_cmd_win;
+
+ E_CHECK_RETURN(win, EINA_FALSE);
+ E_CHECK_RETURN(m, EINA_FALSE);
+
+ if (e_mod_move_util_prop_indicator_cmd_win_get(&indi_cmd_win, m))
+ {
+ ret_prop = ecore_x_window_prop_window_get(indi_cmd_win,
+ ATOM_ACTIVE_INDICATOR_WIN,
+ &indi_active_win, 1);
+ if (ret_prop != -1)
+ {
+ *win = indi_active_win;
+ ret = EINA_TRUE;
+ }
+ }
+
+ return ret;
+}
+
+EINTERN Eina_Bool
+e_mod_move_util_prop_active_indicator_win_set(Ecore_X_Window win,
+ E_Move *m)
+{
+ Ecore_X_Window indi_active_win;
+ Ecore_X_Window indi_cmd_win;
+ Eina_Bool ret = EINA_FALSE;
+
+ E_CHECK_RETURN(win, EINA_FALSE);
+ E_CHECK_RETURN(m, EINA_FALSE);
+
+ if (e_mod_move_util_prop_active_indicator_win_get(&indi_active_win, m))
+ {
+ if (indi_active_win != win )
+ {
+ if (e_mod_move_util_prop_indicator_cmd_win_get(&indi_cmd_win, m))
+ {
+ ecore_x_window_prop_window_set(indi_cmd_win,
+ ATOM_ACTIVE_INDICATOR_WIN,
+ &win, 1);
+ ret = EINA_TRUE;
+ }
+ }
+ }
+ else
+ {
+ if (e_mod_move_util_prop_indicator_cmd_win_get(&indi_cmd_win, m))
+ {
+ ecore_x_window_prop_window_set(indi_cmd_win,
+ ATOM_ACTIVE_INDICATOR_WIN,
+ &win, 1);
+ ret = EINA_TRUE;
+ }
+ }
+ return ret;
+}
E_MOVE_PANEL_TYPE_APPTRAY
} E_Move_Panel_Type;
+typedef enum _E_Move_Mouse_Event_Type
+{
+ E_MOVE_MOUSE_EVENT_NONE = 0,
+ E_MOVE_MOUSE_EVENT_DOWN,
+ E_MOVE_MOUSE_EVENT_MOVE,
+ E_MOVE_MOUSE_EVENT_UP
+} E_Move_Mouse_Event_Type;
+
EINTERN void e_mod_move_util_set(E_Move *m, E_Manager *man);
EINTERN E_Move *e_mod_move_util_get(void);
EINTERN Eina_Bool e_mod_move_util_border_visible_get(E_Move_Border *mb);
EINTERN Eina_Bool e_mod_move_panel_scrollable_state_init(E_Move_Panel_Scrollable_State *panel_scrollable_state);
EINTERN Eina_Bool e_mod_move_panel_scrollable_state_get(Ecore_X_Window win, E_Move_Panel_Scrollable_State *panel_scrollable_state);
EINTERN Eina_Bool e_mod_move_panel_scrollable_get(E_Move_Border *mb, E_Move_Panel_Type type);
-
+EINTERN void e_mod_move_mouse_event_send(Ecore_X_Window id, E_Move_Mouse_Event_Type type, Evas_Point pt);
+EINTERN Eina_Bool e_mod_move_util_mouse_down_send(Ecore_X_Window id, int x, int y, int button);
+EINTERN Eina_Bool e_mod_move_util_mouse_up_send(Ecore_X_Window id, int x, int y, int button);
+EINTERN Eina_Bool e_mod_move_util_mouse_move_send(Ecore_X_Window id, int x, int y);
+EINTERN Eina_Bool e_mod_move_util_prop_indicator_cmd_win_get(Ecore_X_Window *win, E_Move *m);
+EINTERN Eina_Bool e_mod_move_util_prop_indicator_cmd_win_set(Ecore_X_Window win, E_Move *m);
+EINTERN Eina_Bool e_mod_move_util_prop_active_indicator_win_get(Ecore_X_Window *win, E_Move *m);
+EINTERN Eina_Bool e_mod_move_util_prop_active_indicator_win_set(Ecore_X_Window win, E_Move *m);
#endif
#endif
zy = mwo->zone->y;
}
evas_object_move(mwo->obj, x - zx, y - zy);
+ mwo->geometry.x = x;
+ mwo->geometry.y = y;
}
}
int h)
{
Eina_List *l;
- E_Move_Evas_Object *meo;
+ E_Move_Widget_Object *mwo;
E_CHECK(objs);
- EINA_LIST_FOREACH(objs, l, meo)
+ EINA_LIST_FOREACH(objs, l, mwo)
{
- if (!meo) continue;
- if (!meo->obj) continue;
- evas_object_resize(meo->obj, w, h);
+ if (!mwo) continue;
+ if (!mwo->obj) continue;
+ evas_object_resize(mwo->obj, w, h);
+ mwo->geometry.w = w;
+ mwo->geometry.h = h;
}
}
evas_object_color_set(mwo->obj, r, g, b, a);
}
}
+
+EINTERN void
+e_mod_move_widget_objs_geometry_get(Eina_List *objs,
+ int *x,
+ int *y,
+ int *w,
+ int *h)
+{
+ Eina_List *l;
+ E_Move_Widget_Object *mwo;
+
+ E_CHECK(objs);
+ E_CHECK(x);
+ E_CHECK(y);
+ E_CHECK(w);
+ E_CHECK(h);
+
+ EINA_LIST_FOREACH(objs, l, mwo)
+ {
+ if (!mwo) continue;
+ *x = mwo->geometry.x;
+ *y = mwo->geometry.y;
+ *w = mwo->geometry.w;
+ *h = mwo->geometry.h;
+ }
+}
Evas_Object *obj; // compositor's evas(window) object
E_Move_Event *event; // evas object's event handler object
+
+ struct {
+ int x;
+ int y;
+ int w;
+ int h;
+ } geometry;
};
EINTERN E_Move_Widget_Object *e_mod_move_widget_obj_add(E_Move *m, E_Move_Canvas *canvas);
EINTERN void e_mod_move_widget_objs_stack_above(Eina_List *objs, Eina_List *objs2);
EINTERN void e_mod_move_widget_objs_layer_set(Eina_List *objs, short l);
EINTERN void e_mod_move_widget_objs_color_set(Eina_List *objs, int r, int g, int b, int a);
+EINTERN void e_mod_move_widget_objs_geometry_get(Eina_List *objs, int *x, int *y, int *w, int *h);
#endif
#endif
Name: e17-extra-modules
Summary: The E17 Extra Modules The E17 extra modules consists of modules made by SAMSUNG
-Version: 0.10.11
+Version: 0.11.1
Release: 1
Group: System/GUI/Other
License: BSD