Enlightenment CVS committal
Author : rbdpngn
Project : e17
Module : libs/ewl
Dir : e17/libs/ewl/src
Modified Files:
ewl_embed.c ewl_embed.h ewl_enums.h ewl_events.c ewl_events.h
Log Message:
More progress on generic event dispatching. Re-enabled textarea test. Changed
the key names for the textarea colors in the theme.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_embed.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- ewl_embed.c 27 Feb 2004 00:30:58 -0000 1.26
+++ ewl_embed.c 27 Feb 2004 18:46:44 -0000 1.27
@@ -212,7 +212,8 @@
* @return Returns no value.
* @brief Sends the event for a key press into an embed.
*/
-void ewl_embed_feed_key_down(Ewl_Embed *embed, char *keyname)
+void
+ewl_embed_feed_key_down(Ewl_Embed *embed, char *keyname, unsigned int mods)
{
Ewl_Widget *temp;
Ewl_Event_Key_Down ev;
@@ -221,6 +222,7 @@
DCHECK_PARAM_PTR("embed", embed);
DCHECK_PARAM_PTR("keyname", keyname);
+ ev.modifiers = mods;
ev.keyname = strdup(keyname);
/*
@@ -260,7 +262,7 @@
* @return Returns no value.
* @brief Sends the event for a key release into an embed.
*/
-void ewl_embed_feed_key_up(Ewl_Embed *embed, char *keyname)
+void ewl_embed_feed_key_up(Ewl_Embed *embed, char *keyname, unsigned int mods)
{
Ewl_Widget *temp;
Ewl_Event_Key_Up ev;
@@ -269,6 +271,7 @@
DCHECK_PARAM_PTR("embed", embed);
DCHECK_PARAM_PTR("keyname", keyname);
+ ev.modifiers = mods;
ev.keyname = strdup(keyname);
/*
@@ -296,7 +299,9 @@
* @return Returns no value.
* @brief Sends the event for a mouse button press into an embed.
*/
-void ewl_embed_feed_mouse_down(Ewl_Embed *embed, int b, int x, int y)
+void
+ewl_embed_feed_mouse_down(Ewl_Embed *embed, int b, int x, int y, unsigned
+ int mods)
{
int double_click = 0;
Ewl_Event_Mouse_Down ev;
@@ -337,6 +342,7 @@
}
}
+ ev.modifiers = mods;
ev.x = x;
ev.y = y;
ev.button = b;
@@ -373,7 +379,9 @@
* @return Returns no value.
* @brief Sends the event for a mouse button release into an embed.
*/
-void ewl_embed_feed_mouse_up(Ewl_Embed *embed, int b, int x, int y)
+void
+ewl_embed_feed_mouse_up(Ewl_Embed *embed, int b, int x, int y,
+ unsigned int mods)
{
Ewl_Widget *temp;
Ewl_Event_Mouse_Up ev;
@@ -381,6 +389,7 @@
DENTER_FUNCTION(DLEVEL_STABLE);
DCHECK_PARAM_PTR("embed", embed);
+ ev.modifiers = mods;
ev.x = x;
ev.y = y;
ev.button = b;
@@ -406,7 +415,8 @@
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
-void ewl_embed_feed_mouse_move(Ewl_Embed *embed, int x, int y)
+void
+ewl_embed_feed_mouse_move(Ewl_Embed *embed, int x, int y, unsigned int mods)
{
Ewl_Widget *widget;
Ewl_Event_Mouse_Move ev;
@@ -417,6 +427,7 @@
widget = ewl_container_get_child_at_recursive(EWL_CONTAINER(embed),
x, y);
+ ev.modifiers = mods;
ev.x = x;
ev.y = y;
@@ -480,12 +491,18 @@
* @return Returns no value.
* @brief Sends a mouse out event to the last focused widget
*/
-void ewl_embed_feed_mouse_out()
+void ewl_embed_feed_mouse_out(Ewl_Embed *e, int x, int y, unsigned int mods)
{
+ Ewl_Event_Mouse_Out ev;
DENTER_FUNCTION(DLEVEL_STABLE);
+ ev.modifiers = mods;
+ ev.x = x;
+ ev.y = y;
+
while (last_focused) {
- ewl_callback_call(last_focused, EWL_CALLBACK_FOCUS_OUT);
+ ewl_callback_call_with_event_data(last_focused,
+ EWL_CALLBACK_FOCUS_OUT, &ev);
last_focused = last_focused->parent;
}
@@ -866,9 +883,14 @@
ewl_embed_evas_mouse_out_cb(void *data, Evas *e, Evas_Object *obj,
void *event_info)
{
+ Ewl_Embed *embed;
+ Evas_Event_Mouse_Out *ev = event_info;
+
DENTER_FUNCTION(DLEVEL_STABLE);
- ewl_embed_feed_mouse_out();
+ embed = evas_object_smart_data_get(obj);
+ ewl_embed_feed_mouse_out(embed, ev->canvas.x, ev->canvas.y,
+ ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -884,7 +906,7 @@
embed = evas_object_smart_data_get(obj);
ewl_embed_feed_mouse_down(embed, ev->button, ev->canvas.x,
- ev->canvas.y);
+ ev->canvas.y, ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -900,7 +922,7 @@
embed = evas_object_smart_data_get(obj);
ewl_embed_feed_mouse_up(embed, ev->button, ev->canvas.x,
- ev->canvas.y);
+ ev->canvas.y, ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -915,7 +937,8 @@
DENTER_FUNCTION(DLEVEL_STABLE);
embed = evas_object_smart_data_get(obj);
- ewl_embed_feed_mouse_move(embed, ev->canvas.x, ev->canvas.y);
+ ewl_embed_feed_mouse_move(embed, ev->canvas.x, ev->canvas.y,
+ ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -939,7 +962,7 @@
DENTER_FUNCTION(DLEVEL_STABLE);
embed = evas_object_smart_data_get(obj);
- ewl_embed_feed_key_down(embed, ev->keyname);
+ ewl_embed_feed_key_down(embed, ev->keyname, ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
@@ -954,7 +977,7 @@
DENTER_FUNCTION(DLEVEL_STABLE);
embed = evas_object_smart_data_get(obj);
- ewl_embed_feed_key_up(embed, ev->keyname);
+ ewl_embed_feed_key_up(embed, ev->keyname, ewl_ev_get_modifiers());
DLEAVE_FUNCTION(DLEVEL_STABLE);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_embed.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- ewl_embed.h 27 Feb 2004 00:30:58 -0000 1.17
+++ ewl_embed.h 27 Feb 2004 18:46:49 -0000 1.18
@@ -46,14 +46,18 @@
int ewl_embed_init(Ewl_Embed * win);
Evas_Object *ewl_embed_set_evas(Ewl_Embed *emb, Evas *evas,
void *evas_window);
-void ewl_embed_feed_key_down(Ewl_Embed *embed, char *keyname);
-void ewl_embed_feed_key_up(Ewl_Embed *embed, char *keyname);
+void ewl_embed_feed_key_down(Ewl_Embed *embed, char *keyname,
+ unsigned int modifiers);
+void ewl_embed_feed_key_up(Ewl_Embed *embed, char *keyname,
+ unsigned int modifiers);
void ewl_embed_feed_mouse_down(Ewl_Embed *embed, int b, int x,
- int y);
+ int y, unsigned int modifiers);
void ewl_embed_feed_mouse_up(Ewl_Embed *embed, int b, int x,
- int y);
-void ewl_embed_feed_mouse_move(Ewl_Embed *embed, int x, int y);
-void ewl_embed_feed_mouse_out();
+ int y, unsigned int modifiers);
+void ewl_embed_feed_mouse_move(Ewl_Embed *embed, int x, int y,
+ unsigned int modifiers);
+void ewl_embed_feed_mouse_out(Ewl_Embed *embed, int x, int y,
+ unsigned int modifiers);
void ewl_embed_font_path_add(char *path);
Ewl_Embed *ewl_embed_find_by_evas_window(void *win);
Ewl_Embed *ewl_embed_find_by_widget(Ewl_Widget * w);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_enums.h,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -3 -r1.48 -r1.49
--- ewl_enums.h 27 Feb 2004 00:30:58 -0000 1.48
+++ ewl_enums.h 27 Feb 2004 18:46:49 -0000 1.49
@@ -245,6 +245,17 @@
#define EWL_ENGINE_ALL (EWL_ENGINE_SOFTWARE_X11 | EWL_ENGINE_GL_X11 | \
EWL_ENGINE_FB)
+enum Ewl_Modifiers
+{
+ EWL_KEY_MODIFIER_SHIFT = 0x1,
+ EWL_KEY_MODIFIER_CTRL = 0x2,
+ EWL_KEY_MODIFIER_ALT = 0x4,
+ EWL_KEY_MODIFIER_MOD = 0x8,
+ EWL_KEY_MODIFIER_WIN = 0x10,
+};
+
+typedef enum Ewl_Key_Modifiers Ewl_Key_Modifiers;
+
/**
* @}
*/
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_events.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- ewl_events.c 27 Feb 2004 00:30:58 -0000 1.52
+++ ewl_events.c 27 Feb 2004 18:46:49 -0000 1.53
@@ -12,6 +12,8 @@
#include "Ecore_X.h"
#endif
+unsigned int key_modifiers = 0;
+
extern Ewl_Widget *last_selected;
extern Ewl_Widget *last_key;
extern Ewl_Widget *last_focused;
@@ -110,6 +112,16 @@
DRETURN_INT(1, DLEVEL_STABLE);
}
+/**
+ * @return Returns the current mask of modifier keys.
+ * @brief Retrieve the current mask of modifiers that are set.
+ */
+unsigned int ewl_ev_get_modifiers()
+{
+ DENTER_FUNCTION(DLEVEL_STABLE);
+ DRETURN_INT(key_modifiers, DLEVEL_STABLE);
+}
+
#ifdef HAVE_EVAS_ENGINE_SOFTWARE_X11_H
/**
@@ -238,7 +250,20 @@
if (!embed)
DRETURN_INT(TRUE, DLEVEL_STABLE);
- ewl_embed_feed_key_down(embed, ev->keyname);
+ if (strstr(ev->keyname, "Shift_"))
+ key_modifiers |= EWL_KEY_MODIFIER_SHIFT;
+ else if (strstr(ev->keyname, "Control_"))
+ key_modifiers |= EWL_KEY_MODIFIER_CTRL;
+ else if (strstr(ev->keyname, "Alt_"))
+ key_modifiers |= EWL_KEY_MODIFIER_ALT;
+ else if (strstr(ev->keyname, "Mod_"))
+ key_modifiers |= EWL_KEY_MODIFIER_MOD;
+ else if (strstr(ev->keyname, "Super_"))
+ key_modifiers |= EWL_KEY_MODIFIER_WIN;
+ else if (strstr(ev->keyname, "Hyper_"))
+ key_modifiers |= EWL_KEY_MODIFIER_WIN;
+ else
+ ewl_embed_feed_key_down(embed, ev->key_compose, key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
@@ -265,7 +290,20 @@
if (!embed)
DRETURN_INT(TRUE, DLEVEL_STABLE);
- ewl_embed_feed_key_up(embed, ev->keyname);
+ if (strstr(ev->keyname, "Shift_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_SHIFT;
+ else if (strstr(ev->keyname, "Control_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_CTRL;
+ else if (strstr(ev->keyname, "Alt_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_ALT;
+ else if (strstr(ev->keyname, "Mod_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_MOD;
+ else if (strstr(ev->keyname, "Super_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_WIN;
+ else if (strstr(ev->keyname, "Hyper_"))
+ key_modifiers &= ~EWL_KEY_MODIFIER_WIN;
+ else
+ ewl_embed_feed_key_up(embed, ev->keyname, key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
@@ -294,7 +332,8 @@
if (!embed)
DRETURN_INT(TRUE, DLEVEL_STABLE);
- ewl_embed_feed_mouse_down(embed, ev->button, ev->x, ev->y);
+ ewl_embed_feed_mouse_down(embed, ev->button, ev->x, ev->y,
+ key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
@@ -323,7 +362,7 @@
if (!embed)
DRETURN_INT(TRUE, DLEVEL_STABLE);
- ewl_embed_feed_mouse_up(embed, ev->button, ev->x, ev->y);
+ ewl_embed_feed_mouse_up(embed, ev->button, ev->x, ev->y, key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
@@ -351,7 +390,7 @@
if (!embed)
DRETURN_INT(TRUE, DLEVEL_STABLE);
- ewl_embed_feed_mouse_move(embed, ev->x, ev->y);
+ ewl_embed_feed_mouse_move(embed, ev->x, ev->y, key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
@@ -367,9 +406,16 @@
*/
int ewl_ev_x_mouse_out(void *data, int type, void *e)
{
+ Ewl_Embed *embed;
+ Ecore_X_Event_Mouse_Out *ev = e;
+
DENTER_FUNCTION(DLEVEL_STABLE);
- ewl_embed_feed_mouse_out();
+ embed = ewl_embed_find_by_evas_window((void *)ev->win);
+ if (!embed)
+ DRETURN_INT(TRUE, DLEVEL_STABLE);
+
+ ewl_embed_feed_mouse_out(embed, ev->x, ev->y, key_modifiers);
DRETURN_INT(TRUE, DLEVEL_STABLE);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_events.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- ewl_events.h 26 Feb 2004 05:38:34 -0000 1.17
+++ ewl_events.h 27 Feb 2004 18:46:49 -0000 1.18
@@ -32,40 +32,41 @@
struct Ewl_Event_Key_Down
{
- char *keyname;
unsigned int modifiers;
+ char *keyname;
};
typedef struct Ewl_Event_Key_Up Ewl_Event_Key_Up;
struct Ewl_Event_Key_Up
{
- char *keyname;
unsigned int modifiers;
+ char *keyname;
};
typedef struct Ewl_Event_Mouse_Down Ewl_Event_Mouse_Down;
struct Ewl_Event_Mouse_Down
{
+ unsigned int modifiers;
int button;
int x, y;
- unsigned int modifiers;
};
typedef struct Ewl_Event_Mouse_Up Ewl_Event_Mouse_Up;
struct Ewl_Event_Mouse_Up
{
+ unsigned int modifiers;
int button;
int x, y;
- unsigned int modifiers;
};
typedef struct Ewl_Event_Mouse_Move Ewl_Event_Mouse_Move;
struct Ewl_Event_Mouse_Move
{
+ unsigned int modifiers;
int x, y;
};
@@ -73,6 +74,7 @@
struct Ewl_Event_Mouse_In
{
+ unsigned int modifiers;
int x, y;
};
@@ -80,10 +82,12 @@
struct Ewl_Event_Mouse_Out
{
+ unsigned int modifiers;
int x, y;
};
int ewl_ev_init(void);
+unsigned int ewl_ev_get_modifiers();
/**
* @}
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs