clip picons as clip_icon.png, vwindow hang, fix for drop target test
[goodguy/history.git] / cinelerra-5.1 / guicast / bcmenupopup.C
index 0d418cb8c4f442b3657d55eea63fb4a87cb42b38..c47e699a4be00cb8fe89bb555231568271605bb7 100644 (file)
@@ -89,7 +89,7 @@ int BC_MenuPopup::initialize(BC_WindowBase *top_level,
        {
                window_bg = new BC_Pixmap(top_level, resources->menu_popup_bg);
        }
-       
+
        if(resources->menu_item_bg)
        {
                item_bg[0] = new BC_Pixmap(top_level, resources->menu_item_bg[0], PIXMAP_ALPHA);
@@ -112,7 +112,13 @@ int BC_MenuPopup::add_item(BC_MenuItem *item)
        return 0;
 }
 
-int BC_MenuPopup::remove_item(BC_MenuItem *item, int recursive)
+int BC_MenuPopup::remove_item(BC_MenuItem *item)
+{
+       menu_items.remove(item);
+       return 0;
+}
+
+int BC_MenuPopup::del_item(BC_MenuItem *item)
 {
        if(!item && menu_items.size() > 0)
        {
@@ -121,16 +127,21 @@ int BC_MenuPopup::remove_item(BC_MenuItem *item, int recursive)
 
        if(item)
        {
-               menu_items.remove(item);
+               remove_item(item);
                item->menu_popup = 0;
-               if(!recursive) delete item;
+               delete item;
        }
        return 0;
 }
 
-int BC_MenuPopup::total_menuitems()
+BC_MenuItem *BC_MenuPopup::get_item(int i)
 {
-       return menu_items.total;
+       return menu_items[i];
+}
+
+int BC_MenuPopup::total_items()
+{
+       return menu_items.size();
 }
 
 int BC_MenuPopup::dispatch_button_press()
@@ -138,7 +149,7 @@ int BC_MenuPopup::dispatch_button_press()
        int result = 0;
        if(popup)
        {
-               for(int i = 0; i < menu_items.total && !result; i++)
+               for(int i = 0; i < menu_items.total && !result && popup; i++)
                {
                        result = menu_items.values[i]->dispatch_button_press();
                }
@@ -152,7 +163,7 @@ int BC_MenuPopup::dispatch_button_release()
        int result = 0, redraw = 0;
        if(popup)
        {
-               for(int i = 0; i < menu_items.total && !result; i++)
+               for(int i = 0; i < menu_items.total && !result && popup; i++)
                {
                        result = menu_items.values[i]->dispatch_button_release(redraw);
                }
@@ -418,11 +429,12 @@ BC_Popup* BC_MenuPopup::get_popup()
 int BC_MenuPopup::cursor_inside()
 {
        if( !popup ) return 0;
-       int x = popup->get_relative_cursor_x();
-       if( x < 0 || x > popup->get_w() ) return 0;
-       int y = popup->get_relative_cursor_y();
-       if( y < 0 || y > popup->get_h() ) return 0;
-       return 1;
+       if( popup->cursor_above() ) return 1;
+       for( int i=0; i<menu_items.size(); ++i ) {
+               if( !menu_items[i]->submenu ) continue;
+               if( menu_items[i]->submenu->cursor_inside() ) return 1;
+       }
+       return 0;
 }
 
 int BC_MenuPopup::get_w()