From 8fb0036b2ae16ecf43c066c6eca31b65c7453629 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 21 Feb 2012 17:09:03 +0300 Subject: [PATCH] Attempt to fix crash in the ticket 515. --- src/gui/UBLibNavigatorWidget.cpp | 13 ++++++++----- src/gui/UBLibPathViewer.cpp | 5 +++-- src/gui/UBLibraryWidget.cpp | 5 ++++- src/gui/UBLibraryWidget.h | 3 ++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/gui/UBLibNavigatorWidget.cpp b/src/gui/UBLibNavigatorWidget.cpp index ba96856b..8b36dd07 100644 --- a/src/gui/UBLibNavigatorWidget.cpp +++ b/src/gui/UBLibNavigatorWidget.cpp @@ -126,11 +126,14 @@ void UBLibNavigatorWidget::onNavigbarUpate(UBLibElement *pElem) */ void UBLibNavigatorWidget::onPathItemClicked(UBChainedLibElement *elem) { - // If this element has some subelement, remove them - removeNextChainedElements(elem); - - // The refresh the view - mLibWidget->setCurrentElemsAndRefresh(elem); + if (!this->libraryWidget()->isLoadingLibraryItems()) + { + // If this element has some subelement, remove them + removeNextChainedElements(elem); + + // The refresh the view + mLibWidget->setCurrentElemsAndRefresh(elem); + } } /** diff --git a/src/gui/UBLibPathViewer.cpp b/src/gui/UBLibPathViewer.cpp index ca79f7c0..fe31b290 100644 --- a/src/gui/UBLibPathViewer.cpp +++ b/src/gui/UBLibPathViewer.cpp @@ -405,9 +405,10 @@ void UBPathScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) if(NULL != pView) { int iClickedItem = pView->widgetAt(event->scenePos()); - if(-1 != iClickedItem) + QGraphicsLayout* wgtLayout = pGWidget->layout(); + if(iClickedItem != -1 && wgtLayout != NULL) { - QGraphicsWidget* pFolderW = dynamic_cast(pGWidget->layout()->itemAt(iClickedItem)); + QGraphicsWidget* pFolderW = dynamic_cast(wgtLayout->itemAt(iClickedItem)); if(NULL != pFolderW) { UBChainedLibElement* chElem = mMapWidgetToChainedElem[pFolderW]; diff --git a/src/gui/UBLibraryWidget.cpp b/src/gui/UBLibraryWidget.cpp index 568b0c4d..247aa6f9 100644 --- a/src/gui/UBLibraryWidget.cpp +++ b/src/gui/UBLibraryWidget.cpp @@ -43,6 +43,7 @@ UBLibraryWidget::UBLibraryWidget(QWidget *parent, const char *name):UBThumbnailW , mpCrntDir(NULL) , mpCrntElem(NULL) , mpTmpElem(NULL) + , mLoadingLibraryItems(false) { setObjectName(name); setSpacing(5); @@ -147,7 +148,8 @@ void UBLibraryWidget::onItemClicked(QGraphicsItem *item, int index) Q_UNUSED(index); if(NULL != item) { - int iItem = mGraphicItems.indexOf(item); + mLoadingLibraryItems = true; + int iItem = mGraphicItems.indexOf(item); if(0 <= iItem) { UBLibElement* pElem = mCurrentElems.at(iItem); @@ -183,6 +185,7 @@ void UBLibraryWidget::onItemClicked(QGraphicsItem *item, int index) } emit itemClicked(); } + mLoadingLibraryItems = false; } } diff --git a/src/gui/UBLibraryWidget.h b/src/gui/UBLibraryWidget.h index 8443abeb..e4eb8d02 100644 --- a/src/gui/UBLibraryWidget.h +++ b/src/gui/UBLibraryWidget.h @@ -48,6 +48,7 @@ public: void init(); UBLibraryController* libraryController() {return mLibraryController;} + bool isLoadingLibraryItems() const { return mLoadingLibraryItems; } public slots: void onRefreshCurrentFolder(); @@ -92,7 +93,7 @@ private: QList mCurrentElems; QList mOrigCurrentElems; QList mItems; - + bool mLoadingLibraryItems; }; class UBNewFolderDlg : public QDialog