|
|
|
@ -3,17 +3,58 @@ |
|
|
|
|
static Ecore_Event_Handler *eh = NULL; |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
_ds_unmaximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) |
|
|
|
|
_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; |
|
|
|
|
|
|
|
|
|
e_comp_object_effect_set(ec->frame, "desksanity/maximize"); |
|
|
|
|
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); |
|
|
|
|
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); |
|
|
|
|
e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); |
|
|
|
|
e_comp_object_effect_start(ec->frame, NULL, NULL); |
|
|
|
|
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 |
|
|
|
|
_ds_unmaximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) |
|
|
|
|
{ |
|
|
|
|
E_Client *ec = data; |
|
|
|
|
Eina_Rectangle *rect; |
|
|
|
|
|
|
|
|
|
if (e_comp_config_get()->match.disable_borders) return; |
|
|
|
|
|
|
|
|
|
rect = malloc(sizeof(Eina_Rectangle)); |
|
|
|
|
rect->x = ec->x, rect->y = ec->y; |
|
|
|
|
rect->w = ec->w, rect->h = ec->h; |
|
|
|
|
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 |
|
|
|
@ -21,13 +62,19 @@ _ds_maximize(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNU |
|
|
|
|
{ |
|
|
|
|
E_Client *ec = data; |
|
|
|
|
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_wh_adjust(ec->frame, ec->saved.w, ec->saved.h, &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); |
|
|
|
|
e_comp_object_effect_params_set(ec->frame, 0, (int[]){1}, 1); |
|
|
|
|
e_comp_object_effect_start(ec->frame, NULL, NULL); |
|
|
|
|
evas_object_geometry_get(ec->frame, NULL, NULL, &w, &h); |
|
|
|
|
evas_object_geometry_set(ec->frame, x, y, w, h); |
|
|
|
|
efx_resize(ec->frame, EFX_EFFECT_SPEED_SINUSOIDAL, EFX_POINT(ecx, ecy), ecw, ech, time, _ds_maximize_done, ec); |
|
|
|
|
evas_object_data_set(ec->frame, "__DSMAX", (void*)1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
@ -35,7 +82,9 @@ _ds_maximize_check(E_Client *ec) |
|
|
|
|
{ |
|
|
|
|
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, "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_done", _ds_unmaximize_post, ec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static Eina_Bool |
|
|
|
@ -63,8 +112,10 @@ maximize_shutdown(void) |
|
|
|
|
E_CLIENT_FOREACH(e_comp_get(NULL), ec) |
|
|
|
|
{ |
|
|
|
|
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_done", _ds_unmaximize_post); |
|
|
|
|
} |
|
|
|
|
E_FREE_FUNC(eh, ecore_event_handler_del); |
|
|
|
|
} |
|
|
|
|