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() {
if (_state == DefaultState && !sel) {
selectSkip(1);
}
}
void DialogsListWidget::mouseMoveEvent(QMouseEvent *e) {
@ -728,6 +725,10 @@ DialogsListWidget::State DialogsListWidget::state() const {
return _state;
}
bool DialogsListWidget::hasFilteredResults() const {
return !filterResults.isEmpty();
}
void DialogsListWidget::clearFilter() {
if (_state == FilteredState || _state == SearchedState) {
_state = DefaultState;
@ -1591,8 +1592,13 @@ void DialogsWidget::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Escape) {
e->ignore();
} else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) {
if (!list.choosePeer() && (list.state() == DialogsListWidget::SearchedState || list.state() == DialogsListWidget::FilteredState)) {
onSearchMessages();
if (!list.choosePeer()) {
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) {
list.setMouseSel(false);

View file

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

View file

@ -548,6 +548,14 @@ void ScrollArea::moveEvent(QMoveEvent *e) {
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) {
if (_st.hiding) {
hor.hideTimeout(_st.hiding);

View file

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

View file

@ -884,6 +884,8 @@ void HistoryList::keyPressEvent(QKeyEvent *e) {
copySelectedText();
} else if (e == QKeySequence::Delete) {
historyWidget->onDeleteSelected();
} else {
e->ignore();
}
}
@ -1723,6 +1725,9 @@ void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) {
}
void HistoryWidget::activate() {
if (hist && !_histInited) {
checkUnreadLoaded();
}
if (App::main()->selectingPeer()) {
if (hiderOffered) {
App::main()->focusPeerSelect();
@ -3273,7 +3278,10 @@ void HistoryWidget::updateScrollColors() {
void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem) {
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);
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);
if (after) App::main()->showPeer(after->id, afterMsgId);
} else {
_scroll.scrollToY(_scroll.scrollTop() + _scroll.height());
_scroll.keyPressEvent(e);
}
} else if (e->key() == Qt::Key_PageUp) {
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);
if (before) App::main()->showPeer(before->id, beforeMsgId);
} else {
_scroll.scrollToY(_scroll.scrollTop() - _scroll.height());
_scroll.keyPressEvent(e);
}
} else if (e->key() == Qt::Key_Down) {
if (e->modifiers() & Qt::AltModifier) {
@ -3393,7 +3401,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerAfter(histPeer, hist ? hist->activeMsgId : 0, after, afterMsgId);
if (after) App::main()->showPeer(after->id, afterMsgId);
} 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) {
if (e->modifiers() & Qt::AltModifier) {
@ -3402,7 +3410,7 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) {
App::main()->peerBefore(histPeer, hist ? hist->activeMsgId : 0, before, beforeMsgId);
if (before) App::main()->showPeer(before->id, beforeMsgId);
} 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))) {
PeerData *p = 0;

View file

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