mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-11 15:39:36 -05:00
Improve performance of eventFilter in chat lobbies
- Only check the anchors if the visible content has actually changed by saving lastUpdateCursorPos and End - Check notify first, before doing any work - Simplify regexp as the anchors have a fixed format - Remove unnecessary conversion to utf8 and back
This commit is contained in:
parent
5f81d8efc8
commit
bd6bb8996b
@ -448,7 +448,7 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chatType() == CHATTYPE_LOBBY) {
|
if (notify && chatType() == CHATTYPE_LOBBY) {
|
||||||
if ((event->type() == QEvent::KeyPress)
|
if ((event->type() == QEvent::KeyPress)
|
||||||
|| (event->type() == QEvent::MouseMove)
|
|| (event->type() == QEvent::MouseMove)
|
||||||
|| (event->type() == QEvent::Enter)
|
|| (event->type() == QEvent::Enter)
|
||||||
@ -460,9 +460,11 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
QPoint bottom_right(ui->textBrowser->viewport()->width() - 1, ui->textBrowser->viewport()->height() - 1);
|
QPoint bottom_right(ui->textBrowser->viewport()->width() - 1, ui->textBrowser->viewport()->height() - 1);
|
||||||
int end_pos = ui->textBrowser->cursorForPosition(bottom_right).position();
|
int end_pos = ui->textBrowser->cursorForPosition(bottom_right).position();
|
||||||
cursor.setPosition(end_pos, QTextCursor::KeepAnchor);
|
cursor.setPosition(end_pos, QTextCursor::KeepAnchor);
|
||||||
|
if ((cursor.position() != lastUpdateCursorPos || cursor.selectionEnd() != lastUpdateCursorEnd) &&
|
||||||
if (!cursor.selectedText().isEmpty()){
|
!cursor.selectedText().isEmpty()) {
|
||||||
QRegExp rx("<a\\s+name\\s*=\\s*\"(.*)\"",Qt::CaseInsensitive, QRegExp::RegExp2);
|
lastUpdateCursorPos = cursor.position();
|
||||||
|
lastUpdateCursorEnd = cursor.selectionEnd();
|
||||||
|
QRegExp rx("<a name=\"(.*)\"",Qt::CaseSensitive, QRegExp::RegExp2);
|
||||||
rx.setMinimal(true);
|
rx.setMinimal(true);
|
||||||
QString sel=cursor.selection().toHtml();
|
QString sel=cursor.selection().toHtml();
|
||||||
QStringList anchors;
|
QStringList anchors;
|
||||||
@ -473,13 +475,9 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
}
|
}
|
||||||
if (!anchors.isEmpty()){
|
if (!anchors.isEmpty()){
|
||||||
for (QStringList::iterator it=anchors.begin();it!=anchors.end();++it) {
|
for (QStringList::iterator it=anchors.begin();it!=anchors.end();++it) {
|
||||||
QByteArray bytArray=it->toUtf8();
|
notify->chatLobbyCleared(chatId.toLobbyId(), *it);
|
||||||
std::string stdString=std::string(bytArray.begin(),bytArray.end());
|
|
||||||
if (notify) notify->chatLobbyCleared(chatId.toLobbyId()
|
|
||||||
,QString::fromUtf8(stdString.c_str())
|
|
||||||
,obj != ui->textBrowser && obj != ui->textBrowser->viewport());//, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -490,11 +488,11 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
|
|
||||||
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
|
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
|
||||||
if (keyEvent) {
|
if (keyEvent) {
|
||||||
if (keyEvent->key() == Qt::Key_Delete ) {
|
if (notify && keyEvent->key() == Qt::Key_Delete) {
|
||||||
// Delete key pressed
|
// Delete key pressed
|
||||||
if (ui->textBrowser->textCursor().selectedText().length() > 0) {
|
if (ui->textBrowser->textCursor().selectedText().length() > 0) {
|
||||||
if (chatType() == CHATTYPE_LOBBY) {
|
if (chatType() == CHATTYPE_LOBBY) {
|
||||||
QRegExp rx("<a\\s+name\\s*=\\s*\"(.*)\"",Qt::CaseInsensitive, QRegExp::RegExp2);
|
QRegExp rx("<a name=\"(.*)\"",Qt::CaseSensitive, QRegExp::RegExp2);
|
||||||
rx.setMinimal(true);
|
rx.setMinimal(true);
|
||||||
QString sel=ui->textBrowser->textCursor().selection().toHtml();
|
QString sel=ui->textBrowser->textCursor().selection().toHtml();
|
||||||
QStringList anchors;
|
QStringList anchors;
|
||||||
@ -505,9 +503,7 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (QStringList::iterator it=anchors.begin();it!=anchors.end();++it) {
|
for (QStringList::iterator it=anchors.begin();it!=anchors.end();++it) {
|
||||||
QByteArray bytArray=it->toUtf8();
|
notify->chatLobbyCleared(chatId.toLobbyId(), *it);
|
||||||
std::string stdString=std::string(bytArray.begin(),bytArray.end());
|
|
||||||
if (notify) notify->chatLobbyCleared(chatId.toLobbyId(), QString::fromUtf8(stdString.c_str()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -529,7 +525,7 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event)
|
|||||||
cursor.select(QTextCursor::WordUnderCursor);
|
cursor.select(QTextCursor::WordUnderCursor);
|
||||||
QString toolTipText = "";
|
QString toolTipText = "";
|
||||||
if (!cursor.selectedText().isEmpty()){
|
if (!cursor.selectedText().isEmpty()){
|
||||||
QRegExp rx("<a\\s+name\\s*=\\s*\"(.*)\"",Qt::CaseInsensitive, QRegExp::RegExp2);
|
QRegExp rx("<a name=\"(.*)\"",Qt::CaseSensitive, QRegExp::RegExp2);
|
||||||
rx.setMinimal(true);
|
rx.setMinimal(true);
|
||||||
QString sel=cursor.selection().toHtml();
|
QString sel=cursor.selection().toHtml();
|
||||||
QStringList anchors;
|
QStringList anchors;
|
||||||
|
@ -238,6 +238,9 @@ private:
|
|||||||
|
|
||||||
QTextCursor qtcMark;
|
QTextCursor qtcMark;
|
||||||
|
|
||||||
|
int lastUpdateCursorPos;
|
||||||
|
int lastUpdateCursorEnd;
|
||||||
|
|
||||||
TransferRequestFlags mDefaultExtraFileFlags ; // flags for extra files shared in this chat. Will be 0 by default, but might be ANONYMOUS for chat lobbies.
|
TransferRequestFlags mDefaultExtraFileFlags ; // flags for extra files shared in this chat. Will be 0 by default, but might be ANONYMOUS for chat lobbies.
|
||||||
QDate lastMsgDate ;
|
QDate lastMsgDate ;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user