this->data = data;
this->w_argument = w;
status = BUTTON_UP;
+ pending = 0;
}
BC_PopupMenu::BC_PopupMenu(int x,
this->data = data;
this->w_argument = -1;
status = BUTTON_UP;
+ pending = 0;
}
BC_PopupMenu::~BC_PopupMenu()
int BC_PopupMenu::total_items()
{
- return menu_popup->total_menuitems();
- return 0;
+ return menu_popup->total_items();
}
BC_MenuItem* BC_PopupMenu::get_item(int i)
int BC_PopupMenu::activate_menu()
{
- if(!popup_down)
+ if( !get_button_down() || !BC_WindowBase::get_resources()->popupmenu_btnup )
+ return menu_activate();
+ pending = 1;
+ return 0;
+}
+
+int BC_PopupMenu::menu_activate()
+{
+ pending = 0;
+ if( !popup_down )
{
int x = this->x;
int y = this->y;
w, h, 0, 1);
}
else
-// back off x,y just a bit so the menu doesnt deactivate without motion
- menu_popup->activate_menu(x-10, y-10, w, h, 0, 1);
+ menu_popup->activate_menu(x+3, y+3, w, h, 0, 1);
popup_down = 1;
if(use_title) draw_title(1);
}
// Scrolling section
if (is_event_win()
&& (get_buttonpress() == 4 || get_buttonpress() == 5)
- && menu_popup->total_menuitems() > 1 )
+ && menu_popup->total_items() > 1 )
{
int theval = -1;
- for (int i = 0; i < menu_popup->total_menuitems(); i++) {
+ for (int i = 0; i < menu_popup->total_items(); i++) {
if (!strcmp(menu_popup->menu_items.values[i]->get_text(),get_text())) {
theval=i;
break;
if (theval < 0)
theval=0;
- if (theval >= menu_popup->total_menuitems())
- theval = menu_popup->total_menuitems() - 1;
+ if (theval >= menu_popup->total_items())
+ theval = menu_popup->total_items() - 1;
BC_MenuItem *tmp = menu_popup->menu_items.values[theval];
set_text(tmp->get_text());
{
// try the title
int result = 0;
+ if( pending )
+ return menu_activate();
if(is_event_win() && use_title)
{
if( !use_title && status == BUTTON_DN ) {
result = 1;
}
- else if(popup_down) {
+ else if( popup_down && menu_popup->cursor_inside() ) {
// Menu is down so dispatch to popup.
result = menu_popup->dispatch_button_release();
}
// released outside popup
- if( !result && popup_down ) {
+ if( get_resources()->popupmenu_btnup && !result && popup_down ) {
deactivate();
result = 1;
}
// dispatch to popup
if( popup_down ) {
- if( !get_button_down() && !menu_popup->cursor_inside() )
+ if( !get_button_down() && !menu_popup->cursor_inside() ) {
+ status = BUTTON_UP;
deactivate_menu();
+ }
menu_popup->dispatch_cursor_leave();
}
{
if(highlighted)
{
- if(cursor_inside())
+ if(!cursor_inside())
{
highlighted = 0;
draw_title(1);