giant comp rejiggering commit because anything smaller would have broken something:

* remove xwin for container canvas: now drawn directly on the compositor canvas

* added SHAPE_DEBUG define for bored developers

* bindings now use new e struct for mouse/wheel events

* container+zone now get mouse events from smart callbacks instead of x events

* rename comp api namespace

* change comp underlay theme to have a swallow for the wallpaper

* add names to all zone/container/comp objects to make debugging much easier

* some minor related updates to go along with this

SVN revision: 83752
devs/asdfuser/comp-sounds
Mike Blumenkrantz 10 years ago
parent f49dd52cd3
commit aa6a2d173d
  1. 5
      ChangeLog
  2. 3
      NEWS
  3. 14
      data/themes/edc/comp.edc
  4. 4
      src/bin/Makefile.am
  5. 2
      src/bin/e.h
  6. 18
      src/bin/e_actions.c
  7. 6
      src/bin/e_actions.h
  8. 30
      src/bin/e_bg.c
  9. 262
      src/bin/e_bindings.c
  10. 58
      src/bin/e_bindings.h
  11. 52
      src/bin/e_border.c
  12. 10
      src/bin/e_border.h
  13. 546
      src/bin/e_comp.c
  14. 68
      src/bin/e_comp.h
  15. 42
      src/bin/e_comp_render_update.c
  16. 46
      src/bin/e_comp_render_update.h
  17. 46
      src/bin/e_comp_update.h
  18. 207
      src/bin/e_container.c
  19. 26
      src/bin/e_container.h
  20. 117
      src/bin/e_dnd.c
  21. 1
      src/bin/e_dnd.h
  22. 18
      src/bin/e_fm.c
  23. 4
      src/bin/e_gadcon.c
  24. 2
      src/bin/e_includes.h
  25. 12
      src/bin/e_manager.h
  26. 2
      src/bin/e_menu.c
  27. 12
      src/bin/e_shelf.c
  28. 6
      src/bin/e_utils.c
  29. 57
      src/bin/e_zone.c
  30. 1
      src/bin/e_zone.h
  31. 2
      src/modules/clock/e_mod_main.c
  32. 2
      src/modules/conf_comp/e_mod_main.c
  33. 55
      src/modules/fileman/e_fwin.c
  34. 25
      src/modules/gadman/e_mod_gadman.c
  35. 2
      src/modules/illume-home/e_busycover.c
  36. 6
      src/modules/winlist/e_mod_main.c
  37. 6
      src/modules/winlist/e_winlist.c

@ -7,6 +7,10 @@
* keyboard mapping change now also disables for window class "vmware"
* added option for remembering filemanager windows globally
* added edit functionality to window remembers dialog
* added function for getting children of e_layout
* container now uses compositor window
* bindings now use new E_Binding_Event structs for mouse events
* added utility function for printing all objects above a given object
2013-02-07 Carsten Haitzler
@ -69,7 +73,6 @@
2013-01-29 Mike Blumenkrantz
* fixed bug where dragging files into sidebar would move them instead of creating links
* added function for getting children of e_layout
2013-01-23 Chris Michael

@ -27,6 +27,7 @@ Additions:
* e_widget_on_disable_hook_set
* e_int_border_remember_edit
* Added function for getting children of e_layout
* added utility function for printing all objects above a given object
Config:
* Added option for disabling icons in menus
* Added option for disabling pointer warping when performing directional focus changes using winlist
@ -50,6 +51,7 @@ Changes:
* e_xkb_layout API now deals directly with E_Config_XKB_Layout structs
Config:
* move winlist_warp_speed option to pointer_warp_speed
* bindings now use new E_Binding_Event structs for mouse events
Deprecations:
*
@ -100,6 +102,7 @@ Improvements:
* clock listens to /etc/timezone changes now too
* enable image preloading for all e_widget_preview using edje
* window remember dialog now allows editing of remembers
* container now uses compositor window
Fixes:
* IBar menu didn't allow to configure different icon sources, show contents menu even on empty IBar.

@ -1,4 +1,4 @@
group { name: "e/modules/comp/preview";
group { name: "e/comp/preview";
parts {
part { name: "e.swallow.preview"; type: SWALLOW; mouse_events: 0;
description { state: "default" 0.0;
@ -21,17 +21,17 @@ group { name: "e/modules/comp/preview";
}
}
group { name: "e/modules/comp/screen/base/default";
group { name: "e/comp/screen/base/default";
alias: "e/comp/screen/base/noeffects";
parts {
part { name: "black"; type: RECT; mouse_events: 0;
part { name: "e.swallow.background"; type: SWALLOW; mouse_events: 0;
description { state: "default" 0.0;
color: 0 0 0 255;
}
}
}
}
group { name: "e/modules/comp/screen/overlay/default";
group { name: "e/comp/screen/overlay/default";
images.image: "screen_circular_shadow.png" COMP;
parts {
part { name: "clip"; type: RECT; mouse_events: 0;
@ -174,8 +174,8 @@ group { name: "e/modules/comp/screen/overlay/default";
}
group { name: "e/modules/comp/screen/overlay/noeffects";
inherit: "e/modules/comp/screen/overlay/default";
group { name: "e/comp/screen/overlay/noeffects";
inherit: "e/comp/screen/overlay/default";
programs {
program {
name: "screensaver_on";

@ -58,7 +58,7 @@ e_color_dialog.h \
e_color.h \
e_comp.h \
e_comp_cfdata.h \
e_comp_update.h \
e_comp_render_update.h \
e_config_data.h \
e_config_dialog.h \
e_config.h \
@ -233,7 +233,7 @@ e_color_class.c \
e_color_dialog.c \
e_comp.c \
e_comp_cfdata.c \
e_comp_update.c \
e_comp_render_update.c \
e_config.c \
e_config_data.c \
e_config_dialog.c \

@ -174,7 +174,7 @@ typedef struct _E_Rect E_Rect;
#ifndef MAX
# define MAX(x, y) (((x) > (y)) ? (x) : (y))
#endif
# define E_FN_DEL(_fn, _h) if (_h) { _fn((void*)_h); _h = NULL; }
# define E_FN_DEL(_fn, _h) do { if (_h) { _fn((void*)_h); _h = NULL; } } while (0)
# define E_INTERSECTS(x, y, w, h, xx, yy, ww, hh) \
(((x) < ((xx) + (ww))) && ((y) < ((yy) + (hh))) && (((x) + (w)) > (xx)) && (((y) + (h)) > (yy)))
# define E_INSIDE(x, y, xx, yy, ww, hh) \

@ -15,7 +15,7 @@
if (act) act->func.go_mouse = _e_actions_act_##name##_go_mouse; \
}
#define ACT_FN_GO_MOUSE(act, use) \
static void _e_actions_act_##act##_go_mouse(E_Object * obj __UNUSED__, const char *params use, Ecore_Event_Mouse_Button * ev __UNUSED__)
static void _e_actions_act_##act##_go_mouse(E_Object * obj __UNUSED__, const char *params use, E_Binding_Event_Mouse_Button * ev __UNUSED__)
#define ACT_GO_WHEEL(name) \
{ \
@ -23,7 +23,7 @@
if (act) act->func.go_wheel = _e_actions_act_##name##_go_wheel; \
}
#define ACT_FN_GO_WHEEL(act, use) \
static void _e_actions_act_##act##_go_wheel(E_Object * obj __UNUSED__, const char *params use, Ecore_Event_Mouse_Wheel * ev __UNUSED__)
static void _e_actions_act_##act##_go_wheel(E_Object * obj __UNUSED__, const char *params use, E_Binding_Event_Wheel * ev __UNUSED__)
#define ACT_GO_EDGE(name) \
{ \
@ -63,7 +63,7 @@
if (act) act->func.end_mouse = _e_actions_act_##name##_end_mouse; \
}
#define ACT_FN_END_MOUSE(act, use) \
static void _e_actions_act_##act##_end_mouse(E_Object * obj __UNUSED__, const char *params use, Ecore_Event_Mouse_Button * ev __UNUSED__)
static void _e_actions_act_##act##_end_mouse(E_Object * obj __UNUSED__, const char *params use, E_Binding_Event_Mouse_Button * ev __UNUSED__)
#define ACT_END_KEY(name) \
{ \
@ -1925,8 +1925,8 @@ ACT_FN_GO_MOUSE(menu_show, )
/* FIXME: this is a bit of a hack... setting m->con - bad hack */
m->zone = zone;
x = ev->root.x;
y = ev->root.y;
x = ev->canvas.x;
y = ev->canvas.y;
x -= zone->container->x;
y -= zone->container->y;
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
@ -2775,7 +2775,7 @@ _delayed_action_key_del(E_Object *obj, const char *params __UNUSED__, Ecore_Even
}
static void
_delayed_action_mouse_add(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev)
_delayed_action_mouse_add(E_Object *obj, const char *params, E_Binding_Event_Mouse_Button *ev)
{
Delayed_Action *da;
@ -2787,13 +2787,13 @@ _delayed_action_mouse_add(E_Object *obj, const char *params, Ecore_Event_Mouse_B
e_object_ref(da->obj);
}
da->mouse = 1;
da->button = ev->buttons;
da->button = ev->button;
if (params) _delayed_action_list_parse(da, params);
_delayed_actions = eina_list_append(_delayed_actions, da);
}
static void
_delayed_action_mouse_del(E_Object *obj, const char *params __UNUSED__, Ecore_Event_Mouse_Button *ev)
_delayed_action_mouse_del(E_Object *obj, const char *params __UNUSED__, E_Binding_Event_Mouse_Button *ev)
{
Eina_List *l;
Delayed_Action *da;
@ -2801,7 +2801,7 @@ _delayed_action_mouse_del(E_Object *obj, const char *params __UNUSED__, Ecore_Ev
EINA_LIST_FOREACH(_delayed_actions, l, da)
{
if ((da->obj == obj) && (da->mouse) &&
((int)ev->buttons == da->button))
((int)ev->button == da->button))
{
_delayed_action_do(da);
_delayed_action_free(da);

@ -18,14 +18,14 @@ struct _E_Action
struct
{
void (*go)(E_Object *obj, const char *params);
void (*go_mouse)(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*go_wheel)(E_Object *obj, const char *params, Ecore_Event_Mouse_Wheel *ev);
void (*go_mouse)(E_Object *obj, const char *params, E_Binding_Event_Mouse_Button *ev);
void (*go_wheel)(E_Object *obj, const char *params, E_Binding_Event_Wheel *ev);
void (*go_edge)(E_Object *obj, const char *params, E_Event_Zone_Edge *ev);
void (*go_key)(E_Object *obj, const char *params, Ecore_Event_Key *ev);
void (*go_signal)(E_Object *obj, const char *params, const char *sig, const char *src);
void (*go_acpi)(E_Object *obj, const char *params, E_Event_Acpi *ev);
void (*end)(E_Object *obj, const char *params);
void (*end_mouse)(E_Object *obj, const char *params, Ecore_Event_Mouse_Button *ev);
void (*end_mouse)(E_Object *obj, const char *params, E_Binding_Event_Mouse_Button *ev);
void (*end_key)(E_Object *obj, const char *params, Ecore_Event_Key *ev);
} func;
};

@ -221,28 +221,20 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
}
if (transition == E_BG_TRANSITION_NONE)
{
if (zone->bg_object)
{
evas_object_del(zone->bg_object);
zone->bg_object = NULL;
}
}
E_FN_DEL(evas_object_del, zone->bg_object);
else
{
char buf[4096];
if (zone->bg_object)
{
if (zone->prev_bg_object)
evas_object_del(zone->prev_bg_object);
E_FN_DEL(evas_object_del, zone->prev_bg_object);
zone->prev_bg_object = zone->bg_object;
if (zone->transition_object)
evas_object_del(zone->transition_object);
zone->transition_object = NULL;
zone->bg_object = NULL;
E_FN_DEL(evas_object_del, zone->transition_object);
}
o = edje_object_add(zone->container->bg_evas);
evas_object_repeat_events_set(o, 1);
zone->transition_object = o;
/* FIXME: segv if zone is deleted while up??? */
evas_object_data_set(o, "e_zone", zone);
@ -251,14 +243,13 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
edje_object_signal_callback_add(o, "e,state,done", "*", _e_bg_signal, zone);
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, -1);
E_LAYER_SET(o, E_COMP_CANVAS_LAYER_BG);
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
}
if (eina_str_has_extension(bgfile, ".edj"))
{
o = edje_object_add(zone->container->bg_evas);
evas_object_data_set(o, "e_zone", zone);
edje_object_file_set(o, bgfile, "e/desktop/background");
if (edje_object_data_get(o, "noanimation"))
edje_object_animation_set(o, EINA_FALSE);
@ -266,16 +257,17 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
else
{
o = e_icon_add(zone->container->bg_evas);
evas_object_data_set(o, "e_zone", zone);
e_icon_file_key_set(o, bgfile, NULL);
e_icon_fill_inside_set(o, 0);
}
evas_object_data_set(o, "e_zone", zone);
evas_object_repeat_events_set(o, 1);
zone->bg_object = o;
if (transition == E_BG_TRANSITION_NONE)
{
evas_object_move(o, zone->x, zone->y);
evas_object_resize(o, zone->w, zone->h);
evas_object_layer_set(o, -1);
E_LAYER_SET(o, E_COMP_CANVAS_LAYER_BG);
}
evas_object_clip_set(o, zone->bg_clip_object);
evas_object_show(o);
@ -292,6 +284,10 @@ e_bg_zone_update(E_Zone *zone, E_Bg_Transition transition)
zone->bg_object);
edje_object_signal_emit(zone->transition_object, "e,action,start", "e");
}
if (zone->bg_object) evas_object_name_set(zone->bg_object, "zone->bg_object");
if (zone->prev_bg_object) evas_object_name_set(zone->prev_bg_object, "zone->prev_bg_object");
if (zone->transition_object) evas_object_name_set(zone->transition_object, "zone->transition_object");
if (zone->comp_zone) e_comp_zone_update(zone->comp_zone);
end:
eina_stringshare_del(bgfile);
}
@ -523,7 +519,7 @@ _e_bg_signal(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNU
}
evas_object_move(zone->bg_object, zone->x, zone->y);
evas_object_resize(zone->bg_object, zone->w, zone->h);
evas_object_layer_set(zone->bg_object, -1);
E_LAYER_SET(zone->bg_object, E_COMP_CANVAS_LAYER_BG);
evas_object_clip_set(zone->bg_object, zone->bg_clip_object);
evas_object_show(zone->bg_object);
}

@ -11,7 +11,6 @@ static void _e_bindings_wheel_free(E_Binding_Wheel *bind);
static void _e_bindings_acpi_free(E_Binding_Acpi *bind);
static int _e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt);
static E_Binding_Modifier _e_bindings_modifiers(unsigned int modifiers);
static int _e_ecore_modifiers(E_Binding_Modifier modifiers);
static Eina_Bool _e_bindings_edge_cb_timer(void *data);
/* local subsystem globals */
@ -115,6 +114,121 @@ e_bindings_shutdown(void)
return 1;
}
EAPI int
e_bindings_modifiers_to_ecore_convert(E_Binding_Modifier modifiers)
{
int mod = 0;
if (modifiers & E_BINDING_MODIFIER_SHIFT) mod |= ECORE_EVENT_MODIFIER_SHIFT;
if (modifiers & E_BINDING_MODIFIER_CTRL) mod |= ECORE_EVENT_MODIFIER_CTRL;
if (modifiers & E_BINDING_MODIFIER_ALT) mod |= ECORE_EVENT_MODIFIER_ALT;
if (modifiers & E_BINDING_MODIFIER_WIN) mod |= ECORE_EVENT_MODIFIER_WIN;
/* see comment in e_bindings on numlock
if (modifiers & ECORE_X_LOCK_NUM) mod |= ECORE_X_LOCK_NUM;
*/
return mod;
}
EAPI void
e_bindings_ecore_event_mouse_wheel_convert(const Ecore_Event_Mouse_Wheel *ev, E_Binding_Event_Wheel *event)
{
memset(event, 0, sizeof(E_Binding_Event_Wheel));
event->direction = ev->direction;
event->z = ev->z;
event->canvas.x = ev->root.x, event->canvas.y = ev->root.y;
event->timestamp = ev->timestamp;
event->modifiers = _e_bindings_modifiers(ev->modifiers);
}
EAPI void
e_bindings_ecore_event_mouse_button_convert(const Ecore_Event_Mouse_Button *ev, E_Binding_Event_Mouse_Button *event)
{
memset(event, 0, sizeof(E_Binding_Event_Mouse_Button));
event->button = ev->buttons;
event->canvas.x = ev->root.x, event->canvas.y = ev->root.y;
event->timestamp = ev->timestamp;
event->modifiers = _e_bindings_modifiers(ev->modifiers);
event->double_click = !!ev->double_click;
event->triple_click = !!ev->triple_click;
}
EAPI void
e_bindings_evas_event_mouse_wheel_convert(const Evas_Event_Mouse_Wheel *ev, E_Binding_Event_Wheel *event)
{
memset(event, 0, sizeof(E_Binding_Event_Wheel));
event->direction = ev->direction;
event->z = ev->z;
event->canvas.x = ev->output.x, event->canvas.y = ev->output.y;
event->timestamp = ev->timestamp;
event->modifiers |= (E_BINDING_MODIFIER_SHIFT * evas_key_modifier_is_set(ev->modifiers, "Shift"));
event->modifiers |= (E_BINDING_MODIFIER_CTRL * evas_key_modifier_is_set(ev->modifiers, "Control"));
event->modifiers |= (E_BINDING_MODIFIER_ALT * evas_key_modifier_is_set(ev->modifiers, "Alt"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Super"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Hyper"));
event->modifiers |= (E_BINDING_MODIFIER_ALTGR * evas_key_modifier_is_set(ev->modifiers, "AltGr"));
/* TODO
if (modifiers & ECORE_EVENT_LOCK_SCROLL)
evas_key_lock_on(e, "Scroll_Lock");
else evas_key_lock_off(e, "Scroll_Lock");
if (modifiers & ECORE_EVENT_LOCK_NUM)
evas_key_lock_on(e, "Num_Lock");
else evas_key_lock_off(e, "Num_Lock");
if (modifiers & ECORE_EVENT_LOCK_CAPS)
evas_key_lock_on(e, "Caps_Lock");
else evas_key_lock_off(e, "Caps_Lock");
if (modifiers & ECORE_EVENT_LOCK_SHIFT)
evas_key_lock_on(e, "Shift_Lock");
else evas_key_lock_off(e, "Shift_Lock");
*/
}
EAPI void
e_bindings_evas_event_mouse_button_convert(const Evas_Event_Mouse_Down *ev, E_Binding_Event_Mouse_Button *event)
{
memset(event, 0, sizeof(E_Binding_Event_Mouse_Button));
event->button = ev->button;
event->canvas.x = ev->output.x, event->canvas.y = ev->output.y;
event->timestamp = ev->timestamp;
event->modifiers |= (E_BINDING_MODIFIER_SHIFT * evas_key_modifier_is_set(ev->modifiers, "Shift"));
event->modifiers |= (E_BINDING_MODIFIER_CTRL * evas_key_modifier_is_set(ev->modifiers, "Control"));
event->modifiers |= (E_BINDING_MODIFIER_ALT * evas_key_modifier_is_set(ev->modifiers, "Alt"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Super"));
event->modifiers |= (E_BINDING_MODIFIER_WIN * evas_key_modifier_is_set(ev->modifiers, "Hyper"));
event->modifiers |= (E_BINDING_MODIFIER_ALTGR * evas_key_modifier_is_set(ev->modifiers, "AltGr"));
event->hold = (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD);
event->scroll = (ev->event_flags & EVAS_EVENT_FLAG_ON_SCROLL);
event->double_click = (ev->flags & EVAS_BUTTON_DOUBLE_CLICK);
event->triple_click = (ev->flags & EVAS_BUTTON_TRIPLE_CLICK);
/* TODO
if (modifiers & ECORE_EVENT_LOCK_SCROLL)
evas_key_lock_on(e, "Scroll_Lock");
else evas_key_lock_off(e, "Scroll_Lock");
if (modifiers & ECORE_EVENT_LOCK_NUM)
evas_key_lock_on(e, "Num_Lock");
else evas_key_lock_off(e, "Num_Lock");
if (modifiers & ECORE_EVENT_LOCK_CAPS)
evas_key_lock_on(e, "Caps_Lock");
else evas_key_lock_off(e, "Caps_Lock");
if (modifiers & ECORE_EVENT_LOCK_SHIFT)
evas_key_lock_on(e, "Shift_Lock");
else evas_key_lock_off(e, "Shift_Lock");
*/
}
EAPI void
e_bindings_signal_reset(void)
{
@ -274,7 +388,7 @@ e_bindings_mouse_grab(E_Binding_Context ctxt, Ecore_X_Window win)
ECORE_X_EVENT_MASK_MOUSE_DOWN |
ECORE_X_EVENT_MASK_MOUSE_UP |
ECORE_X_EVENT_MASK_MOUSE_MOVE,
_e_ecore_modifiers(binding->mod),
e_bindings_modifiers_to_ecore_convert(binding->mod),
binding->any_mod);
}
}
@ -291,23 +405,21 @@ e_bindings_mouse_ungrab(E_Binding_Context ctxt, Ecore_X_Window win)
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
ecore_x_window_button_ungrab(win, binding->button,
_e_ecore_modifiers(binding->mod), binding->any_mod);
e_bindings_modifiers_to_ecore_convert(binding->mod), binding->any_mod);
}
}
}
EAPI E_Action *
e_bindings_mouse_down_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, Ecore_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret)
e_bindings_mouse_button_find(E_Binding_Context ctxt, E_Binding_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret)
{
E_Binding_Modifier mod = 0;
E_Binding_Mouse *binding;
Eina_List *l;
mod = _e_bindings_modifiers(ev->modifiers);
EINA_LIST_FOREACH(mouse_bindings, l, binding)
{
if ((binding->button == (int)ev->buttons) &&
((binding->any_mod) || (binding->mod == mod)))
if ((binding->button == (int)ev->button) &&
((binding->any_mod) || (binding->mod == ev->modifiers)))
{
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
@ -323,12 +435,12 @@ e_bindings_mouse_down_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, Eco
}
EAPI E_Action *
e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev)
e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Mouse_Button *ev)
{
E_Action *act;
E_Binding_Mouse *binding;
act = e_bindings_mouse_down_find(ctxt, obj, ev, &binding);
act = e_bindings_mouse_button_find(ctxt, ev, &binding);
if (act)
{
if (act->func.go_mouse)
@ -341,38 +453,32 @@ e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_
}
EAPI E_Action *
e_bindings_mouse_up_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, Ecore_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret)
e_bindings_mouse_down_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Down *ev)
{
E_Binding_Modifier mod = 0;
E_Binding_Mouse *binding;
Eina_List *l;
E_Binding_Event_Mouse_Button event;
mod = _e_bindings_modifiers(ev->modifiers);
EINA_LIST_FOREACH(mouse_bindings, l, binding)
{
if ((binding->button == (int)ev->buttons) &&
((binding->any_mod) || (binding->mod == mod)))
{
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
E_Action *act;
e_bindings_evas_event_mouse_button_convert(ev, &event);
act = e_action_find(binding->action);
if (bind_ret) *bind_ret = binding;
return act;
}
}
}
return NULL;
return e_bindings_mouse_down_event_handle(ctxt, obj, &event);
}
EAPI E_Action *
e_bindings_mouse_down_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev)
{
E_Binding_Event_Mouse_Button event;
e_bindings_ecore_event_mouse_button_convert(ev, &event);
return e_bindings_mouse_down_event_handle(ctxt, obj, &event);
}
EAPI E_Action *
e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev)
e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Mouse_Button *ev)
{
E_Action *act;
E_Binding_Mouse *binding;
act = e_bindings_mouse_up_find(ctxt, obj, ev, &binding);
act = e_bindings_mouse_button_find(ctxt, ev, &binding);
if (act)
{
if (act->func.end_mouse)
@ -384,6 +490,26 @@ e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Ev
return act;
}
EAPI E_Action *
e_bindings_mouse_up_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Up *ev)
{
E_Binding_Event_Mouse_Button event;
e_bindings_evas_event_mouse_button_convert((Evas_Event_Mouse_Down*)ev, &event);
return e_bindings_mouse_up_event_handle(ctxt, obj, &event);
}
EAPI E_Action *
e_bindings_mouse_up_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev)
{
E_Binding_Event_Mouse_Button event;
e_bindings_ecore_event_mouse_button_convert(ev, &event);
return e_bindings_mouse_up_event_handle(ctxt, obj, &event);
}
EAPI void
e_bindings_key_add(E_Binding_Context ctxt, const char *key, E_Binding_Modifier mod, int any_mod, const char *action, const char *params)
{
@ -466,7 +592,7 @@ e_bindings_key_grab(E_Binding_Context ctxt, Ecore_X_Window win)
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
ecore_x_window_key_grab(win, binding->key,
_e_ecore_modifiers(binding->mod), binding->any_mod);
e_bindings_modifiers_to_ecore_convert(binding->mod), binding->any_mod);
}
}
}
@ -482,7 +608,7 @@ e_bindings_key_ungrab(E_Binding_Context ctxt, Ecore_X_Window win)
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
ecore_x_window_key_ungrab(win, binding->key,
_e_ecore_modifiers(binding->mod), binding->any_mod);
e_bindings_modifiers_to_ecore_convert(binding->mod), binding->any_mod);
}
}
}
@ -910,7 +1036,7 @@ e_bindings_signal_del(E_Binding_Context ctxt, const char *sig, const char *src,
}
EAPI E_Action *
e_bindings_signal_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, const char *sig, const char *src, E_Binding_Signal **bind_ret)
e_bindings_signal_find(E_Binding_Context ctxt, const char *sig, const char *src, E_Binding_Signal **bind_ret)
{
E_Binding_Modifier mod = 0;
E_Binding_Signal *binding;
@ -947,7 +1073,7 @@ e_bindings_signal_handle(E_Binding_Context ctxt, E_Object *obj, const char *sig,
if (sig && (sig[0] == 0)) sig = NULL;
if (src && (src[0] == 0)) src = NULL;
act = e_bindings_signal_find(ctxt, obj, sig, src, &binding);
act = e_bindings_signal_find(ctxt, sig, src, &binding);
if (act)
{
if (act->func.go_signal)
@ -1027,7 +1153,7 @@ e_bindings_wheel_grab(E_Binding_Context ctxt, Ecore_X_Window win)
if (button != 0)
ecore_x_window_button_grab(win, button,
ECORE_X_EVENT_MASK_MOUSE_DOWN,
_e_ecore_modifiers(binding->mod), binding->any_mod);
e_bindings_modifiers_to_ecore_convert(binding->mod), binding->any_mod);
}
}
}
@ -1058,24 +1184,22 @@ e_bindings_wheel_ungrab(E_Binding_Context ctxt, Ecore_X_Window win)
}
if (button != 0)
ecore_x_window_button_ungrab(win, button,
_e_ecore_modifiers(binding->mod), binding->any_mod);
e_bindings_modifiers_to_ecore_convert(binding->mod), binding->any_mod);
}
}
}
EAPI E_Action *
e_bindings_wheel_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, Ecore_Event_Mouse_Wheel *ev, E_Binding_Wheel **bind_ret)
e_bindings_wheel_find(E_Binding_Context ctxt, E_Binding_Event_Wheel *ev, E_Binding_Wheel **bind_ret)
{
E_Binding_Modifier mod = 0;
E_Binding_Wheel *binding;
Eina_List *l;
mod = _e_bindings_modifiers(ev->modifiers);
EINA_LIST_FOREACH(wheel_bindings, l, binding)
{
if ((binding->direction == ev->direction) &&
(((binding->z < 0) && (ev->z < 0)) || ((binding->z > 0) && (ev->z > 0))) &&
((binding->any_mod) || (binding->mod == mod)))
((binding->any_mod) || (binding->mod == ev->modifiers)))
{
if (_e_bindings_context_match(binding->ctxt, ctxt))
{
@ -1091,12 +1215,12 @@ e_bindings_wheel_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, Ecore_Ev
}
EAPI E_Action *
e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev)
e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Wheel *ev)
{
E_Action *act;
E_Binding_Wheel *binding;
act = e_bindings_wheel_find(ctxt, obj, ev, &binding);
act = e_bindings_wheel_find(ctxt, ev, &binding);
if (act)
{
if (act->func.go_wheel)
@ -1108,6 +1232,26 @@ e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event
return act;
}
EAPI E_Action *
e_bindings_wheel_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Wheel *ev)
{
E_Binding_Event_Wheel event;
e_bindings_evas_event_mouse_wheel_convert(ev, &event);
return e_bindings_wheel_event_handle(ctxt, obj, &event);
}
EAPI E_Action *
e_bindings_wheel_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev)
{
E_Binding_Event_Wheel event;
e_bindings_ecore_event_mouse_wheel_convert(ev, &event);
return e_bindings_wheel_event_handle(ctxt, obj, &event);
}
EAPI void
e_bindings_acpi_add(E_Binding_Context ctxt, int type, int status, const char *action, const char *params)
{
@ -1145,7 +1289,7 @@ e_bindings_acpi_del(E_Binding_Context ctxt, int type, int status, const char *ac
}
EAPI E_Action *
e_bindings_acpi_find(E_Binding_Context ctxt, E_Object *obj __UNUSED__, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret)
e_bindings_acpi_find(E_Binding_Context ctxt, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret)
{
E_Binding_Acpi *binding;
Eina_List *l;
@ -1179,7 +1323,7 @@ e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi
E_Action *act;
E_Binding_Acpi *binding;
act = e_bindings_acpi_find(ctxt, obj, ev, &binding);
act = e_bindings_acpi_find(ctxt, ev, &binding);
if (act)
{
if (act->func.go_acpi)
@ -1287,10 +1431,12 @@ _e_bindings_modifiers(unsigned int modifiers)
{
E_Binding_Modifier mod = 0;
if (modifiers & ECORE_EVENT_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT;
if (modifiers & ECORE_EVENT_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL;
if (modifiers & ECORE_EVENT_MODIFIER_ALT) mod |= E_BINDING_MODIFIER_ALT;
if (modifiers & ECORE_EVENT_MODIFIER_WIN) mod |= E_BINDING_MODIFIER_WIN;
mod |= (E_BINDING_MODIFIER_SHIFT * !!(modifiers & ECORE_EVENT_MODIFIER_SHIFT));
mod |= (E_BINDING_MODIFIER_CTRL * !!(modifiers & ECORE_EVENT_MODIFIER_CTRL));
mod |= (E_BINDING_MODIFIER_ALT * !!(modifiers & ECORE_EVENT_MODIFIER_ALT));
mod |= (E_BINDING_MODIFIER_WIN * !!(modifiers & ECORE_EVENT_MODIFIER_WIN));
mod |= (E_BINDING_MODIFIER_ALTGR * !!(modifiers & ECORE_EVENT_MODIFIER_ALTGR));
/* FIXME: there is a good reason numlock was ignored. sometimes people
* have it on, sometimes they don't, and often they have no idea. waaaay
* back in E 0.1->0.13 or so days this caused issues thus numlock,
@ -1311,22 +1457,6 @@ _e_bindings_modifiers(unsigned int modifiers)
return mod;
}
static int
_e_ecore_modifiers(E_Binding_Modifier modifiers)
{
int mod = 0;
if (modifiers & E_BINDING_MODIFIER_SHIFT) mod |= ECORE_EVENT_MODIFIER_SHIFT;
if (modifiers & E_BINDING_MODIFIER_CTRL) mod |= ECORE_EVENT_MODIFIER_CTRL;
if (modifiers & E_BINDING_MODIFIER_ALT) mod |= ECORE_EVENT_MODIFIER_ALT;
if (modifiers & E_BINDING_MODIFIER_WIN) mod |= ECORE_EVENT_MODIFIER_WIN;
/* see comment in e_bindings on numlock
if (modifiers & ECORE_X_LOCK_NUM) mod |= ECORE_X_LOCK_NUM;
*/
return mod;
}
static Eina_Bool
_e_bindings_edge_cb_timer(void *data)
{

@ -24,7 +24,8 @@ typedef enum _E_Binding_Modifier
E_BINDING_MODIFIER_SHIFT = (1 << 0),
E_BINDING_MODIFIER_CTRL = (1 << 1),
E_BINDING_MODIFIER_ALT = (1 << 2),
E_BINDING_MODIFIER_WIN = (1 << 3)
E_BINDING_MODIFIER_WIN = (1 << 3),
E_BINDING_MODIFIER_ALTGR = (1 << 4)
} E_Binding_Modifier;
typedef struct _E_Binding_Mouse E_Binding_Mouse;
@ -34,10 +35,38 @@ typedef struct _E_Binding_Signal E_Binding_Signal;
typedef struct _E_Binding_Wheel E_Binding_Wheel;
typedef struct _E_Binding_Acpi E_Binding_Acpi;
typedef struct E_Binding_Event_Mouse_Button E_Binding_Event_Mouse_Button;
typedef struct E_Binding_Event_Wheel E_Binding_Event_Wheel;
#else
#ifndef E_BINDINGS_H
#define E_BINDINGS_H
struct E_Binding_Event_Mouse_Button
{
int button; /**< Mouse button number that was raised (1 - 32) */
Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
unsigned int modifiers; /**< modifier keys pressed during the event */
unsigned int timestamp;
Eina_Bool double_click : 1;
Eina_Bool triple_click : 1;
Eina_Bool hold : 1;
Eina_Bool scroll : 1;
};
struct E_Binding_Event_Wheel
{
int direction;
int z;
Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
unsigned int modifiers; /**< modifier keys pressed during the event */
unsigned int timestamp;
};
struct _E_Binding_Mouse
{
E_Binding_Context ctxt;
@ -115,10 +144,13 @@ EAPI void e_bindings_mouse_add(E_Binding_Context ctxt, int button, E_Bind
EAPI void e_bindings_mouse_del(E_Binding_Context ctxt, int button, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI void e_bindings_mouse_grab(E_Binding_Context ctxt, Ecore_X_Window win);
EAPI void e_bindings_mouse_ungrab(E_Binding_Context ctxt, Ecore_X_Window win);
EAPI E_Action *e_bindings_mouse_down_find(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret);
EAPI E_Action *e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev);
EAPI E_Action *e_bindings_mouse_up_find(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret);
EAPI E_Action *e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev);
EAPI E_Action *e_bindings_mouse_button_find(E_Binding_Context ctxt, E_Binding_Event_Mouse_Button *ev, E_Binding_Mouse **bind_ret);
EAPI E_Action *e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Mouse_Button *ev);
EAPI E_Action *e_bindings_mouse_down_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Down *ev);
EAPI E_Action *e_bindings_mouse_down_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev);
EAPI E_Action *e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Mouse_Button *ev);
EAPI E_Action *e_bindings_mouse_up_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Up *ev);
EAPI E_Action *e_bindings_mouse_up_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Button *ev);
EAPI void e_bindings_key_add(E_Binding_Context ctxt, const char *key, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI void e_bindings_key_del(E_Binding_Context ctxt, const char *key, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
@ -143,21 +175,29 @@ EAPI E_Action *e_bindings_edge_up_event_handle(E_Binding_Context ctxt, E_Objec
EAPI void e_bindings_signal_add(E_Binding_Context ctxt, const char *sig, const char *src, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI void e_bindings_signal_del(E_Binding_Context ctxt, const char *sig, const char *src, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI E_Action *e_bindings_signal_find(E_Binding_Context ctxt, E_Object *obj, const char *sig, const char *src, E_Binding_Signal **bind_ret);
EAPI E_Action *e_bindings_signal_find(E_Binding_Context ctxt, const char *sig, const char *src, E_Binding_Signal **bind_ret);
EAPI E_Action *e_bindings_signal_handle(E_Binding_Context ctxt, E_Object *obj, const char *sig, const char *src);
EAPI void e_bindings_wheel_add(E_Binding_Context ctxt, int direction, int z, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI void e_bindings_wheel_del(E_Binding_Context ctxt, int direction, int z, E_Binding_Modifier mod, int any_mod, const char *action, const char *params);
EAPI void e_bindings_wheel_grab(E_Binding_Context ctxt, Ecore_X_Window win);
EAPI void e_bindings_wheel_ungrab(E_Binding_Context ctxt, Ecore_X_Window win);
EAPI E_Action *e_bindings_wheel_find(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev, E_Binding_Wheel **bind_ret);
EAPI E_Action *e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev);
EAPI E_Action *e_bindings_wheel_find(E_Binding_Context ctxt, E_Binding_Event_Wheel *ev, E_Binding_Wheel **bind_ret);
EAPI E_Action *e_bindings_wheel_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Binding_Event_Wheel *ev);
EAPI E_Action *e_bindings_wheel_evas_event_handle(E_Binding_Context ctxt, E_Object *obj, Evas_Event_Mouse_Wheel *ev);
EAPI E_Action *e_bindings_wheel_ecore_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_Event_Mouse_Wheel *ev);
EAPI void e_bindings_acpi_add(E_Binding_Context ctxt, int type, int status, const char *action, const char *params);
EAPI void e_bindings_acpi_del(E_Binding_Context ctxt, int type, int status, const char *action, const char *params);
EAPI E_Action *e_bindings_acpi_find(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret);
EAPI E_Action *e_bindings_acpi_find(E_Binding_Context ctxt, E_Event_Acpi *ev, E_Binding_Acpi **bind_ret);
EAPI E_Action *e_bindings_acpi_event_handle(E_Binding_Context ctxt, E_Object *obj, E_Event_Acpi *ev);
EAPI void e_bindings_mapping_change_enable(Eina_Bool enable);
EAPI int e_bindings_modifiers_to_ecore_convert(E_Binding_Modifier modifiers);
EAPI void e_bindings_evas_event_mouse_button_convert(const Evas_Event_Mouse_Down *ev, E_Binding_Event_Mouse_Button *event);
EAPI void e_bindings_evas_event_mouse_wheel_convert(const Evas_Event_Mouse_Wheel *ev, E_Binding_Event_Wheel *event);
EAPI void e_bindings_ecore_event_mouse_button_convert(const Ecore_Event_Mouse_Button *ev, E_Binding_Event_Mouse_Button *event);
EAPI void e_bindings_ecore_event_mouse_wheel_convert(const Ecore_Event_Mouse_Wheel *ev, E_Binding_Event_Wheel *event);
#endif
#endif

@ -4026,7 +4026,7 @@ e_border_act_resize_keyboard(E_Border *bd)
EAPI void
e_border_act_move_begin(E_Border *bd,
Ecore_Event_Mouse_Button *ev)
E_Binding_Event_Mouse_Button *ev)
{
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@ -4041,14 +4041,14 @@ e_border_act_move_begin(E_Border *bd,
{
char source[256];
snprintf(source, sizeof(source) - 1, "mouse,down,%i", ev->buttons);
snprintf(source, sizeof(source) - 1, "mouse,down,%i", ev->button);
_e_border_moveinfo_gather(bd, source);
}
}
EAPI void
e_border_act_move_end(E_Border *bd,
Ecore_Event_Mouse_Button *ev __UNUSED__)
E_Binding_Event_Mouse_Button *ev __UNUSED__)
{
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@ -4062,7 +4062,7 @@ e_border_act_move_end(E_Border *bd,
EAPI void
e_border_act_resize_begin(E_Border *bd,
Ecore_Event_Mouse_Button *ev)
E_Binding_Event_Mouse_Button *ev)
{
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@ -4101,14 +4101,14 @@ e_border_act_resize_begin(E_Border *bd,
{
char source[256];
snprintf(source, sizeof(source) - 1, "mouse,down,%i", ev->buttons);
snprintf(source, sizeof(source) - 1, "mouse,down,%i", ev->button);
_e_border_moveinfo_gather(bd, source);
}
}
EAPI void
e_border_act_resize_end(E_Border *bd,
Ecore_Event_Mouse_Button *ev __UNUSED__)
E_Binding_Event_Mouse_Button *ev __UNUSED__)
{
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
@ -4124,18 +4124,13 @@ e_border_act_resize_end(E_Border *bd,
EAPI void
e_border_act_menu_begin(E_Border *bd,
Ecore_Event_Mouse_Button *ev,
E_Binding_Event_Mouse_Button *ev,
int key)
{
E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
if (ev)
{
e_int_border_menu_show(bd,
bd->x + bd->fx.x + ev->x - bd->zone->container->x,
bd->y + bd->fx.y + ev->y - bd->zone->container->y, key,
ev->timestamp);
}
e_int_border_menu_show(bd, ev->canvas.x, ev->canvas.y, key, ev->timestamp);
else
{
int x, y;
@ -6718,8 +6713,13 @@ _e_border_cb_mouse_wheel(void *data,
bd->mouse.current.mx = ev->root.x;
bd->mouse.current.my = ev->root.y;
if (!bd->cur_mouse_action)
e_bindings_wheel_event_handle(E_BINDING_CONTEXT_WINDOW,
E_OBJECT(bd), ev);
{
E_Binding_Event_Wheel ev2;
e_bindings_ecore_event_mouse_wheel_convert(ev, &ev2);
e_bindings_wheel_event_handle(E_BINDING_CONTEXT_WINDOW,
E_OBJECT(bd), &ev2);
}
}
evas_event_feed_mouse_wheel(bd->bg_evas, ev->direction, ev->z, ev->timestamp, NULL);
return ECORE_CALLBACK_PASS_ON;
@ -6758,9 +6758,12 @@ _e_border_cb_mouse_down(void *data,
bd->mouse.current.my = ev->root.y;
if (!bd->cur_mouse_action)
{
E_Binding_Event_Mouse_Button ev2;
e_bindings_ecore_event_mouse_button_convert(ev, &ev2);
bd->cur_mouse_action =
e_bindings_mouse_down_event_handle(E_BINDING_CONTEXT_WINDOW,
E_OBJECT(bd), ev);
E_OBJECT(bd), &ev2);
if (bd->cur_mouse_action)
{
if ((!bd->cur_mouse_action->func.end_mouse) &&
@ -6843,8 +6846,11 @@ _e_border_cb_mouse_up(void *data,
/* should be ok as we are just ending the action if it has an end */
if (bd->cur_mouse_action)
{
E_Binding_Event_Mouse_Button ev2;
e_bindings_ecore_event_mouse_button_convert(ev, &ev2);
if (bd->cur_mouse_action->func.end_mouse)
bd->cur_mouse_action->func.end_mouse(E_OBJECT(bd), "", ev);
bd->cur_mouse_action->func.end_mouse(E_OBJECT(bd), "", &ev2);
else if (bd->cur_mouse_action->func.end)
bd->cur_mouse_action->func.end(E_OBJECT(bd), "");
e_object_unref(E_OBJECT(bd->cur_mouse_action));
@ -6852,7 +6858,10 @@ _e_border_cb_mouse_up(void *data,
}
else
{
if (!e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_WINDOW, E_OBJECT(bd), ev))
E_Binding_Event_Mouse_Button ev2;
e_bindings_ecore_event_mouse_button_convert(ev, &ev2);
if (!e_bindings_mouse_up_event_handle(E_BINDING_CONTEXT_WINDOW, E_OBJECT(bd), &ev2))
e_focus_event_mouse_up(bd);
}
}
@ -7095,8 +7104,11 @@ _e_border_cb_grab_replay(void *data __UNUSED__,
return ECORE_CALLBACK_DONE;
if (ev->event_window == bd->win)
{
if (!e_bindings_mouse_down_find(E_BINDING_CONTEXT_WINDOW,
E_OBJECT(bd), ev, NULL))
E_Binding_Event_Mouse_Button ev2;
e_bindings_ecore_event_mouse_button_convert(ev, &ev2);
if (!e_bindings_mouse_button_find(E_BINDING_CONTEXT_WINDOW,
&ev2, NULL))
return ECORE_CALLBACK_PASS_ON;
}
}

@ -770,11 +770,11 @@ EAPI Eina_List *e_border_client_list(void);
EAPI void e_border_act_move_keyboard(E_Border *bd);
EAPI void e_border_act_resize_keyboard(E_Border *bd);
EAPI void e_border_act_move_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
EAPI void e_border_act_move_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_end(E_Border *bd, Ecore_Event_Mouse_Button *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_Event_Mouse_Button *ev, int key);
EAPI void e_border_act_move_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_move_end(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_resize_end(E_Border *bd, E_Binding_Event_Mouse_Button *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, E_Binding_Event_Mouse_Button *ev, int key);
EAPI void e_border_act_close_begin(E_Border *bd);
EAPI void e_border_act_kill_begin(E_Border *bd);

@ -5,6 +5,7 @@
#define ACTION_TIMEOUT 30.0
#define OVER_FLOW 1
//#define SHAPE_DEBUG
//////////////////////////////////////////////////////////////////////////
//
@ -52,6 +53,20 @@ static int _e_comp_log_dom = -1;
#undef CRI
#if 1
# ifdef SHAPE_DEBUG
# define SHAPE_DBG(...) EINA_LOG_DOM_DBG(_e_comp_log_dom, __VA_ARGS__)
# define SHAPE_INF(...) EINA_LOG_DOM_INFO(_e_comp_log_dom, __VA_ARGS__)
# define SHAPE_WRN(...) EINA_LOG_DOM_WARN(_e_comp_log_dom, __VA_ARGS__)
# define SHAPE_ERR(...) EINA_LOG_DOM_ERR(_e_comp_log_dom, __VA_ARGS__)
# define SHAPE_CRI(...) EINA_LOG_DOM_CRIT(_e_comp_log_dom, __VA_ARGS__)
# else
# define SHAPE_DBG(f, x ...)
# define SHAPE_INF(f, x ...)
# define SHAPE_WRN(f, x ...)
# define SHAPE_ERR(f, x ...)
# define SHAPE_CRI(f, x ...)
# endif
#define DBG(...) EINA_LOG_DOM_DBG(_e_comp_log_dom, __VA_ARGS__)
#define INF(...) EINA_LOG_DOM_INFO(_e_comp_log_dom, __VA_ARGS__)
#define WRN(...) EINA_LOG_DOM_WARN(_e_comp_log_dom, __VA_ARGS__)
@ -76,6 +91,7 @@ static void _e_comp_win_show(E_Comp_Win *cw);
static void _e_comp_win_real_hide(E_Comp_Win *cw);
static void _e_comp_win_hide(E_Comp_Win *cw);
static void _e_comp_win_configure(E_Comp_Win *cw, int x, int y, int w, int h, int border);
static void _e_comp_shapes_update(void *data, E_Container_Shape *es, E_Container_Shape_Change ch);
static void
_e_comp_event_end(void *d EINA_UNUSED, E_Event_Comp *ev)
@ -405,9 +421,17 @@ _e_comp_win_restack(E_Comp_Win *cw)
if (prev) cwp = EINA_INLIST_CONTAINER_GET(prev, E_Comp_Win);
if (cwp)
e_layout_child_raise_above(cw->shobj, cwp->shobj);
{
e_layout_child_raise_above(cw->shobj, cwp->shobj);
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(cwp));
}
else if (cwn)
e_layout_child_raise_above(cw->shobj, cwn->shobj);
{
e_layout_child_raise_above(cw->shobj, cwn->shobj);
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(cwn));
}
if (cw->bd)
{
E_Border *tmp;
@ -419,6 +443,8 @@ _e_comp_win_restack(E_Comp_Win *cw)
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue;
e_layout_child_lower_below(tcw->shobj, cw->shobj);
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(tcw));
cw->c->wins = eina_inlist_prepend_relative(cw->c->wins, EINA_INLIST_GET(tcw), EINA_INLIST_GET(cw));
}
}
}
@ -435,7 +461,7 @@ _e_comp_win_update(E_Comp_Win *cw)
{
Eina_List *l;
Evas_Object *o;
E_Update_Rect *r;
E_Comp_Render_Update_Rect *r;
int i;
int pshaped = cw->shaped;
@ -544,8 +570,8 @@ _e_comp_win_update(E_Comp_Win *cw)
ecore_x_e_comp_pixmap_set(cw->win, cw->pixmap);
cw->native = 0;
DBG(" [0x%x] up resize %ix%i", cw->win, cw->pw, cw->ph);
e_comp_update_resize(cw->up, cw->pw, cw->ph);
e_comp_update_add(cw->up, 0, 0, cw->pw, cw->ph);
e_comp_render_update_resize(cw->up, cw->pw, cw->ph);
e_comp_render_update_add(cw->up, 0, 0, cw->pw, cw->ph);
if (oldpm)
{
DBG(" [0x%x] free pm %x", cw->win, oldpm);
@ -607,10 +633,10 @@ _e_comp_win_update(E_Comp_Win *cw)
evas_object_image_native_surface_set(o, &ns);
}
}
r = e_comp_update_rects_get(cw->up);
r = e_comp_render_update_rects_get(cw->up);
if (r)
{
e_comp_update_clear(cw->up);
e_comp_render_update_clear(cw->up);
for (i = 0; r[i].w > 0; i++)
{
int x, y, w, h;
@ -663,9 +689,9 @@ _e_comp_win_update(E_Comp_Win *cw)
if (!cw->xim)
{
if ((cw->xim = ecore_x_image_new(cw->pw, cw->ph, cw->vis, cw->depth)))
e_comp_update_add(cw->up, 0, 0, cw->pw, cw->ph);
e_comp_render_update_add(cw->up, 0, 0, cw->pw, cw->ph);
}
r = e_comp_update_rects_get(cw->up);
r = e_comp_render_update_rects_get(cw->up);
if (r)
{
if (cw->xim)
@ -683,7 +709,7 @@ _e_comp_win_update(E_Comp_Win *cw)
evas_object_image_size_set(o, cw->pw, cw->ph);
}
e_comp_update_clear(cw->up);
e_comp_render_update_clear(cw->up);
for (i = 0; r[i].w > 0; i++)
{
int x, y, w, h;
@ -693,7 +719,7 @@ _e_comp_win_update(E_Comp_Win *cw)
if (!ecore_x_image_get(cw->xim, cw->pixmap, x, y, x, y, w, h))
{
WRN("UPDATE [0x%x] %i %i %ix%i FAIL!!!!!!!!!!!!!!!!!", cw->win, x, y, w, h);
e_comp_update_add(cw->up, x, y, w, h);
e_comp_render_update_add(cw->up, x, y, w, h);
cw->update = 1;
}
else