Example #1
0
static void
_e_int_menus_apps_drag(void *data, E_Menu *m, E_Menu_Item *mi)
{
   E_Border *bd;
   bd = data;

   /* start drag! */
   if (mi->icon_object)
     {
	E_Drag *drag;
	Evas_Object *o = NULL;
	Evas_Coord x, y, w, h;
	const char *drag_types[] = { "enlightenment/border" };

	evas_object_geometry_get(mi->icon_object,
				 &x, &y, &w, &h);
	drag = e_drag_new(m->zone->container, x, y,
			  drag_types, 1, bd, -1, NULL, _itask_menu_cb_item_drag_finished);

	o = e_border_icon_add(bd, e_drag_evas_get(drag));

	e_drag_object_set(drag, o);
	e_drag_resize(drag, w, h);
	e_object_ref(E_OBJECT(bd));
	e_drag_start(drag, mi->drag.x + w, mi->drag.y + h);
     }
}
Example #2
0
static void
_itask_item_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
   Evas_Event_Mouse_Move *ev;
   Itask_Item *ic;
   int dx, dy;

   ev = event_info;
   ic = data;
   if (!ic->drag.start)
     return;

   dx = ev->cur.output.x - ic->drag.x;
   dy = ev->cur.output.y - ic->drag.y;

   if (((dx * dx) + (dy * dy)) >
       (e_config->drag_resist * e_config->drag_resist))
     {
	E_Drag *d;
	Evas_Object *o;
	Evas_Coord x, y, w, h;
	const char *drag_types[] =
	  { "enlightenment/border" };

	ic->drag.dnd = 1;
	ic->drag.start = 0;

	evas_object_geometry_get(ic->o_icon, &x, &y, &w, &h);
	d = e_drag_new(ic->itask->gcc->gadcon->zone->container,
		       x, y, drag_types, 1,
		       ic->border, -1, NULL, _itask_item_cb_drag_finished);
	o = e_border_icon_add(ic->border, e_drag_evas_get(d));
	e_drag_object_set(d, o);

	e_drag_resize(d, w, h);
	e_drag_start(d, ic->drag.x, ic->drag.y);
	evas_event_feed_mouse_up(ic->itask->gcc->gadcon->evas,
				 1, EVAS_BUTTON_NONE,
				 ecore_x_current_time_get(), NULL);
	e_object_ref(E_OBJECT(ic->border));
     }
}
Example #3
0
E_API int
e_drag_start(E_Drag *drag, int x, int y)
{
   const Eina_List *l;
   E_Drop_Handler *h;

   if (_drag_win) return 0;
#ifndef HAVE_WAYLAND_ONLY
   if (e_comp->comp_type == E_PIXMAP_TYPE_X)
     {
        _drag_win = ecore_x_window_input_new(e_comp->win,
                                             0, 0,
                                             e_comp->w, e_comp->h);
        ecore_event_window_register(_drag_win, e_comp->ee, e_comp->evas,
                                      NULL, NULL, NULL, NULL);
        ecore_x_window_show(_drag_win);
        _drag_win_root = e_comp->root;
        if (!e_grabinput_get(_drag_win, 0, _drag_win))
          {
             ecore_x_window_free(_drag_win);
             _drag_win = _drag_win_root = 0;
             return 0;
          }
     }
   else
#endif
     {
        _drag_win = _drag_win_root = e_comp->ee_win;
        if (!e_comp_grab_input(1, 1))
          {
             _drag_win = _drag_win_root = 0;
             return 0;
          }
     }

   if (!drag->object)
     {
        e_drag_object_set(drag, evas_object_rectangle_add(drag->evas));
        evas_object_color_set(drag->object, 255, 0, 0, 255);
     }
   evas_object_move(drag->comp_object, drag->x, drag->y);
   evas_object_resize(drag->comp_object, drag->w, drag->h);
   drag->visible = 1;
   drag->type = E_DRAG_INTERNAL;

   drag->dx = x - drag->x;
   drag->dy = y - drag->y;

   _active_handlers = eina_list_free(_active_handlers);
   EINA_LIST_FOREACH(_drop_handlers, l, h)
     {
        Eina_Bool active = h->active;

        h->active = 0;
        eina_stringshare_replace(&h->active_type, NULL);
        _e_drop_handler_active_check(h, drag, NULL);
        if (h->active != active)
          {
             if (h->active)
               _active_handlers = eina_list_append(_active_handlers, h);
             else
               _active_handlers = eina_list_remove(_active_handlers, h);
          }
        h->entered = 0;
     }