Compare commits

..

55 Commits

Author SHA1 Message Date
ffff7baf16 Almalinux: build on stable version withotu plugin store
GitLab: #1418

Change-Id: I37239869e691a621138ae0616695f8efdf4b47ca
2023-12-01 15:29:06 -04:00
67904773d7 Donation banner: patch focus when press tab
Change-Id: I113e412fdda28ef91be8fdc506309c4f84bc7350
2023-12-01 13:52:26 -05:00
20c4081d88 Ptt: set space as default key
Change-Id: I7944a40d622ee9092686ce32c99ce94c4be1cdb1
2023-12-01 09:58:51 -05:00
48cfd8e29f Photobooth: new design
GitLab: #1417
Change-Id: Idf7f2ce5eb79ff378f41071e6c319faef2f27fc5
2023-12-01 09:29:12 -05:00
3344fbaf9d misc: replace qAsConst(removed in Qt 6.6.x) with std::as_const
Change-Id: I05041b0fd362e24a0ad17a46cd9fe2db53e5712d
2023-11-30 13:54:20 -05:00
5e362c2c2e AccountComboBox: new design
GitLab: #1417
Change-Id: I4b69d45d8c043d38fb5c9367c87c167fa291cc46
2023-11-29 17:16:40 -05:00
7bd469525d qt6.5: correct some bug with the migration
Change-Id: Ic64bdb5c554cc99e323fc11a259a0cd6cbf48bc5
2023-11-29 11:51:29 -05:00
f457ed5076 qt6.5: update to Qt 6.5.3
Change-Id: I43838bf36ee0d174834e5312f62865b56a77484b
2023-11-29 11:49:45 -05:00
ed78c35fda UserProfile: be able to copy identifier
Change-Id: Ib402399f9339f537884f9833169d2c91243008b5
2023-11-27 15:42:29 -05:00
d42d1cd343 misc: homogenize line-endings in ConversationExtrasPanel
Change-Id: I5b58db9d6e9254a177d9b86575f6dd670a086bd9
2023-11-27 14:32:01 -05:00
762cbbff38 mainview: prevent details panel from opening maximized
also-misc: Removes SplitPanel state-saving

Gitlab: #1370
Change-Id: I71f5c209922ad69fb701e935a03078fb8e5ad2de
2023-11-27 14:19:00 -05:00
500681fb69 misc-qml: remove some dead code
Causes Binding loops in MaterialButton.
Seems like support for a previous Qt/QML version.

Change-Id: I32f71cb50a20c81e0354635c56a308821c6f5832
2023-11-27 12:10:12 -05:00
8b09149ecd build: windows: fix toolset version choice
Change-Id: I935131da4bf78f0d2832646197367fce56509130
2023-11-27 12:06:49 -05:00
eae76a619a Revert "misc: get donation date from settings manager"
This reverts commit 167550abc3.

Reason for revert: Donation2023VisibleDate will be updated when user select "Not now".

Change-Id: I6f1d6647e947811e78eb8db07ddc955c81e7de0e
2023-11-27 10:18:03 -05:00
aa44599a66 misc: qml: remove debug component
Change-Id: Iaa9b274791a7eaef662874d5afe16c2095a58633
2023-11-27 10:01:20 -05:00
a8be1f0271 PlatformPluginSupport: add info if plugins are not available for none supported platform
Gitlab: #1404

Change-Id: Iaa43a705d1b5e7cf9b960bdf1863d325e4a5332b
2023-11-27 06:47:58 -05:00
d5bacf6b9f contextmenu: various fixes + simplify
Change-Id: Ibf10c91d4f875e9e346003c6fe9797325cf23c4f
2023-11-24 16:54:16 -05:00
bb8f4cc3a7 systray: fix crash on linux
QSystemTray::setContextMenu isn't working using a QScopedPointer on GNU/Linux, don't know why, not investigating.
Also, resetting the contextMenu has different behaviour on different platforms, so avoid that.

Change-Id: I3464e4c5e410a2c7028555b8177e0e56f7c5d1c3
2023-11-28 03:43:06 -05:00
1d7d10a12d mainapplication: retranslate systray
Change-Id: Ib8e7407fa702f4003b33b688fa0dca517ff9a7fd
GitLab: #1396
2023-11-27 07:03:00 -05:00
c689997456 misc: bump daemon
Change-Id: I031ed502a8181309a04886b9abb482cdc3b0beb0
2023-11-23 14:55:29 -05:00
8fc1ba342c donations: update start date key
Change-Id: Ie35b2854da7165ee95018165b325698dcf0378ca
2023-11-23 14:20:32 -05:00
6b313e193d misc: update projectcredits.html
Change-Id: I529321c4ee0877b1ab158122fa183e733edf238a
2023-11-23 10:46:39 -05:00
167550abc3 misc: get donation date from settings manager
Change-Id: I4c39625b95efa1ad272ffa503e1f29228928adeb
2023-11-23 09:30:13 -05:00
7736b5c34c add sponsor button on gitHub repo
GitLab: https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1459
Change-Id: I32f11d8ccbeec0e051210394891ced63ae684ad4
2023-11-23 08:52:36 -05:00
1dd0ad71e9 PasswordDialog: new design
GitLab: #1417
Change-Id: Ic543f6b4332af15bbaea3c7b97a8642ff9dd387c
2023-11-22 17:14:25 -05:00
db4e0d3767 Revert "app Store: disable donations"
This reverts commit a433974340.

Change-Id: I1a3b663a3f6813ed0481bf4a118330cf5d974424
2023-11-22 11:51:36 -05:00
b1e129b0e2 AboutPopup: new design
GitLab: #1417
Change-Id: Ibbdaa074ac6e6a7c778ef4710f334e23d04dd121
2023-11-22 10:31:59 -05:00
3818885095 NoUserNamePopup: new design
GitLab: #1417
Change-Id: I6abc313f78ca37b9cce76137f85c4a9656b98feb
2023-11-21 14:46:07 -05:00
6cbda2cea1 LinkDeviceDialog: new design
GitLab: #1417
Change-Id: I8039355efcac28bf6ccc39dea1c785ef7f86b9f4
2023-11-21 14:45:11 -05:00
2656769a59 UserProfile popup: new design
GitLab: #1417
Change-Id: I1801f0e92e43679548ceb5be84041cba96ed7519
2023-11-21 14:37:47 -05:00
86c1bf8373 CallInformationOverlay: new design
GitLab: #1417
Change-Id: I11267d130f83421f23656f65925996caded6c10b
2023-11-21 14:35:59 -05:00
f7bf2899f7 BaseModalDialog: scrollbar added when popups are too big
GitLab: #1417
Change-Id: I7b41398656269e474cbce90ace2ba1c89c5048df
2023-11-21 11:53:37 -05:00
dc7c366afa donation: update campaign dates
Change-Id: Idc8b568234270f897936e60453e22a66d6d8624d
2023-11-28 10:58:42 -05:00
b7c3f3b553 CreateAccountPage: new design
GitLab: #1417

Change-Id: I15db389e699ae030c3657746b68f0c5ab2af31a6
2023-11-21 08:33:24 -05:00
a6b7ef76f8 DeleteAccountDialog: new design
GitLab: #1417
Change-Id: I4f701c130722f4c25ea4d13525ab111368139f98
2023-11-21 08:27:44 -05:00
17d6d56af4 i18n: automatic bump
Change-Id: I222865d7344c4d996833c6bff4d354364b627440
2023-11-20 16:42:40 -05:00
b5443e6484 misc: bump daemon submodule
Change-Id: Ifc98e6e9551a0d62194de1dddf27cc79d0cff645
2023-11-17 14:59:19 -05:00
3d0db97a17 TextField: new design
GitLab: #1417
Change-Id: I89c97d02250b9b283f85a006b13c97e4bb54ee32
2023-11-17 14:58:17 -05:00
23413a8f45 BaseModalDialog: redesign popups and add standard buttons
GitLab: #1417
Change-Id: I8693ff36d313c730b6d8fa2ea7586d1a71d582d7
2023-11-17 14:43:16 -05:00
7f414f652e callmodel: remove old TODO
This was causing some weird conference states for swarm-call

https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/916

Change-Id: I87ada927f223bc325eb0f62307c6dda51b330330
2023-11-17 09:42:39 -05:00
c6833d69fb conversationmodel: do not add calls to wrong conversations
newCall already handle everything

Change-Id: I6c9f5b1e50960b3d45e4fde198f0fc67ecfad020
GitLab: #1432
2023-11-17 09:42:39 -05:00
238547506f qrencode: windows: bump submodule version
Use version with latest vcxproj.

Change-Id: I61cb0168e684566f47cf32e993371a25539d4c8a
2023-11-16 16:37:25 -05:00
cb68ee560c PluginEnabled: remove all unnecessary method to enabled plugin on client
Gitlab: #1382

Change-Id: I5fdef9bfcb5b400c3eefa776ec441b63b0847cca
2023-11-16 07:19:19 -05:00
517f87826d misc: don't use 2 AppSettingsManager objects
Injects the primary instance into PluginVersionManager instead.

Change-Id: I3269f048a805a069d30f3ab1bec5c4be755a35cb
2023-11-15 12:02:31 -05:00
0725683727 main: prevents use-after-frees on app exit
Forces the QML exposed objects to be destroyed prior to top-level mainapplication objects like the AppSettingsManager.

Change-Id: I4183ee20890c7faae39e37bd9f7060ff50ae0db8
2023-11-15 12:02:27 -05:00
52f95ac8ed ptt: use 1 instance only and register as a QML singleton
- Prevents resetting the app-scope context property which prevents the Windows global listener callback from working.
- Removes unused QScopedPointers

Change-Id: I836d803d5a1f4093e241330c1e5dd478c743ed54
2023-11-15 12:02:20 -05:00
8d41ab6eb9 misc: bump daemon
Change-Id: Ie82dd09bde90df6d3df684198a5f561cba167347
2023-11-15 11:23:03 -05:00
b4b1cda9e6 screensharing: remove unsupported options for wayland
https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/13

Change-Id: I177104e8b2faabd356293fb704372918d7e5969a
2023-11-15 09:06:59 -05:00
e46a123609 build: windows: remove qrencode-win32 patching
Changes to a more maintained repo source.

Change-Id: Ie9903761ad8cb740b79552f59dc851976c1ef9da
2023-11-14 14:44:30 -05:00
8e33a6125f build: windows: only init the required client submodules
Change-Id: Ia4ad3e76962fac38c8f482fb7892b259a968ce5f
2023-11-14 14:44:30 -05:00
3e17a9b247 cmake: windows: add the jami-core to the project
Change-Id: Ieeeb8bbf3d032fb9595b6f76a49ab8027dad7d99
2023-11-14 14:44:30 -05:00
38e5d0967a JamiIdentifier: change icons
GitLab: #1417
Change-Id: I30e32098a53941cdb393a472764c47a333a87449
2023-11-14 08:20:44 -05:00
5ed836f34e i18n: automatic bump
Change-Id: I98012490ec3b46fc0ac358e51887f03e149f7594
2023-11-13 16:42:36 -05:00
7b55954245 misc: bump daemon
Change-Id: I3e9183624309384906a39531ea3e543716e5cfa5
2023-11-10 14:24:34 -05:00
8c75ac8a1f UpdateManager: fix to be able to update if needed
Gitlab: #1426

Change-Id: Ib6bda9d03fad23fe896ad76bda3d6fd52a1e2dbb
2023-11-10 13:20:50 -05:00
247 changed files with 27634 additions and 14704 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,2 @@
custom: ['https://jami.net/whydonate/']
lfx_crowdfunding: jami-a-gnu-package

2
.gitmodules vendored
View File

@ -1,6 +1,6 @@
[submodule "3rdparty/qrencode-win32"]
path = 3rdparty/qrencode-win32
url = https://github.com/BlueDragon747/qrencode-win32.git
url = https://github.com/blizzard4591/qrencode-win32.git
ignore = dirty
[submodule "3rdparty/libqrencode"]
url = https://github.com/fukuchi/libqrencode.git

View File

@ -30,6 +30,7 @@ else()
endif()
option(WITH_DAEMON_SUBMODULE "Build with daemon submodule" ON)
option(JAMICORE_AS_SUBDIR "Build Jami-core as a subdir dependency" OFF)
option(ENABLE_TESTS "Build with tests" OFF)
option(WITH_WEBENGINE "Build with WebEngine" ON)
if(WITH_WEBENGINE)
@ -50,6 +51,19 @@ if(ENABLE_ASAN AND NOT MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
endif()
# jami-core
if(NOT WITH_DAEMON_SUBMODULE)
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/../daemon)
else()
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
endif()
# For now only MSVC is supported for building Jami-core within the
# client cmake.
if(JAMICORE_AS_SUBDIR)
add_subdirectory(${DAEMON_DIR})
endif()
# init some variables for includes, libs, etc.
set(CLIENT_INCLUDE_DIRS, "")
set(CLIENT_LINK_DIRS, "")
@ -67,14 +81,6 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Main project directories:
# jami-daemon
if(NOT WITH_DAEMON_SUBMODULE)
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/../daemon)
else()
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
endif()
# src
set(LIBCLIENT_SRC_DIR ${PROJECT_SOURCE_DIR}/src/libclient)
set(APP_SRC_DIR ${PROJECT_SOURCE_DIR}/src/app)
@ -106,16 +112,6 @@ else()
message(FATAL_ERROR "Qt 6.4 or higher is required. Found ${QT_VERSION}")
endif()
if(MSVC)
set(DEFAULT_BUILD_TYPE "Debug")
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE
STRING "Choose the type of build." FORCE)
endif()
set(OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/x64/${CMAKE_BUILD_TYPE}")
endif()
# libjamiclient
add_subdirectory(${LIBCLIENT_SRC_DIR})
@ -367,10 +363,6 @@ if(MSVC)
# preprocessor defines
add_definitions(-DUNICODE -DQT_NO_DEBUG -DNDEBUG)
# dependencies
set(QRENCODE_DIR
${PROJECT_SOURCE_DIR}/3rdparty/qrencode-win32/qrencode-win32)
# compiler options
add_compile_options(
/wd4068 /wd4099 /wd4189 /wd4267 /wd4577 /wd4467 /wd4715 /wd4828)
@ -388,8 +380,10 @@ if(MSVC)
"/NODEFAULTLIB:LIBCMT")
# client deps
set(QRENCODE_LIB
${QRENCODE_DIR}/vc8/qrcodelib/x64/Release-Lib/qrcodelib.lib)
set(QRENCODE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/qrencode-win32/qrencode-win32)
file(GLOB_RECURSE QRENCODE_LIB ${QRENCODE_DIR}/qrcodelib.lib)
file(GLOB_RECURSE QRENCODE_INCLUDE ${QRENCODE_DIR}/qrencode.h)
get_filename_component(QRENCODE_INCLUDE_DIR ${QRENCODE_INCLUDE} DIRECTORY)
# daemon
set(JAMID_SRC_PATH ${DAEMON_DIR}/contrib/msvc/include)
@ -408,7 +402,7 @@ if(MSVC)
include_directories(
${JAMID_SRC_PATH}
${LIBCLIENT_SRC_DIR}
${QRENCODE_DIR})
${QRENCODE_INCLUDE_DIR})
elseif (NOT APPLE)
list(APPEND COMMON_SOURCES
${APP_SRC_DIR}/xrectsel.c
@ -804,7 +798,6 @@ else()
MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}")
if(APPSTORE)
message(STATUS "app store version")
add_definitions(-DAPPSTORE)
set_target_properties(${PROJECT_NAME} PROPERTIES
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/resources/entitlements/appstore/Jami.entitlements")
else()

View File

@ -7,9 +7,9 @@ There are essentially two ways to build `client-qt`:
## Disclaimer
Because the client-qt is multi-platforms and supporting macOS, we need a recent version of Qt to do rendering with Metal. So, Qt 6.4 is necessary.
Because the client-qt is multi-platforms and supporting macOS, we need a recent version of Qt to do rendering with Metal. So, Qt 6.5 is necessary.
This version is generally not packaged on a lot of platforms, and to control available plugins and such, we have our own Qt packaged (available on https://jami.net on the distributions we support).
So, you will need to get Qt 6.4 first. For this, there is 3 methods:
So, you will need to get Qt 6.5 first. For this, there is 3 methods:
### Qt from our repo (recommended)
@ -49,7 +49,7 @@ sudo dnf update && sudo dnf install jami-libqt
### Qt from your distribution
If Qt 6.4 is available, you can use the packages from your distribution:
If Qt 6.5 is available, you can use the packages from your distribution:
It should be (For now qt5 only is packaged by distributions, so names can change).
@ -118,7 +118,7 @@ Then, you can build daemon and the client using:
If you use a Qt version that is not system-wide installed, you need to
specify its path using the `--qt` flag, e.g.
`./build.py --install --qt=/home/<username>/Qt/6.4.1/gcc_64`.
`./build.py --install --qt=/home/<username>/Qt/6.5.1/gcc_64`.
Now you will have the daemon in `daemon/bin/dbus/jamid` and the client in
`build/jami`. You can now run Jami using:
@ -134,7 +134,7 @@ Notes:
## Build only the client
In order to use the Qt Client it is necessary to have the Qt version 6.4 or higher. If your system does not have it you can install it [from sources or download the binary installer](https://www.qt.io/download).
In order to use the Qt Client it is necessary to have the Qt version 6.5 or higher. If your system does not have it you can install it [from sources or download the binary installer](https://www.qt.io/download).
## Build only this repository
@ -184,7 +184,7 @@ Only 64-bit MSVC build can be compiled.
- Download [Qt (Open Source)](https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5)
- Using the online installer, install the following Qt 6.4.3 components:
- Using the online installer, install the following Qt 6.5.3 components:
- Git 2.10.2
- MSVC 2019 64-bit
@ -207,7 +207,7 @@ Only 64-bit MSVC build can be compiled.
| | Qt Version |
| -------------------- | ---------- |
| Minimum requirement: | 6.4.3 |
| Minimum requirement: | 6.5.3 |
- Install [Python3](https://www.python.org/downloads/) for Windows
@ -233,7 +233,7 @@ Only 64-bit MSVC build can be compiled.
- Using a new **Non-Elevated Command Prompt**
```bash
python build.py --install --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.4.3/msvc2019_64)
python build.py --install --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.5.3/msvc2019_64)
```
> **SDK** Note:
@ -276,7 +276,7 @@ Once the build has finished, you should then be able to use the Visual Studio So
```
python extras\scripts\build-windows.py --init
python extras\scripts\build-windows.py --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.4.3/msvc2019_64)
python extras\scripts\build-windows.py --qt <path-to-qt-bin-folder> (e.g. C:/Qt/6.5.3/msvc2019_64)
```
## Building On MacOS
@ -286,9 +286,9 @@ Once the build has finished, you should then be able to use the Visual Studio So
- macOS minimum version 10.15
- install python3
- download xcode
- install Qt 6.4
- install Qt 6.5
Qt 6.4 can be installed via brew
Qt 6.5 can be installed via brew
```bash
brew install qt

View File

@ -45,7 +45,7 @@ APT_BASED_DISTROS = [
]
DNF_BASED_DISTROS = [
'fedora', 'rhel',
'fedora', 'rhel', 'almalinux',
]
PACMAN_BASED_DISTROS = [
@ -364,13 +364,7 @@ def cwd(path):
def run_install(args):
# Platforms with special compilation scripts
if args.distribution == WIN32_DISTRIBUTION_NAME:
if args.pywinmake:
with cwd('daemon'):
execute_script(['git submodule update --init'])
execute_script(['python -m pip install extras/scripts/pywinmake'])
execute_script(['python extras/scripts/winmake.py'])
execute_script(['python extras/scripts/winmake.py --base-dir compat/msvc'])
else:
if not args.pywinmake:
with cwd('daemon/compat/msvc'):
execute_script([f'python winmake.py -iv -s {args.sdk} -b daemon'])

2
daemon

Submodule daemon updated: 81b299b7d0...8c1c74f0f3

View File

@ -46,10 +46,10 @@ DEBIAN_DSC_FILENAME := jami_$(DEBIAN_VERSION).dsc
# Qt versions
QT_MAJOR := 6
QT_MINOR := 4
QT_MINOR := 5
QT_PATCH := 3
QT_TARBALL_CHECKSUM := 29a7eebdbba0ea57978dea6083709c93593a60f0f3133a3de08b9571ee8eaab4
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-3
QT_TARBALL_CHECKSUM := 7cda4d119aad27a3887329cfc285f2aba5da85601212bcb0aea27bd6b7b544cb
DEBIAN_QT_VERSION := $(QT_MAJOR).$(QT_MINOR).$(QT_PATCH)-0
DEBIAN_QT_DSC_FILENAME := libqt-jami_$(DEBIAN_QT_VERSION).dsc
QT_JAMI_PREFIX := /usr/lib/libqt-jami
@ -171,6 +171,7 @@ DISTRIBUTIONS := \
fedora_37 \
fedora_38 \
fedora_39 \
alma_9 \
opensuse-leap_15.4 \
snap

View File

@ -0,0 +1,105 @@
FROM almalinux:9
RUN dnf clean all
RUN dnf update -y
RUN dnf install -y epel-release
RUN dnf install -y 'dnf-command(config-manager)'
RUN dnf config-manager --set-enabled crb
RUN dnf config-manager --set-enabled appstream
RUN dnf install -y dnf-command\(builddep\) rpmdevtools && \
dnf install -y mock
RUN yum install -y wget && \
wget https://repo.almalinux.org/almalinux/9/devel/x86_64/os/Packages/uuid-c++-devel-1.6.2-55.el9.x86_64.rpm && \
yum localinstall -y uuid-c++-devel-1.6.2-55.el9.x86_64.rpm && \
rm -f uuid-c++-devel-1.6.2-55.el9.x86_64.rpm
RUN yum install -y xorg-x11-xauth
RUN dnf install -y \
git \
rpm-build \
tar \
make \
autoconf \
automake \
nasm \
speexdsp-devel \
pulseaudio-libs-devel \
libcanberra-devel \
libcurl-devel \
libtool \
mesa-libgbm-devel \
mesa-dri-drivers \
dbus-devel \
expat-devel \
pcre-devel \
yaml-cpp-devel \
libXext-devel \
libXfixes-devel \
yasm \
speex-devel \
gsm-devel \
chrpath \
check \
astyle \
gettext-devel \
gcc-c++ \
which \
alsa-lib-devel \
systemd-devel \
libuuid-devel \
uuid-devel \
gnutls-devel \
nettle-devel \
opus-devel \
patch \
jsoncpp-devel \
libnatpmp-devel \
webkitgtk4-devel \
cryptopp-devel \
libva-devel \
libvdpau-devel \
msgpack-devel \
NetworkManager-libnm-devel \
openssl-devel \
clutter-devel \
clutter-gtk-devel \
libappindicator-gtk3-devel \
libnotify-devel \
libupnp-devel \
qrencode-devel \
libargon2-devel \
libsndfile-devel \
libdrm \
gperf \
bison \
clang \
clang-devel \
llvm-devel \
nodejs \
flex \
gstreamer1 gstreamer1-devel \
gstreamer1-plugins-base-devel \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free-devel \
nss-devel \
libxcb* \
libxkb* \
libX11-devel \
vulkan-devel \
libXrender-devel \
xcb-util-* \
xz \
xkeyboard-config \
libnotify \
wget \
libstdc++-static \
sqlite-devel \
perl-generators \
perl-English \
libxshmfence-devel \
ninja-build \
clang \
cmake \
fmt-devel \
python3-html5lib \
cups-devel
ADD extras/packaging/gnu-linux/scripts/build-package-rpm.sh /opt/build-package-rpm.sh
CMD ["/opt/build-package-rpm.sh"]

View File

@ -18,7 +18,7 @@ RUN /opt/prebuild-package-debian.sh qt-deps
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
RUN /opt/prebuild-package-debian.sh jami-deps
# Install CMake 3.19 for Qt 6
# Install CMake 3.20 for Qt 6
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
RUN /opt/install-cmake.sh

View File

@ -70,7 +70,8 @@ RUN zypper --non-interactive install -y \
nodejs12 \
mozilla-nss-devel \
python-xml \
python-six \
python3-six \
python3-importlib-metadata \
libxcb* \
libxkb* \
libX11-devel \

View File

@ -1,740 +0,0 @@
qtwebengine/src/3rdparty/chromium/base/debug/profiler.h | 1 +
qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h | 1 +
qtwebengine/src/3rdparty/chromium/base/logging.h | 2 ++
qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc | 2 ++
qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h | 1 +
qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h | 1 +
qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc | 1 +
qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h | 1 +
qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h | 1 +
qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h | 1 +
qtwebengine/src/3rdparty/chromium/extensions/common/constants.h | 2 ++
qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h | 2 ++
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h | 2 ++
qtwebengine/src/3rdparty/chromium/net/base/parse_number.h | 1 +
qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h | 1 +
qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h | 1 +
qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h | 1 +
qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h | 1 +
qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h | 6 ++++--
qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h | 2 +-
qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h | 4 ++--
qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc | 1 +
qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp | 4 ++++
qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h | 2 ++
qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h | 1 +
qtwebengine/src/core/browsing_data_remover_delegate_qt.h | 2 ++
54 files changed, 71 insertions(+), 5 deletions(-)
diff --git a/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h b/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
index 1229e06234..c7ed55e70f 100644
--- a/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
+++ b/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
@@ -5,6 +5,7 @@
#ifndef BASE_DEBUG_PROFILER_H_
#define BASE_DEBUG_PROFILER_H_
+#include <cstdint>
#include <stddef.h>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h b/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
index 60c3c5c474..6c8021cfde 100644
--- a/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
+++ b/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
@@ -7,6 +7,7 @@
#include <stddef.h>
+#include <cstdint>
#include <iosfwd>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/base/logging.h b/qtwebengine/src/3rdparty/chromium/base/logging.h
index a3ff92f0fd..c272f796a9 100644
--- a/qtwebengine/src/3rdparty/chromium/base/logging.h
+++ b/qtwebengine/src/3rdparty/chromium/base/logging.h
@@ -7,6 +7,8 @@
#include <stddef.h>
+
+#include <cstdint>
#include <cassert>
#include <cstdint>
#include <sstream>
diff --git a/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc b/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
index 96f8c3bd7c..c3f087b1a9 100644
--- a/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
+++ b/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
@@ -6,6 +6,8 @@
#include "ui/gfx/animation/keyframe/target_property.h"
+#include <cstdint>
+
namespace cc {
static_assert(TargetProperty::LAST_TARGET_PROPERTY <
diff --git a/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h b/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
index 2aba73ebcb..2e028fddcf 100644
--- a/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
+++ b/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
@@ -5,6 +5,7 @@
#ifndef COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_
#define COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h b/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
index 3069c858d3..f4614b73c6 100644
--- a/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
+++ b/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_
+#include <cstdint>
#include <string>
#include <vector>
#include "base/callback_forward.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
index 80fd26f4f4..3f08972a7a 100644
--- a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
+++ b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "device/base/synchronization/one_writer_seqlock.h"
+#include <cstdint>
#include "base/threading/platform_thread.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
index 6a3eeda565..525301379c 100644
--- a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
+++ b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
@@ -6,6 +6,7 @@
#define DEVICE_BASE_SYNCHRONIZATION_ONE_WRITER_SEQLOCK_H_
#include <atomic>
+#include <cstdint>
#include "base/atomicops.h"
#include "base/check.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h b/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
index 3cf2914e10..4b0552440c 100644
--- a/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
+++ b/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
@@ -5,6 +5,7 @@
#ifndef DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_
#define DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_
+#include <cstdint>
#include <ostream>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
index c24205c402..ee67ecf189 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
@@ -5,6 +5,7 @@
#ifndef EXTENSIONS_BROWSER_API_AUDIO_AUDIO_DEVICE_ID_CALCULATOR_H_
#define EXTENSIONS_BROWSER_API_AUDIO_AUDIO_DEVICE_ID_CALCULATOR_H_
+#include <cstdint>
#include <map>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h b/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
index 9ac68e2be9..ef2761020d 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
@@ -10,6 +10,8 @@
#include "build/chromeos_buildflags.h"
#include "extensions/common/extensions_export.h"
+#include <cstdint>
+
namespace extensions {
// Scheme we serve extension content from.
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h b/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
index 4ba8de8460..6352b90196 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
@@ -5,6 +5,7 @@
#ifndef EXTENSIONS_RENDERER_BINDINGS_API_INVOCATION_ERRORS_H_
#define EXTENSIONS_RENDERER_BINDINGS_API_INVOCATION_ERRORS_H_
+#include <cstdint>
#include <set>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
index a9c7adb5b5..943bd4e470 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
@@ -7,6 +7,8 @@
#include <stdint.h>
+#include <cstdint>
+
namespace gpu {
namespace webgpu {
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
index 027f1a5af3..70759b2ae4 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
@@ -5,6 +5,7 @@
#ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_
#define GPU_CONFIG_GPU_FEATURE_INFO_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
index 3ea2191b50..0a1ae11202 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
@@ -5,6 +5,7 @@
#ifndef GPU_CONFIG_GPU_PREFERENCES_H_
#define GPU_CONFIG_GPU_PREFERENCES_H_
+#include <cstdint>
#include <stddef.h>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
index f72970c67a..d7f0b7d492 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
@@ -5,6 +5,8 @@
#ifndef GPU_CONFIG_GPU_UTIL_H_
#define GPU_CONFIG_GPU_UTIL_H_
+#include <cstdint>
+
#include "build/build_config.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/gpu_export.h"
diff --git a/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h b/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
index 4e49ab7112..e99d2dd7aa 100644
--- a/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
+++ b/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
@@ -7,6 +7,7 @@
#include "base/strings/string_piece.h"
#include "net/base/net_export.h"
+#include <cstdint>
// This file contains utility functions for parsing numbers, in the context of
// network protocols.
diff --git a/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h b/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
index 2e9c319a3d..4d723d18f2 100644
--- a/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
+++ b/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
@@ -6,6 +6,7 @@
#define NET_COOKIES_COOKIE_INCLUSION_STATUS_H_
#include <bitset>
+#include <cstdint>
#include <ostream>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
index 6a300ed0c0..3e30f1cb02 100644
--- a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
+++ b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_
#define QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_
+#include <cstdint>
#include <vector>
#include "absl/strings/string_view.h"
diff --git a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
index 52f1501728..db4d310849 100644
--- a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
+++ b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_
#define QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h b/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
index 138ca2efec..08f06e7b8c 100644
--- a/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
+++ b/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
@@ -5,6 +5,7 @@
#ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_
#define PDF_DOCUMENT_ATTACHMENT_INFO_H_
+#include <cstdint>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h b/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
index b4fdb9a6d3..375d3ef327 100644
--- a/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
+++ b/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
@@ -38,6 +38,10 @@ namespace pp {
/// As a further optimization, we can add support for this later.
class ThreadSafeThreadTraits {
public:
+
+ typedef pp::Lock Lock;
+ typedef pp::AutoLock AutoLock;
+
class RefCount {
public:
/// Default constructor. In debug mode, this checks that the object is being
@@ -67,8 +71,6 @@ class ThreadSafeThreadTraits {
int32_t ref_;
};
- typedef pp::Lock Lock;
- typedef pp::AutoLock AutoLock;
};
/// The non-thread-safe version of thread traits. Using this class as the
diff --git a/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h b/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
index 0aad3ac782..7f7a1057d7 100644
--- a/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
+++ b/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
@@ -5,6 +5,7 @@
#ifndef SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_
#define SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_
+#include <cstdint>
#include <bitset>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h b/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
index c47536d63e..443f47afd0 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
@@ -18,6 +18,7 @@
#include <limits.h>
+#include <cstdint>
#include <cstddef>
#include <cstring>
#include <ostream>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
index e13aa2221d..0ce848486d 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
@@ -7,7 +7,7 @@
#define GLSLANG_SHADERLANG_H_
#include <stddef.h>
-
+#include <cstdint>
#include "KHR/khrplatform.h"
#include <array>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
index 18175e15c7..28332857bc 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
@@ -14,6 +14,7 @@
#include <array>
#include <string>
#include <vector>
+#include <cstdint>
// This type is defined here to simplify ANGLE's integration with glslang for SPIR-V.
using ShCompileOptions = uint64_t;
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
index c63049b174..82b27837b5 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
@@ -6,6 +6,7 @@
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_ORIGIN_TRIALS_ORIGIN_TRIAL_PUBLIC_KEY_H_
#include <array>
+#include <cstdint>
namespace blink {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
index 14c5548766..43c9a8d6a5 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
@@ -5,6 +5,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_TYPES_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_TYPES_H_
+#include <cstdint>
+
namespace blink {
enum class DarkModeResult : uint8_t {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
index 80b3150b67..6377196230 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
@@ -116,7 +116,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
// An identifier for a document transition shared element. `id.valid()`
// returns true if this has been set, and false otherwise.
- DocumentTransitionSharedElementId document_transition_shared_element_id;
+ cc::DocumentTransitionSharedElementId document_transition_shared_element_id;
// An identifier to tag shared element resources generated and cached in the
// Viz process. This generated resource can be used as content for other
@@ -285,7 +285,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
return state_.compositor_element_id;
}
- const blink::DocumentTransitionSharedElementId&
+ const cc::DocumentTransitionSharedElementId&
DocumentTransitionSharedElementId() const {
return state_.document_transition_shared_element_id;
}
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h b/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
index c7e4f2b378..f30ce91b36 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
@@ -34,6 +34,7 @@
#include <sys/types.h>
#include <string>
+#include <cstdint>
#include "client/linux/handler/microdump_extra_info.h"
#include "common/using_std_string.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
index 2d58d76cb6..139af564ea 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
@@ -18,6 +18,7 @@
#include "dawn/common/TypedInteger.h"
#include "dawn/common/ityp_array.h"
+#include <cstdint>
#include <bitset>
#include <iostream>
#include <limits>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
index 374bd8302a..0884eb2a19 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_
#define SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
index fa5fc3a7e9..6cec934670 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_SPIRV_NAMER_H_
#define SRC_TINT_READER_SPIRV_NAMER_H_
+#include <cstdint>
#include <string>
#include <unordered_map>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
index f378d57817..98d1336f9a 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_WGSL_LEXER_H_
#define SRC_TINT_READER_WGSL_LEXER_H_
+#include <cstdint>
#include <string>
#include "src/tint/reader/wgsl/token.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
index 7b5b6754ed..62b1ca7e36 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_WGSL_TOKEN_H_
#define SRC_TINT_READER_WGSL_TOKEN_H_
+#include <cstdint>
#include <string>
#include <string_view>
#include <variant> // NOLINT: cpplint doesn't recognise this
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
index 4be648b37a..cac7238ef2 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
@@ -14,6 +14,7 @@
#include "src/tint/writer/spirv/instruction.h"
+#include <cstdint>
#include <utility>
namespace tint::writer::spirv {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
index 46a5deb55b..4c3080ff25 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_WRITER_SPIRV_OPERAND_H_
#define SRC_TINT_WRITER_SPIRV_OPERAND_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc b/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
index a3099e15db..2e6f0eea70 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
+++ b/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
@@ -30,6 +30,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
+#include <cstdio>
#include <new>
#include <utility>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h b/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
index d2731dac7a..46bc87ef92 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
@@ -5,6 +5,8 @@
#ifndef CONSTANTS_ANNOTATION_FLAGS_H_
#define CONSTANTS_ANNOTATION_FLAGS_H_
+#include <cstdint>
+
namespace pdfium {
namespace annotation_flags {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
index 1b4c53815b..472042fabc 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
@@ -18,6 +18,7 @@
#define INCLUDE_PERFETTO_EXT_BASE_UUID_H_
#include <array>
+#include <cstdint>
#include <string>
#include "perfetto/ext/base/optional.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
index c56f0344f9..cd7824929e 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
@@ -20,6 +20,8 @@
#include "perfetto/ext/base/optional.h"
#include "perfetto/trace_processor/status.h"
+#include <cstdint>
+
namespace perfetto {
namespace protos {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp b/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
index 3164650728..512a26943d 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
+++ b/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
@@ -10,6 +10,10 @@
#include <algorithm> // std::lower_bound
+#include <string.h>
+#include <algorithm>
+#include <iterator>
+
static constexpr const char* gColorNames[] = {
"aliceblue",
"antiquewhite",
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h b/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
index b7c586b80e..19ccbb024a 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
@@ -146,6 +146,7 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
#endif // #if VMA_VULKAN_VERSION >= 1001000
#endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES
+#include <cstdio>
#ifndef VULKAN_H_
#include <vulkan/vulkan.h>
#endif
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
index 5fd37b4613..ce70405dd2 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
@@ -11,6 +11,7 @@
#ifndef CALL_RTP_DEMUXER_H_
#define CALL_RTP_DEMUXER_H_
+#include <cstdint>
#include <map>
#include <string>
#include <utility>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
index b70ac4aa59..7ba5555647 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
@@ -13,6 +13,7 @@
#include <gio/gio.h>
+#include <cstdint>
#include <string>
namespace webrtc {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
index ca249541d0..534214dbfa 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
@@ -12,6 +12,7 @@
#ifndef RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_
#define RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h b/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
index 708d6c98ac..898016d886 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
@@ -8,6 +8,7 @@
#include <string>
#include <vector>
+#include <cstdint>
#include "base/component_export.h"
#include "ui/base/ime/text_input_type.h"
diff --git a/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h b/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
index d97a696fd5..68b18d80cd 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
@@ -5,6 +5,7 @@
#ifndef UI_EVENTS_GESTURE_EVENT_DETAILS_H_
#define UI_EVENTS_GESTURE_EVENT_DETAILS_H_
+#include <cstdint>
#include <string.h>
#include "base/check_op.h"
diff --git a/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h b/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
index 7ff15f0fc5..136cebc09e 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
@@ -5,6 +5,8 @@
#ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_
#define UI_EVENTS_TYPES_SCROLL_TYPES_H_
+#include <cstdint>
+
namespace ui {
enum class ScrollGranularity : uint8_t {
diff --git a/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h b/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
index 1ad025fec1..adadf96190 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
@@ -5,6 +5,7 @@
#ifndef UI_GFX_LINEAR_GRADIENT_H_
#define UI_GFX_LINEAR_GRADIENT_H_
+#include <cstdint>
#include <array>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
index fdac44e31e..a752dba6a2 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
@@ -5,6 +5,7 @@
#ifndef V8_BASE_LOGGING_H_
#define V8_BASE_LOGGING_H_
+#include <cstdint>
#include <cstring>
#include <sstream>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
index 61644ffe05..6fbc037437 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
@@ -5,6 +5,7 @@
#ifndef V8_BASE_MACROS_H_
#define V8_BASE_MACROS_H_
+#include <cstdint>
#include <limits>
#include <type_traits>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h b/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
index c1d69c18f0..eb33c6816a 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
@@ -5,6 +5,7 @@
#ifndef V8_INSPECTOR_V8_STRING_CONVERSIONS_H_
#define V8_INSPECTOR_V8_STRING_CONVERSIONS_H_
+#include <cstdint>
#include <string>
// Conversion routines between UT8 and UTF16, used by string-16.{h,cc}. You may
diff --git a/qtwebengine/src/core/browsing_data_remover_delegate_qt.h b/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
index 4e690ffb19..dfa884cd65 100644
--- a/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
+++ b/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
@@ -6,6 +6,8 @@
#include "content/public/browser/browsing_data_remover_delegate.h"
+#include <cstdint>
+
namespace QtWebEngineCore {
class BrowsingDataRemoverDelegateQt : public content::BrowsingDataRemoverDelegate {

View File

@ -0,0 +1,81 @@
From ecae5d93b0a89e2b8c16a2227b2d176f58579d04 Mon Sep 17 00:00:00 2001
From: Rémi Denis-Courmont <remi@remlab.net>
Date: Sun, 16 Jul 2023 18:18:02 +0300
Subject: [PATCH] Fix ffmpeg assembly with newer binutil
avcodec/x86/mathops: clip constants used with shift instructions within inline assembly
Fixes assembling with binutil as >= 2.41
FFmpeg commit effadce6c756247ea8bae32dc13bb3e6f464f0eb.
Deals with: "Error: operand type mismatch for `shr'"
Fixes: QTBUG-116649
Change-Id: I094e8c23fed4a61fba3f1e3a9c73c016d129d830
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/495990
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit 29354c7c7def7bdc66bcd25d401677fd9421f657)
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/509219
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
---
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h b/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
index 6298f5e..ca7e2df 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
@@ -35,12 +35,20 @@
static av_always_inline av_const int MULL(int a, int b, unsigned shift)
{
int rt, dummy;
+ if (__builtin_constant_p(shift))
__asm__ (
"imull %3 \n\t"
"shrdl %4, %%edx, %%eax \n\t"
:"=a"(rt), "=d"(dummy)
- :"a"(a), "rm"(b), "ci"((uint8_t)shift)
+ :"a"(a), "rm"(b), "i"(shift & 0x1F)
);
+ else
+ __asm__ (
+ "imull %3 \n\t"
+ "shrdl %4, %%edx, %%eax \n\t"
+ :"=a"(rt), "=d"(dummy)
+ :"a"(a), "rm"(b), "c"((uint8_t)shift)
+ );
return rt;
}
@@ -113,19 +121,31 @@
// avoid +32 for shift optimization (gcc should do that ...)
#define NEG_SSR32 NEG_SSR32
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
+ if (__builtin_constant_p(s))
__asm__ ("sarl %1, %0\n\t"
: "+r" (a)
- : "ic" ((uint8_t)(-s))
+ : "i" (-s & 0x1F)
);
+ else
+ __asm__ ("sarl %1, %0\n\t"
+ : "+r" (a)
+ : "c" ((uint8_t)(-s))
+ );
return a;
}
#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
+ if (__builtin_constant_p(s))
__asm__ ("shrl %1, %0\n\t"
: "+r" (a)
- : "ic" ((uint8_t)(-s))
+ : "i" (-s & 0x1F)
);
+ else
+ __asm__ ("shrl %1, %0\n\t"
+ : "+r" (a)
+ : "c" ((uint8_t)(-s))
+ );
return a;
}

View File

@ -1,52 +0,0 @@
From f4410fcbb093f259eaff4a20fc4266a535479235 Mon Sep 17 00:00:00 2001
From: Sebastien Blin <sebastien.blin@savoirfairelinux.com>
Date: Mon, 29 May 2023 13:09:53 -0400
Subject: [PATCH] OpenFile portal: do not use O_PATH fds
Using O_PATH requires correctly specifying whether the fd is writable or
not. Stating that the fd is writable without it actually being writable
results into rejection on xdg-desktop-portal side. Other implementations
like xdg-open or gtk have also moved away from O_PATH fds so this will
make a matching implementation and avoid possible rejections from xdp.
Fixes: QTBUG-113143
Original: https://codereview.qt-project.org/c/qt/qtbase/+/475425
---
qtbase/src/gui/platform/unix/qgenericunixservices.cpp | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/qtbase/src/gui/platform/unix/qgenericunixservices.cpp b/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
index a0e5466c58..fe0fdaa625 100644
--- a/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
+++ b/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
@@ -163,8 +163,7 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url)
// handle_token (s) - A string that will be used as the last element of the @handle.
// writable (b) - Whether to allow the chosen application to write to the file.
-#ifdef O_PATH
- const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_PATH);
+ const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_RDONLY);
if (fd != -1) {
QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.portal.Desktop"_L1,
"/org/freedesktop/portal/desktop"_L1,
@@ -174,16 +173,13 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url)
QDBusUnixFileDescriptor descriptor;
descriptor.giveFileDescriptor(fd);
- const QVariantMap options = {{"writable"_L1, true}};
+ const QVariantMap options = {};
// FIXME parent_window_id
message << QString() << QVariant::fromValue(descriptor) << options;
return QDBusConnection::sessionBus().call(message);
}
-#else
- Q_UNUSED(url);
-#endif
return QDBusMessage::createError(QDBusError::InternalError, qt_error_string());
}
--
2.40.1

View File

@ -0,0 +1,16 @@
qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
index 3488120..120e47a 100644
--- a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
+++ b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
@@ -472,7 +472,7 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length)
}
catch (const DeadlyImportError& e)
{
- if (!is64bits && (length > std::numeric_limits<std::uint32_t>::max())) {
+ if (!is64bits && (length > std::numeric_limits<uint32_t>::max())) {
throw DeadlyImportError("The FBX file is invalid. This may be because the content is too big for this older version (", ai_to_string(version), ") of the FBX format. (", e.what(), ")");
}
throw;

View File

@ -0,0 +1,45 @@
diff --git a/qtbase/src/corelib/global/qnamespace.h b/qtbase/src/corelib/global/qnamespace.h
index 8a2769a3ed..584d3620c9 100644
--- a/qtbase/src/corelib/global/qnamespace.h
+++ b/qtbase/src/corelib/global/qnamespace.h
@@ -832,10 +832,6 @@ namespace Qt {
Key_Dead_Small_Schwa = 0x0100128a,
Key_Dead_Capital_Schwa = 0x0100128b,
Key_Dead_Greek = 0x0100128c,
- Key_Dead_Lowline = 0x01001290,
- Key_Dead_Aboveverticalline = 0x01001291,
- Key_Dead_Belowverticalline = 0x01001292,
- Key_Dead_Longsolidusoverlay = 0x01001293,
// multimedia/internet keys - ignored by default - see QKeyEvent c'tor
Key_Back = 0x01000061,
diff --git a/qtbase/src/corelib/global/qnamespace.qdoc b/qtbase/src/corelib/global/qnamespace.qdoc
index 78c69176d8..1623517b5a 100644
--- a/qtbase/src/corelib/global/qnamespace.qdoc
+++ b/qtbase/src/corelib/global/qnamespace.qdoc
@@ -1654,10 +1654,6 @@
\value Key_Dead_Small_Schwa
\value Key_Dead_Capital_Schwa
\value Key_Dead_Greek
- \value Key_Dead_Lowline
- \value Key_Dead_Aboveverticalline
- \value Key_Dead_Belowverticalline
- \value Key_Dead_Longsolidusoverlay
\value Key_Back
\value Key_Forward
\value Key_Stop
diff --git a/qtbase/src/gui/platform/unix/qxkbcommon.cpp b/qtbase/src/gui/platform/unix/qxkbcommon.cpp
index fc014b38e2..af1cbbd42a 100644
--- a/qtbase/src/gui/platform/unix/qxkbcommon.cpp
+++ b/qtbase/src/gui/platform/unix/qxkbcommon.cpp
@@ -239,10 +239,6 @@ static constexpr const auto KeyTbl = qMakeArray(
Xkb2Qt<XKB_KEY_dead_small_schwa, Qt::Key_Dead_Small_Schwa>,
Xkb2Qt<XKB_KEY_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa>,
Xkb2Qt<XKB_KEY_dead_greek, Qt::Key_Dead_Greek>,
- Xkb2Qt<XKB_KEY_dead_lowline, Qt::Key_Dead_Lowline>,
- Xkb2Qt<XKB_KEY_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline>,
- Xkb2Qt<XKB_KEY_dead_belowverticalline, Qt::Key_Dead_Belowverticalline>,
- Xkb2Qt<XKB_KEY_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay>,
// Special keys from X.org - This include multimedia keys,
// wireless/bluetooth/uwb keys, special launcher keys, etc.

View File

@ -0,0 +1,29 @@
qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp b/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
index ec212f5a35..58bf4dce7d 100644
--- a/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
+++ b/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
@@ -37,7 +37,10 @@ static Libs loadLibs()
return {};
}
-constexpr size_t symbolsCount = 39
+constexpr size_t symbolsCount = 38
+#if VA_CHECK_VERSION(1, 9, 0)
+ + 1
+#endif
#ifdef DYNAMIC_RESOLVE_VA_DRM_SYMBOLS
+ 1
#endif
@@ -79,7 +82,9 @@ DEFINE_FUNC(vaEndPicture, 2, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaCreateBuffer, 7, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaMapBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaUnmapBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
+#if VA_CHECK_VERSION(1, 9, 0)
DEFINE_FUNC(vaSyncBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
+#endif
DEFINE_FUNC(vaDestroyBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaCreateSurfaces, 8, VA_STATUS_ERROR_OPERATION_FAILED);

View File

@ -1,5 +1,4 @@
0001-fix-gcc13.patch
0002-OpenFile-portal-do-not-use-O_PATH-fds.patch
0003-fix-mathops.patch
0004-fix-binary-tokenizer.patch
0005-importlib.patch
0001-fix-mathops.patch
0002-fix-binary-tokenizer.patch
0015-remove-deleted-xkb-keys.patch
0016-fix-vaapi.patch

View File

@ -68,7 +68,7 @@ Depends: gnupg,
Replaces: jami,
jami-libclient,
jami-daemon,
libqt-jami (>= 6.4.3),
libqt-jami (>= 6.5.3),
Conflicts: jami,
jami-libclient,
jami-libclient-gnome,
@ -84,7 +84,7 @@ Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
jami-daemon (=${binary:Version}),
libqt-jami (>= 6.4.3)
libqt-jami (>= 6.5.3)
Provides: jami-qt
Replaces: jami-all,
jami-libclient (<= 20220516.0214.9b42ad3~dfsg1-1)

View File

@ -26,11 +26,10 @@ License: GPLv3+
Vendor: Savoir-faire Linux Inc.
URL: https://jami.net/
Source: jami-libqt-%{version}.tar.xz
Patch0: 0001-fix-gcc13.patch
Patch1: 0002-OpenFile-portal-do-not-use-O_PATH-fds.patch
Patch2: 0003-fix-mathops.patch
Patch3: 0004-fix-binary-tokenizer.patch
Patch4: 0005-importlib.patch
Patch0: 0001-fix-mathops.patch
Patch1: 0002-fix-binary-tokenizer.patch
Patch2: 0015-remove-deleted-xkb-keys.patch
Patch3: 0016-fix-vaapi.patch
%global gst 0.10
%if 0%{?fedora} || 0%{?rhel} > 7
@ -45,13 +44,13 @@ BuildRequires: bison
BuildRequires: gperf
BuildRequires: flex
BuildRequires: vulkan-devel
BuildRequires: python-six
%if %{defined suse_version}
BuildRequires: ffmpeg-devel
BuildRequires: ffmpeg
BuildRequires: python-xml
BuildRequires: mozilla-nss-devel
%else
BuildRequires: python-six
BuildRequires: pkgconfig(gstreamer-%{gst})
BuildRequires: pkgconfig(gstreamer-app-%{gst})
BuildRequires: pkgconfig(gstreamer-audio-%{gst})
@ -70,7 +69,6 @@ This package contains Qt libraries for Jami.
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
echo "Building Qt using %{job_count} parallel jobs"

View File

@ -1,740 +0,0 @@
qtwebengine/src/3rdparty/chromium/base/debug/profiler.h | 1 +
qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h | 1 +
qtwebengine/src/3rdparty/chromium/base/logging.h | 2 ++
qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc | 2 ++
qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h | 1 +
qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h | 1 +
qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc | 1 +
qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h | 1 +
qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h | 1 +
qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h | 1 +
qtwebengine/src/3rdparty/chromium/extensions/common/constants.h | 2 ++
qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h | 2 ++
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h | 1 +
qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h | 2 ++
qtwebengine/src/3rdparty/chromium/net/base/parse_number.h | 1 +
qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h | 1 +
qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h | 1 +
qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h | 1 +
qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h | 1 +
qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h | 6 ++++--
qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h | 2 +-
qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h | 4 ++--
qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc | 1 +
qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc | 1 +
qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h | 2 ++
qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp | 4 ++++
qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h | 1 +
qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h | 1 +
qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h | 2 ++
qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h | 1 +
qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h | 1 +
qtwebengine/src/core/browsing_data_remover_delegate_qt.h | 2 ++
54 files changed, 71 insertions(+), 5 deletions(-)
diff --git a/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h b/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
index 1229e06234..c7ed55e70f 100644
--- a/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
+++ b/qtwebengine/src/3rdparty/chromium/base/debug/profiler.h
@@ -5,6 +5,7 @@
#ifndef BASE_DEBUG_PROFILER_H_
#define BASE_DEBUG_PROFILER_H_
+#include <cstdint>
#include <stddef.h>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h b/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
index 60c3c5c474..6c8021cfde 100644
--- a/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
+++ b/qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.h
@@ -7,6 +7,7 @@
#include <stddef.h>
+#include <cstdint>
#include <iosfwd>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/base/logging.h b/qtwebengine/src/3rdparty/chromium/base/logging.h
index a3ff92f0fd..c272f796a9 100644
--- a/qtwebengine/src/3rdparty/chromium/base/logging.h
+++ b/qtwebengine/src/3rdparty/chromium/base/logging.h
@@ -7,6 +7,8 @@
#include <stddef.h>
+
+#include <cstdint>
#include <cassert>
#include <cstdint>
#include <sstream>
diff --git a/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc b/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
index 96f8c3bd7c..c3f087b1a9 100644
--- a/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
+++ b/qtwebengine/src/3rdparty/chromium/cc/trees/target_property.cc
@@ -6,6 +6,8 @@
#include "ui/gfx/animation/keyframe/target_property.h"
+#include <cstdint>
+
namespace cc {
static_assert(TargetProperty::LAST_TARGET_PROPERTY <
diff --git a/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h b/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
index 2aba73ebcb..2e028fddcf 100644
--- a/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
+++ b/qtwebengine/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h
@@ -5,6 +5,7 @@
#ifndef COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_
#define COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h b/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
index 3069c858d3..f4614b73c6 100644
--- a/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
+++ b/qtwebengine/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_
+#include <cstdint>
#include <string>
#include <vector>
#include "base/callback_forward.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
index 80fd26f4f4..3f08972a7a 100644
--- a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
+++ b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "device/base/synchronization/one_writer_seqlock.h"
+#include <cstdint>
#include "base/threading/platform_thread.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
index 6a3eeda565..525301379c 100644
--- a/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
+++ b/qtwebengine/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h
@@ -6,6 +6,7 @@
#define DEVICE_BASE_SYNCHRONIZATION_ONE_WRITER_SEQLOCK_H_
#include <atomic>
+#include <cstdint>
#include "base/atomicops.h"
#include "base/check.h"
diff --git a/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h b/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
index 3cf2914e10..4b0552440c 100644
--- a/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
+++ b/qtwebengine/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h
@@ -5,6 +5,7 @@
#ifndef DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_
#define DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_
+#include <cstdint>
#include <ostream>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
index c24205c402..ee67ecf189 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/browser/api/audio/audio_device_id_calculator.h
@@ -5,6 +5,7 @@
#ifndef EXTENSIONS_BROWSER_API_AUDIO_AUDIO_DEVICE_ID_CALCULATOR_H_
#define EXTENSIONS_BROWSER_API_AUDIO_AUDIO_DEVICE_ID_CALCULATOR_H_
+#include <cstdint>
#include <map>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h b/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
index 9ac68e2be9..ef2761020d 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/common/constants.h
@@ -10,6 +10,8 @@
#include "build/chromeos_buildflags.h"
#include "extensions/common/extensions_export.h"
+#include <cstdint>
+
namespace extensions {
// Scheme we serve extension content from.
diff --git a/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h b/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
index 4ba8de8460..6352b90196 100644
--- a/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
+++ b/qtwebengine/src/3rdparty/chromium/extensions/renderer/bindings/api_invocation_errors.h
@@ -5,6 +5,7 @@
#ifndef EXTENSIONS_RENDERER_BINDINGS_API_INVOCATION_ERRORS_H_
#define EXTENSIONS_RENDERER_BINDINGS_API_INVOCATION_ERRORS_H_
+#include <cstdint>
#include <set>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
index a9c7adb5b5..943bd4e470 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
@@ -7,6 +7,8 @@
#include <stdint.h>
+#include <cstdint>
+
namespace gpu {
namespace webgpu {
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
index 027f1a5af3..70759b2ae4 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_feature_info.h
@@ -5,6 +5,7 @@
#ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_
#define GPU_CONFIG_GPU_FEATURE_INFO_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
index 3ea2191b50..0a1ae11202 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_preferences.h
@@ -5,6 +5,7 @@
#ifndef GPU_CONFIG_GPU_PREFERENCES_H_
#define GPU_CONFIG_GPU_PREFERENCES_H_
+#include <cstdint>
#include <stddef.h>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
index f72970c67a..d7f0b7d492 100644
--- a/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
+++ b/qtwebengine/src/3rdparty/chromium/gpu/config/gpu_util.h
@@ -5,6 +5,8 @@
#ifndef GPU_CONFIG_GPU_UTIL_H_
#define GPU_CONFIG_GPU_UTIL_H_
+#include <cstdint>
+
#include "build/build_config.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/gpu_export.h"
diff --git a/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h b/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
index 4e49ab7112..e99d2dd7aa 100644
--- a/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
+++ b/qtwebengine/src/3rdparty/chromium/net/base/parse_number.h
@@ -7,6 +7,7 @@
#include "base/strings/string_piece.h"
#include "net/base/net_export.h"
+#include <cstdint>
// This file contains utility functions for parsing numbers, in the context of
// network protocols.
diff --git a/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h b/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
index 2e9c319a3d..4d723d18f2 100644
--- a/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
+++ b/qtwebengine/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h
@@ -6,6 +6,7 @@
#define NET_COOKIES_COOKIE_INCLUSION_STATUS_H_
#include <bitset>
+#include <cstdint>
#include <ostream>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
index 6a300ed0c0..3e30f1cb02 100644
--- a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
+++ b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_
#define QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_
+#include <cstdint>
#include <vector>
#include "absl/strings/string_view.h"
diff --git a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
index 52f1501728..db4d310849 100644
--- a/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
+++ b/qtwebengine/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_
#define QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h b/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
index 138ca2efec..08f06e7b8c 100644
--- a/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
+++ b/qtwebengine/src/3rdparty/chromium/pdf/document_attachment_info.h
@@ -5,6 +5,7 @@
#ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_
#define PDF_DOCUMENT_ATTACHMENT_INFO_H_
+#include <cstdint>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h b/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
index b4fdb9a6d3..375d3ef327 100644
--- a/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
+++ b/qtwebengine/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h
@@ -38,6 +38,10 @@ namespace pp {
/// As a further optimization, we can add support for this later.
class ThreadSafeThreadTraits {
public:
+
+ typedef pp::Lock Lock;
+ typedef pp::AutoLock AutoLock;
+
class RefCount {
public:
/// Default constructor. In debug mode, this checks that the object is being
@@ -67,8 +71,6 @@ class ThreadSafeThreadTraits {
int32_t ref_;
};
- typedef pp::Lock Lock;
- typedef pp::AutoLock AutoLock;
};
/// The non-thread-safe version of thread traits. Using this class as the
diff --git a/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h b/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
index 0aad3ac782..7f7a1057d7 100644
--- a/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
+++ b/qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h
@@ -5,6 +5,7 @@
#ifndef SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_
#define SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_
+#include <cstdint>
#include <bitset>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h b/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
index c47536d63e..443f47afd0 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h
@@ -18,6 +18,7 @@
#include <limits.h>
+#include <cstdint>
#include <cstddef>
#include <cstring>
#include <ostream>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
index e13aa2221d..0ce848486d 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
@@ -7,7 +7,7 @@
#define GLSLANG_SHADERLANG_H_
#include <stddef.h>
-
+#include <cstdint>
#include "KHR/khrplatform.h"
#include <array>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
index 18175e15c7..28332857bc 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
@@ -14,6 +14,7 @@
#include <array>
#include <string>
#include <vector>
+#include <cstdint>
// This type is defined here to simplify ANGLE's integration with glslang for SPIR-V.
using ShCompileOptions = uint64_t;
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
index c63049b174..82b27837b5 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h
@@ -6,6 +6,7 @@
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_ORIGIN_TRIALS_ORIGIN_TRIAL_PUBLIC_KEY_H_
#include <array>
+#include <cstdint>
namespace blink {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
index 14c5548766..43c9a8d6a5 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/dark_mode_types.h
@@ -5,6 +5,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_TYPES_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_DARK_MODE_TYPES_H_
+#include <cstdint>
+
namespace blink {
enum class DarkModeResult : uint8_t {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
index 80b3150b67..6377196230 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h
@@ -116,7 +116,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
// An identifier for a document transition shared element. `id.valid()`
// returns true if this has been set, and false otherwise.
- DocumentTransitionSharedElementId document_transition_shared_element_id;
+ cc::DocumentTransitionSharedElementId document_transition_shared_element_id;
// An identifier to tag shared element resources generated and cached in the
// Viz process. This generated resource can be used as content for other
@@ -285,7 +285,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
return state_.compositor_element_id;
}
- const blink::DocumentTransitionSharedElementId&
+ const cc::DocumentTransitionSharedElementId&
DocumentTransitionSharedElementId() const {
return state_.document_transition_shared_element_id;
}
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h b/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
index c7e4f2b378..f30ce91b36 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h
@@ -34,6 +34,7 @@
#include <sys/types.h>
#include <string>
+#include <cstdint>
#include "client/linux/handler/microdump_extra_info.h"
#include "common/using_std_string.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
index 2d58d76cb6..139af564ea 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h
@@ -18,6 +18,7 @@
#include "dawn/common/TypedInteger.h"
#include "dawn/common/ityp_array.h"
+#include <cstdint>
#include <bitset>
#include <iostream>
#include <limits>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
index 374bd8302a..0884eb2a19 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_
#define SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
index fa5fc3a7e9..6cec934670 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_SPIRV_NAMER_H_
#define SRC_TINT_READER_SPIRV_NAMER_H_
+#include <cstdint>
#include <string>
#include <unordered_map>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
index f378d57817..98d1336f9a 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_WGSL_LEXER_H_
#define SRC_TINT_READER_WGSL_LEXER_H_
+#include <cstdint>
#include <string>
#include "src/tint/reader/wgsl/token.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
index 7b5b6754ed..62b1ca7e36 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_READER_WGSL_TOKEN_H_
#define SRC_TINT_READER_WGSL_TOKEN_H_
+#include <cstdint>
#include <string>
#include <string_view>
#include <variant> // NOLINT: cpplint doesn't recognise this
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
index 4be648b37a..cac7238ef2 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/instruction.cc
@@ -14,6 +14,7 @@
#include "src/tint/writer/spirv/instruction.h"
+#include <cstdint>
#include <utility>
namespace tint::writer::spirv {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
index 46a5deb55b..4c3080ff25 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_WRITER_SPIRV_OPERAND_H_
#define SRC_TINT_WRITER_SPIRV_OPERAND_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc b/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
index a3099e15db..2e6f0eea70 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
+++ b/qtwebengine/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc
@@ -30,6 +30,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
+#include <cstdio>
#include <new>
#include <utility>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h b/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
index d2731dac7a..46bc87ef92 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h
@@ -5,6 +5,8 @@
#ifndef CONSTANTS_ANNOTATION_FLAGS_H_
#define CONSTANTS_ANNOTATION_FLAGS_H_
+#include <cstdint>
+
namespace pdfium {
namespace annotation_flags {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
index 1b4c53815b..472042fabc 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h
@@ -18,6 +18,7 @@
#define INCLUDE_PERFETTO_EXT_BASE_UUID_H_
#include <array>
+#include <cstdint>
#include <string>
#include "perfetto/ext/base/optional.h"
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
index c56f0344f9..cd7824929e 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h
@@ -20,6 +20,8 @@
#include "perfetto/ext/base/optional.h"
#include "perfetto/trace_processor/status.h"
+#include <cstdint>
+
namespace perfetto {
namespace protos {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp b/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
index 3164650728..512a26943d 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
+++ b/qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp
@@ -10,6 +10,10 @@
#include <algorithm> // std::lower_bound
+#include <string.h>
+#include <algorithm>
+#include <iterator>
+
static constexpr const char* gColorNames[] = {
"aliceblue",
"antiquewhite",
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h b/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
index b7c586b80e..19ccbb024a 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
@@ -146,6 +146,7 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
#endif // #if VMA_VULKAN_VERSION >= 1001000
#endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES
+#include <cstdio>
#ifndef VULKAN_H_
#include <vulkan/vulkan.h>
#endif
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
index 5fd37b4613..ce70405dd2 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/call/rtp_demuxer.h
@@ -11,6 +11,7 @@
#ifndef CALL_RTP_DEMUXER_H_
#define CALL_RTP_DEMUXER_H_
+#include <cstdint>
#include <map>
#include <string>
#include <utility>
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
index b70ac4aa59..7ba5555647 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h
@@ -13,6 +13,7 @@
#include <gio/gio.h>
+#include <cstdint>
#include <string>
namespace webrtc {
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
index ca249541d0..534214dbfa 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h
@@ -12,6 +12,7 @@
#ifndef RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_
#define RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_
+#include <cstdint>
#include <string>
#include <vector>
diff --git a/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h b/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
index 708d6c98ac..898016d886 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/base/ime/linux/linux_input_method_context.h
@@ -8,6 +8,7 @@
#include <string>
#include <vector>
+#include <cstdint>
#include "base/component_export.h"
#include "ui/base/ime/text_input_type.h"
diff --git a/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h b/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
index d97a696fd5..68b18d80cd 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/events/gesture_event_details.h
@@ -5,6 +5,7 @@
#ifndef UI_EVENTS_GESTURE_EVENT_DETAILS_H_
#define UI_EVENTS_GESTURE_EVENT_DETAILS_H_
+#include <cstdint>
#include <string.h>
#include "base/check_op.h"
diff --git a/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h b/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
index 7ff15f0fc5..136cebc09e 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/events/types/scroll_types.h
@@ -5,6 +5,8 @@
#ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_
#define UI_EVENTS_TYPES_SCROLL_TYPES_H_
+#include <cstdint>
+
namespace ui {
enum class ScrollGranularity : uint8_t {
diff --git a/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h b/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
index 1ad025fec1..adadf96190 100644
--- a/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
+++ b/qtwebengine/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h
@@ -5,6 +5,7 @@
#ifndef UI_GFX_LINEAR_GRADIENT_H_
#define UI_GFX_LINEAR_GRADIENT_H_
+#include <cstdint>
#include <array>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
index fdac44e31e..a752dba6a2 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/logging.h
@@ -5,6 +5,7 @@
#ifndef V8_BASE_LOGGING_H_
#define V8_BASE_LOGGING_H_
+#include <cstdint>
#include <cstring>
#include <sstream>
#include <string>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
index 61644ffe05..6fbc037437 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/base/macros.h
@@ -5,6 +5,7 @@
#ifndef V8_BASE_MACROS_H_
#define V8_BASE_MACROS_H_
+#include <cstdint>
#include <limits>
#include <type_traits>
diff --git a/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h b/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
index c1d69c18f0..eb33c6816a 100644
--- a/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
+++ b/qtwebengine/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h
@@ -5,6 +5,7 @@
#ifndef V8_INSPECTOR_V8_STRING_CONVERSIONS_H_
#define V8_INSPECTOR_V8_STRING_CONVERSIONS_H_
+#include <cstdint>
#include <string>
// Conversion routines between UT8 and UTF16, used by string-16.{h,cc}. You may
diff --git a/qtwebengine/src/core/browsing_data_remover_delegate_qt.h b/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
index 4e690ffb19..dfa884cd65 100644
--- a/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
+++ b/qtwebengine/src/core/browsing_data_remover_delegate_qt.h
@@ -6,6 +6,8 @@
#include "content/public/browser/browsing_data_remover_delegate.h"
+#include <cstdint>
+
namespace QtWebEngineCore {
class BrowsingDataRemoverDelegateQt : public content::BrowsingDataRemoverDelegate {

View File

@ -0,0 +1,81 @@
From ecae5d93b0a89e2b8c16a2227b2d176f58579d04 Mon Sep 17 00:00:00 2001
From: Rémi Denis-Courmont <remi@remlab.net>
Date: Sun, 16 Jul 2023 18:18:02 +0300
Subject: [PATCH] Fix ffmpeg assembly with newer binutil
avcodec/x86/mathops: clip constants used with shift instructions within inline assembly
Fixes assembling with binutil as >= 2.41
FFmpeg commit effadce6c756247ea8bae32dc13bb3e6f464f0eb.
Deals with: "Error: operand type mismatch for `shr'"
Fixes: QTBUG-116649
Change-Id: I094e8c23fed4a61fba3f1e3a9c73c016d129d830
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/495990
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit 29354c7c7def7bdc66bcd25d401677fd9421f657)
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/509219
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
---
diff --git a/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h b/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
index 6298f5e..ca7e2df 100644
--- a/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
+++ b/qtwebengine/src/3rdparty/chromium/third_party/ffmpeg/libavcodec/x86/mathops.h
@@ -35,12 +35,20 @@
static av_always_inline av_const int MULL(int a, int b, unsigned shift)
{
int rt, dummy;
+ if (__builtin_constant_p(shift))
__asm__ (
"imull %3 \n\t"
"shrdl %4, %%edx, %%eax \n\t"
:"=a"(rt), "=d"(dummy)
- :"a"(a), "rm"(b), "ci"((uint8_t)shift)
+ :"a"(a), "rm"(b), "i"(shift & 0x1F)
);
+ else
+ __asm__ (
+ "imull %3 \n\t"
+ "shrdl %4, %%edx, %%eax \n\t"
+ :"=a"(rt), "=d"(dummy)
+ :"a"(a), "rm"(b), "c"((uint8_t)shift)
+ );
return rt;
}
@@ -113,19 +121,31 @@
// avoid +32 for shift optimization (gcc should do that ...)
#define NEG_SSR32 NEG_SSR32
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
+ if (__builtin_constant_p(s))
__asm__ ("sarl %1, %0\n\t"
: "+r" (a)
- : "ic" ((uint8_t)(-s))
+ : "i" (-s & 0x1F)
);
+ else
+ __asm__ ("sarl %1, %0\n\t"
+ : "+r" (a)
+ : "c" ((uint8_t)(-s))
+ );
return a;
}
#define NEG_USR32 NEG_USR32
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
+ if (__builtin_constant_p(s))
__asm__ ("shrl %1, %0\n\t"
: "+r" (a)
- : "ic" ((uint8_t)(-s))
+ : "i" (-s & 0x1F)
);
+ else
+ __asm__ ("shrl %1, %0\n\t"
+ : "+r" (a)
+ : "c" ((uint8_t)(-s))
+ );
return a;
}

View File

@ -1,52 +0,0 @@
From f4410fcbb093f259eaff4a20fc4266a535479235 Mon Sep 17 00:00:00 2001
From: Sebastien Blin <sebastien.blin@savoirfairelinux.com>
Date: Mon, 29 May 2023 13:09:53 -0400
Subject: [PATCH] OpenFile portal: do not use O_PATH fds
Using O_PATH requires correctly specifying whether the fd is writable or
not. Stating that the fd is writable without it actually being writable
results into rejection on xdg-desktop-portal side. Other implementations
like xdg-open or gtk have also moved away from O_PATH fds so this will
make a matching implementation and avoid possible rejections from xdp.
Fixes: QTBUG-113143
Original: https://codereview.qt-project.org/c/qt/qtbase/+/475425
---
qtbase/src/gui/platform/unix/qgenericunixservices.cpp | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/qtbase/src/gui/platform/unix/qgenericunixservices.cpp b/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
index a0e5466c58..fe0fdaa625 100644
--- a/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
+++ b/qtbase/src/gui/platform/unix/qgenericunixservices.cpp
@@ -163,8 +163,7 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url)
// handle_token (s) - A string that will be used as the last element of the @handle.
// writable (b) - Whether to allow the chosen application to write to the file.
-#ifdef O_PATH
- const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_PATH);
+ const int fd = qt_safe_open(QFile::encodeName(url.toLocalFile()), O_RDONLY);
if (fd != -1) {
QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.portal.Desktop"_L1,
"/org/freedesktop/portal/desktop"_L1,
@@ -174,16 +173,13 @@ static inline QDBusMessage xdgDesktopPortalOpenFile(const QUrl &url)
QDBusUnixFileDescriptor descriptor;
descriptor.giveFileDescriptor(fd);
- const QVariantMap options = {{"writable"_L1, true}};
+ const QVariantMap options = {};
// FIXME parent_window_id
message << QString() << QVariant::fromValue(descriptor) << options;
return QDBusConnection::sessionBus().call(message);
}
-#else
- Q_UNUSED(url);
-#endif
return QDBusMessage::createError(QDBusError::InternalError, qt_error_string());
}
--
2.40.1

View File

@ -0,0 +1,16 @@
qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
index 3488120..120e47a 100644
--- a/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
+++ b/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cpp
@@ -472,7 +472,7 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length)
}
catch (const DeadlyImportError& e)
{
- if (!is64bits && (length > std::numeric_limits<std::uint32_t>::max())) {
+ if (!is64bits && (length > std::numeric_limits<uint32_t>::max())) {
throw DeadlyImportError("The FBX file is invalid. This may be because the content is too big for this older version (", ai_to_string(version), ") of the FBX format. (", e.what(), ")");
}
throw;

View File

@ -0,0 +1,45 @@
diff --git a/qtbase/src/corelib/global/qnamespace.h b/qtbase/src/corelib/global/qnamespace.h
index 8a2769a3ed..584d3620c9 100644
--- a/qtbase/src/corelib/global/qnamespace.h
+++ b/qtbase/src/corelib/global/qnamespace.h
@@ -832,10 +832,6 @@ namespace Qt {
Key_Dead_Small_Schwa = 0x0100128a,
Key_Dead_Capital_Schwa = 0x0100128b,
Key_Dead_Greek = 0x0100128c,
- Key_Dead_Lowline = 0x01001290,
- Key_Dead_Aboveverticalline = 0x01001291,
- Key_Dead_Belowverticalline = 0x01001292,
- Key_Dead_Longsolidusoverlay = 0x01001293,
// multimedia/internet keys - ignored by default - see QKeyEvent c'tor
Key_Back = 0x01000061,
diff --git a/qtbase/src/corelib/global/qnamespace.qdoc b/qtbase/src/corelib/global/qnamespace.qdoc
index 78c69176d8..1623517b5a 100644
--- a/qtbase/src/corelib/global/qnamespace.qdoc
+++ b/qtbase/src/corelib/global/qnamespace.qdoc
@@ -1654,10 +1654,6 @@
\value Key_Dead_Small_Schwa
\value Key_Dead_Capital_Schwa
\value Key_Dead_Greek
- \value Key_Dead_Lowline
- \value Key_Dead_Aboveverticalline
- \value Key_Dead_Belowverticalline
- \value Key_Dead_Longsolidusoverlay
\value Key_Back
\value Key_Forward
\value Key_Stop
diff --git a/qtbase/src/gui/platform/unix/qxkbcommon.cpp b/qtbase/src/gui/platform/unix/qxkbcommon.cpp
index fc014b38e2..af1cbbd42a 100644
--- a/qtbase/src/gui/platform/unix/qxkbcommon.cpp
+++ b/qtbase/src/gui/platform/unix/qxkbcommon.cpp
@@ -239,10 +239,6 @@ static constexpr const auto KeyTbl = qMakeArray(
Xkb2Qt<XKB_KEY_dead_small_schwa, Qt::Key_Dead_Small_Schwa>,
Xkb2Qt<XKB_KEY_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa>,
Xkb2Qt<XKB_KEY_dead_greek, Qt::Key_Dead_Greek>,
- Xkb2Qt<XKB_KEY_dead_lowline, Qt::Key_Dead_Lowline>,
- Xkb2Qt<XKB_KEY_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline>,
- Xkb2Qt<XKB_KEY_dead_belowverticalline, Qt::Key_Dead_Belowverticalline>,
- Xkb2Qt<XKB_KEY_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay>,
// Special keys from X.org - This include multimedia keys,
// wireless/bluetooth/uwb keys, special launcher keys, etc.

View File

@ -0,0 +1,29 @@
qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp b/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
index ec212f5a35..58bf4dce7d 100644
--- a/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
+++ b/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegvaapisymbols.cpp
@@ -37,7 +37,10 @@ static Libs loadLibs()
return {};
}
-constexpr size_t symbolsCount = 39
+constexpr size_t symbolsCount = 38
+#if VA_CHECK_VERSION(1, 9, 0)
+ + 1
+#endif
#ifdef DYNAMIC_RESOLVE_VA_DRM_SYMBOLS
+ 1
#endif
@@ -79,7 +82,9 @@ DEFINE_FUNC(vaEndPicture, 2, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaCreateBuffer, 7, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaMapBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaUnmapBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
+#if VA_CHECK_VERSION(1, 9, 0)
DEFINE_FUNC(vaSyncBuffer, 3, VA_STATUS_ERROR_OPERATION_FAILED);
+#endif
DEFINE_FUNC(vaDestroyBuffer, 2, VA_STATUS_ERROR_OPERATION_FAILED);
DEFINE_FUNC(vaCreateSurfaces, 8, VA_STATUS_ERROR_OPERATION_FAILED);

View File

@ -44,9 +44,9 @@ LD_LIBRARY_PATH="${QT_JAMI_PREFIX}/lib:${LD_LIBRARY_PATH}"
PKG_CONFIG_PATH="${QT_JAMI_PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH}"
CMAKE_PREFIX_PATH="${QT_JAMI_PREFIX}/lib/cmake:${CMAKE_PREFIX_PATH}"
QT_MAJOR=6
QT_MINOR=4
QT_MINOR=5
QT_PATCH=3
QT_RELEASE_PATCH=3
QT_RELEASE_PATCH=0
QT_MAJOR_MINOR=${QT_MAJOR}.${QT_MINOR}
QT_MAJOR_MINOR_PATCH=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
@ -54,7 +54,7 @@ QT_MAJOR_MINOR_PATCH=${QT_MAJOR}.${QT_MINOR}.${QT_PATCH}
QT_TARBALL_URL=https://download.qt.io/archive/qt/$QT_MAJOR_MINOR/\
$QT_MAJOR_MINOR_PATCH/single/qt-everywhere-src-$QT_MAJOR_MINOR_PATCH.tar.xz
QT_TARBALL_SHA256="29a7eebdbba0ea57978dea6083709c93593a60f0f3133a3de08b9571ee8eaab4"
QT_TARBALL_SHA256="7cda4d119aad27a3887329cfc285f2aba5da85601212bcb0aea27bd6b7b544cb"
QT_TARBALL_FILE_NAME=$(basename "$QT_TARBALL_URL")
CACHED_QT_TARBALL=$TARBALLS/$QT_TARBALL_FILE_NAME
@ -113,6 +113,8 @@ if [ ! -f "${RPM_PATH}" ]; then
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc38.x86_64.rpm "${RPM_PATH}"
elif [[ "${DISTRIBUTION}" == "fedora_39" ]]; then
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.fc39.x86_64.rpm "${RPM_PATH}"
elif [[ "${DISTRIBUTION}" == "alma_9" ]]; then
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-$QT_MAJOR_MINOR_PATCH-*.el9.x86_64.rpm "${RPM_PATH}"
else
cp /root/rpmbuild/RPMS/x86_64/jami-libqt-*.rpm "${RPM_PATH}"
fi

View File

@ -7,9 +7,9 @@ then
apt-get remove cmake cmake-data -y
fi
wget https://github.com/Kitware/CMake/releases/download/v3.19.8/cmake-3.19.8-Linux-x86_64.sh \
wget https://github.com/Kitware/CMake/releases/download/v3.21.4/cmake-3.21.4-linux-x86_64.sh\
-q -O /tmp/cmake-install.sh
echo "aa5a0e0dd5594b7fd7c107a001a2bfb5f83d9b5d89cf4acabf423c5d977863ad /tmp/cmake-install.sh" | sha256sum --check
echo "63cb3406f5320edc94504212fe75e8625751ec21e8d5dab76d8ed67ed780066e /tmp/cmake-install.sh" | sha256sum --check
chmod u+x /tmp/cmake-install.sh
/tmp/cmake-install.sh --skip-license --prefix=/usr/local/
rm /tmp/cmake-install.sh

View File

@ -28,7 +28,7 @@ mutually exclusive required arguments:
-z, --zip Build portable archive
examples:
1. build.py --qt=C:/Qt/6.4.3/msvc2019_64 # Build the app using a specific Qt
1. build.py --qt=C:/Qt/6.5.3/msvc2019_64 # Build the app using a specific Qt
2. build.py --init pack --msi # Build the app and an MSI installer
3. build.py --init --tests # Build the app and run tests
build.py pack --zip --skip-build # Generate a 7z archive of the app
@ -65,6 +65,20 @@ this_dir = os.path.dirname(os.path.realpath(__file__))
repo_root_dir = os.path.abspath(os.path.join(this_dir, os.pardir, os.pardir))
build_dir = os.path.join(repo_root_dir, "build")
def get_latest_toolset_version():
"""Get the latest toolset version."""
# Get the visual studio version. Use only the major version number.
# Then: toolset = 2022 ? "v143" : 2019 ? "v142" : 2017 ? "v141" : "v140"
vs_ver = get_vs_prop("installationVersion")
if vs_ver is None:
return None
vs_ver = int(vs_ver.split(".")[0])
if vs_ver == 17:
return "v143"
elif vs_ver == 16:
return "v142"
else:
return "v141"
def find_latest_qt_path():
"""Find the latest Qt installation path."""
@ -190,40 +204,31 @@ def init_submodules():
"""Initialize any git submodules in the project."""
print("Initializing submodules...")
if execute_cmd(["git", "submodule", "update", "--init"], False):
# Init the client submodules for Windows other than the daemon.
submodules = [
"3rdparty/qrencode-win32",
"3rdparty/SortFilterProxyModel",
"3rdparty/md4c",
"3rdparty/tidy-html5",
]
if execute_cmd(["git", "submodule", "update", "--init" ] + submodules,
False):
print("Submodule initialization error.")
else:
if execute_cmd(["git", "submodule", "update", "--recursive"], False):
print("Submodule recursive checkout error.")
else:
print("Submodule recursive checkout finished.")
sys.exit(1)
def build_deps():
"""Build the dependencies for the project."""
print('Patching and building qrencode')
apply_cmd = [
'git',
'apply',
'--reject',
'--ignore-whitespace',
'--whitespace=fix'
]
print('Building qrencode')
qrencode_dir = os.path.join(repo_root_dir, '3rdparty', 'qrencode-win32')
patch_file = os.path.join(repo_root_dir, 'qrencode-win32.patch')
apply_cmd.append(patch_file)
if execute_cmd(apply_cmd, False, None, qrencode_dir):
print("Couldn't patch qrencode-win32.")
vs_env_vars = {}
vs_env_vars.update(get_vs_env())
msbuild_args = get_ms_build_args("x64", "Release-Lib")
toolset = get_latest_toolset_version()
print(f'Using toolset {toolset}')
msbuild_args = get_ms_build_args("x64", "Release-Lib", toolset)
proj_path = os.path.join(
qrencode_dir, "qrencode-win32", "vc8", "qrcodelib", "qrcodelib.vcxproj"
qrencode_dir, "qrencode-win32", "vc15", "qrcodelib", "qrcodelib.vcxproj"
)
build_project(msbuild_args, proj_path, vs_env_vars)
@ -269,7 +274,7 @@ def build(config_str, qt_dir, tests):
# We need to update the minimum SDK version to be able to
# build with system theme support
cmake_options = [
"-DWITH_DAEMON_SUBMODULE=ON",
"-DJAMICORE_AS_SUBDIR=ON",
"-DCMAKE_PREFIX_PATH=" + qt_dir,
"-DCMAKE_MSVCIDE_RUN_PATH=" + qt_dir + "\\bin",
"-DCMAKE_INSTALL_PREFIX=" + os.getcwd(),

View File

@ -1,243 +0,0 @@
From 261d830b9b4126d76519db0e6b6b51b5a730eb40 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Tue, 4 Dec 2018 17:42:43 -0500
Subject: [PATCH] b
---
.../vc8/qrcodelib/qrcodelib.vcxproj | 129 +++++++++++++++++-
1 file changed, 125 insertions(+), 4 deletions(-)
diff --git a/qrencode-win32/vc8/qrcodelib/qrcodelib.vcxproj b/qrencode-win32/vc8/qrcodelib/qrcodelib.vcxproj
index aabc6b6..8d8293b 100644
--- a/qrencode-win32/vc8/qrcodelib/qrcodelib.vcxproj
+++ b/qrencode-win32/vc8/qrcodelib/qrcodelib.vcxproj
@@ -5,45 +5,84 @@
<Configuration>Debug-Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-Dll|x64">
+ <Configuration>Debug-Dll</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Debug-Lib|Win32">
<Configuration>Debug-Lib</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Debug-Lib|x64">
+ <Configuration>Debug-Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release-Dll|Win32">
<Configuration>Release-Dll</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release-Dll|x64">
+ <Configuration>Release-Dll</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release-Lib|Win32">
<Configuration>Release-Lib</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release-Lib|x64">
+ <Configuration>Release-Lib</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{9A90BF5C-84B0-41F6-B83C-C20EADC1F46C}</ProjectGuid>
<RootNamespace>qrcodelib</RootNamespace>
<Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0.18362.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <PlatformToolset>v110_xp</PlatformToolset>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
- <PlatformToolset>v110_xp</PlatformToolset>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <PlatformToolset>v110_xp</PlatformToolset>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
- <PlatformToolset>v110_xp</PlatformToolset>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -52,15 +91,27 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
@@ -70,11 +121,17 @@
<IntDir>../.build/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|Win32'">
<OutDir>../.build/$(Configuration)\</OutDir>
<IntDir>../.build/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|Win32'">
<OutDir>../.build/$(Configuration)\</OutDir>
<IntDir>../.build/$(ProjectName)/$(Configuration)\</IntDir>
@@ -104,6 +161,26 @@
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Dll|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;QRCODELIB_EXPORTS;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libpng15d.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\qrcode\png;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <ModuleDefinitionFile>qrcodelib.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -124,6 +201,26 @@
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Dll|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;QRCODELIB_EXPORTS;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>libpng15.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>..\qrcode\png;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <ModuleDefinitionFile>qrcodelib.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
@@ -137,6 +234,19 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Lib|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;QRCODELIB_EXPORTS;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@@ -147,6 +257,17 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Lib|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>.\;..\qrcode;..\qrcode\png;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;QRCODELIB_EXPORTS;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="qrcodelib.cpp" />
<ClCompile Include="..\..\bitstream.c" />
--
2.19.0.windows.1

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="add_a_photo_black_24dp" opacity="1">
<path id="Path_248" data-name="Path 248" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_249" data-name="Path 249" d="M21,6H17.83L16,4H10V6h5.12l1.83,2H21V20H5V11H3v9a2.006,2.006,0,0,0,2,2H21a2.006,2.006,0,0,0,2-2V8A2.006,2.006,0,0,0,21,6ZM8,14a5,5,0,1,0,5-5A5,5,0,0,0,8,14Zm5-3a3,3,0,1,1-3,3A3.009,3.009,0,0,1,13,11ZM5,6H8V4H5V1H3V4H0V6H3V9H5Z" fill="black"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 512 B

View File

@ -0,0 +1,4 @@
<svg id="add_photo_alternate_black_24dp" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path id="Path_250" data-name="Path 250" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_251" data-name="Path 251" d="M18,20H4V6h9V4H4A2.006,2.006,0,0,0,2,6V20a2.006,2.006,0,0,0,2,2H18a2.006,2.006,0,0,0,2-2V11H18Zm-7.79-3.17L8.25,14.47,5.5,18h11l-3.54-4.71ZM20,4V1H18V4H15c.01.01,0,2,0,2h3V8.99c.01.01,2,0,2,0V6h3V4Z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 462 B

View File

@ -0,0 +1,4 @@
<svg id="assignment_ind_black_24dp" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path id="Path_311" data-name="Path 311" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_312" data-name="Path 312" d="M19,3H14.82A2.988,2.988,0,0,0,9.18,3H5A2.006,2.006,0,0,0,3,5V19a2.006,2.006,0,0,0,2,2H19a2.006,2.006,0,0,0,2-2V5A2.006,2.006,0,0,0,19,3Zm-7-.25a.767.767,0,1,1-.55.25A.749.749,0,0,1,12,2.75ZM19,19H5V5H19ZM12,6a3,3,0,1,0,3,3A3.009,3.009,0,0,0,12,6Zm0,4a1,1,0,1,1,1-1A1,1,0,0,1,12,10ZM6,16.47V18H18V16.47c0-2.5-3.97-3.58-6-3.58S6,13.96,6,16.47ZM8.31,16A7.011,7.011,0,0,1,12,14.88,6.982,6.982,0,0,1,15.69,16Z" fill="#005699"/>
</svg>

After

Width:  |  Height:  |  Size: 666 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="brush_black_24dp" opacity="1">
<path id="Path_323" data-name="Path 323" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_324" data-name="Path 324" d="M7,16a1,1,0,0,1,1,1,2.006,2.006,0,0,1-2,2,2.825,2.825,0,0,1-.5-.05A3.947,3.947,0,0,0,6,17a1,1,0,0,1,1-1M18.67,3a1.024,1.024,0,0,0-.71.29L9,12.25,11.75,15l8.96-8.96a1,1,0,0,0,0-1.41L19.37,3.29a.976.976,0,0,0-.7-.29ZM7,14a3,3,0,0,0-3,3,2.029,2.029,0,0,1-2,2,5.174,5.174,0,0,0,4,2,4,4,0,0,0,4-4A3,3,0,0,0,7,14Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 574 B

View File

@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<path d="M20.4,2.2H8.5c-0.9,0-1.6,0.7-1.6,1.6v2.9H3.6C2.7,6.7,2,7.4,2,8.3v11.9c0,0.9,0.7,1.6,1.6,1.6h11.9c0.9,0,1.6-0.7,1.6-1.6
v-2.9h3.3c0.9,0,1.6-0.7,1.6-1.6V3.8C22,2.9,21.3,2.2,20.4,2.2z M15.8,20.2c0,0.2-0.1,0.3-0.3,0.3H3.6c-0.2,0-0.3-0.1-0.3-0.3V8.3
C3.3,8.2,3.4,8,3.6,8h11.9c0.2,0,0.3,0.1,0.3,0.3V20.2z M20.7,15.7c0,0.2-0.1,0.3-0.3,0.3h-3.3V8.3c0-0.9-0.7-1.6-1.6-1.6H8.2V3.8
c0-0.2,0.1-0.3,0.3-0.3h11.9c0.2,0,0.3,0.1,0.3,0.3V15.7z"/>
</svg>
<svg id="content_copy_24dp" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path id="Path_305" data-name="Path 305" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_306" data-name="Path 306" d="M16,1H4A2.006,2.006,0,0,0,2,3V17H4V3H16Zm3,4H8A2.006,2.006,0,0,0,6,7V21a2.006,2.006,0,0,0,2,2H19a2.006,2.006,0,0,0,2-2V7A2.006,2.006,0,0,0,19,5Zm0,16H8V7H19Z" fill="#005699"/>
</svg>

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 411 B

View File

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="manage_accounts_black_24dp" opacity="1">
<g id="Group_82" data-name="Group 82">
<path id="Path_314" data-name="Path 314" d="M0,0H24V24H0Z" fill="none"/>
</g>
<g id="Group_84" data-name="Group 84">
<g id="Group_83" data-name="Group 83">
<path id="Path_315" data-name="Path 315" d="M4,18v-.65a.946.946,0,0,1,.41-.81A10.889,10.889,0,0,1,10,15a.22.22,0,0,1,.08.01,6.886,6.886,0,0,1,.59-1.98c-.22-.02-.44-.03-.67-.03a12.876,12.876,0,0,0-6.61,1.82A2.922,2.922,0,0,0,2,17.35V20h9.26a7.133,7.133,0,0,1-.97-2Z" fill="black"/>
<path id="Path_316" data-name="Path 316" d="M10,12A4,4,0,1,0,6,8,4,4,0,0,0,10,12Zm0-6A2,2,0,1,1,8,8,2.006,2.006,0,0,1,10,6Z" fill="black"/>
<path id="Path_317" data-name="Path 317" d="M20.75,16a4.338,4.338,0,0,0-.06-.63l1.14-1.01-1-1.73-1.45.49a3.647,3.647,0,0,0-1.08-.63L18,11H16l-.3,1.49a3.647,3.647,0,0,0-1.08.63l-1.45-.49-1,1.73,1.14,1.01a4.338,4.338,0,0,0-.06.63,4.338,4.338,0,0,0,.06.63l-1.14,1.01,1,1.73,1.45-.49a3.647,3.647,0,0,0,1.08.63L16,21h2l.3-1.49a3.647,3.647,0,0,0,1.08-.63l1.45.49,1-1.73-1.14-1.01A4.338,4.338,0,0,0,20.75,16ZM17,18a2,2,0,1,1,2-2A2.006,2.006,0,0,1,17,18Z" fill="black"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="21.5" viewBox="0 0 18 21.5">
<path id="notification_important_black_24dp" d="M10.01,21.01a1.99,1.99,0,0,0,3.98,0ZM12,6a5,5,0,0,1,5,5v7H7V11A5,5,0,0,1,12,6Zm0-4.5A1.5,1.5,0,0,0,10.5,3V4.17A6.993,6.993,0,0,0,5,11v6L3,19v1H21V19l-2-2V11a6.993,6.993,0,0,0-5.5-6.83V3A1.5,1.5,0,0,0,12,1.5ZM11,8h2v4H11Zm0,6h2v2H11Z" transform="translate(-3 -1.5)" fill="#c02"/>
</svg>

After

Width:  |  Height:  |  Size: 424 B

View File

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="person_add_alt_black_24dp" opacity="1">
<g id="Group_80" data-name="Group 80">
<rect id="Rectangle_324" data-name="Rectangle 324" width="24" height="24" fill="none"/>
</g>
<g id="Group_81" data-name="Group 81">
<path id="Path_313" data-name="Path 313" d="M20,9V6H18V9H15v2h3v3h2V11h3V9ZM9,12A4,4,0,1,0,5,8,4,4,0,0,0,9,12ZM9,6A2,2,0,1,1,7,8,2.006,2.006,0,0,1,9,6Zm6.39,8.56a13.867,13.867,0,0,0-12.78,0A2.971,2.971,0,0,0,1,17.22V20H17V17.22A2.971,2.971,0,0,0,15.39,14.56ZM15,18H3v-.78a.971.971,0,0,1,.52-.88A12.108,12.108,0,0,1,9,15a12.108,12.108,0,0,1,5.48,1.34.971.971,0,0,1,.52.88Z" fill="black"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 739 B

View File

@ -0,0 +1,4 @@
<svg id="person_outline_black_24dp_1_" data-name="person_outline_black_24dp (1)" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path id="Path_325" data-name="Path 325" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_326" data-name="Path 326" d="M12,5.9A2.1,2.1,0,1,1,9.9,8,2.1,2.1,0,0,1,12,5.9m0,9c2.97,0,6.1,1.46,6.1,2.1v1.1H5.9V17c0-.64,3.13-2.1,6.1-2.1M12,4a4,4,0,1,0,4,4A4,4,0,0,0,12,4Zm0,9c-2.67,0-8,1.34-8,4v3H20V17C20,14.34,14.67,13,12,13Z"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="remove_circle_outline_black_24dp" opacity="1">
<path id="Path_252" data-name="Path 252" d="M0,0H24V24H0Z" fill="none"/>
<path id="Path_253" data-name="Path 253" d="M7,11v2H17V11Zm5-9A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm0,18a8,8,0,1,1,8-8A8.011,8.011,0,0,1,12,20Z" fill="black"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 394 B

View File

@ -1,13 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Settings</title>
<g id="Icones" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Settings" fill="#000000" fill-rule="nonzero">
<g id="Shape" transform="translate(2.000000, 2.000000)">
<path d="M0.833333333,4.16666667 L3.45208333,4.16666667 C3.82561804,5.63721759 5.14941646,6.66679689 6.66666667,6.66679689 C8.18391688,6.66679689 9.5077153,5.63721759 9.88125,4.16666667 L19.1666667,4.16666667 C19.626904,4.16666667 20,3.79357062 20,3.33333333 C20,2.87309604 19.626904,2.5 19.1666667,2.5 L9.88125,2.5 C9.5077153,1.02944908 8.18391688,-0.000130218715 6.66666667,-0.000130218715 C5.14941646,-0.000130218715 3.82561804,1.02944908 3.45208333,2.5 L0.833333333,2.5 C0.373096042,2.5 0,2.87309604 0,3.33333333 C0,3.79357062 0.373096042,4.16666667 0.833333333,4.16666667 L0.833333333,4.16666667 Z M6.66666667,1.66666667 C7.58714125,1.66666667 8.33333333,2.41285875 8.33333333,3.33333333 C8.33333333,4.25380792 7.58714125,5 6.66666667,5 C5.74619208,5 5,4.25380792 5,3.33333333 C5,2.41285875 5.74619208,1.66666667 6.66666667,1.66666667 Z"></path>
<path d="M0.833333333,10.8333333 L10.11875,10.8333333 C10.4922847,12.3038843 11.8160831,13.3334636 13.3333333,13.3334636 C14.8505835,13.3334636 16.174382,12.3038843 16.5479167,10.8333333 L19.1666667,10.8333333 C19.626904,10.8333333 20,10.4602373 20,10 C20,9.53976271 19.626904,9.16666667 19.1666667,9.16666667 L16.5479167,9.16666667 C16.174382,7.69611574 14.8505835,6.66653645 13.3333333,6.66653645 C11.8160831,6.66653645 10.4922847,7.69611574 10.11875,9.16666667 L0.833333333,9.16666667 C0.373096042,9.16666667 0,9.53976271 0,10 C0,10.4602373 0.373096042,10.8333333 0.833333333,10.8333333 L0.833333333,10.8333333 Z M13.3333333,8.33333333 C14.2538079,8.33333333 15,9.07952542 15,10 C15,10.9204746 14.2538079,11.6666667 13.3333333,11.6666667 C12.4128588,11.6666667 11.6666667,10.9204746 11.6666667,10 C11.6666667,9.07952542 12.4128588,8.33333333 13.3333333,8.33333333 Z"></path>
<path d="M0.833333333,17.5 L3.45208333,17.5 C3.82561804,18.9705509 5.14941646,20.0001302 6.66666667,20.0001302 C8.18391688,20.0001302 9.5077153,18.9705509 9.88125,17.5 L19.1666667,17.5 C19.626904,17.5 20,17.126904 20,16.6666667 C20,16.2064294 19.626904,15.8333333 19.1666667,15.8333333 L9.88125,15.8333333 C9.5077153,14.3627824 8.18391688,13.3332031 6.66666667,13.3332031 C5.14941646,13.3332031 3.82561804,14.3627824 3.45208333,15.8333333 L0.833333333,15.8333333 C0.373096042,15.8333333 0,16.2064294 0,16.6666667 C0,17.126904 0.373096042,17.5 0.833333333,17.5 Z M6.66666667,15 C7.58714125,15 8.33333333,15.7461921 8.33333333,16.6666667 C8.33333333,17.5871412 7.58714125,18.3333333 6.66666667,18.3333333 C5.74619208,18.3333333 5,17.5871412 5,16.6666667 C5,15.7461921 5.74619208,15 6.66666667,15 Z"></path>
</g>
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="19.901" viewBox="0 0 20 19.901">
<path id="settings_FILL0_wght400_GRAD0_opsz24_1_" data-name="settings_FILL0_wght400_GRAD0_opsz24 (1)" d="M85.264-860.1l-.4-3.184a3.774,3.774,0,0,1-.609-.3q-.286-.174-.56-.373l-2.96,1.244L78-867.438l2.562-1.94a2.375,2.375,0,0,1-.025-.336v-.672a2.375,2.375,0,0,1,.025-.336L78-872.662l2.736-4.726,2.96,1.244a6.791,6.791,0,0,1,.572-.373,5.014,5.014,0,0,1,.6-.3l.4-3.184h5.473l.4,3.184a3.779,3.779,0,0,1,.609.3q.286.174.56.373l2.96-1.244L98-872.662l-2.562,1.94a2.375,2.375,0,0,1,.025.336v.672a1.221,1.221,0,0,1-.05.336l2.562,1.94-2.736,4.726L92.3-863.955a6.776,6.776,0,0,1-.572.373,5.005,5.005,0,0,1-.6.3l-.4,3.184ZM87-862.09H88.97l.348-2.637a5.577,5.577,0,0,0,1.43-.585,5.946,5.946,0,0,0,1.206-.933l2.463,1.02.97-1.692-2.139-1.617a3.51,3.51,0,0,0,.174-.734,6.116,6.116,0,0,0,.05-.784,6.116,6.116,0,0,0-.05-.784,3.511,3.511,0,0,0-.174-.734l2.139-1.617-.97-1.692-2.463,1.045a5.524,5.524,0,0,0-1.206-.958,5.575,5.575,0,0,0-1.43-.585L89-878.01H87.03l-.348,2.637a5.575,5.575,0,0,0-1.43.585,5.946,5.946,0,0,0-1.206.933l-2.463-1.02-.97,1.692,2.139,1.592a4.05,4.05,0,0,0-.174.746,6.031,6.031,0,0,0-.05.8,5.833,5.833,0,0,0,.05.771,4.048,4.048,0,0,0,.174.746l-2.139,1.617.97,1.692,2.463-1.045a5.527,5.527,0,0,0,1.206.958,5.577,5.577,0,0,0,1.43.585Z" transform="translate(-78 880)"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,11 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Share</title>
<g id="Icones" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Share" fill="#000000" stroke="#000000" stroke-width="0.75">
<g id="SHARE" transform="translate(4.000000, 2.000000)">
<path d="M13.5,15.00005 C14.6105,15.00005 15.5,15.88955 15.5,17.00005 C15.5,18.1103 14.6105,19.00005 13.5,19.00005 C12.3895,19.00005 11.5,18.1103 11.5,17.00005 C11.5,15.88955 12.3895,15.00005 13.5,15.00005 M3,8.00005 C4.1105,8.00005 5,8.88955 5,10.00005 C5,11.11055 4.1105,12.00005 3,12.00005 C1.8895,12.00005 1,11.11055 1,10.00005 C1,8.88955 1.8895,8.00005 3,8.00005 M13.5,1.00005 C14.6105,1.00005 15.5,1.88955 15.5,3.00005 C15.5,4.11055 14.6105,5.00005 13.5,5.00005 C12.3895,5.00005 11.5,4.11055 11.5,3.00005 C11.5,1.88955 12.3895,1.00005 13.5,1.00005 M13.5,5e-05 C11.849,5e-05 10.5,1.34905 10.5,3.00005 C10.5,3.47555 10.6135,3.92755 10.8125,4.32805 L5.086,7.85155 C4.545,7.3263 3.8095,7.00005 3,7.00005 C1.349,7.00005 0,8.34905 0,10.00005 C0,11.65105 1.349,13.00005 3,13.00005 C3.81525,13.00005 4.552,12.67255 5.09375,12.14055 L10.82025,15.66405 C10.6165,16.0683 10.5,16.51805 10.5,17.00005 C10.5,18.65105 11.849,20.00005 13.5,20.00005 C15.151,20.00005 16.5,18.65105 16.5,17.00005 C16.5,15.34905 15.151,14.00005 13.5,14.00005 C12.6905,14.00005 11.955,14.3263 11.414,14.85155 L5.6875,11.32805 C5.8865,10.92755 6,10.47555 6,10.00005 C6,9.51805 5.8835,9.06855 5.67975,8.66405 L11.40625,5.14055 C11.94825,5.67255 12.68475,6.00005 13.5,6.00005 C15.151,6.00005 16.5,4.65105 16.5,3.00005 C16.5,1.34905 15.151,5e-05 13.5,5e-05" id="Fill-1"></path>
</g>
</g>
<svg id="share_24dp" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="Group_66" data-name="Group 66">
<rect id="Rectangle_305" data-name="Rectangle 305" width="24" height="24" fill="none"/>
</g>
<g id="Group_68" data-name="Group 68">
<g id="Group_67" data-name="Group 67">
<path id="Path_302" data-name="Path 302" d="M3,11h8V3H3ZM5,5H9V9H5Z" fill="#005699"/>
<path id="Path_303" data-name="Path 303" d="M3,21h8V13H3Zm2-6H9v4H5Z" fill="#005699"/>
<path id="Path_304" data-name="Path 304" d="M13,3v8h8V3Zm6,6H15V5h4Z" fill="#005699"/>
<rect id="Rectangle_306" data-name="Rectangle 306" width="2" height="2" transform="translate(19 19)" fill="#005699"/>
<rect id="Rectangle_307" data-name="Rectangle 307" width="2" height="2" transform="translate(13 13)" fill="#005699"/>
<rect id="Rectangle_308" data-name="Rectangle 308" width="2" height="2" transform="translate(15 15)" fill="#005699"/>
<rect id="Rectangle_309" data-name="Rectangle 309" width="2" height="2" transform="translate(13 17)" fill="#005699"/>
<rect id="Rectangle_310" data-name="Rectangle 310" width="2" height="2" transform="translate(15 19)" fill="#005699"/>
<rect id="Rectangle_311" data-name="Rectangle 311" width="2" height="2" transform="translate(17 17)" fill="#005699"/>
<rect id="Rectangle_312" data-name="Rectangle 312" width="2" height="2" transform="translate(17 13)" fill="#005699"/>
<rect id="Rectangle_313" data-name="Rectangle 313" width="2" height="2" transform="translate(19 15)" fill="#005699"/>
</g>
</svg>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,21 +1,27 @@
<h3 align="center"><span style="font-weight:600"> CREATED BY:</span></h3>
<h4 align="left"><span style="font-weight:600"> Created by</span></h4>
<p>Adrien Béraud<br>
Albert Babí<br>
Alexandre Lision<br>
Alexandr Sergheev<br>
Alexandre Viau<br>
Alexander Lussier-Cullen<br>
Aline Bonnet<br>
Aline Gondim Santos<br>
Alireza Toghiani<br>
Amin Bandali<br>
AmirHossein Naghshzan<br>
Amna Snene<br>
Andreas Traczyk<br>
Anthony Léonard<br>
Brando Tovar<br>
Capucine Berthet<br>
Charles-Francis Damedey<br>
Cyrille Béraud<br>
Dorina Mosku<br>
Eden Abitbol<br>
Édric Milaret<br>
Éloi Bail<br>
Emma Falkiewitz<br>
Emmanuel Lepage-Vallée<br>
Fadi Shehadeh<br>
Franck Laurent<br>
@ -26,7 +32,10 @@ Hadrien De Sousa<br>
Hugo Lefeuvre<br>
Julien Grossholtz<br>
Kateryna Kostiuk<br>
Léo Banno-Cloutier<br>
Liam Courdoson<br>
Loïc Siret<br>
Mathéo Joseph<br>
Mingrui Zhang<br>
Mohamed Chibani<br>
Mohamed Amine Younes Bouacida<br>
@ -40,6 +49,7 @@ Peymane Marandi<br>
Philippe Gorley<br>
Pierre Duchemin<br>
Pierre Lespagnol<br>
Pierre Nicolas<br>
Raphaël Brulé<br>
Rayan Osseiran<br>
Romain Bertozzi<br>
@ -53,7 +63,8 @@ Thibault Wittemberg<br>
Thomas Ballasi<br>
Trevor Tabah<br>
Vsevolod Ivanov<br>
Xavier Jouslin de Noray<br>
Yang Wang<br></p>
<h3 align="center"><span style="font-weight:600"> ARTWORK BY:</span></h3>
<h4 align="left"><span style="font-weight:600"> Artwork by</span></h4>
<p>Charlotte Hoffmann<br>
Marianne Forget<br></p>

View File

@ -273,7 +273,8 @@ ApplicationWindow {
"infoText": infoText,
"buttonTitles": [JamiStrings.optionOk],
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue],
"buttonCallBacks": []
"buttonCallBacks": [],
"buttonRoles": [DialogButtonBox.AcceptRole]
});
}
@ -285,7 +286,8 @@ ApplicationWindow {
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue, SimpleMessageDialog.ButtonStyle.TintedBlue],
"buttonCallBacks": [function () {
AppVersionManager.applyUpdates(switchToBeta);
}]
}],
"buttonRoles": [DialogButtonBox.AcceptRole, DialogButtonBox.RejectRole]
});
}

View File

@ -33,41 +33,6 @@
extern const QString defaultDownloadPath;
// clang-format off
#ifdef APPSTORE
#define KEYS \
X(MinimizeOnClose, false) \
X(DownloadPath, defaultDownloadPath) \
X(ScreenshotPath, {}) \
X(EnableNotifications, true) \
X(EnableTypingIndicator, true) \
X(EnableReadReceipt, true) \
X(AcceptTransferBelow, 20) \
X(AutoAcceptFiles, true) \
X(DisplayHyperlinkPreviews, true) \
X(AppTheme, "System") \
X(BaseZoom, 1.0) \
X(ParticipantsSide, false) \
X(HideSelf, true) \
X(HideSpectators, false) \
X(AutoUpdate, true) \
X(PluginAutoUpdate, false) \
X(StartMinimized, false) \
X(ShowChatviewHorizontally, true) \
X(NeverShowMeAgain, false) \
X(WindowGeometry, QRectF(qQNaN(), qQNaN(), 0., 0.)) \
X(WindowState, QWindow::AutomaticVisibility) \
X(EnableExperimentalSwarm, false) \
X(LANG, "SYSTEM") \
X(PluginStoreEndpoint, "https://plugins.jami.net") \
X(PositionShareDuration, 15) \
X(PositionShareLimit, true) \
X(FlipSelf, true) \
X(ShowMardownOption, false) \
X(ChatViewEnterIsNewLine, false) \
X(ShowSendOption, false) \
X(EnablePtt, false) \
X(pttKey, 36)
#else
#define KEYS \
X(MinimizeOnClose, false) \
X(DownloadPath, defaultDownloadPath) \
@ -99,13 +64,11 @@ extern const QString defaultDownloadPath;
X(ShowMardownOption, false) \
X(ChatViewEnterIsNewLine, false) \
X(ShowSendOption, false) \
X(DonationVisibleDate, "2023-11-01 05:00") \
X(Donation2023VisibleDate, "2023-11-27 05:00") \
X(IsDonationVisible, true) \
X(DonationEndDate, "2024-01-01 00:00") \
X(Donation2023EndDate, "2024-01-31 00:00") \
X(EnablePtt, false) \
X(pttKey, 36)
#endif
X(PttKeys, 32)
/*
* A class to expose settings keys in both c++ and QML.
* Note: this is using a non-constructable class instead of a

View File

@ -26,23 +26,30 @@
#include "calladapter.h"
#include "systemtray.h"
#include "utils.h"
#include "qmlregister.h"
#include <QApplication>
#include <QTimer>
#include <QJsonObject>
#include "appsettingsmanager.h"
#include <api/callmodel.h>
#include <api/callparticipantsmodel.h>
#include <media_const.h>
CallAdapter::CallAdapter(SystemTray* systemTray, LRCInstance* instance, QObject* parent)
#include <QApplication>
#include <QTimer>
#include <QJsonObject>
CallAdapter::CallAdapter(AppSettingsManager* settingsManager,
SystemTray* systemTray,
LRCInstance* instance,
QObject* parent)
: QmlAdapterBase(instance, parent)
, systemTray_(systemTray)
, callInformationListModel_(std::make_unique<CallInformationListModel>())
, listener_(new PTTListener(settingsManager, this))
{
// Expose the Push-to-talk listener to QML as a singleton
QML_REGISTERSINGLETONTYPE_POBJECT(NS_MODELS, listener_, "PttListener");
set_callInformationList(QVariant::fromValue(callInformationListModel_.get()));
timer = new QTimer(this);
@ -232,7 +239,7 @@ CallAdapter::onCallStarted(const QString& callId)
// update call Information list by adding the new information related to the callId
callInformationListModel_->addElement(
qMakePair(callId, callModel->advancedInformationForCallId(callId)));
if (listener_->getPttState()){
if (listener_->getPttState()) {
#ifdef HAVE_GLOBAL_PTT
listener_->startListening();
toMute += callId;
@ -976,7 +983,8 @@ CallAdapter::muteCameraToggle()
callModel->removeMedia(callId,
libjami::Media::Details::MEDIA_TYPE_VIDEO,
libjami::Media::VideoProtocolPrefix::CAMERA,
mute, false);
mute,
false);
else
callModel->addMedia(callId,
lrcInstance_->avModel().getCurrentVideoCaptureDevice(),

View File

@ -37,6 +37,7 @@
#include "callInformationListModel.h"
class SystemTray;
class AppSettingsManager;
class CallAdapter final : public QmlAdapterBase
{
@ -49,7 +50,10 @@ public:
enum MuteStates { UNMUTED, LOCAL_MUTED, MODERATOR_MUTED, BOTH_MUTED };
Q_ENUM(MuteStates)
explicit CallAdapter(SystemTray* systemTray, LRCInstance* instance, QObject* parent = nullptr);
explicit CallAdapter(AppSettingsManager* settingsManager,
SystemTray* systemTray,
LRCInstance* instance,
QObject* parent = nullptr);
~CallAdapter();
public:
@ -131,7 +135,7 @@ private:
VectorString currentConfSubcalls_;
std::unique_ptr<CallInformationListModel> callInformationListModel_;
PTTListener* listener_ = new PTTListener(systemTray_->getSettingsManager());
PTTListener* listener_;
bool isMicrophoneMuted_ = true;
QSet<QString> toMute;
};

View File

@ -28,17 +28,27 @@ Popup {
// convient access to closePolicy
property bool autoClose: true
property alias backgroundColor: container.color
property alias backgroundOpacity: container.background.opacity
property alias title: titleText.text
property var popupcontainerSubContentLoader: containerSubContentLoader
property bool topLayoutVisible: true
property bool closeButtonVisible: true
property int button1Role
property int button2Role
property alias button1: action1
property alias button2: action2
property alias popupContentLoadStatus: containerSubContentLoader.status
property alias popupContent: containerSubContentLoader.sourceComponent
property int popupContentMargins: JamiTheme.preferredMarginSize
property int popupMargins: 30
property int buttonMargin: 20
property int maximumPopupWidth: 600
parent: Overlay.overlay
anchors.centerIn: parent
modal: true
padding: popupContentMargins
focus: true
closePolicy: autoClose ? (Popup.CloseOnEscape | Popup.CloseOnPressOutside) : Popup.NoAutoClose
@ -47,13 +57,13 @@ Popup {
id: container
property color color: JamiTheme.secondaryBackgroundColor
padding: popupContentMargins
anchors.margins: popupContentMargins
anchors.centerIn: parent
leftPadding: popupMargins
bottomPadding: action1.visible || action2.visible ? 10 :popupMargins
background: Rectangle {
id: bgRect
radius: JamiTheme.modalPopupRadius
radius: 5
color: container.color
layer.enabled: true
layer.effect: DropShadow {
@ -70,37 +80,95 @@ Popup {
contentItem: ColumnLayout {
id: contentLayout
RowLayout {
Layout.preferredWidth: parent.width
Layout.bottomMargin: JamiTheme.preferredMarginSize
visible: topLayoutVisible
JamiPushButton {
id: closeButton
Label {
id: titleText
visible: closeButtonVisible
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
font.pointSize: JamiTheme.menuFontSize
color: JamiTheme.textColor
Layout.alignment: Qt.AlignRight | Qt.AlignTop
Layout.preferredHeight: 20
Layout.preferredWidth: 20
Layout.topMargin: 5
Layout.rightMargin: 5
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
normalColor: "transparent"
visible: text.length > 0
}
JamiPushButton {
id: closeButton
Layout.alignment: Qt.AlignRight
imageColor: "grey"
normalColor: "transparent"
source: JamiResources.round_close_24dp_svg
onClicked: close()
}
source: JamiResources.round_close_24dp_svg
onClicked: close()
}
Loader {
id: containerSubContentLoader
Label {
id: titleText
Layout.rightMargin: popupMargins
Layout.bottomMargin: 20
Layout.topMargin: closeButtonVisible ? 0 : 30
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.menuFontSize
color: JamiTheme.textColor
font.bold: true
visible: text.length > 0
}
JamiFlickable {
id: flickable
Layout.fillHeight: true
Layout.preferredHeight: Math.min(contentHeight, root.height)
Layout.preferredWidth: contentItem.childrenRect.width
Layout.rightMargin: popupMargins
Layout.alignment: Qt.AlignCenter
contentHeight: contentItem.childrenRect.height
contentItem.children: Loader {
id: containerSubContentLoader
}
ScrollBar.horizontal.visible: false
}
DialogButtonBox {
id: buttonBox
Layout.alignment: Qt.AlignRight
spacing: 1.5
background: Rectangle {
color: "transparent"
width: buttonBox.childrenRect.width
height: buttonBox.childrenRect.height
}
visible: action1.text.length > 0
contentHeight: childrenRect.height + 14
MaterialButton {
id: action1
visible: text.length > 0
rightPadding: buttonMargin
leftPadding: buttonMargin
tertiary: true
autoAccelerator: true
DialogButtonBox.buttonRole: root.button1Role
}
MaterialButton {
id: action2
visible: text.length > 0
rightPadding: buttonMargin
leftPadding: buttonMargin
tertiary: true
autoAccelerator: true
DialogButtonBox.buttonRole: root.button2Role
}
}
}
}

View File

@ -28,6 +28,22 @@ BaseModalDialog {
property string accountId: ""
property int pressedKey: Qt.Key_unknown
closeButtonVisible: false
button1.text: JamiStrings.assign
button2.text: JamiStrings.cancel
button1Role: DialogButtonBox.ApplyRole
button2Role: DialogButtonBox.RejectRole
button1.onClicked: {
if (!(pressedKey === Qt.Key_unknown)){
PttListener.setPttKey(pressedKey);
choiceMade(pressedKey);
}
close();
}
button2.onClicked: close();
signal accepted
signal choiceMade(int chosenKey)
@ -80,44 +96,15 @@ BaseModalDialog {
border.color: JamiTheme.darkGreyColor
radius: 4
}
}
MaterialButton {
id: btnAssign
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: JamiTheme.preferredMarginSize
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
color: JamiTheme.buttonTintedBlack
hoveredColor: JamiTheme.buttonTintedBlackHovered
pressedColor: JamiTheme.buttonTintedBlackPressed
secondary: true
text: JamiStrings.assign
autoAccelerator: true
onClicked: {
if (!(pressedKey === Qt.Key_unknown)){
pttListener.setPttKey(pressedKey);
choiceMade(pressedKey);
}
close();
}
}
Item {
id: keyItem
Keys.onPressed: (event)=>{
keyLabel.text = pttListener.keyToString(event.key);
keyLabel.text = PttListener.keyToString(event.key);
pressedKey = event.key;
}
}
}
}

View File

@ -30,6 +30,19 @@ BaseModalDialog {
property string confirmLabel: ""
property string textLabel: ""
closeButtonVisible: false
button1.text: confirmLabel
button1.contentColorProvider: JamiTheme.redButtonColor
button1.onClicked: {
close();
accepted();
}
button2.text: JamiStrings.optionCancel
button2.onClicked: close()
button1Role: DialogButtonBox.AcceptRole
button2Role: DialogButtonBox.RejectRole
popupContent: ColumnLayout {
id: column
@ -49,51 +62,5 @@ BaseModalDialog {
verticalAlignment: Text.AlignVCenter
wrapMode: Text.Wrap
}
RowLayout {
spacing: 16
Layout.alignment: Qt.AlignCenter
Layout.topMargin: JamiTheme.preferredMarginSize
MaterialButton {
id: primaryBtn
Layout.alignment: Qt.AlignHCenter
text: root.confirmLabel
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
color: JamiTheme.buttonTintedRed
hoveredColor: JamiTheme.buttonTintedRedHovered
pressedColor: JamiTheme.buttonTintedRedPressed
secondary: true
autoAccelerator: true
onClicked: {
close();
accepted();
}
}
MaterialButton {
id: btnCancel
Layout.alignment: Qt.AlignHCenter
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
color: JamiTheme.buttonTintedBlack
hoveredColor: JamiTheme.buttonTintedBlackHovered
pressedColor: JamiTheme.buttonTintedBlackPressed
secondary: true
autoAccelerator: true
text: JamiStrings.optionCancel
onClicked: close()
}
}
}
}

View File

@ -29,6 +29,11 @@ BaseModalDialog {
autoClose: false
button1.text: JamiStrings.optionOk
button1Role: DialogButtonBox.AcceptRole
button1.visible: connectionFailed
button1.onClicked: Qt.quit()
Connections {
target: {
if (Qt.platform.os.toString() !== "windows" && Qt.platform.os.toString() !== "osx")
@ -51,10 +56,10 @@ BaseModalDialog {
onPopupContentLoadStatusChanged: {
if (popupContentLoadStatus === Loader.Ready) {
root.height = Qt.binding(function () {
return popupContentLoader.item.implicitHeight + 50;
return popupContent.implicitHeight + 50;
});
root.width = Qt.binding(function () {
return popupContentLoader.item.implicitWidth + 50;
return popupContent.implicitWidth + 50;
});
}
}
@ -94,24 +99,5 @@ BaseModalDialog {
smooth: true
fillMode: Image.PreserveAspectFit
}
MaterialButton {
id: btnOk
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
preferredWidth: JamiTheme.preferredFieldWidth / 2
visible: connectionFailed
text: JamiStrings.optionOk
color: JamiTheme.buttonTintedBlue
hoveredColor: JamiTheme.buttonTintedBlueHovered
pressedColor: JamiTheme.buttonTintedBluePressed
secondary: true
autoAccelerator: true
onClicked: Qt.quit()
}
}
}

View File

@ -26,22 +26,51 @@ BaseModalDialog {
id: root
property bool isSIP: false
property string bestName: ""
property string accountId: ""
signal accepted
title: JamiStrings.deleteAccount
closeButtonVisible: false
button1.text: JamiStrings.optionDelete
button1Role: DialogButtonBox.DestructiveRole
button1.onClicked: {
button1.enabled = false;
busyInd.running = true;
AccountAdapter.deleteCurrentAccount();
close();
accepted();
}
button2.text: JamiStrings.optionCancel
button2Role: DialogButtonBox.RejectRole
button2.onClicked: close();
button1.contentColorProvider: JamiTheme.deleteRedButton
BusyIndicator {
id: busyInd
running: false
Connections {
target: root
function onClosed() {
busyInd.running = false;
}
}
}
popupContent: ColumnLayout {
id: deleteAccountContentColumnLayout
anchors.centerIn: parent
spacing: 10
Label {
id: labelDeletion
Layout.alignment: Qt.AlignHCenter
Layout.alignment: Qt.AlignLeft
Layout.maximumWidth: root.width - 4*JamiTheme.preferredMarginSize
Layout.bottomMargin: 5
color: JamiTheme.textColor
text: JamiStrings.confirmDeleteQuestion
@ -52,124 +81,199 @@ BaseModalDialog {
wrapMode: Text.Wrap
}
Label {
id: labelBestId
Rectangle {
id: accountRectangle
Layout.alignment: Qt.AlignHCenter
color: JamiTheme.backgroundRectangleColor
color: JamiTheme.textColor
text: bestName
Layout.preferredWidth: parent.width
Layout.preferredHeight: userProfileDialogLayout.height
Layout.maximumWidth: root.width - 80
font.pointSize: JamiTheme.textFontSize
font.kerning: true
font.bold: true
wrapMode: Text.Wrap
}
radius: 5
Label {
id: labelAccountHash
ColumnLayout {
id: userProfileDialogLayout
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: root.width - 4*JamiTheme.preferredMarginSize
anchors.centerIn: parent
width: parent.width
color: JamiTheme.textColor
text: accountId
RowLayout {
Layout.margins: 10
Layout.fillWidth: true
font.pointSize: JamiTheme.textFontSize
font.kerning: true
spacing: 10
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.Wrap
}
Avatar {
id: currentAccountImage
Label {
id: labelWarning
Layout.preferredWidth: 56
Layout.preferredHeight: 56
visible: !isSIP
imageId: CurrentAccount.id
showPresenceIndicator: false
mode: Avatar.Mode.Account
}
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: root.width - 4*JamiTheme.preferredMarginSize
ColumnLayout {
text: JamiStrings.deleteAccountInfos
spacing: 10
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.textFontSize
font.kerning: true
// Visible when user alias is not empty and not equal to id.
TextEdit {
id: accountAlias
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
wrapMode: Text.Wrap
Layout.alignment: Qt.AlignLeft
color: JamiTheme.redColor
}
font.pointSize: JamiTheme.settingsFontSize
font.kerning: true
RowLayout {
spacing: 16
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
color: JamiTheme.textColor
visible: accountDisplayName.text ? (CurrentAccount.alias === CurrentAccount.bestId ? false : true) : false
selectByMouse: true
readOnly: true
MaterialButton {
id: btnDelete
wrapMode: Text.NoWrap
text: textMetricsAccountAliasText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: JamiTheme.preferredMarginSize
TextMetrics {
id: textMetricsAccountAliasText
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
font: accountAlias.font
text: CurrentAccount.alias
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
}
color: JamiTheme.buttonTintedRed
hoveredColor: JamiTheme.buttonTintedRedHovered
pressedColor: JamiTheme.buttonTintedRedPressed
secondary: true
autoAccelerator: true
// Visible when user name is not empty or equals to id.
TextEdit {
id: accountDisplayName
text: JamiStrings.optionDelete
Layout.alignment: Qt.AlignLeft
Connections {
target: root
function onClosed() {
btnDelete.enabled = true;
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.faddedFontColor
visible: text.length && text !== CurrentAccount.alias
readOnly: true
selectByMouse: true
wrapMode: Text.NoWrap
text: textMetricsAccountDisplayNameText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
TextMetrics {
id: textMetricsAccountDisplayNameText
font: accountDisplayName.font
text: CurrentAccount.bestId
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
}
}
}
Rectangle {
Layout.fillWidth: true
onClicked: {
btnDelete.enabled = false;
busyInd.running = true;
AccountAdapter.deleteCurrentAccount();
close();
accepted();
}
}
radius: 5
color: root.backgroundColor
BusyIndicator {
id: busyInd
running: false
Layout.preferredHeight: accountId.height + 10
Layout.margins: 10
Layout.topMargin: 0
RowLayout {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
Connections {
target: root
function onClosed() {
busyInd.running = false;
spacing: 20
Text {
id: identifierText
font.pointSize: JamiTheme.textFontSize
text: JamiStrings.identifier
color: JamiTheme.faddedFontColor
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
Layout.leftMargin: JamiTheme.preferredMarginSize
}
Label {
id: accountId
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: root.width - 250
Layout.rightMargin: JamiTheme.preferredMarginSize
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.textColor
elide: Text.ElideRight
text: CurrentAccount.uri
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
}
}
}
}
Rectangle {
id: warningRectangle
MaterialButton {
id: btnCancel
color: JamiTheme.warningRedRectangle
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: JamiTheme.preferredMarginSize
Layout.preferredWidth: parent.width
Layout.preferredHeight: labelWarning.height + 20
Layout.maximumWidth: root.width - 80
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
radius: 5
color: JamiTheme.buttonTintedBlack
hoveredColor: JamiTheme.buttonTintedBlackHovered
pressedColor: JamiTheme.buttonTintedBlackPressed
secondary: true
RowLayout{
id: warningLayout
text: JamiStrings.optionCancel
autoAccelerator: true
anchors.centerIn: parent
anchors.margins: 15
width: accountRectangle.width
onClicked: close()
Image{
id: warningIcon
Layout.fillWidth: true
Layout.leftMargin: 15
source: JamiResources.notification_important_24dp_svg
fillMode: Image.PreserveAspectFit
}
Label {
id: labelWarning
Layout.fillWidth: true
Layout.margins: 15
visible: !isSIP
text: JamiStrings.deleteAccountInfos
font.pointSize: JamiTheme.textFontSize
font.kerning: true
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
wrapMode: Text.Wrap
color: JamiTheme.redColor
}
}
}
}

View File

@ -25,25 +25,23 @@ import net.jami.Constants 1.1
BaseModalDialog {
id: root
width: JamiTheme.secondaryDialogDimension
property var previousBodies: undefined
popupContent: JamiListView {
width: root.width - 4 * JamiTheme.preferredMarginSize
width: 400 - 2 * root.popupMargins
height: Math.min(count * 50, 150)
model: root.previousBodies
delegate: Rectangle {
width: root.width - 2 * JamiTheme.preferredMarginSize
width: 400 - 2 * root.popupMargins
height: Math.max(JamiTheme.menuItemsPreferredHeight, rowBody.implicitHeight)
color: index % 2 === 0 ? JamiTheme.backgroundColor : JamiTheme.secondaryBackgroundColor
RowLayout {
id: rowBody
spacing: JamiTheme.preferredMarginSize
width: parent.width
anchors.centerIn: parent
Text {
@ -58,7 +56,6 @@ BaseModalDialog {
Text {
Layout.alignment: Qt.AlignLeft
Layout.fillWidth: true
TextMetrics {
id: metrics

View File

@ -71,7 +71,7 @@ Rectangle {
Text {
Layout.preferredWidth: 180
Layout.preferredWidth: root.width - 10
Layout.alignment: Qt.AlignLeft
Layout.topMargin: 8
Layout.bottomMargin: 15

View File

@ -52,7 +52,7 @@ Item {
RoundedBorderRectangle {
id: leftRect
fillColor: jamiId.backgroundColor
fillColor: JamiTheme.jamiIdBackgroundColor
Layout.preferredWidth: childrenRect.width
Layout.maximumWidth: jamiId.width - rightRect.width
Layout.preferredHeight: childrenRect.height
@ -73,7 +73,7 @@ Item {
containerWidth: 40
Layout.leftMargin: JamiTheme.pushButtonMargins
source: JamiResources.jami_id_logo_svg
color: jamiId.contentColor
color: JamiTheme.tintedBlue
}
UsernameTextEdit {
@ -81,7 +81,7 @@ Item {
visible: !readOnly
Layout.preferredHeight: 40
Layout.alignment: Qt.AlignVCenter
textColor: jamiId.contentColor
textColor: JamiTheme.tintedBlue
fontPixelSize: staticText.length > 16 || dynamicText.length > 16 ? JamiTheme.jamiIdSmallFontSize : JamiTheme.bigFontSize
editMode: false
isPersistent: false
@ -107,7 +107,7 @@ Item {
Layout.rightMargin: JamiTheme.pushButtonMargins
Layout.maximumWidth: leftRect.width - 50
elide: Text.ElideRight
color: jamiId.contentColor
color: JamiTheme.tintedBlue
font.pixelSize : text.length > 16 ? JamiTheme.jamiIdSmallFontSize : JamiTheme.bigFontSize
property string registeredName: CurrentAccount.registeredName
property string infohash: CurrentAccount.uri
@ -118,7 +118,7 @@ Item {
RoundedBorderRectangle {
id: rightRect
fillColor: jamiId.backgroundColor
fillColor: JamiTheme.jamiIdBackgroundColor
Layout.preferredWidth: childrenRect.width + 2 * JamiTheme.pushButtonMargins
Layout.preferredHeight: leftRect.height
@ -142,8 +142,8 @@ Item {
id: btnEdit
anchors.leftMargin: JamiTheme.pushButtonMargins
visible: CurrentAccount.registeredName === ""
border.color: enabled ? jamiId.contentColor : JamiTheme.buttonTintedBlack
imageColor: enabled ? jamiId.contentColor : JamiTheme.buttonTintedBlack
imageColor: enabled ? JamiTheme.tintedBlue : JamiTheme.buttonTintedBlack
border.color: usernameTextEdit.editMode ? jamiId.contentColor : "transparent"
enabled: {
if (!usernameTextEdit.editMode)
return true;
@ -157,7 +157,7 @@ Item {
return false;
}
}
source: usernameTextEdit.editMode ? JamiResources.check_black_24dp_svg : JamiResources.round_edit_24dp_svg
source: usernameTextEdit.editMode ? JamiResources.check_black_24dp_svg : JamiResources.assignment_ind_black_24dp_svg
toolTipText: JamiStrings.chooseUsername
onClicked: {
if (usernameTextEdit.readOnly) {
@ -167,6 +167,19 @@ Item {
usernameTextEdit.accepted();
}
}
Rectangle {
width: 10
height: 10
visible: !usernameTextEdit.editMode
anchors.top: parent.top
anchors.right: parent.right
radius: width / 2
color: JamiTheme.redDotColor
border.color: JamiTheme.jamiIdBackgroundColor
border.width: 2
}
}
JamiIdControlButton {
@ -188,7 +201,7 @@ Item {
JamiIdControlButton {
id: btnId
source: JamiResources.key_black_24dp_svg
source: JamiResources.outline_info_24dp_svg
visible: CurrentAccount.registeredName !== ""
border.color: "transparent"
toolTipText: JamiStrings.identifierURI
@ -217,7 +230,7 @@ Item {
imageContainerWidth: JamiTheme.pushButtonSize
imageContainerHeight: JamiTheme.pushButtonSize
border.color: jamiId.contentColor
imageColor: jamiId.contentColor
imageColor: JamiTheme.tintedBlue
duration: 0
}
}

View File

@ -19,6 +19,7 @@ import QtQuick.Controls
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
// A SplitView that supports dynamic RTL and splitView state saving.
SplitView {
id: root

View File

@ -39,12 +39,15 @@ AbstractButton {
property var hoveredColor: JamiTheme.buttonTintedBlueHovered
property var secHoveredColor: JamiTheme.secAndTertiHoveredBackgroundColor
property var pressedColor: JamiTheme.buttonTintedBluePressed
property var checkedColor: JamiTheme.secAndTertiHoveredBackgroundColor
property bool hasIcon: animatedIconSource.length !== 0 || iconSource.length !== 0
property var preferredWidth
property real textLeftPadding
property real textRightPadding
property real fontSize: JamiTheme.buttontextFontPixelSize
property real textAlignment: Text.AlignHCenter
checkable: false
checked: false
property real buttontextHeightMargin: JamiTheme.wizardButtonHeightMargin
height: buttontextHeightMargin + textButton.height
@ -91,87 +94,71 @@ AbstractButton {
return root.color;
}
contentItem: Item {
id: item
contentItem: RowLayout {
anchors.verticalCenter: parent.verticalCenter
spacing: hasIcon ? JamiTheme.preferredMarginSize : 0
Binding on implicitWidth {
when: root.preferredWidth === undefined || !root.Layout.fillWidth
value: item.childrenRect.width
Component {
id: iconComponent
ResponsiveImage {
source: source_
Layout.preferredWidth: iconSize
Layout.preferredHeight: iconSize
color: contentColorProvider
}
}
implicitHeight: childrenRect.height
Component {
id: animatedIconComponent
RowLayout {
anchors.verticalCenter: parent.verticalCenter
Binding on width {
when: root.preferredWidth !== undefined || root.Layout.fillWidth
value: root.availableWidth
AnimatedImage {
source: animatedSource_
Layout.preferredWidth: iconSize
Layout.preferredHeight: iconSize
width: iconSize
height: iconSize
playing: true
fillMode: Image.PreserveAspectFit
mipmap: true
}
}
Loader {
id: icon
property string source_
property string animatedSource_
active: hasIcon
Layout.preferredWidth: active * width
Layout.alignment: Qt.AlignVCenter
Layout.leftMargin: hasIcon ? JamiTheme.preferredMarginSize : undefined
sourceComponent: animatedSource_.length !== 0 ? animatedIconComponent : iconComponent
}
Text {
id: textButton
Layout.rightMargin: {
if ((!hasIcon || root.preferredWidth === undefined) && !root.Layout.fillWidth)
return undefined;
return icon.width + JamiTheme.preferredMarginSize / 2 + parent.spacing;
}
spacing: hasIcon ? JamiTheme.preferredMarginSize : 0
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
Component {
id: iconComponent
ResponsiveImage {
source: source_
Layout.preferredWidth: iconSize
Layout.preferredHeight: iconSize
color: contentColorProvider
}
}
Component {
id: animatedIconComponent
AnimatedImage {
source: animatedSource_
Layout.preferredWidth: iconSize
Layout.preferredHeight: iconSize
width: iconSize
height: iconSize
playing: true
fillMode: Image.PreserveAspectFit
mipmap: true
}
}
Loader {
id: icon
property string source_
property string animatedSource_
active: hasIcon
Layout.preferredWidth: active * width
Layout.alignment: Qt.AlignVCenter
Layout.leftMargin: hasIcon ? JamiTheme.preferredMarginSize : undefined
sourceComponent: animatedSource_.length !== 0 ? animatedIconComponent : iconComponent
}
Text {
id: textButton
Layout.rightMargin: {
if ((!hasIcon || root.preferredWidth === undefined) && !root.Layout.fillWidth)
return undefined;
return icon.width + JamiTheme.preferredMarginSize / 2 + parent.spacing;
}
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
leftPadding: root.primary ? JamiTheme.buttontextWizzardPadding : textLeftPadding
rightPadding: root.primary ? JamiTheme.buttontextWizzardPadding : textRightPadding
text: root.text
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
horizontalAlignment: root.textAlignment
color: contentColorProvider
font.pixelSize: fontSize
}
leftPadding: root.primary ? JamiTheme.buttontextWizzardPadding : textLeftPadding
rightPadding: root.primary ? JamiTheme.buttontextWizzardPadding : textRightPadding
text: root.text
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
horizontalAlignment: root.textAlignment
color: contentColorProvider
font.pixelSize: fontSize
}
}
@ -187,6 +174,8 @@ AbstractButton {
if (root.secondary || root.tertiary) {
if (root.hovered && root.enabled)
return root.secHoveredColor;
if (root.checked && root.checkable)
return root.checkedColor;
return JamiTheme.transparentColor;
}
if (root.down)

View File

@ -48,7 +48,7 @@ TextField {
property alias suffixBisIconColor: suffixBisIcon.color
property alias icon: container.data
property color accent: isActive || hovered ? prefixIconColor : JamiTheme.buttonTintedBlue
property color accent: (isActive || hovered ? prefixIconColor : JamiTheme.passwordBaselineColor)
property color baseColor: JamiTheme.primaryForegroundColor
property color textColor: JamiTheme.textColor
color: textColor
@ -114,8 +114,11 @@ TextField {
id: overBaseLineLabel
font.pixelSize: root.font.pixelSize
anchors.baseline: root.baseline
anchors.horizontalCenter: !isSwarmDetail ? root.horizontalCenter : undefined
anchors.left: root.left
anchors.leftMargin: 32
width: root.width - 64
text: root.placeholderText
elide: Text.ElideRight
color: isSwarmDetail ? root.color : root.baseColor
visible: !root.isActive && !readOnly && root.text.toString() === ""
}
@ -206,12 +209,13 @@ TextField {
TextFieldIcon {
id: suffixBisIcon
size: 20
size: 16
anchors.right: parent.right
anchors.verticalCenter: root.verticalCenter
anchors.verticalCenterOffset: -root.bottomPadding / 2
color: suffixBisIconColor
source: suffixBisIconSrc
opacity: 1
TapHandler {
cursorShape: Qt.ArrowCursor

View File

@ -87,6 +87,7 @@ Loader {
MaterialTextField {
id: displayCompField
font.pixelSize: root.fontPixelSize
readOnly: root.readOnly
text: elidedText != "" ? elidedText : staticText
@ -94,6 +95,8 @@ Loader {
isSwarmDetail: root.isSwarmDetail
isSettings: root.isSettings
textColor: root.textColor
suffixBisIconSrc: root.suffixBisIconSrc
suffixBisIconColor: root.suffixBisIconColor
placeholderText: root.placeholderText
prefixIconSrc: isSwarmDetail ? "" : root.prefixIconSrc
prefixIconColor: root.prefixIconColor

View File

@ -24,6 +24,8 @@ import net.jami.Constants 1.1
BaseModalDialog {
id: root
closeButtonVisible: false
enum PasswordEnteringPurpose {
ChangePassword,
ExportAccount,
@ -64,26 +66,33 @@ BaseModalDialog {
"title": title,
"infoText": info,
"buttonTitles": [JamiStrings.optionOk],
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue]
"buttonStyles": [SimpleMessageDialog.ButtonStyle.TintedBlue],
"buttonRoles": [DialogButtonBox.AcceptRole]
});
done(success, purpose);
}
button1.text: (purpose === PasswordDialog.ExportAccount) ? JamiStrings.exportAccount : JamiStrings.change
button1Role: DialogButtonBox.ApplyRole
button1.enabled: purpose === PasswordDialog.SetPassword
popupContent: ColumnLayout {
id: popupContentColumnLayout
width: JamiTheme.preferredDialogWidth
spacing: 16
function validatePassword() {
switch (purpose) {
case PasswordDialog.ExportAccount:
btnConfirm.enabled = currentPasswordEdit.dynamicText.length > 0;
button1.enabled = currentPasswordEdit.dynamicText.length > 0;
break;
case PasswordDialog.SetPassword:
btnConfirm.enabled = passwordEdit.dynamicText.length > 0 && passwordEdit.dynamicText === confirmPasswordEdit.dynamicText;
button1.enabled = passwordEdit.dynamicText.length > 0 && passwordEdit.dynamicText === confirmPasswordEdit.dynamicText;
break;
default:
btnConfirm.enabled = currentPasswordEdit.dynamicText.length > 0 && passwordEdit.dynamicText === confirmPasswordEdit.dynamicText;
button1.enabled = currentPasswordEdit.dynamicText.length > 0 && passwordEdit.dynamicText === confirmPasswordEdit.dynamicText;
}
}
@ -104,6 +113,13 @@ BaseModalDialog {
onVisibleChanged: validatePassword()
Component.onCompleted: {
root.button1.clicked.connect(function() {
button1.enabled = false;
timerToOperate.restart();
});
}
Timer {
id: timerToOperate
@ -123,10 +139,8 @@ BaseModalDialog {
id: currentPasswordEdit
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: JamiTheme.preferredFieldWidth
Layout.fillWidth: true
Layout.preferredHeight: visible ? 48 : 0
Layout.leftMargin: JamiTheme.preferredMarginSize
Layout.rightMargin: JamiTheme.preferredMarginSize
visible: purpose === PasswordDialog.ChangePassword || purpose === PasswordDialog.ExportAccount
placeholderText: JamiStrings.enterCurrentPassword
@ -138,10 +152,8 @@ BaseModalDialog {
id: passwordEdit
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: JamiTheme.preferredFieldWidth
Layout.preferredHeight: visible ? 48 : 0
Layout.leftMargin: JamiTheme.preferredMarginSize
Layout.rightMargin: JamiTheme.preferredMarginSize
Layout.fillWidth: true
visible: purpose === PasswordDialog.ChangePassword || purpose === PasswordDialog.SetPassword
@ -154,10 +166,8 @@ BaseModalDialog {
id: confirmPasswordEdit
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: JamiTheme.preferredFieldWidth
Layout.preferredHeight: visible ? 48 : 0
Layout.leftMargin: JamiTheme.preferredMarginSize
Layout.rightMargin: JamiTheme.preferredMarginSize
Layout.fillWidth: true
visible: purpose === PasswordDialog.ChangePassword || purpose === PasswordDialog.SetPassword
@ -165,26 +175,5 @@ BaseModalDialog {
onDynamicTextChanged: popupContentColumnLayout.validatePassword()
}
MaterialButton {
id: btnConfirm
Layout.alignment: Qt.AlignHCenter
preferredWidth: JamiTheme.preferredFieldWidth / 2 - 8
color: enabled ? JamiTheme.buttonTintedBlack : JamiTheme.buttonTintedGrey
hoveredColor: JamiTheme.buttonTintedBlackHovered
pressedColor: JamiTheme.buttonTintedBlackPressed
secondary: true
autoAccelerator: true
enabled: purpose === PasswordDialog.SetPassword
text: (purpose === PasswordDialog.ExportAccount) ? JamiStrings.exportAccount : JamiStrings.change
onClicked: {
btnConfirm.enabled = false;
timerToOperate.restart();
}
}
}
}

View File

@ -28,7 +28,7 @@ ModalTextEdit {
prefixIconSrc: firstEntry ? JamiResources.lock_svg : JamiResources.round_edit_24dp_svg
suffixBisIconSrc: echoMode == TextInput.Password ? JamiResources.eye_cross_svg : JamiResources.noun_eye_svg
suffixBisIconColor: JamiTheme.buttonTintedBlue
suffixBisIconColor: JamiTheme.passwordEyeIconColor
placeholderText: JamiStrings.password
infoTipText: firstEntry ? JamiStrings.password : ""

View File

@ -34,12 +34,14 @@ BaseModalDialog {
property string imageId
property bool newItem
property real buttonSize: JamiTheme.smartListAvatarSize
property real buttonSize: 36
property real imageSize: 25
signal focusOnPreviousItem
signal focusOnNextItem
signal imageValidated
signal imageRemoved
function startBooth() {
recordBox.openRecorder(true)
@ -57,9 +59,7 @@ BaseModalDialog {
importButton.forceActiveFocus()
}
width: JamiTheme.preferredDialogWidth
title: JamiStrings.chooseAvatarPicture
title: JamiStrings.selectImage
RecordBox {
id: recordBox
@ -72,20 +72,20 @@ BaseModalDialog {
onValidatePhoto: function(photo) {
if (!root.newItem)
AccountAdapter.setCurrentAccountAvatarBase64(photo)
else
UtilsAdapter.setTempCreationImageFromString(photo, imageId)
else{
UtilsAdapter.setTempCreationImageFromString(photo, imageId);
imageValidated();
}
root.close()
}
}
popupContent: RowLayout {
id: buttonsRowLayout
spacing: 10
spacing: 18
PushButton {
JamiPushButton {
id: takePhotoButton
objectName: "takePhotoButton"
@ -94,15 +94,11 @@ BaseModalDialog {
height: buttonSize
width: buttonSize
imageContainerWidth: imageSize
imageContainerHeight: imageSize
radius: height / 2
border.color: JamiTheme.buttonTintedBlue
normalColor: "transparent"
imageColor: JamiTheme.buttonTintedBlue
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
toolTipText: JamiStrings.takePhoto
source: JamiResources.baseline_camera_alt_24dp_svg
hoveredColor: JamiTheme.smartListHoveredColor
source: JamiResources.add_a_photo_black_24dp_svg
Keys.onPressed: function (keyEvent) {
if (keyEvent.key === Qt.Key_Enter ||
@ -136,7 +132,7 @@ BaseModalDialog {
}
}
PushButton {
JamiPushButton {
id: importButton
objectName: "photoboothViewImportButton"
@ -146,16 +142,11 @@ BaseModalDialog {
height: buttonSize
width: buttonSize
imageContainerWidth: imageSize
imageContainerHeight: imageSize
radius: height / 2
border.color: JamiTheme.buttonTintedBlue
normalColor: "transparent"
source: JamiResources.round_folder_24dp_svg
toolTipText: JamiStrings.importFromFile
imageColor: JamiTheme.buttonTintedBlue
hoveredColor: JamiTheme.smartListHoveredColor
normalColor: "transparent"
source: JamiResources.add_photo_alternate_black_24dp_svg
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
toolTipText: JamiStrings.importFromFile
Keys.onPressed: function (keyEvent) {
if (keyEvent.key === Qt.Key_Enter ||
@ -177,7 +168,7 @@ BaseModalDialog {
appWindow,
"commoncomponents/JamiFileDialog.qml",
{
title: JamiStrings.chooseAvatarImage,
title: JamiStrings.selectAvatarImage,
fileMode: JamiFileDialog.OpenFile,
folder: StandardPaths.writableLocation(
StandardPaths.PicturesLocation),
@ -189,14 +180,15 @@ BaseModalDialog {
if (!root.newItem) {
AccountAdapter.setCurrentAccountAvatarFile(filePath)
} else {
UtilsAdapter.setTempCreationImageFromFile(filePath, root.imageId)
UtilsAdapter.setTempCreationImageFromFile(filePath, root.imageId);
imageValidated();
}
root.close()
})
}
}
PushButton {
JamiPushButton {
id: clearButton
objectName: "photoboothViewClearButton"
@ -205,16 +197,11 @@ BaseModalDialog {
height: buttonSize
width: buttonSize
imageContainerWidth: imageSize
imageContainerHeight: imageSize
radius: height / 2
border.color: JamiTheme.buttonTintedBlue
normalColor: "transparent"
source: JamiResources.ic_hangup_participant_24dp_svg
toolTipText: JamiStrings.clearAvatar
imageColor: JamiTheme.buttonTintedBlue
hoveredColor: JamiTheme.smartListHoveredColor
normalColor: "transparent"
source: JamiResources.remove_circle_outline_black_24dp_svg
toolTipText: JamiStrings.removeImage
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
visible: {
if (!newItem && LRCInstance.currentAccountAvatarSet)
@ -242,8 +229,10 @@ BaseModalDialog {
onClicked: {
if (!root.newItem)
AccountAdapter.setCurrentAccountAvatarBase64()
else
UtilsAdapter.setTempCreationImageFromString("", imageId)
else {
UtilsAdapter.setTempCreationImageFromString("", imageId);
imageRemoved();
}
visible = false
stopBooth()
root.close()

View File

@ -34,6 +34,8 @@ Item {
property real avatarSize
property bool doubleEditAvatar: false
property alias editButton: editImage
height: avatarSize
Rectangle {
@ -57,7 +59,7 @@ Item {
showPresenceIndicator: false
}
PushButton {
JamiPushButton {
id: editImage
width: doubleEditAvatar ? avatar.width / 2 : avatar.width / 4
@ -71,9 +73,10 @@ Item {
preferredSize: doubleEditAvatar ? avatar.width / 3 : avatar.width / 6
normalColor: JamiTheme.secondaryBackgroundColor
imageColor: JamiTheme.buttonTintedBlue
hoveredColor: JamiTheme.hoveredButtonColorWizard
border.color: JamiTheme.buttonTintedBlue
border.color: JamiTheme.editButtonBorderColor
border.width: 2
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
enabled: avatar.visible && !root.readOnly
visible: enabled

View File

@ -36,6 +36,7 @@ BaseModalDialog {
property var buttonStyles: []
property string infoText: ""
property var innerContentData: []
property int buttonRoles: []
function openWithParameters(title, info = "") {
root.title = title;
@ -44,6 +45,45 @@ BaseModalDialog {
open();
}
button1.text: buttonTitles[0]
button1Role: buttonRoles[0]
button2.text: buttonTitles[1] ? buttonTitles[1] : null
button2Role: buttonRoles[1]
button1.onClicked: {
if (buttonCallBacks[0])
buttonCallBacks[0]();
close();
}
button2.onClicked: {
if (buttonCallBacks[1])
buttonCallBacks[1]();
close();
}
Component.onCompleted: {
for (var i = 0; i < buttonStyles.length; i++){
switch (buttonStyles[i]) {
case SimpleMessageDialog.ButtonStyle.TintedBlue:
button1.color = JamiTheme.buttonTintedBlue;
button1.hoveredColor = JamiTheme.buttonTintedBlueHovered;
button1.pressedColor = JamiTheme.buttonTintedBluePressed;
break;
case SimpleMessageDialog.ButtonStyle.TintedBlack:
button1.color = JamiTheme.buttonTintedBlack;
button1.hoveredColor = JamiTheme.buttonTintedBlackHovered;
button1.pressedColor = JamiTheme.buttonTintedBlackPressed;
break;
case SimpleMessageDialog.ButtonStyle.TintedRed:
button1.color = JamiTheme.buttonTintedRed;
button1.hoveredColor = JamiTheme.buttonTintedRedHovered;
button1.pressedColor = JamiTheme.buttonTintedRedPressed;
break;
}
}
}
popupContent: ColumnLayout {
Label {
id: infoTextLabel
@ -69,63 +109,5 @@ BaseModalDialog {
data: innerContentData
}
RowLayout {
spacing: JamiTheme.preferredMarginSize
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
Layout.bottomMargin: JamiTheme.preferredMarginSize
Repeater {
model: buttonTitles.length
MaterialButton {
Layout.alignment: Qt.AlignVCenter
preferredWidth: JamiTheme.preferredFieldWidth / 2
buttontextHeightMargin: JamiTheme.buttontextHeightMargin
color: {
switch (buttonStyles[modelData]) {
case SimpleMessageDialog.ButtonStyle.TintedBlue:
return JamiTheme.buttonTintedBlue;
case SimpleMessageDialog.ButtonStyle.TintedBlack:
return JamiTheme.buttonTintedBlack;
case SimpleMessageDialog.ButtonStyle.TintedRed:
return JamiTheme.buttonTintedRed;
}
}
hoveredColor: {
switch (buttonStyles[modelData]) {
case SimpleMessageDialog.ButtonStyle.TintedBlue:
return JamiTheme.buttonTintedBlueHovered;
case SimpleMessageDialog.ButtonStyle.TintedBlack:
return JamiTheme.buttonTintedBlackHovered;
case SimpleMessageDialog.ButtonStyle.TintedRed:
return JamiTheme.buttonTintedRedHovered;
}
}
pressedColor: {
switch (buttonStyles[modelData]) {
case SimpleMessageDialog.ButtonStyle.TintedBlue:
return JamiTheme.buttonTintedBluePressed;
case SimpleMessageDialog.ButtonStyle.TintedBlack:
return JamiTheme.buttonTintedBlackPressed;
case SimpleMessageDialog.ButtonStyle.TintedRed:
return JamiTheme.buttonTintedRedPressed;
}
}
secondary: true
autoAccelerator: true
text: buttonTitles[modelData]
onClicked: {
if (buttonCallBacks[modelData])
buttonCallBacks[modelData]();
close();
}
}
}
}
}
}

View File

@ -58,34 +58,28 @@ Menu {
menuItems[i].itemRealWidth = menuPreferredWidth;
if (menuItemsPreferredHeight)
menuItems[i].itemPreferredHeight = menuItemsPreferredHeight;
var menuSeparatorComponent, menuSeparatorComponentObj;
if (i !== menuItems.length - 1) {
var menuSeparatorComponent = Qt.createComponent("GeneralMenuSeparator.qml", Component.PreferSynchronous, root);
var menuSeparatorComponentObj = menuSeparatorComponent.createObject();
menuSeparatorComponent = Qt.createComponent("GeneralMenuSeparator.qml", Component.PreferSynchronous, root);
menuSeparatorComponentObj = menuSeparatorComponent.createObject();
generalMenuSeparatorList.push(menuSeparatorComponentObj);
root.addItem(menuSeparatorComponentObj);
}
if (menuItems[i].addMenuSeparatorAfter) {
var menuSeparatorComponent = Qt.createComponent("GeneralMenuSeparator.qml", Component.PreferSynchronous, root);
var menuSeparatorComponentObj = menuSeparatorComponent.createObject(root, {
"separatorColor": "#DEDEDE",
menuSeparatorComponent = Qt.createComponent("GeneralMenuSeparator.qml", Component.PreferSynchronous, root);
menuSeparatorComponentObj = menuSeparatorComponent.createObject(root, {
"separatorColor": JamiTheme.menuSeparatorColor,
"separatorPreferredHeight": 0
});
generalMenuSeparatorList.push(menuSeparatorComponentObj);
root.addItem(menuSeparatorComponentObj);
var menuSeparatorComponent = Qt.createComponent("GeneralMenuSeparator.qml", Component.PreferSynchronous, root);
var menuSeparatorComponentObj = menuSeparatorComponent.createObject();
menuSeparatorComponentObj = menuSeparatorComponent.createObject();
generalMenuSeparatorList.push(menuSeparatorComponentObj);
root.addItem(menuSeparatorComponentObj);
}
}
}
root.addItem(menuBottomBorder);
root.open();
}
onVisibleChanged: {
if (!visible)
root.close();
}
font.pointSize: JamiTheme.menuFontSize

View File

@ -56,6 +56,7 @@ Loader {
contextMenu.menuItemsPreferredHeight = contextMenuItemPreferredHeight;
contextMenu.menuSeparatorPreferredHeight = contextMenuSeparatorPreferredHeight;
contextMenu.loadMenuItems(menuItemsToLoad);
contextMenu.open();
}
}
}

View File

@ -75,8 +75,8 @@ Item {
// The banner is visible if the current date is after the date set in the settings and before the end date
// And if the donation toggle is checked
var isDonationVisible = UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible);
var endDonationDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.DonationEndDate)));
var donationVisibleDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.DonationVisibleDate)));
return new Date() < endDonationDate && new Date() > donationVisibleDate && isDonationVisible && false;
var endDonationDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023EndDate)));
var donationVisibleDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate)));
return new Date() < endDonationDate && new Date() > donationVisibleDate && isDonationVisible;
}
}

View File

@ -48,13 +48,17 @@ Item {
property string version: qsTr("Version") + (AppVersionManager.isCurrentVersionBeta() ? " (Beta)" : "")
property string declarationYear: "© 2015-2023"
property string slogan: "Eleutheria"
property string declaration: qsTr("Jami is a free universal communication software that respects the freedom and privacy of its users.")
property string declaration: qsTr('Jami, a GNU package, is software for universal and distributed peer-to-peer communication that respects the freedom and privacy of its users. Visit <a href="https://jami.net" style="color: ' + JamiTheme.buttonTintedBlue + '">jami.net</a>' + ' to learn more.')
property string noWarranty: qsTr('This program comes with absolutely no warranty. See the <a href="https://www.gnu.org/licenses/gpl-3.0.html" style="color: ' + JamiTheme.buttonTintedBlue + '">GNU General Public License</a>, version 3 or later for details.')
property string contribute: qsTr('Contribute')
property string feedback: qsTr('Feedback')
// AccountComboBox
property string displayQRCode: qsTr("Display QR code")
property string openSettings: qsTr("Open settings")
property string closeSettings: qsTr("Close settings")
property string addAccount: qsTr("Add Account")
property string addAccount: qsTr("Add another account")
property string manageAccount: qsTr("Manage account")
// ContactPicker
property string addToConference: qsTr("Add to conference")
@ -606,12 +610,12 @@ Item {
property string exportAccount: qsTr("Export")
// PhotoBoothView
property string chooseAvatarImage: qsTr("Choose a picture as your avatar")
property string chooseAvatarPicture: qsTr("Choose a picture")
property string selectAvatarImage: qsTr("Select image as avatar")
property string selectImage: qsTr("Select image")
property string importFromFile: qsTr("Import avatar from image file")
property string clearAvatar: qsTr("Clear avatar image")
property string removeImage: qsTr("Remove image")
property string takePhoto: qsTr("Take photo")
property string imageFiles: qsTr("Image Files (*.png *.jpg *.jpeg *.JPG *.JPEG *.PNG)")
property string imageFiles: qsTr("Image Files (*.jpeg *.jpg *.png *.JPEG* .JPG *.PNG)")
// Plugins
property string autoUpdate: qsTr("Auto update")
@ -623,6 +627,7 @@ Item {
property string installMannuallyDescription: qsTr("Install an extension directly from your device.")
property string pluginStoreTitle: qsTr("Available")
property string pluginStoreNotAvailable: qsTr("Plugins store is not available")
property string storeNotSupportedPlatform: qsTr("The Jami Extension Store currently has no extension available for the platform in use. Check again later!")
property string pluginPreferences: qsTr("Preferences")
property string installationFailed: qsTr("Installation failed")
property string pluginInstallationFailed: qsTr("The installation of the plugin failed")
@ -769,8 +774,9 @@ Item {
property string joinCall: qsTr("Join call")
property string wantToJoin: qsTr("A call is in progress. Do you want to join the call?")
property string needsHost: qsTr("Current host for this swarm seems unreachable. Do you want to host the call?")
property string chooseHoster: qsTr("Choose a dedicated device for hosting future calls in this swarm. If not set, the device starting a call will host it.")
property string chooseThisDevice: qsTr("Choose this device")
property string selectHost: qsTr("Select dedicated device for hosting future calls in this swarm. If not set, the host will be the device starting a call.")
property string selectThisDevice: qsTr("Select this device")
property string selectDevice: qsTr("Select device")
property string removeCurrentDevice: qsTr("Remove current device")
property string becomeHostOneCall: qsTr("Host only this call")
property string hostThisCall: qsTr("Host this call")
@ -828,6 +834,10 @@ Item {
// ManageAccount
property string enableAccountDescription: qsTr("Enabling your account allows you to be contacted on Jami")
// CreateAccount
property string encryptWithPassword: qsTr("Encrypt your account with a password")
property string customizeYourProfile: qsTr("Customize your profile")
// General
property string appearance: qsTr("Appearance")
@ -848,7 +858,7 @@ Item {
property string zoomLevel: qsTr("Text zoom level")
//Donation campaign
property string donationTipBoxText: qsTr("Free and private sharing. <a href=\"https://jami.net/donate/\">Donate</a> to expand it.")
property string donationTipBoxText: qsTr("Free and private sharing. <a href=\"https://jami.net/whydonate/\">Donate</a> to expand it.")
property string donation: qsTr("Donate")
property string donationText: qsTr("If you enjoy using Jami and believe in our mission, would you make a donation?")
property string notNow: qsTr("Not now")

View File

@ -88,6 +88,8 @@ Item {
property color popupOverlayColor: darkTheme ? Qt.rgba(255, 255, 255, 0.22) : Qt.rgba(0, 0, 0, 0.33)
property real formsRadius: 30
property color warningRedRectangle: darkTheme ? "#3c131a" : "#fae5e8"
// Side panel
property color presenceGreen: "#4cd964"
property color notificationRed: "#ff3b30"
@ -138,6 +140,13 @@ Item {
property color secAndTertiHoveredBackgroundColor: darkTheme ? "#123F4A" : "#E5EEF5"
property color closeButtonLighterBlack: "#4c4c4c"
property color redButtonColor: darkTheme ? "#FA2E30" : "#CC0022"
property color backgroundRectangleColor: darkTheme ? "#333333" : "#F0EFEF"
property color deleteRedButton: "#CC0022"
property color editButtonBorderColor: darkTheme ? "#333333" : "#F0EFEF"
// Jami switch
property color switchBackgroundCheckedColor: "#8dbaea"
property color switchBackgroundColor: darkTheme ? "#626262" : "#E5EEF5"
@ -154,6 +163,7 @@ Item {
property color comboboxBackgroundColorHovered: darkTheme ? "#123F4A" : "#E5EEF5"
property color comboboxTextColor: darkTheme ? "#03B9E9" : "#005699"
property color comboboxTextColorHovered: tintedBlue
property color accountComboBoxBackgroundColor: darkTheme ? "#333333" : lightGrey_
// Spinbox
property color spinboxBackgroundColor: darkTheme ? editBackgroundColor : selectedColor
@ -188,6 +198,9 @@ Item {
property color wizardGreenColor: "#aed581"
property color requiredFieldColor: "#ff1f62"
property color requiredFieldBackgroundColor: "#fee4e9"
property color customizePhotoColor: "#0B03DB"
property color customizePhotoHoveredColor: "#3B35E2"
property color customizeRectangleColor: darkTheme ? "#333333" : "#F0EFEF"
// Misc
property color recordIconColor: "#dc2719"
@ -401,6 +414,7 @@ Item {
property real lineEditContextMenuItemsHeight: 15
property real lineEditContextMenuItemsWidth: 100
property real lineEditContextMenuSeparatorsHeight: 2
property color menuSeparatorColor: darkTheme ? "#4d4d4d" : "#DEDEDE"
// Recording
property real recordingBtnSize: 12
@ -436,11 +450,6 @@ Item {
property real switchPreferredWidth: 40
property real switchIndicatorPreferredWidth: 20
// Jami Identifier
property color mainColor: "#005699"
property real pushButtonSize: 22
property real pushButtonMargins: 10
// Modal Popup
property real modalPopupRadius: 20
property real photoPopupRadius: 5
@ -508,6 +517,11 @@ Item {
property real jamiIdFontSize: calcSize(19)
property real jamiIdSmallFontSize: calcSize(11)
property color jamiIdColor: darkTheme ? blackColor : sysColor
property color mainColor: "#005699"
property real pushButtonSize: 22
property real pushButtonMargins: 10
property color jamiIdBackgroundColor: darkTheme ? "#333333" : "#F0EFEF"
property color redDotColor: "#CC0022"
// MainView
property color rectColor: darkTheme ? blackColor : "#e5eef5"
@ -563,9 +577,12 @@ Item {
property real cornerIconSize: 40
property color wizardIconColor: darkTheme ? "#8c8c8c" : "#7f7f7f"
// InfoBox
property real infoBoxTitleFontSize: calcSize(13)
property real infoBoxDescFontSize: calcSize(12)
property color infoRectangleColor: JamiTheme.darkTheme ? "#143842" : "#e5eef5"
// Tipbox
property real tipBoxWidth: 200
@ -593,6 +610,10 @@ Item {
property real textEditError: calcSize(15)
property real maximumCharacters: 50
// PasswordTextEdit
property color passwordEyeIconColor: "#5d5d5d"
property color passwordBaselineColor: darkTheme ? "#6e6e6e" : "#9fbfd9"
// MaterialButton
property real buttontextPadding: 10
property real buttontextWizzardPadding: 30
@ -662,7 +683,7 @@ Item {
// Donation campaign
property color donationButtonTextColor: "#005699"
property color donationBackgroundColor: "#D5E4EF"
property string donationUrl: "https://jami.net/donate/"
property string donationUrl: "https://jami.net/whydonate/"
//Connection monitoring
property color connectionMonitoringTableColor1: darkTheme ? "#4D4D4D" : "#f0efef"

View File

@ -20,7 +20,6 @@
*/
#include "mainapplication.h"
#include "pttlistener.h"
#include "qmlregister.h"
#include "appsettingsmanager.h"
@ -131,15 +130,24 @@ MainApplication::init()
// This 2-phase initialisation prevents ephemeral instances from
// performing unnecessary tasks, like initializing the webengine.
engine_.reset(new QQmlApplicationEngine(this));
connectivityMonitor_.reset(new ConnectivityMonitor(this));
settingsManager_.reset(new AppSettingsManager(this));
systemTray_.reset(new SystemTray(settingsManager_.get(), this));
listener_ = new PTTListener(settingsManager_.get(), this);
QObject::connect(settingsManager_.get(),
connectivityMonitor_ = new ConnectivityMonitor(this);
settingsManager_ = new AppSettingsManager(this);
systemTray_ = new SystemTray(settingsManager_, this);
// These should should be QueuedConnection to ensure that the
// they are executed after the QML engine has been initialized,
// and after the QSystemTrayIcon has been created and shown.
QObject::connect(settingsManager_,
&AppSettingsManager::retranslate,
engine_.get(),
&QQmlApplicationEngine::retranslate);
&QQmlApplicationEngine::retranslate,
Qt::QueuedConnection);
QObject::connect(settingsManager_,
&AppSettingsManager::retranslate,
this,
&MainApplication::initSystray,
Qt::QueuedConnection);
setWindowIcon(QIcon(":/images/jami.ico"));
@ -149,7 +157,7 @@ MainApplication::init()
setApplicationFont();
initLrc(runOptions_[Option::UpdateUrl].toString(),
connectivityMonitor_.get(),
connectivityMonitor_,
runOptions_[Option::Debug].toBool(),
runOptions_[Option::MuteDaemon].toBool());
@ -171,7 +179,7 @@ MainApplication::init()
}
#endif
connect(connectivityMonitor_.get(), &ConnectivityMonitor::connectivityChanged, this, [this] {
connect(connectivityMonitor_, &ConnectivityMonitor::connectivityChanged, this, [this] {
QTimer::singleShot(500, this, [&]() { lrcInstance_->connectivityChanged(); });
});
@ -198,12 +206,6 @@ MainApplication::init()
engine_.get()->rootContext()->setContextProperty("WITH_WEBENGINE", QVariant(false));
#endif
#ifdef APPSTORE
engine_.get()->rootContext()->setContextProperty("APPSTORE", QVariant(true));
#else
engine_.get()->rootContext()->setContextProperty("APPSTORE", QVariant(false));
#endif
initQmlLayer();
settingsManager_->setValue(Settings::Key::StartMinimized,
@ -350,16 +352,15 @@ MainApplication::initQmlLayer()
{
// Expose custom types to the QML engine.
Utils::registerTypes(engine_.get(),
systemTray_.get(),
lrcInstance_.get(),
settingsManager_.get(),
connectivityMonitor_.get(),
systemTray_,
settingsManager_,
connectivityMonitor_,
&screenInfo_,
this);
auto videoProvider = new VideoProvider(lrcInstance_->avModel(), this);
engine_->rootContext()->setContextProperty("videoProvider", videoProvider);
engine_->rootContext()->setContextProperty("pttListener", listener_);
engine_->load(QUrl(QStringLiteral("qrc:/MainApplicationWindow.qml")));
qWarning().noquote() << "Main window loaded using" << getRenderInterfaceString();
@ -370,7 +371,13 @@ MainApplication::initSystray()
{
systemTray_->setIcon(QIcon(":/images/jami.svg"));
QMenu* systrayMenu = new QMenu();
QMenu* menu {nullptr};
// If there was a previous menu, reuse it, otherwise create a new one.
if ((menu = systemTray_->contextMenu())) {
menu->clear();
} else {
menu = new QMenu;
}
QString quitString;
#ifdef Q_OS_WINDOWS
@ -385,7 +392,7 @@ MainApplication::initSystray()
QAction* restoreAction = new QAction(tr("&Show Jami"), this);
connect(restoreAction, &QAction::triggered, this, &MainApplication::restoreApp);
connect(systemTray_.get(),
connect(systemTray_,
&QSystemTrayIcon::activated,
this,
[this](QSystemTrayIcon::ActivationReason reason) {
@ -402,9 +409,10 @@ MainApplication::initSystray()
}
});
systrayMenu->addAction(restoreAction);
systrayMenu->addAction(quitAction);
systemTray_->setContextMenu(systrayMenu);
menu->addAction(restoreAction);
menu->addAction(quitAction);
systemTray_->setContextMenu(menu);
systemTray_->show();
}
@ -424,4 +432,3 @@ MainApplication::setEventFilter()
{
installEventFilter(this);
}

View File

@ -20,10 +20,8 @@
#pragma once
#include "imagedownloader.h"
#include "lrcinstance.h"
#include "qtutils.h"
#include "pttlistener.h"
#include <QFile>
#include <QApplication>
@ -37,7 +35,6 @@
class ConnectivityMonitor;
class AppSettingsManager;
class SystemTray;
class CallAdapter;
// Provides information about the screen the app is displayed on
class ScreenInfo : public QObject
@ -116,15 +113,14 @@ private:
private:
std::map<Option, QVariant> runOptions_;
// We want to be explicit about the destruction order of these objects
QScopedPointer<QQmlApplicationEngine> engine_;
QScopedPointer<LRCInstance> lrcInstance_;
QScopedPointer<ConnectivityMonitor> connectivityMonitor_;
QScopedPointer<AppSettingsManager> settingsManager_;
QScopedPointer<SystemTray> systemTray_;
QScopedPointer<ImageDownloader> imageDownloader_;
PTTListener* listener_;
// These are injected into the QML layer along with our LRCInstance
ConnectivityMonitor* connectivityMonitor_;
SystemTray* systemTray_;
AppSettingsManager* settingsManager_;
ScreenInfo screenInfo_;

View File

@ -32,6 +32,9 @@ ListSelectionView {
splitViewStateKey: "Main"
hasValidSelection: CurrentConversation.id !== ''
visible: false
onPresented: visible = true
Connections {
target: CurrentConversation
function onReloadInteractions() {
@ -75,7 +78,7 @@ ListSelectionView {
anchors.fill: parent
inCallView: parent == callStackView.chatViewContainer
property string currentConvId: CurrentConversation.id
readonly property string currentConvId: CurrentConversation.id
onCurrentConvIdChanged: {
if (!CurrentConversation.hasCall) {
Qt.callLater(focusChatView);
@ -86,7 +89,7 @@ ListSelectionView {
}
onDismiss: {
if (parent == chatViewContainer) {
if (!inCallView) {
viewNode.dismiss();
} else {
callStackView.chatViewContainer.visible = false;
@ -94,13 +97,14 @@ ListSelectionView {
}
}
// Handle visibility change for the in-call chat only.
onVisibleChanged: {
if (!inCallView)
return;
if (visible && !parent.showDetails) {
focusChatView();
} else {
callStackView.contentView.forceActiveFocus();
if (inCallView) {
if (visible) {
focusChatView();
} else {
callStackView.contentView.forceActiveFocus();
}
}
}
}

View File

@ -27,11 +27,19 @@ import "../../commoncomponents"
BaseModalDialog {
id: root
margins: JamiTheme.preferredMarginSize
title: JamiStrings.aboutJami
button1.text: JamiStrings.contribute
button2.text: JamiStrings.feedback
button1.onClicked: { Qt.openUrlExternally("https://jami.net/contribute/")}
button2.onClicked: { Qt.openUrlExternally("mailto:jami@gnu.org")}
popupContent: JamiFlickable {
id: aboutPopUpScrollView
width: aboutPopUpContentRectColumnLayout.implicitWidth
height: JamiTheme.preferredDialogHeight
height: Math.min(root.implicitHeight, aboutPopUpContentRectColumnLayout.implicitHeight)
contentHeight: aboutPopUpContentRectColumnLayout.implicitHeight
@ -39,84 +47,86 @@ BaseModalDialog {
id: aboutPopUpContentRectColumnLayout
anchors.centerIn: parent
ResponsiveImage {
id: aboutPopUPJamiLogoImage
RowLayout{
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
Layout.preferredWidth: JamiTheme.aboutLogoPreferredWidth
Layout.preferredHeight: JamiTheme.aboutLogoPreferredHeight
spacing: 10
source: JamiTheme.darkTheme ? JamiResources.logo_jami_standard_coul_white_svg : JamiResources.logo_jami_standard_coul_svg
}
ResponsiveImage {
id: aboutPopUPJamiLogoImage
TextEdit {
id: jamiSlogansText
Layout.alignment: Qt.AlignCenter
Layout.margins: 10
Layout.preferredWidth: 150
Layout.preferredHeight: 50
Layout.alignment: Qt.AlignCenter
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
Layout.topMargin: 26
wrapMode: Text.WordWrap
font.pixelSize: JamiTheme.bigFontSize
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: textMetricsjamiSlogansText.text
selectByMouse: true
readOnly: true
color: JamiTheme.tintedBlue
TextMetrics {
id: textMetricsjamiSlogansText
font: jamiSlogansText.font
text: JamiStrings.slogan
source: JamiTheme.darkTheme ? JamiResources.logo_jami_standard_coul_white_svg : JamiResources.logo_jami_standard_coul_svg
}
}
TextEdit {
id: jamiVersionText
Rectangle {
color: JamiTheme.backgroundRectangleColor
Layout.fillHeight: true
Layout.fillWidth: true
radius: 5
Layout.alignment: Qt.AlignCenter
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
ColumnLayout {
id: sloganLayout
font.pixelSize: JamiTheme.tinyCreditsTextSize
anchors.verticalCenter: parent.verticalCenter
padding: 0
TextEdit {
id: jamiSlogansText
text: JamiStrings.version + ": " + UtilsAdapter.getVersionStr()
selectByMouse: true
readOnly: true
color: JamiTheme.textColor
Layout.alignment: Qt.AlignLeft
Layout.margins: 10
Layout.bottomMargin: 0
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
wrapMode: Text.WordWrap
font.pixelSize: JamiTheme.menuFontSize
font.bold: true
TextEdit {
id: jamiDeclarationText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
Layout.alignment: Qt.AlignCenter
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
Layout.topMargin: 15
text: textMetricsjamiSlogansText.text
selectByMouse: true
readOnly: true
color: JamiTheme.textColor
wrapMode: Text.WordWrap
font.pixelSize: JamiTheme.creditsTextSize
color: JamiTheme.textColor
TextMetrics {
id: textMetricsjamiSlogansText
font: jamiSlogansText.font
text: JamiStrings.slogan
}
}
TextEdit {
id: jamiVersionText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
Layout.alignment: Qt.AlignLeft
Layout.margins: 10
Layout.topMargin: 0
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
// TextMetrics does not work for multi-line.
text: JamiStrings.declaration
selectByMouse: true
readOnly: true
font.pixelSize: JamiTheme.textFontSize
padding: 0
text: JamiStrings.version + ": " + UtilsAdapter.getVersionStr()
selectByMouse: true
readOnly: true
color: JamiTheme.faddedFontColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
}
TextEdit {
id: jamiDeclarationHyperText
Layout.alignment: Qt.AlignCenter
Layout.alignment: Qt.AlignLeft
Layout.fillWidth: true
// Strangely, hoveredLink works badly when width grows too large
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
@ -124,12 +134,12 @@ BaseModalDialog {
color: JamiTheme.textColor
font.pixelSize: JamiTheme.creditsTextSize
horizontalAlignment: Text.AlignHCenter
font.pixelSize: JamiTheme.menuFontSize
verticalAlignment: Text.AlignVCenter
text: textMetricsjamiDeclarationHyperText.text
textFormat: TextEdit.RichText
wrapMode: TextEdit.WordWrap
selectByMouse: true
readOnly: true
onLinkActivated: Qt.openUrlExternally(link)
@ -137,7 +147,7 @@ BaseModalDialog {
TextMetrics {
id: textMetricsjamiDeclarationHyperText
font: jamiDeclarationHyperText.font
text: '<a href="https://jami.net" style="color: ' + JamiTheme.blueLinkColor + '">jami.net</a>'
text: JamiStrings.declaration
}
MouseArea {
@ -152,13 +162,12 @@ BaseModalDialog {
TextEdit {
id: jamiNoneWarrantyHyperText
Layout.alignment: Qt.AlignCenter
Layout.alignment: Qt.AlignLeft
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
Layout.topMargin: 15
wrapMode: Text.WordWrap
font.pixelSize: JamiTheme.tinyCreditsTextSize
font.pixelSize: JamiTheme.menuFontSize
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignTop
color: JamiTheme.textColor
@ -171,7 +180,7 @@ BaseModalDialog {
TextMetrics {
id: textMetricsjamiNoneWarrantyHyperText
font: jamiDeclarationHyperText.font
text: JamiStrings.declarationYear + " " + '<a href="https://savoirfairelinux.com" style="color: ' + JamiTheme.blueLinkColor + '">Savoir-faire Linux Inc.</a><br>' + 'This program comes with absolutely no warranty. See the <a href="http://www.gnu.org/licenses/gpl-3.0.html" style="color: ' + JamiTheme.blueLinkColor + '">GNU General Public License</a>, version 3 or later for details.'
text: JamiStrings.noWarranty
}
MouseArea {
@ -181,14 +190,56 @@ BaseModalDialog {
}
}
ProjectCreditsScrollView {
id: projectCreditsScrollView
Layout.alignment: Qt.AlignCenter
TextEdit {
id: jamiYears
Layout.alignment: Qt.AlignLeft
Layout.maximumWidth: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
Layout.preferredHeight: 100
Layout.topMargin: 25
Layout.margins: JamiTheme.preferredMarginSize
Layout.topMargin: 15
wrapMode: Text.WordWrap
font.pixelSize: JamiTheme.menuFontSize
verticalAlignment: Text.AlignTop
color: JamiTheme.textColor
text: textMetricsYears.text
textFormat: TextEdit.RichText
selectByMouse: true
readOnly: true
onLinkActivated: Qt.openUrlExternally(link)
TextMetrics {
id: textMetricsYears
font: jamiDeclarationHyperText.font
text: JamiStrings.declarationYear + " " + '<a href="https://savoirfairelinux.com" style="color: ' + JamiTheme.buttonTintedBlue + '">Savoir-faire Linux</a><br>'
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
}
Rectangle {
width: projectCreditsScrollView.width + 20
height: projectCreditsScrollView.height + 20
color: JamiTheme.backgroundRectangleColor
radius: 5
ProjectCreditsScrollView {
id: projectCreditsScrollView
anchors.centerIn: parent
width: JamiTheme.preferredDialogWidth - 2*JamiTheme.preferredMarginSize
height: 140
anchors.margins: 10
}
}
}
}
}

View File

@ -64,99 +64,105 @@ Label {
id: background
anchors.fill: parent
color: root.popup.opened ? Qt.lighter(JamiTheme.hoverColor, 1.0) : mouseArea.containsMouse ? Qt.lighter(JamiTheme.hoverColor, 1.05) : JamiTheme.backgroundColor
color: JamiTheme.backgroundColor
Behavior on color {
ColorAnimation {
duration: JamiTheme.shortFadeDuration
}
}
// TODO: this can be removed when frameless window is implemented
Rectangle {
height: 1
anchors {
top: parent.top
left: parent.left
right: parent.right
}
color: JamiTheme.tabbarBorderColor
}
}
MouseArea {
id: mouseArea
enabled: visible
anchors.fill: parent
hoverEnabled: true
onClicked: {
root.forceActiveFocus();
togglePopup();
}
}
AccountComboBoxPopup {
id: comboBoxPopup
Shortcut {
sequence: "Ctrl+J"
context: Qt.ApplicationShortcut
onActivated: togglePopup()
}
}
RowLayout {
id: mainLayout
anchors.fill: parent
anchors.leftMargin: 15
anchors.rightMargin: 15
spacing: 10
Avatar {
id: avatar
Layout.preferredWidth: JamiTheme.accountListAvatarSize
Layout.preferredHeight: JamiTheme.accountListAvatarSize
Layout.alignment: Qt.AlignVCenter
mode: Avatar.Mode.Account
imageId: CurrentAccount.id
presenceStatus: CurrentAccount.status
}
ColumnLayout {
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 2
color: root.popup.opened ? Qt.lighter(JamiTheme.hoverColor, 1.0) : mouseArea.containsMouse ? Qt.lighter(JamiTheme.hoverColor, 1.0) : JamiTheme.backgroundColor
radius: 5
Layout.topMargin: 5
Text {
id: bestNameText
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: CurrentAccount.bestName
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.textColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
MouseArea {
id: mouseArea
enabled: visible
anchors.fill: parent
hoverEnabled: true
onClicked: {
root.forceActiveFocus();
togglePopup();
}
}
Text {
id: bestIdText
RowLayout {
anchors.fill: parent
anchors.leftMargin: 15
anchors.rightMargin: 15
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
spacing: 10
visible: text.length && text !== bestNameText.text
text: CurrentAccount.bestId
textFormat: TextEdit.PlainText
Avatar {
id: avatar
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.faddedLastInteractionFontColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
Layout.preferredWidth: JamiTheme.accountListAvatarSize
Layout.preferredHeight: JamiTheme.accountListAvatarSize
Layout.alignment: Qt.AlignVCenter
mode: Avatar.Mode.Account
imageId: CurrentAccount.id
presenceStatus: CurrentAccount.status
}
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.topMargin: 15
Layout.bottomMargin: 10
spacing: 5
Text {
id: bestNameText
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: CurrentAccount.bestName
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.textColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
}
Text {
id: bestIdText
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignLeft | Qt.AlignBottom
visible: text.length && text !== bestNameText.text
text: CurrentAccount.bestId
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.tinyFontSize
color: JamiTheme.faddedLastInteractionFontColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignBottom
}
}
}
}
@ -168,19 +174,6 @@ Label {
Layout.preferredWidth: childrenRect.width
Layout.preferredHeight: parent.height
ResponsiveImage {
id: arrowDropDown
anchors.verticalCenter: parent.verticalCenter
width: 24
height: 24
color: JamiTheme.textColor
source: !root.popup.opened ? JamiResources.expand_more_24dp_svg : JamiResources.expand_less_24dp_svg
}
JamiPushButton {
id: shareButton
@ -194,7 +187,7 @@ Label {
source: JamiResources.share_24dp_svg
normalColor: JamiTheme.backgroundColor
imageColor: JamiTheme.textColor
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
onClicked: viewCoordinator.presentDialog(appWindow, "mainview/components/WelcomePageQrDialog.qml")
}
@ -205,8 +198,10 @@ Label {
anchors.verticalCenter: parent.verticalCenter
source: !inSettings ? JamiResources.settings_24dp_svg : JamiResources.round_close_24dp_svg
imageContainerWidth: inSettings ? 30 : 24
normalColor: JamiTheme.backgroundColor
imageColor: JamiTheme.textColor
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
toolTipText: !inSettings ? JamiStrings.openSettings : JamiStrings.closeSettings
onClicked: {

View File

@ -23,16 +23,19 @@ import SortFilterProxyModel 0.2
import net.jami.Models 1.1
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import net.jami.Enums 1.1
import "../../commoncomponents"
Popup {
id: root
y: parent.height
implicitWidth: parent.width
implicitWidth: parent.width - 10
leftMargin: 5
topMargin: 5
// limit the number of accounts shown at once
implicitHeight: {
return visible ? Math.min(JamiTheme.accountListItemHeight * Math.min(5, listView.model.count + 1), appWindow.height - parent.height) : 0;
return visible ? Math.min(JamiTheme.accountListItemHeight * Math.min(6, listView.model.count + 1) + 96, appWindow.height - parent.height) : 0;
}
padding: 0
modal: true
@ -45,6 +48,179 @@ Popup {
contentItem: ColumnLayout {
spacing: 0
anchors.leftMargin: 20
Rectangle {
id: comboBox
height: JamiTheme.accountListItemHeight
Layout.fillWidth: true
radius: 5
color: JamiTheme.accountComboBoxBackgroundColor
property bool inSettings: viewCoordinator.currentViewName === "SettingsView"
// TODO: remove these refresh hacks use QAbstractItemModels correctly
Connections {
target: AccountAdapter
function onAccountStatusChanged(accountId) {
AccountListModel.reset();
}
}
Connections {
target: LRCInstance
function onAccountListChanged() {
AccountListModel.reset();
}
}
RowLayout {
id: mainLayout
anchors.fill: parent
spacing: 10
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.rightMargin: 5
Layout.leftMargin: 5
color: mouseArea.containsMouse ? JamiTheme.hoverColor : JamiTheme.accountComboBoxBackgroundColor
radius: 5
Layout.topMargin: 5
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: root.close()
}
RowLayout {
anchors.fill: parent
anchors.leftMargin: 10
anchors.rightMargin: 15
spacing: 10
Avatar {
id: avatar
Layout.preferredWidth: JamiTheme.accountListAvatarSize
Layout.preferredHeight: JamiTheme.accountListAvatarSize
Layout.alignment: Qt.AlignVCenter
mode: Avatar.Mode.Account
imageId: CurrentAccount.id
presenceStatus: CurrentAccount.status
}
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 2
Text {
id: bestNameText
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
text: CurrentAccount.bestName
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.textColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
}
Text {
id: bestIdText
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
visible: text.length && text !== bestNameText.text
text: CurrentAccount.bestId
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.tinyFontSize
color: JamiTheme.faddedLastInteractionFontColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
}
}
}
}
Row {
id: controlRow
spacing: 10
Layout.preferredWidth: childrenRect.width
Layout.preferredHeight: parent.height
Layout.rightMargin: 7
JamiPushButton {
id: shareButton
width: visible ? preferredSize : 0
height: visible ? preferredSize : 0
anchors.verticalCenter: parent.verticalCenter
visible: LRCInstance.currentAccountType === Profile.Type.JAMI
toolTipText: JamiStrings.displayQRCode
source: JamiResources.share_24dp_svg
normalColor: JamiTheme.accountComboBoxBackgroundColor
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
hoveredColor: JamiTheme.hoverColor
onClicked: {
viewCoordinator.presentDialog(appWindow, "mainview/components/WelcomePageQrDialog.qml");
root.close();
}
}
JamiPushButton {
id: settingsButton
anchors.verticalCenter: parent.verticalCenter
source: !inSettings ? JamiResources.settings_24dp_svg : JamiResources.round_close_24dp_svg
imageContainerWidth: inSettings ? 30 : 24
normalColor: JamiTheme.accountComboBoxBackgroundColor
imageColor: hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
hoveredColor: JamiTheme.hoverColor
toolTipText: !inSettings ? JamiStrings.openSettings : JamiStrings.closeSettings
onClicked: {
!inSettings ? viewCoordinator.present("SettingsView") : viewCoordinator.dismiss("SettingsView");
root.close();
}
KeyNavigation.tab: addAccountItem
}
}
}
}
Rectangle{
Layout.alignment: Qt.AlignHCenter
height: 1
Layout.fillWidth: true
Layout.leftMargin: 15
Layout.rightMargin: 15
color: JamiTheme.smartListHoveredColor
}
JamiListView {
id: listView
@ -60,6 +236,7 @@ Popup {
inverted: true
}
}
delegate: AccountItemDelegate {
height: JamiTheme.accountListItemHeight
width: root.width
@ -70,45 +247,125 @@ Popup {
}
}
Rectangle{
Layout.alignment: Qt.AlignHCenter
height: 1
Layout.fillWidth: true
Layout.leftMargin: 15
Layout.rightMargin: 15
color: JamiTheme.smartListHoveredColor
}
// fake footer item as workaround for Qt 5.15 bug
// https://bugreports.qt.io/browse/QTBUG-85302
// don't use the clip trick and footer item overlay
// explained here https://stackoverflow.com/a/64625149
// as it causes other complexities in handling the drop shadow
ItemDelegate {
id: footerItem
id: addAccountItem
Layout.preferredHeight: JamiTheme.accountListItemHeight
Layout.preferredWidth: parent.width
Layout.preferredHeight: 45
Layout.preferredWidth: parent.width -10
Layout.alignment: Qt.AlignLeft
Layout.leftMargin: 5
Accessible.name: JamiStrings.addAccount
Accessible.role: Accessible.Button
background: Rectangle {
color: footerItem.hovered ? JamiTheme.hoverColor : JamiTheme.backgroundColor
color: addAccountItem.hovered ? JamiTheme.hoverColor : JamiTheme.accountComboBoxBackgroundColor
radius: 5
}
RowLayout{
anchors.left: parent.left
anchors.leftMargin: 18
anchors.verticalCenter: parent.verticalCenter
spacing: 18
ResponsiveImage {
id: addImage
Layout.alignment: Qt.AlignHCenter
source: JamiResources.person_add_24dp_svg
color: addAccountItem.hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
}
Text {
anchors.centerIn: parent
text: JamiStrings.addAccount + "+"
Layout.alignment: Qt.AlignLeft
text: JamiStrings.addAccount
textFormat: TextEdit.PlainText
color: JamiTheme.textColor
font.pointSize: JamiTheme.textFontSize
}
}
onClicked: {
root.close();
viewCoordinator.present("WizardView");
}
KeyNavigation.tab: manageAccountItem
}
ItemDelegate {
id: manageAccountItem
Accessible.role: Accessible.Button
Accessible.name: JamiStrings.manageAccount
Layout.preferredHeight: 45
Layout.preferredWidth: parent.width-10
Layout.leftMargin: 5
Layout.bottomMargin: 5
background: Rectangle {
color: manageAccountItem.hovered ? JamiTheme.hoverColor : JamiTheme.accountComboBoxBackgroundColor
radius: 5
}
RowLayout{
anchors.left: parent.left
anchors.leftMargin: 18
anchors.verticalCenter: parent.verticalCenter
spacing: 18
ResponsiveImage {
id: manageImage
Layout.alignment: Qt.AlignHCenter
source: JamiResources.manage_accounts_24dp_svg
color: manageAccountItem.hovered ? JamiTheme.textColor : JamiTheme.buttonTintedGreyHovered
}
Text {
text: JamiStrings.manageAccount
textFormat: TextEdit.PlainText
color: JamiTheme.textColor
font.pointSize: JamiTheme.textFontSize
}
}
onClicked: {
root.close();
viewCoordinator.present("SettingsView")
}
}
}
background: Rectangle {
color: JamiTheme.backgroundColor
CustomBorder {
commonBorder: false
tBorderwidth: 1
lBorderwidth: 2
bBorderwidth: 2
rBorderwidth: 1
borderColor: JamiTheme.tabbarBorderColor
id: bgRect
color: JamiTheme.accountComboBoxBackgroundColor
radius: 5
layer {
enabled: true
effect: DropShadow {
horizontalOffset: 3.0
verticalOffset: 3.0
radius: bgRect.radius * 4
color: JamiTheme.shadowColor
source: bgRect
transparentBorder: true
samples: radius + 1
}
}
layer {
@ -116,7 +373,7 @@ Popup {
effect: DropShadow {
horizontalOffset: 3.0
verticalOffset: 3.0
radius: 16.0
radius: 6
color: JamiTheme.shadowColor
transparentBorder: true
samples: radius + 1

View File

@ -30,13 +30,28 @@ ItemDelegate {
height: JamiTheme.accountListItemHeight
background: Rectangle {
width: root.width - 10
anchors.horizontalCenter: parent.horizontalCenter
radius: 5
Rectangle{
id: separationLine
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
height: 1
width: parent.width - 20
color: JamiTheme.hoverColor
}
color: {
if (root.pressed)
return JamiTheme.smartListSelectedColor;
else if (root.hovered)
return JamiTheme.smartListHoveredColor;
return JamiTheme.hoverColor;
else
return JamiTheme.backgroundColor;
return JamiTheme.accountComboBoxBackgroundColor;
}
}
@ -84,7 +99,7 @@ ItemDelegate {
text: Username
textFormat: TextEdit.PlainText
font.pointSize: JamiTheme.textFontSize
font.pointSize: JamiTheme.tinyFontSize
color: JamiTheme.faddedLastInteractionFontColor
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft

View File

@ -123,13 +123,13 @@ Control {
"Name": JamiStrings.shareScreen,
"IconSource": JamiResources.laptop_black_24dp_svg
});
if (Qt.platform.os.toString() !== "osx") {
if (Qt.platform.os.toString() !== "osx" && !UtilsAdapter.isWayland()) {
shareModel.append({
"Name": JamiStrings.shareWindow,
"IconSource": JamiResources.window_black_24dp_svg
});
}
if (Qt.platform.os.toString() !== "windows") {
if (Qt.platform.os.toString() !== "windows" && !UtilsAdapter.isWayland()) {
// temporarily disable for windows
shareModel.append({
"Name": JamiStrings.shareScreenArea,
@ -456,11 +456,9 @@ Control {
CallOverlayModel.addSecondaryControl(audioOutputAction, audioOutputAction.enabled);
CallOverlayModel.addSecondaryControl(raiseHandAction, raiseHandAction.enabled);
CallOverlayModel.addSecondaryControl(addPersonAction, addPersonAction.enabled);
CallOverlayModel.addSecondaryControl(resumePauseCallAction, resumePauseCallAction.enabled);
CallOverlayModel.addSecondaryControl(inputPanelSIPAction, inputPanelSIPAction.enabled);
CallOverlayModel.addSecondaryControl(callTransferAction, callTransferAction.enabled);
CallOverlayModel.addSecondaryControl(chatAction, chatAction.enabled);
CallOverlayModel.addSecondaryControl(shareAction, shareAction.enabled);
CallOverlayModel.addSecondaryControl(layoutAction, layoutAction.enabled);
@ -486,7 +484,7 @@ Control {
orientation: ListView.Horizontal
implicitWidth: contentWidth
implicitHeight: contentHeight
height: root.height
interactive: false
model: SortFilterProxyModel {
@ -508,6 +506,9 @@ Control {
width: childrenRect.width
height: root.height
//put in top
z: 1
RowLayout {
spacing: itemSpacing
@ -579,7 +580,7 @@ Control {
}
}
Behavior on color {
Behavior on color {
ColorAnimation {
duration: JamiTheme.shortFadeDuration
}

View File

@ -24,17 +24,15 @@ import net.jami.Constants 1.1
import Qt5Compat.GraphicalEffects
import "../../commoncomponents"
Popup {
BaseModalDialog {
id: root
property real maxHeight: parent.height * 40 / 100
property real maxTextWidth: parent.width * 30 / 100
property real maxTextWidth: parent.width * 20 / 100
property var advancedList
property var fps
width: container.width
height: container.height
maximumPopupWidth: popupContent.width + 2 * popupMargins
closePolicy: Popup.NoAutoClosed
onClosed: {
@ -48,203 +46,180 @@ Popup {
AvAdapter.setRendererInfo();
}
background: Rectangle {
color: JamiTheme.transparentColor
}
backgroundColor: JamiTheme.darkGreyColor
backgroundOpacity: 0.77
Rectangle {
id: container
popupContent: RowLayout {
id: windowContent
spacing: JamiTheme.callInformationBlockSpacing
color: JamiTheme.blackColor
opacity: 0.85
radius: 10
width: windowContent.width
height: windowContent.height
ColumnLayout {
spacing: JamiTheme.callInformationBlockSpacing
Layout.preferredWidth: callInfoListview.width
Layout.alignment: Qt.AlignTop
PushButton {
id: closeButton
anchors.top: container.top
anchors.topMargin: 5
anchors.right: container.right
anchors.rightMargin: 5
normalColor: JamiTheme.transparentColor
imageColor: JamiTheme.callInfoColor
source: JamiResources.round_close_24dp_svg
circled: false
toolTipText: JamiStrings.close
onClicked: {
root.close();
Text {
id: textTest
color: JamiTheme.callInfoColor
text: JamiStrings.callInformation
font.pointSize: JamiTheme.menuFontSize
font.bold: true
Layout.maximumWidth: root.maxTextWidth
elide: Text.ElideRight
}
}
RowLayout {
id: windowContent
ListView {
id: callInfoListview
ColumnLayout {
spacing: JamiTheme.callInformationBlockSpacing
Layout.margins: JamiTheme.callInformationlayoutMargins
Layout.preferredWidth: callInfoListview.width
Layout.alignment: Qt.AlignTop
model: advancedList
Layout.preferredWidth: root.maxTextWidth
Layout.preferredHeight: contentItem.childrenRect.height < root.maxHeight ? contentItem.childrenRect.height : root.maxHeight
clip: true
Text {
id: textTest
color: JamiTheme.callInfoColor
text: JamiStrings.callInformation
font.pointSize: JamiTheme.titleFontPointSize
}
delegate: Column {
ListView {
id: callInfoListview
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.callId + ": " + CALL_ID
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
model: advancedList
Layout.preferredWidth: root.maxTextWidth
Layout.preferredHeight: contentItem.childrenRect.height < root.maxHeight ? contentItem.childrenRect.height : root.maxHeight
spacing: JamiTheme.callInformationBlockSpacing
clip: true
delegate: Column {
spacing: JamiTheme.callInformationElementsSpacing
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.callId + ": " + CALL_ID
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
Text {
function stringWithoutRing(peerNumber) {
return peerNumber.replace("@ring.dht", "");
}
color: JamiTheme.callInfoColor
text: JamiStrings.peerNumber + ": " + stringWithoutRing(PEER_NUMBER)
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Column {
id: socketLayout
Text {
function stringWithoutRing(peerNumber) {
return peerNumber.replace("@ring.dht", "");
}
color: JamiTheme.callInfoColor
text: JamiStrings.peerNumber + ": " + stringWithoutRing(PEER_NUMBER)
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Column {
id: socketLayout
property bool showAll: false
width: callInfoListview.width
bottomPadding: JamiTheme.callInformationBlockSpacing
topPadding: JamiTheme.callInformationBlockSpacing
property bool showAll: false
width: callInfoListview.width
RowLayout {
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.sockets
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: socketLayout.width
}
PushButton {
source: socketLayout.showAll ? JamiResources.expand_less_24dp_svg : JamiResources.expand_more_24dp_svg
normalColor: JamiTheme.transparentColor
Layout.preferredWidth: 20
Layout.preferredHeight: 20
imageColor: JamiTheme.callInfoColor
onClicked: {
socketLayout.showAll = !socketLayout.showAll;
}
}
}
RowLayout {
Text {
color: JamiTheme.callInfoColor
text: SOCKETS
text: JamiStrings.sockets
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
visible: socketLayout.showAll
width: socketLayout.width
}
JamiPushButton {
source: socketLayout.showAll ? JamiResources.expand_less_24dp_svg : JamiResources.expand_more_24dp_svg
normalColor: JamiTheme.transparentColor
Layout.preferredWidth: 20
Layout.preferredHeight: 20
imageColor: JamiTheme.callInfoColor
onClicked: {
socketLayout.showAll = !socketLayout.showAll;
}
}
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.videoCodec + ": " + VIDEO_CODEC
text: SOCKETS
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
visible: socketLayout.showAll
width: socketLayout.width
}
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.audioCodec + ": " + AUDIO_CODEC + " " + AUDIO_SAMPLE_RATE + " Hz"
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.videoCodec + ": " + VIDEO_CODEC
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.hardwareAcceleration + ": " + HARDWARE_ACCELERATION
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.audioCodec + ": " + AUDIO_CODEC + " " + AUDIO_SAMPLE_RATE + " Hz"
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.videoBitrate + ": " + VIDEO_BITRATE + " bps"
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.hardwareAcceleration + ": " + HARDWARE_ACCELERATION
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.videoBitrate + ": " + VIDEO_BITRATE + " bps"
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: callInfoListview.width
}
}
}
}
ColumnLayout {
ColumnLayout {
spacing: JamiTheme.callInformationBlockSpacing
Layout.preferredWidth: renderersInfoListview.width
Layout.alignment: Qt.AlignTop
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.renderersInformation
font.pointSize: JamiTheme.menuFontSize
font.bold: true
elide: Text.ElideRight
Layout.maximumWidth: root.maxTextWidth
}
ListView {
id: renderersInfoListview
Layout.preferredWidth: root.maxTextWidth
Layout.preferredHeight: contentItem.childrenRect.height < root.maxHeight ? contentItem.childrenRect.height : root.maxHeight
spacing: JamiTheme.callInformationBlockSpacing
Layout.margins: JamiTheme.callInformationlayoutMargins
Layout.preferredWidth: renderersInfoListview.width
Layout.alignment: Qt.AlignTop
model: fps
clip: true
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.renderersInformation
font.pointSize: JamiTheme.titleFontPointSize
}
delegate: Column {
spacing: JamiTheme.callInformationElementsSpacing
ListView {
id: renderersInfoListview
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.rendererId + ": " + RENDERER_ID
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
Layout.preferredWidth: root.maxTextWidth
Layout.preferredHeight: contentItem.childrenRect.height < root.maxHeight ? contentItem.childrenRect.height : root.maxHeight
spacing: JamiTheme.callInformationBlockSpacing
model: fps
clip: true
Text {
id: testText
color: JamiTheme.callInfoColor
text: JamiStrings.fps_short + ": " + FPS
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
delegate: Column {
spacing: JamiTheme.callInformationElementsSpacing
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.rendererId + ": " + RENDERER_ID
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
Text {
id: testText
color: JamiTheme.callInfoColor
text: JamiStrings.fps_short + ": " + FPS
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.resolution + ": " + RES
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
Text {
color: JamiTheme.callInfoColor
text: JamiStrings.resolution + ": " + RES
font.pointSize: JamiTheme.textFontPointSize
wrapMode: Text.WrapAnywhere
width: renderersInfoListview.width
}
}
}

View File

@ -21,6 +21,7 @@ import net.jami.Models 1.1
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import net.jami.Enums 1.1
import "../../commoncomponents"
import "../js/pluginhandlerpickercreation.js" as PluginHandlerPickerCreation
@ -28,7 +29,7 @@ Rectangle {
id: root
// An enum to make the details panels more readable.
enum Panel {
enum ExtrasPanel {
SwarmDetailsPanel,
MessagesResearchPanel,
AddMemberPanel
@ -40,6 +41,18 @@ Rectangle {
required property bool inCallView
// Hide the extrasPanel when going into a call view, but save the previous
// state to restore it when leaving the call view.
property int chatExtrasPanelIndex: extrasPanel.currentIndex
onInCallViewChanged: {
if (inCallView) {
chatExtrasPanelIndex = extrasPanel.currentIndex;
extrasPanel.closePanel();
} else if (chatExtrasPanelIndex >= 0) {
extrasPanel.openPanel(chatExtrasPanelIndex);
}
}
signal dismiss
function focusChatView() {
@ -61,6 +74,16 @@ Rectangle {
}
}
// Used externally to switch to a extras panel.
function switchToPanel(panel, toggle = true) {
extrasPanel.switchToPanel(panel, toggle);
}
// Used externally to close the extras panel.
function closePanel() {
extrasPanel.closePanel();
}
Connections {
target: PositionManager
function onOpenNewMap() {
@ -71,23 +94,13 @@ Rectangle {
Connections {
target: CurrentConversation
function onIdChanged() {
extrasPanel.restoreState();
MessagesAdapter.loadMoreMessages();
}
}
Component.onCompleted: extrasPanel.restoreState()
onVisibleChanged: {
if (visible) {
chatViewSplitView.resolvePanes(true);
if (root.parent.objectName === "CallViewChatViewContainer") {
if (root.parent.showDetails) {
extrasPanel.switchToPanel(ChatView.SwarmDetailsPanel);
} else {
extrasPanel.closePanel();
}
}
}
}
@ -99,9 +112,6 @@ Rectangle {
ChatViewHeader {
id: chatViewHeader
addParticipantOpened: extrasPanel.currentIndex === ChatView.AddMemberPanel
swarmDetailsOpened: extrasPanel.currentIndex === ChatView.SwarmDetailsPanel
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
Layout.preferredHeight: JamiTheme.chatViewHeaderPreferredHeight
@ -114,9 +124,6 @@ Rectangle {
}
onBackClicked: root.dismiss()
onShowDetailsClicked: extrasPanel.switchToPanel(ChatView.SwarmDetailsPanel)
onSearchClicked: extrasPanel.switchToPanel(ChatView.MessagesResearchPanel)
onAddToConversationClicked: extrasPanel.switchToPanel(ChatView.AddMemberPanel)
Connections {
target: CurrentConversation
@ -190,47 +197,69 @@ Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
splitViewStateKey: "Chat"
property real previousDetailsWidth: extrasPanel.width
property real previousWidth: width
onWidthChanged: resolvePanes()
// This function governs the visibility of the chatContents and tracks the
// the width of the SplitView and the details panel. This function should be
// called when the width of the SplitView changes, when the SplitView is shown,
// and when the details panel is shown. When called with force=true, it is being
// called from a visibleChanged event, and we should not update the previous widths.
onWidthChanged: {
resolvePanes();
// Track the previous width of the split view.
previousWidth = width;
}
// Track the previous width of the split view.
property real extrasPanelWidth: extrasPanel.width
// The previousExtrasPanelWidth is initialized to the minimum width
// of the extras panel. The value is updated within the "open"-state
// range of the panel (e.g. not 0 or maximized).
property real previousExtrasPanelWidth: JamiTheme.extrasPanelMinWidth
onExtrasPanelWidthChanged: {
resolvePanes();
// This range should ensure that the panel won't restore to maximized.
if (extrasPanelWidth != 0 && extrasPanelWidth != width) {
console.debug("Saving previous extras panel width: %1".arg(extrasPanelWidth));
previousExtrasPanelWidth = extrasPanelWidth;
}
}
// Respond to visibility changes for the extras panel in order to
// determine the structure of the split view.
property bool extrasPanelVisible: extrasPanel.visible
onExtrasPanelVisibleChanged: {
if (extrasPanelVisible) {
extrasPanelWidth = previousExtrasPanelWidth;
} else {
previousExtrasPanelWidth = extrasPanelWidth;
}
resolvePanes();
}
function resolvePanes(force = false) {
if (!viewNode.visible) {
return;
}
// If the details panel is not visible, then show the chatContents.
if (!extrasPanel.visible) {
chatContents.visible = true;
return;
}
// Next we compute whether the SplitView is expanding or shrinking.
const isExpanding = width > previousWidth;
// Provide a detailed log here, as this function seems problematic.
console.debug("ChatViewSplitView.resolvePanes: f: %1 w: %2 pw: %3 epw: %4 pepw: %5 ie: %6"
.arg(force).arg(width).arg(previousWidth)
.arg(extrasPanelWidth).arg(previousExtrasPanelWidth).arg(isExpanding));
const maximizePredicate = (!isExpanding || force) && chatContents.visible;
const minimizePredicate = (isExpanding || force) && !chatContents.visible;
const mainViewMinWidth = JamiTheme.mainViewPaneMinWidth;
// If the SplitView is not wide enough to show both the chatContents
// and the details panel, then hide the chatContents.
if (width < JamiTheme.mainViewPaneMinWidth + extrasPanel.width && (!isExpanding || force) && chatContents.visible) {
if (!force)
previousDetailsWidth = extrasPanel.width;
if (maximizePredicate && width < mainViewMinWidth + extrasPanelWidth) {
chatContents.visible = false;
} else if (width >= JamiTheme.mainViewPaneMinWidth + previousDetailsWidth && (isExpanding || force) && !chatContents.visible) {
} else if (minimizePredicate && width >= mainViewMinWidth + previousExtrasPanelWidth) {
chatContents.visible = true;
}
if (!force)
previousWidth = width;
}
Connections {
target: viewNode
function onPresented() {
chatViewSplitView.restoreSplitViewState();
}
function onDismissed() {
chatViewSplitView.saveSplitViewState();
}
}
ColumnLayout {
@ -315,19 +344,12 @@ Rectangle {
}
}
onResizingChanged: if (chatContents.visible)
extrasPanel.previousWidth = extrasPanel.width
ConversationExtrasPanel {
id: extrasPanel
property int previousWidth: JamiTheme.extrasPanelMinWidth
SplitView.maximumWidth: root.width
SplitView.minimumWidth: JamiTheme.extrasPanelMinWidth
SplitView.preferredWidth: JamiTheme.extrasPanelMinWidth
onVisibleChanged: chatViewSplitView.resolvePanes(true)
}
}
}

View File

@ -23,16 +23,14 @@ import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import net.jami.Enums 1.1
import net.jami.Models 1.1
import "../../commoncomponents"
Rectangle {
id: root
signal backClicked
signal addToConversationClicked
signal pluginSelector
signal showDetailsClicked
signal searchClicked
Connections {
target: CurrentConversation
@ -44,7 +42,7 @@ Rectangle {
description.eText = CurrentConversation.description;
}
function onShowSwarmDetails() {
root.showDetailsClicked();
extrasPanel.switchToPanel(ChatView.SwarmDetailsPanel);
}
}
@ -60,11 +58,10 @@ Rectangle {
return true;
}
property bool addParticipantOpened: false
property bool swarmDetailsOpened: false
property bool addMemberVisibility: {
return swarmDetailsVisibility && !CurrentConversation.isCoreDialog && !CurrentConversation.isRequest;
return swarmDetailsVisibility
&& !CurrentConversation.isCoreDialog
&& !CurrentConversation.isRequest;
}
property bool swarmDetailsVisibility: {
@ -171,9 +168,7 @@ Rectangle {
MessagesAdapter.searchbarPrompt = text;
}
onSearchClicked: {
root.searchClicked();
}
onSearchClicked: extrasPanel.switchToPanel(ChatView.MessagesResearchPanel)
Shortcut {
sequence: "Ctrl+Shift+F"
@ -209,12 +204,12 @@ Rectangle {
id: addParticipantsButton
checkable: true
checked: root.addParticipantOpened
checked: extrasPanel.isOpen(ChatView.AddMemberPanel)
visible: interactionButtonsVisibility && addMemberVisibility
source: JamiResources.add_people_24dp_svg
toolTipText: JamiStrings.addParticipants
onClicked: addToConversationClicked()
onClicked: extrasPanel.switchToPanel(ChatView.AddMemberPanel)
}
JamiPushButton {
@ -241,12 +236,12 @@ Rectangle {
id: detailsButton
checkable: true
checked: root.swarmDetailsOpened
checked: extrasPanel.isOpen(ChatView.SwarmDetailsPanel)
visible: interactionButtonsVisibility && (swarmDetailsVisibility || LRCInstance.currentAccountType === Profile.Type.SIP) // TODO if SIP not a request
source: JamiResources.swarm_details_panel_svg
toolTipText: JamiStrings.details
onClicked: showDetailsClicked()
onClicked: extrasPanel.switchToPanel(ChatView.SwarmDetailsPanel)
}
}

View File

@ -1,88 +1,90 @@
/*
* Copyright (C) 2023 Savoir-faire Linux Inc.
*
* 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/>.
*/
import QtQuick
import QtQuick.Layouts
import net.jami.Adapters 1.1
StackLayout {
id: root
property int detailsIndex: -1
function isOpen(panel) {
return visible && currentIndex === panel;
}
visible: currentIndex > -1
property bool detailsShouldOpen: false
onVisibleChanged: if (visible)
detailsShouldOpen = true
function restoreState() {
// Only applies to Jami accounts, and we musn't be in a call.
if (detailsShouldOpen && !inCallView && !CurrentConversation.needsSyncing && !CurrentConversation.isRequest) {
switchToPanel(ChatView.SwarmDetailsPanel, false);
} else {
closePanel();
}
}
Connections {
target: CurrentConversationMembers
function onCountChanged() {
// Close the panel if there are 8 or more members in the
// conversation AND the "Add Member" panel is currently open.
if (CurrentConversationMembers.count >= 8 && isOpen(ChatView.AddMemberPanel)) {
closePanel();
}
}
}
// This will open the details panel if it's not already visible.
// Additionally, `toggle` being true (default) will close the panel
// if it is already open to `panel`.
function switchToPanel(panel, toggle = true) {
if (visible && toggle && currentIndex === panel) {
closePanel();
} else {
currentIndex = panel;
}
}
function closePanel() {
// We need to close the panel, but not save it when appropriate.
currentIndex = -1;
if (!inCallView)
detailsShouldOpen = false;
}
SwarmDetailsPanel {
id: detailsPanel
property int parentIndex: root.currentIndex
// When we change to the details panel we should load the tab index.
onParentIndexChanged: tabBarIndex = Math.min(tabBarItemsLength - 1, Math.max(0, root.detailsIndex))
// Save it when it changes.
onTabBarIndexChanged: root.detailsIndex = tabBarIndex
}
MessagesResearchPanel {
}
AddMemberPanel {
}
}
/*
* Copyright (C) 2023 Savoir-faire Linux Inc.
*
* 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/>.
*/
import QtQuick
import QtQuick.Layouts
import net.jami.Adapters 1.1
StackLayout {
id: root
// We need to set the currentIndex to -1 to make sure the
// panel is closed when the application starts.
Component.onCompleted: closePanel()
// The index of the tab in the swarm details panel.
property int detailsIndex: -1
// Best to avoid using the visible property directly.
// Pass through the following open/close wrappers instead.
function openPanel(panel) {
currentIndex = panel;
visible = true;
}
function closePanel() {
currentIndex = -1;
visible = false;
}
function isOpen(panel) {
return visible && currentIndex === panel;
}
// This will open the details panel if it's not already visible.
// Additionally, `toggle` being true (default) will close the panel
// if it is already open to `panel`.
function switchToPanel(panel, toggle = true) {
console.debug("switchToPanel: %1, toggle: %2".arg(panel).arg(toggle));
if (visible) {
// We need to close the panel if it's open and we're switching to
// the same panel.
if (toggle && currentIndex === panel) {
// Toggle off.
closePanel();
} else {
// Switch to the new panel.
openPanel(panel);
}
} else {
openPanel(panel);
}
}
Connections {
target: CurrentConversationMembers
function onCountChanged() {
// Close the panel if there are 8 or more members in the
// conversation AND the "Add Member" panel is currently open.
if (CurrentConversationMembers.count >= 8 && isOpen(ChatView.AddMemberPanel)) {
closePanel();
}
}
}
SwarmDetailsPanel {
id: detailsPanel
property int parentIndex: root.currentIndex
// When we change to the details panel we should load the tab index.
onParentIndexChanged: tabBarIndex = Math.min(tabBarItemsLength - 1, Math.max(0, root.detailsIndex))
// Save it when it changes.
onTabBarIndexChanged: root.detailsIndex = tabBarIndex
}
MessagesResearchPanel {}
AddMemberPanel {}
}

View File

@ -29,25 +29,45 @@ BaseModalDialog {
width: JamiTheme.secondaryDialogDimension
property string currentDeviceId
title: JamiStrings.defaultCallHost
button1.text: JamiStrings.selectDevice
button1Role: DialogButtonBox.AcceptRole
button1.toolTipText: JamiStrings.selectThisDevice
button1.enabled: false
button1.onClicked : {
CurrentConversation.setInfo("rdvAccount", CurrentAccount.uri);
CurrentConversation.setInfo("rdvDevice", currentDeviceId);
root.close();
}
button2.text: JamiStrings.removeDevice
button2Role: DialogButtonBox.ResetRole
button2.toolTipText: JamiStrings.removeCurrentDevice
button2.enabled: CurrentConversation.rdvAccount !== ""
button2.onClicked: {
CurrentConversation.setInfo("rdvAccount", "");
CurrentConversation.setInfo("rdvDevice", "");
close();
}
popupContent: ColumnLayout {
id: mainLayout
anchors.centerIn: parent
anchors.margins: JamiTheme.preferredMarginSize
spacing: JamiTheme.preferredMarginSize
spacing: 10
width: JamiTheme.preferredDialogWidth
Label {
id: informativeLabel
Layout.alignment: Qt.AlignCenter
Layout.topMargin: JamiTheme.preferredMarginSize
Layout.preferredWidth: root.width - 4*JamiTheme.preferredMarginSize
Layout.fillWidth: true
wrapMode: Text.Wrap
text: JamiStrings.chooseHoster
text: JamiStrings.selectHost
color: JamiTheme.primaryForegroundColor
}
@ -79,15 +99,27 @@ BaseModalDialog {
property bool isCurrent: DeviceName
implicitWidth: devicesListView.width
width: root.width - 4*JamiTheme.preferredMarginSize
height: 70
highlighted: ListView.isCurrentItem
highlighted: CurrentConversation.rdvDevice === deviceId
MouseArea {
anchors.fill: parent
onClicked: {
devicesListView.currentIndex = index;
if (!highlighted){
devicesListView.currentIndex = index;
for (var i = 0; i < devicesListView.count; i++) {
devicesListView.itemAtIndex(i).highlighted = false;
}
currentDeviceId = deviceId;
button1.enabled = true;
}
else {
devicesListView.currentIndex = -1;
button1.enabled = false;
}
item.highlighted = !item.highlighted;
}
}
@ -154,65 +186,6 @@ BaseModalDialog {
}
}
}
ColumnLayout {
id: buttonLayout
spacing: JamiTheme.preferredMarginSize
Layout.preferredWidth: root.width - 240
MaterialButton {
id: chooseBtn
TextMetrics {
id: chooseBtnTextSize
font.weight: Font.Bold
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
font.capitalization: Font.AllUppercase
text: chooseBtn.text
}
Layout.alignment: Qt.AlignCenter
Layout.fillWidth: true
primary: true
enabled: devicesListView.currentItem
text: JamiStrings.chooseThisDevice
toolTipText: JamiStrings.chooseThisDevice
onClicked: {
CurrentConversation.setInfo("rdvAccount", CurrentAccount.uri);
CurrentConversation.setInfo("rdvDevice", devicesListView.currentItem.deviceId);
close();
}
}
MaterialButton {
id: rmDeviceBtn
TextMetrics {
id: rmDeviceBtnTextSize
font.weight: Font.Bold
font.pixelSize: JamiTheme.wizardViewButtonFontPixelSize
font.capitalization: Font.AllUppercase
text: rmDeviceBtn.text
}
Layout.alignment: Qt.AlignCenter
Layout.fillWidth: true
primary: true
enabled: devicesListView.currentItem
text: JamiStrings.removeCurrentDevice
toolTipText: JamiStrings.removeCurrentDevice
onClicked: {
CurrentConversation.setInfo("rdvAccount", "");
CurrentConversation.setInfo("rdvDevice", "");
close();
}
}
}
}
}
}

View File

@ -45,7 +45,7 @@ Item {
ctxMenu.y = mouse.y;
ctxMenu.openMenu();
} else {
MessagesAdapter.openUrl("file://" + Body);
MessagesAdapter.openUrl(icon.fileSource);
}
}
}

View File

@ -50,8 +50,8 @@ Rectangle {
Layout.row: 0
Layout.column: 0
Layout.rowSpan: 2
Layout.preferredHeight: 70
Layout.preferredWidth: 45
Layout.preferredHeight: 53
Layout.preferredWidth: 43
Layout.leftMargin: 10
Layout.topMargin: 10
Layout.bottomMargin: 15
@ -61,10 +61,16 @@ Rectangle {
Image {
id: donationImage
height: parent.height
width: 50
width: parent.width
anchors.centerIn: parent
source: JamiResources.icon_donate_svg
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.openUrlExternally(JamiTheme.donationUrl);
}
}
}
Rectangle {
@ -90,6 +96,12 @@ Rectangle {
font.pointSize: JamiTheme.textFontSize
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.openUrlExternally(JamiTheme.donationUrl);
}
}
}
Rectangle {
@ -102,22 +114,35 @@ Rectangle {
color: JamiTheme.transparentColor
Text {
id: notNowText
PushButton {
//Scaffold{}
id: notNowButton
anchors.top: parent.top
anchors.left: parent.left
height: 15
width: 75
preferredLeftMargin: 0
preferredRightMargin: 0
buttonText: JamiStrings.notNow
buttonTextColor: JamiTheme.donationButtonTextColor
buttonTextFontSize: JamiTheme.textFontSize + 4
normalColor: "transparent"
hoveredColor: "transparent"
pressedColor: "transparent"
onClicked: {
// When the user clicks on "Not now", we set the donation date to 7 days from now (1 for the test)
UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 16).replace("T", " "));
donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible());
}
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: {
// When the user clicks on "Not now", we set the donation date to 7 days from now (1 for the test)
UtilsAdapter.setAppValue(Settings.Key.DonationVisibleDate, new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 16).replace("T", " "));
UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 16).replace("T", " "));
donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible());
}
}
text: JamiStrings.notNow
color: JamiTheme.donationButtonTextColor
anchors.top: parent.top
anchors.left: parent.left
font.pointSize: JamiTheme.textFontSize
}
}
@ -129,8 +154,24 @@ Rectangle {
Layout.preferredWidth: (parent.width - 50) / 2
color: JamiTheme.transparentColor
Text {
id: donateText
PushButton {
//Scaffold{}
id: donateButton
anchors.top: parent.top
anchors.left: parent.left
height: 15
width: 75
preferredLeftMargin: 0
preferredRightMargin: 0
buttonText: JamiStrings.donation
buttonTextColor: JamiTheme.donationButtonTextColor
buttonTextFontSize: JamiTheme.textFontSize + 4
normalColor: "transparent"
hoveredColor: "transparent"
pressedColor: "transparent"
onClicked: {
Qt.openUrlExternally(JamiTheme.donationUrl);
}
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
@ -138,11 +179,6 @@ Rectangle {
Qt.openUrlExternally(JamiTheme.donationUrl);
}
}
text: JamiStrings.donation
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.donationButtonTextColor
anchors.top: parent.top
anchors.left: parent.left
}
}
}

View File

@ -31,55 +31,39 @@ BaseModalDialog {
return role === Member.Role.ADMIN;
}
button1.text: isAdmin ? JamiStrings.becomeHostOneCall : JamiStrings.hostThisCall
button1Role: DialogButtonBox.ApplyRole
button1.onClicked: {
MessagesAdapter.joinCall(CurrentAccount.uri, CurrentAccount.deviceId, "0");
close();
}
button2.text: JamiStrings.becomeDefaultHost
button2Role: DialogButtonBox.ApplyRole
button2.visible: isAdmin
button2.toolTipText: JamiStrings.becomeDefaultHost
button2.onClicked: {
CurrentConversation.setInfo("rdvAccount", CurrentAccount.uri);
CurrentConversation.setInfo("rdvDevice", CurrentAccount.deviceId);
MessagesAdapter.joinCall(CurrentAccount.uri, CurrentAccount.deviceId, "0");
close();
}
popupContent: ColumnLayout {
id: mainLayout
spacing: JamiTheme.preferredMarginSize
id: mainLayout
Label {
id: informativeLabel
Label {
id: informativeLabel
Layout.alignment: Qt.AlignCenter
Layout.fillWidth: true
Layout.maximumWidth: root.parent.width - 4*JamiTheme.preferredMarginSize
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: JamiStrings.needsHost
color: JamiTheme.primaryForegroundColor
}
MaterialButton {
id: becomeHostBtn
Layout.alignment: Qt.AlignCenter
Layout.margins: JamiTheme.preferredMarginSize
text: isAdmin ? JamiStrings.becomeHostOneCall : JamiStrings.hostThisCall
onClicked: {
MessagesAdapter.joinCall(CurrentAccount.uri, CurrentAccount.deviceId, "0");
close();
}
}
MaterialButton {
id: becomeDefaultHostBtn
Layout.alignment: Qt.AlignCenter
Layout.margins: JamiTheme.preferredMarginSize
text: JamiStrings.becomeDefaultHost
toolTipText: JamiStrings.becomeDefaultHost
visible: isAdmin
onClicked: {
CurrentConversation.setInfo("rdvAccount", CurrentAccount.uri);
CurrentConversation.setInfo("rdvDevice", devicesListView.currentItem.deviceId);
MessagesAdapter.joinCall(CurrentAccount.uri, CurrentAccount.deviceId, "0");
close();
}
}
Layout.alignment: Qt.AlignCenter
Layout.bottomMargin: 10
Layout.fillWidth: true
Layout.maximumWidth: root.parent.width - 4*JamiTheme.preferredMarginSize
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: JamiStrings.needsHost
color: JamiTheme.primaryForegroundColor
}
}
//}
}

View File

@ -51,7 +51,12 @@ RowLayout {
signal showMapClicked
signal emojiButtonClicked
height: showTypo || multiLine ? messageBarTextArea.height + 25 + 3 * marginSize + 1 : textAreaObj.height + marginSize + 1
height: {
if (showTypo || multiLine)
return messageBarTextArea.height + 25 + 3 * marginSize + 1
else
return textAreaObj.height + marginSize + 1
}
Rectangle {
@ -67,11 +72,16 @@ RowLayout {
anchors.bottom: parent.bottom
anchors.bottomMargin: marginSize / 2
// Used to choose the correct color for the button.
readonly property bool highlight: down || hovered
background: Rectangle {
implicitWidth: showMoreButton.width
implicitHeight: showMoreButton.height
radius: 5
color: JamiTheme.transparentColor
color: showMoreButton.highlight ?
JamiTheme.hoveredButtonColor :
JamiTheme.transparentColor
}
MaterialToolTip {
@ -80,7 +90,7 @@ RowLayout {
parent: showMoreButton
visible: showMoreButton.hovered && (text.length > 0)
delay: Qt.styleHints.mousePressAndHoldInterval
text: JamiStrings.showMore
text: showMoreButton.down ? JamiStrings.showLess : JamiStrings.showMore
}
indicator: ResponsiveImage {
@ -93,28 +103,29 @@ RowLayout {
source: JamiResources.more_menu_black_24dp_svg
color: JamiTheme.chatViewFooterImgColor
color: showMoreButton.highlight ?
JamiTheme.chatViewFooterImgHoverColor :
JamiTheme.chatViewFooterImgColor;
}
onHoveredChanged: {
if (!sharePopup.opened) {
showMoreButton.indicator.color = hovered ? JamiTheme.chatViewFooterImgHoverColor : JamiTheme.chatViewFooterImgColor;
showMoreButton.background.color = hovered ? JamiTheme.hoveredButtonColor : JamiTheme.transparentColor;
Component {
id: sharePopupComp
ShareMenu {
id: sharePopup
onAudioRecordMessageButtonClicked: root.audioRecordMessageButtonClicked()
onVideoRecordMessageButtonClicked: root.videoRecordMessageButtonClicked()
onShowMapClicked: root.showMapClicked()
modelList: listViewMoreButton.menuMoreButton
y: showMoreButton.y + 31
x: showMoreButton.x - 3
}
toolTipMoreButton.text = sharePopup.opened ? JamiStrings.showLess : JamiStrings.showMore;
}
popup: ShareMenu {
id: sharePopup
onAudioRecordMessageButtonClicked: {
root.audioRecordMessageButtonClicked();
}
onVideoRecordMessageButtonClicked: {
root.videoRecordMessageButtonClicked();
}
onShowMapClicked: {
root.showMapClicked();
}
onAudioRecordMessageButtonClicked: root.audioRecordMessageButtonClicked()
onVideoRecordMessageButtonClicked: root.videoRecordMessageButtonClicked()
onShowMapClicked: root.showMapClicked()
modelList: listViewMoreButton.menuMoreButton
y: showMoreButton.y + 31
x: showMoreButton.x - 3
@ -122,14 +133,6 @@ RowLayout {
}
}
Connections {
target: sharePopup
function onOpenedChanged() {
showMoreButton.indicator.color = (showMoreButton.parent && showMoreButton.parent.hovered) || (sharePopup != null && sharePopup.opened) ? JamiTheme.chatViewFooterImgHoverColor : JamiTheme.chatViewFooterImgColor;
showMoreButton.background.color = (showMoreButton.parent && showMoreButton.parent.hovered) || sharePopup.opened ? JamiTheme.hoveredButtonColor : JamiTheme.transparentColor;
}
}
Rectangle {
id: rectangle
@ -349,8 +352,6 @@ RowLayout {
}
var selectedText = text.substring(start - char1.length, end + char2.length);
return (selectedText.startsWith(char1) && selectedText.endsWith(char2));
var res = regex.test(text.substring(start - char1.length, end + char2.length));
return res && start - char1.length >= 0 && end + char2.length <= text.length;
}
function isStarStyle(text, selectionStart, selectionEnd, type) {
@ -836,14 +837,14 @@ RowLayout {
toolTipText: modelData.shortcutText
shortcutKey: modelData.shortcutKey
hasShortcut: modelData.hasShortcut != null ? modelData.hasShortcut : true
hasShortcut: modelData.hasShortcut ? true : false
source: modelData.iconSrc
focusPolicy: Qt.TabFocus
normalColor: {
if (showPreview) {
return JamiTheme.primaryBackgroundColor;
} else if (modelData.normalColor != null) {
} else if (modelData.normalColor) {
return modelData.normalColor;
} else if (modelData.isStyle) {
return JamiTheme.hoveredButtonColor;
@ -856,7 +857,7 @@ RowLayout {
return JamiTheme.chatViewFooterImgDisableColor;
} else if (hovered) {
return JamiTheme.chatViewFooterImgHoverColor;
} else if (modelData.imageColor != null) {
} else if (modelData.imageColor !== null) {
return modelData.imageColor;
} else if (modelData.isStyle) {
return JamiTheme.chatViewFooterImgHoverColor;

View File

@ -39,6 +39,9 @@ Rectangle {
property alias chatViewContainer: chatViewContainer
property string callPreviewId
// A link to the first child will provide access to the chat view.
property var chatView: chatViewContainer.children[0]
onCallPreviewIdChanged: {
controlPreview.start();
}
@ -61,6 +64,20 @@ Rectangle {
}
}
function setCallChatVisibility(visible) {
if (visible) {
mainColumnLayout.isHorizontal = UtilsAdapter.getAppValue(Settings.Key.ShowChatviewHorizontally);
chatViewContainer.visible = false;
chatViewContainer.visible = true;
} else {
chatViewContainer.visible = false;
}
}
function toggleCallChatVisibility() {
setCallChatVisibility(!chatViewContainer.visible);
}
function openInCallConversation() {
mainColumnLayout.isHorizontal = UtilsAdapter.getAppValue(Settings.Key.ShowChatviewHorizontally);
chatViewContainer.visible = false;
@ -291,10 +308,7 @@ Rectangle {
anchors.fill: parent
function toggleConversation() {
if (inCallMessageWebViewStack.visible)
closeInCallConversation();
else
openInCallConversation();
toggleCallChatVisibility();
}
Connections {
@ -322,19 +336,13 @@ Rectangle {
participantsLayer.hoveredOverVideoMuted = true;
}
onChatButtonClicked: {
var detailsVisible = chatViewContainer.showDetails;
chatViewContainer.showDetails = false;
!chatViewContainer.visible || detailsVisible ? openInCallConversation() : closeInCallConversation();
}
onFullScreenClicked: {
callStackView.toggleFullScreen();
}
onChatButtonClicked: toggleCallChatVisibility()
onFullScreenClicked: callStackView.toggleFullScreen()
onSwarmDetailsClicked: {
chatViewContainer.showDetails = !chatViewContainer.showDetails;
chatViewContainer.showDetails ? openInCallConversation() : closeInCallConversation();
toggleCallChatVisibility();
if (chatViewContainer.visible) {
chatView.switchToPanel(ChatView.SwarmDetailsPanel);
}
}
}

View File

@ -36,7 +36,7 @@ Rectangle {
TextEdit {
id: projectCreditsTextArea
horizontalAlignment: Text.AlignHCenter
horizontalAlignment: Text.AlignLeft
width: projectCreditsFlickable.width
color: JamiTheme.textColor

View File

@ -174,6 +174,12 @@ SidePanelBase {
}
header: AccountComboBox {
id: accountComboBox
Shortcut {
sequence: "Ctrl+J"
context: Qt.ApplicationShortcut
onActivated: accountComboBox.togglePopup()
}
}
Item {

View File

@ -23,6 +23,7 @@ import Qt5Compat.GraphicalEffects
import net.jami.Models 1.1
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import "../../commoncomponents"
import "../../settingsview/components"

View File

@ -17,6 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import net.jami.Constants 1.1
import "../../commoncomponents"
@ -31,159 +32,183 @@ BaseModalDialog {
property int preferredImgSize: 80
popupContent: GridLayout {
id: userProfileDialogLayout
title: JamiStrings.contactDetails
anchors.margins: JamiTheme.preferredMarginSize
width: JamiTheme.secondaryDialogDimension
popupContent: Rectangle {
color: JamiTheme.backgroundRectangleColor
width: userProfileDialogLayout.width + 20
height: userProfileDialogLayout.height + 10
radius: 5
columns: 2
rows: 6
rowSpacing: 16
columnSpacing: 24
Avatar {
id: contactImage
Layout.alignment: Qt.AlignRight
Layout.preferredWidth: preferredImgSize
Layout.preferredHeight: preferredImgSize
imageId: convId !== "" ? convId : idText
showPresenceIndicator: false
mode: convId !== "" ? Avatar.Mode.Conversation : Avatar.Mode.Contact
}
// Visible when user alias is not empty and not equal to id.
TextEdit {
id: contactAlias
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.titleFontSize
font.kerning: true
color: JamiTheme.textColor
visible: aliasText ? (aliasText === idText ? false : true) : false
selectByMouse: true
readOnly: true
wrapMode: Text.NoWrap
text: textMetricsContactAliasText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
TextMetrics {
id: textMetricsContactAliasText
font: contactAlias.font
text: aliasText
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
}
Item {
Layout.columnSpan: 2
height: 8
}
Text {
Layout.alignment: Qt.AlignRight
font.pointSize: JamiTheme.menuFontSize
text: JamiStrings.information
color: JamiTheme.textColor
}
Item {
Layout.fillWidth: true
}
Text {
Layout.alignment: Qt.AlignRight
font.pointSize: JamiTheme.textFontSize
text: JamiStrings.username
visible: contactDisplayName.visible
color: JamiTheme.faddedFontColor
}
// Visible when user name is not empty or equals to id.
TextEdit {
id: contactDisplayName
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.textColor
visible: registeredNameText ? (registeredNameText === idText ? false : true) : false
readOnly: true
selectByMouse: true
wrapMode: Text.NoWrap
text: textMetricsContactDisplayNameText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
TextMetrics {
id: textMetricsContactDisplayNameText
font: contactDisplayName.font
text: registeredNameText
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
}
Text {
id: identifierText
Layout.alignment: Qt.AlignRight
font.pointSize: JamiTheme.textFontSize
text: JamiStrings.identifier
color: JamiTheme.faddedFontColor
}
TextEdit {
id: contactId
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: root.width - 250
Layout.rightMargin: JamiTheme.preferredMarginSize
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.textColor
readOnly: true
selectByMouse: true
wrapMode: Text.Wrap
text: idText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
Text {
Layout.alignment: Qt.AlignRight
font.pointSize: JamiTheme.textFontSize
text: JamiStrings.qrCode
color: JamiTheme.faddedFontColor
}
Rectangle{
id: qrImageBackground
radius: 5
anchors.right: parent.right
anchors.top: parent.top
anchors.rightMargin: 10
anchors.topMargin: 10
width: 90
height: 90
Image {
id: contactQrImage
Layout.alignment: Qt.AlignLeft
anchors.centerIn: parent
horizontalAlignment: Image.AlignRight
fillMode: Image.PreserveAspectFit
sourceSize.width: preferredImgSize
sourceSize.height: preferredImgSize
mipmap: false
smooth: false
source: convId !== "" ? "image://qrImage/contact_" + convId : "image://qrImage/contact_" + idText
}
}
}
ColumnLayout {
id: userProfileDialogLayout
width: Math.min(root.width, 400)
spacing: 10
RowLayout {
Layout.margins: 10
Layout.fillWidth: true
spacing: 10
Avatar {
id: contactImage
Layout.preferredWidth: preferredImgSize
Layout.preferredHeight: preferredImgSize
imageId: convId !== "" ? convId : idText
showPresenceIndicator: false
mode: convId !== "" ? Avatar.Mode.Conversation : Avatar.Mode.Contact
}
ColumnLayout {
spacing: 10
Layout.alignment: Qt.AlignLeft
// Visible when user alias is not empty and not equal to id.
TextEdit {
id: contactAlias
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.settingsFontSize
font.kerning: true
color: JamiTheme.textColor
visible: aliasText ? (aliasText === idText ? false : true) : false
selectByMouse: true
readOnly: true
text: textMetricsContactAliasText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
TextMetrics {
id: textMetricsContactAliasText
font: contactAlias.font
text: aliasText
elideWidth: userProfileDialogLayout.width - qrImageBackground.width - 100
elide: Qt.ElideRight
}
}
// Visible when user name is not empty or equals to id.
TextEdit {
id: contactDisplayName
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.faddedFontColor
visible: registeredNameText ? (registeredNameText === aliasText ? false : true) : false
readOnly: true
selectByMouse: true
wrapMode: Text.NoWrap
text: textMetricsContactDisplayNameText.elidedText
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
TextMetrics {
id: textMetricsContactDisplayNameText
font: contactDisplayName.font
text: registeredNameText
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
}
}
}
Rectangle {
Layout.preferredWidth: parent.width
Layout.alignment: Qt.AlignHCenter
radius: 5
color: root.backgroundColor
Layout.preferredHeight: contactId.height + 20
Layout.leftMargin: 10
RowLayout {
id: idLayout
anchors.centerIn: parent
anchors.fill: parent
spacing: 15
Text {
id: identifierText
font.pointSize: JamiTheme.textFontSize
text: JamiStrings.identifier
color: JamiTheme.faddedFontColor
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
Layout.leftMargin: 10
}
TextEdit {
id: contactId
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: parent.width - identifierText.width - 35
font.pointSize: JamiTheme.textFontSize
font.kerning: true
color: JamiTheme.textColor
selectByMouse: true
readOnly: true
text: textMetricsContacIdText.elidedText
TextMetrics {
id: textMetricsContacIdText
font: contactDisplayName.font
text: idText
elideWidth: root.width - 200
elide: Qt.ElideMiddle
}
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
}
}
}
}
}

View File

@ -24,20 +24,25 @@ import "../../commoncomponents"
BaseModalDialog {
id: root
topLayoutVisible: false
backgroundColor: JamiTheme.darkTheme ? JamiTheme.blackColor : JamiTheme.whiteColor
backgroundColor: JamiTheme.whiteColor
popupContent: Rectangle{
anchors.centerIn: parent
width: userQrImage.width + 10
height: userQrImage.height + 10
color: JamiTheme.whiteColor
radius: 5
popupContent: Image {
Image {
id: userQrImage
property int size: JamiTheme.qrCodeImageSize
width: size
height: size
anchors.centerIn: parent
smooth: false
fillMode: Image.PreserveAspectFit
source: "image://qrImage/account_" + CurrentAccount.id
}
}
}

View File

@ -80,13 +80,12 @@ public:
HHOOK keyboardHook;
static quint32 qtKeyToVKey(Qt::Key key);
};
PTTListener::PTTListener(AppSettingsManager* settingsManager, QObject* parent)
: settingsManager_(settingsManager)
, QObject(parent)
: QObject(parent)
, pimpl_(std::make_unique<Impl>(this))
, settingsManager_(settingsManager)
{}
PTTListener::~PTTListener() = default;
@ -294,7 +293,7 @@ PTTListener::Impl::qtKeyToVKey(Qt::Key key)
return 'Z';
default:
//Try to get virtual key from current keyboard layout or US.
// Try to get virtual key from current keyboard layout or US.
const HKL layout = GetKeyboardLayout(0);
int vk = VkKeyScanEx(key, layout);
if (vk == -1) {
@ -305,5 +304,4 @@ PTTListener::Impl::qtKeyToVKey(Qt::Key key)
}
}
#include "pttlistener.moc"
#include "pttlistener.moc"

View File

@ -24,7 +24,6 @@
#include "networkmanager.h"
#include "lrcinstance.h"
#include "appsettingsmanager.h"
#include "utilsadapter.h"
#include "qmlregister.h"
#include <QJsonArray>
@ -40,7 +39,7 @@ PluginAdapter::PluginAdapter(LRCInstance* instance,
QString baseUrl)
: QmlAdapterBase(instance, parent)
, pluginStoreListModel_(new PluginStoreListModel(instance, this))
, pluginVersionManager_(new PluginVersionManager(instance, this))
, pluginVersionManager_(new PluginVersionManager(instance, settingsManager, this))
, pluginListModel_(new PluginListModel(instance, this))
, lrcInstance_(instance)
, settingsManager_(settingsManager)
@ -103,8 +102,13 @@ PluginAdapter::getPluginsFromStore()
auto result = QJsonDocument::fromJson(data).array();
auto pluginsInstalled = lrcInstance_->pluginModel().getPluginsId();
QList<QVariantMap> plugins;
if (result.size() == 0) {
Q_EMIT storeNotAvailableForPlatform();
return;
}
for (const auto& plugin : result) {
auto qPlugin = plugin.toVariant().toMap();
if (!qPlugin.contains("id")) {
qPlugin["id"] = qPlugin["name"];
}

View File

@ -68,6 +68,7 @@ protected:
bool removeLast = false);
Q_SIGNALS:
void storeNotAvailable();
void storeNotAvailableForPlatform();
private:
void updateHandlersListCount();

View File

@ -218,10 +218,12 @@ void
PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status)
{
auto pluginIndex = -1;
for (auto& p : installedPlugins_) {
QString pluginModelId = "";
for (const auto& p : installedPlugins_) {
auto details = lrcInstance_->pluginModel().getPluginDetails(p);
if (details.name == pluginId) {
if (details.id == pluginId) {
pluginIndex = installedPlugins_.indexOf(p, -1);
pluginModelId = p;
break;
}
}
@ -229,6 +231,10 @@ PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::R
case PluginStatus::INSTALLED:
addPlugin();
break;
case PluginStatus::FAILED:
errorOccurred(pluginId);
status = PluginStatus::UPDATABLE;
break;
default:
break;
}
@ -236,7 +242,8 @@ PluginListModel::onVersionStatusChanged(const QString& pluginId, PluginStatus::R
if (pluginIndex == -1) {
return;
}
pluginStatus_[pluginId] = status;
pluginStatus_[pluginModelId] = status;
pluginChanged(pluginIndex);
switch (status) {
case PluginStatus::INSTALLABLE:
removePlugin(pluginIndex);

View File

@ -72,6 +72,8 @@ Q_SIGNALS:
void setVersionStatus(const QString& pluginId, PluginStatus::Role status);
void autoUpdateChanged(bool state);
void disabled(const QString& pluginId);
void errorOccurred(const QString& pluginId);
public Q_SLOTS:
void onVersionStatusChanged(const QString& pluginId, PluginStatus::Role status);
void onNewVersionAvailable(const QString& pluginId, const QString& version);

View File

@ -21,6 +21,8 @@
#include "lrcinstance.h"
#include "api/pluginmodel.h"
#include <QJsonArray>
#include <QJsonDocument>
#include <QMap>
#include <QTimer>
#include <QDir>
@ -30,10 +32,10 @@ static constexpr int updatePeriod = 1000 * 60 * 60 * 24; // one day in millis
struct PluginVersionManager::Impl : public QObject
{
public:
Impl(LRCInstance* instance, PluginVersionManager& parent)
Impl(LRCInstance* instance, AppSettingsManager* settingsManager, PluginVersionManager& parent)
: QObject(nullptr)
, parent_(parent)
, settingsManager_(new AppSettingsManager(this))
, settingsManager_(settingsManager)
, lrcInstance_(instance)
, updateTimer_(new QTimer(this))
{
@ -43,7 +45,7 @@ public:
if (pluginsId.size() == 0) {
return;
}
for (const auto& pluginId : qAsConst(pluginsId)) {
for (const auto& pluginId : std::as_const(pluginsId)) {
parent_.pluginRepliesId.remove(pluginId);
}
});
@ -101,21 +103,20 @@ public:
Q_EMIT parent_.versionStatusChanged(plugin.id, PluginStatus::Role::FAILED);
return;
}
parent_.sendGetRequest(QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString()
+ "/versions/" + plugin.id + "?arch="
+ lrcInstance_->pluginModel().getPlatformInfo()["os"]),
[this, plugin](const QByteArray& data) {
// `data` represents the version in this case.
if (plugin.version < data) {
if (isAutoUpdaterEnabled()) {
installRemotePlugin(plugin.id);
return;
}
}
parent_.versionStatusChanged(plugin.id,
PluginStatus::Role::UPDATABLE);
});
parent_.sendGetRequest(
QUrl(settingsManager_->getValue("PluginStoreEndpoint").toString() + "/versions/"
+ plugin.id + "?arch=" + lrcInstance_->pluginModel().getPlatformInfo()["os"]),
[this, plugin](const QByteArray& data) {
// `data` represents the version in this case.
auto result = QJsonDocument::fromJson(data).array().toVariantList()[0].toMap();
if (parent_.checkVersion(plugin.version, result["version"].toString())) {
if (isAutoUpdaterEnabled()) {
installRemotePlugin(plugin.id);
return;
}
parent_.versionStatusChanged(plugin.id, PluginStatus::Role::UPDATABLE);
}
});
}
void installRemotePlugin(const QString& pluginId)
@ -163,9 +164,11 @@ public:
QTimer* updateTimer_;
};
PluginVersionManager::PluginVersionManager(LRCInstance* instance, QObject* parent)
PluginVersionManager::PluginVersionManager(LRCInstance* instance,
AppSettingsManager* settingsManager,
QObject* parent)
: NetworkManager(&instance->connectivityMonitor(), parent)
, pimpl_(std::make_unique<Impl>(instance, *this))
, pimpl_(std::make_unique<Impl>(instance, settingsManager, *this))
{}
PluginVersionManager::~PluginVersionManager()
@ -222,3 +225,22 @@ PluginVersionManager::installRemotePlugin(const QString& pluginId)
{
pimpl_->installRemotePlugin(pluginId);
}
bool
PluginVersionManager::checkVersion(const QString& installedVersion,
const QString& remoteVersion) const
{
auto installedVersionDetails = installedVersion.split(".");
auto remoteVersionDetails = remoteVersion.split(".");
if (remoteVersionDetails.size() != installedVersionDetails.size()) {
return false;
}
for (int i = 0; i < installedVersionDetails.size(); i++) {
if (installedVersionDetails[i].toInt() < remoteVersionDetails[i].toInt()) {
return true;
} else if (installedVersionDetails[i].toInt() > remoteVersionDetails[i].toInt()) {
return false;
}
}
return false;
}

View File

@ -22,6 +22,7 @@
class QString;
class LRCInstance;
class AppSettingsManager;
#define PLUGIN_STATUS_ROLES \
X(INSTALLABLE) \
@ -46,7 +47,9 @@ class PluginVersionManager final : public NetworkManager
{
Q_OBJECT
public:
explicit PluginVersionManager(LRCInstance* instance, QObject* parent = nullptr);
explicit PluginVersionManager(LRCInstance* instance,
AppSettingsManager* settingsManager,
QObject* parent = nullptr);
~PluginVersionManager();
Q_INVOKABLE bool isAutoUpdaterEnabled();
@ -69,6 +72,7 @@ Q_SIGNALS:
void newVersionAvailable(const QString& pluginId, const QString& version);
private:
bool checkVersion(const QString& installedVersion, const QString& remoteVersion) const;
QString baseUrl;
bool autoUpdateCheck = false;
QMap<QString, int> pluginRepliesId {};

View File

@ -1,6 +1,5 @@
#pragma once
#include "systemtray.h"
#include "appsettingsmanager.h"
#include <QObject>
@ -14,7 +13,7 @@ class PTTListener : public QObject
public:
Q_INVOKABLE Qt::Key getCurrentKey()
{
int keyInt = settingsManager_->getValue(Settings::Key::pttKey).toInt();
int keyInt = settingsManager_->getValue(Settings::Key::PttKeys).toInt();
Qt::Key key = static_cast<Qt::Key>(keyInt);
return key;
}
@ -23,9 +22,10 @@ public:
{
return QKeySequence(key).toString();
}
Q_INVOKABLE void setPttKey(Qt::Key key)
{
settingsManager_->setValue(Settings::Key::pttKey, key);
settingsManager_->setValue(Settings::Key::PttKeys, key);
}
Q_INVOKABLE bool getPttState()
{
@ -48,5 +48,6 @@ public Q_SLOTS:
private:
class Impl;
std::unique_ptr<Impl> pimpl_;
AppSettingsManager* settingsManager_;
};

Some files were not shown because too many files have changed in this diff Show More