]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnwidget.cpp
fixed memory leaks (thanks to David for fixing this in KDirOperator)
[dolphin.git] / src / dolphincolumnwidget.cpp
index 1a7f712f38e2a3681f81fd941eab1239c4409973..a559e3098b0b9d8b5ef6dcd7271b9b9043b0e7fe 100644 (file)
@@ -55,7 +55,8 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     m_view(columnView),
     m_url(url),
     m_childUrl(),
-    m_viewOptions(),
+    m_font(),
+    m_decorationSize(),
     m_dirLister(0),
     m_dolphinModel(0),
     m_proxyModel(0),
@@ -84,17 +85,12 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
     const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
     Q_ASSERT(settings != 0);
 
-    m_viewOptions = QListView::viewOptions();
-
-    QFont font(settings->fontFamily(), settings->fontSize());
-    font.setItalic(settings->italicFont());
-    font.setBold(settings->boldFont());
-    m_viewOptions.font = font;
+    m_font = QFont(settings->fontFamily(), settings->fontSize());
+    m_font.setItalic(settings->italicFont());
+    m_font.setBold(settings->boldFont());
 
     const int iconSize = settings->iconSize();
-    m_viewOptions.decorationSize = QSize(iconSize, iconSize);
-
-    m_viewOptions.showDecorationSelected = true;
+    m_decorationSize = QSize(iconSize, iconSize);
 
     KFileItemDelegate* delegate = new KFileItemDelegate(this);
     setItemDelegate(delegate);
@@ -131,13 +127,14 @@ DolphinColumnWidget::DolphinColumnWidget(QWidget* parent,
 
 DolphinColumnWidget::~DolphinColumnWidget()
 {
-    delete m_dirLister;
-    m_dirLister = 0;
+    delete m_dolphinModel;
+    m_dolphinModel = 0;
+    m_dirLister = 0; // deleted by m_dolphinModel
 }
 
 void DolphinColumnWidget::setDecorationSize(const QSize& size)
 {
-    m_viewOptions.decorationSize = size;
+    m_decorationSize = size;
     doItemsLayout();
 }
 
@@ -197,6 +194,16 @@ void DolphinColumnWidget::setNameFilter(const QString& nameFilter)
     m_proxyModel->setFilterRegExp(nameFilter);
 }
 
+
+QStyleOptionViewItem DolphinColumnWidget::viewOptions() const
+{
+    QStyleOptionViewItem viewOptions = QListView::viewOptions();
+    viewOptions.font = m_font;
+    viewOptions.decorationSize = m_decorationSize;
+    viewOptions.showDecorationSelected = true;
+    return viewOptions;
+}
+
 void DolphinColumnWidget::startDrag(Qt::DropActions supportedActions)
 {
     DragAndDropHelper::startDrag(this, supportedActions);
@@ -227,10 +234,13 @@ void DolphinColumnWidget::dragMoveEvent(QDragMoveEvent* event)
     // TODO: remove this code when the issue #160611 is solved in Qt 4.4
     const QModelIndex index = indexAt(event->pos());
     setDirtyRegion(m_dropRect);
-    if (itemForIndex(index).isDir()) {
-        m_dropRect = visualRect(index);
-    } else {
-        m_dropRect.setSize(QSize()); // set as invalid
+
+    m_dropRect.setSize(QSize()); // set as invalid
+    if (index.isValid()) {
+        const KFileItem item = itemForIndex(index);
+        if (!item.isNull() && item.isDir()) {
+            m_dropRect = visualRect(index);
+        }
     }
     setDirtyRegion(m_dropRect);
 }
@@ -275,7 +285,7 @@ void DolphinColumnWidget::paintEvent(QPaintEvent* event)
 
     // TODO: remove this code when the issue #160611 is solved in Qt 4.4
     if (m_dragging) {
-        const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight);
+        const QBrush& brush = viewOptions().palette.brush(QPalette::Normal, QPalette::Highlight);
         DragAndDropHelper::drawHoverIndication(viewport(), m_dropRect, brush);
     }
 }