//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); }
EAPI int e_grabinput_get(Ecore_X_Window mouse_win, int confine_mouse, Ecore_X_Window key_win) { if (grab_mouse_win) { ecore_x_pointer_ungrab(); grab_mouse_win = 0; } if (grab_key_win) { ecore_x_keyboard_ungrab(); grab_key_win = 0; focus_win = 0; } if (mouse_win) { int ret = 0; if (confine_mouse) ret = ecore_x_pointer_confine_grab(mouse_win); else ret = ecore_x_pointer_grab(mouse_win); if (!ret) return 0; grab_mouse_win = mouse_win; } if (key_win) { int ret = 0; ret = ecore_x_keyboard_grab(key_win); if (!ret) { if (grab_mouse_win) { ecore_x_pointer_ungrab(); grab_mouse_win = 0; } return 0; } grab_key_win = key_win; } return 1; }