Enlightenment CVS committal Author : raster Project : e17 Module : libs/etk
Dir : e17/libs/etk/src/lib Modified Files: etk_combobox.c etk_event.c etk_event.h etk_scrolled_view.c etk_scrolled_view.h etk_tree.c etk_viewport.c etk_viewport.h etk_widget.c Log Message: set on_hold flags if dragged. otherwise things always get activated if just dragged around. =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_combobox.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -3 -r1.60 -r1.61 --- etk_combobox.c 8 Oct 2007 13:28:52 -0000 1.60 +++ etk_combobox.c 30 Jun 2008 05:53:48 -0000 1.61 @@ -1545,6 +1545,8 @@ return ETK_TRUE; if (event->button != 1 && event->button != 3) return ETK_TRUE; + if (event->modifiers & ETK_MODIFIER_ON_HOLD) + return ETK_TRUE; etk_combobox_active_item_set(item->combobox, item); if (event->button == 1) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_event.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- etk_event.c 19 Sep 2007 20:16:26 -0000 1.7 +++ etk_event.c 30 Jun 2008 05:53:49 -0000 1.8 @@ -87,6 +87,8 @@ etk_event->timestamp = evas_event->timestamp; _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -108,6 +110,8 @@ etk_event->timestamp = evas_event->timestamp; _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -133,6 +137,8 @@ etk_event->timestamp = evas_event->timestamp; _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -155,6 +161,8 @@ _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); _etk_event_mouse_flags_wrap(evas_event->flags, &etk_event->flags); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -177,6 +185,8 @@ _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); _etk_event_mouse_flags_wrap(evas_event->flags, &etk_event->flags); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -200,6 +210,8 @@ _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); etk_event->timestamp = evas_event->timestamp; + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -217,6 +229,8 @@ etk_event->timestamp = evas_event->timestamp; _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** @@ -234,6 +248,8 @@ etk_event->timestamp = evas_event->timestamp; _etk_event_modifiers_wrap(evas_event->modifiers, &etk_event->modifiers); _etk_event_locks_wrap(evas_event->locks, &etk_event->locks); + if (evas_event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + etk_event->modifiers |= ETK_MODIFIER_ON_HOLD; } /** =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_event.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- etk_event.h 19 Sep 2007 20:16:26 -0000 1.9 +++ etk_event.h 30 Jun 2008 05:53:49 -0000 1.10 @@ -36,7 +36,8 @@ ETK_MODIFIER_CTRL = 1 << 0, /**< "Control" is pressed */ ETK_MODIFIER_ALT = 1 << 1, /**< "Alt" is pressed */ ETK_MODIFIER_SHIFT = 1 << 2, /**< "Shift" is pressed */ - ETK_MODIFIER_WIN = 1 << 3 /**< "Win" (between "Ctrl" and "Alt") is pressed */ + ETK_MODIFIER_WIN = 1 << 3, /**< "Win" (between "Ctrl" and "Alt") is pressed */ + ETK_MODIFIER_ON_HOLD = 1 << 31 /**< When the event is to be "on hold" and is informative only */ } Etk_Modifiers; /** @brief The keyboard locks active when the event has been emitted */ =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_scrolled_view.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- etk_scrolled_view.c 26 Jun 2008 06:03:49 -0000 1.38 +++ etk_scrolled_view.c 30 Jun 2008 05:53:49 -0000 1.39 @@ -156,6 +156,7 @@ } etk_container_add(ETK_CONTAINER(viewport), child); + scrolled_view->viewport = viewport; } /** @@ -719,9 +720,10 @@ drag->old_timestamp = 0.0; drag->Vx = 0; drag->Vy = 0; - drag->position = event->widget; + drag->down_position = drag->position = event->widget; drag->bar_position.x = hscrollbar_range->value; drag->bar_position.y = vscrollbar_range->value; + etk_viewport_hold_events_set(scrolled_view->viewport, ETK_FALSE); } return ETK_FALSE; } @@ -751,11 +753,21 @@ hscrollbar_range = ETK_RANGE(scrolled_view->hscrollbar); if (drag->scroll_flag == 0) { - drag->scroll_flag = (event->cur.widget.y - drag->position.y)/vscrollbar_range->step_increment || (event->cur.widget.x - drag->position.x)/hscrollbar_range->step_increment; + drag->scroll_flag = (event->cur.widget.y - drag->position.y)/vscrollbar_range->step_increment || (event->cur.widget.x - drag->position.x) / hscrollbar_range->step_increment; } if (drag->scroll_flag) { + /* if we have dragged beyond 15 pixels from the down point, in any + * direction, set on hold flag */ + if ((((event->cur.widget.x - drag->down_position.x) * + (event->cur.widget.x - drag->down_position.x)) + + ((event->cur.widget.y - drag->down_position.y) * + (event->cur.widget.y - drag->down_position.y))) > + (15 * 15)) + { + etk_viewport_hold_events_set(scrolled_view->viewport, ETK_TRUE); + } if (drag->bar_pressed == ETK_FALSE) { etk_range_value_set(vscrollbar_range, vscrollbar_range->value - (event->cur.widget.y - drag->position.y)); @@ -789,6 +801,8 @@ if (!(scrolled_view = ETK_SCROLLED_VIEW(object))) return ETK_FALSE; + etk_viewport_hold_events_set(scrolled_view->viewport, ETK_FALSE); + if (!drag->dragable) return ETK_FALSE; =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_scrolled_view.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- etk_scrolled_view.h 20 Apr 2008 18:34:09 -0000 1.14 +++ etk_scrolled_view.h 30 Jun 2008 05:53:49 -0000 1.15 @@ -38,18 +38,19 @@ struct Etk_Scrolled_View_Mouse_Drag { - Etk_Bool mouse_down; - Etk_Bool bar_pressed; - Etk_Bool dragable; - Etk_Bool bouncy; - int scroll_flag; Etk_Position position; + Etk_Position down_position; Etk_Position bar_position; double sample_magic; - unsigned int damping_magic; double timestamp; double old_timestamp; double Vx,Vy; + int scroll_flag; + unsigned int damping_magic; + Etk_Bool mouse_down; + Etk_Bool bar_pressed; + Etk_Bool dragable; + Etk_Bool bouncy; }; /** @@ -64,6 +65,7 @@ Etk_Widget *hscrollbar; Etk_Widget *vscrollbar; + Etk_Widget *viewport; Etk_Scrolled_View_Policy hpolicy; Etk_Scrolled_View_Policy vpolicy; =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.c,v retrieving revision 1.116 retrieving revision 1.117 diff -u -3 -r1.116 -r1.117 --- etk_tree.c 12 Jun 2008 08:13:04 -0000 1.116 +++ etk_tree.c 30 Jun 2008 05:53:49 -0000 1.117 @@ -3128,6 +3128,9 @@ if (!(col = ETK_TREE_COL(data)) || !(tree = col->tree) || event->button != 1) return; + if (event->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + if (tree->col_to_resize) tree->col_to_resize = NULL; else @@ -3262,6 +3265,9 @@ evas_object_geometry_get(obj, &x, &y, &w, &h); etk_event_mouse_up_wrap(ETK_WIDGET(row_object->row->tree), event_info, &event); + if (event.modifiers & ETK_MODIFIER_ON_HOLD) + return; + /* We make sure the mouse button has been released over the row */ if (ETK_INSIDE(event.canvas.x, event.canvas.y, x, y, w, h)) { =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_viewport.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- etk_viewport.c 26 Jun 2008 06:03:49 -0000 1.18 +++ etk_viewport.c 30 Jun 2008 05:53:49 -0000 1.19 @@ -57,6 +57,29 @@ return etk_widget_new(ETK_VIEWPORT_TYPE, NULL); } +/** + * @brief Sets the hold_events flag for the viewport + * This sets the hold_events flag. When set all events on children of the + * viewport have the ETK_MODIFIER_ON_HOLD in the modifier flags if it is + * used by a scrolled view + */ +void etk_viewport_hold_events_set(Etk_Viewport *viewport, Etk_Bool hold_events) +{ + if (!viewport) return; + viewport->hold_events = hold_events; +} + +/** + * @brief Gets the hold_events flag for the viewport + * @return Returns the hold_events flag + */ +Etk_Bool etk_viewport_hold_events_get(Etk_Viewport *viewport) +{ + if (!viewport) return ETK_FALSE; + return viewport->hold_events; +} + + /************************** * * Etk specific functions @@ -168,6 +191,39 @@ * **************************/ +static void _etk_viewport_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Etk_Viewport *viewport; + Evas_Event_Mouse_Down *event; + + if (!(viewport = ETK_VIEWPORT(data)) || !(event = event_info)) + return; + if (viewport->hold_events) + event->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; +} + +static void _etk_viewport_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Etk_Viewport *viewport; + Evas_Event_Mouse_Up *event; + + if (!(viewport = ETK_VIEWPORT(data)) || !(event = event_info)) + return; + if (viewport->hold_events) + event->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; +} + +static void _etk_viewport_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Etk_Viewport *viewport; + Evas_Event_Mouse_Down *event; + + if (!(viewport = ETK_VIEWPORT(data)) || !(event = event_info)) + return; + if (viewport->hold_events) + event->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; +} + /* Called when the viewport is realized */ static Etk_Bool _etk_viewport_realized_cb(Etk_Object *object, void *data) { @@ -186,8 +242,13 @@ evas_object_show(viewport->clip); } viewport->event = evas_object_rectangle_add(evas); + evas_object_event_callback_add(viewport->event, EVAS_CALLBACK_MOUSE_DOWN, _etk_viewport_mouse_down_cb, viewport); + evas_object_event_callback_add(viewport->event, EVAS_CALLBACK_MOUSE_UP, _etk_viewport_mouse_up_cb, viewport); + evas_object_event_callback_add(viewport->event, EVAS_CALLBACK_MOUSE_MOVE, _etk_viewport_mouse_move_cb, viewport); etk_widget_member_object_add(ETK_WIDGET(viewport), viewport->event); evas_object_color_set(viewport->event, 0, 0, 0, 0); + evas_object_repeat_events_set(viewport->event, 1); + evas_object_raise(viewport->event); evas_object_show(viewport->event); return ETK_TRUE; @@ -203,6 +264,7 @@ etk_widget_clip_set(ETK_WIDGET(child), viewport->clip); evas_object_show(viewport->clip); + evas_object_raise(viewport->event); return ETK_TRUE; } =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_viewport.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_viewport.h 19 Jun 2008 10:53:58 -0000 1.6 +++ etk_viewport.h 30 Jun 2008 05:53:49 -0000 1.7 @@ -34,10 +34,13 @@ Evas_Object *clip, *event; int xscroll, yscroll; + Etk_Bool hold_events; }; Etk_Type *etk_viewport_type_get(void); Etk_Widget *etk_viewport_new(void); +void etk_viewport_hold_events_set(Etk_Viewport *viewport, Etk_Bool hold_events); +Etk_Bool etk_viewport_hold_events_get(Etk_Viewport *viewport); /** @} */ =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.c,v retrieving revision 1.132 retrieving revision 1.133 diff -u -3 -r1.132 -r1.133 --- etk_widget.c 26 Jun 2008 06:03:49 -0000 1.132 +++ etk_widget.c 30 Jun 2008 05:53:49 -0000 1.133 @@ -2338,7 +2338,8 @@ etk_signal_emit(ETK_WIDGET_MOUSE_UP_SIGNAL, ETK_OBJECT(widget), &event); if (ETK_INSIDE(event.canvas.x, event.canvas.y, - widget->geometry.x, widget->geometry.y, widget->geometry.w, widget->geometry.h)) + widget->geometry.x, widget->geometry.y, widget->geometry.w, widget->geometry.h) && + (!(event.modifiers & ETK_MODIFIER_ON_HOLD))) { etk_signal_emit(ETK_WIDGET_MOUSE_CLICK_SIGNAL, ETK_OBJECT(widget), &event); } ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs