diff --git a/retroshare-gui/src/gui/chat/ChatWidget.cpp b/retroshare-gui/src/gui/chat/ChatWidget.cpp index 1540722bd..2fcf49f81 100644 --- a/retroshare-gui/src/gui/chat/ChatWidget.cpp +++ b/retroshare-gui/src/gui/chat/ChatWidget.cpp @@ -120,7 +120,7 @@ ChatWidget::ChatWidget(QWidget *parent) : ui->actionSearchWithoutLimit->setText(tr("Don't stop to color after")+" "+QString::number(uiMaxSearchLimitColor)+" "+tr("items found (need more CPU)")); - ui->markButton->setVisible(false); + ui->markButton->setVisible(false); ui->leSearch->setVisible(false); ui->searchBefore->setVisible(false); ui->searchBefore->setToolTip(tr("Find Previous
Ctrl+Shift+G")); @@ -194,8 +194,10 @@ ChatWidget::ChatWidget(QWidget *parent) : ui->pushtoolsButton->setMenu(menu); menu->addMenu(fontmenu); - ui->actionSendAsPlainText->setChecked(Settings->getChatSendAsPlainTextByDef()); - + ui->actionSendAsPlainText->setChecked(Settings->getChatSendAsPlainTextByDef()); + + ui->textBrowser->resetImagesStatus(Settings->getChatLoadEmbeddedImages()); + ui->textBrowser->setImageBlockWidget(ui->imageBlockWidget); ui->textBrowser->installEventFilter(this); ui->textBrowser->viewport()->installEventFilter(this); ui->chatTextEdit->installEventFilter(this); diff --git a/retroshare-gui/src/gui/chat/ChatWidget.ui b/retroshare-gui/src/gui/chat/ChatWidget.ui index e1e5cf0b8..1b9f57b71 100644 --- a/retroshare-gui/src/gui/chat/ChatWidget.ui +++ b/retroshare-gui/src/gui/chat/ChatWidget.ui @@ -206,6 +206,16 @@ border-image: url(:/images/closepressed.png) + + + + + 0 + 0 + + + + @@ -1007,6 +1017,12 @@ border-image: url(:/images/closepressed.png) QTextEdit
gui/common/MimeTextEdit.h
+ + RSImageBlockWidget + QWidget +
gui/common/RSImageBlockWidget.h
+ 1 +
diff --git a/retroshare-gui/src/gui/common/RSTextBrowser.cpp b/retroshare-gui/src/gui/common/RSTextBrowser.cpp index 87f77c437..edeaa473e 100644 --- a/retroshare-gui/src/gui/common/RSTextBrowser.cpp +++ b/retroshare-gui/src/gui/common/RSTextBrowser.cpp @@ -6,6 +6,8 @@ #include "RSTextBrowser.h" #include "RSImageBlockWidget.h" +#include //To get RsAccounts + RSTextBrowser::RSTextBrowser(QWidget *parent) : QTextBrowser(parent) { @@ -74,29 +76,37 @@ void RSTextBrowser::paintEvent(QPaintEvent *event) QVariant RSTextBrowser::loadResource(int type, const QUrl &name) { - // case 1: always trust the image if it comes from an internal resource - - if(name.scheme().compare("qrc",Qt::CaseInsensitive)==0 && type == QTextDocument::ImageResource) - return QTextBrowser::loadResource(type, name); - - // case 2: only display if the user allows it. Data resources can be bad (svg bombs) but we filter them out globally at the network layer. - // It would be good to add here a home-made resource loader that only loads images and not svg crap, just in case. - - if(name.scheme().compare("data",Qt::CaseInsensitive)==0 && mShowImages) - return QTextBrowser::loadResource(type, name); - - // case 3: otherwise, do not display - - std::cerr << "TEXTBROWSER: refusing load ressource request: type=" << type << " scheme=" << name.scheme().toStdString() << ", url=" << name.toString().toStdString() << std::endl; - - if (mImageBlockWidget) - mImageBlockWidget->show(); + // case 1: always trust the image if it comes from an internal resource. - //https://git.merproject.org/lbt/qtbase/commit/6d13e9f29597e0d557857e3f80173faba5368424 + if(name.scheme().compare("qrc",Qt::CaseInsensitive)==0 && type == QTextDocument::ImageResource) + return QTextBrowser::loadResource(type, name); + + // case 2: always trust the image if it comes from local Config or Data directories. + + if(name.scheme().compare("file",Qt::CaseInsensitive)==0 && type == QTextDocument::ImageResource) { + if (name.path().startsWith(QString::fromUtf8(RsAccounts::ConfigDirectory().c_str()).prepend("/"),Qt::CaseInsensitive) + || name.path().startsWith(QString::fromUtf8(RsAccounts::DataDirectory().c_str()).prepend("/"),Qt::CaseInsensitive)) + return QTextBrowser::loadResource(type, name); + } + + // case 3: only display if the user allows it. Data resources can be bad (svg bombs) but we filter them out globally at the network layer. + // It would be good to add here a home-made resource loader that only loads images and not svg crap, just in case. + + if(name.scheme().compare("data",Qt::CaseInsensitive)==0 && mShowImages) + return QTextBrowser::loadResource(type, name); + + // case 4: otherwise, do not display + + std::cerr << "TEXTBROWSER: refusing load ressource request: type=" << type << " scheme=" << name.scheme().toStdString() << ", url=" << name.toString().toStdString() << std::endl; + + if (mImageBlockWidget) + mImageBlockWidget->show(); + + //https://git.merproject.org/lbt/qtbase/commit/6d13e9f29597e0d557857e3f80173faba5368424 #if QT_VERSION >= QT_VERSION_CHECK (5, 0, 0) - return QPixmap(":/qt-project.org/styles/commonstyle/images/file-16.png"); + return QPixmap(":/qt-project.org/styles/commonstyle/images/file-16.png"); #else - return QPixmap(":/trolltech/styles/commonstyle/images/file-16.png"); + return QPixmap(":/trolltech/styles/commonstyle/images/file-16.png"); #endif } diff --git a/retroshare-gui/src/gui/settings/ChatPage.cpp b/retroshare-gui/src/gui/settings/ChatPage.cpp index a53d62293..e4e32abdf 100644 --- a/retroshare-gui/src/gui/settings/ChatPage.cpp +++ b/retroshare-gui/src/gui/settings/ChatPage.cpp @@ -130,6 +130,7 @@ ChatPage::save(QString &/*errmsg*/) Settings->setChatSendMessageWithCtrlReturn(ui.sendMessageWithCtrlReturn->isChecked()); Settings->setChatSendAsPlainTextByDef(ui.sendAsPlainTextByDef->isChecked()); + Settings->setChatLoadEmbeddedImages(ui.loadEmbeddedImages->isChecked()); Settings->setChatSearchCharToStartSearch(ui.sbSearch_CharToStart->value()); Settings->setChatSearchCaseSensitively(ui.cbSearch_CaseSensitively->isChecked()); @@ -238,6 +239,7 @@ ChatPage::load() ui.sendMessageWithCtrlReturn->setChecked(Settings->getChatSendMessageWithCtrlReturn()); ui.sendAsPlainTextByDef->setChecked(Settings->getChatSendAsPlainTextByDef()); + ui.loadEmbeddedImages->setChecked(Settings->getChatLoadEmbeddedImages()); ui.sbSearch_CharToStart->setValue(Settings->getChatSearchCharToStartSearch()); ui.cbSearch_CaseSensitively->setChecked(Settings->getChatSearchCaseSensitively()); diff --git a/retroshare-gui/src/gui/settings/ChatPage.ui b/retroshare-gui/src/gui/settings/ChatPage.ui index 706339756..d9569af3f 100644 --- a/retroshare-gui/src/gui/settings/ChatPage.ui +++ b/retroshare-gui/src/gui/settings/ChatPage.ui @@ -218,6 +218,13 @@
+ + + + Load embedded images + + + diff --git a/retroshare-gui/src/gui/settings/rsharesettings.cpp b/retroshare-gui/src/gui/settings/rsharesettings.cpp index 4011f4a9b..530ffd766 100644 --- a/retroshare-gui/src/gui/settings/rsharesettings.cpp +++ b/retroshare-gui/src/gui/settings/rsharesettings.cpp @@ -345,6 +345,8 @@ static QString getKeyForLastDir(RshareSettings::enumLastDir type) return "Messages"; case RshareSettings::LASTDIR_SOUNDS: return "SOUNDS"; + case RshareSettings::LASTDIR_PLUGIN: + return "PLUGIN"; } return ""; } @@ -601,6 +603,16 @@ QRgb RshareSettings::getChatSearchFoundColor() return valueFromGroup("Chat", "SearchMaxSearchFoundColor", QString::number(QColor(255,255,150).rgba())).toUInt(); } +bool RshareSettings::getChatLoadEmbeddedImages() +{ + return valueFromGroup("Chat", "LoadEmbeddedImages", true).toBool(); +} + +void RshareSettings::setChatLoadEmbeddedImages(bool value) +{ + setValueToGroup("Chat", "LoadEmbeddedImages", value); +} + RshareSettings::enumToasterPosition RshareSettings::getToasterPosition() { return (enumToasterPosition) value("ToasterPosition", TOASTERPOS_BOTTOMRIGHT).toInt(); diff --git a/retroshare-gui/src/gui/settings/rsharesettings.h b/retroshare-gui/src/gui/settings/rsharesettings.h index a7719c6d0..a693deaf3 100644 --- a/retroshare-gui/src/gui/settings/rsharesettings.h +++ b/retroshare-gui/src/gui/settings/rsharesettings.h @@ -237,6 +237,9 @@ public: void setChatSearchFoundColor(QRgb rgbValue); QRgb getChatSearchFoundColor(); + bool getChatLoadEmbeddedImages(); + void setChatLoadEmbeddedImages(bool value); + enumToasterPosition getToasterPosition(); void setToasterPosition(enumToasterPosition position);