some fixes in navigation

This commit is contained in:
John Preston 2015-02-09 23:19:48 +00:00
parent a5d2558f5a
commit 00f0a70454
6 changed files with 47 additions and 17 deletions

View File

@ -192,9 +192,6 @@ void DialogsListWidget::peopleResultPaint(UserData *user, QPainter &p, int32 w,
} }
void DialogsListWidget::activate() { void DialogsListWidget::activate() {
if (_state == DefaultState && !sel) {
selectSkip(1);
}
} }
void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) { void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) {
@ -728,6 +725,10 @@ DialogsListWidget::State DialogsListWidget::state() const {
return _state; return _state;
} }
bool DialogsListWidget::hasFilteredResults() const {
return !filterResults.isEmpty();
}
void DialogsListWidget::clearFilter() { void DialogsListWidget::clearFilter() {
if (_state == FilteredState || _state == SearchedState) { if (_state == FilteredState || _state == SearchedState) {
_state = DefaultState; _state = DefaultState;
@ -1591,8 +1592,13 @@ void DialogsWidget::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Escape) { if (e->key() == Qt::Key_Escape) {
e->ignore(); e->ignore();
} else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
if (!list.choosePeer() && (list.state() == DialogsListWidget::SearchedState || list.state() == DialogsListWidget::FilteredState)) { if (!list.choosePeer()) {
onSearchMessages(); if (list.state() == DialogsListWidget::DefaultState || list.state() == DialogsListWidget::SearchedState || (list.state() == DialogsListWidget::FilteredState && list.hasFilteredResults())) {
list.selectSkip(1);
list.choosePeer();
} else {
onSearchMessages();
}
} }
} else if (e->key() == Qt::Key_Down) { } else if (e->key() == Qt::Key_Down) {
list.setMouseSel(false); list.setMouseSel(false);

View File

@ -86,6 +86,7 @@ public:
}; };
void setState(State newState); void setState(State newState);
State state() const; State state() const;
bool hasFilteredResults() const;
void onFilterUpdate(QString newFilter, bool force = false); void onFilterUpdate(QString newFilter, bool force = false);
void itemRemoved(HistoryItem *item); void itemRemoved(HistoryItem *item);

View File

@ -548,6 +548,14 @@ void ScrollArea::moveEvent(QMoveEvent *e) {
emit geometryChanged(); emit geometryChanged();
} }
void ScrollArea::keyPressEvent(QKeyEvent *e) {
if ((e->key() == Qt::Key_Up || e->key() == Qt::Key_Down) && e->modifiers().testFlag(Qt::AltModifier)) {
e->ignore();
} else {
QScrollArea::keyPressEvent(e);
}
}
void ScrollArea::enterEvent(QEvent *e) { void ScrollArea::enterEvent(QEvent *e) {
if (_st.hiding) { if (_st.hiding) {
hor.hideTimeout(_st.hiding); hor.hideTimeout(_st.hiding);

View File

@ -113,6 +113,7 @@ public:
void resizeEvent(QResizeEvent *e); void resizeEvent(QResizeEvent *e);
void moveEvent(QMoveEvent *e); void moveEvent(QMoveEvent *e);
void keyPressEvent(QKeyEvent *e);
void enterEvent(QEvent *e); void enterEvent(QEvent *e);
void leaveEvent(QEvent *e); void leaveEvent(QEvent *e);

View File

@ -884,6 +884,8 @@ void HistoryList::keyPressEvent(QKeyEvent *e) {
copySelectedText(); copySelectedText();
} else if (e == QKeySequence::Delete) { } else if (e == QKeySequence::Delete) {
historyWidget->onDeleteSelected(); historyWidget->onDeleteSelected();
} else {
e->ignore();
} }
} }
@ -1723,6 +1725,9 @@ void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) {
} }
void HistoryWidget::activate() { void HistoryWidget::activate() {
if (hist && !_histInited) {
checkUnreadLoaded();
}
if (App::main()->selectingPeer()) { if (App::main()->selectingPeer()) {
if (hiderOffered) { if (hiderOffered) {
App::main()->focusPeerSelect(); App::main()->focusPeerSelect();
@ -3273,7 +3278,10 @@ void HistoryWidget::updateScrollColors() {
void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem) { void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem) {
if (!hist || (!_histInited && !initial)) return; if (!hist || (!_histInited && !initial)) return;
if (!App::wnd()->isVisible()) return; // scrollTopMax etc are not working after recountHeight() if (!isVisible()) {
if (initial) _histInited = false;
return; // scrollTopMax etc are not working after recountHeight()
}
int32 newScrollHeight = height() - (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden) ? (_field.height() + 2 * st::sendPadding) : 0); int32 newScrollHeight = height() - (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden) ? (_field.height() + 2 * st::sendPadding) : 0);
bool wasAtBottom = _scroll.scrollTop() + 1 > _scroll.scrollTopMax(), needResize = _scroll.width() != width() || _scroll.height() != newScrollHeight; bool wasAtBottom = _scroll.scrollTop() + 1 > _scroll.scrollTopMax(), needResize = _scroll.width() != width() || _scroll.height() != newScrollHeight;
@ -3375,7 +3383,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId);
if (after) App::main()->showPeer(after->id, afterMsgId); if (after) App::main()->showPeer(after->id, afterMsgId);
} else { } else {
_scroll.scrollToY(_scroll.scrollTop() + _scroll.height()); _scroll.keyPressEvent(e);
} }
} else if (e->key() == Qt::Key_PageUp) { } else if (e->key() == Qt::Key_PageUp) {
if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) { if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier)) {
@ -3384,7 +3392,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId);
if (before) App::main()->showPeer(before->id, beforeMsgId); if (before) App::main()->showPeer(before->id, beforeMsgId);
} else { } else {
_scroll.scrollToY(_scroll.scrollTop() - _scroll.height()); _scroll.keyPressEvent(e);
} }
} else if (e->key() == Qt::Key_Down) { } else if (e->key() == Qt::Key_Down) {
if (e->modifiers() & Qt::AltModifier) { if (e->modifiers() & Qt::AltModifier) {
@ -3393,7 +3401,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId); App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId);
if (after) App::main()->showPeer(after->id, afterMsgId); if (after) App::main()->showPeer(after->id, afterMsgId);
} else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) {
_scroll.scrollToY(_scroll.scrollTop() + _scroll.height() / 10); _scroll.keyPressEvent(e);
} }
} else if (e->key() == Qt::Key_Up) { } else if (e->key() == Qt::Key_Up) {
if (e->modifiers() & Qt::AltModifier) { if (e->modifiers() & Qt::AltModifier) {
@ -3402,7 +3410,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId); App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId);
if (before) App::main()->showPeer(before->id, beforeMsgId); if (before) App::main()->showPeer(before->id, beforeMsgId);
} else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) { } else if (!(e->modifiers() & (Qt::ShiftModifier | Qt::MetaModifier | Qt::ControlModifier))) {
_scroll.scrollToY(_scroll.scrollTop() - _scroll.height() / 10); _scroll.keyPressEvent(e);
} }
} else if ((e->key() == Qt::Key_Tab || e->key() == Qt::Key_Backtab) && ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier))) { } else if ((e->key() == Qt::Key_Tab || e->key() == Qt::Key_Backtab) && ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::MetaModifier))) {
PeerData *p = 0; PeerData *p = 0;

View File

@ -820,6 +820,7 @@ void MainWidget::stopAnimActive() {
void MainWidget::searchMessages(const QString &query) { void MainWidget::searchMessages(const QString &query) {
dialogs.searchMessages(query); dialogs.searchMessages(query);
if (!cWideMode()) onShowDialogs();
} }
void MainWidget::preloadOverviews(PeerData *peer) { void MainWidget::preloadOverviews(PeerData *peer) {
@ -1425,7 +1426,7 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) {
hider = 0; hider = 0;
} }
if (force || !selectingPeer()) { if (force || !selectingPeer()) {
if ((history.isHidden() && (profile || overview)) || !cWideMode()) { if (!animating() && ((history.isHidden() && (profile || overview)) || (!cWideMode() && (history.isHidden() || !peerId)))) {
dialogs.enableShadow(false); dialogs.enableShadow(false);
if (peerId) { if (peerId) {
_topBar.enableShadow(false); _topBar.enableShadow(false);
@ -1469,9 +1470,11 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) {
if (onlyDialogs) { if (onlyDialogs) {
_topBar.hide(); _topBar.hide();
history.hide(); history.hide();
dialogs.show(); if (!animating()) {
if (!animCache.isNull()) { dialogs.show();
dialogs.animShow(animCache); if (!animCache.isNull()) {
dialogs.animShow(animCache);
}
} }
} else { } else {
if (noPeer) { if (noPeer) {
@ -1479,9 +1482,11 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) {
resizeEvent(0); resizeEvent(0);
} }
if (!cWideMode()) dialogs.hide(); if (!cWideMode()) dialogs.hide();
history.show(); if (!animating()) {
if (!animCache.isNull()) { history.show();
history.animShow(animCache, animTopBarCache, back); if (!animCache.isNull()) {
history.animShow(animCache, animTopBarCache, back);
}
} }
} }
} }
@ -2077,6 +2082,7 @@ void MainWidget::onPeerShown(PeerData *peer) {
_topBar.hide(); _topBar.hide();
} }
resizeEvent(0); resizeEvent(0);
if (animating()) _topBar.hide();
} }
void MainWidget::onUpdateNotifySettings() { void MainWidget::onUpdateNotifySettings() {