Merge branch 'master-flameshotorg' into master_nc_merge_upstream

# Conflicts:
#	.travis.yml
#	appveyor.yml
#	data/graphics.qrc
#	data/img/app/keyboard.svg
#	data/img/material/black/delete.png
#	data/img/material/black/delete.svg
#	data/img/material/black/filepath.svg
#	data/img/material/black/shortcut.svg
#	data/img/material/white/filepath.svg
#	data/img/material/white/shortcut.svg
#	data/translations/Internationalization_hu.ts
#	data/translations/Internationalization_ka.ts
#	external/Qt-Color-Widgets/src/color_wheel.cpp
#	external/singleapplication/singleapplication.cpp
#	flameshot.pro
#	src/cli/commandlineparser.cpp
#	src/config/buttonlistview.cpp
#	src/config/configwindow.cpp
#	src/config/configwindow.h
#	src/config/geneneralconf.cpp
#	src/config/geneneralconf.h
#	src/config/uicoloreditor.cpp
#	src/config/uicoloreditor.h
#	src/core/controller.cpp
#	src/core/globalshortcutfilter.cpp
#	src/main.cpp
#	src/third-party/Qt-Color-Widgets/src/color_utils.cpp
#	src/tools/abstractactiontool.h
#	src/tools/abstractpathtool.h
#	src/tools/arrow/arrowtool.cpp
#	src/tools/arrow/arrowtool.h
#	src/tools/blur/blurtool.cpp
#	src/tools/capturetool.h
#	src/tools/circle/circletool.cpp
#	src/tools/circle/circletool.h
#	src/tools/copy/copytool.cpp
#	src/tools/copy/copytool.h
#	src/tools/exit/exittool.cpp
#	src/tools/exit/exittool.h
#	src/tools/imgur/imguruploader.cpp
#	src/tools/launcher/applaunchertool.cpp
#	src/tools/launcher/applaunchertool.h
#	src/tools/launcher/applauncherwidget.cpp
#	src/tools/launcher/openwithprogram.cpp
#	src/tools/line/linetool.cpp
#	src/tools/line/linetool.h
#	src/tools/marker/markertool.cpp
#	src/tools/marker/markertool.h
#	src/tools/move/movetool.cpp
#	src/tools/pencil/penciltool.cpp
#	src/tools/pencil/penciltool.h
#	src/tools/pin/pintool.cpp
#	src/tools/pin/pintool.h
#	src/tools/pin/pinwidget.cpp
#	src/tools/pixelate/pixelatetool.h
#	src/tools/rectangle/rectangletool.cpp
#	src/tools/rectangle/rectangletool.h
#	src/tools/redo/redotool.cpp
#	src/tools/redo/redotool.h
#	src/tools/save/savetool.cpp
#	src/tools/save/savetool.h
#	src/tools/selection/selectiontool.cpp
#	src/tools/selection/selectiontool.h
#	src/tools/sizeindicator/sizeindicatortool.cpp
#	src/tools/sizeindicator/sizeindicatortool.h
#	src/tools/storage/imgur/imguruploader.h
#	src/tools/storage/imgur/imguruploadertool.cpp
#	src/tools/storage/imgur/imguruploadertool.h
#	src/tools/text/textconfig.cpp
#	src/tools/text/texttool.cpp
#	src/tools/text/texttool.h
#	src/tools/toolfactory.cpp
#	src/tools/toolfactory.h
#	src/tools/undo/undotool.cpp
#	src/tools/undo/undotool.h
#	src/utils/confighandler.cpp
#	src/utils/confighandler.h
#	src/utils/dbusutils.cpp
#	src/utils/screenshotsaver.cpp
#	src/utils/screenshotsaver.h
#	src/widgets/capture/buttonhandler.cpp
#	src/widgets/capture/buttonhandler.h
#	src/widgets/capture/capturebutton.cpp
#	src/widgets/capture/capturebutton.h
#	src/widgets/capture/capturewidget.cpp
#	src/widgets/capture/capturewidget.h
#	src/widgets/capture/colorpicker.cpp
#	src/widgets/capturelauncher.cpp
#	src/widgets/infowindow.cpp
#	src/widgets/infowindow.h
#	src/widgets/panel/sidepanelwidget.cpp
#	src/widgets/panel/utilitypanel.cpp
#	src/widgets/panel/utilitypanel.h
#	translations/Internationalization_ca.ts
#	translations/Internationalization_de_DE.ts
#	translations/Internationalization_es.ts
#	translations/Internationalization_fr.ts
#	translations/Internationalization_ja.ts
#	translations/Internationalization_nl.ts
#	translations/Internationalization_pl.ts
#	translations/Internationalization_pt_br.ts
#	translations/Internationalization_ru.ts
#	translations/Internationalization_sk.ts
#	translations/Internationalization_sr.ts
#	translations/Internationalization_tr.ts
#	translations/Internationalization_uk.ts
#	translations/Internationalization_zh_CN.ts
#	translations/Internationalization_zh_TW.ts
This commit is contained in:
Yuriy Puchkov
2020-09-24 18:52:49 +03:00
351 changed files with 23741 additions and 14935 deletions

21
src/utils/CMakeLists.txt Normal file
View File

@@ -0,0 +1,21 @@
# Required to generate MOC
target_sources(
flameshot
PRIVATE dbusutils.h
filenamehandler.h
screengrabber.h
systemnotification.h)
target_sources(
flameshot
PRIVATE filenamehandler.cpp
screengrabber.cpp
confighandler.cpp
systemnotification.cpp
screenshotsaver.cpp
dbusutils.cpp
globalvalues.cpp
desktopfileparse.cpp
desktopinfo.cpp
pathinfo.cpp
colorutils.cpp)

View File

@@ -30,9 +30,9 @@ ConfigHandler::ConfigHandler()
m_settings.setDefaultFormat(QSettings::IniFormat);
}
QVector<CaptureButton::ButtonType> ConfigHandler::getButtons()
QVector<CaptureToolButton::ButtonType> ConfigHandler::getButtons()
{
QVector<CaptureButton::ButtonType> buttons;
QVector<CaptureToolButton::ButtonType> buttons;
if (m_settings.contains(QStringLiteral("buttons"))) {
// TODO: remove toList in v1.0
QVector<int> buttonsInt = m_settings.value(QStringLiteral("buttons"))
@@ -46,31 +46,35 @@ QVector<CaptureButton::ButtonType> ConfigHandler::getButtons()
buttons = fromIntToButton(buttonsInt);
} else {
// Default tools
buttons << CaptureButton::TYPE_PENCIL << CaptureButton::TYPE_DRAWER
<< CaptureButton::TYPE_ARROW << CaptureButton::TYPE_SELECTION
<< CaptureButton::TYPE_RECTANGLE << CaptureButton::TYPE_CIRCLE
<< CaptureButton::TYPE_MARKER << CaptureButton::TYPE_BLUR
<< CaptureButton::TYPE_SELECTIONINDICATOR
<< CaptureButton::TYPE_MOVESELECTION << CaptureButton::TYPE_UNDO
<< CaptureButton::TYPE_REDO << CaptureButton::TYPE_COPY
<< CaptureButton::TYPE_SAVE << CaptureButton::TYPE_EXIT
<< CaptureButton::TYPE_IMAGEUPLOADER
#if defined(Q_OS_LINUX) || defined(Q_OS_UNIX)
<< CaptureButton::TYPE_OPEN_APP
#endif
<< CaptureButton::TYPE_PIN << CaptureButton::TYPE_TEXT;
buttons << CaptureToolButton::TYPE_PENCIL
<< CaptureToolButton::TYPE_DRAWER
<< CaptureToolButton::TYPE_ARROW
<< CaptureToolButton::TYPE_SELECTION
<< CaptureToolButton::TYPE_RECTANGLE
<< CaptureToolButton::TYPE_CIRCLE
<< CaptureToolButton::TYPE_MARKER
<< CaptureToolButton::TYPE_PIXELATE
<< CaptureToolButton::TYPE_SELECTIONINDICATOR
<< CaptureToolButton::TYPE_MOVESELECTION
<< CaptureToolButton::TYPE_UNDO << CaptureToolButton::TYPE_REDO
<< CaptureToolButton::TYPE_COPY << CaptureToolButton::TYPE_SAVE
<< CaptureToolButton::TYPE_EXIT
<< CaptureToolButton::TYPE_IMAGEUPLOADER
<< CaptureToolButton::TYPE_OPEN_APP
<< CaptureToolButton::TYPE_PIN << CaptureToolButton::TYPE_TEXT
<< CaptureToolButton::TYPE_CIRCLECOUNT;
}
using bt = CaptureButton::ButtonType;
using bt = CaptureToolButton::ButtonType;
std::sort(buttons.begin(), buttons.end(), [](bt a, bt b) {
return CaptureButton::getPriorityByButton(a) <
CaptureButton::getPriorityByButton(b);
return CaptureToolButton::getPriorityByButton(a) <
CaptureToolButton::getPriorityByButton(b);
});
return buttons;
}
void ConfigHandler::setButtons(
const QVector<CaptureButton::ButtonType>& buttons)
const QVector<CaptureToolButton::ButtonType>& buttons)
{
QVector<int> l = fromButtonToInt(buttons);
normalizeButtons(l);
@@ -172,9 +176,9 @@ QColor ConfigHandler::uiContrastColorValue()
{
QColor res = QColor(39, 0, 50);
if (m_settings.contains(QStringLiteral("contastUiColor"))) {
if (m_settings.contains(QStringLiteral("contrastUiColor"))) {
QString hex =
m_settings.value(QStringLiteral("contastUiColor")).toString();
m_settings.value(QStringLiteral("contrastUiColor")).toString();
if (QColor::isValidColor(hex)) {
res = QColor(hex);
@@ -186,7 +190,7 @@ QColor ConfigHandler::uiContrastColorValue()
void ConfigHandler::setUIContrastColor(const QColor& c)
{
m_settings.setValue(QStringLiteral("contastUiColor"), c.name());
m_settings.setValue(QStringLiteral("contrastUiColor"), c.name());
}
QColor ConfigHandler::drawColorValue()
@@ -223,6 +227,18 @@ void ConfigHandler::setShowHelp(const bool showHelp)
m_settings.setValue(QStringLiteral("showHelp"), showHelp);
}
bool ConfigHandler::showSidePanelButtonValue()
{
return m_settings.value(QStringLiteral("showSidePanelButton"), true)
.toBool();
}
void ConfigHandler::setShowSidePanelButton(const bool showSidePanelButton)
{
m_settings.setValue(QStringLiteral("showSidePanelButton"),
showSidePanelButton);
}
bool ConfigHandler::desktopNotificationValue()
{
bool res = true;
@@ -425,6 +441,15 @@ void ConfigHandler::setCopyAndCloseAfterUploadEnabled(const bool value)
{
m_settings.setValue(QStringLiteral("copyAndCloseAfterUpload"), value);
}
bool ConfigHandler::saveAfterCopyValue()
{
return m_settings.value(QStringLiteral("saveAfterCopy")).toBool();
}
void ConfigHandler::setSaveAfterCopy(const bool save)
{
m_settings.setValue(QStringLiteral("saveAfterCopy"), save);
}
bool ConfigHandler::copyPathAfterSaveEnabled()
{
@@ -455,6 +480,16 @@ const QString& ConfigHandler::uploadStorage()
return m_strRes;
}
QString ConfigHandler::saveAfterCopyPathValue()
{
return m_settings.value(QStringLiteral("saveAfterCopyPath")).toString();
}
void ConfigHandler::setSaveAfterCopyPath(const QString& path)
{
m_settings.setValue(QStringLiteral("saveAfterCopyPath"), path);
}
void ConfigHandler::setDefaults()
{
m_settings.clear();
@@ -463,8 +498,8 @@ void ConfigHandler::setDefaults()
void ConfigHandler::setAllTheButtons()
{
QVector<int> buttons;
auto listTypes = CaptureButton::getIterableButtonTypes();
for (const CaptureButton::ButtonType t : listTypes) {
auto listTypes = CaptureToolButton::getIterableButtonTypes();
for (const CaptureToolButton::ButtonType t : listTypes) {
buttons << static_cast<int>(t);
}
// TODO: remove toList in v1.0
@@ -479,7 +514,7 @@ QString ConfigHandler::configFilePath() const
bool ConfigHandler::normalizeButtons(QVector<int>& buttons)
{
auto listTypes = CaptureButton::getIterableButtonTypes();
auto listTypes = CaptureToolButton::getIterableButtonTypes();
QVector<int> listTypesInt;
for (auto i : listTypes)
listTypesInt << static_cast<int>(i);
@@ -494,17 +529,17 @@ bool ConfigHandler::normalizeButtons(QVector<int>& buttons)
return hasChanged;
}
QVector<CaptureButton::ButtonType> ConfigHandler::fromIntToButton(
QVector<CaptureToolButton::ButtonType> ConfigHandler::fromIntToButton(
const QVector<int>& l)
{
QVector<CaptureButton::ButtonType> buttons;
QVector<CaptureToolButton::ButtonType> buttons;
for (auto const i : l)
buttons << static_cast<CaptureButton::ButtonType>(i);
buttons << static_cast<CaptureToolButton::ButtonType>(i);
return buttons;
}
QVector<int> ConfigHandler::fromButtonToInt(
const QVector<CaptureButton::ButtonType>& l)
const QVector<CaptureToolButton::ButtonType>& l)
{
QVector<int> buttons;
for (auto const i : l)

View File

@@ -17,19 +17,18 @@
#pragma once
#include "src/widgets/capture/capturebutton.h"
#include "src/widgets/capture/capturetoolbutton.h"
#include <QSettings>
#include <QStringList>
#include <QVector>
class ConfigHandler : public QObject
class ConfigHandler
{
public:
explicit ConfigHandler();
QVector<CaptureButton::ButtonType> getButtons();
void setButtons(const QVector<CaptureButton::ButtonType>&);
QVector<CaptureToolButton::ButtonType> getButtons();
void setButtons(const QVector<CaptureToolButton::ButtonType>&);
QVector<QColor> getUserColors();
void setUserColors(const QVector<QColor>&);
@@ -51,6 +50,9 @@ public:
bool showHelpValue();
void setShowHelp(const bool);
bool showSidePanelButtonValue();
void setShowSidePanelButton(const bool);
bool desktopNotificationValue();
void setDesktopNotification(const bool);
@@ -81,6 +83,11 @@ public:
bool copyAndCloseAfterUploadEnabled();
void setCopyAndCloseAfterUploadEnabled(const bool);
bool saveAfterCopyValue();
void setSaveAfterCopy(const bool);
QString saveAfterCopyPathValue();
void setSaveAfterCopyPath(const QString&);
bool copyPathAfterSaveEnabled();
void setCopyPathAfterSaveEnabled(const bool);
@@ -105,6 +112,8 @@ private:
bool normalizeButtons(QVector<int>&);
QVector<CaptureButton::ButtonType> fromIntToButton(const QVector<int>& l);
QVector<int> fromButtonToInt(const QVector<CaptureButton::ButtonType>& l);
QVector<CaptureToolButton::ButtonType> fromIntToButton(
const QVector<int>& l);
QVector<int> fromButtonToInt(
const QVector<CaptureToolButton::ButtonType>& l);
};

View File

@@ -29,14 +29,14 @@ void DBusUtils::connectPrintCapture(QDBusConnection& session, uint id)
{
m_id = id;
// captureTaken
session.connect(QStringLiteral("org.dharkael.Flameshot"),
session.connect(QStringLiteral("org.flameshot.Flameshot"),
QStringLiteral("/"),
QLatin1String(""),
QStringLiteral("captureTaken"),
this,
SLOT(captureTaken(uint, QByteArray)));
// captureFailed
session.connect(QStringLiteral("org.dharkael.Flameshot"),
session.connect(QStringLiteral("org.flameshot.Flameshot"),
QStringLiteral("/"),
QLatin1String(""),
QStringLiteral("captureFailed"),

View File

@@ -27,14 +27,31 @@
ScreenshotSaver::ScreenshotSaver() {}
// TODO: If data is saved to the clipboard before the notification is sent via
// dbus, the application freezes.
void ScreenshotSaver::saveToClipboard(const QPixmap& capture)
{
SystemNotification().sendMessage(QObject::tr("Capture saved to clipboard"));
QApplication::clipboard()->setPixmap(capture);
// If we are able to properly save the file, save the file and copy to
// clipboard.
if ((ConfigHandler().saveAfterCopyValue()) &&
(!ConfigHandler().saveAfterCopyPathValue().isEmpty())) {
saveToFilesystem(capture,
ConfigHandler().saveAfterCopyPathValue(),
QObject::tr("Capture saved to clipboard."));
QApplication::clipboard()->setPixmap(capture);
}
// Otherwise only save to clipboard
else {
SystemNotification().sendMessage(
QObject::tr("Capture saved to clipboard"));
QApplication::clipboard()->setPixmap(capture);
}
}
bool ScreenshotSaver::saveToFilesystem(const QPixmap& capture,
const QString& path)
const QString& path,
const QString& messagePrefix)
{
QString completePath = FileNameHandler().generateAbsolutePath(path);
completePath += QLatin1String(".png");
@@ -44,9 +61,11 @@ bool ScreenshotSaver::saveToFilesystem(const QPixmap& capture,
if (ok) {
ConfigHandler().setSavePath(path);
saveMessage = QObject::tr("Capture saved as ") + completePath;
saveMessage =
messagePrefix + QObject::tr("Capture saved as ") + completePath;
} else {
saveMessage = QObject::tr("Error trying to save as ") + completePath;
saveMessage = messagePrefix + QObject::tr("Error trying to save as ") +
completePath;
notificationPath = "";
}
@@ -83,10 +102,9 @@ bool ScreenshotSaver::saveToFilesystemGUI(const QPixmap& capture)
ok = capture.save(savePath);
if (ok) {
ConfigHandler config;
QString pathNoFile =
savePath.left(savePath.lastIndexOf(QLatin1String("/")));
config.setSavePath(pathNoFile);
ConfigHandler().setSavePath(pathNoFile);
QString msg = QObject::tr("Capture saved as ") + savePath;
if (config.copyPathAfterSaveEnabled()) {
QApplication::clipboard()->setText(savePath);

View File

@@ -26,6 +26,8 @@ public:
ScreenshotSaver();
void saveToClipboard(const QPixmap& capture);
bool saveToFilesystem(const QPixmap& capture, const QString& path);
bool saveToFilesystem(const QPixmap& capture,
const QString& path,
const QString& messagePrefix);
bool saveToFilesystemGUI(const QPixmap& capture);
};