Showing preview only (7,474K chars total). Download the full file or copy to clipboard to get everything.
Repository: flameshot-org/flameshot
Branch: master
Commit: f9ea95435728
Files: 368
Total size: 7.1 MB
Directory structure:
gitextract_v64igq9i/
├── .clang-format
├── .clang-tidy
├── .cmake-format.yaml
├── .envrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yaml
│ │ ├── feature-request.yaml
│ │ └── question.md
│ └── workflows/
│ ├── Linux-arm-pack.yml
│ ├── Linux-pack.yml
│ ├── MacOS-pack.yml
│ ├── Windows-pack.yml
│ ├── build_cmake.yml
│ ├── clang-format.yml
│ └── deploy-dev-docs.yml
├── .gitignore
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── PKGBUILD
├── README.md
├── appveyor.yml
├── cmake/
│ ├── Cache.cmake
│ ├── CompilerWarnings.cmake
│ ├── Sanitizers.cmake
│ ├── StandardProjectSettings.cmake
│ └── StaticAnalyzers.cmake
├── data/
│ ├── appdata/
│ │ └── org.flameshot.Flameshot.metainfo.xml
│ ├── dbus/
│ │ ├── org.flameshot.Flameshot.service.in
│ │ ├── org.flameshot.Flameshot.xml
│ │ └── org.freedesktop.Notifications.xml
│ ├── desktopEntry/
│ │ └── package/
│ │ └── org.flameshot.Flameshot.desktop
│ ├── flameshot.rc
│ ├── graphics.qrc
│ ├── img/
│ │ ├── app/
│ │ │ └── flameshotLogoLicense.txt
│ │ └── material/
│ │ ├── LICENSE.txt
│ │ └── README.md
│ ├── man/
│ │ └── man1/
│ │ └── flameshot.1
│ ├── shell-completion/
│ │ ├── flameshot.bash
│ │ ├── flameshot.fish
│ │ └── flameshot.zsh
│ ├── snap/
│ │ └── snapcraft.yaml
│ └── translations/
│ ├── Internationalization_ar.ts
│ ├── Internationalization_bg.ts
│ ├── Internationalization_ca.ts
│ ├── Internationalization_cs.ts
│ ├── Internationalization_da.ts
│ ├── Internationalization_de_DE.ts
│ ├── Internationalization_el.ts
│ ├── Internationalization_en.ts
│ ├── Internationalization_es.ts
│ ├── Internationalization_et.ts
│ ├── Internationalization_eu.ts
│ ├── Internationalization_fa.ts
│ ├── Internationalization_fi.ts
│ ├── Internationalization_fr.ts
│ ├── Internationalization_ga.ts
│ ├── Internationalization_gl.ts
│ ├── Internationalization_grc.ts
│ ├── Internationalization_he.ts
│ ├── Internationalization_hu.ts
│ ├── Internationalization_id.ts
│ ├── Internationalization_it_IT.ts
│ ├── Internationalization_ja.ts
│ ├── Internationalization_ka.ts
│ ├── Internationalization_km.ts
│ ├── Internationalization_ko.ts
│ ├── Internationalization_nb_NO.ts
│ ├── Internationalization_nl.ts
│ ├── Internationalization_nl_NL.ts
│ ├── Internationalization_pl.ts
│ ├── Internationalization_pt.ts
│ ├── Internationalization_pt_BR.ts
│ ├── Internationalization_ro.ts
│ ├── Internationalization_ru.ts
│ ├── Internationalization_sk.ts
│ ├── Internationalization_sl.ts
│ ├── Internationalization_sr_SP.ts
│ ├── Internationalization_sv_SE.ts
│ ├── Internationalization_sw.ts
│ ├── Internationalization_ta.ts
│ ├── Internationalization_th.ts
│ ├── Internationalization_tk.ts
│ ├── Internationalization_tr.ts
│ ├── Internationalization_uk.ts
│ ├── Internationalization_vi.ts
│ ├── Internationalization_zh_CN.ts
│ ├── Internationalization_zh_HK.ts
│ └── Internationalization_zh_TW.ts
├── default.nix
├── docs/
│ ├── 0000-template.md
│ ├── CONTRIBUTING.md
│ ├── RFC/
│ │ └── 0000-Add-Opacity-slider.md
│ ├── RFC.md
│ ├── ReleaseNote_12.1.md
│ ├── ReleaseNotes_0.8.md
│ ├── ReleaseNotes_0.9.md
│ ├── ReleaseNotes_11.0.md
│ ├── ReleaseNotes_12.0.md
│ ├── Releasing.md
│ ├── Sway and wlroots support.md
│ ├── dev/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── mkdocs.yml
│ │ ├── post-process.sh
│ │ └── src/
│ │ ├── debugging.md
│ │ ├── docs.md
│ │ ├── faq.md
│ │ └── index.md
│ └── shortcuts-config/
│ └── flameshot-shortcuts-kde.khotkeys
├── flake.nix
├── flameshot.example.ini
├── packaging/
│ ├── debian/
│ │ ├── changelog
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ ├── docs
│ │ ├── rules
│ │ └── source/
│ │ └── format
│ ├── flatpak/
│ │ └── org.flameshot.Flameshot.yml
│ ├── macos/
│ │ ├── Info.plist.in
│ │ ├── create_dmg.sh
│ │ └── flameshot.icns
│ ├── rpm/
│ │ ├── fedora/
│ │ │ └── flameshot.spec
│ │ └── opensuse/
│ │ └── flameshot.spec
│ └── win-installer/
│ └── LICENSE/
│ └── GPL-3.0.txt
├── scripts/
│ └── .gitkeep
├── shell.nix
├── snapcraft.yaml
├── src/
│ ├── CMakeLists.txt
│ ├── cli/
│ │ ├── CMakeLists.txt
│ │ ├── commandargument.cpp
│ │ ├── commandargument.h
│ │ ├── commandlineparser.cpp
│ │ ├── commandlineparser.h
│ │ ├── commandoption.cpp
│ │ └── commandoption.h
│ ├── config/
│ │ ├── CMakeLists.txt
│ │ ├── buttonlistview.cpp
│ │ ├── buttonlistview.h
│ │ ├── cacheutils.cpp
│ │ ├── cacheutils.h
│ │ ├── clickablelabel.cpp
│ │ ├── clickablelabel.h
│ │ ├── colorpickereditmode.cpp
│ │ ├── colorpickereditmode.h
│ │ ├── colorpickereditor.cpp
│ │ ├── colorpickereditor.h
│ │ ├── configerrordetails.cpp
│ │ ├── configerrordetails.h
│ │ ├── configresolver.cpp
│ │ ├── configresolver.h
│ │ ├── configwindow.cpp
│ │ ├── configwindow.h
│ │ ├── extendedslider.cpp
│ │ ├── extendedslider.h
│ │ ├── filenameeditor.cpp
│ │ ├── filenameeditor.h
│ │ ├── generalconf.cpp
│ │ ├── generalconf.h
│ │ ├── setshortcutwidget.cpp
│ │ ├── setshortcutwidget.h
│ │ ├── shortcutswidget.cpp
│ │ ├── shortcutswidget.h
│ │ ├── strftimechooserwidget.cpp
│ │ ├── strftimechooserwidget.h
│ │ ├── styleoverride.cpp
│ │ ├── styleoverride.h
│ │ ├── uicoloreditor.cpp
│ │ ├── uicoloreditor.h
│ │ ├── visualseditor.cpp
│ │ └── visualseditor.h
│ ├── core/
│ │ ├── CMakeLists.txt
│ │ ├── capturerequest.cpp
│ │ ├── capturerequest.h
│ │ ├── flameshot.cpp
│ │ ├── flameshot.h
│ │ ├── flameshotdaemon.cpp
│ │ ├── flameshotdaemon.h
│ │ ├── flameshotdbusadapter.cpp
│ │ ├── flameshotdbusadapter.h
│ │ ├── globalshortcutfilter.cpp
│ │ ├── globalshortcutfilter.h
│ │ ├── qguiappcurrentscreen.cpp
│ │ ├── qguiappcurrentscreen.h
│ │ ├── signaldaemon.cpp
│ │ └── signaldaemon.h
│ ├── main.cpp
│ ├── tools/
│ │ ├── CMakeLists.txt
│ │ ├── abstractactiontool.cpp
│ │ ├── abstractactiontool.h
│ │ ├── abstractpathtool.cpp
│ │ ├── abstractpathtool.h
│ │ ├── abstracttwopointtool.cpp
│ │ ├── abstracttwopointtool.h
│ │ ├── accept/
│ │ │ ├── accepttool.cpp
│ │ │ └── accepttool.h
│ │ ├── arrow/
│ │ │ ├── arrowtool.cpp
│ │ │ └── arrowtool.h
│ │ ├── capturecontext.cpp
│ │ ├── capturecontext.h
│ │ ├── capturetool.h
│ │ ├── circle/
│ │ │ ├── circletool.cpp
│ │ │ └── circletool.h
│ │ ├── circlecount/
│ │ │ ├── circlecounttool.cpp
│ │ │ └── circlecounttool.h
│ │ ├── copy/
│ │ │ ├── copytool.cpp
│ │ │ └── copytool.h
│ │ ├── exit/
│ │ │ ├── exittool.cpp
│ │ │ └── exittool.h
│ │ ├── imgupload/
│ │ │ ├── imguploadermanager.cpp
│ │ │ ├── imguploadermanager.h
│ │ │ ├── imguploadertool.cpp
│ │ │ ├── imguploadertool.h
│ │ │ └── storages/
│ │ │ ├── imguploaderbase.cpp
│ │ │ ├── imguploaderbase.h
│ │ │ └── imgur/
│ │ │ ├── imguruploader.cpp
│ │ │ └── imguruploader.h
│ │ ├── invert/
│ │ │ ├── inverttool.cpp
│ │ │ └── inverttool.h
│ │ ├── launcher/
│ │ │ ├── applaunchertool.cpp
│ │ │ ├── applaunchertool.h
│ │ │ ├── applauncherwidget.cpp
│ │ │ ├── applauncherwidget.h
│ │ │ ├── launcheritemdelegate.cpp
│ │ │ ├── launcheritemdelegate.h
│ │ │ ├── openwithprogram.cpp
│ │ │ ├── openwithprogram.h
│ │ │ ├── terminallauncher.cpp
│ │ │ └── terminallauncher.h
│ │ ├── line/
│ │ │ ├── linetool.cpp
│ │ │ └── linetool.h
│ │ ├── marker/
│ │ │ ├── markertool.cpp
│ │ │ └── markertool.h
│ │ ├── move/
│ │ │ ├── movetool.cpp
│ │ │ └── movetool.h
│ │ ├── pencil/
│ │ │ ├── penciltool.cpp
│ │ │ └── penciltool.h
│ │ ├── pin/
│ │ │ ├── pintool.cpp
│ │ │ ├── pintool.h
│ │ │ ├── pinwidget.cpp
│ │ │ └── pinwidget.h
│ │ ├── pixelate/
│ │ │ ├── pixelatetool.cpp
│ │ │ └── pixelatetool.h
│ │ ├── rectangle/
│ │ │ ├── rectangletool.cpp
│ │ │ └── rectangletool.h
│ │ ├── redo/
│ │ │ ├── redotool.cpp
│ │ │ └── redotool.h
│ │ ├── save/
│ │ │ ├── savetool.cpp
│ │ │ └── savetool.h
│ │ ├── selection/
│ │ │ ├── selectiontool.cpp
│ │ │ └── selectiontool.h
│ │ ├── sizedecrease/
│ │ │ ├── sizedecreasetool.cpp
│ │ │ └── sizedecreasetool.h
│ │ ├── sizeincrease/
│ │ │ ├── sizeincreasetool.cpp
│ │ │ └── sizeincreasetool.h
│ │ ├── text/
│ │ │ ├── textconfig.cpp
│ │ │ ├── textconfig.h
│ │ │ ├── texttool.cpp
│ │ │ ├── texttool.h
│ │ │ ├── textwidget.cpp
│ │ │ └── textwidget.h
│ │ ├── toolfactory.cpp
│ │ ├── toolfactory.h
│ │ └── undo/
│ │ ├── undotool.cpp
│ │ └── undotool.h
│ ├── utils/
│ │ ├── CMakeLists.txt
│ │ ├── abstractlogger.cpp
│ │ ├── abstractlogger.h
│ │ ├── colorutils.cpp
│ │ ├── colorutils.h
│ │ ├── confighandler.cpp
│ │ ├── confighandler.h
│ │ ├── desktopfileparse.cpp
│ │ ├── desktopfileparse.h
│ │ ├── desktopinfo.cpp
│ │ ├── desktopinfo.h
│ │ ├── filenamehandler.cpp
│ │ ├── filenamehandler.h
│ │ ├── globalvalues.cpp
│ │ ├── globalvalues.h
│ │ ├── history.cpp
│ │ ├── history.h
│ │ ├── monitorpreview.cpp
│ │ ├── monitorpreview.h
│ │ ├── pathinfo.cpp
│ │ ├── pathinfo.h
│ │ ├── request.cpp
│ │ ├── request.h
│ │ ├── screengrabber.cpp
│ │ ├── screengrabber.h
│ │ ├── screenshotsaver.cpp
│ │ ├── screenshotsaver.h
│ │ ├── strfparse.cpp
│ │ ├── strfparse.h
│ │ ├── systemnotification.cpp
│ │ ├── systemnotification.h
│ │ ├── valuehandler.cpp
│ │ ├── valuehandler.h
│ │ ├── waylandutils.cpp
│ │ ├── waylandutils.h
│ │ ├── winlnkfileparse.cpp
│ │ └── winlnkfileparse.h
│ ├── widgets/
│ │ ├── CMakeLists.txt
│ │ ├── capture/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── buttonhandler.cpp
│ │ │ ├── buttonhandler.h
│ │ │ ├── capturebutton.cpp
│ │ │ ├── capturebutton.h
│ │ │ ├── capturetoolbutton.cpp
│ │ │ ├── capturetoolbutton.h
│ │ │ ├── capturetoolobjects.cpp
│ │ │ ├── capturetoolobjects.h
│ │ │ ├── capturewidget.cpp
│ │ │ ├── capturewidget.h
│ │ │ ├── colorpicker.cpp
│ │ │ ├── colorpicker.h
│ │ │ ├── hovereventfilter.cpp
│ │ │ ├── hovereventfilter.h
│ │ │ ├── magnifierwidget.cpp
│ │ │ ├── magnifierwidget.h
│ │ │ ├── modificationcommand.cpp
│ │ │ ├── modificationcommand.h
│ │ │ ├── notifierbox.cpp
│ │ │ ├── notifierbox.h
│ │ │ ├── overlaymessage.cpp
│ │ │ ├── overlaymessage.h
│ │ │ ├── selectionwidget.cpp
│ │ │ └── selectionwidget.h
│ │ ├── capturelauncher.cpp
│ │ ├── capturelauncher.h
│ │ ├── capturelauncher.ui
│ │ ├── colorpickerwidget.cpp
│ │ ├── colorpickerwidget.h
│ │ ├── draggablewidgetmaker.cpp
│ │ ├── draggablewidgetmaker.h
│ │ ├── imagelabel.cpp
│ │ ├── imagelabel.h
│ │ ├── imguploaddialog.cpp
│ │ ├── imguploaddialog.h
│ │ ├── infowindow.cpp
│ │ ├── infowindow.h
│ │ ├── infowindow.ui
│ │ ├── loadspinner.cpp
│ │ ├── loadspinner.h
│ │ ├── notificationwidget.cpp
│ │ ├── notificationwidget.h
│ │ ├── orientablepushbutton.cpp
│ │ ├── orientablepushbutton.h
│ │ ├── panel/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── colorgrabwidget.cpp
│ │ │ ├── colorgrabwidget.h
│ │ │ ├── sidepanelwidget.cpp
│ │ │ ├── sidepanelwidget.h
│ │ │ ├── utilitypanel.cpp
│ │ │ └── utilitypanel.h
│ │ ├── trayicon.cpp
│ │ ├── trayicon.h
│ │ ├── updatenotificationwidget.cpp
│ │ ├── updatenotificationwidget.h
│ │ ├── uploadhistory.cpp
│ │ ├── uploadhistory.h
│ │ ├── uploadhistory.ui
│ │ ├── uploadlineitem.cpp
│ │ ├── uploadlineitem.h
│ │ └── uploadlineitem.ui
│ └── windows-cli.cpp
└── tests/
├── action_options.sh
└── path_option.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
Language: Cpp
BasedOnStyle: Mozilla
IndentWidth: 4
AccessModifierOffset: -4
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterStruct: true
AfterEnum: true
AfterFunction: true
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
================================================
FILE: .clang-tidy
================================================
---
Checks: '*,-fuchsia-*,-google-*,-zircon-*,-abseil-*,-modernize-use-trailing-return-type,-llvm-*,-llvmlibc-*,-performance-no-automatic-move,-cppcoreguidelines-owning-memory'
WarningsAsErrors: '*'
HeaderFilterRegex: ''
FormatStyle: none
================================================
FILE: .cmake-format.yaml
================================================
additional_commands:
foo:
flags:
- BAR
- BAZ
kwargs:
DEPENDS: '*'
HEADERS: '*'
SOURCES: '*'
bullet_char: '*'
dangle_parens: false
enum_char: .
line_ending: unix
line_width: 120
max_pargs_hwrap: 3
separate_ctrl_name_with_space: false
separate_fn_name_with_space: false
tab_size: 2
================================================
FILE: .envrc
================================================
use flake
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yaml
================================================
name: Bug Report
description: Found something you weren't expecting? Report it here!
labels: ["Unconfirmed Bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report.
NOTE: Please read the instructions below before filling the form.
- type: markdown
attributes:
value: |
1. Please write in English, this is the language all maintainers can speak and write.
2. Please take a moment to check that your issue doesn't already exist and not already reported.
3. Please make sure the solution to your problem is not already mentioned in the FAQ (https://flameshot.org/docs/guide/faq/)
4. Please provide the information for each field as complete as possible.
- type: textarea
id: flameshot-ver
attributes:
label: Flameshot Version
description: The Flameshot version (or commit reference) your are running. You can right-click on the tray icon > About > copy
placeholder: e.g Flameshot v0.10.1 (065aa98c)
validations:
required: true
- type: dropdown
id: installation-type
attributes:
label: Installation Type
description: How have you installed flameshot?
multiple: true
options:
- Linux, MacOS, or Windows Package manager (apt, pacman, eopkg, choco, brew, ...)
- User repository (AUR)
- Flatpak from Flathub
- Flatpak from Github
- Snap from Snapcraft
- Snap from
- AppImage
- Using the ready-made package from Github Releases
- Compiled from source
validations:
required: true
- type: input
id: os-ver
attributes:
label: Operating System type and version
description: "The operating system you are using Flameshot on:"
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: |
Please provide a description of your issue here. Please explain in details what the issue is. If you can, provide screenshots or screen recordings to demonstrate the issue.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to reproduce
description: Please write the steps we should take to reproduce this buggy behaviour
placeholder: |
1. run `flameshot gui`
2. select a region on the primary monitor
3. save to file
4. ...
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: Screenshots or screen recordings
description: If you think it would be beneficial for us to understand the issue, please provide a screenshots or screen recording. For screen recording you can use [Peek](https://github.com/phw/peek)
- type: textarea
id: systeminfo
attributes:
label: System Information
description: |
Please provide the detailed information about your computer including:
1. Operating system and version
2. Your monitor configuration (easiest way would be to add a screenshot of your monitor setup from settings window)
3. If using Linux (https://flameshot.org/docs/guide/issue-reporting/):
- Your Desktop Environment and your Window Manager
- if you are using Xorg or Wayland
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yaml
================================================
name: Feature Request
description: Got an idea for a feature that can make Flameshot even better? Propose your suggestion here!
labels: ["Enhancement"]
body:
- type: markdown
attributes:
value: |
1. Please write in English, this is the language all maintainers can speak and write.
2. Please only use this form to submit feature request and **not** bugs or questions.
3. Please take a moment to check that your feature hasn't already been suggested.
4. One picture worth a thousand words. If you think you can convey the message better by a drawing or pictrure, consider adding one.
- type: textarea
id: description
attributes:
label: Feature Description
placeholder: |
I think it would be great if ...
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
<!--
Write the question you have. Try to explain it in details if possible. Feel free to include screenshots, pictures, GIFs, and Videos. Also remember to search your question in the issues page as you might find the answer to your question faster that way.
You can also checkout the Flameshot website: https://flameshot.org/
Please also read the FAQ: https://flameshot.org/faq/
-->
================================================
FILE: .github/workflows/Linux-arm-pack.yml
================================================
name: Packaging(Linux - ARM)
on:
#push:
# branches:
# - master
# - fix*
# - move-arm-ci-to-new-ci
# paths-ignore:
# - 'README.md'
# - 'LICENSE'
# - 'docs/**'
workflow_dispatch:
env:
PRODUCT: flameshot
RELEASE: 1
# dockerfiles, see https://github.com/flameshot-org/flameshot-dockerfiles
# docker images, see https://quay.io/repository/flameshot-org/ci-building
DOCKER_REPO: quay.io/flameshot-org/ci-building
# building tool: https://github.com/flameshot-org/packpack
PACKPACK_REPO: flameshot-org/packpack
jobs:
deb-pack:
name: Build deb on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dist:
# - {
# name: debian-11,
# os: debian,
# symbol: bullseye,
# arch: armhf
# }
- {
name: debian-12,
os: debian,
symbol: bookworm,
arch: arm64
}
- {
name: debian-12,
os: debian,
symbol: bookworm,
arch: armhf
}
- {
name: ubuntu-22.04,
os: ubuntu,
symbol: jammy,
arch: arm64
}
- {
name: ubuntu-24.04,
os: ubuntu,
symbol: noble,
arch: arm64
}
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
# ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Get packpack tool
uses: actions/checkout@v4
with:
repository: ${{ env.PACKPACK_REPO }}
path: tools
ref: multiarch
set-safe-directory: $GITHUB_WORKSPACE/tools
- name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
env:
OS: ${{ matrix.dist.os }}
DIST: ${{ matrix.dist.symbol }}
DOCKER_ARCH: ${{ matrix.dist.arch }}
run: |
case ${DOCKER_ARCH} in
arm32v7)
export ARCH=arm/v7
;;
armhf)
export ARCH=arm/v7
;;
arm64*)
export ARCH=arm64
;;
*)
export ARCH=${DOCKER_ARCH}
;;
esac
cp -r $GITHUB_WORKSPACE/packaging/debian $GITHUB_WORKSPACE
bash $GITHUB_WORKSPACE/tools/packpack
mv $GITHUB_WORKSPACE/build/${PRODUCT}_${VERSION}-${RELEASE}_${{ matrix.dist.arch }}.deb $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb
- name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package
run: |
cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; }
sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb | tee ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }}
path: |
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum
overwrite: true
================================================
FILE: .github/workflows/Linux-pack.yml
================================================
name: Packaging(Linux)
on:
push:
branches:
- master
- fix*
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
pull_request:
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
workflow_dispatch:
env:
PRODUCT: flameshot
RELEASE: 1
# dockerfiles, see https://github.com/flameshot-org/flameshot-dockerfiles
# docker images, see https://quay.io/repository/flameshot-org/ci-building
DOCKER_REPO: quay.io/flameshot-org/ci-building
# building tool: https://github.com/flameshot-org/packpack
PACKPACK_REPO: flameshot-org/packpack
jobs:
deb-pack:
name: Build deb on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dist:
- {
name: debian-12,
os: debian,
symbol: bookworm,
arch: amd64
}
- {
name: ubuntu-22.04,
os: ubuntu,
symbol: jammy,
arch: amd64
}
- {
name: ubuntu-24.04,
os: ubuntu,
symbol: noble,
arch: amd64
}
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
# ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Get packpack tool
uses: actions/checkout@v4
with:
repository: ${{ env.PACKPACK_REPO }}
path: tools
ref: multiarch
set-safe-directory: $GITHUB_WORKSPACE/tools
- name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
env:
OS: ${{ matrix.dist.os }}
DIST: ${{ matrix.dist.symbol }}
PRESERVE_ENVVARS: "GIT_HASH"
run: |
cp -r $GITHUB_WORKSPACE/packaging/debian $GITHUB_WORKSPACE
bash $GITHUB_WORKSPACE/tools/packpack
mv $GITHUB_WORKSPACE/build/${PRODUCT}_${VERSION}-${RELEASE}_${{ matrix.dist.arch }}.deb $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb
- name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package
run: |
cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; }
sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb | tee ${PRODUCT}-${VERSION}-${RELEASE}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }}
path: |
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.${{ matrix.dist.name }}.${{ matrix.dist.arch }}.deb.sha256sum
overwrite: true
rpm-pack:
name: Build rpm on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dist:
- {
name: fedora-41,
os: fedora,
symbol: 41,
arch: x86_64
}
- {
name: fedora-42,
os: fedora,
symbol: 42,
arch: x86_64
}
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
# ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Get packpack tool
uses: actions/checkout@v4
with:
repository: ${{ env.PACKPACK_REPO }}
path: tools
ref: master
set-safe-directory: $GITHUB_WORKSPACE/tools
- name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
if: matrix.dist.os == 'fedora'
run: |
mkdir $GITHUB_WORKSPACE/rpm
cp $GITHUB_WORKSPACE/packaging/rpm/fedora/flameshot.spec $GITHUB_WORKSPACE/rpm
bash $GITHUB_WORKSPACE/tools/packpack
env:
OS: ${{ matrix.dist.os }}
DIST: ${{ matrix.dist.symbol }}
PRESERVE_ENVVARS: "GIT_HASH"
- name: Packaging on ${{ matrix.dist.name }} ${{ matrix.dist.arch }}
if: matrix.dist.os == 'opensuse-leap'
run: |
mkdir $GITHUB_WORKSPACE/rpm
cp $GITHUB_WORKSPACE/packaging/rpm/opensuse/flameshot.spec $GITHUB_WORKSPACE/rpm
bash $GITHUB_WORKSPACE/tools/packpack
env:
OS: ${{ matrix.dist.os }}
DIST: ${{ matrix.dist.symbol }}
- name: Package Clean
if: matrix.dist.os == 'fedora'
run: |
rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debuginfo-*.rpm
rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-debugsource-*.rpm
rm -f ${{ github.workspace }}/build/${{ env.PRODUCT }}-*.src.rpm
rm -f ${{ github.workspace }}/build/build.log
- name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package
if: matrix.dist.os == 'fedora'
run: |
cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; }
sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.fc*.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}.fc${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum
- name: SHA256Sum of ${{ matrix.dist.name }} ${{ matrix.dist.arch }} package
if: matrix.dist.os == 'opensuse-leap'
run: |
mv $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-lp*.${{ matrix.dist.arch }}.rpm $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm
cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; }
sha256sum ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm | tee ${PRODUCT}-${VERSION}-${RELEASE}-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum
- name: Artifact Upload
if: matrix.dist.os == 'fedora'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }}
path: |
${{ github.workspace }}/build/
overwrite: true
- name: Artifact Upload
if: matrix.dist.os == 'opensuse-leap'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-${{ matrix.dist.name }}-${{ matrix.dist.arch }}
path: |
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-lp${{ matrix.dist.symbol }}.${{ matrix.dist.arch }}.rpm.sha256sum
overwrite: true
appimage-pack:
name: Build appimage on ${{ matrix.config.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
config:
- {
name: ubuntu-24.04,
os: ubuntu,
symbol: noble,
arch: amd64,
image_repo: quay.io/flameshot-org/ci-building
}
container:
image: ${{ matrix.config.image_repo }}:${{ matrix.config.os }}-${{ matrix.config.symbol }}
options: --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor:unconfined
steps:
- name: Configure git safe directory
shell: bash
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
# ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Install Dependencies
run: |
sudo apt-get -y -qq update
sudo apt-get -y --no-install-recommends install fuse cmake extra-cmake-modules build-essential qt6-base-dev qt6-tools-dev qt6-tools-dev-tools libqt6svg6-dev qt6-l10n-tools qt6-wayland libgl-dev appstream hicolor-icon-theme openssl ca-certificates jq
- name: Download linuxdeploy
run: |
wget -c -nv "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
chmod a+x linuxdeploy-x86_64.AppImage
LINUXDEPLOY_BIN=${PWD}/linuxdeploy-x86_64.AppImage
- name: Download linuxdeployqt-plugin-appimage
run: |
wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage"
chmod a+x linuxdeploy-plugin-appimage-x86_64.AppImage
- name: Download linuxdeployqt-plugin-qt
run: |
wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage"
chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage
- name: Packaging appimage
run: |
set -x
APPIMAGE_DST_PATH=$GITHUB_WORKSPACE/${PRODUCT}.AppDir
mkdir -p ${APPIMAGE_DST_PATH}
cd $GITHUB_WORKSPACE
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr -DUSE_LAUNCHER_ABSOLUTE_PATH:BOOL=OFF
make -j$(nproc) DESTDIR=${APPIMAGE_DST_PATH} install
rm -rf ${APPIMAGE_DST_PATH}/usr/include
rm -rf ${APPIMAGE_DST_PATH}/usr/lib
export EXTRA_PLATFORM_PLUGINS="libqwayland-generic.so"
export EXTRA_QT_MODULES="waylandcompositor"
export QMAKE=/usr/lib/qt6/bin/qmake
${PWD}/linuxdeploy-x86_64.AppImage --appdir ${APPIMAGE_DST_PATH} --plugin qt --output appimage
mv $GITHUB_WORKSPACE/Flameshot-${VERSION}-x86_64.AppImage $GITHUB_WORKSPACE/Flameshot-${VERSION}.x86_64.AppImage
- name: SHA256Sum of appimage package
run: |
cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; }
sha256sum Flameshot-${VERSION}.x86_64.AppImage | tee Flameshot-${VERSION}.x86_64.AppImage.sha256sum
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-appimage-x86_64
path: |
${{ github.workspace }}/Flameshot-*.x86_64.AppImage
${{ github.workspace }}/Flameshot-*.x86_64.AppImage.sha256sum
overwrite: true
flatpak-pack:
name: Build flatpak on ubuntu 24.04
runs-on: ubuntu-24.04
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Update flatpak manifest with commit SHA
run: |
git_hash=$(git rev-parse HEAD)
sed -i "s/branch: master/commit: ${git_hash}/" packaging/flatpak/org.flameshot.Flameshot.yml
echo "=======FLATPAK MANIFEST========"
cat packaging/flatpak/org.flameshot.Flameshot.yml
echo "==============================="
- name: Setup flatpak
run: |
sudo apt-get -y -qq update
sudo apt-get install -y flatpak flatpak-builder
- name: Setup Flathub
run: |
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install -y --noninteractive flathub org.kde.Sdk//6.9 org.kde.Platform//6.9
- name: Packaging flatpak
run: |
BUNDLE="org.flameshot.Flameshot_${VERSION}_x86_64.flatpak"
MANIFEST_PATH=$GITHUB_WORKSPACE/packaging/flatpak/org.flameshot.Flameshot.yml
RUNTIME_REPO="https://flathub.org/repo/flathub.flatpakrepo"
APP_ID="org.flameshot.Flameshot"
BRANCH="master"
flatpak-builder --user --disable-rofiles-fuse --repo=repo --force-clean flatpak_app ${MANIFEST_PATH} --install-deps-from=flathub
flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH}
mv $GITHUB_WORKSPACE/org.flameshot.Flameshot_${VERSION}_x86_64.flatpak $GITHUB_WORKSPACE/org.flameshot.Flameshot-${VERSION}.x86_64.flatpak
- name: SHA256Sum of flatpak package
run: |
cd "$GITHUB_WORKSPACE/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/'!"; exit 11 ; }
sha256sum org.flameshot.Flameshot-${VERSION}.x86_64.flatpak | tee org.flameshot.Flameshot-${VERSION}.x86_64.flatpak.sha256sum
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-flatpak-x86_64
path: |
${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak
${{ github.workspace }}/org.flameshot.Flameshot-*.x86_64.flatpak.sha256sum
overwrite: true
snap-pack:
name: Build snap on ubuntu latest
runs-on: ubuntu-latest
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Packaging snap
uses: snapcore/action-build@v1
id: snapcraft
- name: Rename snap name
shell: bash
run: |
mkdir -p $GITHUB_WORKSPACE/build
cp ${{ steps.snapcraft.outputs.snap }} $GITHUB_WORKSPACE/build/${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap
- name: SHA256Sum of snap package
run: |
cd "$GITHUB_WORKSPACE/build/" || { >&2 echo "Cannot cd to '$GITHUB_WORKSPACE/build/'!"; exit 11 ; }
sha256sum ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap | tee ${PRODUCT}-${VERSION}-${RELEASE}.amd64.snap.sha256sum
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-snap-x86_64
path: |
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap
${{ github.workspace }}/build/${{ env.PRODUCT }}-*-${{ env.RELEASE }}.amd64.snap.sha256sum
overwrite: true
================================================
FILE: .github/workflows/MacOS-pack.yml
================================================
name: Packaging(MacOS)
on:
push:
branches:
- master
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
pull_request:
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
workflow_dispatch:
env:
PRODUCT: flameshot
jobs:
dmg-pack:
name: Build dmg on ${{ matrix.dist.os }} ${{ matrix.dist.arch }}
strategy:
fail-fast: false
matrix:
dist:
- {
os: macos-15,
arch: arm64
}
- {
os: macos-15,
arch: intel
}
runs-on: ${{ matrix.dist.os }}
env:
APP_NAME: flameshot
DIR_BUILD: build
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Install Qt
run: brew install qt@6
- name: Configure
run: |
rm -rf "${DIR_BUILD}"/src/flameshot.dmg "${DIR_BUILD}"/src/flameshot.app/
cmake -GNinja -S . -B "${DIR_BUILD}" -DQt6_DIR=$(brew --prefix qt6)/lib/cmake/Qt6 -DUSE_MONOCHROME_ICON=True
- name: Compile
run: |
cmake --build "${DIR_BUILD}"
- name: Build dmg package
run: |
cd "${DIR_BUILD}"
ninja create_dmg
- name: Artifact Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-macos-${{ matrix.dist.arch }}
path: ${{ github.workspace }}/build/src/Flameshot-${{ env.VERSION }}.dmg
overwrite: true
================================================
FILE: .github/workflows/Windows-pack.yml
================================================
name: Packaging(Windows)
on:
push:
branches:
- master
- fix*
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
pull_request:
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
workflow_dispatch:
env:
PRODUCT: flameshot
jobs:
windows-pack:
name: VS 2022 ${{ matrix.config.arch }}-${{ matrix.type }}
runs-on: windows-2025
env:
VCINSTALLDIR: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC
# 2025.02.14
VCPKG_VERSION: d5ec528843d29e3a52d745a64b469f810b2cedbf
VCPKG_PACKAGES: openssl-windows
OPENSSL_ROOT_DIR: ${{ github.workspace }}\vcpkg\installed\${{ matrix.config.vcpkg_triplet }}\
strategy:
fail-fast: false
matrix:
qt_ver: [6.9.3]
qt_target: [desktop]
config:
- {
arch: x64,
generator: "-G'Visual Studio 17 2022' -A x64",
vcpkg_triplet: x64-windows,
qt_arch: win64_msvc2022_64,
qt_arch_install: msvc2022_64,
pak_arch: win64
}
type: [portable, installer]
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
# ref: master
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Fix Python path
shell: pwsh
run: |
Remove-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python*.exe" -Force -ErrorAction SilentlyContinue
- name: Set env & Print flameshot version
shell: bash
run: |
last_committed_tag=$(git tag -l --sort=-v:refname | head -1)
git_revno=$(git rev-list $(git describe --tags --abbrev=0)..HEAD --count)
git_hash=$(git rev-parse --short HEAD)
ver_info=${last_committed_tag}+git${git_revno}.${git_hash}
echo "=======FLAMESHOT VERSION========"
echo ${last_committed_tag:1}
echo "Details: ${ver_info}"
echo "================================"
# This will allow to build pre-preleases without git tag
# echo "VERSION=${last_committed_tag:1}" >> $GITHUB_ENV
echo "VERSION=$(cat CMakeLists.txt |grep 'set.*(.*FLAMESHOT_VERSION' | sed 's/[^0-9.]*//' |sed 's/)//g')" >> $GITHUB_ENV
echo "VER_INFO=${ver_info}" >> $GITHUB_ENV
echo "GIT_HASH=${git_hash}" >> $GITHUB_ENV
- name: Restore from cache and run vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgArguments: ${{env.VCPKG_PACKAGES}}
vcpkgDirectory: '${{ github.workspace }}\vcpkg'
appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: ${{ matrix.qt_ver }}
cache: 'true'
cache-key-prefix: install-qt-action-${{ matrix.qt_ver }}
target: ${{ matrix.qt_target }}
arch: ${{ matrix.config.qt_arch }}
modules: 'qtimageformats'
dir: '${{ github.workspace }}/build/'
- name: Configure
working-directory: build
shell: pwsh
run: |
cmake .. ${{matrix.config.generator}} `
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" `
-DENABLE_OPENSSL=ON `
-DCMAKE_BUILD_TYPE=Release `
-DUSE_PORTABLE_CONFIG=${{ contains(matrix.type, 'portable') }}
- name: Compile
working-directory: build
shell: pwsh
run: cmake --build . --config Release
- name: CPack
working-directory: build
shell: pwsh
run: |
# Chocolately made their own package called cpack and its first in the path. This is a hack since we are only using cmake's cpack, doesn't seem to be required after a CI update
#Remove-Item C:\ProgramData\Chocolatey\bin\cpack.exe
If ($env:TYPE -eq "installer")
{
cpack -G WIX -B "$env:GITHUB_WORKSPACE\build\Package"
}
ElseIf($env:TYPE -eq "portable")
{
cpack -G ZIP -B "$env:GITHUB_WORKSPACE\build\Package"
}
env:
TYPE: ${{matrix.type}}
- name: Package Clean
shell: pwsh
run: |
# Remove-Item $env:GITHUB_WORKSPACE\build\Package\_CPack_Packages -Recurse
New-Item -Path $env:GITHUB_WORKSPACE\build\Package\installer -ItemType Directory
New-Item -Path $env:GITHUB_WORKSPACE\build\Package\portable -ItemType Directory
- name: Package Prepare (installer)
if: matrix.type == 'installer'
shell: pwsh
run: |
Move-Item -Path $env:GITHUB_WORKSPACE/build/Package/Flameshot-*-${{ matrix.config.pak_arch }}.msi -Destination $env:GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi
- name: Package Prepare (portable)
if: matrix.type == 'portable'
shell: pwsh
run: |
Move-Item -Path $env:GITHUB_WORKSPACE/build/Package/flameshot-*-${{ matrix.config.pak_arch }}.zip -Destination $env:GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip
- name: SHA256Sum of Windows installer
if: matrix.type == 'installer'
shell: bash
run: |
sha256sum $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi
sha256sum $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi > $GITHUB_WORKSPACE/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi.sha256sum
- name: SHA256Sum of Windows portable
if: matrix.type == 'portable'
shell: bash
run: |
sha256sum $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip
sha256sum $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip > $GITHUB_WORKSPACE/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip.sha256sum
- name: Artifact Upload
if: matrix.type == 'installer'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-win-${{ matrix.config.arch }}-${{ matrix.type }}
path: |
${{ github.workspace }}/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi
${{ github.workspace }}/build/Package/installer/Flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.msi.sha256sum
overwrite: true
- name: Artifact Upload
if: matrix.type == 'portable'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT }}-${{ env.VER_INFO }}-artifact-win-${{ matrix.config.arch }}-${{ matrix.type }}
path: |
${{ github.workspace }}/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip
${{ github.workspace }}/build/Package/portable/flameshot-${{ env.VERSION }}-${{ matrix.config.pak_arch }}.zip.sha256sum
overwrite: true
================================================
FILE: .github/workflows/build_cmake.yml
================================================
name: Building(CMake)
on:
push:
branches: [ master ]
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
pull_request:
branches: [ master ]
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
workflow_dispatch:
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: RelWithDebInfo
jobs:
linux-build:
name: ${{ matrix.os}}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-24.04]
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Checkout Source code
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Install Dependencies
run: |
sudo apt-get -y -qq update
sudo apt-get -y --no-install-recommends install \
cmake \
extra-cmake-modules \
build-essential \
qt6-base-dev \
qt6-svg-dev \
qt6-tools-dev \
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{runner.workspace}}/build
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment variable
# access regardless of the host operating system
shell: bash
working-directory: ${{runner.workspace}}/build
# Note the current convention is to use the -S and -B options here to specify source
# and build directories. We need to source the profile file to make sure conan is in PATH
run: |
cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
- name: Build
working-directory: ${{runner.workspace}}/build
shell: bash
# Execute the build. You can specify a specific target with "--target <NAME>"
run: cmake --build . --config $BUILD_TYPE
- name: Test
working-directory: ${{runner.workspace}}/build
shell: bash
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest -C $BUILD_TYPE
windows-build:
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "Windows 2022 MSVC",
artifact: "Windows-MSVC.tar.xz",
os: windows-2022,
cc: "cl", cxx: "cl",
environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat",
qt_ver: '6.9.3'
}
steps:
- uses: actions/checkout@v4
- name: Fix Python path
shell: pwsh
run: |
Remove-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python*.exe" -Force -ErrorAction SilentlyContinue
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: ${{ matrix.config.qt_ver }}
cache: 'true'
cache-key-prefix: install-qt-action-${{ matrix.config.qt_ver }}
target: desktop
dir: '${{ github.workspace }}/build/'
- name: Configure
working-directory: build
shell: powershell
run: |
cmake -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE ../
- name: Build
working-directory: build
shell: powershell
run: |
cmake --build . --config $env:BUILD_TYPE
================================================
FILE: .github/workflows/clang-format.yml
================================================
name: test-clang-format
on:
push:
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
pull_request:
paths-ignore:
- 'README.md'
- 'LICENSE'
- 'docs/**'
- 'data/translations/*.ts'
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Source code
if: github.event_name == 'push'
uses: actions/checkout@v4
- name: Checkout Source code
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: DoozyX/clang-format-lint-action@v0.13
with:
source: './src'
extensions: 'h,cpp'
clangFormatVersion: 11
style: file
================================================
FILE: .github/workflows/deploy-dev-docs.yml
================================================
name: Deploy developer docs
on:
push:
branches: [ master, docs ]
paths:
- 'src/**'
- 'docs/dev/**'
- '.github/workflows/deploy-dev-docs.yml'
jobs:
build-and-deploy:
runs-on: ubuntu-22.04
steps:
- name: Install dependencies
run: |
sudo apt-get --yes --quiet update
sudo apt-get --yes --no-install-recommends install doxygen
pip install \
mkdocs \
mkdocs-material \
git+https://github.com/veracioux/mkdoxy@v1.0.0
- name: Checkout flameshot source
uses: actions/checkout@v4
with:
path: 'flameshot'
- name: Build docs
working-directory: ${{github.workspace}}/flameshot/docs/dev
run: |
make build
- name: Checkout flameshot website
uses: actions/checkout@v4
with:
repository: 'flameshot-org/flameshot-org.github.io'
ref: 'gh-pages'
path: 'website'
- name: Configure git credentials for website repo
working-directory: ${{github.workspace}}/website
run: |
git config user.name "GitHub Actions"
git config user.email "github-actions-bot@users.noreply.github.com"
git config http.https://github.com/.extraheader 'AUTHORIZATION basic ${{secrets.TOKEN_PUSH_TO_WEBSITE_REPO}}'
git remote add destination "https://x-access-token:${{secrets.TOKEN_PUSH_TO_WEBSITE_REPO}}@github.com/flameshot-org/flameshot-org.github.io"
- name: Add developer docs to website deployment
working-directory: ${{github.workspace}}/website
run: |
# Create empty dev-docs-staging branch
git checkout --orphan dev-docs-staging
git rm -r --cached .
rm -rf docs/dev
# Copy generated docs over
mkdir -p docs
mv "${{github.workspace}}/flameshot/docs/dev/output" \
"./docs/dev"
# Commit docs/dev to the dev-docs-staging branch
git add docs/dev
HASH="$(git --git-dir="${{github.workspace}}/flameshot/.git" rev-parse HEAD)"
git commit --message "Add developer docs from flameshot@$HASH"
# Apply changes to gh-pages
git checkout --force gh-pages
git checkout dev-docs-staging -- docs/dev
# Commit (we use `|| true` because the commit could be empty and thus fail)
git commit --message "Add developer docs from flameshot@$HASH" || true
- name: Push to website repo
working-directory: ${{github.workspace}}/website
run: |
git push --force destination dev-docs-staging
git push destination gh-pages
================================================
FILE: .gitignore
================================================
# common
.idea
.cache
# C++ objects and libs
*.slo
*.lo
*.o
*.a
*.la
*.lai
*.so
*.dll
*.dylib
# Qt-es
/.qmake.cache
/.qmake.stash
*.pro.user
*.pro.user.*
*.qbs.user
*.qbs.user.*
*.moc
moc_*.cpp
qrc_*.cpp
ui_*.h
Makefile*
*build-*
*.qm
# QtCreator
*.autosave
# QtCtreator Qml
*.qmlproject.user
*.qmlproject.user.*
# QtCtreator CMake
CMakeLists.txt.user
# python
venv/*
# Created by https://www.gitignore.io/api/snapcraft
### Snapcraft ###
# Snapcraft
parts/
prime/
stage/
*.snap
.snapcraft/
flameshot*.tar.bz2
.vscode/
build/
data/flatpak/.flatpak-builder
# NVIM
*~
# Jetbrains
.idea/
.run
# MacOS
.DS_Store
# End of https://www.gitignore.io/api/snapcraft
#MacOS Crap
.DS_Store
# Miscellaneous
!docs/dev/Makefile
# Nix
result
result-*
# direnv
.direnv
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.22)
# cmake_policy(SET CMP0076 OLD)
set(FLAMESHOT_VERSION 13.3.0)
# Flameshot-org
set(GIT_API_URL "https://api.github.com/repos/flameshot-org/flameshot/releases/latest")
project(
flameshot
VERSION ${FLAMESHOT_VERSION}
LANGUAGES CXX)
set(PROJECT_NAME_CAPITALIZED "Flameshot")
include(FetchContent)
#Must be set before fetching external content!
#QT_DEFAULT_MAJOR_VERSION used by QHotkey
set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "")
#QT_VERSION_MAJOR used by Flameshot and QtColorWidgets
set(QT_VERSION_MAJOR 6 CACHE STRING "")
#BUILD_SHARED_LIBS used by QHotkey and QtColorWidgets
option(BUILD_SHARED_LIBS OFF)
#QHOTKEY_INSTALL used by QHotkey; must be disabled on Windows
if(WIN32)
set(QHOTKEY_INSTALL OFF CACHE BOOL "qHotkey install")
endif()
#Needed due to linker error with QtColorWidget
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Dependency can be fetched via flatpak builder
if(EXISTS "${CMAKE_SOURCE_DIR}/external/Qt-Color-Widgets/CMakeLists.txt")
add_subdirectory("${CMAKE_SOURCE_DIR}/external/Qt-Color-Widgets" EXCLUDE_FROM_ALL)
else()
FetchContent_Declare(
qtColorWidgets
GIT_REPOSITORY https://gitlab.com/mattbas/Qt-Color-Widgets.git
GIT_TAG 4f3c7e2af8e3138d89533475af66df42ccf08ef8
)
#Workaround for duplicate GUID in windows WIX installer
if(WIN32)
FetchContent_GetProperties(qtColorWidgets)
if(NOT qtcolorwidgets_POPULATED)
FetchContent_Populate(qtColorWidgets)
add_subdirectory(${qtcolorwidgets_SOURCE_DIR} ${qtcolorwidgets_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
else()
FetchContent_MakeAvailable(qtColorWidgets)
endif()
endif()
# This can be read from ${PROJECT_NAME} after project() is called
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
endif()
# Configuration options
set(DEFAULT_USE_PORTABLE_CONFIG FALSE)
if(WIN32)
set(DEFAULT_USE_PORTABLE_CONFIG TRUE)
# For Windows RC file.
add_definitions(-DFLAMESHOT_VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR})
add_definitions(-DFLAMESHOT_VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR})
add_definitions(-DFLAMESHOT_VERSION_BUGFIX=${CMAKE_PROJECT_VERSION_PATCH})
add_definitions(-DFLAMESHOT_VERSION_BUILD=1)
add_definitions(-DFLAMESHOT_VERSION_STRING="${PROJECT_VERSION}")
elseif(APPLE)
set(Qt6_DIR "$(brew --prefix qt6)/lib/cmake/Qt6/" CACHE PATH "directory where Qt6Config.cmake exists.")
endif()
set(USE_PORTABLE_CONFIG
${DEFAULT_USE_PORTABLE_CONFIG}
CACHE BOOL "Store config in application folder")
if(USE_PORTABLE_CONFIG)
add_compile_definitions(USE_PORTABLE_CONFIG)
endif()
option(FLAMESHOT_DEBUG_CAPTURE "Enable mode to make debugging easier" OFF)
option(USE_MONOCHROME_ICON "Build using monochrome icon as default" OFF)
option(GENERATE_TS "Regenerate translation source files" OFF)
option(USE_KDSINGLEAPPLICATION "Use KDSingleApplication library" ON)
option(USE_BUNDLED_KDSINGLEAPPLICATION "Use a bundled version of the KDSingleApplication library" ${USE_KDSINGLEAPPLICATION})
option(USE_LAUNCHER_ABSOLUTE_PATH "Use absolute path for the desktop launcher" ON)
option(USE_WAYLAND_CLIPBOARD "USE KF Gui Wayland Clipboard" OFF)
option(DISABLE_UPDATE_CHECKER "Disable check for updates" OFF)
option(ENABLE_IMGUR "Enable Imgur Uploader" OFF)
if(ENABLE_IMGUR)
add_compile_definitions(ENABLE_IMGUR)
endif()
if(DISABLE_UPDATE_CHECKER)
add_compile_definitions(DISABLE_UPDATE_CHECKER)
endif()
include(cmake/StandardProjectSettings.cmake)
add_library(project_options INTERFACE)
target_compile_features(project_options INTERFACE cxx_std_20)
add_library(project_warnings INTERFACE)
# enable cache system
include(cmake/Cache.cmake)
# standard compiler warnings
include(cmake/CompilerWarnings.cmake)
# set_project_warnings(project_warnings)
# sanitizer options if supported by compiler
include(cmake/Sanitizers.cmake)
enable_sanitizers(project_options)
# allow for static analysis options include(cmake/StaticAnalyzers.cmake)
if(USE_KDSINGLEAPPLICATION)
if(USE_BUNDLED_KDSINGLEAPPLICATION)
set(KDSingleApplication_EXAMPLES OFF CACHE BOOL "Don't build the examples")
set(KDSingleApplication_STATIC ON CACHE BOOL "Build static versions of the libraries")
# Check if KDSingleApplication is available locally
if(EXISTS "${CMAKE_SOURCE_DIR}/external/KDSingleApplication/CMakeLists.txt")
add_subdirectory("${CMAKE_SOURCE_DIR}/external/KDSingleApplication")
else()
FetchContent_Declare(
kdsingleApplication
GIT_REPOSITORY https://github.com/KDAB/KDSingleApplication.git
GIT_TAG v1.2.0
)
FetchContent_MakeAvailable(kdsingleApplication)
endif()
else()
find_package(KDSingleApplication-qt6 REQUIRED)
endif()
endif()
# ToDo: Check if this is used anywhere
option(BUILD_STATIC_LIBS ON)
if(WIN32 OR APPLE)
FetchContent_Declare(
qHotKey
GIT_REPOSITORY https://github.com/flameshot-org/QHotkey
GIT_TAG master
)
FetchContent_MakeAvailable(QHotKey)
endif()
add_subdirectory(src)
# CPack
set(CPACK_PACKAGE_VENDOR "flameshot-org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Powerful yet simple to use screenshot software.")
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_PACKAGE_HOMEPAGE_URL "https://flameshot.org")
set(CPACK_PACKAGE_CONTACT "flameshot-org developers <info@flameshot.org>")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data/img/app/org.flameshot.Flameshot.svg") # TODO: Can any generator make
# use of this?
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") # TODO: Where is this used? Do we need a better
# source?
if(WIN32)
# Include all dynamically linked runtime libraries such as MSVCRxxx.dll
include(InstallRequiredSystemLibraries)
if(USE_PORTABLE_CONFIG)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-win64")
set(CPACK_GENERATOR ZIP)
else()
set(CPACK_GENERATOR WIX ZIP)
set(CPACK_PACKAGE_NAME "${PROJECT_NAME_CAPITALIZED}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_CAPITALIZED}")
set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} "${PROJECT_NAME_CAPITALIZED}")
set(CPACK_CREATE_DESKTOP_LINKS ${PROJECT_NAME})
# WIX (Windows .msi installer)
# 48x48 pixels
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/data/img/app/flameshot.ico")
# Supported languages can be found at http://wixtoolset.org/documentation/manual/v3/wixui/wixui_localization.html
# set(CPACK_WIX_CULTURES "ar-SA,bg-BG,ca-ES,hr-HR,cs-CZ,da-DK,nl-NL,en-US,et-EE,fi-FI,fr-FR,de-DE")
set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/packaging/win-installer/Bitmaps/CPACK_WIX_UI_BANNER.BMP")
set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/packaging/win-installer/Bitmaps/CPACK_WIX_UI_DIALOG.BMP")
set(CPACK_WIX_PROPERTY_ARPHELPLINK "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_WIX_ROOT_FEATURE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set(CPACK_WIX_LIGHT_EXTRA_FLAGS "-dcl:high") # set high compression
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/packaging/win-installer/LICENSE/GPL-3.0.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
set(CPACK_WIX_UPGRADE_GUID "26D8062A-66D9-48D9-8924-42090FB9B3F9")
endif()
elseif(APPLE)
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-osx")
set(CPACK_GENERATOR ZIP)
else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-linux")
set(CPACK_GENERATOR TGZ)
set(CPACK_SOURCE_GENERATOR TGZ)
endif()
include(CPack)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at borgman.jeremy@pm.me. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: PKGBUILD
================================================
pkgname=flameshot-git
_pkgname=flameshot
pkgver=r2022.277eb2f4
pkgrel=1
pkgdesc="Powerful yet simple to use screenshot software"
arch=('i686' 'x86_64' 'aarch64' 'armv7h')
url="https://github.com/flameshot-org/flameshot"
license=('GPL-3.0-or-later')
depends=('qt6-base' 'qt6-svg' 'hicolor-icon-theme' 'kguiaddons')
makedepends=('qt6-tools' 'cmake' 'ninja')
optdepends=(
'gnome-shell-extension-appindicator: for system tray icon if you are using Gnome'
'xdg-desktop-portal: for wayland support, you will need the implementation for your wayland desktop environment'
'qt6-imageformats: for additional export image formats (e.g. tiff, webp, and more)'
)
provides=(flameshot)
conflicts=(flameshot)
source=()
prepare() {
cp -R "${startdir}/" "${srcdir}/${_pkgname}/"
}
pkgver() {
cd "${srcdir}/${_pkgname}"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "${srcdir}/${_pkgname}"
cmake -GNinja -B build -S . \
-DCMAKE_BUILD_TYPE=None \
-DCMAKE_INSTALL_PREFIX=/usr \
-DUSE_WAYLAND_CLIPBOARD=1 \
-DDISABLE_UPDATE_CHECKER=1 \
cmake --build build
}
package() {
cd "${srcdir}/${_pkgname}"
DESTDIR="${pkgdir}" cmake --install build
}
================================================
FILE: README.md
================================================
<div align="center">
<p>
<h1>
<a href="https://github.com/flameshot-org/flameshot">
<img src="data/img/app/org.flameshot.Flameshot.svg" alt="Flameshot" />
</a>
<br />
Flameshot
</h1>
<h4>Powerful yet simple to use screenshot software.</h4>
</p>
<p>
<a href="https://github.com/flameshot-org/flameshot/actions?query=workflow%3APackaging%28Linux%29">
<img src="https://img.shields.io/github/actions/workflow/status/flameshot-org/flameshot/Linux-pack.yml?branch=master&label=gnu%2Flinux" alt="GNU/Linux Build Status" />
</a>
<a href="https://github.com/flameshot-org/flameshot/actions?query=workflow%3APackaging%28Windows%29">
<img src="https://img.shields.io/github/actions/workflow/status/flameshot-org/flameshot/Windows-pack.yml?branch=master&label=windows" alt="Windows Build Status" />
</a>
<a href="https://github.com/flameshot-org/flameshot/actions?query=workflow%3APackaging%28MacOS%29">
<img src="https://img.shields.io/github/actions/workflow/status/flameshot-org/flameshot/MacOS-pack.yml?branch=master&label=macos" alt="MacOS Build Status" />
</a>
<a href="https://flameshot.org/docs/installation/development-build/">
<img src="https://img.shields.io/badge/nightly%20builds-available-%23AA00FF" alt="Nightly Build" />
</a>
<a href="https://github.com/flameshot-org/flameshot/releases">
<img src="https://img.shields.io/github/release/flameshot-org/flameshot.svg" alt="Latest Stable Release" />
</a>
<a href="https://github.com/flameshot-org/flameshot/releases">
<img src="https://img.shields.io/github/downloads/flameshot-org/flameshot/total.svg" alt="Total Downloads" />
</a>
<a href="https://github.com/flameshot-org/flameshot/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/flameshot-org/flameshot.svg" alt="License" />
</a>
<a href="https://hosted.weblate.org/engage/flameshot/">
<img src="https://hosted.weblate.org/widgets/flameshot/-/flameshot/svg-badge.svg" alt="Translation status" />
</a>
<a href="https://flameshot.org">
<img src="https://img.shields.io/github/release/flameshot-org/flameshot.svg?label=docs" alt="Docs" />
</a>
<br>
<a href="https://snapcraft.io/flameshot">
<img alt="Get it from the Snap Store" src="https://snapcraft.io/static/images/badges/en/snap-store-black.svg" />
</a>
<a href="https://flathub.org/apps/details/org.flameshot.Flameshot">
<img height="60" alt="Get it on Flathub" src="https://flathub.org/api/badge?locale=en"/>
</a>
</p>
</div>
## Preview

## Index
- [Features](#features)
- [Usage](#usage)
- [CLI configuration](#cli-configuration)
- [Config file](#config-file)
- [Keyboard Shortcuts](#keyboard-shortcuts)
- [Local](#local)
- [Global](#global)
- [On KDE Plasma desktop](#on-kde-plasma-desktop)
- [On Gnome (Ubuntu, Fedora and more)](#on-gnome-ubuntu-fedora-and-more)
- [On XFCE 4](#on-xfce-4)
- [On Fluxbox](#on-fluxbox)
- [Considerations](#considerations)
- [Installation](#installation)
- [Prebuilt Packages](#prebuilt-packages)
- [Packages from Repository](#packages-from-repository)
- [MacOS](#macos)
- [Windows](#windows)
- [Compilation](#compilation)
- [Dependencies](#dependencies)
- [Compile-time](#compile-time)
- [Run-time](#run-time)
- [Optional](#optional)
- [Debian](#debian)
- [Fedora](#fedora)
- [Arch](#arch)
- [Build](#build)
- [Install](#install)
- [License](#license)
- [Privacy Policy](#privacy-policy)
- [Code Signing Policy](#code-signing-policy)
- [Contribute](#contribute)
- [Acknowledgment](#acknowledgment)
## Features
- Customizable appearance.
- Easy to use.
- In-app screenshot editing.
- DBus interface.
- Upload to Imgur.
## Usage
Executing the command `flameshot` without parameters will launch a running
instance of the program in the background without taking actions.
If your desktop environment provides tray area, a tray icon will also
appear in the tray for users to perform configuration and management.
Example commands:
- Capture with GUI:
```shell
flameshot gui
```
- Capture with GUI with custom save path:
```shell
flameshot gui -p ~/myStuff/captures
```
- Capture with GUI after 2 seconds delay (can be useful to take screenshots of mouse hover tooltips, etc.):
```shell
flameshot gui -d 2000
```
- Fullscreen capture with custom save path (no GUI) and delayed:
```shell
flameshot full -p ~/myStuff/captures -d 5000
```
- Fullscreen capture with custom save path copying to clipboard:
```shell
flameshot full -c -p ~/myStuff/captures
```
- Capture the screen containing the mouse and print the image (bytes) in PNG format:
```shell
flameshot screen -r
```
- Capture the screen number 1 and copy it to the clipboard:
```shell
flameshot screen -n 1 -c
```
In case of doubt choose the first or the second command as shortcut in your favorite desktop environment.
A systray icon will be in your system's panel while Flameshot is running.
Do a right click on the tray icon and you'll see some menu items to open the configuration window and the information window.
Check out the About window to see all available shortcuts in the graphical capture mode.
### Usage on Windows
On Windows, `flameshot.exe` will behave as expected for all supported command-line arguments,
but it will not output any text to the console. This is problematic if, for example, you are
running `flameshot.exe -h`.
If you require console output, run `flameshot-cli.exe` instead. `flameshot-cli.exe` is a minimal wrapper around `flameshot.exe` that ensures all stdout is captured and output to the console.
### CLI configuration
You can use the graphical menu to configure Flameshot, but alternatively you can use your terminal or scripts to do so.
- Open the configuration menu:
```shell
flameshot config
```
- Show the initial help message in the capture mode:
```shell
flameshot config --showhelp true
```
- For more information about the available options use the help flag:
```shell
flameshot config -h
```
### Config file
You can also edit some of the settings (like overriding the default colors) in the configuration file.\
Linux path: `~/.config/flameshot/flameshot.ini`.\
Windows path: `C:\Users\{YOURNAME}\AppData\Roaming\flameshot\flameshot.ini`.
When copying over the config file from Linux to Windows or vice versa,
make sure to correct the `savePath` variable,\
so that the screenshots save in the right directory on your desired file system.
## Keyboard shortcuts
### Local
These shortcuts are available in GUI mode:
| Keys | Description |
|--- |--- |
| <kbd>P</kbd> | Set the Pencil as paint tool |
| <kbd>D</kbd> | Set the Line as paint tool |
| <kbd>A</kbd> | Set the Arrow as paint tool |
| <kbd>S</kbd> | Set Selection as paint tool |
| <kbd>R</kbd> | Set the Rectangle as paint tool |
| <kbd>C</kbd> | Set the Circle as paint tool |
| <kbd>M</kbd> | Set the Marker as paint tool |
| <kbd>T</kbd> | Add text to your capture |
| <kbd>B</kbd> | Set Pixelate as the paint tool |
| <kbd>←</kbd>, <kbd>↓</kbd>, <kbd>↑</kbd>, <kbd>→</kbd> | Move selection 1px |
| <kbd>Shift</kbd> + <kbd>←</kbd>, <kbd>↓</kbd>, <kbd>↑</kbd>, <kbd>→</kbd> | Resize selection 1px |
| <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>←</kbd>, <kbd>↓</kbd>, <kbd>↑</kbd>, <kbd>→</kbd> | Symmetrically resize selection 2px |
| <kbd>Esc</kbd> | Quit capture |
| <kbd>Ctrl</kbd> + <kbd>M</kbd> | Move the selection area |
| <kbd>Ctrl</kbd> + <kbd>C</kbd> | Copy to clipboard |
| <kbd>Ctrl</kbd> + <kbd>S</kbd> | Save selection as a file |
| <kbd>Ctrl</kbd> + <kbd>Z</kbd> | Undo the last modification |
| <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Z</kbd> | Redo the next modification |
| <kbd>Ctrl</kbd> + <kbd>Q</kbd> | Leave the capture screen |
| <kbd>Ctrl</kbd> + <kbd>O</kbd> | Choose an app to open the capture |
| <kbd>Ctrl</kbd> + <kbd>Return</kbd> | Commit text in text area|
| <kbd>Ctrl</kbd> + <kbd>Backspace</kbd> | Cancel current selection |
| <kbd>Return</kbd> | Upload the selection to Imgur |
| <kbd>Spacebar</kbd> | Toggle visibility of sidebar with options of the selected tool, color picker for the drawing color and history menu |
| <kbd>G</kbd> | Starts the color picker |
| Right Click | Show the color wheel |
| Mouse Wheel | Change the tool's thickness |
| <kbd>Print screen</kbd> | Capture Screen |
| <kbd>Shift</kbd> + <kbd>Print</kbd> | Screenshot History |
| <kbd>Ctrl</kbd> + drawing *line*, *arrow* or *marker* | Drawing only horizontally, vertically or diagonally |
| <kbd>Ctrl</kbd> + drawing *rectangle* or *circle* | Keeping aspect ratio |
<kbd>Shift</kbd> + drag a handler of the selection area: mirror redimension in the opposite handler.
### Global
- Windows: <kbd>Prt Sc</kbd> (fixed, cannot be changed) and <kbd>Win</kbd> + <kbd>Shift</kbd> + <kbd>X</kbd> (can be changed in the settings)
- macOS: <kbd>cmd</kbd> + <kbd>Shift</kbd> + <kbd>X</kbd> (can be changed in the settings)
- Linux: Flameshot doesn't yet support <kbd>Prt Sc</kbd> out of the box, but you can set this up with a bit of configuration:
#### On KDE Plasma desktop
To make configuration easier, there's a [file](docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys) in the repository that more or less automates this process. This file will assign the following hotkeys by default:
| Keys | Description |
|--- |--- |
| <kbd>Prt Sc</kbd> | Start the Flameshot screenshot tool and take a screenshot |
| <kbd>Ctrl</kbd> + <kbd>Prt Sc</kbd> | Wait for 3 seconds, then start the Flameshot screenshot tool and take a screenshot |
| <kbd>Shift</kbd> + <kbd>Prt Sc</kbd> | Take a full-screen (all monitors) screenshot and save it |
| <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Prt Sc</kbd> | Take a full-screen (all monitors) screenshot and copy it to the clipboard |
If you don't like the defaults, they can be changed later.
Steps for using the configuration:
1. The configuration file makes Flameshot automatically save screenshots to `~/Pictures/Screenshots` without opening the save dialog. Make sure that folder exists by running:
```shell
mkdir -p ~/Pictures/Screenshots
```
(If you don't like the default location, you can skip this step and configure your preferred directory later.)
2. Download the configuration file:
```shell
cd ~/Desktop
wget https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys
```
3. Make sure you have the `khotkeys` installed using your package manager to enable custom shortcuts in KDE Plasma.
4. Go to _System Settings_ → _Shortcuts_ → _Custom Shortcuts_.
5. If an entry exists for Spectacle (the default KDE screenshot utility), you'll need to disable it because its shortcuts might conflict with Flameshot's. Do this by unchecking the _Spectacle_ entry.
6. Click _Edit_ → _Import..._, navigate to the configuration file and open it.
7. Now the Flameshot entry should appear in the list. Click _Apply_ to apply the changes.
8. If you want to change the default hotkeys, you can expand the entry, select the appropriate action and modify it as you wish; the process is pretty self-explanatory.
9. If you installed Flameshot as a Flatpak, you will need to create a symlink to the command:
```shell
ln -s /var/lib/flatpak/exports/bin/org.flameshot.Flameshot ~/.local/bin/flameshot
```
#### On Gnome (Ubuntu, Fedora and more)
To use Flameshot instead of the default screenshot application in Gnome we need to remove the binding on <kbd>Prt Sc</kbd> key, and then create a new binding for `flameshot gui` ([adapted](https://askubuntu.com/posts/1039949/revisions) from [Pavel's answer on AskUbuntu](https://askubuntu.com/revisions/1036473/1)).
1. Remove the binding on <kbd>Prt Sc</kbd>:
Go to _Settings_ > _Keyboard_ > _View and Customise Shortcuts_ > _Screenshots_ > _Take a screenshot interactively_ and press `backspace`
2. Add custom binding on <kbd>Prt Sc</kbd>:
Go to _Settings_ > _Keyboard_ > _View and Customise Shortcuts_ > _Custom shortcuts_ and press the '+' button at the bottom.
3. Name the command as you like it, e.g. `flameshot`. And in the command insert `/usr/bin/flameshot gui` or `flatpak run org.flameshot.Flameshot gui` if installed via flatpak.
4. Then click "_Set Shortcut.._" and press <kbd>Prt Sc</kbd>. This will show as "_print_".
Now every time you press <kbd>Prt Sc</kbd>, it will start the Flameshot GUI instead of the default application.
#### On XFCE 4
1. Go to `Keyboard` settings
2. Switch to the tab `Application Shortcuts`
3. Find the entry
```text
Command Shortcut
xfce4-screenshooter -fd 1 Print
```
4. Replace `xfce4-screenshooter -fd 1` with `flameshot gui`
Now every time you press <kbd>Prt Sc</kbd> it will start Flameshot GUI instead of the default application.
#### On Fluxbox
1. Edit your `~/.fluxbox/keys` file
2. Add a new entry. `Print` is the key name, `flameshot gui` is the shell command; for more options see [the fluxbox wiki](https://sillyslux.github.io/fluxbox-wiki/en/wiki/Keyboard-Shortcuts/).
```text
Print :Exec flameshot gui
```
3. Refresh Fluxbox configuration with **Reconfigure** option from the menu.
## Considerations
- Experimental Gnome Wayland and Plasma Wayland support.
- If you are using Gnome you need to install the [AppIndicator and KStatusNotifierItem Support](https://extensions.gnome.org/extension/615/appindicator-support/) extension in order to see the system tray icon.
- Press <kbd>Enter</kbd> or <kbd>Ctrl</kbd> + <kbd>C</kbd> when you are in a capture mode and you don't have an active selection and the whole desktop will be copied to your clipboard. Pressing <kbd>Ctrl</kbd> + <kbd>S</kbd> will save your capture to a file. Check the [Shortcuts](#keyboard-shortcuts) for more information.
- Flameshot works best with a desktop environment that includes D-Bus. See this [article](https://wiki.archlinux.org/index.php/Flameshot#Troubleshooting) for tips on using Flameshot in a minimal window manager (dwm, i3, xmonad, etc).
- In order to speed up the first launch of Flameshot (D-Bus init of the app can be slow), consider starting the application automatically on boot.
- Quick tip: If you don't have Flameshot to autostart at boot and you want to set keyboard shortcut, use the following as the command for the keybinding:
```sh
( flameshot &; ) && ( sleep 0.5s && flameshot gui )
```
## Installation
Flameshot can be installed on Linux, Microsoft Windows, and macOS.
### Prebuilt packages
Some prebuilt packages are provided on [the release page of the GitHub project repository](https://github.com/flameshot-org/flameshot/releases).
### Packages from Repository
There are packages available in the repository of some Linux distributions:
- [Arch](https://archlinux.org/packages/extra/x86_64/flameshot/): `pacman -S flameshot`
+ Snapshot also available via AUR: [flameshot-git](https://aur.archlinux.org/packages/flameshot-git).
- [Debian 10+](https://tracker.debian.org/pkg/flameshot): `apt install flameshot`
+ Package for Debian 9 ("Stretch") also [available via stretch-backports](https://backports.debian.org/).
- [Ubuntu](https://launchpad.net/ubuntu/+source/flameshot): `apt install flameshot`
- [openSUSE](https://software.opensuse.org/package/flameshot): `zypper install flameshot`
- [Void Linux](https://github.com/void-linux/void-packages/tree/master/srcpkgs/flameshot): `xbps-install flameshot`
- [Solus](https://dev.getsol.us/source/flameshot/): `eopkg it flameshot`
- [Fedora](https://src.fedoraproject.org/rpms/flameshot): `dnf install flameshot`
- [NixOS](https://search.nixos.org/packages?query=flameshot): `nix-env -iA nixos.flameshot`
- [ALT](https://packages.altlinux.org/en/sisyphus/srpms/flameshot/): `su - -c "apt-get install flameshot"`
- [Snap/Flatpak/AppImage](https://github.com/flameshotapp/packages)
- [Docker](https://github.com/ManuelLR/docker-flameshot)
- [Windows](https://github.com/majkinetor/au-packages/tree/master/flameshot)
### macOS
- [MacPorts](https://www.macports.org): `sudo port selfupdate && sudo port install flameshot`
- [Homebrew](https://brew.sh): `brew install --cask flameshot`
**Note** that because of macOS security features, you may not be able to open flameshot when installed using brew.
If you see the message `“flameshot” cannot be opened because the developer cannot be verified.` you will need to
follow the steps below:
1. Go to the Applications folder (Finder > Go > Applications, or <kbd>Shift</kbd>+<kbd>Command</kbd>+<kbd>A</kbd>)
1. Right-Click on "flameshot.app" and choose "Open" from the context menu
2. In the dialog click "Open"
On MacOs 15 and above, you will have to go to system settings -> privacy and security after doing this and click "Open Anyway" or you can open flameshot first time with the following command.
```sudo xattr -rd com.apple.quarantine /Applications/flameshot.app```
After following all those steps above, `flameshot` will open without problems in your Mac.
### Windows
- [Scoop](https://github.com/ScoopInstaller/Extras/blob/master/bucket/flameshot.json): `scoop install flameshot`
<details>
<summary>Expand this section to see what distros are using an up to date version of flameshot</summary>
<a href="https://repology.org/metapackage/flameshot/versions">
<img src="https://repology.org/badge/vertical-allrepos/flameshot.svg" alt="Packaging status">
</a>
</details>
### Tray icon
**Note** that for the Flameshot icon to appear in your tray area, you should have a systray software installed. This is especially true for users who use minimal [window managers](https://wiki.archlinux.org/index.php/window_manager) such as [dwm](https://dwm.suckless.org/). In some [Desktop Environment](https://wiki.archlinux.org/index.php/Desktop_environment) installations (e.g Gnome), the systray might be missing and you can install an application or plugin (e.g [Gnome shell extension](https://extensions.gnome.org/extension/1503/tray-icons/)) to add the systray to your setup. It has been [reported](https://github.com/flameshot-org/flameshot/issues/1009#issuecomment-700781081)) that icon of some software, including Flameshot, does not show in [gnome-shell-extension-appindicator](https://github.com/ubuntu/gnome-shell-extension-appindicator).
Alternatively, in case you don't want to have a systray, you can always call Flameshot from the terminal. See [Usage section](#usage).
## Compilation
To build the application in your system, you'll need to install the dependencies needed for it and package names might be different for each distribution, see [Dependencies](#dependencies) below for more information. You can also install most of the Qt dependencies via [their installer](https://www.qt.io/download-qt-installer). If you were developing Qt apps before, you probably already have them.
This project uses [CMake](https://cmake.org/) build system, so you need to install it in order to build the project (on most Linux distributions it is available in the standard repositories as a package called `cmake`). If your distribution provides too old version of CMake (e.g. Ubuntu or Debian) you can [download it on the official website](https://cmake.org/download/).
Also you can open and build/debug the project in a C++ IDE. For example, in Qt Creator you should be able to simply open `CMakeLists.txt` via `Open File or Project` in the menu after installing CMake into your system. [More information about CMake projects in Qt Creator](https://doc.qt.io/qtcreator/creator-project-cmake.html).
### Dependencies
#### Compile-time
- Qt >= 6.2.4 (available by default on Ubuntu Jammy)
+ Development tools
- GCC >= 11
- CMake >= 3.22
#### Run-time
- Qt
+ SVG
#### Optional
- Git
- OpenSSL
- CA Certificates
- Qt Image Formats - for additional export image formats (e.g. tiff, webp, and more)
#### Debian
```shell
# Compile-time
apt install g++ cmake build-essential qt6-base-dev qt6-tools-dev-tools qt6-svg-dev qt6-tools-dev
# Run-time
apt install libkf6guiaddons-dev libqt6dbus6 libqt6network6 libqt6core6 libqt6widgets6 libqt6gui6 libqt6svg6 qt6-qpa-plugins
# Optional
apt install git openssl ca-certificates qt6-image-formats-plugins
```
#### Fedora
```shell
# Compile-time
dnf install gcc-c++ cmake qt6-qtbase-devel qt6-qtsvg-devel qt6-qttools qt6-linguist qt6-qttools-devel kf6-kguiaddons-devel
# Run-time
dnf install qt6-qtbase qt6-qtsvg kf6-kguiaddons
# Optional
dnf install git openssl ca-certificates qt6-qtimageformats
```
#### Arch
```shell
# Compile-time
pacman -S cmake base-devel git qt6-base qt6-tools kguiaddons
# Run-time
pacman -S qt6-svg
# Optional
pacman -S openssl ca-certificates qt6-imageformats
```
#### Nix
Development Shell:
```shell
# Without flakes:
nix-shell
# With flakes:
nix develop
```
```shell
# Build flameshot
nix build
# Build and run flameshot
nix run
```
#### macOS
First of all you need to install [brew](https://brew.sh) and then install the dependencies
```shell
brew install qt6
brew install cmake
```
### Build
After installing all the dependencies, Flameshot can be built.
#### Installation/build dir
For the translations to be loaded correctly, the build process needs to be aware of where you want
to install Flameshot.
```shell
# Directory where build files will be placed, may be relative
export BUILD_DIR=build
# Directory prefix where Flameshot will be installed. If you are just building and don't want to
# install, comment this environment variable.
# This excludes the bin/flameshot part of the install,
# e.g. in /opt/flameshot/bin/flameshot, the CMAKE_INSTALL_PREFIX is /opt/flameshot
# This must be an absolute path. Requires CMAKE 3.29.
export CMAKE_INSTALL_PREFIX=/opt/flameshot
# Linux
cmake -S . -B "$BUILD_DIR" \
&& cmake --build "$BUILD_DIR"
#MacOS
cmake -S . -B "$BUILD_DIR" \
-DQt6_DIR="$(brew --prefix qt6)/lib/cmake/Qt6" \
&& cmake --build "$BUILD_DIR"
```
When the `cmake --build` command has completed you can launch Flameshot from the `project_folder/build/src` folder.
### Install
Note that if you install from source, there _is no_ uninstaller, so consider installing to a custom directory.
#### To install into a custom directory
Make sure you are using cmake `>= 3.29` and build Flameshot with `$CMAKE_INSTALL_PREFIX` set to the
installation directory. If this is not done, the translations won't be found when using a custom directory.
Then, run the following:
```bash
# !Build with CMAKE_INSTALL_PREFIX and use cmake >= 3.29! Using an older cmake will cause
# installation into the default /usr/local dir.
# You may need to run this with privileges
cmake --install "$BUILD_DIR"
```
#### To install to the default install directory
```bash
# You may need to run this with privileges
cmake --install "$BUILD_DIR"
```
### FAQ
<https://flameshot.org/docs/guide/faq/>
## License
- The main code is licensed under [GPLv3](LICENSE)
- The logo of Flameshot is licensed under [Free Art License v1.3](data/img/app/flameshotLogoLicense.txt)
- The button icons are licensed under Apache License 2.0. See: https://github.com/google/material-design-icons
- The code at capture/capturewidget.cpp is based on https://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.cpp (GPLv2)
- The code at capture/capturewidget.h is based on https://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.h (GPLv2)
- I copied a few lines of code from KSnapshot regiongrabber.cpp revision `796531` (LGPL)
- Qt-Color-Widgets taken and modified from https://github.com/mbasaglia/Qt-Color-Widgets (see their license and exceptions in the project) (LGPL/GPL)
Info: If I take code from your project and that implies a relicense to GPLv3, you can reuse my changes with the original previous license of your project applied.
## Privacy Policy
This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it.
## Code Signing Policy
For Windows binaries, this program uses free code signing provided by [SignPath.io](https://signpath.io?utm_source=foundation&utm_medium=github&utm_campaign=flameshot), and a certificate by the [SignPath Foundation](https://signpath.org?utm_source=foundation&utm_medium=github&utm_campaign=flameshot).
Code signing is currently a manual process so not every patch release will be signed.
## Contribute
If you want to contribute check the [CONTRIBUTING.md](docs/CONTRIBUTING.md)
## Acknowledgment
Thanks to those who have shown interest in the early development process:
- [lupoDharkael](https://github.com/lupoDharkael)
- [Cosmo](https://github.com/philpem)
- [XerTheSquirrel](https://github.com/XerTheSquirrel)
- [The members of Sugus GNU/Linux](https://github.com/SUGUS-GNULinux)
- ismatori
Thanks to sponsors:
- [Namecheap](https://www.namecheap.com/)
- [JetBrains](https://www.jetbrains.com/)
- [SignPath](https://signpath.io/)
- [addy.io](https://addy.io/)
================================================
FILE: appveyor.yml
================================================
image:
- Visual Studio 2022
clone_folder: c:\projects\source
environment:
Qt6_INSTALL_DIR: 'C:\Qt\6.9.3\msvc2022_64'
PATH: '%Qt6_INSTALL_DIR%\bin;%PATH%'
matrix:
- PORTABLE_CONFIG: OFF
- PORTABLE_CONFIG: ON
build_script:
- cmd: |-
set QTDIR=%Qt6_INSTALL_DIR%
set "VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC"
set "OPENSSL_ROOT_DIR=C:/OpenSSL-v111-Win64"
cmake -S C:\projects\source -B build -G "Visual Studio 17 2022" -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENSSL=ON -DUSE_PORTABLE_CONFIG=%PORTABLE_CONFIG%
cmake --build build --parallel 2 --config Release
- cmd: cd build
- cmd: if "%PORTABLE_CONFIG%"=="OFF" cpack -G WIX -B package
- cmd: if "%PORTABLE_CONFIG%"=="ON" (mkdir portable_exe & copy src\Release\*.exe portable_exe\. & 7z a -tzip portable_exe.zip portable_exe\)
artifacts:
- path: build\package\*.msi
name: installer
- path: build\portable_exe.zip
name: portable exe
deploy:
- provider: Webhook
url: https://app.signpath.io/API/v1/042f605f-b378-45d8-ad16-b7695b071036/Integrations/AppVeyor?ProjectSlug=flameshot&SigningPolicySlug=test-signing
#url: https://app.signpath.io/API/v1/042f605f-b378-45d8-ad16-b7695b071036/Integrations/AppVeyor?ProjectSlug=flameshot&SigningPolicySlug=release-signing
authorization:
secure: G5nNnkfRSJ+EEx+7LlUSSoEyoL+pHYItvjrNxbWITE7RB+cm9qzuHRdwmrZdEDjdVCLZ2TkNawynMxYcGMZAQA==
================================================
FILE: cmake/Cache.cmake
================================================
option(ENABLE_CACHE "Enable cache if available" ON)
if(NOT ENABLE_CACHE)
return()
endif()
set(CACHE_OPTION
"ccache"
CACHE STRING "Compiler cache to be used")
set(CACHE_OPTION_VALUES "ccache" "sccache")
set_property(CACHE CACHE_OPTION PROPERTY STRINGS ${CACHE_OPTION_VALUES})
list(
FIND
CACHE_OPTION_VALUES
${CACHE_OPTION}
CACHE_OPTION_INDEX)
if(${CACHE_OPTION_INDEX} EQUAL -1)
message(
STATUS
"Using custom compiler cache system: '${CACHE_OPTION}', explicitly supported entries are ${CACHE_OPTION_VALUES}")
endif()
find_program(CACHE_BINARY ${CACHE_OPTION})
if(CACHE_BINARY)
message(STATUS "${CACHE_OPTION} found and enabled")
set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_BINARY})
else()
message(WARNING "${CACHE_OPTION} is enabled but was not found. Not using it")
endif()
================================================
FILE: cmake/CompilerWarnings.cmake
================================================
# from here:
#
# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md
function(set_project_warnings project_name)
option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" TRUE)
set(MSVC_WARNINGS
/W4 # Baseline reasonable warnings
/w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data
/w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data
/w14263 # 'function': member function does not override any base class virtual member function
/w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not
# be destructed correctly
/w14287 # 'operator': unsigned/negative constant mismatch
/we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside
# the for-loop scope
/w14296 # 'operator': expression is always 'boolean_value'
/w14311 # 'variable': pointer truncation from 'type1' to 'type2'
/w14545 # expression before comma evaluates to a function which is missing an argument list
/w14546 # function call before comma missing argument list
/w14547 # 'operator': operator before comma has no effect; expected operator with side-effect
/w14549 # 'operator': operator before comma has no effect; did you intend 'operator'?
/w14555 # expression has no effect; expected expression with side- effect
/w14619 # pragma warning: there is no warning number 'number'
/w14640 # Enable warning on thread un-safe static member initialization
/w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.
/w14905 # wide string literal cast to 'LPSTR'
/w14906 # string literal cast to 'LPWSTR'
/w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied
/permissive- # standards conformance mode for MSVC compiler.
)
set(CLANG_WARNINGS
-Wall
-Wextra # reasonable and standard
-Wshadow # warn the user if a variable declaration shadows one from a parent context
-Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps
# catch hard to track down memory errors
-Wold-style-cast # warn for c-style casts
-Wcast-align # warn for potential performance problem casts
-Wunused # warn on anything being unused
-Woverloaded-virtual # warn if you overload (not override) a virtual function
-Wpedantic # warn if non-standard C++ is used
-Wconversion # warn on type conversions that may lose data
-Wsign-conversion # warn on sign conversions
-Wnull-dereference # warn if a null dereference is detected
-Wdouble-promotion # warn if float is implicit promoted to double
-Wformat=2 # warn on security issues around functions that format output (ie printf)
)
if(WARNINGS_AS_ERRORS)
set(CLANG_WARNINGS ${CLANG_WARNINGS} -Werror)
set(MSVC_WARNINGS ${MSVC_WARNINGS} /WX)
endif()
set(GCC_WARNINGS
${CLANG_WARNINGS}
-Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist
-Wduplicated-cond # warn if if / else chain has duplicated conditions
-Wduplicated-branches # warn if if / else branches have duplicated code
-Wlogical-op # warn about logical operations being used where bitwise were probably wanted
-Wuseless-cast # warn if you perform a cast to the same type
)
if(MSVC)
set(PROJECT_WARNINGS ${MSVC_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
set(PROJECT_WARNINGS ${CLANG_WARNINGS})
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(PROJECT_WARNINGS ${GCC_WARNINGS})
else()
message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.")
endif()
target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS})
endfunction()
================================================
FILE: cmake/Sanitizers.cmake
================================================
function(enable_sanitizers project_name)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE)
if(ENABLE_COVERAGE)
target_compile_options(${project_name} INTERFACE --coverage -O0 -g)
target_link_libraries(${project_name} INTERFACE --coverage)
endif()
set(SANITIZERS "")
option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE)
if(ENABLE_SANITIZER_ADDRESS)
list(APPEND SANITIZERS "address")
endif()
option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE)
if(ENABLE_SANITIZER_LEAK)
list(APPEND SANITIZERS "leak")
endif()
option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE)
if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR)
list(APPEND SANITIZERS "undefined")
endif()
option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE)
if(ENABLE_SANITIZER_THREAD)
if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS)
message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled")
else()
list(APPEND SANITIZERS "thread")
endif()
endif()
option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE)
if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
if("address" IN_LIST SANITIZERS
OR "thread" IN_LIST SANITIZERS
OR "leak" IN_LIST SANITIZERS)
message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled")
else()
list(APPEND SANITIZERS "memory")
endif()
endif()
list(
JOIN
SANITIZERS
","
LIST_OF_SANITIZERS)
endif()
if(LIST_OF_SANITIZERS)
if(NOT
"${LIST_OF_SANITIZERS}"
STREQUAL
"")
target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS})
target_link_libraries(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS})
endif()
endif()
endfunction()
================================================
FILE: cmake/StandardProjectSettings.cmake
================================================
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
set(CMAKE_BUILD_TYPE
RelWithDebInfo
CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui, ccmake
set_property(
CACHE CMAKE_BUILD_TYPE
PROPERTY STRINGS
"Debug"
"Release"
"MinSizeRel"
"RelWithDebInfo")
endif()
# Generate compile_commands.json to make it easier to work with clang based tools
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
option(ENABLE_IPO "Enable Interprocedural Optimization, aka Link Time Optimization (LTO)" OFF)
if(ENABLE_IPO)
include(CheckIPOSupported)
check_ipo_supported(
RESULT
result
OUTPUT
output)
if(result)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(SEND_ERROR "IPO is not supported: ${output}")
endif()
endif()
================================================
FILE: cmake/StaticAnalyzers.cmake
================================================
option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF)
option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF)
option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF)
if(ENABLE_CPPCHECK)
find_program(CPPCHECK cppcheck)
if(CPPCHECK)
set(CMAKE_CXX_CPPCHECK
${CPPCHECK}
--suppress=missingInclude
--enable=all
--inline-suppr
--inconclusive
-i
${CMAKE_SOURCE_DIR}/imgui/lib)
else()
message(SEND_ERROR "cppcheck requested but executable not found")
endif()
endif()
if(ENABLE_CLANG_TIDY)
find_program(CLANGTIDY clang-tidy)
if(CLANGTIDY)
set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option)
else()
message(SEND_ERROR "clang-tidy requested but executable not found")
endif()
endif()
if(ENABLE_INCLUDE_WHAT_YOU_USE)
find_program(INCLUDE_WHAT_YOU_USE include-what-you-use)
if(INCLUDE_WHAT_YOU_USE)
set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE})
else()
message(SEND_ERROR "include-what-you-use requested but executable not found")
endif()
endif()
================================================
FILE: data/appdata/org.flameshot.Flameshot.metainfo.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
SPDX-FileCopyrightText: none
SPDX-License-Identifier: CC0-1.0
-->
<component type="desktop-application">
<id>org.flameshot.Flameshot</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>Flameshot</name>
<translation type="qt">flameshot</translation>
<developer id="org.flameshot">
<name>Flameshot Developers</name>
</developer>
<supports>
<control>touch</control>
</supports>
<recommends>
<control>keyboard</control>
<control>pointing</control>
</recommends>
<summary>Take and annotate screenshots</summary>
<description>
<p>
Powerful and simple to use screenshot software with built-in
editor with advanced features.
</p>
<p>Features:</p>
<ul>
<li>Customizable appearance</li>
<li>Very easy to use</li>
<li>In-app screenshot editing and annotation</li>
<li>DBus interface</li>
<li>Upload to Imgur</li>
</ul>
</description>
<content_rating type="oars-1.1" />
<screenshots>
<screenshot type="default">
<image>https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/large_demo.png</image>
<caption>Flameshot Usage</caption>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/small_demo.png</image>
<caption>Demo of Pixelation, Arrow, Box, And Counter Bubble</caption>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/launcher.png</image>
<caption>The Launcher Window</caption>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/config_interface.png</image>
<caption>Configuration Window - Interface tab</caption>
</screenshot>
<screenshot>
<image>https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/images/config_shortcuts.png</image>
<caption>Configuration Window - Shortcuts tab</caption>
</screenshot>
</screenshots>
<url type="homepage">https://github.com/flameshot-org/flameshot</url>
<url type="bugtracker">https://github.com/flameshot-org/flameshot/issues</url>
<url type="translate">https://hosted.weblate.org/projects/flameshot/</url>
<url type="contribute">https://github.com/flameshot-org/flameshot/blob/master/docs/CONTRIBUTING.md</url>
<url type="vcs-browser">https://github.com/flameshot-org/flameshot/</url>
<update_contact>https://github.com/flameshot-org/flameshot/issues/new</update_contact>
<launchable type="desktop-id">org.flameshot.Flameshot.desktop</launchable>
<branding>
<color type="primary" scheme_preference="light">#d6a8e3</color>
<color type="primary" scheme_preference="dark">#5c0075</color>
</branding>
<categories>
<!-- the list can be found in https://specifications.freedesktop.org/menu-spec/latest/category-registry.html -->
<category>Utility</category>
<category>Graphics</category>
</categories>
<releases>
<release version="13.3.0" date="2025-10-28"/>
<release version="13.2.0" date="2025-10-24"/>
<release version="13.1.0" date="2025-08-15"/>
<release version="13.0.1" date="2025-08-06"/>
<release version="13.0.0" date="2025-08-03"/>
<release version="12.1.0" date="2022-07-03"/>
<release version="12.0.0" date="2022-06-21"/>
<release version="11.0.0" date="2022-01-14"/>
<release version="0.10.1" date="2021-07-25"/>
<release version="0.10.0" date="2021-05-16"/>
<release version="0.9.0" date="2021-02-27"/>
<release version="0.8.5" date="2020-10-14"/>
<release version="0.8.4" date="2020-10-10"/>
<release version="0.8.3" date="2020-09-28"/>
<release version="0.8.1" date="2020-09-23"/>
<release version="0.8.0" date="2020-09-19"/>
</releases>
</component>
================================================
FILE: data/dbus/org.flameshot.Flameshot.service.in
================================================
[D-BUS Service]
Name=org.flameshot.Flameshot
Exec=${CMAKE_INSTALL_FULL_BINDIR}/flameshot
================================================
FILE: data/dbus/org.flameshot.Flameshot.xml
================================================
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.flameshot.Flameshot">
<!--
attachPin:
@data: Byte array containing the screenshot and geometry information.
Attach a pinned screenshot widget to the daemon.
-->
<method name="attachPin">
<arg name="data" type="ay" direction="in"/>
</method>
<!--
attachScreenshotToClipboard:
@screenshot: Byte array containing the screenshot pixmap.
Copy the screenshot to the daemon's clipboard, to prevent losing the
clipboard when a flameshot subcommand exits.
-->
<method name="attachScreenshotToClipboard">
<arg name="screenshot" type="ay" direction="in"/>
</method>
<!--
attachTextToClipboard:
@text: Text to be copied to the clipboard.
@notification: Optional notification to send.
Copy the text to the daemon's clipboard, to prevent losing the
clipboard when a flameshot subcommand exits.
-->
<method name="attachTextToClipboard">
<arg name="text" type="s" direction="in"/>
<arg name="notification" type="s" direction="in"/>
</method>
</interface>
</node>
================================================
FILE: data/dbus/org.freedesktop.Notifications.xml
================================================
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="org.freedesktop.Notifications">
<method name="GetServerInformation">
<arg name="return_name" type="s" direction="out"/>
<arg name="return_vendor" type="s" direction="out"/>
<arg name="return_version" type="s" direction="out"/>
<arg name="return_spec_version" type="s" direction="out"/>
</method>
<method name="GetCapabilities">
<arg name="return_caps" type="as" direction="out"/>
</method>
<method name="CloseNotification">
<arg name="id" type="u" direction="in"/>
</method>
<method name="Notify">
<arg name="app_name" type="s" direction="in"/>
<arg name="id" type="u" direction="in"/>
<arg name="icon" type="s" direction="in"/>
<arg name="summary" type="s" direction="in"/>
<arg name="body" type="s" direction="in"/>
<arg name="actions" type="as" direction="in"/>
<arg name="hints" type="a{sv}" direction="in"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.In6" value="QVariantMap"/>
<arg name="timeout" type="i" direction="in"/>
<arg name="return_id" type="u" direction="out"/>
</method>
</interface>
</node>
================================================
FILE: data/desktopEntry/package/org.flameshot.Flameshot.desktop
================================================
[Desktop Entry]
Name=Flameshot
Name[zh_CN]=火焰截图
GenericName=Screenshot tool
GenericName[zh_CN]=屏幕截图工具
GenericName[pl]=Zrzuty ekranu
GenericName[fr]=Outil de capture d'écran
GenericName[nl]=Schermfotoprogramma
GenericName[nl_NL]=Schermfotoprogramma
GenericName[ja]=スクリーンショットツール
GenericName[ru]=Создание скриншотов
GenericName[sk]=Nástroj na zachytávanie obrazovky
GenericName[sr]=Снимач екрана
GenericName[uk]=Інструмент скриншотів
GenericName[es]=Herramienta de captura de pantalla
GenericName[pt_BR]=Ferramenta de captura de tela
Comment=Powerful yet simple to use screenshot software.
Comment[zh_CN]=强大又易用的屏幕截图软件
Comment[pl]=Proste w użyciu narzędzie do zrzutów ekranu
Comment[fr]=Logiciel de capture d'écran puissant et simple d'utilisation.
Comment[nl]=Een eenvoudig doch krachtig schermfotoprogramma.
Comment[nl_NL]=Een eenvoudig doch krachtig schermfotoprogramma.
Comment[ja]=パワフルで使いやすいスクリーンショットソフトウェア。
Comment[ru]=Простой и функциональный инструмент для создания скриншотов
Comment[sk]=Mocný, no zároveň jednoduchý softvér na zachytávanie obrazovky.
Comment[sr]=Једноставан, а моћан алат за снимање екрана
Comment[uk]=Потужний простий у використанні додаток для створення знімків екрану.
Comment[es]=Software de captura de pantalla potente y fácil de usar.
Comment[de]=Schlichte, leistungsstarke Screenshot-Software
Comment[pt_BR]=Software de captura de tela poderoso, mas simples de usar.
Keywords=flameshot;screenshot;capture;shutter;
Keywords[zh_CN]=flameshot;screenshot;capture;shutter;截图;屏幕;
Keywords[fr]=flameshot;capture d'écran;capter;shutter;
Keywords[ja]=flameshot;screenshot;capture;shutter;スクリーンショット;キャプチャー;
Keywords[nl]=flameshot;schermfoto;screenshot;schermafdruk;vastleggen;schermopname;
Keywords[nl_NL]=flameshot;schermfoto;screenshot;schermafdruk;vastleggen;schermopname;
Keywords[es]=flameshot;screenshot;capture;shutter;captura;
Keywords[de]=flameshot;screenshot;Bildschirmfoto;Aufnahme;
Keywords[pt_BR]=flameshot;screenshot;captura de tela;captura;shutter;
Exec=@LAUNCHER_EXECUTABLE@
Icon=org.flameshot.Flameshot
Terminal=false
Type=Application
Categories=Graphics;
StartupNotify=false
StartupWMClass=flameshot
Actions=Configure;Capture;Launcher;
X-DBUS-StartupType=Unique
X-DBUS-ServiceName=org.flameshot.Flameshot
X-KDE-DBUS-Restricted-Interfaces=org.kde.kwin.Screenshot,org.kde.KWin.ScreenShot2
[Desktop Action Configure]
Name=Configure
Name[zh_CN]=配置
Name[pl]=Konfiguruj
Name[fr]=Configurer
Name[ja]=設定
Name[ru]=Настройки
Name[sk]=Nastaviť
Name[nl]=Instellen
Name[nl_NL]=Instellen
Name[sr]=Подешавања
Name[uk]=Налаштувати
Name[es]=Configurar
Name[de]=Einstellungen
Name[pt_BR]=Configurar
Exec=flameshot config
[Desktop Action Capture]
Name=Take screenshot
Name[zh_CN]=进行截图
Name[pl]=Zrzut ekranu
Name[fr]=Prendre une capture d'écran
Name[ja]=スクリーンショットを撮る
Name[ru]=Сделать скриншот
Name[sk]=Zachytiť obrazovku
Name[sr]=Сними екран
Name[uk]=Зробити знімок
Name[nl]=Schermfoto maken
Name[nl_NL]=Schermfoto maken
Name[es]=Tomar captura de pantalla
Name[de]=Bildschirmfoto aufnehmen
Name[pt_BR]=Capturar tela
Exec=flameshot gui --delay 500
[Desktop Action Launcher]
Name=Open launcher
Name[de]=Starter öffnen
Name[nl]=Starter openen
Name[nl_NL]=Starter openen
Name[sk]=Otvoriť spúšťač
Name[zh_CN]=打开启动器
Name[pt_BR]=Abrir lançador
Exec=flameshot launcher
================================================
FILE: data/flameshot.rc
================================================
#pragma code_page(65001) // UTF-8
IDI_ICON1 ICON "img\\app\\flameshot.ico"
#include <windows.h>
#define VER_FILEVERSION FLAMESHOT_VERSION_MAJOR,FLAMESHOT_VERSION_MINOR,FLAMESHOT_VERSION_BUGFIX,FLAMESHOT_VERSION_BUILD
#define VER_FILEVERSION_STR FLAMESHOT_VERSION_STRING
#define VER_PRODUCTVERSION FLAMESHOT_VERSION_MAJOR,FLAMESHOT_VERSION_MINOR,FLAMESHOT_VERSION_BUGFIX,FLAMESHOT_VERSION_BUILD
#define VER_PRODUCTVERSION_STR FLAMESHOT_VERSION_STRING
#ifndef DEBUG
#define VER_DEBUG 0
#else
#define VER_DEBUG VS_FF_DEBUG
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
FILEFLAGSMASK VER_DEBUG
FILEFLAGS VER_DEBUG
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "The flameshot Org."
VALUE "FileDescription", "Flameshot"
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "InternalName", "flameshot"
VALUE "LegalCopyright", "Copyright (C) 2017-2020 flameshot.org"
VALUE "OriginalFilename", "flameshot.exe"
VALUE "ProductName", "Flameshot"
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04b0 /* U.S. English (Unicode) */
END
END
================================================
FILE: data/graphics.qrc
================================================
<RCC>
<qresource prefix="/">
<file>img/app/org.flameshot.Flameshot.svg</file>
<file>img/app/flameshot.svg</file>
<file>img/app/org.flameshot.Flameshot.png</file>
<file>img/app/flameshot.png</file>
<file>img/app/flameshot.mask.png</file>
<file>img/app/flameshot.mask.svg</file>
<file>img/app/flameshot.monochrome.png</file>
<file>img/app/flameshot.monochrome.svg</file>
<file>img/app/keyboard.svg</file>
<file>img/material/black/accept.svg</file>
<file>img/material/black/arrow-bottom-left.svg</file>
<file>img/material/black/centeralign.svg</file>
<file>img/material/black/circle-outline.svg</file>
<file>img/material/black/close.svg</file>
<file>img/material/black/cloud-upload.svg</file>
<file>img/material/black/colorize.svg</file>
<file>img/material/black/config.svg</file>
<file>img/material/black/content-copy.svg</file>
<file>img/material/black/content-save.svg</file>
<file>img/material/black/cursor-move.svg</file>
<file>img/material/black/delete.svg</file>
<file>img/material/black/exit-to-app.svg</file>
<file>img/material/black/format-text.svg</file>
<file>img/material/black/format_bold.svg</file>
<file>img/material/black/format_italic.svg</file>
<file>img/material/black/format_strikethrough.svg</file>
<file>img/material/black/format_underlined.svg</file>
<file>img/material/black/graphics.svg</file>
<file>img/material/black/leftalign.svg</file>
<file>img/material/black/line.svg</file>
<file>img/material/black/marker.svg</file>
<file>img/material/black/mouse-off.svg</file>
<file>img/material/black/mouse.svg</file>
<file>img/material/black/name_edition.svg</file>
<file>img/material/black/open_with.svg</file>
<file>img/material/black/pencil.svg</file>
<file>img/material/black/pin.svg</file>
<file>img/material/black/pixelate.svg</file>
<file>img/material/black/redo-variant.svg</file>
<file>img/material/black/rightalign.svg</file>
<file>img/material/black/size_indicator.svg</file>
<file>img/material/black/square-outline.svg</file>
<file>img/material/black/square.svg</file>
<file>img/material/black/text.svg</file>
<file>img/material/black/undo-variant.svg</file>
<file>img/material/black/circlecount-outline.svg</file>
<file>img/material/black/filepath.svg</file>
<file>img/material/black/invert.svg</file>
<file>img/material/black/minus.svg</file>
<file>img/material/black/plus.svg</file>
<file>img/material/black/shortcut.svg</file>
<file>img/material/white/accept.svg</file>
<file>img/material/white/arrow-bottom-left.svg</file>
<file>img/material/white/centeralign.svg</file>
<file>img/material/white/circle-outline.svg</file>
<file>img/material/white/circlecount-outline.svg</file>
<file>img/material/white/close.svg</file>
<file>img/material/white/cloud-upload.svg</file>
<file>img/material/white/colorize.svg</file>
<file>img/material/white/config.svg</file>
<file>img/material/white/content-copy.svg</file>
<file>img/material/white/content-save.svg</file>
<file>img/material/white/cursor-move.svg</file>
<file>img/material/white/exit-to-app.svg</file>
<file>img/material/white/filepath.svg</file>
<file>img/material/white/format-text.svg</file>
<file>img/material/white/format_bold.svg</file>
<file>img/material/white/format_italic.svg</file>
<file>img/material/white/format_strikethrough.svg</file>
<file>img/material/white/format_underlined.svg</file>
<file>img/material/white/graphics.svg</file>
<file>img/material/white/invert.svg</file>
<file>img/material/white/leftalign.svg</file>
<file>img/material/white/line.svg</file>
<file>img/material/white/marker.svg</file>
<file>img/material/white/minus.svg</file>
<file>img/material/white/mouse-off.svg</file>
<file>img/material/white/mouse.svg</file>
<file>img/material/white/name_edition.svg</file>
<file>img/material/white/open_with.svg</file>
<file>img/material/white/pencil.svg</file>
<file>img/material/white/pin.svg</file>
<file>img/material/white/pixelate.svg</file>
<file>img/material/white/plus.svg</file>
<file>img/material/white/redo-variant.svg</file>
<file>img/material/white/rightalign.svg</file>
<file>img/material/white/shortcut.svg</file>
<file>img/material/white/size_indicator.svg</file>
<file>img/material/white/square-outline.svg</file>
<file>img/material/white/square.svg</file>
<file>img/material/white/text.svg</file>
<file>img/material/white/undo-variant.svg</file>
<file>img/material/black/move_down.svg</file>
<file>img/material/black/move_up.svg</file>
<file>img/material/white/move_down.svg</file>
<file>img/material/white/move_up.svg</file>
<file>img/material/white/delete.svg</file>
<file>img/material/black/apps.svg</file>
<file>img/material/black/image.svg</file>
<file>img/material/white/apps.svg</file>
<file>img/material/white/image.svg</file>
</qresource>
</RCC>
================================================
FILE: data/img/app/flameshotLogoLicense.txt
================================================
Free Art License 1.3
[ Copyleft Attitude ]
Free Art License 1.3 (FAL 1.3)
Preamble
The Free Art License grants the right to freely copy, distribute, and
transform creative works without infringing the author's rights.
The Free Art License recognizes and protects these rights. Their
implementation has been reformulated in order to allow everyone to use
creations of the human mind in a creative manner, regardless of their
types and ways of expression.
While the public's access to creations of the human mind usually is
restricted by the implementation of copyright law, it is favoured by
the Free Art License. This license intends to allow the use of a
work’s resources; to establish new conditions for creating in order to
increase creation opportunities. The Free Art License grants the right
to use a work, and acknowledges the right holder’s and the user’s
rights and responsibility.
The invention and development of digital technologies, Internet and
Free Software have changed creation methods: creations of the human
mind can obviously be distributed, exchanged, and transformed. They
allow to produce common works to which everyone can contribute to the
benefit of all.
The main rationale for this Free Art License is to promote and protect
these creations of the human mind according to the principles of
copyleft: freedom to use, copy, distribute, transform, and prohibition
of exclusive appropriation.
Definitions
“work” either means the initial work, the subsequent works or the
common work as defined hereafter:
“common work” means a work composed of the initial work and all
subsequent contributions to it (originals and copies). The initial
author is the one who, by choosing this license, defines the
conditions under which contributions are made.
“Initial work” means the work created by the initiator of the common
work (as defined above), the copies of which can be modified by
whoever wants to
“Subsequent works” means the contributions made by authors who
participate in the evolution of the common work by exercising the
rights to reproduce, distribute, and modify that are granted by the
license.
“Originals” (sources or resources of the work) means all copies of
either the initial work or any subsequent work mentioning a date and
used by their author(s) as references for any subsequent updates,
interpretations, copies or reproductions.
“Copy” means any reproduction of an original as defined by this
license.
1. OBJECT
The aim of this license is to define the conditions under which one
can use this work freely.
2. SCOPE
This work is subject to copyright law. Through this license its author
specifies the extent to which you can copy, distribute, and modify it.
2.1 FREEDOM TO COPY (OR TO MAKE REPRODUCTIONS)
You have the right to copy this work for yourself, your friends or any
other person, whatever the technique used.
2.2 FREEDOM TO DISTRIBUTE, TO PERFORM IN PUBLIC
You have the right to distribute copies of this work; whether modified
or not, whatever the medium and the place, with or without any charge,
provided that you: attach this license without any modification to the
copies of this work or indicate precisely where the license can be
found, specify to the recipient the names of the author(s) of the
originals, including yours if you have modified the work, specify to
the recipient where to access the originals (either initial or
subsequent).
The authors of the originals may, if they wish to, give you the right
to distribute the originals under the same conditions as the copies.
2.3 FREEDOM TO MODIFY
You have the right to modify copies of the originals (whether initial
or subsequent) provided you comply with the following conditions: all
conditions in article 2.2 above, if you distribute modified copies;
indicate that the work has been modified and, if it is possible, what
kind of modifications have been made; distribute the subsequent work
under the same license or any compatible license.
The author(s) of the original work may give you the right to modify it
under the same conditions as the copies.
3. RELATED RIGHTS
Activities giving rise to author’s rights and related rights shall not
challenge the rights granted by this license.
For example, this is the reason why performances must be subject to
the same license or a compatible license. Similarly, integrating the
work in a database, a compilation or an anthology shall not prevent
anyone from using the work under the same conditions as those defined
in this license.
4. INCORPORATION OF THE WORK
Incorporating this work into a larger work that is not subject to the
Free Art License shall not challenge the rights granted by this
license.
If the work can no longer be accessed apart from the larger work in
which it is incorporated, then incorporation shall only be allowed
under the condition that the larger work is subject either to the Free
Art License or a compatible license.
5. COMPATIBILITY
A license is compatible with the Free Art License provided: it gives
the right to copy, distribute, and modify copies of the work including
for commercial purposes and without any other restrictions than those
required by the respect of the other compatibility criteria; it
ensures proper attribution of the work to its authors and access to
previous versions of the work when possible; it recognizes the Free
Art License as compatible (reciprocity); it requires that changes made
to the work be subject to the same license or to a license which also
meets these compatibility criteria.
6. YOUR INTELLECTUAL RIGHTS
This license does not aim at denying your author's rights in your
contribution or any related right. By choosing to contribute to the
development of this common work, you only agree to grant others the
same rights with regard to your contribution as those you were granted
by this license. Conferring these rights does not mean you have to
give up your intellectual rights.
7. YOUR RESPONSIBILITIES
The freedom to use the work as defined by the Free Art License (right
to copy, distribute, modify) implies that everyone is responsible for
their own actions.
8. DURATION OF THE LICENSE
This license takes effect as of your acceptance of its terms. The act
of copying, distributing, or modifying the work constitutes a tacit
agreement. This license will remain in effect for as long as the
copyright which is attached to the work. If you do not respect the
terms of this license, you automatically lose the rights that it
confers.
If the legal status or legislation to which you are subject makes it
impossible for you to respect the terms of this license, you may not
make use of the rights which it confers.
9. VARIOUS VERSIONS OF THE LICENSE
This license may undergo periodic modifications to incorporate
improvements by its authors (instigators of the “Copyleft Attitude”
movement) by way of new, numbered versions.
You will always have the choice of accepting the terms contained in
the version under which the copy of the work was distributed to you,
or alternatively, to use the provisions of one of the subsequent
versions.
10. SUB-LICENSING
Sub-licenses are not authorized by this license. Any person wishing to
make use of the rights that it confers will be directly bound to the
authors of the common work.
11. LEGAL FRAMEWORK
This license is written with respect to both French law and the Berne
Convention for the Protection of Literary and Artistic Works.
USER GUIDE
- How to use the Free Art License?
To benefit from the Free Art License, you only need to mention the
following elements on your work:
[Name of the author, title, date of the work. When applicable, names
of authors of the common work and, if possible, where to find the
originals].
Copyleft: This is a free work, you can copy, distribute, and modify it
under the terms of the Free Art License
http://artlibre.org/licence/lal/en/
- Why to use the Free Art License?
1.To give the greatest number of people access to your work.
2.To allow it to be distributed freely.
3.To allow it to evolve by allowing its copy, distribution, and
transformation by others.
4.So that you benefit from the resources of a work when it is under
the Free Art License: to be able to copy, distribute or transform
it freely.
5.But also, because the Free Art License offers a legal framework to
disallow any misappropriation. It is forbidden to take hold of
your work and bypass the creative process for one's exclusive
possession.
- When to use the Free Art License?
Any time you want to benefit and make others benefit from the right to
copy, distribute and transform creative works without any exclusive
appropriation, you should use the Free Art License. You can for
example use it for scientific, artistic or educational projects.
- What kinds of works can be subject to the Free Art License?
The Free Art License can be applied to digital as well as physical
works. You can choose to apply the Free Art License on any text,
picture, sound, gesture, or whatever sort of stuff on which you have
sufficient author's rights.
- Historical background of this license:
It is the result of observing, using and creating digital
technologies, free software, the Internet and art. It arose from the
“Copyleft Attitude” meetings which took place in Paris in 2000. For
the first time, these meetings brought together members of the Free
Software community, artists, and members of the art world. The goal
was to adapt the principles of Copyleft and free software to all sorts
of creations. http://www.artlibre.org
Copyleft Attitude, 2007.
You can make reproductions and distribute this license verbatim
(without any changes).
Translation : Jonathan Clarke, Benjamin Jean, Griselda Jung, Fanny
Mourguet, Antoine Pitrou. Thanks to framalang.org
================================================
FILE: data/img/material/LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: data/img/material/README.md
================================================
Google Material Design Icons are licensed under Apache License 2.0 (see LICENSE.txt)
================================================
FILE: data/man/man1/flameshot.1
================================================
.\" Hey, EMACS: -*- nroff -*-
.\" (C) Copyright 2018 Boyuan Yang <073plan@gmail.com>,
.\" This file is released under CC0 1.0 Universal (CC0-1.0) license.
.\"
.TH "FLAMESHOT" "1" "2021-11-11"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
Flameshot \- Powerful yet simple-to-use screenshot software
.SH SYNOPSIS
.B flameshot
[subcommands] [arguments]
.br
.B flameshot gui
[gui arguments]
.br
.B flameshot screen
[screen arguments]
.br
.B flameshot full
[fullscreen arguments]
.br
.B flameshot config
[config arguments]
.br
.B flameshot launcher
.br
.
.\"----------------------------------------------------------------------------
.SH DESCRIPTION
This manual page documents briefly the
.B flameshot
command as provided by
.B flameshot
package.
.PP
\fBflameshot\fP is a screenshot tool that aims to be powerful yet simple-to-use.
Its notable features include customizable appearance, in-app screenshot editing,
D-Bus interface, tray icon support, experimental GNOME/KDE Wayland support,
integration with Imgur and support for both GUI and CLI interface.
.PP
Besides the usage information about \fBflameshot\fR in this manpage, you can find similar information using \fBflameshot --help\fR. Same \fB--help\fR can be used for each subcommand as well to get the valid arguments for them. The detailed usage of \fBflameshot\fP is documented in the \fIREADME.md\fR file on the project's Git repository page:
https://github.com/flameshot-org/flameshot
.
.\"----------------------------------------------------------------------------
.SH "SUBCOMMANDS"
.PP
Per default without subcommands, \fBflameshot\fR runs the Flameshot in the background and adds a tray icon for configuration. Note that it will not take a screenshot unless you define one of the modes though the subcommands. There are various subcommands that can be used to use flameshot in different modes:
.
.TP
.B gui
Running Flameshot in \fBgui\fR mode would let the user to select the region from which the screenshot should be taken and then allow them to annotate the screenshot.
.
.TP
.B full
Takes screenshot of all monitors at the same time
.
.TP
.B screen
Takes screenshot of the specified monitor.
.
.TP
.SH launcher
Does not accept any arguments, it will just opens the launcher window
.
.TP
.SH config
If no argument is provided, it will open the config window, otherwise it can change the configurations based on the provided arguments.
.
.\"----------------------------------------------------------------------------
.SH "ARGUMENTS"
.PP
Here we list all the arguments available for all subcommands. The subcommands that accept each argument are listed after each argument. Alternatively, you can use the \fBflameshot [subcommand] --help\fR to know the list of available arguments for each subcommand.
.
.PP
\-s, \-\-accept-on-select
.RS 4
Accept capture as soon as a selection is made
.br
Valid for subcommands: gui
.RE
.
.PP
\-a, \-\-autostart <bool>
.RS 4
Enable or disable run at startup
.br
Valid for subcommands: config
.RE
.
.PP
\-\-check
.RS 4
Check the configuration for errors. This is useful if you manually change the config file and want to make sure it does not contain errors.
.br
Valid for subcommands: config
.RE
.
.PP
\-c, \-\-clipboard
.RS 4
Save the capture to the clipboard
.br
Valid for subcommands: full, gui, screen
.RE
.
.PP
\-k, \-\-contrastcolor <color-code>
.RS 4
Define the contrast UI color
.br
Valid for subcommands: config
.RE
.
.PP
\-d, \-\-delay <milliseconds>
.RS 4
How many milliseconds should Flameshot wait before taking the screenshot
.br
Valid for subcommands: full, gui, screen
.RE
.
.PP
\-e, \-\-edit
.RS 4
Interactively select and edit the screenshot region
.br
Valid for subcommands: screen
.RE
.
.PP
\-f, \-\-filename <pattern>
.RS 4
Set the filename pattern
.br
Valid for subcommands: config
.RE
.
.PP
\-h, \-\-help
.RS 4
Show a brief help message and list the arguments the valid arguments for that subcommand
.br
Valid for subcommands: config, full, gui, launcher, screen
.RE
.
.PP
\-\-last-region
.RS 4
Repeat screenshot with previously selected region
.br
Valid for subcommands: gui
.RE
.
.PP
\-m, \-\-maincolor <color-code>
.RS 4
Define the main UI color
.br
Valid for subcommands: config
.RE
.
.PP
\-n, \-\-notifications
.RS 4
Enable or disable the notifications
.br
Valid for subcommands: config
.RE
.
.PP
\-n, \-\-number <Screen number>
.RS 4
Define the screen to capture (starting from 0), default: screen containing the cursor
.br
Valid for subcommands: screen
.RE
.
.PP
\-p, \-\-path <path>
.RS 4
Existing directory or new file to save to
.br
Valid for subcommands: full, gui, screen
.RE
.
.PP
\-\-pin
.RS 4
Pin the capture to the screen
.br
Valid for subcommands: gui, screen
.RE
.
.PP
\-g, \-\-print-geometry
.RS 4
Print geometry of the selection in the format WxH+X+Y. Does nothing if raw is specified
.br
Valid for subcommands: gui
.RE
.
.PP
\-r, \-\-raw
.RS 4
Send raw PNG to stdout
.br
Valid for subcommands: full, gui, screen
.RE
.
.PP
\-\-region <WxH+X+Y or string>
.RS 4
Screenshot region to select
.br
Valid for subcommands: gui, screen
.RE
.
.PP
\-s, \-\-showhelp <bool>
.RS 4
Show the help message in the capture mode
.br
Valid for subcommands: config
.RE
.
.PP
\-t, \-\-trayicon <bool>
.RS 4
Enable or disable the trayicon
.br
Valid for subcommands: config
.RE
.
.\"----------------------------------------------------------------------------
.SH "EXAMPLE USAGE"
.PP
This section lists some of the most common usage of \fBflameshot\fR via
command line.
.
.TP
.B flameshot
Start flameshot and have it running in background. If enabled,
an icon will appear in the tray area of current desktop environment.
.
.TP
.B flameshot gui
Capture with GUI.
.
.TP
\fBflameshot gui\fR \-p /path/to/captures
Capture with GUI and custom save path.
.
.TP
\fBflameshot gui\fR \-d 2000
Open GUI with a delay of 2 seconds.
.
.TP
.B flameshot launcher
Open a launcher dialog for advanced screenshot, such as custom
time delay, etc.
.
.TP
.B flameshot full \-\-help
Shows help for \fBflameshot full\fR subcommand.
.
.TP
\fBflameshot full\fR -p /path/to/captures -d 5000
Fullscreen capture with custom save path (no GUI) and time delay.
.
.TP
\fBflameshot full\fR -c -p /path/to/captures
Fullscreen capture with custom savepath copying to clipboard.
.
.TP
\fBflameshot screen\fR \-\-number <screen number>
Define the screen to capture. Will capture the screen containing the
cursor by default.
.
.TP
\fBflameshot screen\fR \-\-help
Shows help for \fBflameshot screen\fR subcommand.
.
.\"----------------------------------------------------------------------------
.SH RETURN VALUE
Returns 0 on normal exit, 2 on screenshot aborted, 3 on dbus connection lost, 130 on SIGINT received, 143 on SIGTERM received.
.
.\"----------------------------------------------------------------------------
.SH SEE ALSO
.PP
You may also find more detailed online documentation on upstream project homepage.
.
.HP
Upstream project homepage:
.br
• \m[blue]\fBhttps://flameshot.org\fR\m[]
.br
• \m[blue]\fBhttps://github.com/flameshot-org/flameshot\fR\m[]
.
.\"----------------------------------------------------------------------------
.SH "AUTHOR"
.PP
.ad l
.B Flameshot
was initially written by
.MT izhe@\:hotmail.es
lupoDharkael
.ME
and is currently maintained by
Jeremy Borgman,
.MT byang@\:debian.org
Boyuan Yang
.ME ,
Haris Gušić,
Ahmed Zetao Yang,
Mehrad Mahmoudian,
and
Martin Eckleben
(ordered based on number of contributions on the date of writing this manpage).
.br
The following URL gives you a more complete list of contributors:
.RS
\m[blue]\fBhttps://github.com/flameshot-org/flameshot/graphs/contributors\fR\m[]\&.
.RE
.
.\"----------------------------------------------------------------------------
.SH "LICENSE"
.nh
.PP
• The main code is licensed under GPLv3
.br
• The logo of Flameshot is licensed under Free Art License v1.3
.br
• The button icons are licensed under Apache License 2.0. See: \m[blue]\fBhttps://github.com/google/material-design-icons\fR\m[]
.br
• The code at capture/capturewidget.cpp is based on \m[blue]\fBhttps://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.cpp\fR\m[] (GPLv2)
.br
• The code at capture/capturewidget.h is based on \m[blue]\fBhttps://github.com/ckaiser/Lightscreen/blob/master/dialogs/areadialog.h\fR\m[] (GPLv2)
.br
• Few lines of code from KSnapshot regiongrabber.cpp SVN revision 796531 (LGPL)
.br
• Qt-Color-Widgets taken and modified from \m[blue]\fBhttps://github.com/mbasaglia/Qt-Color-Widgets\fR\m[] (see their license and exceptions in the project) (LGPL/GPL)
================================================
FILE: data/shell-completion/flameshot.bash
================================================
#compdef flameshot
# Shell completion for flameshot command
# To be installed in "/usr/share/bash-completion/completions/flameshot"
# and "/usr/share/zsh/site-functions/"
_flameshot() {
local prev cur cmd gui_opts full_opts config_opts
COMPREPLY=()
prev="${COMP_WORDS[COMP_CWORD-1]}"
cur="${COMP_WORDS[COMP_CWORD]}"
cmd="gui full config launcher screen"
screen_opts="--number -n --edit -e --path -p --clipboard -c --delay -d --region --raw -r --pin --help"
gui_opts="--path -p --clipboard -c --delay -d --region --last-region --raw -r --print-geometry -g --pin --accept-on-select -s --help"
full_opts="--path -p --clipboard -c --delay -d --raw -r --help"
config_opts="--autostart -a --filename -f --notifications -n --trayicon -t --showhelp -s --maincolor -m --contrastcolor -k --check"
case "${prev}" in
launcher)
return 0
;;
screen)
COMPREPLY=( $(compgen -W "$screen_opts --help -h" -- "${cur}") )
return 0
;;
gui)
COMPREPLY=( $(compgen -W "$gui_opts --help -h" -- "${cur}") )
return 0
;;
full)
COMPREPLY=( $(compgen -W "$full_opts --help -h" -- "${cur}") )
return 0
;;
config)
COMPREPLY=( $(compgen -W "$config_opts --help -h" -- "${cur}") )
return 0
;;
-f|--filename|-p|--path)
_filedir -d
return 0
;;
# TODO: We should see how we can add the -n (for `config --notifications`) here that does not conflict with -n (for `screen --number`)
-a|--autostart|-s|--showhelp|-t|--trayicon|--notifications)
COMPREPLY=( $(compgen -W "true false" -- "${cur}") )
return 0
;;
-d|--delay|-h|--help|-c|--clipboard|--version|-v|--number|-n)
return 0
;;
*)
;;
esac
# Options
case "${cur}" in
-*)
COMPREPLY=( $( compgen -W "--version --help -v -h" -- "${cur}") )
return 0
;;
--*)
COMPREPLY=( $( compgen -W "--version --help" -- "${cur}") )
return 0
;;
*)
COMPREPLY=( $( compgen -W "${cmd}" -- "${cur}") )
return 0
;;
esac
}
if [[ -n ${ZSH_VERSION} ]]; then
autoload -U bashcompinit
bashcompinit
fi
complete -F _flameshot flameshot
================================================
FILE: data/shell-completion/flameshot.fish
================================================
####################
# HELPER FUNCTIONS #
####################
# Complete the subcommand provided as the first argument.
# The rest of the arguments are the same as fish's `complete`. The option
# '-c flameshot' is implicit.
function __flameshot_complete --argument-names cmd
set -l conditions "__fish_seen_subcommand_from $cmd"
argparse -i "n/condition=" -- $argv[2..]
[ -n "$_flag_n" ] && set -l conditions "$conditions && $_flag_n"
complete -c flameshot $argv -n "$conditions"
end
# Return success if the command line contains no positional arguments
function __flameshot_no_positional_args
set -l -- args (commandline -po) # cmdline broken up into list
set -l -- cmdline (commandline -p) # single string
set -l -- n (count $args) # number of cmdline tokens
for i in (seq 2 $n)
set -l arg $args[$i]
[ -z "$arg" ] && continue # can be caused by '--' argument
# If the the last token is a positional argument and there is no
# trailing space, we ignore it
[ "$i" = "$n" ] && [ (string sub -s -1 "$cmdline") != ' ' ] && break
if string match -rvq '^-' -- "$arg" # doesn't start with -
return 1
end
end
# contains a '--' argument
string match -r -- '\s--\s' "$cmdline" && return 1
return 0
end
# Complete paths matching $argv
function __flameshot_complete_paths
complete -C"nOnExIsTeNtCoMmAndZIOAGA2329jdbfaFkahDf21234h8z43 $argv"
end
# Complete the region option
function __flameshot_complete_region --argument subcommand
if [ "$subcommand" = "screen" ]
echo all\tCapture entire screen
else
echo all\tCapture all screens
echo screen0\tCapture screen 0
echo screen1\tCapture screen 1
echo screen2\tCapture screen 2
echo screen3\tCapture screen 3
end
echo WxH+X+Y\tCustom region in pixels
end
# Complete screen numbers
function __flameshot_complete_screen_number
echo 0\tScreen 0
echo 1\tScreen 1
echo 2\tScreen 2
echo 3\tScreen 3
end
###############
# COMPLETIONS #
###############
# define the subcommands
set -l SUBCOMMANDS gui screen full launcher config
# No subcommand
complete -c flameshot --no-files --arguments "$SUBCOMMANDS" --condition __flameshot_no_positional_args
complete -c flameshot --long-option "help" --short-option "h" --description "Display help message" --no-files
complete -c flameshot --long-option "version" --short-option "v" --description "Display version information" --no-files --condition __flameshot_no_positional_args
# GUI subcommand
__flameshot_complete gui --no-files
__flameshot_complete gui --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter
__flameshot_complete gui --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files
__flameshot_complete gui --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files
__flameshot_complete gui --long-option "region" --description "Screenshot region to select (WxH+X+Y)" --require-parameter --arguments "(__flameshot_complete_region gui)"
__flameshot_complete gui --long-option "last-region" --description "Repeat screenshot with previously selected region" --no-files
__flameshot_complete gui --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files
__flameshot_complete gui --long-option "print-geometry" --short-option "g" --description "Print geometry of the selection" --no-files
__flameshot_complete gui --long-option "pin" --description "Pin the screenshot to the screen" --no-files
__flameshot_complete gui --long-option "accept-on-select" --short-option "s" --description "Accept capture as soon as a selection is made" --no-files
__flameshot_complete gui --long-option "help" --short-option "h" --description "Show the available arguments" --no-files
# SCREEN subcommand
__flameshot_complete screen --no-files
__flameshot_complete screen --long-option "number" --short-option "n" --description "Screen number (starting from 0)" --require-parameter --no-files --arguments "(__flameshot_complete_screen_number)"
__flameshot_complete screen --long-option "edit" --short-option "e" --description "Interactively select and edit the screenshot region" --no-files
__flameshot_complete screen --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter
__flameshot_complete screen --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files
__flameshot_complete screen --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files
__flameshot_complete screen --long-option "region" --description "Screenshot region to select (WxH+X+Y)" --require-parameter --no-files --arguments "(__flameshot_complete_region screen)"
__flameshot_complete screen --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files
__flameshot_complete screen --long-option "pin" --description "Pin the screenshot to the screen" --no-files
__flameshot_complete screen --long-option "help" --short-option "h" --description "Show the available arguments" --no-files
# FULL command
__flameshot_complete full --no-files
__flameshot_complete full --long-option "path" --short-option "p" --description "Output file or directory" --require-parameter
__flameshot_complete full --long-option "clipboard" --short-option "c" --description "Copy screenshot to the clipboard" --no-files
__flameshot_complete full --long-option "delay" --short-option "d" --description "Delay time in milliseconds" --require-parameter --no-files
__flameshot_complete full --long-option "raw" --short-option "r" --description "Print raw PNG capture" --no-files
__flameshot_complete full --long-option "help" --short-option "h" --description "Show the available arguments" --no-files
# LAUNCHER command
__flameshot_complete launcher --no-files
# CONFIG command
__flameshot_complete config --no-files
__flameshot_complete config --long-option "autostart" --short-option "a" --description "Enable or disable run at startup" --require-parameter --no-files --arguments "true false"
__flameshot_complete config --long-option "filename" --short-option "f" --description "Set the filename pattern" --require-parameter --no-files
__flameshot_complete config --long-option "notification" --short-option "n" --description "Enable or disable the notification" --require-parameter --no-files --arguments "true false"
__flameshot_complete config --long-option "trayicon" --short-option "t" --description "Enable or disable the tray icon" --require-parameter --no-files --arguments "true false"
__flameshot_complete config --long-option "showhelp" --short-option "s" --description "Show the help message in the capture mode" --require-parameter --no-files --arguments "true false"
__flameshot_complete config --long-option "maincolor" --short-option "m" --description "Define the main UI color (hexadecimal)" --require-parameter --no-files
__flameshot_complete config --long-option "contrastcolor" --short-option "k" --description "Define the contrast UI color (hexadecimal)" --require-parameter --no-files
__flameshot_complete config --long-option "check" --description "Check the configuration for errors" --no-files
__flameshot_complete config --long-option "help" --short-option "h" --description "Show the available arguments" --no-files
================================================
FILE: data/shell-completion/flameshot.zsh
================================================
#compdef flameshot
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for the flameshot command line interface
# (https://github.com/flameshot-org/flameshot).
#
# ------------------------------------------------------------------------------
# How to use
# -------
#
# Copy this file to /usr/share/zsh/site-functions/_flameshot
#
# gui
_flameshot_gui_opts=(
{-p,--p
gitextract_v64igq9i/
├── .clang-format
├── .clang-tidy
├── .cmake-format.yaml
├── .envrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yaml
│ │ ├── feature-request.yaml
│ │ └── question.md
│ └── workflows/
│ ├── Linux-arm-pack.yml
│ ├── Linux-pack.yml
│ ├── MacOS-pack.yml
│ ├── Windows-pack.yml
│ ├── build_cmake.yml
│ ├── clang-format.yml
│ └── deploy-dev-docs.yml
├── .gitignore
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── PKGBUILD
├── README.md
├── appveyor.yml
├── cmake/
│ ├── Cache.cmake
│ ├── CompilerWarnings.cmake
│ ├── Sanitizers.cmake
│ ├── StandardProjectSettings.cmake
│ └── StaticAnalyzers.cmake
├── data/
│ ├── appdata/
│ │ └── org.flameshot.Flameshot.metainfo.xml
│ ├── dbus/
│ │ ├── org.flameshot.Flameshot.service.in
│ │ ├── org.flameshot.Flameshot.xml
│ │ └── org.freedesktop.Notifications.xml
│ ├── desktopEntry/
│ │ └── package/
│ │ └── org.flameshot.Flameshot.desktop
│ ├── flameshot.rc
│ ├── graphics.qrc
│ ├── img/
│ │ ├── app/
│ │ │ └── flameshotLogoLicense.txt
│ │ └── material/
│ │ ├── LICENSE.txt
│ │ └── README.md
│ ├── man/
│ │ └── man1/
│ │ └── flameshot.1
│ ├── shell-completion/
│ │ ├── flameshot.bash
│ │ ├── flameshot.fish
│ │ └── flameshot.zsh
│ ├── snap/
│ │ └── snapcraft.yaml
│ └── translations/
│ ├── Internationalization_ar.ts
│ ├── Internationalization_bg.ts
│ ├── Internationalization_ca.ts
│ ├── Internationalization_cs.ts
│ ├── Internationalization_da.ts
│ ├── Internationalization_de_DE.ts
│ ├── Internationalization_el.ts
│ ├── Internationalization_en.ts
│ ├── Internationalization_es.ts
│ ├── Internationalization_et.ts
│ ├── Internationalization_eu.ts
│ ├── Internationalization_fa.ts
│ ├── Internationalization_fi.ts
│ ├── Internationalization_fr.ts
│ ├── Internationalization_ga.ts
│ ├── Internationalization_gl.ts
│ ├── Internationalization_grc.ts
│ ├── Internationalization_he.ts
│ ├── Internationalization_hu.ts
│ ├── Internationalization_id.ts
│ ├── Internationalization_it_IT.ts
│ ├── Internationalization_ja.ts
│ ├── Internationalization_ka.ts
│ ├── Internationalization_km.ts
│ ├── Internationalization_ko.ts
│ ├── Internationalization_nb_NO.ts
│ ├── Internationalization_nl.ts
│ ├── Internationalization_nl_NL.ts
│ ├── Internationalization_pl.ts
│ ├── Internationalization_pt.ts
│ ├── Internationalization_pt_BR.ts
│ ├── Internationalization_ro.ts
│ ├── Internationalization_ru.ts
│ ├── Internationalization_sk.ts
│ ├── Internationalization_sl.ts
│ ├── Internationalization_sr_SP.ts
│ ├── Internationalization_sv_SE.ts
│ ├── Internationalization_sw.ts
│ ├── Internationalization_ta.ts
│ ├── Internationalization_th.ts
│ ├── Internationalization_tk.ts
│ ├── Internationalization_tr.ts
│ ├── Internationalization_uk.ts
│ ├── Internationalization_vi.ts
│ ├── Internationalization_zh_CN.ts
│ ├── Internationalization_zh_HK.ts
│ └── Internationalization_zh_TW.ts
├── default.nix
├── docs/
│ ├── 0000-template.md
│ ├── CONTRIBUTING.md
│ ├── RFC/
│ │ └── 0000-Add-Opacity-slider.md
│ ├── RFC.md
│ ├── ReleaseNote_12.1.md
│ ├── ReleaseNotes_0.8.md
│ ├── ReleaseNotes_0.9.md
│ ├── ReleaseNotes_11.0.md
│ ├── ReleaseNotes_12.0.md
│ ├── Releasing.md
│ ├── Sway and wlroots support.md
│ ├── dev/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── mkdocs.yml
│ │ ├── post-process.sh
│ │ └── src/
│ │ ├── debugging.md
│ │ ├── docs.md
│ │ ├── faq.md
│ │ └── index.md
│ └── shortcuts-config/
│ └── flameshot-shortcuts-kde.khotkeys
├── flake.nix
├── flameshot.example.ini
├── packaging/
│ ├── debian/
│ │ ├── changelog
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ ├── docs
│ │ ├── rules
│ │ └── source/
│ │ └── format
│ ├── flatpak/
│ │ └── org.flameshot.Flameshot.yml
│ ├── macos/
│ │ ├── Info.plist.in
│ │ ├── create_dmg.sh
│ │ └── flameshot.icns
│ ├── rpm/
│ │ ├── fedora/
│ │ │ └── flameshot.spec
│ │ └── opensuse/
│ │ └── flameshot.spec
│ └── win-installer/
│ └── LICENSE/
│ └── GPL-3.0.txt
├── scripts/
│ └── .gitkeep
├── shell.nix
├── snapcraft.yaml
├── src/
│ ├── CMakeLists.txt
│ ├── cli/
│ │ ├── CMakeLists.txt
│ │ ├── commandargument.cpp
│ │ ├── commandargument.h
│ │ ├── commandlineparser.cpp
│ │ ├── commandlineparser.h
│ │ ├── commandoption.cpp
│ │ └── commandoption.h
│ ├── config/
│ │ ├── CMakeLists.txt
│ │ ├── buttonlistview.cpp
│ │ ├── buttonlistview.h
│ │ ├── cacheutils.cpp
│ │ ├── cacheutils.h
│ │ ├── clickablelabel.cpp
│ │ ├── clickablelabel.h
│ │ ├── colorpickereditmode.cpp
│ │ ├── colorpickereditmode.h
│ │ ├── colorpickereditor.cpp
│ │ ├── colorpickereditor.h
│ │ ├── configerrordetails.cpp
│ │ ├── configerrordetails.h
│ │ ├── configresolver.cpp
│ │ ├── configresolver.h
│ │ ├── configwindow.cpp
│ │ ├── configwindow.h
│ │ ├── extendedslider.cpp
│ │ ├── extendedslider.h
│ │ ├── filenameeditor.cpp
│ │ ├── filenameeditor.h
│ │ ├── generalconf.cpp
│ │ ├── generalconf.h
│ │ ├── setshortcutwidget.cpp
│ │ ├── setshortcutwidget.h
│ │ ├── shortcutswidget.cpp
│ │ ├── shortcutswidget.h
│ │ ├── strftimechooserwidget.cpp
│ │ ├── strftimechooserwidget.h
│ │ ├── styleoverride.cpp
│ │ ├── styleoverride.h
│ │ ├── uicoloreditor.cpp
│ │ ├── uicoloreditor.h
│ │ ├── visualseditor.cpp
│ │ └── visualseditor.h
│ ├── core/
│ │ ├── CMakeLists.txt
│ │ ├── capturerequest.cpp
│ │ ├── capturerequest.h
│ │ ├── flameshot.cpp
│ │ ├── flameshot.h
│ │ ├── flameshotdaemon.cpp
│ │ ├── flameshotdaemon.h
│ │ ├── flameshotdbusadapter.cpp
│ │ ├── flameshotdbusadapter.h
│ │ ├── globalshortcutfilter.cpp
│ │ ├── globalshortcutfilter.h
│ │ ├── qguiappcurrentscreen.cpp
│ │ ├── qguiappcurrentscreen.h
│ │ ├── signaldaemon.cpp
│ │ └── signaldaemon.h
│ ├── main.cpp
│ ├── tools/
│ │ ├── CMakeLists.txt
│ │ ├── abstractactiontool.cpp
│ │ ├── abstractactiontool.h
│ │ ├── abstractpathtool.cpp
│ │ ├── abstractpathtool.h
│ │ ├── abstracttwopointtool.cpp
│ │ ├── abstracttwopointtool.h
│ │ ├── accept/
│ │ │ ├── accepttool.cpp
│ │ │ └── accepttool.h
│ │ ├── arrow/
│ │ │ ├── arrowtool.cpp
│ │ │ └── arrowtool.h
│ │ ├── capturecontext.cpp
│ │ ├── capturecontext.h
│ │ ├── capturetool.h
│ │ ├── circle/
│ │ │ ├── circletool.cpp
│ │ │ └── circletool.h
│ │ ├── circlecount/
│ │ │ ├── circlecounttool.cpp
│ │ │ └── circlecounttool.h
│ │ ├── copy/
│ │ │ ├── copytool.cpp
│ │ │ └── copytool.h
│ │ ├── exit/
│ │ │ ├── exittool.cpp
│ │ │ └── exittool.h
│ │ ├── imgupload/
│ │ │ ├── imguploadermanager.cpp
│ │ │ ├── imguploadermanager.h
│ │ │ ├── imguploadertool.cpp
│ │ │ ├── imguploadertool.h
│ │ │ └── storages/
│ │ │ ├── imguploaderbase.cpp
│ │ │ ├── imguploaderbase.h
│ │ │ └── imgur/
│ │ │ ├── imguruploader.cpp
│ │ │ └── imguruploader.h
│ │ ├── invert/
│ │ │ ├── inverttool.cpp
│ │ │ └── inverttool.h
│ │ ├── launcher/
│ │ │ ├── applaunchertool.cpp
│ │ │ ├── applaunchertool.h
│ │ │ ├── applauncherwidget.cpp
│ │ │ ├── applauncherwidget.h
│ │ │ ├── launcheritemdelegate.cpp
│ │ │ ├── launcheritemdelegate.h
│ │ │ ├── openwithprogram.cpp
│ │ │ ├── openwithprogram.h
│ │ │ ├── terminallauncher.cpp
│ │ │ └── terminallauncher.h
│ │ ├── line/
│ │ │ ├── linetool.cpp
│ │ │ └── linetool.h
│ │ ├── marker/
│ │ │ ├── markertool.cpp
│ │ │ └── markertool.h
│ │ ├── move/
│ │ │ ├── movetool.cpp
│ │ │ └── movetool.h
│ │ ├── pencil/
│ │ │ ├── penciltool.cpp
│ │ │ └── penciltool.h
│ │ ├── pin/
│ │ │ ├── pintool.cpp
│ │ │ ├── pintool.h
│ │ │ ├── pinwidget.cpp
│ │ │ └── pinwidget.h
│ │ ├── pixelate/
│ │ │ ├── pixelatetool.cpp
│ │ │ └── pixelatetool.h
│ │ ├── rectangle/
│ │ │ ├── rectangletool.cpp
│ │ │ └── rectangletool.h
│ │ ├── redo/
│ │ │ ├── redotool.cpp
│ │ │ └── redotool.h
│ │ ├── save/
│ │ │ ├── savetool.cpp
│ │ │ └── savetool.h
│ │ ├── selection/
│ │ │ ├── selectiontool.cpp
│ │ │ └── selectiontool.h
│ │ ├── sizedecrease/
│ │ │ ├── sizedecreasetool.cpp
│ │ │ └── sizedecreasetool.h
│ │ ├── sizeincrease/
│ │ │ ├── sizeincreasetool.cpp
│ │ │ └── sizeincreasetool.h
│ │ ├── text/
│ │ │ ├── textconfig.cpp
│ │ │ ├── textconfig.h
│ │ │ ├── texttool.cpp
│ │ │ ├── texttool.h
│ │ │ ├── textwidget.cpp
│ │ │ └── textwidget.h
│ │ ├── toolfactory.cpp
│ │ ├── toolfactory.h
│ │ └── undo/
│ │ ├── undotool.cpp
│ │ └── undotool.h
│ ├── utils/
│ │ ├── CMakeLists.txt
│ │ ├── abstractlogger.cpp
│ │ ├── abstractlogger.h
│ │ ├── colorutils.cpp
│ │ ├── colorutils.h
│ │ ├── confighandler.cpp
│ │ ├── confighandler.h
│ │ ├── desktopfileparse.cpp
│ │ ├── desktopfileparse.h
│ │ ├── desktopinfo.cpp
│ │ ├── desktopinfo.h
│ │ ├── filenamehandler.cpp
│ │ ├── filenamehandler.h
│ │ ├── globalvalues.cpp
│ │ ├── globalvalues.h
│ │ ├── history.cpp
│ │ ├── history.h
│ │ ├── monitorpreview.cpp
│ │ ├── monitorpreview.h
│ │ ├── pathinfo.cpp
│ │ ├── pathinfo.h
│ │ ├── request.cpp
│ │ ├── request.h
│ │ ├── screengrabber.cpp
│ │ ├── screengrabber.h
│ │ ├── screenshotsaver.cpp
│ │ ├── screenshotsaver.h
│ │ ├── strfparse.cpp
│ │ ├── strfparse.h
│ │ ├── systemnotification.cpp
│ │ ├── systemnotification.h
│ │ ├── valuehandler.cpp
│ │ ├── valuehandler.h
│ │ ├── waylandutils.cpp
│ │ ├── waylandutils.h
│ │ ├── winlnkfileparse.cpp
│ │ └── winlnkfileparse.h
│ ├── widgets/
│ │ ├── CMakeLists.txt
│ │ ├── capture/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── buttonhandler.cpp
│ │ │ ├── buttonhandler.h
│ │ │ ├── capturebutton.cpp
│ │ │ ├── capturebutton.h
│ │ │ ├── capturetoolbutton.cpp
│ │ │ ├── capturetoolbutton.h
│ │ │ ├── capturetoolobjects.cpp
│ │ │ ├── capturetoolobjects.h
│ │ │ ├── capturewidget.cpp
│ │ │ ├── capturewidget.h
│ │ │ ├── colorpicker.cpp
│ │ │ ├── colorpicker.h
│ │ │ ├── hovereventfilter.cpp
│ │ │ ├── hovereventfilter.h
│ │ │ ├── magnifierwidget.cpp
│ │ │ ├── magnifierwidget.h
│ │ │ ├── modificationcommand.cpp
│ │ │ ├── modificationcommand.h
│ │ │ ├── notifierbox.cpp
│ │ │ ├── notifierbox.h
│ │ │ ├── overlaymessage.cpp
│ │ │ ├── overlaymessage.h
│ │ │ ├── selectionwidget.cpp
│ │ │ └── selectionwidget.h
│ │ ├── capturelauncher.cpp
│ │ ├── capturelauncher.h
│ │ ├── capturelauncher.ui
│ │ ├── colorpickerwidget.cpp
│ │ ├── colorpickerwidget.h
│ │ ├── draggablewidgetmaker.cpp
│ │ ├── draggablewidgetmaker.h
│ │ ├── imagelabel.cpp
│ │ ├── imagelabel.h
│ │ ├── imguploaddialog.cpp
│ │ ├── imguploaddialog.h
│ │ ├── infowindow.cpp
│ │ ├── infowindow.h
│ │ ├── infowindow.ui
│ │ ├── loadspinner.cpp
│ │ ├── loadspinner.h
│ │ ├── notificationwidget.cpp
│ │ ├── notificationwidget.h
│ │ ├── orientablepushbutton.cpp
│ │ ├── orientablepushbutton.h
│ │ ├── panel/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── colorgrabwidget.cpp
│ │ │ ├── colorgrabwidget.h
│ │ │ ├── sidepanelwidget.cpp
│ │ │ ├── sidepanelwidget.h
│ │ │ ├── utilitypanel.cpp
│ │ │ └── utilitypanel.h
│ │ ├── trayicon.cpp
│ │ ├── trayicon.h
│ │ ├── updatenotificationwidget.cpp
│ │ ├── updatenotificationwidget.h
│ │ ├── uploadhistory.cpp
│ │ ├── uploadhistory.h
│ │ ├── uploadhistory.ui
│ │ ├── uploadlineitem.cpp
│ │ ├── uploadlineitem.h
│ │ └── uploadlineitem.ui
│ └── windows-cli.cpp
└── tests/
├── action_options.sh
└── path_option.sh
SYMBOL INDEX (444 symbols across 182 files)
FILE: src/cli/commandargument.cpp
function QString (line 20) | QString CommandArgument::name() const
function QString (line 30) | QString CommandArgument::description() const
FILE: src/cli/commandargument.h
function class (line 8) | class CommandArgument
FILE: src/cli/commandlineparser.cpp
function QString (line 26) | QString optionsToString(const QList<CommandOption>& options,
function CommandOption (line 227) | CommandOption CommandLineParser::addVersionOption()
function CommandOption (line 233) | CommandOption CommandLineParser::addHelpOption()
function QString (line 300) | QString CommandLineParser::value(const CommandOption& option) const
FILE: src/cli/commandlineparser.h
function class (line 10) | class CommandLineParser
FILE: src/cli/commandoption.cpp
function QStringList (line 42) | QStringList CommandOption::names() const
function QStringList (line 47) | QStringList CommandOption::dashedNames() const
function QString (line 65) | QString CommandOption::valueName() const
function QString (line 78) | QString CommandOption::value() const
function QString (line 95) | QString CommandOption::description() const
function QString (line 105) | QString CommandOption::errorMsg() const
FILE: src/cli/commandoption.h
function class (line 11) | class CommandOption
FILE: src/config/buttonlistview.h
function class (line 9) | class ButtonListView : public QListWidget
FILE: src/config/cacheutils.cpp
function QString (line 12) | QString getCachePath()
function setLastRegion (line 22) | void setLastRegion(QRect const& newRegion)
function QRect (line 34) | QRect getLastRegion()
FILE: src/config/clickablelabel.h
function class (line 8) | class ClickableLabel : public QLabel
FILE: src/config/colorpickereditmode.h
function class (line 9) | class ColorPickerEditMode : public ColorPickerWidget
FILE: src/config/colorpickereditor.h
function class (line 18) | class ColorPickerEditor : public QWidget
FILE: src/config/configerrordetails.h
function class (line 5) | class ConfigErrorDetails : public QDialog
FILE: src/config/configresolver.cpp
function QGridLayout (line 24) | QGridLayout* ConfigResolver::layout()
FILE: src/config/configresolver.h
function class (line 7) | class ConfigResolver : public QDialog
FILE: src/config/configwindow.h
function class (line 15) | class ConfigWindow : public QWidget
FILE: src/config/extendedslider.h
function class (line 9) | class ExtendedSlider : public QSlider
FILE: src/config/filenameeditor.h
function class (line 15) | class FileNameEditor : public QWidget
FILE: src/config/generalconf.cpp
function QString (line 723) | const QString GeneralConf::chooseFolder(const QString& pathDefault)
FILE: src/config/generalconf.h
function class (line 17) | class GeneralConf : public QWidget
FILE: src/config/setshortcutwidget.cpp
function QKeySequence (line 73) | const QKeySequence& SetShortcutDialog::shortcut()
FILE: src/config/setshortcutwidget.h
function class (line 13) | class SetShortcutDialog : public QDialog
FILE: src/config/shortcutswidget.cpp
function QString (line 248) | const QString& ShortcutsWidget::nativeOSHotKeyText(const QString& text)
FILE: src/config/shortcutswidget.h
function class (line 17) | class ShortcutsWidget : public QWidget
FILE: src/config/strftimechooserwidget.h
function class (line 8) | class StrftimeChooserWidget : public QWidget
FILE: src/config/styleoverride.h
function class (line 12) | class StyleOverride : public QProxyStyle
FILE: src/config/uicoloreditor.h
function class (line 15) | class UIcolorEditor : public QWidget
FILE: src/config/visualseditor.h
function class (line 16) | class VisualsEditor : public QWidget
FILE: src/core/capturerequest.cpp
function uint (line 37) | uint CaptureRequest::delay() const
function QString (line 42) | QString CaptureRequest::path() const
function QVariant (line 47) | QVariant CaptureRequest::data() const
function QRect (line 57) | QRect CaptureRequest::initialSelection() const
FILE: src/core/capturerequest.h
function class (line 10) | class CaptureRequest
FILE: src/core/flameshot.cpp
function Flameshot (line 82) | Flameshot* Flameshot::instance()
function CaptureWidget (line 88) | CaptureWidget* Flameshot::gui(const CaptureRequest& req)
function QVersionNumber (line 300) | QVersionNumber Flameshot::getVersion()
FILE: src/core/flameshot.h
type ErrCode (line 22) | enum ErrCode : uint8_t
function class (line 33) | class Flameshot : public QObject
FILE: src/core/flameshotdaemon.cpp
function FlameshotDaemon (line 292) | FlameshotDaemon* FlameshotDaemon::instance()
function QDBusMessage (line 455) | QDBusMessage FlameshotDaemon::createMethodCall(const QString& method)
FILE: src/core/flameshotdaemon.h
function class (line 23) | class FlameshotDaemon : public QObject
FILE: src/core/flameshotdbusadapter.h
function class (line 8) | class FlameshotDBusAdapter : public QDBusAbstractAdaptor
FILE: src/core/qguiappcurrentscreen.cpp
function QScreen (line 15) | QScreen* QGuiAppCurrentScreen::currentScreen()
function QScreen (line 20) | QScreen* QGuiAppCurrentScreen::currentScreen(const QPoint& pos)
function QScreen (line 49) | QScreen* QGuiAppCurrentScreen::screenAt(const QPoint& pos)
FILE: src/core/qguiappcurrentscreen.h
function class (line 11) | class QGuiAppCurrentScreen
FILE: src/core/signaldaemon.h
function class (line 4) | class SignalDaemon : public QObject
FILE: src/main.cpp
function setup_unix_signal_handlers (line 40) | static int setup_unix_signal_handlers()
function requestCaptureAndWait (line 64) | int requestCaptureAndWait(const CaptureRequest& req)
function QSharedMemory (line 93) | QSharedMemory* guiMutexLock()
function configureTranslation (line 110) | void configureTranslation(QTranslator& translator, QTranslator& qtTransl...
function configureApp (line 173) | void configureApp(bool gui, QTranslator& translator, QTranslator& qtTran...
function reinitializeAsQApplication (line 190) | void reinitializeAsQApplication(int& argc,
function main (line 200) | int main(int argc, char* argv[])
FILE: src/tools/abstractactiontool.cpp
function QRect (line 25) | QRect AbstractActionTool::boundingRect() const
FILE: src/tools/abstractactiontool.h
function class (line 8) | class AbstractActionTool : public CaptureTool
FILE: src/tools/abstractpathtool.cpp
function QRect (line 47) | QRect AbstractPathTool::mousePreviewRect(const CaptureContext& context) ...
function QRect (line 54) | QRect AbstractPathTool::boundingRect() const
function QPoint (line 134) | const QPoint* AbstractPathTool::pos()
FILE: src/tools/abstractpathtool.h
function class (line 8) | class AbstractPathTool : public CaptureTool
FILE: src/tools/abstracttwopointtool.cpp
type UNIT (line 14) | enum UNIT
type DIAG_UNIT (line 24) | enum DIAG_UNIT
function QRect (line 70) | QRect AbstractTwoPointTool::mousePreviewRect(
function QRect (line 78) | QRect AbstractTwoPointTool::boundingRect() const
function QPoint (line 134) | QPoint AbstractTwoPointTool::adjustedVector(QPoint v) const
function QPoint (line 183) | const QPoint* AbstractTwoPointTool::pos()
FILE: src/tools/abstracttwopointtool.h
function class (line 8) | class AbstractTwoPointTool : public CaptureTool
function setPadding (line 41) | void setPadding(int padding) { m_padding = padding; }
FILE: src/tools/accept/accepttool.cpp
function QIcon (line 23) | QIcon AcceptTool::icon(const QColor& background, bool inEditor) const
function QString (line 29) | QString AcceptTool::name() const
function QString (line 39) | QString AcceptTool::description() const
function CaptureTool (line 44) | CaptureTool* AcceptTool::copy(QObject* parent)
FILE: src/tools/accept/accepttool.h
function class (line 8) | class AcceptTool : public AbstractActionTool
FILE: src/tools/arrow/arrowtool.cpp
function QPainterPath (line 12) | QPainterPath getArrowHead(QPoint p1, QPoint p2, const int thickness)
function QLine (line 45) | QLine getShorterLine(QPoint p1, QPoint p2, const int thickness)
function QIcon (line 70) | QIcon ArrowTool::icon(const QColor& background, bool inEditor) const
function QString (line 75) | QString ArrowTool::name() const
function QString (line 85) | QString ArrowTool::description() const
function QRect (line 90) | QRect ArrowTool::boundingRect() const
function CaptureTool (line 137) | CaptureTool* ArrowTool::copy(QObject* parent)
FILE: src/tools/arrow/arrowtool.h
function class (line 10) | class ArrowTool : public AbstractTwoPointTool
FILE: src/tools/capturecontext.cpp
function QPixmap (line 9) | QPixmap CaptureContext::selectedScreenshotArea() const
FILE: src/tools/capturecontext.h
type CaptureContext (line 12) | struct CaptureContext
FILE: src/tools/capturetool.h
function class (line 12) | class CaptureTool : public QObject
function virtual (line 113) | virtual QString name() const = 0;
function virtual (line 128) | virtual QWidget* configurationWidget() { return nullptr; }
function virtual (line 132) | virtual void setEditMode(bool b) { m_editMode = b; }
function virtual (line 133) | virtual bool editMode() { return m_editMode; }
function virtual (line 136) | virtual bool isChanged() { return true; }
function virtual (line 140) | virtual void setCount(int count) { m_count = count; }
function virtual (line 158) | virtual void move(const QPoint& pos) { Q_UNUSED(pos) };
FILE: src/tools/circle/circletool.cpp
function QIcon (line 13) | QIcon CircleTool::icon(const QColor& background, bool inEditor) const
function QString (line 18) | QString CircleTool::name() const
function QString (line 28) | QString CircleTool::description() const
function CaptureTool (line 33) | CaptureTool* CircleTool::copy(QObject* parent)
FILE: src/tools/circle/circletool.h
function class (line 8) | class CircleTool : public AbstractTwoPointTool
FILE: src/tools/circlecount/circlecounttool.cpp
function QIcon (line 19) | QIcon CircleCountTool::icon(const QColor& background, bool inEditor) const
function QString (line 25) | QString CircleCountTool::info()
function QRect (line 36) | QRect CircleCountTool::mousePreviewRect(const CaptureContext& context) c...
function QRect (line 44) | QRect CircleCountTool::boundingRect() const
function QString (line 66) | QString CircleCountTool::name() const
function QString (line 84) | QString CircleCountTool::description() const
function CaptureTool (line 89) | CaptureTool* CircleCountTool::copy(QObject* parent)
FILE: src/tools/circlecount/circlecounttool.h
function class (line 8) | class CircleCountTool : public AbstractTwoPointTool
FILE: src/tools/copy/copytool.cpp
function QIcon (line 17) | QIcon CopyTool::icon(const QColor& background, bool inEditor) const
function QString (line 22) | QString CopyTool::name() const
function QString (line 32) | QString CopyTool::description() const
function CaptureTool (line 37) | CaptureTool* CopyTool::copy(QObject* parent)
FILE: src/tools/copy/copytool.h
function class (line 8) | class CopyTool : public AbstractActionTool
FILE: src/tools/exit/exittool.cpp
function QIcon (line 16) | QIcon ExitTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString ExitTool::name() const
function QString (line 31) | QString ExitTool::description() const
function CaptureTool (line 36) | CaptureTool* ExitTool::copy(QObject* parent)
FILE: src/tools/exit/exittool.h
function class (line 8) | class ExitTool : public AbstractActionTool
FILE: src/tools/imgupload/imguploadermanager.cpp
function ImgUploaderBase (line 36) | ImgUploaderBase* ImgUploaderManager::uploader(const QPixmap& capture,
function ImgUploaderBase (line 55) | ImgUploaderBase* ImgUploaderManager::uploader(const QString& imgUploader...
function QString (line 62) | const QString& ImgUploaderManager::uploaderPlugin()
function QString (line 67) | const QString& ImgUploaderManager::url()
FILE: src/tools/imgupload/imguploadermanager.h
function class (line 16) | class ImgUploaderManager : public QObject
FILE: src/tools/imgupload/imguploadertool.cpp
function QIcon (line 15) | QIcon ImgUploaderTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString ImgUploaderTool::name() const
function QString (line 31) | QString ImgUploaderTool::description() const
function CaptureTool (line 36) | CaptureTool* ImgUploaderTool::copy(QObject* parent)
FILE: src/tools/imgupload/imguploadertool.h
function class (line 8) | class ImgUploaderTool : public AbstractActionTool
FILE: src/tools/imgupload/storages/imguploaderbase.cpp
function LoadSpinner (line 61) | LoadSpinner* ImgUploaderBase::spinner()
function QUrl (line 66) | const QUrl& ImgUploaderBase::imageURL()
function QPixmap (line 76) | const QPixmap& ImgUploaderBase::pixmap()
function NotificationWidget (line 86) | NotificationWidget* ImgUploaderBase::notification()
FILE: src/tools/imgupload/storages/imguploaderbase.h
function class (line 19) | class ImgUploaderBase : public QWidget
FILE: src/tools/imgupload/storages/imgur/imguruploader.h
function class (line 14) | class ImgurUploader : public ImgUploaderBase
FILE: src/tools/invert/inverttool.cpp
function QIcon (line 17) | QIcon InvertTool::icon(const QColor& background, bool inEditor) const
function QString (line 23) | QString InvertTool::name() const
function QString (line 33) | QString InvertTool::description() const
function QRect (line 38) | QRect InvertTool::boundingRect() const
function CaptureTool (line 43) | CaptureTool* InvertTool::copy(QObject* parent)
FILE: src/tools/invert/inverttool.h
function class (line 8) | class InvertTool : public AbstractTwoPointTool
FILE: src/tools/launcher/applaunchertool.cpp
function QIcon (line 16) | QIcon AppLauncher::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString AppLauncher::name() const
function QString (line 31) | QString AppLauncher::description() const
function QWidget (line 36) | QWidget* AppLauncher::widget()
function CaptureTool (line 41) | CaptureTool* AppLauncher::copy(QObject* parent)
FILE: src/tools/launcher/applaunchertool.h
function class (line 8) | class AppLauncher : public AbstractActionTool
FILE: src/tools/launcher/applauncherwidget.h
function class (line 21) | class AppLauncherWidget : public QWidget
FILE: src/tools/launcher/launcheritemdelegate.cpp
function QSize (line 46) | QSize LauncherItemDelegate::sizeHint(const QStyleOptionViewItem& option,
FILE: src/tools/launcher/launcheritemdelegate.h
function class (line 9) | class LauncherItemDelegate : public QStyledItemDelegate
FILE: src/tools/launcher/openwithprogram.cpp
function showOpenWithMenu (line 22) | void showOpenWithMenu(const QPixmap& capture)
FILE: src/tools/launcher/terminallauncher.cpp
function TerminalApp (line 31) | TerminalApp TerminalLauncher::getPreferedTerminal()
FILE: src/tools/launcher/terminallauncher.h
type TerminalApp (line 8) | struct TerminalApp
function class (line 14) | class TerminalLauncher : public QObject
FILE: src/tools/line/linetool.cpp
function QIcon (line 14) | QIcon LineTool::icon(const QColor& background, bool inEditor) const
function QString (line 20) | QString LineTool::name() const
function QString (line 30) | QString LineTool::description() const
function CaptureTool (line 35) | CaptureTool* LineTool::copy(QObject* parent)
FILE: src/tools/line/linetool.h
function class (line 8) | class LineTool : public AbstractTwoPointTool
FILE: src/tools/marker/markertool.cpp
function QIcon (line 16) | QIcon MarkerTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString MarkerTool::name() const
function QString (line 31) | QString MarkerTool::description() const
function QRect (line 36) | QRect MarkerTool::mousePreviewRect(const CaptureContext& context) const
function CaptureTool (line 44) | CaptureTool* MarkerTool::copy(QObject* parent)
FILE: src/tools/marker/markertool.h
function class (line 8) | class MarkerTool : public AbstractTwoPointTool
FILE: src/tools/move/movetool.cpp
function QIcon (line 16) | QIcon MoveTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString MoveTool::name() const
function QString (line 31) | QString MoveTool::description() const
function CaptureTool (line 36) | CaptureTool* MoveTool::copy(QObject* parent)
FILE: src/tools/move/movetool.h
function class (line 8) | class MoveTool : public AbstractActionTool
FILE: src/tools/pencil/penciltool.cpp
function QIcon (line 11) | QIcon PencilTool::icon(const QColor& background, bool inEditor) const
function QString (line 16) | QString PencilTool::name() const
function QString (line 26) | QString PencilTool::description() const
function CaptureTool (line 31) | CaptureTool* PencilTool::copy(QObject* parent)
FILE: src/tools/pencil/penciltool.h
function class (line 8) | class PencilTool : public AbstractPathTool
FILE: src/tools/pin/pintool.cpp
function QIcon (line 18) | QIcon PinTool::icon(const QColor& background, bool inEditor) const
function QString (line 23) | QString PinTool::name() const
function QString (line 33) | QString PinTool::description() const
function CaptureTool (line 38) | CaptureTool* PinTool::copy(QObject* parent)
FILE: src/tools/pin/pintool.h
function class (line 8) | class PinTool : public AbstractActionTool
FILE: src/tools/pin/pinwidget.h
function qreal (line 52) | qreal m_scaleFactor{ 1 }
function qreal (line 53) | qreal m_opacity{ 1 }
function m_rotateFactor (line 54) | unsigned int m_rotateFactor{ 0 }
function qreal (line 55) | qreal m_currentStepScaleFactor{ 1 }
function m_sizeChanged (line 56) | bool m_sizeChanged{ false };
FILE: src/tools/pixelate/pixelatetool.cpp
function QIcon (line 19) | QIcon PixelateTool::icon(const QColor& background, bool inEditor) const
function QString (line 25) | QString PixelateTool::name() const
function QString (line 35) | QString PixelateTool::description() const
function QRect (line 40) | QRect PixelateTool::boundingRect() const
function CaptureTool (line 45) | CaptureTool* PixelateTool::copy(QObject* parent)
FILE: src/tools/pixelate/pixelatetool.h
function class (line 8) | class PixelateTool : public AbstractTwoPointTool
FILE: src/tools/rectangle/rectangletool.cpp
function QIcon (line 15) | QIcon RectangleTool::icon(const QColor& background, bool inEditor) const
function QString (line 20) | QString RectangleTool::name() const
function QString (line 30) | QString RectangleTool::description() const
function CaptureTool (line 35) | CaptureTool* RectangleTool::copy(QObject* parent)
FILE: src/tools/rectangle/rectangletool.h
function class (line 8) | class RectangleTool : public AbstractTwoPointTool
FILE: src/tools/redo/redotool.cpp
function QIcon (line 16) | QIcon RedoTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString RedoTool::name() const
function QString (line 31) | QString RedoTool::description() const
function CaptureTool (line 36) | CaptureTool* RedoTool::copy(QObject* parent)
FILE: src/tools/redo/redotool.h
function class (line 8) | class RedoTool : public AbstractActionTool
FILE: src/tools/save/savetool.cpp
function QIcon (line 17) | QIcon SaveTool::icon(const QColor& background, bool inEditor) const
function QString (line 22) | QString SaveTool::name() const
function QString (line 32) | QString SaveTool::description() const
function CaptureTool (line 37) | CaptureTool* SaveTool::copy(QObject* parent)
FILE: src/tools/save/savetool.h
function class (line 8) | class SaveTool : public AbstractActionTool
FILE: src/tools/selection/selectiontool.cpp
function QIcon (line 18) | QIcon SelectionTool::icon(const QColor& background, bool inEditor) const
function QString (line 23) | QString SelectionTool::name() const
function QString (line 33) | QString SelectionTool::description() const
function CaptureTool (line 38) | CaptureTool* SelectionTool::copy(QObject* parent)
FILE: src/tools/selection/selectiontool.h
function class (line 8) | class SelectionTool : public AbstractTwoPointTool
FILE: src/tools/sizedecrease/sizedecreasetool.cpp
function QIcon (line 30) | QIcon SizeDecreaseTool::icon(const QColor& background, bool inEditor) const
function QString (line 35) | QString SizeDecreaseTool::name() const
function QString (line 45) | QString SizeDecreaseTool::description() const
function CaptureTool (line 50) | CaptureTool* SizeDecreaseTool::copy(QObject* parent)
FILE: src/tools/sizedecrease/sizedecreasetool.h
function class (line 22) | class SizeDecreaseTool : public AbstractActionTool
FILE: src/tools/sizeincrease/sizeincreasetool.cpp
function QIcon (line 30) | QIcon SizeIncreaseTool::icon(const QColor& background, bool inEditor) const
function QString (line 35) | QString SizeIncreaseTool::name() const
function QString (line 45) | QString SizeIncreaseTool::description() const
function CaptureTool (line 50) | CaptureTool* SizeIncreaseTool::copy(QObject* parent)
FILE: src/tools/sizeincrease/sizeincreasetool.h
function class (line 22) | class SizeIncreaseTool : public AbstractActionTool
FILE: src/tools/text/textconfig.h
function class (line 12) | class TextConfig : public QWidget
FILE: src/tools/text/texttool.cpp
function QRect (line 60) | QRect TextTool::boundingRect() const
function QIcon (line 65) | QIcon TextTool::icon(const QColor& background, bool inEditor) const
function QString (line 71) | QString TextTool::name() const
function QString (line 76) | QString TextTool::info()
function QString (line 95) | QString TextTool::description() const
function QWidget (line 100) | QWidget* TextTool::widget()
function QWidget (line 128) | QWidget* TextTool::configurationWidget()
function CaptureTool (line 162) | CaptureTool* TextTool::copy(QObject* parent)
function QPoint (line 340) | const QPoint* TextTool::pos()
FILE: src/tools/text/texttool.h
function class (line 13) | class TextTool : public CaptureTool
FILE: src/tools/text/textwidget.h
function class (line 8) | class TextWidget : public QTextEdit
FILE: src/tools/toolfactory.cpp
function CaptureTool (line 35) | CaptureTool* ToolFactory::CreateTool(CaptureTool::Type t, QObject* parent)
FILE: src/tools/toolfactory.h
function class (line 12) | class ToolFactory : public QObject
FILE: src/tools/undo/undotool.cpp
function QIcon (line 16) | QIcon UndoTool::icon(const QColor& background, bool inEditor) const
function QString (line 21) | QString UndoTool::name() const
function QString (line 31) | QString UndoTool::description() const
function CaptureTool (line 36) | CaptureTool* UndoTool::copy(QObject* parent)
FILE: src/tools/undo/undotool.h
function class (line 8) | class UndoTool : public AbstractActionTool
FILE: src/utils/abstractlogger.cpp
function AbstractLogger (line 33) | AbstractLogger AbstractLogger::info(int targets)
function AbstractLogger (line 38) | AbstractLogger AbstractLogger::warning(int targets)
function AbstractLogger (line 43) | AbstractLogger AbstractLogger::error(int targets)
function AbstractLogger (line 48) | AbstractLogger& AbstractLogger::sendMessage(const QString& msg, Channel ...
function AbstractLogger (line 80) | AbstractLogger& AbstractLogger::operator<<(const QString& msg)
function AbstractLogger (line 86) | AbstractLogger& AbstractLogger::addOutputString(QString& str)
function AbstractLogger (line 95) | AbstractLogger& AbstractLogger::attachNotificationPath(const QString& path)
function AbstractLogger (line 109) | AbstractLogger& AbstractLogger::enableMessageHeader(bool enable)
function QString (line 118) | QString AbstractLogger::messageHeader(Channel channel, Target target)
FILE: src/utils/abstractlogger.h
function class (line 10) | class AbstractLogger
FILE: src/utils/colorutils.cpp
function qreal (line 6) | inline qreal getColorLuma(const QColor& c)
function QColor (line 17) | QColor ColorUtils::contrastColor(const QColor& c)
FILE: src/utils/colorutils.h
function namespace (line 8) | namespace ColorUtils { // namespace
FILE: src/utils/confighandler.cpp
function verifyLaunchFile (line 27) | bool verifyLaunchFile()
class QString (line 74) | class QString
function ConfigHandler (line 247) | ConfigHandler* ConfigHandler::getInstance()
function QString (line 393) | QString ConfigHandler::filenamePatternDefault()
function QString (line 410) | QString ConfigHandler::configFilePath() const
function QString (line 465) | QString ConfigHandler::shortcut(const QString& actionName)
function QVariant (line 496) | QVariant ConfigHandler::value(const QString& key) const
function QString (line 749) | QString ConfigHandler::errorMessage() const
function QString (line 822) | QString ConfigHandler::baseName(const QString& key) const
FILE: src/utils/confighandler.h
function class (line 61) | class ConfigHandler : public QObject
FILE: src/utils/desktopfileparse.cpp
function DesktopAppData (line 23) | DesktopAppData DesktopFileParser::parseDesktopFile(const QString& fileName,
FILE: src/utils/desktopfileparse.h
type DesktopAppData (line 14) | struct DesktopAppData
type DesktopFileParser (line 44) | struct DesktopFileParser
FILE: src/utils/desktopinfo.h
function class (line 8) | class DesktopInfo
FILE: src/utils/filenamehandler.cpp
function QString (line 27) | QString FileNameHandler::parsedPattern()
function QString (line 32) | QString FileNameHandler::parseFilename(const QString& name)
function QString (line 73) | QString FileNameHandler::properScreenshotPath(QString path,
function QString (line 105) | QString FileNameHandler::autoNumerateDuplicate(const QString& path)
FILE: src/utils/filenamehandler.h
function class (line 8) | class FileNameHandler : public QObject
FILE: src/utils/globalvalues.cpp
function QString (line 17) | QString GlobalValues::versionInfo()
function QString (line 23) | QString GlobalValues::iconPath()
function QString (line 32) | QString GlobalValues::iconPathPNG()
function QString (line 41) | QString GlobalValues::trayIconPath()
FILE: src/utils/globalvalues.h
function namespace (line 8) | namespace GlobalValues {
FILE: src/utils/history.cpp
function QString (line 27) | const QString& History::path()
function HistoryFileName (line 75) | const HistoryFileName& History::unpackFileName(const QString& fileNamePa...
function QString (line 105) | const QString& History::packFileName(const QString& storageType,
FILE: src/utils/history.h
type HistoryFileName (line 11) | struct HistoryFileName
function class (line 18) | class History
FILE: src/utils/monitorpreview.h
function class (line 13) | class MonitorPreview : public QWidget
FILE: src/utils/pathinfo.cpp
function QString (line 9) | const QString PathInfo::whiteIconPath()
function QString (line 14) | const QString PathInfo::blackIconPath()
function QStringList (line 19) | QStringList PathInfo::translationsPaths()
FILE: src/utils/pathinfo.h
function namespace (line 8) | namespace PathInfo { // namespace
FILE: src/utils/request.h
function class (line 25) | class OrgFreedesktopPortalRequestInterface : public QDBusAbstractInterface
function namespace (line 53) | namespace org {
FILE: src/utils/screengrabber.cpp
function QPixmap (line 140) | QPixmap ScreenGrabber::selectMonitorAndCrop(const QPixmap& fullScreenshot,
function QPixmap (line 189) | QPixmap ScreenGrabber::grabEntireDesktop(bool& ok, int preSelectedMonitor)
function QPixmap (line 231) | QPixmap ScreenGrabber::grabFullDesktop(bool& ok)
function QRect (line 271) | QRect ScreenGrabber::screenGeometry(QScreen* screen)
function QPixmap (line 281) | QPixmap ScreenGrabber::grabScreen(QScreen* screen, bool& ok)
function QRect (line 298) | QRect ScreenGrabber::desktopGeometry()
function QScreen (line 314) | QScreen* ScreenGrabber::getSelectedScreen() const
function QWidget (line 325) | QWidget* ScreenGrabber::createMonitorPreviews(const QPixmap& fullScreens...
function QPixmap (line 417) | QPixmap ScreenGrabber::cropToMonitor(const QPixmap& fullScreenshot,
function QPixmap (line 556) | QPixmap ScreenGrabber::windowsScreenshot(int wid)
FILE: src/utils/screengrabber.h
function class (line 16) | class ScreenGrabber : public QObject
FILE: src/utils/screenshotsaver.cpp
function saveToFilesystem (line 40) | bool saveToFilesystem(const QPixmap& capture,
function QString (line 82) | QString ShowSaveFileDialog(const QString& title, const QString& directory)
function saveJpegToClipboardMacOS (line 115) | void saveJpegToClipboardMacOS(const QPixmap& capture)
function saveToClipboardMime (line 154) | void saveToClipboardMime(const QPixmap& capture, const QString& imageType)
function saveToClipboard (line 197) | void saveToClipboard(const QPixmap& capture)
class ClipboardWatcherMimeData (line 229) | class ClipboardWatcherMimeData : public QMimeData
method ClipboardWatcherMimeData (line 232) | ClipboardWatcherMimeData(const QImage& img, QWidget* owner)
method QStringList (line 238) | QStringList formats() const override
method QVariant (line 244) | QVariant retrieveData(const QString& mimeType,
method notifyOwner (line 266) | void notifyOwner() const
function saveToClipboardGnomeWorkaround (line 284) | bool saveToClipboardGnomeWorkaround(const QPixmap& pixmap, QWidget* keep...
function saveToFilesystemGUI (line 303) | bool saveToFilesystemGUI(const QPixmap& capture)
FILE: src/utils/strfparse.cpp
type strfparse (line 6) | namespace strfparse {
function split (line 7) | std::vector<std::string> split(std::string const& s, char delimiter)
function create_specifier_list (line 18) | std::vector<char> create_specifier_list()
function replace_all (line 29) | std::string replace_all(std::string input,
function match_specifiers (line 42) | std::vector<char> match_specifiers(std::string const& specifier,
function format_time_string (line 67) | std::string format_time_string(std::string const& specifier)
FILE: src/utils/strfparse.h
function namespace (line 10) | namespace strfparse {
FILE: src/utils/systemnotification.h
function class (line 10) | class SystemNotification : public QObject
FILE: src/utils/valuehandler.cpp
function QVariant (line 17) | QVariant ValueHandler::value(const QVariant& val)
function QVariant (line 26) | QVariant ValueHandler::fallback()
function QVariant (line 31) | QVariant ValueHandler::representation(const QVariant& val)
function QString (line 36) | QString ValueHandler::expected()
function QVariant (line 41) | QVariant ValueHandler::process(const QVariant& val)
function QVariant (line 61) | QVariant Bool::fallback()
function QString (line 66) | QString Bool::expected()
function QVariant (line 82) | QVariant String::fallback()
function QString (line 87) | QString String::expected()
function QVariant (line 112) | QVariant Color::process(const QVariant& val)
function QVariant (line 127) | QVariant Color::fallback()
function QVariant (line 132) | QVariant Color::representation(const QVariant& val)
function QString (line 147) | QString Color::expected()
function QVariant (line 168) | QVariant BoundedInt::fallback()
function QString (line 173) | QString BoundedInt::expected()
function QVariant (line 193) | QVariant LowerBoundedInt::fallback()
function QString (line 198) | QString LowerBoundedInt::expected()
function QVariant (line 218) | QVariant KeySequence::fallback()
function QString (line 223) | QString KeySequence::expected()
function QVariant (line 228) | QVariant KeySequence::representation(const QVariant& val)
function QVariant (line 237) | QVariant KeySequence::process(const QVariant& val)
function QVariant (line 261) | QVariant ExistingDir::fallback()
function QString (line 274) | QString ExistingDir::expected()
function QVariant (line 286) | QVariant FilenamePattern::fallback()
function QVariant (line 291) | QVariant FilenamePattern::process(const QVariant& val)
function QString (line 297) | QString FilenamePattern::expected()
function sortButtons (line 321) | void sortButtons(BList& buttons)
function QVariant (line 329) | QVariant ButtonList::process(const QVariant& val)
function QVariant (line 337) | QVariant ButtonList::fallback()
function QVariant (line 346) | QVariant ButtonList::representation(const QVariant& val)
function QString (line 353) | QString ButtonList::expected()
function QVariant (line 423) | QVariant UserColors::process(const QVariant& val)
function QVariant (line 444) | QVariant UserColors::fallback()
function QString (line 455) | QString UserColors::expected()
function QVariant (line 462) | QVariant UserColors::representation(const QVariant& val)
function QVariant (line 504) | QVariant SaveFileExtension::process(const QVariant& val)
function QString (line 515) | QString SaveFileExtension::expected()
function QVariant (line 531) | QVariant Region::process(const QVariant& val)
FILE: src/utils/valuehandler.h
function class (line 36) | class ValueHandler
function class (line 87) | class Bool : public ValueHandler
function class (line 99) | class String : public ValueHandler
function QVariant (line 117) | QVariant fallback() override;
function class (line 138) | class LowerBoundedInt : public ValueHandler
function class (line 150) | class KeySequence : public ValueHandler
function class (line 165) | class ExistingDir : public ValueHandler
function class (line 172) | class FilenamePattern : public ValueHandler
function QVariant (line 185) | QVariant fallback() override;
function class (line 209) | class SaveFileExtension : public ValueHandler
function class (line 216) | class Region : public ValueHandler
FILE: src/utils/waylandutils.h
function class (line 4) | class WaylandUtils
FILE: src/utils/winlnkfileparse.cpp
function DesktopAppData (line 24) | DesktopAppData WinLnkFileParser::parseLnkFile(const QFileInfo& fiLnk,
function QString (line 126) | QString WinLnkFileParser::getAllUsersStartMenuPath()
FILE: src/utils/winlnkfileparse.h
type CompareAppByName (line 15) | struct CompareAppByName
type WinLnkFileParser (line 23) | struct WinLnkFileParser
FILE: src/widgets/capture/buttonhandler.cpp
function QRect (line 226) | QRect ButtonHandler::intersectWithAreas(const QRect& rect)
FILE: src/widgets/capture/buttonhandler.h
function class (line 15) | class ButtonHandler : public QObject
FILE: src/widgets/capture/capturebutton.cpp
function QString (line 43) | QString CaptureButton::globalStyleSheet()
function QString (line 48) | QString CaptureButton::styleSheet() const
FILE: src/widgets/capture/capturebutton.h
function class (line 8) | class CaptureButton : public QPushButton
FILE: src/widgets/capture/capturetoolbutton.cpp
function QIcon (line 90) | QIcon CaptureToolButton::icon() const
function CaptureTool (line 119) | CaptureTool* CaptureToolButton::tool() const
FILE: src/widgets/capture/capturetoolbutton.h
function class (line 14) | class CaptureToolButton : public CaptureButton
FILE: src/widgets/capture/capturetoolobjects.cpp
function CaptureToolObjects (line 142) | CaptureToolObjects& CaptureToolObjects::operator=(
FILE: src/widgets/capture/capturetoolobjects.h
function class (line 11) | class CaptureToolObjects : public QObject
FILE: src/widgets/capture/capturewidget.cpp
function QPixmap (line 482) | QPixmap CaptureWidget::pixmap()
function CaptureTool (line 1865) | CaptureTool* CaptureWidget::activeButtonTool() const
function QPoint (line 1882) | QPoint CaptureWidget::snapToGrid(const QPoint& point) const
function QRect (line 2016) | QRect CaptureWidget::extendedSelection() const
function QRect (line 2025) | QRect CaptureWidget::extendedRect(const QRect& r) const
function QRect (line 2034) | QRect CaptureWidget::paddedUpdateRect(const QRect& r) const
FILE: src/widgets/capture/capturewidget.h
function m_clipboardWorkaroundDone (line 234) | bool m_clipboardWorkaroundDone{ false };
FILE: src/widgets/capture/colorpicker.h
function class (line 8) | class ColorPicker : public ColorPickerWidget
FILE: src/widgets/capture/hovereventfilter.h
function class (line 16) | class HoverEventFilter : public QObject
FILE: src/widgets/capture/magnifierwidget.h
function class (line 7) | class MagnifierWidget : public QWidget
FILE: src/widgets/capture/modificationcommand.h
function class (line 12) | class ModificationCommand : public QUndoCommand
FILE: src/widgets/capture/notifierbox.h
function class (line 10) | class NotifierBox : public QWidget
FILE: src/widgets/capture/overlaymessage.cpp
function OverlayMessage (line 70) | OverlayMessage* OverlayMessage::instance()
function QString (line 84) | QString OverlayMessage::compileFromKeyMap(
function QRect (line 115) | QRect OverlayMessage::boundingRect() const
FILE: src/widgets/capture/overlaymessage.h
function class (line 20) | class OverlayMessage : public QLabel
FILE: src/widgets/capture/selectionwidget.cpp
function getProperSide (line 91) | SelectionWidget::SideType getProperSide(SelectionWidget::SideType side,
function QRect (line 141) | QRect SelectionWidget::geometry() const
function QRect (line 146) | QRect SelectionWidget::fullGeometry() const
function QRect (line 151) | QRect SelectionWidget::rect() const
FILE: src/widgets/capture/selectionwidget.h
function class (line 10) | class SelectionWidget : public QWidget
FILE: src/widgets/capturelauncher.h
function QT_BEGIN_NAMESPACE (line 9) | QT_BEGIN_NAMESPACE
FILE: src/widgets/colorpickerwidget.h
function class (line 8) | class ColorPickerWidget : public QWidget
FILE: src/widgets/draggablewidgetmaker.h
function class (line 11) | class DraggableWidgetMaker : public QObject
FILE: src/widgets/imagelabel.h
function class (line 18) | class ImageLabel : public QLabel
FILE: src/widgets/imguploaddialog.h
function class (line 13) | class ImgUploadDialog : public QDialog
FILE: src/widgets/infowindow.cpp
function QString (line 47) | QString generateKernelString()
FILE: src/widgets/infowindow.h
function QT_BEGIN_NAMESPACE (line 8) | QT_BEGIN_NAMESPACE
FILE: src/widgets/loadspinner.h
function class (line 8) | class LoadSpinner : public QWidget
FILE: src/widgets/notificationwidget.h
function class (line 14) | class NotificationWidget : public QWidget
FILE: src/widgets/orientablepushbutton.cpp
function QSize (line 25) | QSize OrientablePushButton::sizeHint() const
FILE: src/widgets/orientablepushbutton.h
function class (line 11) | class OrientablePushButton : public CaptureButton
FILE: src/widgets/panel/colorgrabwidget.cpp
function QColor (line 64) | QColor ColorGrabWidget::color()
function QPoint (line 155) | QPoint ColorGrabWidget::cursorPos() const
function QColor (line 161) | QColor ColorGrabWidget::getColorAtPoint(const QPoint& p) const
FILE: src/widgets/panel/colorgrabwidget.h
function class (line 9) | class ColorGrabWidget : public QWidget
FILE: src/widgets/panel/sidepanelwidget.h
function ColorGrabWidget (line 59) | ColorGrabWidget* m_colorGrabber{}
function m_toolSize (line 68) | int m_toolSize{}
function QSpinBox (line 70) | QSpinBox* m_gridSizeSpin{ nullptr };
FILE: src/widgets/panel/utilitypanel.cpp
function QWidget (line 51) | QWidget* UtilityPanel::toolWidget() const
FILE: src/widgets/panel/utilitypanel.h
function class (line 18) | class UtilityPanel : public QWidget
FILE: src/widgets/trayicon.cpp
function QAction (line 103) | QAction* TrayIcon::appUpdates()
FILE: src/widgets/trayicon.h
function class (line 7) | class TrayIcon : public QSystemTrayIcon
FILE: src/widgets/updatenotificationwidget.h
function class (line 17) | class UpdateNotificationWidget : public QWidget
FILE: src/widgets/uploadhistory.cpp
function scaleThumbnail (line 12) | void scaleThumbnail(QPixmap& pixmap)
function clearHistoryLayout (line 24) | void clearHistoryLayout(QLayout* layout)
FILE: src/widgets/uploadhistory.h
function QT_BEGIN_NAMESPACE (line 6) | QT_BEGIN_NAMESPACE
function class (line 15) | class UploadHistory : public QWidget
FILE: src/widgets/uploadlineitem.cpp
function removeCacheFile (line 15) | void removeCacheFile(QString const& fullFileName)
FILE: src/widgets/uploadlineitem.h
type HistoryFileName (line 6) | struct HistoryFileName
function QT_BEGIN_NAMESPACE (line 8) | QT_BEGIN_NAMESPACE
function class (line 16) | class UploadLineItem : public QWidget
FILE: src/windows-cli.cpp
function joinArgs (line 4) | std::wstring joinArgs(int argc, wchar_t* argv[])
function CallFlameshot (line 16) | void CallFlameshot(const std::wstring args, bool wait)
function wmain (line 57) | int wmain(int argc, wchar_t* argv[])
Condensed preview — 368 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,742K chars).
[
{
"path": ".clang-format",
"chars": 356,
"preview": "Language: Cpp\nBasedOnStyle: Mozilla\nIndentWidth: 4\nAccessModifierOffset: -4\nAlwaysBreakAfterDefinitionReturnType: None\nA"
},
{
"path": ".clang-tidy",
"chars": 253,
"preview": "\n---\nChecks: '*,-fuchsia-*,-google-*,-zircon-*,-abseil-*,-modernize-use-trailing-return-type,-llvm-*,-llvmlibc-"
},
{
"path": ".cmake-format.yaml",
"chars": 316,
"preview": "additional_commands:\n foo:\n flags:\n - BAR\n - BAZ\n kwargs:\n DEPENDS: '*'\n HEADERS: '*'\n SOURC"
},
{
"path": ".envrc",
"chars": 10,
"preview": "use flake\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yaml",
"chars": 3262,
"preview": "name: Bug Report\ndescription: Found something you weren't expecting? Report it here!\nlabels: [\"Unconfirmed Bug\"]\nbody:\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yaml",
"chars": 786,
"preview": "name: Feature Request\ndescription: Got an idea for a feature that can make Flameshot even better? Propose your suggestio"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 384,
"preview": "<!--\nWrite the question you have. Try to explain it in details if possible. Feel free to include screenshots, pictures, "
},
{
"path": ".github/workflows/Linux-arm-pack.yml",
"chars": 5134,
"preview": "name: Packaging(Linux - ARM)\n\non:\n #push:\n # branches:\n # - master\n # - fix*\n # - move-arm-ci-to-new-ci\n "
},
{
"path": ".github/workflows/Linux-pack.yml",
"chars": 20958,
"preview": "name: Packaging(Linux)\n\non:\n push:\n branches:\n - master\n - fix*\n paths-ignore:\n - 'README.md'\n "
},
{
"path": ".github/workflows/MacOS-pack.yml",
"chars": 2874,
"preview": "name: Packaging(MacOS)\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - 'README.md'\n - 'LICENSE'"
},
{
"path": ".github/workflows/Windows-pack.yml",
"chars": 7809,
"preview": "name: Packaging(Windows)\n\non:\n push:\n branches:\n - master\n - fix*\n paths-ignore:\n - 'README.md'\n "
},
{
"path": ".github/workflows/build_cmake.yml",
"chars": 3916,
"preview": "name: Building(CMake)\n\non:\n push:\n branches: [ master ]\n paths-ignore:\n - 'README.md'\n - 'LICENSE'\n "
},
{
"path": ".github/workflows/clang-format.yml",
"chars": 790,
"preview": "name: test-clang-format\n\non:\n push:\n paths-ignore:\n - 'README.md'\n - 'LICENSE'\n - 'docs/**'\n - '"
},
{
"path": ".github/workflows/deploy-dev-docs.yml",
"chars": 2699,
"preview": "name: Deploy developer docs\n\non:\n push:\n branches: [ master, docs ]\n paths:\n - 'src/**'\n - 'docs/dev/**"
},
{
"path": ".gitignore",
"chars": 770,
"preview": "# common\n\n.idea\n.cache\n# C++ objects and libs\n\n*.slo\n*.lo\n*.o\n*.a\n*.la\n*.lai\n*.so\n*.dll\n*.dylib\n\n# Qt-es\n\n/.qmake.cache\n"
},
{
"path": "CMakeLists.txt",
"chars": 7599,
"preview": "cmake_minimum_required(VERSION 3.22)\n# cmake_policy(SET CMP0076 OLD)\n\nset(FLAMESHOT_VERSION 13.3.0)\n\n# Flameshot-org\nset"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3352,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "PKGBUILD",
"chars": 1251,
"preview": "pkgname=flameshot-git\n_pkgname=flameshot\npkgver=r2022.277eb2f4\npkgrel=1\npkgdesc=\"Powerful yet simple to use screenshot s"
},
{
"path": "README.md",
"chars": 27770,
"preview": "<div align=\"center\">\n <p>\n <h1>\n <a href=\"https://github.com/flameshot-org/flameshot\">\n <img src=\"data/i"
},
{
"path": "appveyor.yml",
"chars": 1406,
"preview": "image:\n - Visual Studio 2022\nclone_folder: c:\\projects\\source\n\nenvironment:\n Qt6_INSTALL_DIR: 'C:\\Qt\\6.9.3\\msvc2022_64"
},
{
"path": "cmake/Cache.cmake",
"chars": 808,
"preview": "option(ENABLE_CACHE \"Enable cache if available\" ON)\nif(NOT ENABLE_CACHE)\n return()\nendif()\n\nset(CACHE_OPTION\n \"ccach"
},
{
"path": "cmake/CompilerWarnings.cmake",
"chars": 4093,
"preview": "# from here:\n#\n# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md\n\nfunction(set_pr"
},
{
"path": "cmake/Sanitizers.cmake",
"chars": 2086,
"preview": "function(enable_sanitizers project_name)\n\n if(CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\" OR CMAKE_CXX_COMPILER_ID MATCHES \".*"
},
{
"path": "cmake/StandardProjectSettings.cmake",
"chars": 1002,
"preview": "# Set a default build type if none was specified\nif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)\n message(ST"
},
{
"path": "cmake/StaticAnalyzers.cmake",
"chars": 1142,
"preview": "option(ENABLE_CPPCHECK \"Enable static analysis with cppcheck\" OFF)\noption(ENABLE_CLANG_TIDY \"Enable static analysis with"
},
{
"path": "data/appdata/org.flameshot.Flameshot.metainfo.xml",
"chars": 3961,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\nSPDX-FileCopyrightText: none\nSPDX-License-Identifier: CC0-1.0\n-->\n<component"
},
{
"path": "data/dbus/org.flameshot.Flameshot.service.in",
"chars": 89,
"preview": "[D-BUS Service]\nName=org.flameshot.Flameshot\nExec=${CMAKE_INSTALL_FULL_BINDIR}/flameshot\n"
},
{
"path": "data/dbus/org.flameshot.Flameshot.xml",
"chars": 1297,
"preview": "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\" \"http://www.freedesktop.org/standards/dbu"
},
{
"path": "data/dbus/org.freedesktop.Notifications.xml",
"chars": 1315,
"preview": "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"http://www.freedesktop.org/standards/dbu"
},
{
"path": "data/desktopEntry/package/org.flameshot.Flameshot.desktop",
"chars": 3282,
"preview": "[Desktop Entry]\nName=Flameshot\nName[zh_CN]=火焰截图\nGenericName=Screenshot tool\nGenericName[zh_CN]=屏幕截图工具\nGenericName[pl]=Zr"
},
{
"path": "data/flameshot.rc",
"chars": 1516,
"preview": "#pragma code_page(65001) // UTF-8\n\nIDI_ICON1 ICON \"img\\\\app\\\\flameshot.ico\"\n\n#include <windows.h>\n\n#define VER_FILEVERSI"
},
{
"path": "data/graphics.qrc",
"chars": 5501,
"preview": "<RCC>\n <qresource prefix=\"/\">\n <file>img/app/org.flameshot.Flameshot.svg</file>\n <file>img/app/flamesho"
},
{
"path": "data/img/app/flameshotLogoLicense.txt",
"chars": 9851,
"preview": "Free Art License 1.3\n\n\n[ Copyleft Attitude ]\n\nFree Art License 1.3 (FAL 1.3)\n\nPreamble\n\nThe Free Art License grants the "
},
{
"path": "data/img/material/LICENSE.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "data/img/material/README.md",
"chars": 85,
"preview": "Google Material Design Icons are licensed under Apache License 2.0 (see LICENSE.txt)\n"
},
{
"path": "data/man/man1/flameshot.1",
"chars": 8968,
"preview": ".\\\" Hey, EMACS: -*- nroff -*-\n.\\\" (C) Copyright 2018 Boyuan Yang <073plan@gmail.com"
},
{
"path": "data/shell-completion/flameshot.bash",
"chars": 2067,
"preview": "#compdef flameshot\n\n# Shell completion for flameshot command\n# To be installed in \"/usr/share/bash-completion/completion"
},
{
"path": "data/shell-completion/flameshot.fish",
"chars": 8906,
"preview": "\n####################\n# HELPER FUNCTIONS #\n####################\n\n# Complete the subcommand provided as the first argumen"
},
{
"path": "data/shell-completion/flameshot.zsh",
"chars": 4401,
"preview": "#compdef flameshot\n# ------------------------------------------------------------------------------\n# Description\n# ----"
},
{
"path": "data/snap/snapcraft.yaml",
"chars": 3621,
"preview": "---\n\nname: flameshot\nadopt-info: flameshot\nbase: core18\nsummary: Powerful yet simple to use screenshot software\ndescript"
},
{
"path": "data/translations/Internationalization_ar.ts",
"chars": 133710,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ar\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_bg.ts",
"chars": 137157,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"bg\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_ca.ts",
"chars": 139457,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ca_ES\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_cs.ts",
"chars": 139363,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cs_CZ\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_da.ts",
"chars": 133322,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"da\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_de_DE.ts",
"chars": 139418,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_el.ts",
"chars": 138276,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"el\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_en.ts",
"chars": 110062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"en\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_es.ts",
"chars": 138415,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es_ES\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_et.ts",
"chars": 133869,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"et\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_eu.ts",
"chars": 140415,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"eu\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_fa.ts",
"chars": 134911,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"fa\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_fi.ts",
"chars": 135050,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"fi\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_fr.ts",
"chars": 141247,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"fr_FR\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_ga.ts",
"chars": 138690,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ga\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_gl.ts",
"chars": 135283,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"gl\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_grc.ts",
"chars": 68119,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"grc\">\n<context>\n <name>AppLauncher</"
},
{
"path": "data/translations/Internationalization_he.ts",
"chars": 133785,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"he\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_hu.ts",
"chars": 139258,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"hu_HU\" sourcelanguage=\"en\">\n<context>\n "
},
{
"path": "data/translations/Internationalization_id.ts",
"chars": 137336,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"id\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_it_IT.ts",
"chars": 134905,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"it_IT\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_ja.ts",
"chars": 132108,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ja_JP\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_ka.ts",
"chars": 135378,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ka_GE\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_km.ts",
"chars": 132171,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"km\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_ko.ts",
"chars": 129616,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ko_KR\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_nb_NO.ts",
"chars": 135437,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nb_NO\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_nl.ts",
"chars": 133395,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_nl_NL.ts",
"chars": 138834,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl_NL\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_pl.ts",
"chars": 137598,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl_PL\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_pt.ts",
"chars": 138296,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_pt_BR.ts",
"chars": 140917,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_BR\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_ro.ts",
"chars": 131395,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ro\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_ru.ts",
"chars": 146069,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ru_RU\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_sk.ts",
"chars": 140322,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sk_SK\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_sl.ts",
"chars": 132171,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sl\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_sr_SP.ts",
"chars": 135849,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sr_RS\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_sv_SE.ts",
"chars": 134616,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sv_SE\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_sw.ts",
"chars": 131007,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"sw\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_ta.ts",
"chars": 131167,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ta\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_th.ts",
"chars": 134821,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"th\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_tk.ts",
"chars": 132171,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tk\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_tr.ts",
"chars": 135282,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr_TR\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_uk.ts",
"chars": 146384,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"uk_UA\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_vi.ts",
"chars": 135987,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"vi\">\n<context>\n <name>AbstractWidget"
},
{
"path": "data/translations/Internationalization_zh_CN.ts",
"chars": 128062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_CN\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_zh_HK.ts",
"chars": 133095,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_HK\">\n<context>\n <name>AbstractWid"
},
{
"path": "data/translations/Internationalization_zh_TW.ts",
"chars": 125676,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_TW\">\n<context>\n <name>AbstractWid"
},
{
"path": "default.nix",
"chars": 395,
"preview": "(import (\n let\n lock = builtins.fromJSON (builtins.readFile ./flake.lock);\n nodeName = lock.nodes.root.inputs.fla"
},
{
"path": "docs/0000-template.md",
"chars": 0,
"preview": ""
},
{
"path": "docs/CONTRIBUTING.md",
"chars": 1916,
"preview": "# Contributing\n\nContributions are welcome! Here's how you can help:\n\n- [Translating](#translations)\n- [Contributing code"
},
{
"path": "docs/RFC/0000-Add-Opacity-slider.md",
"chars": 3358,
"preview": "# Add an opacity slider to the Tool Settings\n\n### To be Reviewed By\n\n* borgmanJeremy\n* mmahmoudian\n* Flameshot developer"
},
{
"path": "docs/RFC.md",
"chars": 10607,
"preview": "# Flameshot RFCs\n\n[Flameshot RFCs]: #flameshot-rfcs\n\nMany changes, including bug fixes and documentation improvements ca"
},
{
"path": "docs/ReleaseNote_12.1.md",
"chars": 1415,
"preview": "## V12.1.0\nThis is a minor release that fixed some bugs introduced in the v12 release.\n\n## What's Changed\n* Fix typos by"
},
{
"path": "docs/ReleaseNotes_0.8.md",
"chars": 2714,
"preview": "# 0.8 Release Notes\nThanks to all the testers and contributors that helped make version 0.8! We are very excited to have"
},
{
"path": "docs/ReleaseNotes_0.9.md",
"chars": 1837,
"preview": "# 0.9 Release Notes\nThanks to all the testers and contributors that helped make version 0.9! We are very excited to have"
},
{
"path": "docs/ReleaseNotes_11.0.md",
"chars": 7766,
"preview": "# V11.0 Beta\n\nThis is the BETA release for version 11. As you will see below there were major refactorings to the intern"
},
{
"path": "docs/ReleaseNotes_12.0.md",
"chars": 7964,
"preview": "# Version 12.0.rc1 Beta\nThis is the beta for the version 12.0 release. We will be in beta for about a week unless major "
},
{
"path": "docs/Releasing.md",
"chars": 1410,
"preview": "# Checklist for making a new release\n\nThese are the code changes that need to take place:\n- [ ] Update version in `CMake"
},
{
"path": "docs/Sway and wlroots support.md",
"chars": 4283,
"preview": "# Sway and wlroots support\nFlameshot currently supports Sway and other wlroots based Wayland compositors through [xdg-de"
},
{
"path": "docs/dev/.gitignore",
"chars": 24,
"preview": "output\nmkdoxy-generated\n"
},
{
"path": "docs/dev/Makefile",
"chars": 191,
"preview": "serve:\n\tmkdocs serve --dev-addr localhost:8080 --watch ../../src\nbuild:\n\tmkdocs build\n\t@echo \"Post-processing...\"\n\t@bash"
},
{
"path": "docs/dev/mkdocs.yml",
"chars": 1205,
"preview": "site_name: Flameshot Developer Docs\nsite_url: https://flameshot.org/docs/dev/\nrepo_url: https://github.com/flameshot-org"
},
{
"path": "docs/dev/post-process.sh",
"chars": 682,
"preview": "# Only run this script from the Makefile\n\nshopt -s globstar\ncd output\n\n# Classes backlink to the ClassList in their brea"
},
{
"path": "docs/dev/src/debugging.md",
"chars": 500,
"preview": "# Debugging\n\n## `FLAMESHOT_DEBUG_CAPTURE`\n\nWith this cmake variable set to `ON`, the flameshot capture GUI window won't "
},
{
"path": "docs/dev/src/docs.md",
"chars": 6591,
"preview": "# Maintaining the documentation\n\nThe narrative documentation is written in markdown and built into HTML using\n[MkDocs][m"
},
{
"path": "docs/dev/src/faq.md",
"chars": 2045,
"preview": "\n# FAQ\n\n!!! todo\n\n Incomplete page.\n\n### How do I create a new subcommand?\n\n### How do I add a new tool?\n\n### How do "
},
{
"path": "docs/dev/src/index.md",
"chars": 5631,
"preview": "# Flameshot developer docs\n\nThank you for your interest in developing flameshot. This developer\ndocumentation (hopefully"
},
{
"path": "docs/shortcuts-config/flameshot-shortcuts-kde.khotkeys",
"chars": 2562,
"preview": "[Data]\nDataCount=1\n\n[Data_1]\nComment=Shortcuts for taking screenshots with Flameshot\nDataCount=5\nEnabled=true\nName=Flame"
},
{
"path": "flake.nix",
"chars": 3910,
"preview": "{\n description = \"Powerful yet simple to use screenshot software\";\n\n inputs = {\n nixpkgs.url = \"github:NixOS/nixpkg"
},
{
"path": "flameshot.example.ini",
"chars": 4161,
"preview": ";[General]\n;; Configure which buttons to show after drawing a selection\n;; Not easy to set by hand\n;buttons=@Variant(\\0\\"
},
{
"path": "packaging/debian/changelog",
"chars": 147,
"preview": "flameshot (13.2.0-1) unstable; urgency=medium\n\n * Release for v13.3.0\n\n -- Jeremy Borgman <borgman.jeremy@pm.me> Fri, "
},
{
"path": "packaging/debian/compat",
"chars": 3,
"preview": "12\n"
},
{
"path": "packaging/debian/control",
"chars": 1554,
"preview": "Source: flameshot\nSection: graphics\nPriority: optional\nMaintainer: Boyuan Yang <byang@debian.org>\nBuild-Depends:\n cmake "
},
{
"path": "packaging/debian/copyright",
"chars": 16104,
"preview": "Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: flameshot\nSource: https://gith"
},
{
"path": "packaging/debian/docs",
"chars": 10,
"preview": "README.md\n"
},
{
"path": "packaging/debian/rules",
"chars": 843,
"preview": "#!/usr/bin/make -f\n# See debhelper(7) (uncomment to enable)\n# output every command that modifies files on the build syst"
},
{
"path": "packaging/debian/source/format",
"chars": 13,
"preview": "3.0 (native)\n"
},
{
"path": "packaging/flatpak/org.flameshot.Flameshot.yml",
"chars": 1273,
"preview": "app-id: org.flameshot.Flameshot\nruntime: org.kde.Platform\nruntime-version: '6.9'\nsdk: org.kde.Sdk\ncommand: flameshot\nfin"
},
{
"path": "packaging/macos/Info.plist.in",
"chars": 1139,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "packaging/macos/create_dmg.sh",
"chars": 2660,
"preview": "#!/bin/bash\n\n# Script to create and optionally sign a DMG file\n# Usage: create_dmg.sh <app_path> <dmg_path> <app_sign_id"
},
{
"path": "packaging/rpm/fedora/flameshot.spec",
"chars": 5315,
"preview": "#\n# spec file for package flameshot on fedora, rhel\n#\nName: flameshot\nVersion: 13.1.0\nRelease: 2%{?dist}\nLicense: GPL"
},
{
"path": "packaging/rpm/opensuse/flameshot.spec",
"chars": 5302,
"preview": "#\n# spec file for package flameshot on opensuse leap 15.x\n#\nName: flameshot\nVersion: 13.1.0\nRelease: 2\nLicense: GPLv3"
},
{
"path": "packaging/win-installer/LICENSE/GPL-3.0.txt",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "scripts/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "shell.nix",
"chars": 393,
"preview": "(import (\n let\n lock = builtins.fromJSON (builtins.readFile ./flake.lock);\n nodeName = lock.nodes.root.inputs.fla"
},
{
"path": "snapcraft.yaml",
"chars": 1999,
"preview": "name: flameshot\nversion: '13.3.0'\nbase: core24\nsummary: Powerful yet simple to use screenshot software\ndescription: |\n "
},
{
"path": "src/CMakeLists.txt",
"chars": 23742,
"preview": "find_package(\n Qt${QT_VERSION_MAJOR}\n CONFIG\n REQUIRED\n Core\n Gui\n Widgets\n "
},
{
"path": "src/cli/CMakeLists.txt",
"chars": 94,
"preview": "target_sources(flameshot PRIVATE commandlineparser.cpp commandoption.cpp commandargument.cpp)\n"
},
{
"path": "src/cli/commandargument.cpp",
"chars": 914,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/cli/commandargument.h",
"chars": 568,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/cli/commandlineparser.cpp",
"chars": 12214,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/cli/commandlineparser.h",
"chars": 2517,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/cli/commandoption.cpp",
"chars": 2748,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/cli/commandoption.h",
"chars": 1405,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/CMakeLists.txt",
"chars": 534,
"preview": "target_sources(\n flameshot\n PRIVATE buttonlistview.cpp\n cacheutils.cpp\n clickablelabel.cpp\n "
},
{
"path": "src/config/buttonlistview.cpp",
"chars": 3111,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/buttonlistview.h",
"chars": 645,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/cacheutils.cpp",
"chars": 1052,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2021 Jeremy Borgman\n\n#include \"cacheutils.h\"\n#in"
},
{
"path": "src/config/cacheutils.h",
"chars": 310,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2021 Jeremy Borgman\n\n#ifndef FLAMESHOT_CACHEUTIL"
},
{
"path": "src/config/clickablelabel.cpp",
"chars": 400,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/clickablelabel.h",
"chars": 416,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/colorpickereditmode.cpp",
"chars": 3720,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2022 Dearsh Oberoi\n\n#include \"colorpickereditmod"
},
{
"path": "src/config/colorpickereditmode.h",
"chars": 662,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2022 Dearsh Oberoi\n\n#pragma once\n\n#include \"src/"
},
{
"path": "src/config/colorpickereditor.cpp",
"chars": 6361,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2022 Dearsh Oberoi\n\n#include \"colorpickereditor."
},
{
"path": "src/config/colorpickereditor.h",
"chars": 1074,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2022 Dearsh Oberoi\n\n#pragma once\n\n#include \"QtCo"
},
{
"path": "src/config/configerrordetails.cpp",
"chars": 1118,
"preview": "#include \"src/config/configerrordetails.h\"\n\n#include \"src/utils/abstractlogger.h\"\n#include \"src/utils/confighandler.h\"\n\n"
},
{
"path": "src/config/configerrordetails.h",
"chars": 140,
"preview": "#include <QDialog>\n\n#pragma once\n\nclass ConfigErrorDetails : public QDialog\n{\npublic:\n ConfigErrorDetails(QWidget* pa"
},
{
"path": "src/config/configresolver.cpp",
"chars": 4576,
"preview": "#include \"src/config/configresolver.h\"\n#include \"src/config/configerrordetails.h\"\n#include \"src/utils/confighandler.h\"\n\n"
},
{
"path": "src/config/configresolver.h",
"chars": 235,
"preview": "#pragma once\n\n#include <QDialog>\n\nclass QGridLayout;\n\nclass ConfigResolver : public QDialog\n{\npublic:\n ConfigResolver"
},
{
"path": "src/config/configwindow.cpp",
"chars": 5656,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/configwindow.h",
"chars": 847,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/extendedslider.cpp",
"chars": 1126,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/extendedslider.h",
"chars": 517,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/filenameeditor.cpp",
"chars": 3728,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/filenameeditor.h",
"chars": 914,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/generalconf.cpp",
"chars": 29166,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n#i"
},
{
"path": "src/config/generalconf.h",
"chars": 4609,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/setshortcutwidget.cpp",
"chars": 3221,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors\n\n"
},
{
"path": "src/config/setshortcutwidget.h",
"chars": 807,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors\n\n"
},
{
"path": "src/config/shortcutswidget.cpp",
"chars": 16216,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors\n\n"
},
{
"path": "src/config/shortcutswidget.h",
"chars": 1376,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Yurii Puchkov at Namecheap & Contributors\n\n"
},
{
"path": "src/config/strftimechooserwidget.cpp",
"chars": 2546,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/strftimechooserwidget.h",
"chars": 397,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/styleoverride.cpp",
"chars": 557,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Jeremy Borgman <borgman.jeremy@pm.me>\n//\n//"
},
{
"path": "src/config/styleoverride.h",
"chars": 580,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2020 Jeremy Borgman <borgman.jeremy@pm.me>\n//\n//"
},
{
"path": "src/config/uicoloreditor.cpp",
"chars": 5669,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/uicoloreditor.h",
"chars": 1107,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/visualseditor.cpp",
"chars": 5024,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/config/visualseditor.h",
"chars": 876,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/CMakeLists.txt",
"chars": 600,
"preview": "target_sources(flameshot PRIVATE\n flameshot.h\n flameshotdaemon.h\n qguiappcurrentscreen.h\n)\n\ntarget_sources(flam"
},
{
"path": "src/core/capturerequest.cpp",
"chars": 2219,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/capturerequest.h",
"chars": 2006,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/flameshot.cpp",
"chars": 13343,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/flameshot.h",
"chars": 2066,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/flameshotdaemon.cpp",
"chars": 16957,
"preview": "#include \"flameshotdaemon.h\"\n\n#include \"abstractlogger.h\"\n#include \"confighandler.h\"\n#include \"flameshot.h\"\n#include \"pi"
},
{
"path": "src/core/flameshotdaemon.h",
"chars": 2693,
"preview": "#pragma once\n\n#include <QByteArray>\n#include <QObject>\n\n#if !(defined(Q_OS_MACOS) || defined(Q_OS_WIN))\n#include <QtDBus"
},
{
"path": "src/core/flameshotdbusadapter.cpp",
"chars": 843,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/flameshotdbusadapter.h",
"chars": 692,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/globalshortcutfilter.cpp",
"chars": 1573,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/globalshortcutfilter.h",
"chars": 755,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/core/qguiappcurrentscreen.cpp",
"chars": 1691,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2021 Yuriy Puchkov <yuriy.puchkov@namecheap.com>"
},
{
"path": "src/core/qguiappcurrentscreen.h",
"chars": 551,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2021 Yuriy Puchkov <yuriy.puchkov@namecheap.com>"
},
{
"path": "src/core/signaldaemon.cpp",
"chars": 1519,
"preview": "#include \"signaldaemon.h\"\n#include \"flameshot.h\"\n#include <QApplication>\n#include <QSocketNotifier>\n#include <csignal>\n#"
},
{
"path": "src/core/signaldaemon.h",
"chars": 520,
"preview": "#include <QObject>\n#include <QSocketNotifier>\n\nclass SignalDaemon : public QObject\n{\n Q_OBJECT\n\npublic:\n SignalDae"
},
{
"path": "src/main.cpp",
"chars": 25209,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/CMakeLists.txt",
"chars": 2940,
"preview": "target_sources(flameshot PRIVATE arrow/arrowtool.h arrow/arrowtool.cpp)\ntarget_sources(flameshot PRIVATE pixelate/pixela"
},
{
"path": "src/tools/abstractactiontool.cpp",
"chars": 1202,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/abstractactiontool.h",
"chars": 894,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/abstractpathtool.cpp",
"chars": 3423,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/abstractpathtool.h",
"chars": 1246,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/abstracttwopointtool.cpp",
"chars": 4696,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/abstracttwopointtool.h",
"chars": 1745,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/accept/accepttool.cpp",
"chars": 1327,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/accept/accepttool.h",
"chars": 672,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/arrow/arrowtool.cpp",
"chars": 4822,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/arrow/arrowtool.h",
"chars": 888,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/capturecontext.cpp",
"chars": 392,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/capturecontext.h",
"chars": 958,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
},
{
"path": "src/tools/capturetool.h",
"chars": 7125,
"preview": "// SPDX-License-Identifier: GPL-3.0-or-later\n// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors\n\n#"
}
]
// ... and 168 more files (download for full content)
About this extraction
This page contains the full source code of the flameshot-org/flameshot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 368 files (7.1 MB), approximately 1.9M tokens, and a symbol index with 444 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.