remove asset while preview active segv fix, guard against segv with missing asset...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / awindowgui.C
index 072f878e80fd933c8bb4dcb88503763c13f691a0..45954b76ca596053cc8a886aa714d56b708d2418 100644 (file)
@@ -331,7 +331,7 @@ int AssetViewPopup::button_press_event()
        int dir = 1, button = get_buttonpress();
        switch( button ) {
        case WHEEL_DOWN: dir = -1; // fall thru
-       case WHEEL_UP:   return zoom_scale(dir);
+       case WHEEL_UP:   return avt->zoom_scale(dir);
        case LEFT_BUTTON:
                break;
        default:
@@ -547,10 +547,22 @@ AssetVIconThread::AssetVIconThread(AWindowGUI *gui, Preferences *preferences)
        case VICON_COLOR_MODE_HIGH:  vicon_cmodel = BC_RGB888;  break;
        }
        this->vicon_cmodel = vicon_cmodel;
+       this->draw_lock = new Mutex("AssetVIconThread::draw_lock");
 }
 
 AssetVIconThread::~AssetVIconThread()
 {
+       delete draw_lock;
+}
+
+void AssetVIconThread::drawing_started()
+{
+       draw_lock->lock("AssetVIconThread::drawing_started");
+}
+
+void AssetVIconThread::drawing_stopped()
+{
+       draw_lock->unlock();
 }
 
 void AssetVIconThread::set_view_popup(AssetVIcon *v, int draw_mode)
@@ -2570,7 +2582,7 @@ int AWindowAssets::button_press_event()
                case WHEEL_UP: {
                        int x = get_cursor_x(), y = get_cursor_y();
                        if( avt->cursor_inside(x, y) && avt->view_win )
-                               return avt->view_win->zoom_scale(dir);
+                               return avt->zoom_scale(dir);
                        return 1; }
                }
        }