rework histogram_bezier, init wm icon set_icon(gg), update de.po+msg/txt
[goodguy/history.git] / cinelerra-5.1 / guicast / bcmenupopup.C
index 9ffa152ff513881a5f6b1abc79042e11cc239eee..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);
@@ -115,6 +115,7 @@ int BC_MenuPopup::add_item(BC_MenuItem *item)
 int BC_MenuPopup::remove_item(BC_MenuItem *item)
 {
        menu_items.remove(item);
+       return 0;
 }
 
 int BC_MenuPopup::del_item(BC_MenuItem *item)
@@ -133,9 +134,14 @@ int BC_MenuPopup::del_item(BC_MenuItem *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()
@@ -143,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();
                }
@@ -157,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);
                }
@@ -423,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()