ffmpeg index marker fix, layout fixes, quit deadlock fix
[goodguy/history.git] / cinelerra-5.1 / cinelerra / awindowgui.C
index 95c8056ff6f8d00e971e855353623950ecad7785..e052668b469b9ca9a0417e09d519712b0e1f75c1 100644 (file)
@@ -684,38 +684,12 @@ int AWindowGUI::translation_event()
 
 void AWindowGUI::reposition_objects()
 {
-       int wmax = mwindow->session->awindow_w-mwindow->theme->adivider_w;
-       int x = mwindow->theme->afolders_x;
-       int w = mwindow->theme->afolders_w;
-       if (w > wmax)
-               w = wmax;
-       if (w <= 0)
-               w = 1;
-       folder_list->reposition_window(x, mwindow->theme->afolders_y,
-               w, mwindow->theme->afolders_h);
-       x = mwindow->theme->adivider_x;
-       if (x > wmax)
-               x = wmax;
-       if (x < 0)
-               x = 0;
-       divider->reposition_window(x,
-               mwindow->theme->adivider_y,
-               mwindow->theme->adivider_w,
-               mwindow->theme->adivider_h);
-       int x2 = mwindow->theme->alist_x;
-       if (x2 < x+mwindow->theme->adivider_w)
-               x2 = x+mwindow->theme->adivider_w;
-       w = mwindow->theme->alist_w;
-       if (w > wmax)
-               w = wmax;
-       if (w <= 0)
-               w = 1;
-       asset_list->reposition_window(x2, mwindow->theme->alist_y,
-               w, mwindow->theme->alist_h);
-       mwindow->theme->get_awindow_sizes(this);
+       divider->reposition_window(
+               mwindow->theme->adivider_x, mwindow->theme->adivider_y,
+               mwindow->theme->adivider_w, mwindow->theme->adivider_h);
        asset_list->reposition_window(
                mwindow->theme->alist_x, mwindow->theme->alist_y,
-               mwindow->theme->alist_w, mwindow->theme->alist_h);
+               mwindow->theme->alist_w, mwindow->theme->alist_h);
        divider->reposition_window(
                mwindow->theme->adivider_x, mwindow->theme->adivider_y,
                mwindow->theme->adivider_w, mwindow->theme->adivider_h);
@@ -840,7 +814,6 @@ void AWindowRemovePlugin::handle_close_event(int result)
                strcpy(plugin_path, plugin->path);
                MWindow *mwindow = awindow->mwindow;
                mwindow->plugindb->remove(plugin);
-               delete plugin;  plugin = 0;
                remove(plugin_path);
                char index_path[BCTEXTLEN];
                sprintf(index_path, "%s/%s", mwindow->preferences->plugin_dir, PLUGIN_FILE);
@@ -850,6 +823,7 @@ void AWindowRemovePlugin::handle_close_event(int result)
                        remove(png_path);
                if( plugin->get_theme_png_path(png_path, "picon") )
                        remove(png_path);
+               delete plugin;  plugin = 0;
                awindow->gui->async_update_assets();
        }
 }
@@ -908,11 +882,10 @@ int AWindowGUI::create_custom_xatoms()
 }
 int AWindowGUI::recieve_custom_xatoms(xatom_event *event)
 {
-       if (event->message_type == UpdateAssetsXAtom)
-       {
+       if( event->message_type == UpdateAssetsXAtom ) {
                update_assets();
                return 1;
-       } else
+       }
        return 0;
 }
 
@@ -1364,6 +1337,7 @@ void AWindowGUI::update_assets()
                asset_list->get_yposition(),
                -1,
                0);
+       asset_list->center_selection();
 //printf("AWindowGUI::update_assets 7\n");
 
        flush();
@@ -1461,7 +1435,12 @@ int AWindowDivider::cursor_motion_event()
 {
        if(mwindow->session->current_operation == DRAG_PARTITION)
        {
-               mwindow->session->afolders_w = gui->get_relative_cursor_x();
+               int wmin = 25;
+               int wmax = mwindow->session->awindow_w - mwindow->theme->adivider_w - wmin;
+               int fw = gui->get_relative_cursor_x();
+               if( fw > wmax ) fw = wmax;
+               if( fw < wmin ) fw = wmin;
+               mwindow->session->afolders_w = fw;
                mwindow->theme->get_awindow_sizes(gui);
                gui->reposition_objects();
                gui->flush();
@@ -1517,12 +1496,6 @@ int AWindowFolders::selection_changed()
        {
                gui->stop_vicon_drawing();
 
-               if(get_button_down() && get_buttonpress() == 3)
-               {
-                       gui->folderlist_menu->update_titles();
-                       gui->folderlist_menu->activate_menu();
-               }
-
                strcpy(mwindow->edl->session->current_folder, picon->get_text());
 //printf("AWindowFolders::selection_changed 1\n");
                gui->asset_list->draw_background();
@@ -1535,21 +1508,20 @@ int AWindowFolders::selection_changed()
 
 int AWindowFolders::button_press_event()
 {
-       int result = 0;
-
-       result = BC_ListBox::button_press_event();
+       return BC_ListBox::button_press_event();
+}
 
-       if(!result)
+int AWindowFolders::button_release_event()
+{
+       int result = 0;
+       if(get_buttonpress() == 3 && is_event_win() && cursor_inside())
        {
-               if(get_buttonpress() == 3 && is_event_win() && cursor_inside())
-               {
-                       gui->folderlist_menu->update_titles();
-                       gui->folderlist_menu->activate_menu();
-                       result = 1;
-               }
+               gui->folderlist_menu->update_titles();
+               gui->folderlist_menu->activate_menu();
+               result = 1;
        }
-
-
+       else
+               result = BC_ListBox::button_release_event();
        return result;
 }
 
@@ -1558,7 +1530,6 @@ int AWindowFolders::button_press_event()
 
 
 
-
 AWindowAssets::AWindowAssets(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h)
  : BC_ListBox(x,
                y,
@@ -1587,19 +1558,33 @@ AWindowAssets::~AWindowAssets()
 
 int AWindowAssets::button_press_event()
 {
-       int result = 0;
-
-       result = BC_ListBox::button_press_event();
+       return BC_ListBox::button_press_event();
+}
 
-       if(!result && get_buttonpress() == 3 && is_event_win() && cursor_inside())
-       {
-               BC_ListBox::deactivate_selection();
-               gui->assetlist_menu->update_titles();
-               gui->assetlist_menu->activate_menu();
+int AWindowAssets::button_release_event()
+{
+       int result = 0;
+       if(get_buttonpress() == 3 && is_event_win() && cursor_inside()) {
+               if( !strcasecmp(mwindow->edl->session->current_folder, AEFFECT_FOLDER) ||
+                   !strcasecmp(mwindow->edl->session->current_folder, VEFFECT_FOLDER) ||
+                   !strcasecmp(mwindow->edl->session->current_folder, ATRANSITION_FOLDER) ||
+                   !strcasecmp(mwindow->edl->session->current_folder, VTRANSITION_FOLDER)) {
+                       BC_ListBox::deactivate_selection();
+                       gui->assetlist_menu->update_titles();
+                       gui->assetlist_menu->activate_menu();
+               }
+                else if (!strcasecmp(mwindow->edl->session->current_folder, LABEL_FOLDER)) {
+                       gui->label_menu->update();
+                       gui->label_menu->activate_menu();
+               }
+               else {
+                       gui->asset_menu->update();
+                       gui->asset_menu->activate_menu();
+               }
                result = 1;
        }
-
-
+       else
+               result = BC_ListBox::button_release_event();
        return result;
 }
 
@@ -1609,24 +1594,11 @@ int AWindowAssets::handle_event()
 //printf("AWindowAssets::handle_event 1 %d %d\n", get_buttonpress(), get_selection(0, 0));
        if(get_selection(0, 0))
        {
-               if(!strcasecmp(mwindow->edl->session->current_folder, AEFFECT_FOLDER))
-               {
-               }
-               else
-               if(!strcasecmp(mwindow->edl->session->current_folder, VEFFECT_FOLDER))
-               {
-               }
-               else
-               if(!strcasecmp(mwindow->edl->session->current_folder, ATRANSITION_FOLDER))
-               {
-               }
-               else
-               if(!strcasecmp(mwindow->edl->session->current_folder, VTRANSITION_FOLDER))
-               {
-               }
-               else
-               if(mwindow->vwindows.size())
-               {
+               if(!strcasecmp(mwindow->edl->session->current_folder, AEFFECT_FOLDER)) {}
+               else if(!strcasecmp(mwindow->edl->session->current_folder, VEFFECT_FOLDER)) {}
+               else if(!strcasecmp(mwindow->edl->session->current_folder, ATRANSITION_FOLDER)) {}
+               else if(!strcasecmp(mwindow->edl->session->current_folder, VTRANSITION_FOLDER)) {}
+               else if(mwindow->vwindows.size()) {
 //printf("AWindowAssets::handle_event 2 %d %d\n", get_buttonpress(), get_selection(0, 0));
                        mwindow->vwindows.get(DEFAULT_VWINDOW)->gui->lock_window("AWindowAssets::handle_event");
 
@@ -1663,18 +1635,6 @@ int AWindowAssets::selection_changed()
                        if(((AssetPicon*)get_selection(0, 0))->label)
                                gui->label_menu->activate_menu();
                }
-               else
-               {
-                       if(((AssetPicon*)get_selection(0, 0))->indexable)
-                               gui->asset_menu->update();
-                       else
-                       if(((AssetPicon*)get_selection(0, 0))->edl)
-                               gui->asset_menu->update();
-
-
-
-                       gui->asset_menu->activate_menu();
-               }
 
                BC_ListBox::deactivate_selection();
                return 1;
@@ -1843,17 +1803,16 @@ int AWindowAssets::column_resize_event()
        return 1;
 }
 
-int AWindowAssets::cursor_enter_event()
+int AWindowAssets::focus_in_event()
 {
-       int ret = BC_ListBox::cursor_enter_event();
        gui->start_vicon_drawing();
-       return ret;
+       return 0;
 }
 
-int AWindowAssets::cursor_leave_event()
+int AWindowAssets::focus_out_event()
 {
        gui->stop_vicon_drawing();
-       return BC_ListBox::cursor_leave_event();
+       return BC_ListBox::focus_out_event();
 }
 
 
@@ -2025,6 +1984,11 @@ void LabelPopup::create_objects()
        add_item(editlabel = new LabelPopupEdit(mwindow, this));
 }
 
+int LabelPopup::update()
+{
+       gui->collect_assets();
+       return 0;
+}