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()
{
- if(menu_popup) delete menu_popup;
+ use_title = 0;
+ deactivate();
+ delete menu_popup;
for(int i = 0; i < TOTAL_IMAGES; i++)
{
if(images[i]) delete images[i];
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();
+ top_level->active_popup_menu = this;
+ 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);
}
- return 0;
+ return 1;
}
int BC_PopupMenu::deactivate_menu()
int BC_PopupMenu::repeat_event(int64_t duration)
{
- if( status == BUTTON_HI && !tooltip_done &&
+ if( status == BUTTON_HI &&
tooltip_text && tooltip_text[0] != 0 &&
duration == top_level->get_resources()->tooltip_delay )
{
show_tooltip();
- tooltip_done = 1;
return 1;
}
return 0;
// 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());
}
}
+ if( pending )
+ return menu_activate();
+
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(is_event_win() && use_title)
{
- tooltip_done = 0;
if(top_level->button_down)
{
status = BUTTON_DN;
int result = 0;
// This menu is down.
- if(popup_down)
- {
+ if(popup_down) {
result = menu_popup->dispatch_motion_event();
}
- if(!result && use_title && top_level->event_win == win)
- {
- if(highlighted)
- {
- if(cursor_inside())
- {
+ if(!result && use_title && is_event_win()) {
+ if(highlighted) {
+ if(!cursor_inside()) {
highlighted = 0;
draw_title(1);
}
}
- else
- {
- if(cursor_inside())
- {
+ else {
+ if(cursor_inside()) {
highlighted = 1;
draw_title(1);
result = 1;