e-modules/comp-scale: start to add keybindings.

+ esc key in scale for k-s



SVN revision: 57469
This commit is contained in:
Hannes Janetzek 2011-03-02 16:15:06 +00:00
parent f6d756aa95
commit 26906c5f35
5 changed files with 552 additions and 137 deletions

View File

@ -230,35 +230,35 @@ collections
}
}
part {
name: "event";
name: "bg";
mouse_events: 1;
type: RECT;
description {
state: "default" 0.0;
color: 0 0 0 60;
color: 0 0 0 20;
}
description {
state: "focused" 0.0;
color: 0 0 0 80;
state: "unfocused" 0.0;
color: 0 0 0 70;
}
}
}
programs {
program {
name: "mouse_in";
signal: "mouse,in";
source: "e";
action: STATE_SET "focused" 0.0;
transition: SINUSOIDAL 0.3;
target: "event";
}
program {
name: "mouse_out";
signal: "mouse,out";
name: "focused";
signal: "focused";
source: "e";
action: STATE_SET "default" 0.0;
transition: SINUSOIDAL 0.4;
target: "event";
transition: SINUSOIDAL 0.2;
target: "bg";
}
program {
name: "unfocused";
signal: "unfocused";
source: "e";
action: STATE_SET "unfocused" 0.0;
transition: SINUSOIDAL 0.3;
target: "bg";
}
}
}

View File

@ -22,34 +22,111 @@ static void _scale_gc_cb_menu_post(void *data, E_Menu *menu);
static void _scale_gc_cb_menu_configure(void *data, E_Menu *mn, E_Menu_Item *mi);
static E_Action *act = NULL;
static int _hold_count = 0;
static int _hold_mod = 0;
Eina_Bool
e_mod_hold_modifier_check(Ecore_Event_Key *ev)
{
if (!_hold_mod)
return EINA_TRUE;
if ((_hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && (!strcmp(ev->key, "Shift_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && (!strcmp(ev->key, "Shift_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_CTRL) && (!strcmp(ev->key, "Control_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_CTRL) && (!strcmp(ev->key, "Control_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Alt_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Alt_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Meta_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Meta_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Super_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_ALT) && (!strcmp(ev->key, "Super_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_WIN) && (!strcmp(ev->key, "Super_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_WIN) && (!strcmp(ev->key, "Super_R")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_WIN) && (!strcmp(ev->key, "Mode_switch")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_WIN) && (!strcmp(ev->key, "Meta_L")))
_hold_count--;
else if ((_hold_mod & ECORE_EVENT_MODIFIER_WIN) && (!strcmp(ev->key, "Meta_R")))
_hold_count--;
if (_hold_count <= 0)
{
return EINA_FALSE;
}
return EINA_TRUE;
}
static void
_e_mod_action(const char *params)
_e_mod_action(const char *params, int modifiers)
{
int active;
E_Manager *man;
Evas *e;
if (!params) return;
/* we expect that there is only one manager!!!*/
man = eina_list_data_get(e_manager_list());
if (!man) return;
e = e_manager_comp_evas_get(man);
if (!e) return;
if (!strncmp(params, "go_pager", 8))
{
pager_run(params);
active = pager_run(man, params);
}
else if (!strncmp(params, "go_scale", 8))
{
scale_run(params);
active = scale_run(man, params);
}
if (active)
{
_hold_mod = modifiers;
_hold_count = 0;
if (_hold_mod & ECORE_EVENT_MODIFIER_SHIFT) _hold_count++;
if (_hold_mod & ECORE_EVENT_MODIFIER_CTRL) _hold_count++;
if (_hold_mod & ECORE_EVENT_MODIFIER_ALT) _hold_count++;
if (_hold_mod & ECORE_EVENT_MODIFIER_WIN) _hold_count++;
}
}
static void
_e_mod_action_cb_edge(E_Object *obj, const char *params, E_Event_Zone_Edge *ev)
{
_e_mod_action(params);
_e_mod_action(params, 0);
}
static void
_e_mod_action_cb(E_Object *obj, const char *params)
{
_e_mod_action(params);
_e_mod_action(params, 0);
}
static void
_e_mod_action_cb_key(E_Object *obj, const char *params, Ecore_Event_Key *ev)
{
_e_mod_action(params, ev->modifiers);
}
static void
_e_mod_action_cb_mouse(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev)
{
_e_mod_action(params, 0);
}
/* Module and Gadcon stuff */
typedef struct _Instance Instance;
@ -155,13 +232,31 @@ e_modapi_init(E_Module *m)
if (act)
{
act->func.go = _e_mod_action_cb;
act->func.go_key = _e_mod_action_cb_key;
act->func.go_mouse = _e_mod_action_cb_mouse;
act->func.go_edge = _e_mod_action_cb_edge;
e_action_predef_name_set(D_("Desktop"), D_("Scale Windows"),
"scale-windows", "go_scale", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Windows (All Desktops)"),
"scale-windows", "go_scale_all", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager"),
"scale-windows", "go_pager", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager"),
"scale-windows", "go_pager", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Next"),
"scale-windows", "go_pager_next", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Previous"),
"scale-windows", "go_pager_prev", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Left"),
"scale-windows", "go_pager_left", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Right"),
"scale-windows", "go_pager_right", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Up"),
"scale-windows", "go_pager_up", NULL, 0);
e_action_predef_name_set(D_("Desktop"), D_("Scale Pager Down"),
"scale-windows", "go_pager_down", NULL, 0);
}
return m;

View File

@ -134,8 +134,11 @@ EAPI int e_modapi_save(E_Module *m);
E_Config_Dialog *e_int_config_scale_module(E_Container *con, const char *params);
void scale_run(const char *params);
void pager_run(const char *params);
Eina_Bool e_mod_hold_modifier_check(Ecore_Event_Key *ev);
Eina_Bool scale_run(E_Manager *man, const char *params);
Eina_Bool pager_run(E_Manager *man, const char *params);
extern Config *scale_conf;

View File

@ -54,6 +54,8 @@ static void _pager_win_new(Evas *e, E_Manager *man, E_Manager_Comp_Source *src);
static void _pager_win_del(Item *it);
static void _pager_finish();
static void _pager_handler(void *data, const char *name, const char *info, int val, E_Object *obj, void *msgdata);
static Ecore_X_Window input_win = 0;
@ -74,6 +76,7 @@ static E_Desk *current_desk = NULL;
static int min_x, min_y, max_x, max_y;
static double desk_w, desk_h;
static double zoom = 0.0;
static int fade_windows;
static void
_pager_place_desks(double scale)
@ -151,7 +154,7 @@ _pager_redraw(void *data)
_pager_place_desks(in);
_pager_place_windows(in);
if (scale_conf->pager_fade_windows)
if (fade_windows)
{
EINA_LIST_FOREACH(items, l, it)
{
@ -216,8 +219,11 @@ _pager_in()
static void
_pager_out()
{
double duration, now = ecore_time_get();
Item *it;
Eina_List *l;
double duration, now;
now = ecore_time_get();
duration = scale_conf->pager_duration;
if (now - start_time < duration)
@ -231,6 +237,12 @@ _pager_out()
if (selected_item)
edje_object_signal_emit(selected_item->o, "hide", "e");
EINA_LIST_FOREACH(items, l, it)
{
it->bd_x = it->bd->x + (it->desk->x - current_desk->x) * zone->w;
it->bd_y = it->bd->y + (it->desk->y - current_desk->y) * zone->h;
}
scale_state = EINA_FALSE;
}
@ -336,16 +348,18 @@ _pager_desk_at_xy_get(double x, double y)
static void
_pager_desk_select(E_Desk *desk)
{
Item *it;
Eina_List *l;
Evas_Object *o_desk;
if (current_desk && (desk != current_desk))
{
o_desk = eina_list_nth(desks, current_desk->y * zone->desk_x_count + current_desk->x);
edje_object_signal_emit(o_desk, "unfocused", "e");
}
current_desk = desk;
EINA_LIST_FOREACH(items, l, it)
{
it->bd_x = it->bd->x + (it->desk->x - desk->x) * zone->w;
it->bd_y = it->bd->y + (it->desk->y - desk->y) * zone->h;
}
o_desk = eina_list_nth(desks, desk->y * zone->desk_x_count + desk->x);
edje_object_signal_emit(o_desk, "focused", "e");
}
static void
@ -369,6 +383,9 @@ _pager_win_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info
else if (ev->button == 1)
{
e_border_raise(it->bd);
if (current_desk != it->desk)
_pager_desk_select(it->desk);
}
it->mx = ev->canvas.x;
@ -470,6 +487,9 @@ _pager_win_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info
y += (desk2->y - desk->y) * zone->h;
}
if (current_desk != desk)
_pager_desk_select(desk);
e_border_move(it->bd, x, y);
it->desk = desk;
@ -784,9 +804,8 @@ _pager_cb_mouse_down(void *data, int type, void *event)
if (!it)
{
E_Desk *desk = _pager_desk_at_xy_get(ev->x, ev->y);
if (desk) current_desk = desk;
_pager_desk_select(current_desk);
if (desk)
_pager_desk_select(desk);
_pager_out();
return ECORE_CALLBACK_PASS_ON;
@ -801,6 +820,162 @@ _pager_cb_mouse_down(void *data, int type, void *event)
}
static void
_pager_switch(const char *params)
{
int max_x,max_y, desk_x, desk_y;
int x = 0, y = 0;
E_Desk *desk;
printf("switch %s\n", params);
if (!params[0])
{
_pager_out();
return;
}
e_zone_desk_count_get(zone, &max_x, &max_y);
if (!strcmp(params, "_left"))
x = -1;
else if (!strcmp(params, "_right"))
x = 1;
else if (!strcmp(params, "_up"))
y = -1;
else if (!strcmp(params, "_down"))
y = 1;
else if (!strcmp(params, "_next"))
{
x = 1;
if (current_desk->x == max_x - 1)
y = 1;
}
else if (!strcmp(params, "_prev"))
{
x = -1;
if (current_desk->x == 0)
y = -1;
}
desk_x = current_desk->x + x;
desk_y = current_desk->y + y;
if (desk_x < 0)
desk_x = max_x - 1;
else if (desk_x >= max_x)
desk_x = 0;
if (desk_y < 0)
desk_y = max_y - 1;
else if (desk_y >= max_y)
desk_y = 0;
printf("selec %d %d\n", desk_x, desk_y);
desk = e_desk_at_xy_get(zone, desk_x, desk_y);
if (desk) _pager_desk_select(desk);
if (!scale_state)
{
Eina_List *l;
Item *it;
fade_windows = 0;
EINA_LIST_FOREACH(items, l, it)
{
it->alpha = 255.0;
evas_object_color_set(it->o_win, 255.0, 255.0, 255.0, 255.0);
}
}
}
static Eina_Bool
_pager_cb_key_down(void *data, int type, void *event)
{
Ecore_Event_Key *ev = event;
if (ev->window != input_win)
return ECORE_CALLBACK_PASS_ON;
printf("%s\n", ev->key);
if (!strcmp(ev->key, "Up"))
_pager_switch("_up");
else if (!strcmp(ev->key, "Down"))
_pager_switch("_down");
else if (!strcmp(ev->key, "Left"))
_pager_switch("_left");
else if (!strcmp(ev->key, "Right"))
_pager_switch("_right");
else if (!strcmp(ev->key, "p"))
_pager_switch("_prev");
else if (!strcmp(ev->key, "n"))
_pager_switch("_next");
else if (!strcmp(ev->key, "Return"))
_pager_out();
else if (!strcmp(ev->key, "space"))
_pager_out();
else if (!strcmp(ev->key, "Escape"))
{
_pager_desk_select(e_desk_current_get(zone));
_pager_out();
}
else
{
E_Action *act;
Eina_List *l;
E_Config_Binding_Key *bind;
E_Binding_Modifier mod;
for (l = e_config->key_bindings; l; l = l->next)
{
bind = l->data;
if (bind->action && strcmp(bind->action, "scale-windows")) continue;
if (!bind->params || strncmp(bind->params, "go_pager", 8)) continue;
printf("found action\n");
mod = 0;
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)
mod |= E_BINDING_MODIFIER_SHIFT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)
mod |= E_BINDING_MODIFIER_CTRL;
if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT)
mod |= E_BINDING_MODIFIER_ALT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN)
mod |= E_BINDING_MODIFIER_WIN;
if (bind->key && (!strcmp(bind->key, ev->keyname)) &&
((bind->modifiers == mod) || (bind->any_mod)))
{
if (!(act = e_action_find(bind->action))) continue;
if (act->func.go_key)
act->func.go_key(E_OBJECT(zone), bind->params, ev);
else if (act->func.go)
act->func.go(E_OBJECT(zone), bind->params);
}
}
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_pager_cb_key_up(void *data, int type, void *event)
{
Ecore_Event_Key *ev = event;
if (ev->window != input_win)
return ECORE_CALLBACK_PASS_ON;
if (!scale_state)
return ECORE_CALLBACK_PASS_ON;
if (!e_mod_hold_modifier_check(event))
_pager_out();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_pager_run(E_Manager *man)
{
Eina_List *l;
@ -808,8 +983,10 @@ _pager_run(E_Manager *man)
Ecore_Event_Handler *h;
Evas *e;
if (input_win) return EINA_FALSE;
e = e_manager_comp_evas_get(man);
if (!e) return;
if (!e) return EINA_FALSE;
zone = e_util_zone_current_get(man);
current_desk = e_desk_current_get(zone);
@ -822,9 +999,11 @@ _pager_run(E_Manager *man)
{
ecore_x_window_free(input_win);
input_win = 0;
return;
return EINA_FALSE;
}
msg_handler = e_msg_handler_add(_pager_handler, NULL);
h = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
_pager_cb_mouse_down, e);
handlers = eina_list_append(handlers, h);
@ -837,6 +1016,14 @@ _pager_run(E_Manager *man)
_pager_cb_mouse_move, e);
handlers = eina_list_append(handlers, h);
h = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
_pager_cb_key_down, e);
handlers = eina_list_append(handlers, h);
h = ecore_event_handler_add(ECORE_EVENT_KEY_UP,
_pager_cb_key_up, e);
handlers = eina_list_append(handlers, h);
zoom = zone->desk_x_count;
if (zoom < zone->desk_y_count)
zoom = zone->desk_y_count;
@ -856,19 +1043,26 @@ _pager_run(E_Manager *man)
if (background)
{
Evas_Object *o;
int i;
int x, y;
for (i = 0; i < zone->desk_x_count * zone->desk_y_count; i++)
for (y = 0; y < zone->desk_y_count; y++)
{
o = edje_object_add(e);
if (!e_theme_edje_object_set(o, "base/theme/modules/scale",
"modules/scale/desk"))
edje_object_file_set(o, scale_conf->theme_path,
"modules/scale/desk");
evas_object_stack_above(o, background->o_win);
evas_object_show(o);
desks = eina_list_append(desks, o);
for (x = 0; x < zone->desk_x_count; x++)
{
o = edje_object_add(e);
if (!e_theme_edje_object_set(o, "base/theme/modules/scale",
"modules/scale/desk"))
edje_object_file_set(o, scale_conf->theme_path,
"modules/scale/desk");
evas_object_stack_above(o, background->o_win);
evas_object_show(o);
desks = eina_list_append(desks, o);
if ((x != zone->desk_x_current) || (y != zone->desk_y_current))
edje_object_signal_emit(o, "unfocused", "e");
}
}
_pager_place_desks(1.0);
}
@ -876,62 +1070,79 @@ _pager_run(E_Manager *man)
evas_event_feed_mouse_in(e, ecore_x_current_time_get(), NULL);
evas_event_feed_mouse_move(e, -1000000, -1000000,
ecore_x_current_time_get(), NULL);
_pager_in();
fade_windows = scale_conf->pager_fade_windows;
return EINA_TRUE;
}
Eina_Bool
pager_run(E_Manager *man, const char *params)
{
Eina_Bool ret = EINA_FALSE;
printf("run: %s\n", params);
if (scale_state)
{
_pager_switch(params+8);
}
else if (!scale_state)
{
if (input_win)
return ret;
ret = _pager_run(man);
if (ret)
{
if (strlen(params) > 8)
_pager_switch(params+8);
_pager_in();
}
}
return ret;
}
static void
_pager_handler(void *data, const char *name, const char *info, int val,
E_Object *obj, void *msgdata)
{
E_Manager *man = (E_Manager *)obj;
E_Manager_Comp_Source *src = (E_Manager_Comp_Source *)msgdata;
Evas *e;
E_Manager *man = (E_Manager *)obj;
E_Manager_Comp_Source *src = (E_Manager_Comp_Source *)msgdata;
Evas *e;
/* DBG("handler... '%s' '%s'\n", name, info); */
if (strcmp(name, "comp.manager")) return;
/* DBG("handler... '%s' '%s'\n", name, info); */
if (strcmp(name, "comp.manager")) return;
e = e_manager_comp_evas_get(man);
if (!strcmp(info, "change.comp"))
{
if (!e) DBG("TTT: No comp manager\n");
else DBG("TTT: comp canvas = %p\n", e);
}
else if (!strcmp(info, "resize.comp"))
{
DBG("%s: %p | %p\n", info, man, src);
}
else if (!strcmp(info, "add.src"))
{
/* DBG("%s: %p | %p\n", info, man, src); */
_pager_win_new(e, man, src);
}
else if (!strcmp(info, "del.src"))
{
DBG("%s: %p | %p\n", info, man, src);
}
else if (!strcmp(info, "config.src"))
{
e = e_manager_comp_evas_get(man);
if (!strcmp(info, "change.comp"))
{
if (!e) DBG("TTT: No comp manager\n");
else DBG("TTT: comp canvas = %p\n", e);
}
else if (!strcmp(info, "resize.comp"))
{
DBG("%s: %p | %p\n", info, man, src);
}
else if (!strcmp(info, "add.src"))
{
/* DBG("%s: %p | %p\n", info, man, src); */
_pager_win_new(e, man, src);
}
else if (!strcmp(info, "del.src"))
{
DBG("%s: %p | %p\n", info, man, src);
}
else if (!strcmp(info, "config.src"))
{
DBG("%s: %p | %p\n", info, man, src);
}
/* else if (!strcmp(info, "visible.src"))
* {
* DBG("%s: %p | %p\n", info, man, src);
* } */
DBG("%s: %p | %p\n", info, man, src);
}
else if (!strcmp(info, "visible.src"))
{
DBG("%s: %p | %p\n", info, man, src);
}
}
void
pager_run(const char *params)
{
Eina_List *l;
E_Manager *man;
msg_handler = e_msg_handler_add(_pager_handler, NULL);
EINA_LIST_FOREACH(e_manager_list(), l, man)
{
Evas *e = e_manager_comp_evas_get(man);
if (e) _pager_run(man);
}
}

View File

@ -71,6 +71,9 @@ static void _scale_finish(void);
static void _scale_in(void);
static void _scale_out(void);
static void _scale_handler(void *data, const char *name, const char *info, int val, E_Object *obj, void *msgdata);
static Ecore_X_Window input_win = 0;
static E_Msg_Handler *msg_handler = NULL;
@ -140,7 +143,7 @@ _scale_redraw(void *blah)
EINA_LIST_FOREACH(items, l, it)
{
a = 255.0;
if ((it->bd->desk != current_desk) && (selected_item != it))
{
double ax = it->cur_x - it->x;
@ -155,7 +158,7 @@ _scale_redraw(void *blah)
evas_object_color_set(it->o_win, a, a, a, a);
}
}
if (scale_conf->fade_popups)
{
a = 255.0 * in;
@ -255,7 +258,7 @@ _scale_finish()
it->bd_x = it->bd->x;
it->bd_y = it->bd->y;
}
_scale_place_windows(1.0);
EINA_LIST_FREE(items, it)
@ -1339,19 +1342,106 @@ _scale_place_natural()
}
}
static Eina_Bool
_scale_cb_key_down(void *data, int type, void *event)
{
Ecore_Event_Key *ev = event;
if (ev->window != input_win)
return ECORE_CALLBACK_PASS_ON;
printf("%s\n", ev->key);
static void
/* if (!strcmp(ev->key, "Up"))
* _scale_switch("_up");
* else if (!strcmp(ev->key, "Down"))
* _scale_switch("_down");
* else if (!strcmp(ev->key, "Left"))
* _scale_switch("_left");
* else if (!strcmp(ev->key, "Right"))
* _scale_switch("_right");
* else if (!strcmp(ev->key, "p"))
* _scale_switch("_prev");
* else if (!strcmp(ev->key, "n"))
* _scale_switch("_next");
* else if (!strcmp(ev->key, "Return"))
* _scale_out();
* else */
if (!strcmp(ev->key, "space"))
_scale_out();
else if (!strcmp(ev->key, "Escape"))
{
/* TODO go to previously focused window */
_scale_out();
}
else
{
E_Action *act;
Eina_List *l;
E_Config_Binding_Key *bind;
E_Binding_Modifier mod;
for (l = e_config->key_bindings; l; l = l->next)
{
bind = l->data;
if (bind->action && strcmp(bind->action, "scale-windows")) continue;
if (!bind->params || strncmp(bind->params, "go_scale", 8)) continue;
printf("found action\n");
mod = 0;
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)
mod |= E_BINDING_MODIFIER_SHIFT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL)
mod |= E_BINDING_MODIFIER_CTRL;
if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT)
mod |= E_BINDING_MODIFIER_ALT;
if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN)
mod |= E_BINDING_MODIFIER_WIN;
if (bind->key && (!strcmp(bind->key, ev->keyname)) &&
((bind->modifiers == mod) || (bind->any_mod)))
{
if (!(act = e_action_find(bind->action))) continue;
if (act->func.go_key)
act->func.go_key(E_OBJECT(zone), bind->params, ev);
else if (act->func.go)
act->func.go(E_OBJECT(zone), bind->params);
}
}
}
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_scale_cb_key_up(void *data, int type, void *event)
{
Ecore_Event_Key *ev = event;
if (ev->window != input_win)
return ECORE_CALLBACK_PASS_ON;
if (!scale_state)
return ECORE_CALLBACK_PASS_ON;
if (!e_mod_hold_modifier_check(event))
_scale_out();
return ECORE_CALLBACK_PASS_ON;
}
static Eina_Bool
_scale_run(E_Manager *man)
{
Eina_List *l;
E_Manager_Comp_Source *src;
Ecore_Event_Handler *h;
Evas *e;
int i;
Item *it;
e = e_manager_comp_evas_get(man);
if (!e) return;
if (!e) return EINA_FALSE;
zone = e_util_zone_current_get(e_manager_current_get());
current_desk = e_desk_current_get(zone);
@ -1364,20 +1454,28 @@ _scale_run(E_Manager *man)
{
ecore_x_window_free(input_win);
input_win = 0;
return;
return EINA_FALSE;
}
handlers = eina_list_append
(handlers, ecore_event_handler_add
(ECORE_EVENT_MOUSE_BUTTON_DOWN, _scale_cb_mouse_down, e));
h = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
_scale_cb_mouse_down, e);
handlers = eina_list_append(handlers, h);
handlers = eina_list_append
(handlers, ecore_event_handler_add
(ECORE_EVENT_MOUSE_BUTTON_UP, _scale_cb_mouse_up, e));
h = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
_scale_cb_mouse_up, e);
handlers = eina_list_append(handlers, h);
handlers = eina_list_append
(handlers, ecore_event_handler_add
(ECORE_EVENT_MOUSE_MOVE, _scale_cb_mouse_move, e));
h = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
_scale_cb_mouse_move, e);
handlers = eina_list_append(handlers, h);
h = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
_scale_cb_key_down, e);
handlers = eina_list_append(handlers, h);
h = ecore_event_handler_add(ECORE_EVENT_KEY_UP,
_scale_cb_key_up, e);
handlers = eina_list_append(handlers, h);
EINA_LIST_FOREACH((Eina_List *)e_manager_comp_src_list(man), l, src)
_scale_win_new(e, man, src, current_desk);
@ -1385,13 +1483,13 @@ _scale_run(E_Manager *man)
if (eina_list_count(items) < 1)
{
_scale_finish();
return;
return EINA_FALSE;
}
if ((eina_list_count(items) < 2) && (!show_all_desks))
{
_scale_finish();
return;
return EINA_FALSE;
}
if (show_all_desks)
@ -1494,6 +1592,8 @@ _scale_run(E_Manager *man)
ecore_x_current_time_get(), NULL);
_scale_in();
return EINA_TRUE;
}
@ -1543,6 +1643,33 @@ _scale_cb_mouse_up(void *data, int type, void *event)
return ECORE_CALLBACK_PASS_ON;
}
Eina_Bool
scale_run(E_Manager *man, const char *params)
{
Eina_List *l;
Eina_Bool ret = EINA_FALSE;
if (!strcmp(params, "go_scale_all"))
show_all_desks = EINA_TRUE;
else
show_all_desks = EINA_FALSE;
if (scale_state)
{
/* _scale_action(params+8); */
}
else
{
if (input_win)
return ret;
ret = _scale_run(man);
}
return ret;
}
static void
_scale_handler(void *data, const char *name, const char *info, int val,
E_Object *obj, void *msgdata)
@ -1579,29 +1706,8 @@ _scale_handler(void *data, const char *name, const char *info, int val,
DBG("%s: %p | %p\n", info, man, src);
}
/* else if (!strcmp(info, "visible.src"))
* {
* DBG("%s: %p | %p\n", info, man, src);
* } */
}
void
scale_run(const char *params)
{
Eina_List *l;
E_Manager *man;
msg_handler = e_msg_handler_add(_scale_handler, NULL);
if (!strcmp(params, "go_scale_all"))
show_all_desks = EINA_TRUE;
else
show_all_desks = EINA_FALSE;
EINA_LIST_FOREACH(e_manager_list(), l, man)
else if (!strcmp(info, "visible.src"))
{
Evas *e = e_manager_comp_evas_get(man);
if (e) _scale_run(man);
DBG("%s: %p | %p\n", info, man, src);
}
}