Re: [E-devel] Ecore_X: action in XDndPosition
On Fri, Aug 15, 2008 at 11:17:35PM +0400, Fedor Gusev wrote: Hello everyone! Attached patched brings two new functions to Ecore_X: EAPI void ecore_x_dnd_source_action_set(Ecore_X_Atom action); EAPI Ecore_X_Atom ecore_x_dnd_source_action_get(void); The first one sets the action that would be sent in all subsequent XdndPosition messages. This action is reset to XdndActionMove in ecore_x_dnd_begin(). The second function, obviously, gets the current action. Apply from e17/libs/ecore/src/lib/ecore_x. -- King regards, Fedor Gusev. Updated version. -- King regards, Fedor Gusev. Index: Ecore_X.h === RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.204 diff -u -u -r1.204 Ecore_X.h --- Ecore_X.h 25 Jul 2008 02:21:03 - 1.204 +++ Ecore_X.h 15 Aug 2008 21:38:56 - @@ -1078,6 +1078,8 @@ EAPI int ecore_x_dnd_drop(void); EAPI void ecore_x_dnd_send_status(int will_accept, int suppress, Ecore_X_Rectangle rectangle, Ecore_X_Atom action); EAPI void ecore_x_dnd_send_finished(void); +EAPI void ecore_x_dnd_source_action_set(Ecore_X_Atom action); +EAPI Ecore_X_Atom ecore_x_dnd_source_action_get(void); EAPI Ecore_X_Window ecore_x_window_new(Ecore_X_Window parent, int x, int y, int w, int h); EAPI Ecore_X_Window ecore_x_window_override_new(Ecore_X_Window parent, int x, int y, int w, int h); Index: xcb/ecore_xcb_dnd.c === RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/xcb/ecore_xcb_dnd.c,v retrieving revision 1.1 diff -u -u -r1.1 ecore_xcb_dnd.c --- xcb/ecore_xcb_dnd.c 23 Jul 2008 10:00:01 - 1.1 +++ xcb/ecore_xcb_dnd.c 15 Aug 2008 21:38:58 - @@ -30,6 +30,7 @@ _source-win = XCB_NONE; _source-dest = XCB_NONE; _source-state = ECORE_X_DND_SOURCE_IDLE; + _source-prev.window = 0; _target = calloc(1, sizeof(Ecore_X_DND_Target)); _target-win = XCB_NONE; @@ -485,6 +486,7 @@ ecore_x_window_ignore_set(_source-win, 1); _source-state = ECORE_X_DND_SOURCE_DRAGGING; _source-time = _ecore_xcb_event_last_time; + _source-prev.window = 0; /* Default Accepted Action: ask */ _source-action = ECORE_X_ATOM_XDND_ACTION_COPY; @@ -532,6 +534,7 @@ } ecore_x_window_ignore_set(_source-win, 0); + _source-prev.window = 0; _source-dest = XCB_NONE; return status; @@ -611,6 +614,20 @@ } void +ecore_x_dnd_source_action_set(Ecore_X_Atom action) +{ + _source-action = action; + if (_source-prev.window) + _ecore_x_dnd_drag(_source-prev.window, _source-prev.x, _source-prev.y); +} + +Ecore_X_Atom +ecore_x_dnd_source_action_get(void) +{ + return _source-action; +} + +void _ecore_x_dnd_drag(Ecore_X_Window root, int x, int y) @@ -744,6 +761,10 @@ xcb_send_event(_ecore_xcb_conn, 0, win, 0, (const char *)ev); _source-await_status = 1; + + _source-prev.x = x; + _source-prev.y = y; + _source-prev.window = root; } } Index: xcb/ecore_xcb_private.h === RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/xcb/ecore_xcb_private.h,v retrieving revision 1.1 diff -u -u -r1.1 ecore_xcb_private.h --- xcb/ecore_xcb_private.h 23 Jul 2008 10:00:01 - 1.1 +++ xcb/ecore_xcb_private.h 15 Aug 2008 21:38:59 - @@ -107,6 +107,11 @@ unsigned short width, height; } rectangle; + struct { + Ecore_X_Window window; + int x, y; + } prev; + Ecore_X_Time time; Ecore_X_Atom action, accepted_action; Index: xlib/ecore_x_dnd.c === RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/xlib/ecore_x_dnd.c,v retrieving revision 1.1 diff -u -u -r1.1 ecore_x_dnd.c --- xlib/ecore_x_dnd.c 23 Jul 2008 10:00:01 - 1.1 +++ xlib/ecore_x_dnd.c 15 Aug 2008 21:38:59 - @@ -35,6 +35,7 @@ _source-win = None; _source-dest = None; _source-state = ECORE_X_DND_SOURCE_IDLE; + _source-prev.window = 0; _target = calloc(1, sizeof(Ecore_X_DND_Target)); _target-win = None; @@ -335,6 +336,7 @@ ecore_x_window_ignore_set(_source-win, 1); _source-state = ECORE_X_DND_SOURCE_DRAGGING; _source-time = _ecore_x_event_last_time; + _source-prev.window = 0; /* Default Accepted Action: move */ _source-action = ECORE_X_ATOM_XDND_ACTION_MOVE; @@ -384,6 +386,8 @@ } ecore_x_window_ignore_set(_source-win, 0); + _source-prev.window = 0; + return status; } @@ -462,6 +466,20 @@ } void +ecore_x_dnd_source_action_set(Ecore_X_Atom action) +{ + _source-action = action; + if (_source-prev.window) + _ecore_x_dnd_drag(_source-prev.window, _source-prev.x, _source-prev.y); +} + +Ecore_X_Atom +ecore_x_dnd_source_action_get(void) +{ + return _source-action; +} + +void _ecore_x_dnd_drag(Ecore_X_Window
[E-devel] EFM: DND action modifiers
Hello. First of two attached patches brings an API that allows one to handle key pressing while DND using two functions: EAPI void e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)); EAPI void e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)); Both callbacks are called when a key is down/up while drag. Second patch uses this API to use modifiers in EFM drag. If you hold Control while drag the action is Copy, Alt -- action is Ask, Shift -- action is Move. The icons get signals 'e,state,move', 'e,state,copy', 'e,state,ask' with source 'e', so one can modify a theme to show which action would be performed. Note that you need a modified Ecore_X for this to work, see my previous mail. -- King regards, Fedor Gusev. diff --git a/src/bin/e_dnd.c b/src/bin/e_dnd.c index c5d002b..4038426 100644 --- a/src/bin/e_dnd.c +++ b/src/bin/e_dnd.c @@ -30,6 +30,8 @@ static void _e_drag_free(E_Drag *drag); static int _e_dnd_cb_window_shape(void *data, int type, void *event); +static int _e_dnd_cb_key_down(void *data, int type, void *event); +static int _e_dnd_cb_key_up(void *data, int type, void *event); static int _e_dnd_cb_mouse_up(void *data, int type, void *event); static int _e_dnd_cb_mouse_move(void *data, int type, void *event); static int _e_dnd_cb_event_dnd_enter(void *data, int type, void *event); @@ -102,6 +104,12 @@ e_dnd_init(void) _event_handlers = evas_list_append(_event_handlers, ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, _e_dnd_cb_event_dnd_selection, NULL)); + _event_handlers = evas_list_append(_event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, + _e_dnd_cb_key_down, NULL)); + _event_handlers = evas_list_append(_event_handlers, + ecore_event_handler_add(ECORE_X_EVENT_KEY_UP, + _e_dnd_cb_key_up, NULL)); _action = ECORE_X_ATOM_XDND_ACTION_PRIVATE; return 1; @@ -205,6 +213,9 @@ e_drag_new(E_Container *container, int x, int y, ecore_x_window_shadow_tree_flush(); _drag_win_root = drag-container-manager-root; + + drag-cb.key_down = NULL; + drag-cb.key_up = NULL; return drag; } @@ -529,6 +540,18 @@ e_drop_handler_action_get() return _action; } +EAPI void +e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)) +{ + drag-cb.key_down = func; +} + +EAPI void +e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)) +{ + drag-cb.key_up = func; +} + /* local subsystem functions */ static void @@ -717,6 +740,10 @@ _e_drag_update(Ecore_X_Window root, int x, int y, Ecore_X_Atom action) int dx, dy, dw, dh; Ecore_X_Window win, ignore_win[2]; int responsive = 0; + static struct + { + Ecore_X_Window root, win; + } cache = {0, 0}; // double t1 = ecore_time_get(); if (_drag_current) @@ -726,7 +753,13 @@ _e_drag_update(Ecore_X_Window root, int x, int y, Ecore_X_Atom action) /* FIXME: this is nasty. every x mouse event we go back to x and do * a whole bunch of round-trips narrowing down the toplevel window * which contains the mouse */ - win = ecore_x_window_shadow_tree_at_xy_with_skip_get(root, x, y, ignore_win, 2); + if (cache.win != root) + { + /* A little bit of caching to void trips to X. */ + cache.win = root; + cache.root = ecore_x_window_root_get(root); + } + win = ecore_x_window_shadow_tree_at_xy_with_skip_get(cache.root, x, y, ignore_win, 2); // win = ecore_x_window_at_xy_with_skip_get(x, y, ignore_win, 2); } else @@ -1049,6 +1082,38 @@ _e_dnd_cb_window_shape(void *data, int ev_type, void *ev) } static int +_e_dnd_cb_key_down(void *data, int type, void *event) +{ + Ecore_X_Event_Key_Down *ev; + + ev = event; + if (ev-win != _drag_win) return 1; + + if (!_drag_current) return 1; + + if (_drag_current-cb.key_down) + _drag_current-cb.key_down(_drag_current, ev); + + return 1; +} + +static int +_e_dnd_cb_key_up(void *data, int type, void *event) +{ + Ecore_X_Event_Key_Up *ev; + + ev = event; + if (ev-win != _drag_win) return 1; + + if (!_drag_current) return 1; + + if (_drag_current-cb.key_up) + _drag_current-cb.key_up(_drag_current, ev); + + return 1; +} + +static int _e_dnd_cb_mouse_up(void *data, int type, void *event) { Ecore_X_Event_Mouse_Button_Up *ev; diff --git a/src/bin/e_dnd.h b/src/bin/e_dnd.h index 069d0da..84734cd 100644 --- a/src/bin/e_dnd.h +++ b/src/bin/e_dnd.h @@ -38,6 +38,8 @@ struct _E_Drag struct { void *(*convert)(E_Drag *drag, const char *type); void (*finished)(E_Drag *drag, int dropped); + void (*key_down)(E_Drag *drag, Ecore_X_Event_Key_Down *e); + void (*key_up)(E_Drag *drag, Ecore_X_Event_Key_Up *e);
Re: [E-devel] EFM: DND action modifiers
On Sat, Aug 16, 2008 at 9:55 AM, Fedor Gusev [EMAIL PROTECTED] wrote: Hello. First of two attached patches brings an API that allows one to handle key pressing while DND using two functions: EAPI void e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)); EAPI void e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)); Both callbacks are called when a key is down/up while drag. Second patch uses this API to use modifiers in EFM drag. If you hold Control while drag the action is Copy, Alt -- action is Ask, Shift -- action is Move. The icons get signals 'e,state,move', 'e,state,copy', 'e,state,ask' with source 'e', so one can modify a theme to show which action would be performed. Note that you need a modified Ecore_X for this to work, see my previous mail. Hi Fedor, I haven't tried or read the code, sorry, but from your description Ask is only from alt? What is the action when no modifier is used? Defaulting to ask would be the best option. Also, maybe the ask dialog could point Move/Copy could be automatically selected with Control/Shift. Thanks for your work! -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -- MSN: [EMAIL PROTECTED] Skype: gsbarbieri Mobile: +55 (19) 9225-2202 - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] EFM: DND action modifiers
On Sat, Aug 16, 2008 at 04:55:18PM +0400, Fedor Gusev wrote: Note that you need a modified Ecore_X for this to work, see my previous mail. Nevermind, that patch is already in CVS. -- King regards, Fedor Gusev. - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] EFM: DND action modifiers
Gustavo Sverzut Barbieri wrote: On Sat, Aug 16, 2008 at 9:55 AM, Fedor Gusev [EMAIL PROTECTED] wrote: Hello. First of two attached patches brings an API that allows one to handle key pressing while DND using two functions: EAPI void e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)); EAPI void e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)); Both callbacks are called when a key is down/up while drag. Second patch uses this API to use modifiers in EFM drag. If you hold Control while drag the action is Copy, Alt -- action is Ask, Shift -- action is Move. The icons get signals 'e,state,move', 'e,state,copy', 'e,state,ask' with source 'e', so one can modify a theme to show which action would be performed. Note that you need a modified Ecore_X for this to work, see my previous mail. Hi Fedor, I haven't tried or read the code, sorry, but from your description Ask is only from alt? What is the action when no modifier is used? Defaulting to ask would be the best option. Also, maybe the ask dialog could point Move/Copy could be automatically selected with Control/Shift. Well the default action is move right now as it is in most file managers afaik. Ask should actually be implemented on a right click drag eventually, but since the deadline was approaching I just had him do it with a modifier. Right click drags will require some extra modifications. I don't understand your last sentence, but the ask pops up a menu to click on . Are you saying we should provide hotkeys for this menu? Thanks for your work! - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[E-devel] Nightly build log for E17 on 2008-08-16 07:43:25 -0700
Build log for Enlightenment DR 0.17 on 2008-08-16 07:43:25 -0700 Build logs are available at http://download.enlightenment.org/tests/logs Packages that failed to build: enna http://download.enlightenment.org/tests/logs/enna.log epdf http://download.enlightenment.org/tests/logs/epdf.log Packages with no supported build system: entice, esmart_rsvg, exorcist, python-efl, Packages skipped: camE, ecore_dbus, engage, enotes, enscribe, epbb, eplay, erss, etk_server, etox, e_utils, Evas_Perl, evoak, gfx_routines, lvs-gui, med, nexus, notgame, ruby-efl, webcam, Packages that build OK: alarm, bling, calendar, cpu, deskshow, echo, eclair, ecore_li, ecore, edata, edb, e_dbus, edje_editor, edje, edje_viewer, edvi, eet, eflame, eflpp, efm_nav, efm_path, efreet, elapse, elation, elicit, elitaire, e, embrace, embryo, emotion, emphasis, empower, emprint, emu, enesim, engrave, engycad, enhance, enity, enterminus, enthrall, entrance_edit_gui, entrance, entropy, envision, epeg, ephoto, e_phys, epsilon, epx, equate, esmart, estickies, etk_extra, etk, etk-perl, evas, evfs, evolve, ewl, examine, execwatch, exhibit, exml, expedite, express, exquisite, extrackt, feh, flame, forecasts, gevas2, iconbar, iiirk, imlib2_loaders, imlib2, Imlib2_Perl, imlib2_tools, language, mail, mem, mixer, moon, mpdule, net, news, notification, penguins, pesh, photo, rage, rain, screenshot, scrot, skel, slideshow, snow, taskbar, tclock, uptime, weather, winselector, wlan, Debian GNU/Linux 4.0 \n \l Linux enlightenment2 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686 GNU/Linux See http://download.enlightenment.org/tests/ for details. - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[E-devel] cvs-svn...
is underway. it may take a few hours... i'll mail when done and confirmed. unfortunately it has ended up being a little tricky to import... but it's on its way. -- - Codito, ergo sum - I code, therefore I am -- The Rasterman (Carsten Haitzler)[EMAIL PROTECTED] - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] EFM: DND action modifiers
On Sat, Aug 16, 2008 at 12:09 PM, Nick Hughart [EMAIL PROTECTED] wrote: Gustavo Sverzut Barbieri wrote: On Sat, Aug 16, 2008 at 9:55 AM, Fedor Gusev [EMAIL PROTECTED] wrote: Hello. First of two attached patches brings an API that allows one to handle key pressing while DND using two functions: EAPI void e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)); EAPI void e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)); Both callbacks are called when a key is down/up while drag. Second patch uses this API to use modifiers in EFM drag. If you hold Control while drag the action is Copy, Alt -- action is Ask, Shift -- action is Move. The icons get signals 'e,state,move', 'e,state,copy', 'e,state,ask' with source 'e', so one can modify a theme to show which action would be performed. Note that you need a modified Ecore_X for this to work, see my previous mail. Hi Fedor, I haven't tried or read the code, sorry, but from your description Ask is only from alt? What is the action when no modifier is used? Defaulting to ask would be the best option. Also, maybe the ask dialog could point Move/Copy could be automatically selected with Control/Shift. Well the default action is move right now as it is in most file managers afaik. Ask should actually be implemented on a right click drag eventually, but since the deadline was approaching I just had him do it with a modifier. Right click drags will require some extra modifications. Yes, and I know about deadlines and I actually like modifier keys more than right-middle clicks. I was just pointing an possible usability issue, easily to fix (I guess). I don't understand your last sentence, but the ask pops up a menu to click on . Are you saying we should provide hotkeys for this menu? Something like KDE's: Move [Shift] Copy[Control] -- Cancel AFAIK it does not act on the popup (clicking shift while in the menu), but when you do the drag. Anyway, better 1) give it a try and 2) try to provide a patch, I'll do it later today. -- Gustavo Sverzut Barbieri http://profusion.mobi embedded systems -- MSN: [EMAIL PROTECTED] Skype: gsbarbieri Mobile: +55 (19) 9225-2202 - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] EFM: DND action modifiers
Gustavo Sverzut Barbieri wrote: On Sat, Aug 16, 2008 at 12:09 PM, Nick Hughart [EMAIL PROTECTED] wrote: Gustavo Sverzut Barbieri wrote: On Sat, Aug 16, 2008 at 9:55 AM, Fedor Gusev [EMAIL PROTECTED] wrote: Hello. First of two attached patches brings an API that allows one to handle key pressing while DND using two functions: EAPI void e_drag_key_down_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Down *e)); EAPI void e_drag_key_up_cb_set(E_Drag *drag, void (*func)(E_Drag *drag, Ecore_X_Event_Key_Up *e)); Both callbacks are called when a key is down/up while drag. Second patch uses this API to use modifiers in EFM drag. If you hold Control while drag the action is Copy, Alt -- action is Ask, Shift -- action is Move. The icons get signals 'e,state,move', 'e,state,copy', 'e,state,ask' with source 'e', so one can modify a theme to show which action would be performed. Note that you need a modified Ecore_X for this to work, see my previous mail. Hi Fedor, I haven't tried or read the code, sorry, but from your description Ask is only from alt? What is the action when no modifier is used? Defaulting to ask would be the best option. Also, maybe the ask dialog could point Move/Copy could be automatically selected with Control/Shift. Well the default action is move right now as it is in most file managers afaik. Ask should actually be implemented on a right click drag eventually, but since the deadline was approaching I just had him do it with a modifier. Right click drags will require some extra modifications. Yes, and I know about deadlines and I actually like modifier keys more than right-middle clicks. I was just pointing an possible usability issue, easily to fix (I guess). I don't understand your last sentence, but the ask pops up a menu to click on . Are you saying we should provide hotkeys for this menu? Something like KDE's: Move [Shift] Copy[Control] -- Cancel AFAIK it does not act on the popup (clicking shift while in the menu), but when you do the drag. Anyway, better 1) give it a try and 2) try to provide a patch, I'll do it later today. Well I'd wait until the SVN move is over since I'm waiting to commit this patch until that is done. Should hopefully be done some time today. - This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100url=/ ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel