bugfix in VFileList and VEditArea

1. Clear selection before setting current item in VFileList;
2. Status change of non-active tabs shoud not be propagated upwards;
This commit is contained in:
Le Tan 2017-05-23 19:26:12 +08:00
parent 5b4984f59a
commit f4708e427f
4 changed files with 25 additions and 5 deletions

View File

@ -68,7 +68,7 @@ void VEditArea::insertSplitWindow(int idx)
VEditWindow *win = new VEditWindow(vnote, this);
splitter->insertWidget(idx, win);
connect(win, &VEditWindow::tabStatusChanged,
this, &VEditArea::curTabStatusChanged);
this, &VEditArea::handleEditWindowStatusChanged);
connect(win, &VEditWindow::requestSplitWindow,
this, &VEditArea::handleSplitWindowRequest);
connect(win, &VEditWindow::requestRemoveSplit,
@ -81,6 +81,15 @@ void VEditArea::insertSplitWindow(int idx)
this, &VEditArea::handleCurHeaderChanged);
}
void VEditArea::handleEditWindowStatusChanged(const VFile *p_file,
const VEditTab *p_editTab,
bool p_editMode)
{
if (splitter->widget(curWindowIndex) == sender()) {
emit curTabStatusChanged(p_file, p_editTab, p_editMode);
}
}
void VEditArea::removeSplitWindow(VEditWindow *win)
{
if (!win) {
@ -194,6 +203,7 @@ void VEditArea::updateWindowStatus()
emit curHeaderChanged(VAnchor());
return;
}
VEditWindow *win = getWindow(curWindowIndex);
win->requestUpdateTabStatus();
win->requestUpdateOutline();

View File

@ -90,6 +90,9 @@ private slots:
void handleReplaceAll(const QString &p_text, uint p_options,
const QString &p_replaceText);
void handleFindDialogClosed();
void handleEditWindowStatusChanged(const VFile *p_file,
const VEditTab *p_editTab,
bool p_editMode);
private:
void setupUI();

View File

@ -550,7 +550,14 @@ void VEditWindow::noticeStatus(int index)
void VEditWindow::handleTabStatusChanged()
{
noticeTabStatus(currentIndex());
int idx = indexOf(dynamic_cast<QWidget *>(sender()));
if (idx == currentIndex()) {
noticeTabStatus(idx);
} else {
// Only update the tab status. Do no propagate upwards.
updateTabInfo(idx);
updateAllTabsSequence();
}
}
void VEditWindow::updateFileInfo(const VFile *p_file)

View File

@ -201,7 +201,7 @@ void VFileList::newFile()
}
QVector<QListWidgetItem *> items = updateFileListAdded();
Q_ASSERT(items.size() == 1);
fileList->setCurrentItem(items[0]);
fileList->setCurrentItem(items[0], QItemSelectionModel::ClearAndSelect);
// Qt seems not to update the QListWidget correctly. Manually force it to repaint.
fileList->update();
@ -529,7 +529,7 @@ bool VFileList::locateFile(const VFile *p_file)
}
QListWidgetItem *item = findItem(p_file);
if (item) {
fileList->setCurrentItem(item);
fileList->setCurrentItem(item, QItemSelectionModel::ClearAndSelect);
}
}
return false;
@ -615,7 +615,7 @@ bool VFileList::handleKeyNavigation(int p_key, bool &p_succeed)
ret = true;
auto it = m_keyMap.find(keyChar);
if (it != m_keyMap.end()) {
fileList->setCurrentItem(it.value());
fileList->setCurrentItem(it.value(), QItemSelectionModel::ClearAndSelect);
fileList->setFocus();
}
} else if (keyChar == m_majorKey) {