forked from enlightenment/enlightenment
Tiling2: Moved more redundant code.
This commit is contained in:
parent
96645931bd
commit
76c4fb85d9
|
@ -252,22 +252,6 @@ get_window_count(void)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
get_transition_count(void)
|
|
||||||
{
|
|
||||||
int res = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < TILING_MAX_STACKS; i++) {
|
|
||||||
if (!_G.tinfo->stacks[i])
|
|
||||||
break;
|
|
||||||
res += eina_list_count(_G.tinfo->stacks[i]);
|
|
||||||
}
|
|
||||||
if (_G.tinfo->stacks[0])
|
|
||||||
res--;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_theme_edje_object_set_aux(Evas_Object *obj, const char *group)
|
_theme_edje_object_set_aux(Evas_Object *obj, const char *group)
|
||||||
{
|
{
|
||||||
|
@ -838,41 +822,6 @@ _reorganize_stack(int stack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_move_resize_stack(int stack, int delta_pos, int delta_size)
|
|
||||||
{
|
|
||||||
Eina_List *list = _G.tinfo->stacks[stack];
|
|
||||||
Eina_List *l;
|
|
||||||
|
|
||||||
for (l = list; l; l = l->next) {
|
|
||||||
E_Client *ec = l->data;
|
|
||||||
Client_Extra *extra;
|
|
||||||
|
|
||||||
extra = eina_hash_find(_G.client_extras, &ec);
|
|
||||||
if (!extra) {
|
|
||||||
ERR("No extra for %p", ec);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_G.tinfo->conf->use_rows) {
|
|
||||||
extra->expected.y += delta_pos;
|
|
||||||
extra->expected.h += delta_size;
|
|
||||||
} else {
|
|
||||||
extra->expected.x += delta_pos;
|
|
||||||
extra->expected.w += delta_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
_e_client_move_resize(ec,
|
|
||||||
extra->expected.x,
|
|
||||||
extra->expected.y,
|
|
||||||
extra->expected.w,
|
|
||||||
extra->expected.h);
|
|
||||||
}
|
|
||||||
|
|
||||||
_G.tinfo->pos[stack] += delta_pos;
|
|
||||||
_G.tinfo->size[stack] += delta_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_set_stack_geometry(int stack, int pos, int size)
|
_set_stack_geometry(int stack, int pos, int size)
|
||||||
{
|
{
|
||||||
|
@ -1900,564 +1849,7 @@ _e_mod_action_move_cb(E_Object *obj __UNUSED__,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* }}} */
|
||||||
/* Adjust Transitions {{{ */
|
/* Toggle split mode {{{ */
|
||||||
|
|
||||||
static void
|
|
||||||
_transition_overlays_free_cb(void *data)
|
|
||||||
{
|
|
||||||
transition_overlay_t *trov = data;
|
|
||||||
|
|
||||||
if (trov->overlay.popup) {
|
|
||||||
evas_object_hide(trov->overlay.popup);
|
|
||||||
evas_object_del(trov->overlay.popup);
|
|
||||||
trov->overlay.popup = NULL;
|
|
||||||
}
|
|
||||||
if (trov != _G.transition_overlay) {
|
|
||||||
E_FREE(trov);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_transition_move_cols(tiling_move_t direction)
|
|
||||||
{
|
|
||||||
int delta = TILING_RESIZE_STEP;
|
|
||||||
int stack;
|
|
||||||
Evas_Object *popup = NULL;
|
|
||||||
|
|
||||||
if (!_G.transition_overlay)
|
|
||||||
return;
|
|
||||||
|
|
||||||
stack = _G.transition_overlay->stack;
|
|
||||||
|
|
||||||
if (_G.transition_overlay->ec) {
|
|
||||||
Eina_List *l = NULL;
|
|
||||||
E_Client *ec = _G.transition_overlay->ec,
|
|
||||||
*nextec = NULL;
|
|
||||||
Client_Extra *extra = NULL,
|
|
||||||
*nextextra = NULL;
|
|
||||||
int min_height = 0;
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
l = eina_list_data_find_list(_G.tinfo->stacks[stack], ec);
|
|
||||||
if (!l) {
|
|
||||||
ERR("unable to ec %p in stack %d", ec, stack);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
extra = eina_hash_find(_G.client_extras, &ec);
|
|
||||||
if (!extra) {
|
|
||||||
ERR("No extra for %p", ec);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nextec = l->next->data;
|
|
||||||
nextextra = eina_hash_find(_G.client_extras, &nextec);
|
|
||||||
if (!nextextra) {
|
|
||||||
ERR("No extra for %p", nextec);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (direction == MOVE_UP) {
|
|
||||||
delta *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
nextec = l->next->data;
|
|
||||||
min_height = MAX(nextec->icccm.base_h, 1);
|
|
||||||
|
|
||||||
if (nextextra->expected.h - delta < min_height)
|
|
||||||
delta = nextextra->expected.h - min_height;
|
|
||||||
|
|
||||||
nextextra->expected.y += delta;
|
|
||||||
nextextra->expected.h -= delta;
|
|
||||||
_e_client_move_resize(nextec,
|
|
||||||
nextextra->expected.x,
|
|
||||||
nextextra->expected.y,
|
|
||||||
nextextra->expected.w,
|
|
||||||
nextextra->expected.h);
|
|
||||||
|
|
||||||
extra->expected.h += delta;
|
|
||||||
_e_client_move_resize(ec,
|
|
||||||
extra->expected.x,
|
|
||||||
extra->expected.y,
|
|
||||||
extra->expected.w,
|
|
||||||
extra->expected.h);
|
|
||||||
|
|
||||||
popup = _G.transition_overlay->overlay.popup;
|
|
||||||
evas_object_geometry_get(popup, &x, &y, NULL, NULL);
|
|
||||||
evas_object_move(popup, x, y + delta);
|
|
||||||
} else {
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
if (stack == TILING_MAX_STACKS || !_G.tinfo->stacks[stack + 1]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (direction == MOVE_LEFT) {
|
|
||||||
delta *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (delta + 1 > _G.tinfo->size[stack + 1])
|
|
||||||
delta = _G.tinfo->size[stack + 1] - 1;
|
|
||||||
|
|
||||||
_move_resize_stack(stack, 0, delta);
|
|
||||||
_move_resize_stack(stack+1, delta, -delta);
|
|
||||||
|
|
||||||
popup = _G.transition_overlay->overlay.popup;
|
|
||||||
evas_object_geometry_get(popup, &x, &y, NULL, NULL);
|
|
||||||
evas_object_move(popup, x + delta, y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_transition_move_rows(tiling_move_t direction)
|
|
||||||
{
|
|
||||||
int delta = TILING_RESIZE_STEP;
|
|
||||||
int stack;
|
|
||||||
int x, y;
|
|
||||||
Evas_Object *popup = NULL;
|
|
||||||
|
|
||||||
if (!_G.transition_overlay)
|
|
||||||
return;
|
|
||||||
|
|
||||||
stack = _G.transition_overlay->stack;
|
|
||||||
|
|
||||||
if (_G.transition_overlay->ec) {
|
|
||||||
Eina_List *l = NULL;
|
|
||||||
E_Client *ec = _G.transition_overlay->ec,
|
|
||||||
*nextec = NULL;
|
|
||||||
Client_Extra *extra = NULL,
|
|
||||||
*nextextra = NULL;
|
|
||||||
int min_width = 0;
|
|
||||||
|
|
||||||
l = eina_list_data_find_list(_G.tinfo->stacks[stack], ec);
|
|
||||||
if (!l) {
|
|
||||||
ERR("unable to ec %p in stack %d", ec, stack);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
extra = eina_hash_find(_G.client_extras, &ec);
|
|
||||||
if (!extra) {
|
|
||||||
ERR("No extra for %p", ec);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nextec = l->next->data;
|
|
||||||
nextextra = eina_hash_find(_G.client_extras, &nextec);
|
|
||||||
if (!nextextra) {
|
|
||||||
ERR("No extra for %p", nextec);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (direction == MOVE_LEFT) {
|
|
||||||
delta *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
nextec = l->next->data;
|
|
||||||
min_width = MAX(nextec->icccm.base_w, 1);
|
|
||||||
|
|
||||||
if (nextextra->expected.w - delta < min_width)
|
|
||||||
delta = nextextra->expected.w - min_width;
|
|
||||||
|
|
||||||
nextextra->expected.x += delta;
|
|
||||||
nextextra->expected.w -= delta;
|
|
||||||
_e_client_move_resize(nextec,
|
|
||||||
nextextra->expected.x,
|
|
||||||
nextextra->expected.y,
|
|
||||||
nextextra->expected.w,
|
|
||||||
nextextra->expected.h);
|
|
||||||
|
|
||||||
extra->expected.w += delta;
|
|
||||||
_e_client_move_resize(ec,
|
|
||||||
extra->expected.x,
|
|
||||||
extra->expected.y,
|
|
||||||
extra->expected.w,
|
|
||||||
extra->expected.h);
|
|
||||||
|
|
||||||
popup = _G.transition_overlay->overlay.popup;
|
|
||||||
evas_object_geometry_get(popup, &x, &y, NULL, NULL);
|
|
||||||
evas_object_move(popup, x + delta, y);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (stack == TILING_MAX_STACKS || !_G.tinfo->stacks[stack + 1]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (direction == MOVE_UP) {
|
|
||||||
delta *= -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (delta + 1 > _G.tinfo->size[stack + 1])
|
|
||||||
delta = _G.tinfo->size[stack + 1] - 1;
|
|
||||||
|
|
||||||
_move_resize_stack(stack, 0, delta);
|
|
||||||
_move_resize_stack(stack+1, delta, -delta);
|
|
||||||
|
|
||||||
popup = _G.transition_overlay->overlay.popup;
|
|
||||||
evas_object_geometry_get(popup, &x, &y, NULL, NULL);
|
|
||||||
evas_object_move(popup, x, y + delta);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_transition_overlay_key_down(void *data __UNUSED__,
|
|
||||||
int type __UNUSED__,
|
|
||||||
void *event)
|
|
||||||
{
|
|
||||||
Ecore_Event_Key *ev = event;
|
|
||||||
|
|
||||||
if (ev->event_window != _G.action_input_win)
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
|
|
||||||
if (strcmp(ev->key, "Return") == 0)
|
|
||||||
goto stop;
|
|
||||||
if (strcmp(ev->key, "Escape") == 0)
|
|
||||||
goto stop;
|
|
||||||
|
|
||||||
/* reset timer */
|
|
||||||
ecore_timer_delay(_G.action_timer, TILING_OVERLAY_TIMEOUT
|
|
||||||
- ecore_timer_pending_get(_G.action_timer));
|
|
||||||
|
|
||||||
if (_G.transition_overlay) {
|
|
||||||
DBG("ev->key='%s'; %p %d", ev->key,
|
|
||||||
_G.transition_overlay->ec, _G.tinfo->conf->use_rows);
|
|
||||||
if ((strcmp(ev->key, "Up") == 0)
|
|
||||||
|| (strcmp(ev->key, "k") == 0))
|
|
||||||
{
|
|
||||||
if (_G.transition_overlay->ec && !_G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_cols(MOVE_UP);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
} else
|
|
||||||
if (!_G.transition_overlay->ec && _G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_rows(MOVE_UP);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if ((strcmp(ev->key, "Down") == 0)
|
|
||||||
|| (strcmp(ev->key, "j") == 0))
|
|
||||||
{
|
|
||||||
if (_G.transition_overlay->ec && !_G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_cols(MOVE_DOWN);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
} else
|
|
||||||
if (!_G.transition_overlay->ec && _G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_rows(MOVE_DOWN);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if ((strcmp(ev->key, "Left") == 0)
|
|
||||||
|| (strcmp(ev->key, "h") == 0))
|
|
||||||
{
|
|
||||||
if (!_G.transition_overlay->ec && !_G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_cols(MOVE_LEFT);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
} else
|
|
||||||
if (_G.transition_overlay->ec && _G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_rows(MOVE_LEFT);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
if ((strcmp(ev->key, "Right") == 0)
|
|
||||||
|| (strcmp(ev->key, "l") == 0))
|
|
||||||
{
|
|
||||||
if (!_G.transition_overlay->ec && !_G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_cols(MOVE_RIGHT);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
} else
|
|
||||||
if (_G.transition_overlay->ec && _G.tinfo->conf->use_rows) {
|
|
||||||
_transition_move_rows(MOVE_RIGHT);
|
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
|
||||||
} else {
|
|
||||||
if (strcmp(ev->key, "Backspace") == 0) {
|
|
||||||
char *key = _G.keys;
|
|
||||||
|
|
||||||
while (*key)
|
|
||||||
key++;
|
|
||||||
*key = '\0';
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
|
||||||
}
|
|
||||||
if (ev->key[0] && !ev->key[1] && strchr(tiling_g.config->keyhints,
|
|
||||||
ev->key[1]))
|
|
||||||
{
|
|
||||||
transition_overlay_t *trov = NULL;
|
|
||||||
E_Client *ec = NULL;
|
|
||||||
Client_Extra *extra = NULL;
|
|
||||||
Evas_Coord ew, eh;
|
|
||||||
char *key = _G.keys;
|
|
||||||
|
|
||||||
while (*key)
|
|
||||||
key++;
|
|
||||||
*key++ = ev->key[0];
|
|
||||||
*key = '\0';
|
|
||||||
|
|
||||||
trov = eina_hash_find(_G.overlays, _G.keys);
|
|
||||||
if (!trov) {
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
|
||||||
}
|
|
||||||
ec = trov->ec;
|
|
||||||
|
|
||||||
_G.transition_overlay = trov;
|
|
||||||
eina_hash_free(_G.overlays);
|
|
||||||
_G.overlays = NULL;
|
|
||||||
|
|
||||||
if (ec) {
|
|
||||||
extra = eina_hash_find(_G.client_extras, &ec);
|
|
||||||
if (!extra) {
|
|
||||||
ERR("No extra for %p", ec);
|
|
||||||
goto stop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!trov->overlay.obj) {
|
|
||||||
trov->overlay.obj =
|
|
||||||
edje_object_add(e_comp_get(_G.tinfo->desk)->evas);
|
|
||||||
}
|
|
||||||
if (!trov->overlay.popup) {
|
|
||||||
trov->overlay.popup = e_comp_object_util_add(trov->overlay.obj, E_COMP_OBJECT_TYPE_POPUP);
|
|
||||||
evas_object_layer_set(trov->overlay.popup, E_LAYER_CLIENT_NORMAL);
|
|
||||||
}
|
|
||||||
if ((ec && !_G.tinfo->conf->use_rows)
|
|
||||||
|| (!ec && _G.tinfo->conf->use_rows)) {
|
|
||||||
_theme_edje_object_set(trov->overlay.obj,
|
|
||||||
"modules/tiling/transition/horizontal");
|
|
||||||
} else {
|
|
||||||
_theme_edje_object_set(trov->overlay.obj,
|
|
||||||
"modules/tiling/transition/vertical");
|
|
||||||
}
|
|
||||||
|
|
||||||
edje_object_size_min_calc(trov->overlay.obj, &ew, &eh);
|
|
||||||
if (ec) {
|
|
||||||
if (_G.tinfo->conf->use_rows) {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(extra->expected.x - trov->ec->zone->x +
|
|
||||||
extra->expected.w - (ew / 2)),
|
|
||||||
(extra->expected.y - trov->ec->zone->y +
|
|
||||||
((extra->expected.h - eh) / 2)),
|
|
||||||
ew, eh);
|
|
||||||
} else {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(extra->expected.x - trov->ec->zone->x +
|
|
||||||
((extra->expected.w - ew) / 2)),
|
|
||||||
(extra->expected.y - trov->ec->zone->y +
|
|
||||||
extra->expected.h - (eh / 2)),
|
|
||||||
ew, eh);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (_G.tinfo->conf->use_rows) {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(trov->ec->zone->w/2 - ew/2),
|
|
||||||
(_G.tinfo->pos[trov->stack]
|
|
||||||
+ _G.tinfo->size[trov->stack]
|
|
||||||
- trov->ec->zone->y - eh/2),
|
|
||||||
ew, eh);
|
|
||||||
} else {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(_G.tinfo->pos[trov->stack]
|
|
||||||
+ _G.tinfo->size[trov->stack]
|
|
||||||
- trov->ec->zone->x - ew/2),
|
|
||||||
(trov->ec->zone->h/2 - eh/2),
|
|
||||||
ew, eh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evas_object_show(trov->overlay.popup);
|
|
||||||
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stop:
|
|
||||||
end_special_input();
|
|
||||||
return ECORE_CALLBACK_DONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_do_transition_overlay(void)
|
|
||||||
{
|
|
||||||
int nb_transitions;
|
|
||||||
Ecore_X_Window parent;
|
|
||||||
int hints_len;
|
|
||||||
int key_len;
|
|
||||||
int n = 0;
|
|
||||||
int nmax;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
end_special_input();
|
|
||||||
|
|
||||||
nb_transitions = get_transition_count();
|
|
||||||
if (nb_transitions < 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_G.input_mode = INPUT_MODE_TRANSITION;
|
|
||||||
|
|
||||||
_G.overlays = eina_hash_string_small_new(_transition_overlays_free_cb);
|
|
||||||
hints_len = strlen(tiling_g.config->keyhints);
|
|
||||||
key_len = 1;
|
|
||||||
nmax = hints_len;
|
|
||||||
if (hints_len < nb_transitions) {
|
|
||||||
key_len = 2;
|
|
||||||
nmax *= hints_len;
|
|
||||||
if (hints_len * hints_len < nb_transitions) {
|
|
||||||
key_len = 3;
|
|
||||||
nmax *= hints_len;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < TILING_MAX_STACKS; i++) {
|
|
||||||
Eina_List *l;
|
|
||||||
E_Client *ec;
|
|
||||||
|
|
||||||
if (!_G.tinfo->stacks[i])
|
|
||||||
break;
|
|
||||||
EINA_LIST_FOREACH(_G.tinfo->stacks[i], l, ec) {
|
|
||||||
if (l->next && n < nmax) {
|
|
||||||
Client_Extra *extra;
|
|
||||||
Evas_Coord ew, eh;
|
|
||||||
transition_overlay_t *trov;
|
|
||||||
|
|
||||||
extra = eina_hash_find(_G.client_extras, &ec);
|
|
||||||
if (!extra) {
|
|
||||||
ERR("No extra for %p", ec);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
trov = E_NEW(transition_overlay_t, 1);
|
|
||||||
|
|
||||||
trov->overlay.obj = edje_object_add(ec->comp->evas);
|
|
||||||
trov->overlay.popup = e_comp_object_util_add(trov->overlay.obj, E_COMP_OBJECT_TYPE_POPUP);
|
|
||||||
evas_object_layer_set(trov->overlay.popup, E_LAYER_CLIENT_NORMAL);
|
|
||||||
e_theme_edje_object_set(trov->overlay.obj,
|
|
||||||
"base/theme/borders",
|
|
||||||
"e/widgets/border/default/resize");
|
|
||||||
|
|
||||||
switch (key_len) {
|
|
||||||
case 1:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n];
|
|
||||||
trov->key[1] = '\0';
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len];
|
|
||||||
trov->key[1] = tiling_g.config->keyhints[n % hints_len];
|
|
||||||
trov->key[2] = '\0';
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len / hints_len];
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len];
|
|
||||||
trov->key[1] = tiling_g.config->keyhints[n % hints_len];
|
|
||||||
trov->key[2] = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
trov->stack = i;
|
|
||||||
trov->ec = ec;
|
|
||||||
|
|
||||||
eina_hash_add(_G.overlays, trov->key, trov);
|
|
||||||
edje_object_part_text_set(trov->overlay.obj,
|
|
||||||
"e.text.label",
|
|
||||||
trov->key);
|
|
||||||
edje_object_size_min_calc(trov->overlay.obj, &ew, &eh);
|
|
||||||
|
|
||||||
if (_G.tinfo->conf->use_rows) {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(extra->expected.x - trov->ec->zone->x +
|
|
||||||
extra->expected.w - (ew / 2)),
|
|
||||||
(extra->expected.y - trov->ec->zone->y +
|
|
||||||
((extra->expected.h - eh) / 2)),
|
|
||||||
ew, eh);
|
|
||||||
} else {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(extra->expected.x - trov->ec->zone->x +
|
|
||||||
((extra->expected.w - ew) / 2)),
|
|
||||||
(extra->expected.y - trov->ec->zone->y +
|
|
||||||
extra->expected.h - (eh / 2)),
|
|
||||||
ew, eh);
|
|
||||||
}
|
|
||||||
|
|
||||||
evas_object_show(trov->overlay.popup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i != (TILING_MAX_STACKS - 1) &&
|
|
||||||
_G.tinfo->stacks[i+1] && n < nmax)
|
|
||||||
{
|
|
||||||
Evas_Coord ew, eh;
|
|
||||||
transition_overlay_t *trov;
|
|
||||||
|
|
||||||
trov = E_NEW(transition_overlay_t, 1);
|
|
||||||
|
|
||||||
trov->overlay.obj = edje_object_add(e_comp_get(_G.tinfo->desk)->evas);
|
|
||||||
trov->overlay.popup = e_comp_object_util_add(trov->overlay.obj, E_COMP_OBJECT_TYPE_POPUP);
|
|
||||||
evas_object_layer_set(trov->overlay.popup, E_LAYER_CLIENT_NORMAL);
|
|
||||||
e_theme_edje_object_set(trov->overlay.obj,
|
|
||||||
"base/theme/borders",
|
|
||||||
"e/widgets/border/default/resize");
|
|
||||||
|
|
||||||
switch (key_len) {
|
|
||||||
case 1:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n];
|
|
||||||
trov->key[1] = '\0';
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len];
|
|
||||||
trov->key[1] = tiling_g.config->keyhints[n % hints_len];
|
|
||||||
trov->key[2] = '\0';
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len / hints_len];
|
|
||||||
trov->key[0] = tiling_g.config->keyhints[n / hints_len];
|
|
||||||
trov->key[1] = tiling_g.config->keyhints[n % hints_len];
|
|
||||||
trov->key[2] = '\0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n++;
|
|
||||||
trov->stack = i;
|
|
||||||
trov->ec = NULL;
|
|
||||||
|
|
||||||
eina_hash_add(_G.overlays, trov->key, trov);
|
|
||||||
edje_object_part_text_set(trov->overlay.obj,
|
|
||||||
"e.text.label",
|
|
||||||
trov->key);
|
|
||||||
edje_object_size_min_calc(trov->overlay.obj, &ew, &eh);
|
|
||||||
|
|
||||||
if (_G.tinfo->conf->use_rows) {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(trov->ec->zone->w/2 - ew/2),
|
|
||||||
(_G.tinfo->pos[trov->stack]
|
|
||||||
+ _G.tinfo->size[trov->stack]
|
|
||||||
- trov->ec->zone->y - eh/2),
|
|
||||||
ew, eh);
|
|
||||||
} else {
|
|
||||||
evas_object_geometry_set(trov->overlay.popup,
|
|
||||||
(_G.tinfo->pos[trov->stack]
|
|
||||||
+ _G.tinfo->size[trov->stack]
|
|
||||||
- trov->ec->zone->x - ew/2),
|
|
||||||
(trov->ec->zone->h/2 - eh/2),
|
|
||||||
ew, eh);
|
|
||||||
}
|
|
||||||
|
|
||||||
evas_object_show(trov->overlay.popup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get input */
|
|
||||||
parent = _G.tinfo->desk->zone->comp->win;
|
|
||||||
_G.action_input_win = ecore_x_window_input_new(parent, 0, 0, 1, 1);
|
|
||||||
if (!_G.action_input_win) {
|
|
||||||
end_special_input();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ecore_x_window_show(_G.action_input_win);
|
|
||||||
if (!e_grabinput_get(_G.action_input_win, 0, _G.action_input_win)) {
|
|
||||||
end_special_input();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_G.action_timer = ecore_timer_add(TILING_OVERLAY_TIMEOUT,
|
|
||||||
_timeout_cb, NULL);
|
|
||||||
|
|
||||||
_G.keys[0] = '\0';
|
|
||||||
_G.handler_key = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
|
|
||||||
_transition_overlay_key_down,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_mod_action_toggle_split_mode(E_Object *obj __UNUSED__,
|
_e_mod_action_toggle_split_mode(E_Object *obj __UNUSED__,
|
||||||
|
|
Loading…
Reference in New Issue