KFilePlacesView: Fix crash when dragging over topmost section header
KFilePlacesView: Fix crash when dragging over topmost section header
b5de820a fixed incorrect highlighting of the section header label
during drag operations over the first place of a section in clients
setting m_dropOnPlace
, e.g. Dolphin. This was effective for all except
the topmost section header, where it would cause a crash (independent of
the state of m_dropOnPlace
).
In KFilePlacesViewDelegate::previousVisibleIndex
access to model
fails, because the index
determined via indexAt
of m_dropRect
in
KFilePlacesView::paintEvent
is invalid when dragging towards the
topmost section header label. This is because m_dropRect.topLeft()
can
extend above the entry's visualRect
, i.e. it covers the places items
below as well as above the separator, of which the latter does not exist
for the first entry.
By remembering the index belonging to m_dropRect
in m_dropIndex
instead of reconstructing it, we can guarantee it to be valid.
Test Plan:
No more crash when dragging places or folders over topmost section
header label in places view in kdialog --getsaveurl
as well as
dolphin
. Other functionality related to dragging places around
(including existing bugs) is unaffected and the behavior of the original
fix remains.
KFilePlacesView: Fix potential crash in previousVisibleIndex
The previous commit fixed a crash in
KFilePlacesViewDelegate::previousVisibleIndex
, where access to model
failed due to an invalid index.
In addition to the previous commit already fixing the crash, unrelated
potential crashes in the future can be avoided by checking for an
invalid index
in previousVisibleIndex
. The existing logic of
indexIsSectionHeader
is kept intact, since now an invalid index
will
lead to comparing two empty strings, i.e. it will not be considered a
section header as required by the rest of the code.
This fix alone would already solve the crash without any side effects,
still introducing m_dropIndex
seemed less brittle.
Test Plan:
Functionality related to dragging places around (including existing bugs) is unaffected.