#ifndef __EWL_MENU_H__
#define __EWL_MENU_H__

/**
 * @file ewl_menu.h
 * @defgroup Ewl_Menu Menu: A Simple Windowed Menu
 * Defines a menu used globally. The contents on the menu are drawn outside of
 * the Evas.
 *
 * @{
 */

/**
 * @themekey /menu/file
 * @themekey /menu/group
 */

/**
 * A simple internal menu, it is limited to drawing within the current evas.
 */
typedef struct Ewl_Menu Ewl_Menu;

/**
 * @def EWL_MENU(menu)
 * Typecasts a pointer to an Ewl_Menu pointer.
 */
#define EWL_MENU(menu) ((Ewl_Menu *) menu)

/**
 * @struct Ewl_Menu
 * Inherits from the Ewl_Menu_Base and does not extend the structure, but
 * provides policy for drawing on the current evas.
 */
struct Ewl_Menu
{
	Ewl_Menu_Base  base;
        int            popup_x;
        int            popup_y;

	Ewl_Widget    *menubar_parent;
};

Ewl_Widget	*ewl_menu_new(void);
int		 ewl_menu_init(Ewl_Menu *menu);

/*
 * Internally used callbacks, override at your own risk.
 */
void ewl_menu_realize_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_configure_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_expand_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_popup_move_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_hide_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_popup_destroy_cb(Ewl_Widget *w, void *ev, void *data);
void ewl_menu_expand_mouse_move_cb(Ewl_Widget *w, void *ev_data, void *user_data);
void ewl_menu_mouse_move_cb(Ewl_Widget *w, void *ev_data, void *user_data);

/**
 * @}
 */

#endif				/* __EWL_MENU_H__ */
