//Pop down the menu and its childrend void eclair_menu_pop_down(Eclair_Menu *menu) { Eina_List *l; Eclair_Menu_Item *item; if (!menu) return; for (l = menu->items; l; l = l->next) { if (!(item = l->data)) continue; eclair_menu_item_deactivate(item); } ecore_evas_hide(menu->window); if (menu == _eclair_menu_root) { ecore_x_keyboard_ungrab(); ecore_x_pointer_ungrab(); ecore_x_window_hide(_eclair_menu_input_window); ecore_event_handler_del(_eclair_menu_mouse_up_handler); ecore_event_handler_del(_eclair_menu_mouse_move_handler); _eclair_menu_root = NULL; } _eclair_menu_popped_menus = eina_list_remove(_eclair_menu_popped_menus, 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; }
EAPI void e_grabinput_release(Ecore_X_Window mouse_win, Ecore_X_Window key_win) { if (mouse_win == grab_mouse_win) { ecore_x_pointer_ungrab(); grab_mouse_win = 0; } if (key_win == grab_key_win) { ecore_x_keyboard_ungrab(); grab_key_win = 0; if (focus_win != 0) { /* fprintf(stderr, "release focus to %x\n", focus_win); */ _e_grabinput_focus(focus_win, focus_method); focus_win = 0; focus_method = E_FOCUS_METHOD_NO_INPUT; } } }