Example #1
0
//Popup the menu at the position (x, y)
void eclair_menu_popup_at_xy(Eclair_Menu *menu, int x, int y)
{
   if (!menu)
      return;

   if (!_eclair_menu_input_window)
   {
      Ecore_X_Window root, parent;
      int root_x, root_y, root_w, root_h;

      root = menu->x_window;
      while ((parent = ecore_x_window_parent_get(root)) != 0)
         root = parent;
 
      ecore_x_window_geometry_get(root, &root_x, &root_y, &root_w, &root_h);
      _eclair_menu_input_window = ecore_x_window_input_new(root, root_x, root_y, root_w, root_h);
   }
   if (!_eclair_menu_root)
   {
      _eclair_menu_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, _eclair_menu_mouse_up_cb, menu);
      _eclair_menu_mouse_move_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_MOVE, _eclair_menu_mouse_move_cb, menu);
      ecore_x_window_show(_eclair_menu_input_window);
      ecore_x_keyboard_grab(_eclair_menu_input_window);
      ecore_x_pointer_confine_grab(_eclair_menu_input_window);

      _eclair_menu_root = menu;
   }
   ecore_evas_move(menu->window, x, y);
   ecore_evas_show(menu->window);
   evas_event_feed_mouse_move(menu->evas, -100000, -100000, ecore_x_current_time_get(), NULL);
   evas_event_feed_mouse_in(menu->evas, ecore_x_current_time_get(), NULL);
   _eclair_menu_popped_menus = eina_list_append(_eclair_menu_popped_menus, menu);

   _eclair_menu_update_slide_timer(menu);
}
static void
_cb_item_open(void *data, Evas_Object *obj, const char *emission, const char *source)
{
   News_Item *ni;
   E_Manager *man;
   E_Zone *zone;
   int cx, cy;

   ni = data;

   switch (ni->config->openmethod)
     {
     case NEWS_ITEM_OPENMETHOD_VIEWER:
        if (!ni->viewer)
          news_viewer_create(ni);
        else
          news_viewer_destroy(ni->viewer);
        break;
     case NEWS_ITEM_OPENMETHOD_BROWSER:
        news_menu_browser_show(ni);
        man = e_manager_current_get();
        zone = e_util_zone_current_get(man);
        ecore_x_pointer_xy_get(man->root, &cx, &cy);
        e_menu_activate_mouse(ni->menu_browser, zone,
                              cx, cy, 1, 1,
                              E_MENU_POP_DIRECTION_DOWN, 
                              ecore_x_current_time_get());
        break;
     }
}
Example #3
0
int e_mouse_down(void *data, int type, void * ev)
{
	Ecore_X_Event_Mouse_Button_Down *e;
	Evas_Engine_Info_Software_X11 *info;

	e = (Ecore_X_Event_Mouse_Button_Down *) ev;
	info = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas);
	if (e->win != info->info.drawable)
		return 1;
	evas_event_feed_mouse_down(evas, e->button, EVAS_BUTTON_NONE, ecore_x_current_time_get(), NULL);
	return 1;
	data = NULL;
	type = 0;
}
Example #4
0
int e_mouse_move(void *data, int type, void * ev)
{
	Ecore_X_Event_Mouse_Move *e;
	Evas_Engine_Info_Software_X11 *info;

	e = (Ecore_X_Event_Mouse_Move *) ev;
	info = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas);
	if (e->win != info->info.drawable)
		return 1;
	evas_event_feed_mouse_move(evas, e->x, e->y, ecore_x_current_time_get(), NULL);
	return 1;
	data = NULL;
	type = 0;
}
Example #5
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 #6
0
//Slide the menu (called every 1/60 sec)
static int _eclair_menu_slide_timer_cb(void *data)
{
   Eclair_Menu *menu = NULL, *m;
   Eina_List *l;
   Eclair_Menu_Screen_Edge mouse_edge, menu_edge = ECLAIR_MENU_NO_EDGE;
   int root_x, root_y, root_w, root_h;
   int menu_x, menu_y, menu_w, menu_h;
   int x, y;
   int dx = 0, dy = 0, max_delta = (int)(1.0 / 60.0 * 800);

   //TODO: FIXME: We could have problem with menus bigger than the screen width

   //We first look the menu that is over an edge of the screen
   for (l = _eclair_menu_popped_menus; l; l = l->next)
   {
      if (!(m = l->data))
         continue;

      if ((menu_edge = _eclair_menu_over_screen_edge(m)) != ECLAIR_MENU_NO_EDGE)
      {
         menu = m;
         break;
      }
   }
   if (!menu)
   {
      _eclair_menu_slide_timer = NULL;
      return 0;
   }

   //Then we move all the menu windows in the right direction
   mouse_edge = _eclair_menu_mouse_on_screen_edge();
   ecore_x_window_geometry_get(_eclair_menu_input_window, &root_x, &root_y, &root_w, &root_h);
   ecore_evas_geometry_get(menu->window, &menu_x, &menu_y, &menu_w, &menu_h);
   if (mouse_edge & menu_edge & ECLAIR_MENU_LEFT_EDGE)
   {
      if (max_delta < root_x - menu_x)
         dx = max_delta;
      else
         dx = root_x - menu_x;
   }
   if (mouse_edge & menu_edge & ECLAIR_MENU_RIGHT_EDGE)
   {
      if (max_delta < menu_w - root_x - root_w + menu_x)
         dx = -max_delta;
      else
         dx = -menu_w + root_x + root_w - menu_x;
   }
   if (mouse_edge & menu_edge & ECLAIR_MENU_TOP_EDGE)
   {
      if (max_delta < root_y - menu_y)
         dy = max_delta;
      else
         dy = root_y - menu_y;
   }
   if (mouse_edge & menu_edge & ECLAIR_MENU_BOTTOM_EDGE)
   {
      if (max_delta < menu_h - root_y - root_h + menu_y)
         dy = -max_delta;
      else
         dy = -menu_h + root_y + root_h - menu_y;
   }

   if (dx == 0 && dy == 0)
   {
      _eclair_menu_slide_timer = NULL;
      return 0;
   }

   for (l = _eclair_menu_popped_menus; l; l = l->next)
   {
      if (!(m = l->data))
         continue;

      ecore_evas_geometry_get(m->window, &x, &y, NULL, NULL);
      ecore_evas_move(m->window, x + dx, y + dy);

      //We feed a mouse move event since the relative position between
      //the mouse pointer and the menu window has changed
      evas_event_feed_mouse_move(m->evas, _eclair_menu_mouse_x - x, _eclair_menu_mouse_y - y, ecore_x_current_time_get(), NULL);
   }

   return 1;
}