redo maximize animations to actually change window geometry
this is ugly, but that's why desksanity is an external module!
This commit is contained in:
parent
c90c682587
commit
44ccbc68bd
|
@ -42,82 +42,4 @@ collections {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#define COMP_EFFECT_DURATION 0.2
|
|
||||||
|
|
||||||
group { name: "e/comp/effects/desksanity/maximize";
|
|
||||||
script {
|
|
||||||
public message(Msg_Type:type, id, ...) {
|
|
||||||
if ((type == MSG_INT_SET) && (id == 0)) {
|
|
||||||
/* set state */
|
|
||||||
new st;
|
|
||||||
|
|
||||||
st = getarg(2);
|
|
||||||
if (st == 1)
|
|
||||||
set_state(PART:"mover", "custom", 0.0);
|
|
||||||
else
|
|
||||||
set_state(PART:"mover", "default", 0.0);
|
|
||||||
} else if ((type == MSG_INT_SET) && (id == 1)) {
|
|
||||||
/* client geom[4] */
|
|
||||||
new x, y, xx, yy;
|
|
||||||
|
|
||||||
x = getarg(2);
|
|
||||||
y = getarg(3);
|
|
||||||
xx = getarg(4);
|
|
||||||
yy = getarg(5);
|
|
||||||
|
|
||||||
custom_state(PART:"mover", "default", 0.0);
|
|
||||||
set_state_val(PART:"mover", STATE_REL1_OFFSET, x, y);
|
|
||||||
set_state_val(PART:"mover", STATE_REL2_OFFSET, xx, yy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parts {
|
|
||||||
part { name: "mover"; type: SPACER;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
part { name: "e.swallow.content"; type: SWALLOW;
|
|
||||||
description { state: "default" 0.0;
|
|
||||||
rel1.to: "mover";
|
|
||||||
rel2.to: "mover";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
programs {
|
|
||||||
program {
|
|
||||||
name: "show";
|
|
||||||
signal: "e,action,go";
|
|
||||||
source: "e";
|
|
||||||
filter: "mover" "default";
|
|
||||||
action: STATE_SET "custom" 0.0;
|
|
||||||
transition: SINUSOIDAL COMP_EFFECT_DURATION CURRENT;
|
|
||||||
target: "mover";
|
|
||||||
after: "done";
|
|
||||||
}
|
|
||||||
program {
|
|
||||||
name: "hide";
|
|
||||||
signal: "e,action,go";
|
|
||||||
source: "e";
|
|
||||||
filter: "mover" "custom";
|
|
||||||
action: STATE_SET "default" 0.0;
|
|
||||||
transition: SINUSOIDAL COMP_EFFECT_DURATION CURRENT;
|
|
||||||
target: "mover";
|
|
||||||
after: "done";
|
|
||||||
}
|
|
||||||
program {
|
|
||||||
name: "stop";
|
|
||||||
signal: "e,action,stop";
|
|
||||||
source: "e";
|
|
||||||
action: ACTION_STOP;
|
|
||||||
target: "show";
|
|
||||||
target: "hide";
|
|
||||||
}
|
|
||||||
program {
|
|
||||||
name: "done";
|
|
||||||
action: SIGNAL_EMIT "e,action,done" "e";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
|
||||||
E_CONFIG_DD_FREE(conf_edd);
|
E_CONFIG_DD_FREE(conf_edd);
|
||||||
E_FREE(mod);
|
E_FREE(mod);
|
||||||
E_FREE_LIST(handlers, ecore_event_handler_del);
|
E_FREE_LIST(handlers, ecore_event_handler_del);
|
||||||
efx_shutdown();
|
//efx_shutdown(); broken...
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,18 +2,59 @@
|
||||||
|
|
||||||
static Ecore_Event_Handler *eh = NULL;
|
static Ecore_Event_Handler *eh = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ds_unmaximize_post(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||||
|
{
|
||||||
|
E_Client *ec = data;
|
||||||
|
Eina_Rectangle *rect;
|
||||||
|
int x, y, w, h;
|
||||||
|
double time = 0.15;
|
||||||
|
|
||||||
|
if (e_comp_config_get()->match.disable_borders) return;
|
||||||
|
if (e_comp_config_get()->fast_borders)
|
||||||
|
time /= 2;
|
||||||
|
w = ec->w, h = ec->h;
|
||||||
|
evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL);
|
||||||
|
|
||||||
|
rect = evas_object_data_del(obj, "__DSUMAX");
|
||||||
|
evas_object_geometry_set(obj, rect->x, rect->y, rect->w, rect->h);
|
||||||
|
free(rect);
|
||||||
|
efx_resize(ec->frame, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_POINT(x, y), w, h, time, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ds_unmaximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
_ds_unmaximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
E_Client *ec = data;
|
E_Client *ec = data;
|
||||||
int x, y, w, h;
|
Eina_Rectangle *rect;
|
||||||
|
|
||||||
e_comp_object_effect_set(ec->frame, "desksanity/maximize");
|
if (e_comp_config_get()->match.disable_borders) return;
|
||||||
e_comp_object_frame_xy_adjust(ec->frame, ec->saved.x, ec->saved.y, &x, &y);
|
|
||||||
e_comp_object_frame_wh_adjust(ec->frame, ec->saved.w, ec->saved.h, &w, &h);
|
rect = malloc(sizeof(Eina_Rectangle));
|
||||||
e_comp_object_effect_params_set(ec->frame, 1, (int[]){ec->x - x, ec->y - y, (ec->x + ec->w) - (x + w), (ec->y + ec->h) - (y + h)}, 4);
|
rect->x = ec->x, rect->y = ec->y;
|
||||||
e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1);
|
rect->w = ec->w, rect->h = ec->h;
|
||||||
e_comp_object_effect_start(ec->frame, NULL, NULL);
|
evas_object_data_set(ec->frame, "__DSUMAX", rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ds_unmaximize_pre(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||||
|
{
|
||||||
|
E_Client *ec = data;
|
||||||
|
Eina_Bool max;
|
||||||
|
|
||||||
|
max = !!evas_object_data_del(ec->frame, "__DSMAX");
|
||||||
|
if (max)
|
||||||
|
efx_resize_stop(ec->frame);
|
||||||
|
ec->maximize_override = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ds_maximize_done(void *data, Efx_Map_Data *emd EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
|
||||||
|
{
|
||||||
|
E_Client *ec = data;
|
||||||
|
|
||||||
|
ec->maximize_override = 0;
|
||||||
|
evas_object_data_del(ec->frame, "__DSMAX");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -21,13 +62,19 @@ _ds_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNU
|
||||||
{
|
{
|
||||||
E_Client *ec = data;
|
E_Client *ec = data;
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
int ecx, ecy, ecw, ech;
|
||||||
|
double time = 0.2;
|
||||||
|
|
||||||
e_comp_object_effect_set(ec->frame, "desksanity/maximize");
|
if (e_comp_config_get()->match.disable_borders) return;
|
||||||
|
if (e_comp_config_get()->fast_borders)
|
||||||
|
time /= 2;
|
||||||
|
ec->maximize_override = 1;
|
||||||
|
ecx = ec->x, ecy = ec->y, ecw = ec->w, ech = ec->h;
|
||||||
e_comp_object_frame_xy_adjust(ec->frame, ec->saved.x, ec->saved.y, &x, &y);
|
e_comp_object_frame_xy_adjust(ec->frame, ec->saved.x, ec->saved.y, &x, &y);
|
||||||
e_comp_object_frame_wh_adjust(ec->frame, ec->saved.w, ec->saved.h, &w, &h);
|
evas_object_geometry_get(ec->frame, NULL, NULL, &w, &h);
|
||||||
e_comp_object_effect_params_set(ec->frame, 1, (int[]){x - ec->x, y - ec->y, (x + w) - (ec->x + ec->w), (y + h) - (ec->y + ec->h)}, 4);
|
evas_object_geometry_set(ec->frame, x, y, w, h);
|
||||||
e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1);
|
efx_resize(ec->frame, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_POINT(ecx, ecy), ecw, ech, time, _ds_maximize_done, ec);
|
||||||
e_comp_object_effect_start(ec->frame, NULL, NULL);
|
evas_object_data_set(ec->frame, "__DSMAX", (void*)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -35,7 +82,9 @@ _ds_maximize_check(E_Client *ec)
|
||||||
{
|
{
|
||||||
if (e_client_util_ignored_get(ec)) return;
|
if (e_client_util_ignored_get(ec)) return;
|
||||||
evas_object_smart_callback_add(ec->frame, "maximize_done", _ds_maximize, ec);
|
evas_object_smart_callback_add(ec->frame, "maximize_done", _ds_maximize, ec);
|
||||||
|
evas_object_smart_callback_add(ec->frame, "unmaximize_pre", _ds_unmaximize_pre, ec);
|
||||||
evas_object_smart_callback_add(ec->frame, "unmaximize", _ds_unmaximize, ec);
|
evas_object_smart_callback_add(ec->frame, "unmaximize", _ds_unmaximize, ec);
|
||||||
|
evas_object_smart_callback_add(ec->frame, "unmaximize_done", _ds_unmaximize_post, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -63,8 +112,10 @@ maximize_shutdown(void)
|
||||||
E_CLIENT_FOREACH(e_comp_get(NULL), ec)
|
E_CLIENT_FOREACH(e_comp_get(NULL), ec)
|
||||||
{
|
{
|
||||||
if (e_client_util_ignored_get(ec)) continue;
|
if (e_client_util_ignored_get(ec)) continue;
|
||||||
evas_object_smart_callback_del(ec->frame, "maximize", _ds_maximize);
|
evas_object_smart_callback_del(ec->frame, "maximize_done", _ds_maximize);
|
||||||
|
evas_object_smart_callback_del(ec->frame, "unmaximize_pre", _ds_unmaximize_pre);
|
||||||
evas_object_smart_callback_del(ec->frame, "unmaximize", _ds_unmaximize);
|
evas_object_smart_callback_del(ec->frame, "unmaximize", _ds_unmaximize);
|
||||||
|
evas_object_smart_callback_del(ec->frame, "unmaximize_done", _ds_unmaximize_post);
|
||||||
}
|
}
|
||||||
E_FREE_FUNC(eh, ecore_event_handler_del);
|
E_FREE_FUNC(eh, ecore_event_handler_del);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue