Compare commits

...

74 Commits

Author SHA1 Message Date
2bf414e27e misc: bump daemon
Change-Id: If3f8d438b2a3ef82b6ad9bf63cbd44d84be84498
2023-12-21 07:24:10 -05:00
c72e847bd4 Emoji Picker: correct position
GitLab: #1431

Change-Id: I5d86598da3120df5b34b375e1019bb0d0c8d88f0
2023-12-21 07:22:48 -05:00
74120737ca avatarregistry: update account before smartlist
Else, we can got some issues when switching from one account
to another

Change-Id: I9f77b7d281fc1519be6ce779efd1f908f7eae6d2
2023-12-20 16:24:57 -05:00
f2424f4968 createAccount: resolve display issue
GitLab: #1448

Change-Id: I3e0edddfa70c0a59ab01d5c1359d93b27bea0824
2023-12-20 15:55:51 -05:00
9d7eae0af8 Donation banner: change image and center
Change-Id: I8dcdcaafd4bd8e34c9cdf403236b209ee3ad56a8
2023-12-20 12:30:13 -05:00
38febbf0bc fileSending: enable click on image and video
Change-Id: I48a68504b8b738a8db59337d48a69b16f5731bbe
2023-12-20 07:51:39 -05:00
bd8938b1df TextMessageDelegate: resolve binding loop issue
Change-Id: Ia17240ba8ff20dd09ad58463e44fbcdc2156ed78
2023-12-19 12:05:57 -05:00
1e4c450423 file sending: new design
GitLab: #1325
Change-Id: Ie39a429ae53c9be3d96363fb4bd9af6b47805456
2023-12-19 09:36:14 -05:00
c1df66f28d manual Revert "Revert "app Store: disable donations""
Appstore is refusing the donations-enabled build for now.

Change-Id: I16d9cc33ed577298565a5d92e0ee247ee54865a8
2023-12-18 16:32:10 -05:00
721ea4b017 misc: bump daemon
Change-Id: I254ed23127fd781d7cffc0461d9a2cf9ba1b7b75
2023-12-18 13:45:59 -05:00
b6737f1d50 misc: fix some connect warnings when starting with 0 accounts
Change-Id: I15f3a79107912d83a3c1ffe18538c26e37a419e8
2023-12-18 11:29:52 -05:00
15eb51c7ca smartlistitemdelegate: avoid weird conversation jump
Change-Id: I951d6938b4154dccce5a267744976fdc3da7f660
2023-12-18 10:40:36 -05:00
e74be0934e linkMessage: new design
GitLab: #1325
Change-Id: Id9b4e1430575fbf53f0657e94c9a27c5b35e4a93
2023-12-15 09:09:55 -05:00
a4b758611c deletedMessage: new design
GitLab: #1325
Change-Id: I3bca1e25e9e66ffa86670bb5194812fb6d78ce8a
2023-12-15 09:03:55 -05:00
c00ea7ac51 misc: bump daemon submodule
Change-Id: I3baaacf277766786266c0cd885ded7aeac63798e
2023-12-14 20:51:18 -05:00
58a53e70d1 smartlist: prevent selection oscillation
The dataChanged signal should be queued to prevent the conversation selection callback from re-entering SelectableListProxyModel::updateSelection prior to sort/filter updates. This can cause desync of the source and filter indices.

Change-Id: I35b3b38512cf51b1dd7ca8110b143a9223740056
2023-12-14 19:28:07 -05:00
4ca37a6293 AccountComboBox: resolve display issue
GitLab: #1455

Change-Id: Ie572153e1eb89e71f27ba87b2cdd20c74628a1be
2023-12-14 15:32:16 -05:00
e2da7777de SwarmId: enable selection by mouse
Change-Id: Ie20d0d716eaaa7f6d6018e50f73560498ff6d918
2023-12-14 14:25:58 -05:00
48e9887129 misc: use a layout for the smartlist sidepanel
Change-Id: I2a93999b3e8648bb1c7d2249a4f69d5b08c59ae5
2023-12-14 10:52:55 -05:00
2af4bc663b ScrollToBottomButton: new design
GitLab: #1325
Change-Id: I7f44aaf51bd825dde06f071106fe93d6b1eae228
2023-12-14 09:39:34 -05:00
72100f4700 ChatView: resolve overlaping issue on username
Change-Id: Iee98257740c54d28f2abc1d62458a90c1e218481
2023-12-13 16:27:31 -05:00
b7207e4b03 chatView: resolve overlaping issue
Change-Id: I2cff215cf1050128c768b3276cafaa263944043f
2023-12-13 15:43:05 -05:00
250196bbac join call message: new design
GitLab: #1325
Change-Id: I1ed0784197936121e70b47e9d7015d13aa7a8738
2023-12-13 09:56:15 -05:00
04a57dfdbb ConversationBubble: add time inside bubble
GitLab: #1325
Change-Id: Ib52222f4adae911e0975f4d7e8bc60739fb63cfb
2023-12-13 09:56:15 -05:00
4a3a49b0ec Connection monitoring: load result at start and not after 1s
Change-Id: I1dc7144a6cec4f6250a68d2a8ce8228012b030fd
2023-12-12 14:46:32 -05:00
4342b9053f MessageBar: correct some button color
Change-Id: Ic8f73e6c2689756a1068ebf9914cfb25f0737b26
2023-12-12 09:45:08 -05:00
ef0045c927 notification icons: new color and placement
GitLab: #1325
Change-Id: I1df248e37c89cea3007856ce4d56ea9e7c5f6b6d
2023-12-12 09:44:05 -05:00
d45f86362b i18n: automatic bump
Change-Id: Ibf922b49ad7602b8c0056502c6b03ac78190c84d
2023-12-11 16:42:40 -05:00
c4c2415d6b Connection monitoring : Correct layout after migration
Change-Id: I8c480be77e1ef0a8778d4e8420523b71c76c4555
2023-12-11 16:13:11 -05:00
b2318c7f7f CertificateVerification: verify certificate when upload new plugin
Change-Id: Ie5678f79f26e1cb75894d234daaea257000b1dcd
2023-12-11 07:38:33 -05:00
f46b94baeb misc: bump daemon
Change-Id: Ifaefccb58b91a4453af7d40fcd5edca9e3694ff1
2023-12-08 17:34:42 -05:00
adfafd9dda JamiIdentifier: resolve display issues with new UsernameTextEdit
GitLab: #1440

Change-Id: Ia3e8900d89b9e74525080cc208ef54c30200d2b1
2023-12-08 15:49:28 -05:00
45271413b6 donation-ui: simplify settings property observation
Change-Id: I4f1442a9ee92f965a09eb6f5421b939e48b0fbf8
2023-12-08 10:23:08 -05:00
87aed4c039 misc: fix GTK theme application on Wayland by prioritizing XCB
This commit addresses an issue where the GTK theme was not being correctly applied when running our application on Wayland with the Wayland platform plugin. Although the root cause is not entirely clear, it seems related to a known Qt bug (QTBUG-99684). As a workaround, we're setting the `QT_QPA_PLATFORM` environment variable to use XCB with Wayland as a fallback. This ensures that the GTK theme is applied correctly when X11 is available, while still allowing a fallback to Wayland in its absence.

Possibly related issue: https://bugreports.qt.io/browse/QTBUG-99684

Gitlab: #1156
Change-Id: I71ef4e39f916d9871134fb0caded8b30bff578fb
2023-12-08 08:33:24 -05:00
03c20a4205 AvAdapter: allow audio-only sharing
Change-Id: I88e1fcc9726253366224aae81aabf5797f582939
2023-12-07 15:49:50 -05:00
ddb1409195 CMakeLists: set Qt 6.5 as minimal version
Change-Id: Idb58dc218cb71f1b5ff1cb44b5ce1c2e43d577b7
GitLab: #1374
2023-12-06 14:05:36 -05:00
a74b54939d conversationmodel: simplify onContactAdded and fix syncing status
Change-Id: I8e6eb93569a34099e155fe1e397dd1f4e84e890c
2023-12-06 12:56:03 -05:00
0af4af1685 LocalVideo: close previous device when switching device
Change-Id: Ia6a8c56e1b259dd33d85734a85f1a3a652da5206
GitLab: #1446
2023-12-05 10:59:28 -05:00
850decf38e SidePanel: fix margin for donation card
Change-Id: Ie8777db1857e6ddbc0570d115ff37f000bebbf23
GitLab: #1439
2023-12-05 09:48:25 -05:00
bd39fbd5a4 i18n: automatic bump
Change-Id: I4f0704070ce5501796eea6d85403126e087625a9
2023-12-04 16:57:04 -05:00
7d7428af21 Almalinux: build on stable version without plugin store
GitLab: #1418

Change-Id: I37239869e691a621138ae0616695f8efdf4b47ca
2023-12-04 17:19:28 -04:00
5cd2490f24 contactmodel: subscribe presence on conversation accepted
Change-Id: Ic11b651b7347773716088c6ce3784c70655f89b1
2023-12-01 16:11:02 -05:00
ca85303110 logging: fix file logging with no parameter
Remove trailing webengine parameters by not synthesizing command-line args. Use the env var QTWEBENGINE_CHROMIUM_FLAGS instead.

Gitlab: #1074
Change-Id: Ibc2a4f75317bd502a3cca96758ef72264babe255
2023-12-01 16:10:32 -05:00
46ca469bec misc: fix xcb plugin generation
Change-Id: Ibb06f6a5647adeebc379c3421232ec55645c0217
2023-12-01 14:50:03 -05:00
49e64bb027 UserProfile: resolve display issue
GitLab: #1443

Change-Id: I0334364fbc5cbb84159a66459f25b21a1b8f9271
2023-12-01 14:37:57 -05:00
8dd04cab92 RecordBox: new design
GitLab: #1417
Change-Id: I892d140a4989e8cd6e96ca6f81abaa0cdaab2e54
2023-12-01 14:19:53 -05:00
be9725ec0c PttPopup: improve the design
Change-Id: I88c97726a62c395b6aa729fdac0b4dca173ddaf1
2023-12-01 14:19:46 -05:00
b4de00ce61 DeleteAccountDialog: resolve display issue with SIP account
GitLab: #1445

Change-Id: I8080df282d0fb4bd958fc50216e0c66b69a09418
2023-12-01 10:18:07 -05:00
e753dd509e PasswordDialog: resolve display issue
GitLab: #1444

Change-Id: I248220b04b4343c73fdd55ce4de0a871aa89c4bc
2023-12-01 10:02:29 -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
236 changed files with 87861 additions and 85786 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

View File

@ -97,7 +97,7 @@ set(TESTS_DIR ${PROJECT_SOURCE_DIR}/tests)
# Here we let find_package(<PackageName>...) try to find Qt 6,
# If it is found, find_package will succeed, and the CMake variable
# QT_VERSION_MAJOR will be defined 6.
set(QT6_MINVER_MINOR 4)
set(QT6_MINVER_MINOR 5)
if(QT6_VER AND QT6_PATH)
find_package(QT NAMES Qt6 REQUIRED
PATHS ${QT6_PATH} NO_DEFAULT_PATH)
@ -106,10 +106,10 @@ else()
find_package(QT NAMES Qt6 REQUIRED)
endif()
if (${QT_VERSION_MINOR} GREATER_EQUAL ${QT6_MINVER_MINOR})
# Qt version is 6.4 or higher
# Qt version is 6.5 or higher
message(STATUS "Found a suitable Qt version ${QT_VERSION}")
else()
message(FATAL_ERROR "Qt 6.4 or higher is required. Found ${QT_VERSION}")
message(FATAL_ERROR "Qt 6.5 or higher is required. Found ${QT_VERSION}")
endif()
# libjamiclient

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 = [

2
daemon

Submodule daemon updated: 149f070cdd...317b7317dc

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

@ -53,6 +53,7 @@ Build-Depends: debhelper (>= 9),
libvulkan-dev [linux-any],
libx11-dev,
libx11-xcb-dev,
libsm-dev,
libxcb-glx0-dev,
libxcb-icccm4-dev,
libxcb-image0-dev,
@ -298,10 +299,11 @@ Build-Depends: debhelper (>= 9),
# libvpx-dev (>= 1.8),
libvpx-dev,
libwebp-dev,
# libx11-xcb-dev,
libx11-xcb-dev,
libxcb-dri3-dev,
# libxcomposite-dev,
libxcursor-dev,
libxcb-cursor-dev,
libxdamage-dev,
libxml2-dev,
libxnvctrl-dev,

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
@ -73,7 +73,12 @@ def get_latest_toolset_version():
if vs_ver is None:
return None
vs_ver = int(vs_ver.split(".")[0])
return "v143" if vs_ver >= 16 else "v142" if vs_ver >= 15 else "v141"
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."""

View File

@ -1,15 +1,21 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="43" height="52.655" viewBox="0 0 43 52.655">
<defs>
<clipPath id="clip-path">
<rect id="Rectangle_268" data-name="Rectangle 268" width="38" height="24" transform="translate(-0.407 0.083)" fill="#fff" stroke="#707070" stroke-width="1"/>
</clipPath>
</defs>
<g id="Icon_Donate" transform="translate(-22 -189.345)">
<rect id="Rectangle_267" data-name="Rectangle 267" width="43" height="10" rx="5" transform="translate(22 232)" fill="#9eb3c3"/>
<path id="Path_459" data-name="Path 459" d="M9.674,17.083,8.562,16.07C4.609,12.486,2,10.122,2,7.221A4.18,4.18,0,0,1,6.221,3,4.6,4.6,0,0,1,9.674,4.6,4.6,4.6,0,0,1,13.128,3a4.18,4.18,0,0,1,4.221,4.221c0,2.9-2.609,5.265-6.562,8.856Z" transform="translate(22.407 199.828)" fill="#ff0045" opacity="0.3"/>
<path id="Path_460" data-name="Path 460" d="M6.953,12.088l-.718-.654C3.684,9.122,2,7.6,2,5.724A2.7,2.7,0,0,1,4.724,3,2.966,2.966,0,0,1,6.953,4.035,2.966,2.966,0,0,1,9.182,3a2.7,2.7,0,0,1,2.724,2.724c0,1.872-1.684,3.4-4.235,5.716Z" transform="translate(45.571 186.345)" fill="#ff0045" opacity="0.16"/>
<g id="Mask_Group_38" data-name="Mask Group 38" transform="translate(24.407 213.918)" clip-path="url(#clip-path)">
<path id="Path_270" data-name="Path 270" d="M12.649,22.542l-1.544-1.406C5.621,16.163,2,12.883,2,8.857A5.8,5.8,0,0,1,7.857,3a6.377,6.377,0,0,1,4.792,2.226A6.377,6.377,0,0,1,17.442,3,5.8,5.8,0,0,1,23.3,8.857c0,4.025-3.621,7.306-9.105,12.289Z" transform="translate(5.992 5.54)" fill="#ff0045"/>
</g>
</g>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.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 43 52.7" style="enable-background:new 0 0 43 52.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#9EB3C3;}
.st1{opacity:0.3;fill:#FF0045;enable-background:new ;}
.st2{opacity:0.16;fill:#FF0045;enable-background:new ;}
.st3{fill:#FF0045;}
</style>
<g id="Icon_Donate" transform="translate(-22 -189.345)">
<path id="Rectangle_267" class="st0" d="M27,232h33c2.8,0,5,2.2,5,5l0,0c0,2.8-2.2,5-5,5H27c-2.8,0-5-2.2-5-5l0,0
C22,234.2,24.2,232,27,232z"/>
<path id="Path_459" class="st1" d="M32.1,216.9l-1.1-1c-4-3.6-6.6-5.9-6.6-8.8c0-2.3,1.8-4.2,4.1-4.2c0,0,0.1,0,0.1,0
c1.3,0,2.6,0.6,3.5,1.6c0.9-1,2.1-1.6,3.5-1.6c2.3,0,4.2,1.8,4.2,4.1c0,0,0,0.1,0,0.1c0,2.9-2.6,5.3-6.6,8.9L32.1,216.9z"/>
<path id="Path_460" class="st2" d="M52.5,198.4l-0.7-0.7c-2.6-2.3-4.2-3.8-4.2-5.7c0-1.5,1.2-2.7,2.7-2.7c0,0,0,0,0,0
c0.9,0,1.7,0.4,2.2,1c0.6-0.7,1.4-1,2.2-1c1.5,0,2.7,1.2,2.7,2.7c0,0,0,0,0,0c0,1.9-1.7,3.4-4.2,5.7L52.5,198.4z"/>
<path class="st3" d="M37.3,236.7h11.4c3.1-3,4.9-5.5,4.9-8.4c0,0,0-0.1,0-0.1c0-3.2-2.7-5.8-5.9-5.7c-1.8,0-3.6,0.8-4.8,2.2
c-1.2-1.4-2.9-2.2-4.8-2.2c0,0-0.1,0-0.1,0c-3.2,0-5.8,2.7-5.7,5.9C32.4,231.2,34.3,233.7,37.3,236.7z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

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,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path id="check_circle_FILL0_wght400_GRAD0_opsz24" d="M88.6-865.4l7.05-7.05-1.4-1.4L88.6-868.2l-2.85-2.85-1.4,1.4ZM90-860a9.738,9.738,0,0,1-3.9-.787,10.1,10.1,0,0,1-3.175-2.138,10.1,10.1,0,0,1-2.138-3.175A9.738,9.738,0,0,1,80-870a9.738,9.738,0,0,1,.787-3.9,10.1,10.1,0,0,1,2.138-3.175,10.1,10.1,0,0,1,3.175-2.138A9.738,9.738,0,0,1,90-880a9.738,9.738,0,0,1,3.9.787,10.1,10.1,0,0,1,3.175,2.138,10.1,10.1,0,0,1,2.138,3.175A9.738,9.738,0,0,1,100-870a9.738,9.738,0,0,1-.787,3.9,10.1,10.1,0,0,1-2.138,3.175,10.1,10.1,0,0,1-3.175,2.138A9.738,9.738,0,0,1,90-860Zm0-2a7.721,7.721,0,0,0,5.675-2.325A7.721,7.721,0,0,0,98-870a7.721,7.721,0,0,0-2.325-5.675A7.721,7.721,0,0,0,90-878a7.721,7.721,0,0,0-5.675,2.325A7.721,7.721,0,0,0,82-870a7.721,7.721,0,0,0,2.325,5.675A7.721,7.721,0,0,0,90-862ZM90-870Z" transform="translate(-80 880)" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 927 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M24 24H0V0h24v24z"/><circle fill="#ff0000" cx="12" cy="12" r="8"/></svg>

Before

Width:  |  Height:  |  Size: 176 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,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,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path id="phone_in_talk_FILL0_wght400_GRAD0_opsz24_1_" data-name="phone_in_talk_FILL0_wght400_GRAD0_opsz24 (1)" d="M134.222-832a6,6,0,0,0-1.811-4.411A6,6,0,0,0,128-838.222V-840a7.737,7.737,0,0,1,3.122.633,8.132,8.132,0,0,1,2.533,1.711,8.133,8.133,0,0,1,1.711,2.533A7.74,7.74,0,0,1,136-832Zm-3.556,0a2.572,2.572,0,0,0-.778-1.889,2.571,2.571,0,0,0-1.889-.778v-1.778a4.283,4.283,0,0,1,3.144,1.3,4.283,4.283,0,0,1,1.3,3.144Zm4.4,8a13.343,13.343,0,0,1-5.489-1.211,16.42,16.42,0,0,1-4.933-3.433,16.42,16.42,0,0,1-3.433-4.933A13.343,13.343,0,0,1,120-839.067a.9.9,0,0,1,.267-.667.9.9,0,0,1,.667-.267h3.6a.827.827,0,0,1,.556.211.812.812,0,0,1,.289.5l.578,3.111a1.567,1.567,0,0,1-.022.6.934.934,0,0,1-.244.422l-2.156,2.178a10.745,10.745,0,0,0,1.056,1.589,15.638,15.638,0,0,0,1.344,1.478,15.651,15.651,0,0,0,1.444,1.278,14.051,14.051,0,0,0,1.6,1.078l2.089-2.089a1.245,1.245,0,0,1,.522-.3,1.431,1.431,0,0,1,.633-.056l3.067.622a1.029,1.029,0,0,1,.511.322.782.782,0,0,1,.2.522v3.6a.9.9,0,0,1-.267.667A.9.9,0,0,1,135.067-824Zm-12.378-10.667,1.467-1.467-.378-2.089H121.8a18.259,18.259,0,0,0,.311,1.8A9.736,9.736,0,0,0,122.689-834.667Zm7.956,7.956a11.029,11.029,0,0,0,1.767.6,10.838,10.838,0,0,0,1.811.289v-1.956l-2.089-.422ZM122.689-834.667ZM130.644-826.711Z" transform="translate(-120 840)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,11 +0,0 @@
<?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.2,6.5c-1.4-2.2-3.6-3.7-6-4.2C9,1.1,3.9,4.2,2.7,9.3c0,0,0,0,0,0l0,0.1c-0.6,2.4-0.1,4.9,1.2,6.9c1.2,1.9,3,3.3,5.1,4
l-0.4,0.3c-0.1,0-0.1,0.1-0.2,0.1C8,20.9,8,21.4,8.2,21.7C8.3,21.9,8.5,22,8.7,22c0,0,0.1,0,0.1,0c0.2,0,0.3-0.1,0.4-0.1l2-1.2
c0.2-0.1,0.3-0.3,0.3-0.5s0-0.4-0.1-0.6l-1.3-2c-0.2-0.3-0.6-0.4-1-0.2c-0.4,0.2-0.5,0.7-0.3,1l0.2,0.4c-1.7-0.6-3.1-1.7-4.1-3.3
c-1.1-1.7-1.4-3.8-1-5.9c0,0,0,0,0,0l0-0.1c1-4.2,5.3-6.8,9.7-5.9c2.1,0.5,3.9,1.8,5.1,3.6c1.1,1.7,1.4,3.8,1,5.9
c-0.6,2.7-2.8,4.9-5.6,5.8c-0.4,0.1-0.6,0.5-0.5,0.9c0.1,0.4,0.5,0.6,0.9,0.5c3.3-1,5.9-3.7,6.7-6.9l0-0.1
C21.9,11,21.5,8.5,20.2,6.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 976 B

View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<g id="Picture_FILLO" transform="translate(-378.5 -900)">
<circle id="Oval" cx="7.222" cy="7.222" r="7.222" transform="translate(381.278 902.778)" fill="#fff"/>
<g id="Oval-2" data-name="Oval" transform="translate(378.5 900)" fill="none" stroke="#fff" stroke-width="1">
<circle cx="10" cy="10" r="10" stroke="none"/>
<circle cx="10" cy="10" r="9.5" fill="none"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 492 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

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
<path id="refresh_FILL0_wght400_GRAD0_opsz24" d="M170-780a9.651,9.651,0,0,0,7.094-2.906A9.651,9.651,0,0,0,180-790a9.651,9.651,0,0,0-2.906-7.094A9.651,9.651,0,0,0,170-800a9.9,9.9,0,0,0-4.125.891,9.528,9.528,0,0,0-3.375,2.547V-800H160v8.75h8.75v-2.5H163.5a7.3,7.3,0,0,1,2.734-2.75,7.409,7.409,0,0,1,3.766-1,7.233,7.233,0,0,1,5.313,2.188A7.233,7.233,0,0,1,177.5-790a7.233,7.233,0,0,1-2.187,5.313A7.233,7.233,0,0,1,170-782.5a7.328,7.328,0,0,1-4.344-1.375,7.261,7.261,0,0,1-2.719-3.625h-2.625a9.87,9.87,0,0,0,3.563,5.406A9.7,9.7,0,0,0,170-780Z" transform="translate(-160 800)" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 679 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 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M6 6h12v12H6z" fill="#ff0000"/></svg>

Before

Width:  |  Height:  |  Size: 166 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="16" viewBox="0 0 15 16">
<g id="Stop_FILLO" fill="none" stroke="#fff" stroke-width="1.5">
<rect width="15" height="16" rx="5" stroke="none"/>
<rect x="0.75" y="0.75" width="13.5" height="14.5" rx="4.25" fill="none"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 300 B

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

@ -20,55 +20,21 @@
#pragma once
#include "utils.h"
#include <QMetaEnum>
#include <QObject>
#include <QString>
#include <QStandardPaths>
#include <QWindow> // for QWindow::AutomaticVisibility
#include <QSettings>
#include <QDir>
#include <QTranslator>
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 \
// Common key-value pairs for both APPSTORE and non-APPSTORE builds
#define COMMON_KEYS \
X(MinimizeOnClose, false) \
X(DownloadPath, defaultDownloadPath) \
X(ScreenshotPath, {}) \
@ -99,11 +65,17 @@ extern const QString defaultDownloadPath;
X(ShowMardownOption, false) \
X(ChatViewEnterIsNewLine, false) \
X(ShowSendOption, false) \
X(EnablePtt, false) \
X(PttKeys, 32)
#ifdef APPSTORE
#define KEYS COMMON_KEYS
#else
// Additional key-value pairs for non-APPSTORE builds including donation
// related settings.
#define KEYS COMMON_KEYS \
X(Donation2023VisibleDate, "2023-11-27 05:00") \
X(IsDonationVisible, true) \
X(Donation2023EndDate, "2024-01-31 00:00") \
X(EnablePtt, false) \
X(pttKey, 36)
X(Donation2023EndDate, "2024-01-31 00:00")
#endif
/*
@ -143,8 +115,9 @@ public:
default: return {};
}
}
private:
Settings() = delete;
Settings() = delete;
};
Q_DECLARE_METATYPE(Settings::Key)
// clang-format on

View File

@ -204,16 +204,10 @@ AvAdapter::shareFile(const QString& filePath)
&lrc::api::AVModel::fileOpened,
this,
[this, callId, filePath, resource](bool hasAudio, bool hasVideo) {
// TODO: allow audio only sharing
if (hasVideo) { // only start sharing if video is available
lrcInstance_->avModel().pausePlayer(resource, false);
lrcInstance_->avModel().setAutoRestart(resource, true);
lrcInstance_->getCurrentCallModel()
->addMedia(callId, filePath, lrc::api::CallModel::MediaRequestType::FILESHARING, false, hasAudio);
} else {
// Close media player because we are not going to start sharing
lrcInstance_->avModel().closeMediaPlayer(resource);
}
lrcInstance_->avModel().setAutoRestart(resource, true);
lrcInstance_->getCurrentCallModel()
->addMedia(callId, filePath, lrc::api::CallModel::MediaRequestType::FILESHARING, false, hasAudio);
lrcInstance_->avModel().pausePlayer(resource, false);
});
lrcInstance_->avModel().createMediaPlayer(resource);

View File

@ -27,7 +27,8 @@ AvatarRegistry::AvatarRegistry(LRCInstance* instance, QObject* parent)
connect(lrcInstance_,
&LRCInstance::currentAccountIdChanged,
this,
&AvatarRegistry::connectAccount);
&AvatarRegistry::connectAccount,
Qt::DirectConnection);
connect(&lrcInstance_->accountModel(),
&AccountModel::profileUpdated,

View File

@ -25,15 +25,17 @@ import net.jami.Constants 1.1
SBSMessageBase {
id: root
component JoinCallButton: PushButton {
component JoinCallButton: MaterialButton {
visible: root.isActive
toolTipText: JamiStrings.joinCall
preferredSize: visible ? 40 : 0
imageColor: callLabel.color
normalColor: "transparent"
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
border.width: 1
border.color: callLabel.color
color: JamiTheme.blackColor
background.opacity: hovered ? 0.2 : 0.1
hoveredColor: JamiTheme.blackColor
contentColorProvider: JamiTheme.textColor
textOpacity: hovered ? 1 : 0.5
buttontextHeightMargin: 16
textLeftPadding: 9
textRightPadding: 9
}
property bool isRemoteImage
@ -43,6 +45,9 @@ SBSMessageBase {
readers: Readers
formattedTime: MessagesAdapter.getFormattedTime(Timestamp)
bubble.border.color: CurrentConversation.color
bubble.border.width: root.isActive ? 1.5 : 0
Connections {
target: CurrentConversation
enabled: root.isActive
@ -56,13 +61,6 @@ SBSMessageBase {
visible: isActive || ConfId === "" || Duration > 0
property var baseColor: isOutgoing? CurrentConversation.color : JamiTheme.messageInBgColor
bubble.color: {
if (ConfId === "" && Duration === 0) {
// If missed, we can add a darker pattern
return Qt.lighter(root.baseColor, 1.15)
}
return root.baseColor
}
innerContent.children: [
RowLayout {
@ -73,20 +71,21 @@ SBSMessageBase {
Label {
id: callLabel
padding: 10
Layout.margins: 8
Layout.fillWidth: true
Layout.rightMargin: root.isActive ? 0 : root.timeWidth + 16
Layout.leftMargin: root.isActive ? 10 : 8
text: {
if (root.isActive)
return JamiStrings.joinCall;
return JamiStrings.startedACall;
return Body;
}
horizontalAlignment: Qt.AlignHCenter
font.pointSize: JamiTheme.mediumFontSize
font.hintingPreference: Font.PreferNoHinting
font.bold: true
renderType: Text.NativeRendering
textFormat: Text.MarkdownText
@ -95,17 +94,21 @@ SBSMessageBase {
JoinCallButton {
id: joinCallInAudio
Layout.topMargin: 4
Layout.bottomMargin: 4
source: JamiResources.place_audiocall_24dp_svg
text: JamiStrings.joinInAudio
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, ConfId, true)
}
JoinCallButton {
id: joinCallInVideo
text: JamiStrings.joinInVideo
Layout.topMargin: 4
Layout.bottomMargin: 4
source: JamiResources.videocam_24dp_svg
onClicked: MessagesAdapter.joinCall(ActionUri, DeviceId, ConfId)
Layout.rightMargin: parent.spacing
Layout.rightMargin: 4
}
}
]
@ -116,5 +119,8 @@ SBSMessageBase {
duration: 100
}
}
Component.onCompleted: opacity = 1
Component.onCompleted: {
bubble.timestampItem.visible = !root.isActive;
opacity = 1;
}
}

View File

@ -52,21 +52,20 @@ BaseModalDialog {
popupContent: ColumnLayout {
id: deleteAccountContentColumnLayout
anchors.centerIn: parent
spacing: JamiTheme.preferredMarginSize
spacing: 20
Component.onCompleted: keyItem.forceActiveFocus()
Label {
id: instructionLabel
Layout.alignment: Qt.AlignCenter
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: JamiTheme.preferredDialogWidth - 4*JamiTheme.preferredMarginSize
color: JamiTheme.textColor
text: JamiStrings.assignmentIndication
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: JamiTheme.textFontSize
font.pointSize: JamiTheme.settingsFontSize
font.kerning: true
wrapMode: Text.Wrap
@ -74,12 +73,13 @@ BaseModalDialog {
Label {
id: keyLabel
Layout.alignment: Qt.AlignCenter
Layout.alignment: Qt.AlignLeft
Layout.leftMargin: JamiTheme.preferredMarginSize
color: JamiTheme.blackColor
wrapMode: Text.WordWrap
text: ""
font.pointSize: JamiTheme.settingsFontSize
font.pointSize: JamiTheme.textFontSize
font.kerning: true
horizontalAlignment: Text.AlignHCenter

View File

@ -79,6 +79,7 @@ Loader {
formattedTime: root.formattedTime
formattedDay: root.formattedTime
extraHeight: progressBar.visible ? 18 : 0
innerContent.children: [
RowLayout {
id: transferItem
@ -104,7 +105,7 @@ Loader {
property string iconSourceA
property string iconSourceB
Layout.margins: 12
Layout.margins: 8
sourceComponent: {
switch (Status) {
@ -132,14 +133,22 @@ Loader {
}
Component {
id: terminatedComp
ResponsiveImage {
source: buttonsLoader.iconSourceA
Layout.leftMargin: 12
Layout.preferredWidth: 24
Layout.preferredHeight: 24
color: UtilsAdapter.luma(bubble.color)
? JamiTheme.chatviewTextColorLight
: JamiTheme.chatviewTextColorDark
Control {
width: 50
height: 50
padding: 13
background: Rectangle {
color: JamiTheme.blackColor
opacity: 0.15
radius: msgRadius
}
contentItem: ResponsiveImage {
source: buttonsLoader.iconSourceA
color: UtilsAdapter.luma(bubble.color) ? JamiTheme.fileIconLightColor : JamiTheme.fileIconDarkColor
}
}
}
Component {
@ -179,7 +188,7 @@ Loader {
}
Column {
Layout.rightMargin: 24
spacing: 6
spacing: 4
TextEdit {
id: transferName
@ -189,7 +198,6 @@ Loader {
TransferName :
Body
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
font.weight: Font.DemiBold
font.pointSize: 11
renderType: Text.NativeRendering
readOnly: true
@ -217,7 +225,7 @@ Loader {
width: Math.min(implicitWidth, maxMsgWidth)
bottomPadding: 10
text: {
var res = formattedTime + " - "
var res = ""
if (transferStats.totalSize !== undefined) {
if (transferStats.progress !== 0 &&
transferStats.progress !== transferStats.totalSize) {
@ -226,7 +234,7 @@ Loader {
var totalSize = transferStats.totalSize !== 0 ? transferStats.totalSize : TotalSize
res += UtilsAdapter.humanFileSize(totalSize)
}
return res + " - " + MessagesAdapter.getStatusString(Status)
return res
}
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
font.pointSize: 10
@ -257,6 +265,7 @@ Loader {
id: localMediaMsgItem
isOutgoing: Author === CurrentAccount.uri
property var transferStats: MessagesAdapter.getTransferStats(Id, Status)
showTime: root.showTime
seq: root.seq
author: Author
@ -266,7 +275,31 @@ Loader {
readers: Readers
formattedTime: MessagesAdapter.getFormattedTime(Timestamp)
formattedDay: MessagesAdapter.getFormattedDay(Timestamp)
bubble.visible: false
property real contentWidth
Component.onCompleted: {
if (transferStats.totalSize !== undefined) {
var totalSize = transferStats.totalSize !== 0 ? transferStats.totalSize : TotalSize
var txt = UtilsAdapter.humanFileSize(totalSize)
}
bubble.timestampItem.timeLabel.text += " - " + txt
bubble.color = "transparent"
if (mediaInfo.isImage)
bubble.z = 1
else
timeUnderBubble = true
}
onContentWidthChanged: {
if (bubble.timestampItem.timeLabel.width > contentWidth)
timeUnderBubble = true
else {
bubble.timestampItem.timeColor = JamiTheme.whiteColor
bubble.timestampItem.timeLabel.opacity = 1
}
}
innerContent.children: [
Loader {
id: localMediaCompLoader
@ -282,6 +315,9 @@ Loader {
return animatedImageComp
return avComp
}
Component {
id: avComp
@ -296,6 +332,7 @@ Loader {
}
Component {
id: animatedImageComp
AnimatedImage {
id: animatedImg
@ -330,12 +367,27 @@ Loader {
radius: msgRadius
}
}
HoverHandler {
target : parent
onHoveredChanged: {
localMediaMsgItem.hoveredLink = hovered ? animatedImg.source : ""
onWidthChanged: {
localMediaMsgItem.contentWidth = width
}
Component.onCompleted: localMediaMsgItem.bubble.imgSource = source
LinearGradient {
id: gradient
anchors.fill: parent
start: Qt.point(0, height / 3)
gradient: Gradient {
GradientStop {
position: 0.0
color: JamiTheme.transparentColor
}
GradientStop {
position: 1.0
color: JamiTheme.darkGreyColorOpacityFade
}
}
cursorShape: Qt.PointingHandCursor
}
}
}
@ -355,6 +407,8 @@ Loader {
asynchronous: true
source: Body !== undefined ? UtilsAdapter.urlFromLocalPath(Body) : ''
Component.onCompleted: localMediaMsgItem.bubble.imgSource = source
// The sourceSize represents the maximum source dimensions.
// This should not be a dynamic binding, as property changes
// (resizing the chat view) here will trigger a reload of the image.
@ -369,9 +423,14 @@ Loader {
if (status == Image.Ready && aspectRatio) {
height = Qt.binding(() => JamiQmlUtils.clamp(idealWidth / aspectRatio, 64, 256))
width = Qt.binding(() => height * aspectRatio)
}
}
onWidthChanged: {
localMediaMsgItem.contentWidth = width
}
Rectangle {
color: JamiTheme.previewImageBackgroundColor
z: -1
@ -387,12 +446,21 @@ Loader {
radius: msgRadius
}
}
HoverHandler {
target : parent
onHoveredChanged: {
localMediaMsgItem.hoveredLink = hovered ? img.source : ""
LinearGradient {
id: gradient
anchors.fill: parent
start: Qt.point(0, height / 3)
gradient: Gradient {
GradientStop {
position: 0.0
color: JamiTheme.transparentColor
}
GradientStop {
position: 1.0
color: JamiTheme.darkGreyColorOpacityFade
}
}
cursorShape: Qt.PointingHandCursor
}
}
}

View File

@ -182,6 +182,8 @@ BaseModalDialog {
Rectangle {
Layout.fillWidth: true
visible: !isSIP
radius: 5
color: root.backgroundColor
@ -242,7 +244,7 @@ BaseModalDialog {
anchors.centerIn: parent
anchors.margins: 15
width: accountRectangle.width
width: parent.width
Image{
id: warningIcon
@ -260,9 +262,6 @@ BaseModalDialog {
Layout.fillWidth: true
Layout.margins: 15
visible: !isSIP
text: JamiStrings.deleteAccountInfos
font.pointSize: JamiTheme.textFontSize

View File

@ -0,0 +1,193 @@
/*
* Copyright (C) 2022-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.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
import net.jami.Models 1.1
Item {
id: root
property string prefixIconSrc: {
switch (nameRegistrationState) {
case UsernameTextEdit.NameRegistrationState.FREE:
return JamiResources.circled_green_check_svg;
case UsernameTextEdit.NameRegistrationState.INVALID:
case UsernameTextEdit.NameRegistrationState.TAKEN:
return JamiResources.circled_red_cross_svg;
case UsernameTextEdit.NameRegistrationState.BLANK:
default:
return JamiResources.person_24dp_svg;
}
}
property color prefixIconColor: {
switch (nameRegistrationState) {
case UsernameTextEdit.NameRegistrationState.FREE:
return "#009980";
case UsernameTextEdit.NameRegistrationState.INVALID:
case UsernameTextEdit.NameRegistrationState.TAKEN:
return "#CC0022";
case UsernameTextEdit.NameRegistrationState.BLANK:
default:
return JamiTheme.editLineColor;
}
}
property bool isActive: false
property string infohash: CurrentAccount.uri
property string accountId: CurrentAccount.id
property string registeredName: CurrentAccount.registeredName
property string staticText: root.isActive ? registeredName : (registeredName ? registeredName : infohash)
property bool editMode: false
signal keyPressed
signal activeChanged(bool active)
property string dynamicText
property QtObject textValidator: RegularExpressionValidator {
regularExpression: /[A-Za-z0-9-]{0,32}/
}
enum NameRegistrationState {
BLANK,
INVALID,
TAKEN,
FREE,
SEARCHING
}
property int nameRegistrationState: UsernameTextEdit.NameRegistrationState.BLANK
property bool inputIsValid: dynamicText.length === 0 || nameRegistrationState === UsernameTextEdit.NameRegistrationState.FREE
signal accepted
property bool btnHovered: false
Connections {
target: CurrentAccount
function onRegisteredNameChanged() {
root.editMode = false;
}
}
Connections {
id: registeredNameFoundConnection
target: NameDirectory
enabled: dynamicText.length !== 0
function onRegisteredNameFound(status, address, name) {
if (dynamicText === name) {
switch (status) {
case NameDirectory.LookupStatus.NOT_FOUND:
nameRegistrationState = UsernameTextEdit.NameRegistrationState.FREE;
break;
case NameDirectory.LookupStatus.ERROR:
case NameDirectory.LookupStatus.INVALID_NAME:
case NameDirectory.LookupStatus.INVALID:
nameRegistrationState = UsernameTextEdit.NameRegistrationState.INVALID;
break;
case NameDirectory.LookupStatus.SUCCESS:
nameRegistrationState = UsernameTextEdit.NameRegistrationState.TAKEN;
break;
}
}
}
}
Timer {
id: lookupTimer
repeat: false
interval: JamiTheme.usernameTextEditlookupInterval
onTriggered: {
if (dynamicText.length !== 0) {
nameRegistrationState = UsernameTextEdit.NameRegistrationState.SEARCHING;
NameDirectory.lookupName(root.accountId, dynamicText);
} else {
nameRegistrationState = UsernameTextEdit.NameRegistrationState.BLANK;
}
}
}
onDynamicTextChanged: lookupTimer.restart()
onActiveChanged: function (active) {
root.isActive = active;
}
onFocusChanged: {
if (focus)
editCompField.forceActiveFocus();
}
function startEditing() {
if (!registeredName) {
root.editMode = true;
editCompField.forceActiveFocus();
nameRegistrationState = UsernameTextEdit.NameRegistrationState.BLANK;
}
}
MaterialTextField {
id: editCompField
anchors.fill: parent
visible: root.editMode
onVisibleChanged: {
if (visible) {
forceActiveFocus();
text = staticText;
}
}
focus: true
infoTipText: JamiStrings.usernameToolTip
prefixIconSrc: root.prefixIconSrc
prefixIconColor: root.prefixIconColor
suffixIconSrc: JamiResources.outline_info_24dp_svg
suffixIconColor: JamiTheme.buttonTintedBlue
textColor: JamiTheme.tintedBlue
font.pixelSize: JamiTheme.jamiIdSmallFontSize
placeholderText: JamiStrings.chooseAUsername
onAccepted: root.accepted()
onRejected: root.editMode = false;
onKeyPressed: root.keyPressed()
onTextChanged: dynamicText = text;
inputIsValid: root.inputIsValid
onFocusChanged: {
if (!focus && root.editMode && !root.btnHovered)
rejected();
activeChanged(root.editMode);
}
onIsActiveChanged: activeChanged(isActive)
validator: root.textValidator
readOnly: !root.editMode
}
}

View File

@ -21,7 +21,7 @@ import QtQuick.Controls
import net.jami.Models 1.1
import net.jami.Constants 1.1
Rectangle {
Control {
id: root
property string icoSource: ""
@ -32,9 +32,7 @@ Rectangle {
width: 190
height: infos.implicitHeight
color: JamiTheme.transparentColor
ColumnLayout {
contentItem: ColumnLayout {
id: infos
anchors.fill: parent
@ -79,6 +77,7 @@ Rectangle {
color: JamiTheme.textColor
wrapMode: Text.WordWrap
text: description
lineHeight: 1.3
}
}
}

View File

@ -29,6 +29,10 @@ Item {
property color backgroundColor: JamiTheme.welcomeBlockColor
property color contentColor: JamiTheme.tintedBlue
property bool centered: true
property bool validated: false
property bool outsideClic: false
property bool justChanged: false
property bool clic : false
height: getHeight()
function getHeight() {
@ -38,9 +42,10 @@ Item {
Connections {
target: CurrentAccount
function onIdChanged(id) {
if (!usernameTextEdit.readOnly) {
usernameTextEdit.readOnly = true;
if (usernameTextEdit.editMode) {
usernameTextEdit.editMode = false;
}
}
}
@ -53,8 +58,7 @@ Item {
RoundedBorderRectangle {
id: leftRect
fillColor: JamiTheme.jamiIdBackgroundColor
Layout.preferredWidth: childrenRect.width
Layout.maximumWidth: jamiId.width - rightRect.width
Layout.preferredWidth: usernameTextEdit.visible ? childrenRect.width + JamiTheme.pushButtonMargins : childrenRect.width
Layout.preferredHeight: childrenRect.height
radius: {
"tl": 5,
@ -71,24 +75,24 @@ Item {
Layout.preferredHeight: 40
containerHeight: 40
containerWidth: 40
Layout.fillHeight: true
Layout.leftMargin: JamiTheme.pushButtonMargins
source: JamiResources.jami_id_logo_svg
color: JamiTheme.tintedBlue
}
UsernameTextEdit {
IdentifierUsernameTextEdit {
id: usernameTextEdit
visible: !readOnly
visible: editMode
Layout.preferredHeight: 40
Layout.preferredWidth: 300
Layout.alignment: Qt.AlignVCenter
textColor: JamiTheme.tintedBlue
fontPixelSize: staticText.length > 16 || dynamicText.length > 16 ? JamiTheme.jamiIdSmallFontSize : JamiTheme.bigFontSize
Layout.fillWidth: true
editMode: false
isPersistent: false
readOnly: true
onAccepted: {
usernameTextEdit.readOnly = true;
usernameTextEdit.editMode = false;
if (dynamicText === '') {
return;
}
@ -96,22 +100,31 @@ Item {
"registeredName": dynamicText
});
dlg.accepted.connect(function () {
usernameTextEdit.nameRegistrationState = UsernameTextEdit.NameRegistrationState.BLANK;
usernameTextEdit.nameRegistrationState = IdentifierUsernameTextEdit.NameRegistrationState.BLANK;
});
dynamicText = '';
}
}
Label{
id: usernameLabel
visible: usernameTextEdit.readOnly
Layout.alignment: Qt.AlignVCenter
visible: !usernameTextEdit.editMode
verticalAlignment: Text.AlignVCenter
Layout.rightMargin: JamiTheme.pushButtonMargins
Layout.bottomMargin: text === registeredName ? 5 : 0
Layout.maximumWidth: leftRect.width - 50
Layout.fillHeight: true
elide: Text.ElideRight
color: JamiTheme.tintedBlue
font.pixelSize : text.length > 16 ? JamiTheme.jamiIdSmallFontSize : JamiTheme.bigFontSize
property string registeredName: CurrentAccount.registeredName
property string infohash: CurrentAccount.uri
text: registeredName ? registeredName : infohash
onRegisteredNameChanged: {
text = registeredName ? registeredName : infohash
}
}
}
}
@ -148,21 +161,32 @@ Item {
if (!usernameTextEdit.editMode)
return true;
switch (usernameTextEdit.nameRegistrationState) {
case UsernameTextEdit.NameRegistrationState.BLANK:
case UsernameTextEdit.NameRegistrationState.FREE:
return true;
case UsernameTextEdit.NameRegistrationState.SEARCHING:
case UsernameTextEdit.NameRegistrationState.INVALID:
case UsernameTextEdit.NameRegistrationState.TAKEN:
case UsernameTextEdit.NameRegistrationState.BLANK:
return false;
}
}
hoverEnabled: enabled
onHoveredChanged: {
if (hovered) {
usernameTextEdit.btnHovered = true;
} else {
usernameTextEdit.btnHovered = false;
}
}
source: usernameTextEdit.editMode ? JamiResources.check_black_24dp_svg : JamiResources.assignment_ind_black_24dp_svg
toolTipText: JamiStrings.chooseUsername
onClicked: {
if (usernameTextEdit.readOnly) {
usernameTextEdit.forceActiveFocus();
if (!usernameTextEdit.editMode) {
usernameTextEdit.startEditing();
usernameTextEdit.readOnly = false;
usernameTextEdit.editMode = true;
} else {
usernameTextEdit.accepted();
}

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

@ -31,6 +31,10 @@ VideoView {
rendererId = id;
} else {
const forceRestart = rendererId === id;
if (!forceRestart) {
// Stop previous device
VideoDevices.stopDevice(rendererId);
}
rendererId = VideoDevices.startDevice(id, forceRestart);
}
}

View File

@ -46,6 +46,7 @@ AbstractButton {
property real textRightPadding
property real fontSize: JamiTheme.buttontextFontPixelSize
property real textAlignment: Text.AlignHCenter
property real textOpacity: 1
checkable: false
checked: false
@ -94,87 +95,72 @@ 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
opacity: root.textOpacity
}
}

View File

@ -37,6 +37,7 @@ Rectangle {
Rectangle {
id: mask
visible: type !== MsgSeq.single && !isReply
z: -1
radius: 5

View File

@ -17,6 +17,7 @@
*/
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
@ -24,6 +25,8 @@ import net.jami.Constants 1.1
BaseModalDialog {
id: root
closeButtonVisible: false
enum PasswordEnteringPurpose {
ChangePassword,
ExportAccount,
@ -74,9 +77,13 @@ BaseModalDialog {
button1Role: DialogButtonBox.ApplyRole
button1.enabled: purpose === PasswordDialog.SetPassword
button2.text: JamiStrings.cancel
button2Role: DialogButtonBox.RejectRole
button2.onClicked: close()
popupContent: ColumnLayout {
id: popupContentColumnLayout
width: JamiTheme.preferredDialogWidth
spacing: 16
@ -136,10 +143,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
@ -151,10 +156,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
@ -167,10 +170,9 @@ 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.bottomMargin: JamiTheme.preferredMarginSize
Layout.fillWidth: true
visible: purpose === PasswordDialog.ChangePassword || purpose === PasswordDialog.SetPassword

View File

@ -34,13 +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)
@ -58,14 +59,13 @@ BaseModalDialog {
importButton.forceActiveFocus()
}
width: JamiTheme.preferredDialogWidth
title: JamiStrings.chooseAvatarPicture
title: JamiStrings.selectImage
RecordBox {
id: recordBox
anchors.centerIn: parent
x: 100
y: 100
isPhoto: true
visible: false
@ -77,18 +77,16 @@ BaseModalDialog {
UtilsAdapter.setTempCreationImageFromString(photo, imageId);
imageValidated();
}
root.close()
}
}
popupContent: RowLayout {
id: buttonsRowLayout
spacing: 10
spacing: 18
PushButton {
JamiPushButton {
id: takePhotoButton
objectName: "takePhotoButton"
@ -97,15 +95,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 ||
@ -127,19 +121,11 @@ BaseModalDialog {
onClicked: {
recordBox.parent = buttonsRowLayout
recordBox.x = Qt.binding(function() {
var buttonCenterX = buttonsRowLayout.width / 2
return buttonCenterX - recordBox.width / 2
})
recordBox.y = Qt.binding(function() {
return - recordBox.height / 2
})
startBooth()
}
}
PushButton {
JamiPushButton {
id: importButton
objectName: "photoboothViewImportButton"
@ -149,16 +135,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 ||
@ -180,7 +161,7 @@ BaseModalDialog {
appWindow,
"commoncomponents/JamiFileDialog.qml",
{
title: JamiStrings.chooseAvatarImage,
title: JamiStrings.selectAvatarImage,
fileMode: JamiFileDialog.OpenFile,
folder: StandardPaths.writableLocation(
StandardPaths.PicturesLocation),
@ -192,14 +173,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"
@ -208,16 +190,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)
@ -245,8 +222,10 @@ BaseModalDialog {
onClicked: {
if (!root.newItem)
AccountAdapter.setCurrentAccountAvatarBase64()
else
UtilsAdapter.setTempCreationImageFromString("", imageId)
else {
UtilsAdapter.setTempCreationImageFromString("", imageId);
imageRemoved();
}
visible = false
stopBooth()
root.close()

View File

@ -59,7 +59,7 @@ Item {
showPresenceIndicator: false
}
PushButton {
JamiPushButton {
id: editImage
width: doubleEditAvatar ? avatar.width / 2 : avatar.width / 4
@ -73,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

@ -49,18 +49,21 @@ Control {
property int timestamp: Timestamp
readonly property real senderMargin: 64
readonly property real avatarSize: 20
readonly property real msgRadius: 20
readonly property real msgRadius: 10
readonly property real hPadding: JamiTheme.sbsMessageBasePreferredPadding
property bool textHovered: false
property alias replyAnimation: selectAnimation
width: listView.width
height: mainColumnLayout.implicitHeight
property real textContentWidth
property real textContentHeight
property bool isReply: ReplyTo !== ""
property real timeWidth: timestampItem.width
property real editedWidth: editedRow.visible ? editedRow.width + 10 : 0
property real maxMsgWidth: root.width - senderMargin - 2 * hPadding - avatarBlockWidth
property bool bigMsg
property bool timeUnderBubble: false
// If the ListView attached properties are not available,
// then the root delegate is likely a Loader.
@ -86,34 +89,24 @@ Control {
spacing: 0
TimestampInfo {
id: timestampItem
id: dateItem
showDay: root.showDay
showTime: root.showTime
formattedTime: root.formattedTime
formattedDay: root.formattedDay
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
Layout.fillHeight: true
}
Item {
id: usernameblock
Layout.preferredHeight: (seq === MsgSeq.first || seq === MsgSeq.single) ? 10 : 0
visible: !isReply
Layout.topMargin: (seq === MsgSeq.first || seq === MsgSeq.single) && !isOutgoing && !root.showTime ? 20 : 0
Label {
id: username
text: UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author)
font.bold: true
visible: (seq === MsgSeq.first || seq === MsgSeq.single) && !isOutgoing
font.pointSize: JamiTheme.smallFontSize
color: JamiTheme.chatviewSecondaryInformationColor
lineHeight: JamiTheme.usernameBlockLineHeight
leftPadding: JamiTheme.usernameBlockPadding
textFormat: TextEdit.PlainText
}
Label {
id: username
text: UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author)
visible: (seq === MsgSeq.first || seq === MsgSeq.single) && !isOutgoing && !isReply
font.pointSize: JamiTheme.smallFontSize
color: JamiTheme.chatviewSecondaryInformationColor
leftPadding: JamiTheme.usernameBlockPadding
textFormat: TextEdit.PlainText
}
Item {
@ -212,8 +205,18 @@ Control {
RowLayout {
id: msgRowlayout
Layout.preferredHeight: innerContent.height + root.extraHeight + (emojiReactions.emojis === "" ? 0 : emojiReactions.height - 8)
Layout.topMargin: ((seq === MsgSeq.first || seq === MsgSeq.single) && !root.isReply) ? 6 : 0
Layout.preferredHeight: {
var h = innerContent.height + root.extraHeight;
if (emojiReactions.emojis !== "")
h += emojiReactions.height - 8;
if ((IsEmojiOnly && (root.seq === MsgSeq.last || root.seq === MsgSeq.single) && emojiReactions.emojis === ""))
h += 15;
if (root.timeUnderBubble)
h += 25;
return h;
}
Layout.topMargin: ((seq === MsgSeq.first || seq === MsgSeq.single) && !root.isReply) ? 3.5 : 0
Layout.bottomMargin: root.bigMsg ? timestampItem.timeLabel.height : 0
Item {
id: avatarBlock
@ -238,20 +241,6 @@ Control {
Layout.fillHeight: true
Layout.fillWidth: true
MouseArea {
id: bubbleArea
anchors.fill: bubble
hoverEnabled: true
onClicked: function (mouse) {
if (root.hoveredLink) {
MessagesAdapter.openUrl(root.hoveredLink);
}
}
property bool bubbleHovered: containsMouse || textHovered
}
Column {
id: innerContent
@ -351,18 +340,107 @@ Control {
id: bubble
property bool isEdited: PreviousBodies.length !== 0
visible: !IsEmojiOnly
property bool isDeleted: false
z: -1
out: isOutgoing
type: seq
isReply: root.isReply
color: root.getBaseColor()
color: IsEmojiOnly ? "transparent" : root.getBaseColor()
radius: msgRadius
anchors.right: isOutgoing ? parent.right : undefined
anchors.top: parent.top
width: Type === Interaction.Type.TEXT && !isEdited ? root.textContentWidth : innerContent.childrenRect.width
height: innerContent.childrenRect.height + (visible ? root.extraHeight : 0)
property real timePosition: JamiTheme.emojiMargins + emojiReactions.width + 8
property alias timestampItem: timestampItem
property bool bubbleHovered
property string imgSource
width: (Type === Interaction.Type.TEXT ? root.textContentWidth : innerContent.childrenRect.width)
height: innerContent.childrenRect.height + (visible ? root.extraHeight : 0) + (root.bigMsg ? 15 : 0)
HoverHandler {
target: root
enabled: Type === Interaction.Type.DATA_TRANSFER
onHoveredChanged: {
root.hoveredLink = enabled && hovered ? bubble.imgSource : ""
}
}
TimestampInfo {
id: timestampItem
showTime: IsEmojiOnly && !(root.seq === MsgSeq.last || root.seq === MsgSeq.single) ? false : true
formattedTime: root.formattedTime
timeColor: IsEmojiOnly || root.timeUnderBubble? (JamiTheme.darkTheme ? "white" : "dark") : (UtilsAdapter.luma(bubble.color) ? "white" : "dark")
timeLabel.opacity: 0.5
anchors.bottom: parent.bottom
anchors.right: IsEmojiOnly ? (isOutgoing ? parent.right : undefined) : parent.right
anchors.left: ((IsEmojiOnly|| root.timeUnderBubble) && !isOutgoing) ? parent.left : undefined
anchors.leftMargin: (IsEmojiOnly && !isOutgoing && emojiReactions.visible) ? bubble.timePosition : 0
anchors.rightMargin: IsEmojiOnly ? ((isOutgoing && emojiReactions.visible) ? bubble.timePosition : 0) : (root.timeUnderBubble ? 0 : 10)
timeLabel.Layout.bottomMargin: {
if (IsEmojiOnly)
return -15;
if (root.timeUnderBubble)
return -20;
if (root.bigMsg || bubble.isDeleted)
return 5;
return 9;
}
}
RowLayout {
id: editedRow
anchors.left: root.bigMsg ? bubble.left : timestampItem.left
anchors.bottom: parent.bottom
anchors.bottomMargin: root.bigMsg || bubble.isDeleted ? 6 : 10
anchors.leftMargin: root.bigMsg ? 10 : - timestampItem.width - 10
visible: bubble.isEdited
z: 1
ResponsiveImage {
id: editedImage
source: JamiResources.round_edit_24dp_svg
width: 12
height: 12
color: editedLabel.color
opacity: 0.5
}
Text {
id: editedLabel
text: JamiStrings.edited
color: UtilsAdapter.luma(bubble.color) ? "white" : "dark"
opacity: 0.5
font.pixelSize: JamiTheme.timestampFont
}
TapHandler {
acceptedButtons: Qt.LeftButton
onTapped: {
viewCoordinator.presentDialog(appWindow, "commoncomponents/EditedPopup.qml", {
"previousBodies": PreviousBodies
});
}
}
}
MouseArea {
id: bubbleArea
anchors.fill: parent
hoverEnabled: true
onClicked: function (mouse) {
if (root.hoveredLink) {
MessagesAdapter.openUrl(root.hoveredLink);
}
}
property bool bubbleHovered: containsMouse || textHovered
cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
}
}
EmojiReactions {
@ -376,7 +454,7 @@ Control {
borderColor: root.getBaseColor()
maxWidth: 2 / 3 * maxMsgWidth - JamiTheme.emojiMargins
state: root.isOutgoing ? "anchorsRight" : (emojiReactions.width > bubble.width - JamiTheme.emojiMargins ? "anchorsLeft" : "anchorsRight")
state: root.isOutgoing ? "anchorsRight" : (IsEmojiOnly ? "anchorsLeft" :(emojiReactions.width > bubble.width - JamiTheme.emojiMargins ? "anchorsLeft" : "anchorsRight"))
TapHandler {
onTapped: {
@ -519,7 +597,7 @@ Control {
orientation: ListView.Horizontal
Layout.preferredHeight: {
if (showTime || seq === MsgSeq.last)
return contentHeight + timestampItem.contentHeight;
return contentHeight + dateItem.contentHeight;
else if (readsMultiple.visible)
return JamiTheme.avatarReadReceiptSize;
return 0;

View File

@ -40,7 +40,7 @@ BaseContextMenu {
property bool closeWithoutAnimation: false
property var emojiPicker
function xPositionProvider(width) {
function xPosition(width) {
// Use the width at function scope to retrigger property evaluation.
const listViewWidth = listView.width;
const parentX = parent.x;
@ -51,9 +51,30 @@ BaseContextMenu {
}
}
x: xPositionProvider(width)
x: xPosition(width)
y: parent.y
function xPositionProvider(width) {
// Use the width at function scope to retrigger property evaluation.
const listViewWidth = listView.width;
if (isOutgoing) {
return -5 - width;
} else {
const rightMargin = listViewWidth - (msgBubble.x + width);
return width > rightMargin + 35 ? -5 - width : 35;
}
}
function yPositionProvider(height) {
const topOffset = msgBubble.mapToItem(listView, 0, 0).y;
const listViewHeight = listView.height;
const bottomMargin = listViewHeight - height - topOffset;
if (bottomMargin < 0 || (topOffset < 0 && topOffset + height > 0)) {
return 30 - height;
} else {
return 0;
}
}
signal addMoreEmoji
onAddMoreEmoji: {
JamiQmlUtils.updateMessageBarButtonsPoints();
@ -74,7 +95,6 @@ BaseContextMenu {
});
if (emojiPicker !== null) {
root.opacity = 0;
emojiPicker.closed.connect(() => close());
emojiPicker.x = xPositionProvider(JamiTheme.emojiPickerWidth);
emojiPicker.y = yPositionProvider(JamiTheme.emojiPickerHeight);
emojiPicker.open();
@ -83,11 +103,8 @@ BaseContextMenu {
}
}
// Close the picker when listView vertical properties change.
property real listViewHeight: listView.height
onListViewHeightChanged: close()
property bool isScrolling: listView.verticalScrollBar.active
onIsScrollingChanged: close()
onOpened: root.closeWithoutAnimation = false
onClosed: if (emojiPicker)

View File

@ -33,6 +33,8 @@ SBSMessageBase {
property string colorUrl: UtilsAdapter.luma(bubble.color) ? JamiTheme.chatviewLinkColorLight : JamiTheme.chatviewLinkColorDark
property string colorText: UtilsAdapter.luma(bubble.color) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
Connections {
target: bubble
function onColorChanged(color) {
@ -44,6 +46,7 @@ SBSMessageBase {
}
}
isOutgoing: Author === CurrentAccount.uri
author: Author
readers: Readers
@ -55,18 +58,25 @@ SBSMessageBase {
textContentWidth: textEditId.width
textContentHeight: textEditId.height
bigMsg: textContentWidth >= (2 / 3) * root.maxMsgWidth || extraContent.active
innerContent.children: [
TextEdit {
id: textEditId
padding: isEmojiOnly ? 0 : JamiTheme.preferredMarginSize
padding: isEmojiOnly ? 5 : 10
topPadding: bubble.isDeleted ? 6 : 10
bottomPadding: bubble.isDeleted ? 6 : 10
anchors.right: isOutgoing ? parent.right : undefined
text: {
if (Body !== "" && ParsedBody.length === 0) {
MessagesAdapter.parseMessage(Id, Body, UtilsAdapter.getAppValue(Settings.DisplayHyperlinkPreviews), root.colorUrl, bubble.color);
return "";
}
return (ParsedBody !== "") ? ParsedBody : "<i>(" + JamiStrings.deletedMessage + ")</i>";
if (ParsedBody !== "")
return ParsedBody;
bubble.isDeleted = true;
return UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author) + " " + JamiStrings.deletedMessage ;
}
horizontalAlignment: Text.AlignLeft
@ -80,12 +90,12 @@ SBSMessageBase {
else if (isEmojiOnly)
Math.min((2 / 3) * root.maxMsgWidth, implicitWidth, innerContent.width - senderMargin - (innerContent.width - senderMargin) % (JamiTheme.chatviewEmojiSize + 2));
else
Math.min((2 / 3) * root.maxMsgWidth, implicitWidth, innerContent.width - senderMargin);
Math.min((2 / 3) * root.maxMsgWidth, implicitWidth + 5 + root.timeWidth + root.editedWidth, innerContent.width - senderMargin + 5 + root.timeWidth + root.editedWidth);
}
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
selectByMouse: true
font.pointSize: isEmojiOnly ? JamiTheme.chatviewEmojiSize : JamiTheme.mediumFontSize
font.pointSize: isEmojiOnly ? JamiTheme.chatviewEmojiSize : (ParsedBody === "" ? JamiTheme.smallFontSize : JamiTheme.mediumFontSize)
font.hintingPreference: Font.PreferNoHinting
renderType: Text.NativeRendering
textFormat: Text.RichText
@ -93,7 +103,8 @@ SBSMessageBase {
onLinkHovered: root.hoveredLink = hoveredLink
onLinkActivated: Qt.openUrlExternally(new URL(hoveredLink))
readOnly: true
color: getBaseColor()
color: (ParsedBody !== "") ? getBaseColor() : (UtilsAdapter.luma(bubble.color) ? "white" : "dark")
opacity:(ParsedBody !== "") ? 1 : 0.5
function getBaseColor() {
var baseColor;
@ -126,54 +137,13 @@ SBSMessageBase {
selectOnly: parent.readOnly
}
},
RowLayout {
id: editedRow
anchors.right: isOutgoing ? parent.right : undefined
visible: PreviousBodies.length !== 0
ResponsiveImage {
id: editedImage
Layout.leftMargin: JamiTheme.preferredMarginSize
Layout.bottomMargin: JamiTheme.preferredMarginSize
source: JamiResources.round_edit_24dp_svg
width: JamiTheme.editedFontSize
height: JamiTheme.editedFontSize
layer {
enabled: true
effect: ColorOverlay {
color: editedLabel.color
}
}
}
Text {
id: editedLabel
Layout.rightMargin: JamiTheme.preferredMarginSize
Layout.bottomMargin: JamiTheme.preferredMarginSize
text: JamiStrings.edited
color: root.colorText
font.pointSize: JamiTheme.editedFontSize
TapHandler {
acceptedButtons: Qt.LeftButton
onTapped: {
viewCoordinator.presentDialog(appWindow, "commoncomponents/EditedPopup.qml", {
"previousBodies": PreviousBodies
});
}
}
}
},
Loader {
id: extraContent
anchors.right: isOutgoing ? parent.right : undefined
property real minSize: 192
property real maxSize: 320
property real maxSize: 400
active: LinkPreviewInfo.url !== undefined
sourceComponent: ColumnLayout {
id: previewContent
@ -231,7 +201,7 @@ SBSMessageBase {
Layout.preferredWidth: img.width - 2 * hPadding
Layout.leftMargin: hPadding
Layout.rightMargin: hPadding
spacing: 6
spacing: 4
Label {
width: parent.width
font.pointSize: 10
@ -242,10 +212,11 @@ SBSMessageBase {
color: root.colorText
visible: LinkPreviewInfo.title.length > 0
text: LinkPreviewInfo.title
lineHeight: 1.3
}
Label {
width: parent.width
font.pointSize: 11
font.pointSize: 10
font.hintingPreference: Font.PreferNoHinting
wrapMode: Label.WrapAtWordBoundaryOrAnywhere
renderType: Text.NativeRendering
@ -254,6 +225,7 @@ SBSMessageBase {
font.underline: root.hoveredLink
text: LinkPreviewInfo.description
color: root.colorUrl
lineHeight: 1.3
}
Label {
width: parent.width
@ -264,6 +236,7 @@ SBSMessageBase {
textFormat: TextEdit.RichText
color: root.colorText
text: LinkPreviewInfo.domain
lineHeight: 1.3
}
}
}

View File

@ -31,6 +31,8 @@ ColumnLayout {
property string formattedTime
property string formattedDay
property real detailsOpacity: 0.6
property color timeColor: JamiTheme.chatviewSecondaryInformationColor
property alias timeLabel: formattedTimeLabel
spacing: 0
@ -97,8 +99,8 @@ ColumnLayout {
Layout.topMargin: 30
Layout.bottomMargin: 30
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
color: JamiTheme.chatviewSecondaryInformationColor
visible: showTime || showDay
color: root.timeColor
visible: showTime
Layout.preferredHeight: visible * implicitHeight
font.pointSize: JamiTheme.smallFontSize
}

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

@ -44,7 +44,6 @@ ConnectionInfoListModel::data(const QModelIndex& index, int role) const
}
const auto peerId = peerIds_[index.row()];
const auto peerData = peerData_[peerId];
switch (role) {
case ConnectionInfoList::ChannelsMap: {
QVariantMap channelsMapMap;

View File

@ -71,12 +71,27 @@ Item {
return Math.min(Math.max(val, min), max);
}
function isDonationBannerVisible() {
property bool isDonationBannerVisible: getIsDonationBannerVisible()
Connections {
target: UtilsAdapter
function onDonationCampaignSettingsChanged() {
// Changing any of the donation campaign settings will trigger a recompute
// of the banner visibility.
updateIsDonationBannerVisible();
}
}
function updateIsDonationBannerVisible() {
isDonationBannerVisible = getIsDonationBannerVisible();
}
function getIsDonationBannerVisible() {
// 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.Donation2023EndDate)));
var donationVisibleDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate)));
return new Date() < endDonationDate && new Date() > donationVisibleDate && isDonationVisible;
const isVisible = UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible);
const endDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023EndDate));
const startDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate));
const now = new Date();
return isVisible && now < endDate && now >= startDate;
}
}

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")
@ -340,7 +344,7 @@ Item {
property string backendError: qsTr("This is the error from the backend: %0")
property string disabledAccount: qsTr("The account is disabled")
property string noNetworkConnectivity: qsTr("No network connectivity")
property string deletedMessage: qsTr("Deleted message")
property string deletedMessage: qsTr("deleted a message")
property string backCall: qsTr("Back to Call")
//MessagesResearch
@ -350,7 +354,6 @@ Item {
property string search: qsTr("Search")
// Chatview footer
property string scrollToEnd: qsTr("Scroll to end of conversation")
property string typeIndicatorSingle: qsTr("{} is typing…")
property string typeIndicatorPlural: qsTr("{} are typing…")
property string typeIndicatorMax: qsTr("Several people are typing…")
@ -606,12 +609,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 +626,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")
@ -767,6 +771,9 @@ Item {
property string edit: qsTr("Edit")
property string edited: qsTr("Edited")
property string joinCall: qsTr("Join call")
property string joinInAudio: qsTr("Join in audio")
property string joinInVideo: qsTr("Join in video")
property string startedACall: qsTr("Started a 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 selectHost: qsTr("Select dedicated device for hosting future calls in this swarm. If not set, the host will be the device starting a call.")

View File

@ -145,6 +145,8 @@ Item {
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"
@ -161,11 +163,18 @@ 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
property color spinboxBorderColor: darkTheme ? "#1D5F70" : "#A3C2DA"
//RecordBox
property color screenshotButtonColor: "#CC0022"
property color recordBoxcloseButtonColor: "#8d8a87"
property color recordBoxHoverColor: "#4D4D4D"
property color recordBoxButtonColor: "#272727"
// Toast
property color toastColor: darkTheme ? "#f0f0f0" : "#000000"
property color toastRectColor: !darkTheme ? "#f0f0f0" : "#000000"
@ -226,7 +235,7 @@ Item {
property color timestampColor: darkTheme ? "#515151" : "#E5E5E5"
property color messageReplyColor: darkTheme ? "#bbb" : "#A7A7A7"
property color messageOutTxtColor: "#000000"
property color messageInBgColor: darkTheme ? "#303030" : "#dbdbdb"
property color messageInBgColor: darkTheme ? "#303030" : "#e5e5e5"
property color messageOutBgColor: darkTheme ? "#616161" : "#005699"
property color messageInTxtColor: "#FFFFFF"
property color fileOutTimestampColor: darkTheme ? "#eee" : "#555"
@ -245,6 +254,7 @@ Item {
property color previewUrlColor: darkTheme ? "#eeeeee" : "#333"
property color messageWebViewFooterButtonImageColor: darkTheme ? "#838383" : "#656565"
property color chatviewSecondaryInformationColor: "#A7A7A7"
property color draftIconColor: "#707070"
// ChatView Footer
property color chatViewFooterListColor: darkTheme ? blackColor : "#E5E5E5"
@ -287,6 +297,11 @@ Item {
// Files To Send Container
property color removeFileButtonColor: Qt.rgba(96, 95, 97, 0.5)
property color removeFileButtonHoverColor: "#DEDEDE"
property color fileIconDarkColor: "#656565"
property color fileIconLightColor: "#A6A6A6"
property color fileIconColor: darkTheme ? "#A6A6A6" : "#656565"
property color fileBackgroundColor: darkTheme ? "#515151" : "#c3c3c3"
// JamiScrollBar
property color scrollBarHandleColor: "#cecece"
@ -411,6 +426,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
@ -446,7 +462,6 @@ Item {
property real switchPreferredWidth: 40
property real switchIndicatorPreferredWidth: 20
// Modal Popup
property real modalPopupRadius: 20
property real photoPopupRadius: 5
@ -485,8 +500,8 @@ Item {
property real filesToSendDelegateHeight: 100
property real filesToSendDelegateRadius: 7
property real filesToSendDelegateButtonSize: 16
property real filesToSendDelegateFontPointSize: calcSize(9 + fontSizeOffset)
property real layoutWidthFileTransfer: 80
property real filesToSendDelegateFontPointSize: calcSize(10 + fontSizeOffset)
property real layoutWidthFileTransfer: 56
// SBSMessageBase
property int sbsMessageBasePreferredPadding: 12
@ -542,7 +557,6 @@ Item {
property real wizardViewBlocMarginSize: pixelToPoint(40)
property real wizardViewDescriptionMarginSize: pixelToPoint(20)
// WizardView Welcome Page
property real welcomeLabelPointSize: 30
property var welcomeLogo: darkTheme ? JamiResources.logo_jami_standard_coul_white_svg : JamiResources.logo_jami_standard_coul_svg

View File

@ -33,11 +33,11 @@ ContactAdapter::ContactAdapter(LRCInstance* instance, QObject* parent)
selectableProxyModel_.reset(new SelectableProxyModel(this));
if (lrcInstance_) {
connectSignals();
connect(lrcInstance_,
&LRCInstance::currentAccountIdChanged,
this,
&ContactAdapter::connectSignals);
connectSignals();
}
}
@ -261,8 +261,7 @@ ContactAdapter::updateConnectionInfo()
void
ContactAdapter::connectSignals()
{
if (!lrcInstance_->getCurrentContactModel()) {
qWarning() << Q_FUNC_INFO << "No contact model";
if (lrcInstance_->get_currentAccountId().isEmpty()) {
return;
}

View File

@ -58,7 +58,7 @@ ConversationListModel::ConversationListModel(LRCInstance* instance, QObject* par
connect(model_, &ConversationModel::dataChanged, this, [this](int position) {
const auto index = createIndex(position, 0);
Q_EMIT ConversationListModel::dataChanged(index, index);
});
}, Qt::QueuedConnection);
}
int

View File

@ -90,6 +90,9 @@ CurrentAccount::get_isLocalModeratorsEnabled()
void
CurrentAccount::setupForAccount()
{
if (lrcInstance_->get_currentAccountId().isEmpty())
return;
connect(lrcInstance_->getCurrentContactModel(),
&ContactModel::bannedStatusChanged,
this,

View File

@ -20,7 +20,6 @@
#include "mainapplication.h"
#include "instancemanager.h"
#include "utils.h"
#include "version.h"
#include <QCryptographicHash>
@ -41,38 +40,11 @@
#ifndef ENABLE_TESTS
static char**
parseInputArgument(int& argc, char* argv[], QList<char*> argsToParse)
{
/*
* Forcefully append argsToParse.
*/
int oldArgc = argc;
argc += argsToParse.size();
auto newArgv = new char*[argc];
for (int i = 0; i < oldArgc; i++) {
newArgv[i] = argv[i];
}
for (int i = oldArgc; i < argc; i++) {
newArgv[i] = argsToParse.at(i - oldArgc);
}
return newArgv;
}
#ifdef WITH_WEBENGINE
// Qt WebEngine Chromium Flags
static char disableWebSecurity[] {"--disable-web-security"};
static char singleProcess[] {"--single-process"};
#endif
int
main(int argc, char* argv[])
{
setlocale(LC_ALL, "en_US.utf8");
QList<char*> qtWebEngineChromiumFlags;
#ifdef Q_OS_LINUX
if (!getenv("QT_QPA_PLATFORMTHEME")) {
auto xdgEnv = qgetenv("XDG_CURRENT_DESKTOP");
@ -82,6 +54,14 @@ main(int argc, char* argv[])
}
setenv("QML_DISABLE_DISK_CACHE", "1", true);
/*
* Not quite sure why the GTK theme is not applied on Wayland when
* using the wayland platform plugin, but we can force XCB to make
* sure it works when X11 is available, otherwise fallback to Wayland.
* Could be related to: https://bugreports.qt.io/browse/QTBUG-99684.
*/
setenv("QT_QPA_PLATFORM", "xcb:wayland", true);
/*
* Some GNU/Linux distros, like Zorin OS, set QT_STYLE_OVERRIDE
* to force a particular Qt style. This has been fine with Qt5
@ -94,10 +74,6 @@ main(int argc, char* argv[])
*/
unsetenv("QT_STYLE_OVERRIDE");
#endif
#ifdef WITH_WEBENGINE
qtWebEngineChromiumFlags << disableWebSecurity;
qtWebEngineChromiumFlags << singleProcess;
#endif
QApplication::setApplicationName(QStringLiteral("Jami"));
QApplication::setOrganizationDomain(QStringLiteral("jami.net"));
@ -107,9 +83,15 @@ main(int argc, char* argv[])
QApplication::setHighDpiScaleFactorRoundingPolicy(
Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
auto newArgv = parseInputArgument(argc, argv, qtWebEngineChromiumFlags);
#ifdef WITH_WEBENGINE
qputenv("QTWEBENGINE_CHROMIUM_FLAGS",
"--disable-web-security"
" --single-process");
QtWebEngineQuick::initialize();
#endif
MainApplication app(argc, argv);
MainApplication app(argc, newArgv);
app.setDesktopFileName(QStringLiteral("jami"));
#if defined(Q_OS_MACOS)
if (macutils::isMetalSupported()) {

View File

@ -135,10 +135,19 @@ MainApplication::init()
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"));
@ -191,6 +200,7 @@ MainApplication::init()
auto startMinimizedSetting = settingsManager_->getValue(Settings::Key::StartMinimized).toBool();
// The presence of start URI should override the startMinimized setting for this instance.
set_startMinimized(startMinimizedSetting && runOptions_[Option::StartUri].isNull());
#ifdef WITH_WEBENGINE
engine_.get()->rootContext()->setContextProperty("WITH_WEBENGINE", QVariant(true));
#else
@ -280,16 +290,6 @@ MainApplication::parseArguments()
parser.addHelpOption();
parser.addVersionOption();
// These options are potentially forced into the arg list.
QCommandLineOption webSecurityDisableOption(QStringList() << "disable-web-security");
parser.addOption(webSecurityDisableOption);
QCommandLineOption noSandboxOption(QStringList() << "no-sandbox");
parser.addOption(noSandboxOption);
QCommandLineOption singleProcessOption(QStringList() << "single-process");
parser.addOption(singleProcessOption);
QCommandLineOption webDebugOption(QStringList() << "remote-debugging-port",
"Web debugging port.",
"port");
@ -368,7 +368,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
@ -400,9 +406,10 @@ MainApplication::initSystray()
}
});
systrayMenu->addAction(restoreAction);
systrayMenu->addAction(quitAction);
systemTray_->setContextMenu(systrayMenu);
menu->addAction(restoreAction);
menu->addAction(quitAction);
systemTray_->setContextMenu(menu);
systemTray_->show();
}

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,100 @@ 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.leftMargin: 5
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: 10
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
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
}
}
}
}
@ -168,19 +169,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 +182,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 +193,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,178 @@ Popup {
contentItem: ColumnLayout {
spacing: 0
anchors.leftMargin: 20
Rectangle {
id: comboBox
height: JamiTheme.accountListItemHeight - 5
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 {
id: accountInfoRect
Layout.fillWidth: true
Layout.fillHeight: true
color: mouseArea.containsMouse ? JamiTheme.hoverColor : JamiTheme.accountComboBoxBackgroundColor
radius: 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: 10
Layout.topMargin: -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 +235,7 @@ Popup {
inverted: true
}
}
delegate: AccountItemDelegate {
height: JamiTheme.accountListItemHeight
width: root.width
@ -70,45 +246,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 +372,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

@ -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

@ -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

@ -33,7 +33,7 @@ Rectangle {
function setFilePathsToSend(filePaths) {
for (var index = 0; index < filePaths.length; ++index) {
var path = UtilsAdapter.getAbsPath(decodeURIComponent(filePaths[index]));
dataTransferSendContainer.filesToSendListModel.addToPending(path);
messageBar.fileContainer.filesToSendListModel.addToPending(path);
}
}
@ -67,7 +67,7 @@ Rectangle {
target: MessagesAdapter
function onNewFilePasted(filePath) {
dataTransferSendContainer.filesToSendListModel.addToPending(filePath);
messageBar.fileContainer.filesToSendListModel.addToPending(filePath);
}
function onNewTextPasted() {
@ -168,7 +168,7 @@ Rectangle {
return -JamiTheme.emojiPickerHeight;
}
sendButtonVisibility: text || dataTransferSendContainer.filesToSendCount
sendButtonVisibility: text || messageBar.fileContainer.filesToSendCount
onEmojiButtonClicked: {
if (emojiPicker != null && emojiPicker.opened) {
@ -193,24 +193,26 @@ Rectangle {
}
onVideoRecordMessageButtonClicked: {
recordBox.y = -recordBox.height;
recordBox.y = -recordBox.height - 200;
recordBox.x = recordBox.width + 200
recordBox.openRecorder(true);
}
onAudioRecordMessageButtonClicked: {
recordBox.y = -recordBox.height;
recordBox.y = -recordBox.height - 150;
recordBox.x = recordBox.width + 200;
recordBox.openRecorder(false);
}
onSendMessageButtonClicked: {
// Send file messages
var fileCounts = dataTransferSendContainer.filesToSendListModel.rowCount();
var fileCounts = messageBar.fileContainer.filesToSendListModel.rowCount();
for (var i = 0; i < fileCounts; i++) {
var currentIndex = dataTransferSendContainer.filesToSendListModel.index(i, 0);
var filePath = dataTransferSendContainer.filesToSendListModel.data(currentIndex, FilesToSend.FilePath);
var currentIndex = messageBar.fileContainer.filesToSendListModel.index(i, 0);
var filePath = messageBar.fileContainer.filesToSendListModel.data(currentIndex, FilesToSend.FilePath);
MessagesAdapter.sendFile(filePath);
}
dataTransferSendContainer.filesToSendListModel.flush();
messageBar.fileContainer.filesToSendListModel.flush();
// Send text message
if (messageBar.text) {
if (MessagesAdapter.editId !== "") {
@ -233,16 +235,5 @@ Rectangle {
}
}
}
FilesToSendContainer {
id: dataTransferSendContainer
objectName: "dataTransferSendContainer"
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
Layout.rightMargin: 10
Layout.preferredHeight: filesToSendCount ? JamiTheme.filesToSendDelegateHeight : 0
}
}
}

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

@ -26,10 +26,8 @@ import "../../commoncomponents"
JamiListView {
id: root
// the following should be marked required (Qtver >= 5.15)
// along with `required model`
property string headerLabel
property bool headerVisible
required property string headerLabel
required property bool headerVisible
delegate: SmartListItemDelegate {
}

View File

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

View File

@ -14,135 +14,87 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
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"
import "../../settingsview/components"
Rectangle {
id: donation
Control {
id: control
property bool donationVisible: JamiQmlUtils.isDonationBannerVisible()
width: parent.width - 30
height: donationTextRect.height + 45 > donationIcon.height + 20 ? donationTextRect.height + 45 : donationIcon.height + 20
radius: 5
color: JamiTheme.donationBackgroundColor
GridLayout {
id: donationLayout
function bumpDonationReminderVisibility() {
// Calculate the time 7 days from now
var futureDate = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000);
var formattedDate = Qt.formatDateTime(futureDate, "yyyy-MM-dd hh:mm");
UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, formattedDate);
}
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
columns: 3
rows: 2
rowSpacing: 0
columnSpacing: 10
onClicked: Qt.openUrlExternally(JamiTheme.donationUrl)
}
Rectangle {
id: donationIcon
Layout.row: 0
Layout.column: 0
Layout.rowSpan: 2
Layout.preferredHeight: 70
Layout.preferredWidth: 45
Layout.leftMargin: 10
Layout.topMargin: 10
Layout.bottomMargin: 15
color: JamiTheme.transparentColor
Image {
id: donationImage
height: parent.height
width: 50
anchors.centerIn: parent
source: JamiResources.icon_donate_svg
}
padding: 10
background: Rectangle {
color: JamiTheme.donationBackgroundColor
radius: 5
}
contentItem: RowLayout {
spacing: 16
Image {
// The image fades to the top, so align it to the bottom.
Layout.alignment: Qt.AlignVCenter
source: JamiResources.icon_donate_svg
}
Rectangle {
id: donationTextRect
ColumnLayout {
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
spacing: 8
Layout.topMargin: 10
Layout.row: 0
Layout.column: 1
Layout.columnSpan: 2
Layout.preferredHeight: donationText.height
Layout.preferredWidth: parent.width - 74
Layout.bottomMargin: 5
color: JamiTheme.transparentColor
Label {
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
Layout.alignment: Qt.AlignTop
Text {
id: donationText
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
width: parent.width
height: contentHeight
text: JamiStrings.donationText
wrapMode: Text.WordWrap
font.pointSize: JamiTheme.textFontSize
}
}
Rectangle {
id: notNowRect
Layout.row: 1
Layout.column: 1
Layout.preferredHeight: 30
Layout.preferredWidth: (parent.width - 55) / 2
color: JamiTheme.transparentColor
Text {
id: notNowText
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", " "));
donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible());
RowLayout {
spacing: 32
Layout.alignment: Qt.AlignBaseline
component BannerButton : PushButton {
id: bannerButton
contentItem: Text {
text: bannerButton.text
color: JamiTheme.donationButtonTextColor
font.pointSize: JamiTheme.textFontSize
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: bannerButton.clicked()
}
}
background: null
}
text: JamiStrings.notNow
color: JamiTheme.donationButtonTextColor
anchors.top: parent.top
anchors.left: parent.left
font.pointSize: JamiTheme.textFontSize
}
}
Rectangle {
id: donateRect
Layout.row: 1
Layout.column: 2
Layout.preferredHeight: 30
Layout.preferredWidth: (parent.width - 50) / 2
color: JamiTheme.transparentColor
Text {
id: donateText
MouseArea {
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
onClicked: {
Qt.openUrlExternally(JamiTheme.donationUrl);
}
// Clicking "Not now" sets the donation date to 7 days from now.
BannerButton {
text: JamiStrings.notNow
onClicked: bumpDonationReminderVisibility()
}
BannerButton {
text: JamiStrings.donation
onClicked: Qt.openUrlExternally(JamiTheme.donationUrl)
}
text: JamiStrings.donation
font.pointSize: JamiTheme.textFontSize
color: JamiTheme.donationButtonTextColor
anchors.top: parent.top
anchors.left: parent.left
}
}
}

View File

@ -59,7 +59,7 @@ Rectangle {
delegate: FilesToSendDelegate {
anchors.verticalCenter: filesToSendContainerRow.verticalCenter
height: JamiTheme.filesToSendDelegateHeight
height: JamiTheme.layoutWidthFileTransfer
onRemoveFileButtonClicked: function (index) {
filesToSendListModel.removeFromPending(index);

View File

@ -17,6 +17,7 @@
*/
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt5Compat.GraphicalEffects
import net.jami.Adapters 1.1
import net.jami.Constants 1.1
@ -40,130 +41,92 @@ Item {
id: mainRect
radius: JamiTheme.filesToSendDelegateRadius
Layout.preferredHeight: root.height - 4 * margin
Layout.preferredHeight: JamiTheme.layoutWidthFileTransfer
Layout.preferredWidth: JamiTheme.layoutWidthFileTransfer
color: JamiTheme.transparentColor
color: JamiTheme.fileBackgroundColor
Rectangle {
id: rect
ResponsiveImage {
id: fileIcon
visible: !IsImage
anchors.fill: parent
anchors.margins: 17
containerHeight: 20
source: JamiResources.link_black_24dp_svg
cache: false
color: JamiTheme.fileIconColor
}
AnimatedImage {
id: name
anchors.fill: parent
color: fileIcon.visible ? CurrentConversation.color : JamiTheme.transparentColor
layer.enabled: true
cache: false
layer.effect: OpacityMask {
maskSource: Item {
width: rect.width
height: rect.height
Rectangle {
anchors.centerIn: parent
width: rect.width
height: rect.height
radius: JamiTheme.chatViewFooterButtonRadius
}
}
asynchronous: true
fillMode: Image.PreserveAspectCrop
source: {
if (!IsImage)
return "";
// :/ -> resource url for test purposes
var sourceUrl = FilePath;
if (!sourceUrl.startsWith(":/"))
return JamiQmlUtils.qmlFilePrefix + sourceUrl;
else
return "qrc" + sourceUrl;
}
Rectangle {
anchors.fill: parent
anchors.margins: fileIcon.visible ? margin : 0
radius: JamiTheme.chatViewFooterButtonRadius
color: JamiTheme.secondaryBackgroundColor
ResponsiveImage {
id: fileIcon
visible: !IsImage
anchors.fill: parent
anchors.margins: 14
source: JamiResources.attached_file_svg
cache: false
color: JamiTheme.textColor
}
AnimatedImage {
id: name
anchors.fill: parent
cache: false
asynchronous: true
fillMode: Image.PreserveAspectCrop
source: {
if (!IsImage)
return "";
// :/ -> resource url for test purposes
var sourceUrl = FilePath;
if (!sourceUrl.startsWith(":/"))
return JamiQmlUtils.qmlFilePrefix + sourceUrl;
else
return "qrc" + sourceUrl;
}
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: mainRect.width
height: mainRect.height
radius: JamiTheme.filesToSendDelegateRadius
}
}
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Rectangle {
width: mainRect.width
height: mainRect.height
radius: JamiTheme.filesToSendDelegateRadius
}
}
}
PushButton {
JamiPushButton {
id: removeFileButton
anchors.right: mainRect.right
anchors.rightMargin: -margin
anchors.top: mainRect.top
anchors.topMargin: -margin
radius: 24
preferredSize: 20
preferredSize: 30
imageContainerWidth: 52
imageContainerHeight: 52
toolTipText: JamiStrings.optionRemove
source: JamiResources.round_close_24dp_svg
source: JamiResources.cross_black_24dp_svg
normalColor: JamiTheme.backgroundColor
imageColor: JamiTheme.textColor
normalColor: JamiTheme.secondaryBackgroundColor
imageColor: (hovered && JamiTheme.darkTheme) ? JamiTheme.blackColor : JamiTheme.textColor
hoveredColor: JamiTheme.removeFileButtonHoverColor
onClicked: root.removeFileButtonClicked(index)
}
}
Rectangle {
Control {
id: info
Layout.preferredHeight: root.height - margin
Layout.preferredWidth: JamiTheme.layoutWidthFileTransfer
color: JamiTheme.transparentColor
Layout.alignment: Qt.AlignLeft
ColumnLayout {
Layout.leftMargin: 5
anchors.margins: 5
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
contentItem: ColumnLayout {
spacing: 7
Text {
id: fileName
Layout.alignment: Qt.AlignLeft
Layout.preferredWidth: info.width
Layout.preferredWidth: Math.max(info.width, fileExtensionLayout.width)
font.pointSize: JamiTheme.filesToSendDelegateFontPointSize
color: JamiTheme.chatviewTextColor
font.bold: true
text: FileName
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
}
RowLayout {
id: fileExtensionLayout
Layout.alignment: Qt.AlignLeft
spacing: FileExtension.length === 0 ? 0 : 1
@ -171,7 +134,7 @@ Item {
Text {
id: fileExtension
Layout.alignment: Qt.AlignLeft
font.pointSize: JamiTheme.filesToSendDelegateFontPointSize
font.pointSize: JamiTheme.editedFontSize
font.capitalization: Font.AllUppercase
color: JamiTheme.chatviewTextColor
text: FileExtension
@ -181,11 +144,16 @@ Item {
Text {
id: fileSize
font.pointSize: JamiTheme.filesToSendDelegateFontPointSize
font.pointSize: JamiTheme.editedFontSize
color: JamiTheme.chatviewTextColor
Layout.alignment: Qt.AlignLeft
text: FileSize
elide: Text.ElideMiddle
Component.onCompleted: {
text = text.toLowerCase();
text = text.replace(" ", "");
}
}
}
}

View File

@ -35,9 +35,9 @@ TabButton {
property var textColorHovered: JamiTheme.textColorHovered
property var underlineColor: textColor
property var underlineColorHovered: textColorHovered
property var borderWidth: 2
property var bottomMargin: 1
property var underlineContentOnly: false
property real borderWidth: 2
property real bottomMargin: 1
property bool underlineContentOnly: false
property var fontSize: JamiTheme.filterItemFontSize
signal selected

View File

@ -29,6 +29,7 @@ RowLayout {
id: root
property alias text: messageBarTextArea.text
property alias fileContainer: dataTransferSendContainer
property var textAreaObj: messageBarTextArea
property real marginSize: JamiTheme.messageBarMarginSize
property bool sendButtonVisibility: true
@ -51,7 +52,9 @@ RowLayout {
signal showMapClicked
signal emojiButtonClicked
height: showTypo || multiLine ? messageBarTextArea.height + 25 + 3 * marginSize + 1 : textAreaObj.height + marginSize + 1
property real rectHeight: (showTypo || multiLine) ? messageBarTextArea.height + 25 + 4 * marginSize + 1 : textAreaObj.height + 1 * marginSize + 1
height: rectHeight + (dataTransferSendContainer.visible ? dataTransferSendContainer.height + (!showTypo ? 40 : - marginSize) : 0 )
Rectangle {
@ -67,11 +70,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 +88,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 +101,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 +131,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
@ -154,18 +155,19 @@ RowLayout {
id: rowLayout
columns: 2
rows: 2
rows: 3
columnSpacing: 0
rowSpacing: 0
anchors.fill: parent
MessageBarTextArea {
id: messageBarTextArea
objectName: "messageBarTextArea"
maxWidth: rectangle.width - messageBarRowLayout.width - 35
Layout.row: showTypo || multiLine ? 0 : 1
Layout.row: 0
Layout.column: 0
// forward activeFocus to the actual text area object
@ -176,12 +178,10 @@ RowLayout {
placeholderText: JamiStrings.writeTo.arg(CurrentConversation.title)
Layout.alignment: showTypo ? Qt.AlignLeft | Qt.AlignBottom : Qt.AlignBottom
Layout.alignment: showTypo ? Qt.AlignLeft : Qt.AlignBottom
Layout.fillWidth: true
Layout.leftMargin: marginSize / 2
Layout.topMargin: marginSize / 2
Layout.bottomMargin: marginSize / 2
Layout.rightMargin: marginSize / 2
Layout.margins: marginSize / 2
Layout.topMargin: 0
Layout.minimumHeight: JamiTheme.chatViewFooterPreferredHeight
Layout.preferredHeight: contentHeight
Layout.maximumHeight: JamiTheme.chatViewFooterTextAreaMaximumHeight - marginSize / 2
@ -322,14 +322,30 @@ RowLayout {
}
}
FilesToSendContainer {
id: dataTransferSendContainer
objectName: "dataTransferSendContainer"
visible: filesToSendCount > 0
Layout.alignment: Qt.AlignCenter
Layout.fillWidth: true
Layout.rightMargin: marginSize / 2
Layout.leftMargin: marginSize / 2
Layout.row: 1
Layout.column: 0
Layout.columnSpan: 2
Layout.preferredHeight: filesToSendCount ? JamiTheme.layoutWidthFileTransfer : 0
}
Row {
id: messageBarRowLayout
Layout.row: showTypo || multiLine ? 1 : 1
Layout.row: dataTransferSendContainer.visible ? 3 : (showTypo || multiLine ? 2 : 0)
Layout.column: showTypo || multiLine ? 0 : 1
Layout.alignment: showTypo || multiLine ? Qt.AlignRight : Qt.AlignBottom
Layout.columnSpan: showTypo || multiLine ? 2 : 1
Layout.topMargin: marginSize / 2
Layout.topMargin: dataTransferSendContainer.visible ? 0 : marginSize
Layout.rightMargin: 0
Row {
@ -349,8 +365,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 +850,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,8 +870,6 @@ RowLayout {
return JamiTheme.chatViewFooterImgDisableColor;
} else if (hovered) {
return JamiTheme.chatViewFooterImgHoverColor;
} else if (modelData.imageColor != null) {
return modelData.imageColor;
} else if (modelData.isStyle) {
return JamiTheme.chatViewFooterImgHoverColor;
} else {
@ -1148,6 +1160,7 @@ RowLayout {
pressedColor: hoveredColor
toolTipText: showPreview ? JamiStrings.continueEditing : JamiStrings.showPreview
onClicked: {
showPreview = !showPreview;
messageBarTextArea.showPreview = showPreview;
@ -1205,6 +1218,7 @@ RowLayout {
onClicked: {
root.showPreview = false;
sendMessageButtonClicked();
root.height = root.rectHeight;
}
}
}

View File

@ -109,7 +109,7 @@ JamiListView {
function isFirst() {
if (!nItem) return true
else {
if (item.showTime || item.isReply || nItem.isEmojiOnly ) {
if (item.showTime || item.isReply ) {
return true
} else if (nItem.author !== item.author) {
return true
@ -121,7 +121,7 @@ JamiListView {
function isLast() {
if (!pItem) return true
else {
if (pItem.showTime || pItem.isReply || pItem.isEmojiOnly) {
if (pItem.showTime || pItem.isReply) {
return true
} else if (pItem.author !== item.author) {
return true

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

@ -38,9 +38,10 @@ Popup {
property int state: RecordBox.States.INIT
property bool isVideo: false
property bool isPhoto: false
property bool isAudio: false
property bool showVideo: (root.isVideo && VideoDevices.listSize !== 0)
property int preferredWidth: 320
property int preferredHeight: 240
property int preferredHeight: 500
property int btnSize: 40
property int offset: 3
@ -56,6 +57,7 @@ Popup {
function openRecorder(vid) {
isVideo = vid;
isAudio = !vid && !isPhoto;
updateState(RecordBox.States.INIT);
if (isVideo) {
localVideo.startWithId(VideoDevices.getDefaultDevice());
@ -136,260 +138,315 @@ Popup {
}
}
background: Item {
} // Computed by id: box, to do the layer on LocalVideo
width: preferredWidth
height: isVideo ? previewWidget.height + 80 : preferredHeight
Rectangle {
id: box
id: boxBackground
radius: 5
anchors.fill: parent
color: JamiTheme.backgroundColor
PushButton {
id: cancelBtn
objectName: "cancelBtn"
z: 1
normalColor: "transparent"
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
imageColor: isVideo ? JamiTheme.whiteColor : JamiTheme.textColor
preferredSize: 12
source: JamiResources.round_close_24dp_svg
toolTipText: JamiStrings.back
anchors.right: box.right
anchors.top: box.top
anchors.margins: 8
focusPolicy: Qt.TabFocus
onClicked: {
closeRecorder();
updateState(RecordBox.States.INIT);
}
}
Item {
// Else it will be resized by the layer effect
id: photoMask
visible: false
anchors.fill: parent
Rectangle {
anchors.centerIn: parent
height: parent.height
width: parent.height
radius: height / 2
}
}
width: 300
height: 300
Rectangle {
id: rectBox
visible: false
anchors.fill: parent
radius: 5
}
id: previewWidget
anchors.centerIn: parent
height: root.isAudio ? 100 : 300
width: 300
color: root.isAudio ? JamiTheme.secondaryBackgroundColor : "transparent"
ColumnLayout {
id: recordItem
anchors.fill: parent
spacing: 0
Layout.alignment: Qt.AlignTop
// Video
Image {
id: screenshotImg
visible: root.showVideo && root.isPhoto && btnSend.visible
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
sourceSize.width: parent.width
sourceSize.height: width * localVideo.invAspectRatio
anchors.fill: parent
fillMode: Image.PreserveAspectCrop // Ajuste l'image tout en préservant l'aspect
source: root.photo === "" ? "" : "data:image/png;base64," + root.photo
}
// video Preview
Rectangle {
id: previewWidget
LocalVideo {
id: localVideo
anchors.fill: parent
visible: root.showVideo && !screenshotImg.visible
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
height: localVideo.width * localVideo.invAspectRatio
width: parent.width
layer.enabled: true
layer.effect: OpacityMask {
maskSource: rectBox
}
color: JamiTheme.primaryForegroundColor
LocalVideo {
id: localVideo
Rectangle {
id: rectBox
visible: false
anchors.fill: parent
radius: 5
}
}
layer.enabled: true
layer.effect: OpacityMask {
maskSource: rectBox
}
Rectangle {
anchors.fill: parent
color: "black"
opacity: 0.6
visible: root.isPhoto
radius: 5
layer.enabled: true
layer.effect: OpacityMask {
anchors.centerIn: parent
maskSource: photoMask
invert: true
}
Item {
// Else it will be resized by the layer effect
id: photoMask
visible: false
anchors.fill: parent
Rectangle {
anchors.fill: parent
color: "black"
opacity: 0.6
visible: root.isPhoto
layer.enabled: true
layer.effect: OpacityMask {
anchors.centerIn: parent
maskSource: photoMask
invert: true
}
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: 20
height: 200
width: 200
radius: height / 2
}
}
}
RowLayout {
id: controls
Layout.alignment: Qt.AlignCenter
Layout.fillWidth: true
spacing: 24
Layout.bottomMargin: isVideo ? 8 : 0
ColumnLayout{
id: mainLayout
PushButton {
id: recordButton
objectName: "recordButton"
Layout.alignment: Qt.AlignCenter
anchors.fill: parent
Component.onCompleted: print("mainLayout width: " + width + " height: " + height)
preferredSize: btnSize
JamiPushButton {
id: cancelBtn
objectName: "cancelBtn"
z: 1
normalColor: isVideo ? "transparent" : JamiTheme.backgroundColor
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
Layout.alignment: Qt.AlignRight | Qt.AlignTop
Layout.preferredHeight: 20
Layout.preferredWidth: 20
Layout.topMargin: 5
Layout.rightMargin: 5
source: JamiResources.fiber_manual_record_24dp_svg
imageColor: JamiTheme.recordIconColor
imageColor: hovered ? JamiTheme.whiteColor : JamiTheme.recordBoxcloseButtonColor
normalColor: "transparent"
hoveredColor: JamiTheme.recordBoxHoverColor
source: JamiResources.round_close_24dp_svg
toolTipText: JamiStrings.back
focusPolicy: Qt.TabFocus
onClicked: {
updateState(RecordBox.States.RECORDING);
if (!root.isPhoto)
startRecording();
}
}
PushButton {
id: screenshotBtn
objectName: "screenshotBtn"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
normalColor: isVideo ? "transparent" : JamiTheme.backgroundColor
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
border.width: 1
border.color: imageColor
source: JamiResources.fiber_manual_record_24dp_svg
imageColor: UtilsAdapter.luma(JamiTheme.backgroundColor) ? "white" : JamiTheme.redColor
focusPolicy: Qt.TabFocus
onClicked: {
root.photo = videoProvider.captureVideoFrame(VideoDevices.getDefaultDevice());
updateState(RecordBox.States.REC_SUCCESS);
}
}
PushButton {
id: btnStop
objectName: "btnStop"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
normalColor: isVideo ? "transparent" : JamiTheme.backgroundColor
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
source: JamiResources.stop_24dp_red_svg
imageColor: UtilsAdapter.luma(JamiTheme.backgroundColor) ? "white" : JamiTheme.buttonTintedBlue
border.width: 1
border.color: imageColor
focusPolicy: Qt.TabFocus
onClicked: {
if (!root.isPhoto)
stopRecording();
updateState(RecordBox.States.REC_SUCCESS);
}
}
PushButton {
id: btnRestart
objectName: "btnRestart"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
normalColor: isVideo ? "transparent" : JamiTheme.backgroundColor
source: JamiResources.re_record_24dp_svg
hoveredColor: Qt.rgba(255, 255, 255, 0.2)
imageColor: UtilsAdapter.luma(JamiTheme.backgroundColor) ? "white" : JamiTheme.buttonTintedBlue
border.width: 1
border.color: imageColor
focusPolicy: Qt.TabFocus
onClicked: {
if (!root.isPhoto)
stopRecording();
updateState(RecordBox.States.INIT);
}
}
PushButton {
id: btnSend
objectName: "btnSend"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
normalColor: isVideo ? "transparent" : JamiTheme.backgroundColor
source: JamiResources.check_black_24dp_svg
imageColor: UtilsAdapter.luma(JamiTheme.backgroundColor) ? "white" : JamiTheme.buttonTintedBlue
border.width: 1
border.color: imageColor
focusPolicy: Qt.TabFocus
onClicked: {
if (!root.isPhoto) {
stopRecording();
sendRecord();
} else if (root.photo !== "") {
root.validatePhoto(root.photo);
}
closeRecorder();
updateState(RecordBox.States.INIT);
}
}
Timer {
id: timer
RowLayout {
id: controls
interval: 1000
running: false
repeat: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
Layout.fillWidth: true
onTriggered: updateTimer()
spacing: 2
Layout.bottomMargin: 20//isVideo ? 8 : 0
Component.onCompleted: print("controls width: " + width + " height: " + height)
JamiPushButton {
id: recordButton
objectName: "recordButton"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
source: JamiResources.record_black_24dp_svg
imageColor: JamiTheme.whiteColor
imageContainerHeight: 20
imageContainerWidth: 20
focusPolicy: Qt.TabFocus
background: RoundedBorderRectangle {
opacity: recordButton.hovered ? 1 : 0.7
fillColor: recordButton.hovered ? JamiTheme.recordBoxHoverColor : JamiTheme.recordBoxButtonColor
radius: {
"tl": 5,
"tr": root.isAudio ? 0 : 5,
"br": root.isAudio ? 0 : 5,
"bl": 5
}
}
onClicked: {
updateState(RecordBox.States.RECORDING);
if (!root.isPhoto)
startRecording();
}
}
JamiPushButton {
id: screenshotBtn
objectName: "screenshotBtn"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
normalColor: JamiTheme.screenshotButtonColor
hoveredColor: JamiTheme.screenshotButtonColor
background.opacity: hovered ? 1 : 0.5
source: JamiResources.record_round_black_24dp_svg
imageColor: JamiTheme.whiteColor
imageContainerHeight: 25
imageContainerWidth: 25
focusPolicy: Qt.TabFocus
onClicked: {
root.photo = videoProvider.captureVideoFrame(VideoDevices.getDefaultDevice());
updateState(RecordBox.States.REC_SUCCESS);
}
}
PushButton {
id: btnStop
objectName: "btnStop"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
source: JamiResources.stop_rectangle_24dp_svg
imageColor: JamiTheme.whiteColor
imageContainerHeight: 20
imageContainerWidth: 20
focusPolicy: Qt.TabFocus
background: RoundedBorderRectangle {
opacity: btnStop.hovered ? 1 : 0.7
fillColor: btnStop.hovered ? JamiTheme.recordBoxHoverColor : JamiTheme.recordBoxButtonColor
radius: {
"tl": 5,
"tr": 0,
"br": 0,
"bl": 5
}
}
onClicked: {
if (!root.isPhoto)
stopRecording();
updateState(RecordBox.States.REC_SUCCESS);
}
}
JamiPushButton {
id: btnRestart
objectName: "btnRestart"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
source: JamiResources.restart_black_24dp_svg
imageColor: JamiTheme.whiteColor
imageContainerHeight: 25
imageContainerWidth: 25
focusPolicy: Qt.TabFocus
background: RoundedBorderRectangle {
opacity: btnRestart.hovered ? 1 : 0.7
fillColor: btnRestart.hovered ? JamiTheme.recordBoxHoverColor : JamiTheme.recordBoxButtonColor
radius: {
"tl": 5,
"tr": 0,
"br": 0,
"bl": 5
}
}
onClicked: {
if (!root.isPhoto)
stopRecording();
updateState(RecordBox.States.INIT);
}
}
JamiPushButton {
id: btnSend
objectName: "btnSend"
Layout.alignment: Qt.AlignCenter
preferredSize: btnSize
imageColor: JamiTheme.whiteColor
imageContainerHeight: 25
imageContainerWidth: 25
source: JamiResources.check_circle_24dp_svg
focusPolicy: Qt.TabFocus
background: RoundedBorderRectangle {
opacity: btnSend.hovered ? 1 : 0.7
fillColor: btnSend.hovered ? JamiTheme.recordBoxHoverColor : JamiTheme.recordBoxButtonColor
radius: {
"tl": 0,
"tr": root.isPhoto ? 5 : 0,
"br": root.isPhoto ? 5 : 0,
"bl": 0
}
}
onClicked: {
if (!root.isPhoto) {
stopRecording();
sendRecord();
} else if (root.photo !== "") {
root.validatePhoto(root.photo);
}
closeRecorder();
updateState(RecordBox.States.INIT);
}
}
Timer {
id: timer
interval: 1000
running: false
repeat: true
onTriggered: updateTimer()
}
RoundedBorderRectangle {
opacity: 0.7
fillColor: JamiTheme.recordBoxButtonColor
visible: (!recordButton.visible && !root.isPhoto) || root.isAudio
Layout.preferredHeight: btnSend.height
Layout.preferredWidth: time.width + 20
radius: {
"tl": 0,
"tr": 5,
"br": 5,
"bl": 0
}
Text {
id: time
anchors.centerIn: parent
opacity: 1
text: "00:00"
color: JamiTheme.whiteColor
font.pointSize: (isVideo ? 12 : 20)
}
}
}
Text {
id: time
Layout.alignment: Qt.AlignCenter
visible: !root.isPhoto
text: "00:00"
color: JamiTheme.textColor
font.pointSize: (isVideo ? 12 : 20)
}
}
}
}
}
}

View File

@ -27,8 +27,10 @@ Control {
signal clicked
height: jumpToLatestText.contentHeight + 15
width: jumpToLatestText.contentWidth + arrowDropDown.width + 50
height: 46
width: 46
padding: 11
states: State {
id: activeState
@ -60,49 +62,18 @@ Control {
}
]
contentItem: Item {
Item {
anchors.centerIn: parent
contentItem: ResponsiveImage {
id: arrowDropDown
height: jumpToLatestText.contentHeight
width: jumpToLatestText.contentWidth + arrowDropDown.width + 3
anchors.centerIn: parent
Text {
id: jumpToLatestText
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
font.weight: Font.Bold
font.pointSize: JamiTheme.textFontSize + 2
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
text: JamiStrings.scrollToEnd
color: UtilsAdapter.luma(CurrentConversation.color) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
}
ResponsiveImage {
id: arrowDropDown
anchors.right: jumpToLatestText.left
anchors.rightMargin: 3
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: 0
containerWidth: jumpToLatestText.contentHeight
containerHeight: jumpToLatestText.contentHeight
rotation: -90
color: UtilsAdapter.luma(CurrentConversation.color) ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
source: JamiResources.back_24dp_svg
}
}
color: JamiTheme.darkTheme ? JamiTheme.chatviewTextColorLight : JamiTheme.chatviewTextColorDark
source: JamiResources.expand_more_24dp_svg
}
background: Rectangle {
radius: 5
color: CurrentConversation.color
color: JamiTheme.messageInBgColor
MouseArea {
anchors.fill: parent

View File

@ -174,31 +174,37 @@ SidePanelBase {
}
header: AccountComboBox {
id: accountComboBox
Shortcut {
sequence: "Ctrl+J"
context: Qt.ApplicationShortcut
onActivated: accountComboBox.togglePopup()
}
}
Item {
topPadding: 10
ColumnLayout {
anchors.fill: parent
spacing: 10
onVisibleChanged: {
donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible());
}
// We use this to update the donation banner visibility, instead of a timer.
onVisibleChanged: JamiQmlUtils.updateIsDonationBannerVisible()
// Label/button to create a new swarm.
RowLayout {
id: titleBar
id: createSwarmToggle
visible: swarmMemberSearchList.visible
width: parent.width
height: 40
anchors.top: parent.top
anchors.topMargin: 10
anchors.left: parent.left
anchors.leftMargin: 15
anchors.right: parent.right
anchors.rightMargin: 15
Layout.leftMargin: 15
Layout.rightMargin: 15
Layout.alignment: Qt.AlignTop
Label {
id: title
height: parent.height
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
@ -218,7 +224,7 @@ SidePanelBase {
imagePadding: 8
normalColor: JamiTheme.secondaryBackgroundColor
preferredSize: titleBar.height
preferredSize: createSwarmToggle.height
source: JamiResources.round_close_24dp_svg
toolTipText: JamiStrings.cancel
@ -227,16 +233,16 @@ SidePanelBase {
}
}
// Search conversations, start new conversations, etc.
RowLayout {
id: startBar
width: parent.width
height: 40
anchors.top: titleBar.visible ? titleBar.bottom : parent.top
anchors.topMargin: 10
anchors.left: parent.left
anchors.leftMargin: 15
anchors.right: parent.right
anchors.rightMargin: 15
Layout.leftMargin: 15
Layout.rightMargin: 15
Layout.alignment: Qt.AlignTop
Shortcut {
sequence: "Ctrl+F"
@ -249,7 +255,7 @@ SidePanelBase {
Searchbar {
id: contactSearchBar
Layout.fillHeight: true
height: parent.height
Layout.fillWidth: true
onSearchBarTextChanged: function (text) {
@ -291,12 +297,18 @@ SidePanelBase {
SidePanelTabBar {
id: sidePanelTabBar
visible: ConversationsAdapter.pendingRequestCount && !contactSearchBar.textContent && smartListLayout.visible
anchors.top: startBar.bottom
anchors.topMargin: visible ? 10 : 0
visible: ConversationsAdapter.pendingRequestCount &&
!contactSearchBar.textContent &&
smartListLayout.visible
contentHeight: childrenRect.height
width: page.width
height: visible ? 42 : 0
contentHeight: visible ? 42 : 0
Layout.preferredHeight: 42
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
Layout.bottomMargin: -10
}
Rectangle {
@ -304,10 +316,11 @@ SidePanelBase {
visible: searchStatusText.text !== "" && smartListLayout.visible
anchors.top: sidePanelTabBar.bottom
anchors.topMargin: visible ? 10 : 0
width: parent.width
height: visible ? 42 : 0
height: 42
Layout.bottomMargin: -10
Layout.alignment: Qt.AlignTop
color: JamiTheme.backgroundColor
Text {
@ -325,22 +338,19 @@ SidePanelBase {
}
DonationBanner {
id: donation
anchors.horizontalCenter: parent.horizontalCenter
anchors.leftMargin: 15
anchors.rightMargin: 15
anchors.top: sidePanelTabBar.bottom
anchors.topMargin: 10
visible: donation.donationVisible
Layout.fillWidth: true
Layout.leftMargin: 15
Layout.rightMargin: 15
Layout.topMargin: 10
visible: JamiQmlUtils.isDonationBannerVisible
}
ColumnLayout {
id: smartListLayout
width: parent.width
anchors.top: donation.donationVisible ? donation.bottom : searchStatusRect.bottom
anchors.topMargin: (sidePanelTabBar.visible || searchStatusRect.visible) ? 0 : 12
anchors.bottom: parent.bottom
Layout.fillHeight: true
spacing: 4
@ -356,6 +366,7 @@ SidePanelBase {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Layout.preferredHeight: visible ? contentHeight : 0
Layout.maximumHeight: {
var otherContentHeight = conversationListView.contentHeight + 16;
if (conversationListView.visible)
@ -369,20 +380,18 @@ SidePanelBase {
model: SearchResultsListModel
headerLabel: JamiStrings.searchResults
headerVisible: visible
headerVisible: true
}
ConversationListView {
id: conversationListView
visible: count
Layout.preferredWidth: parent.width
Layout.fillWidth: true
Layout.fillHeight: true
model: ConversationListModel
headerLabel: JamiStrings.conversations
headerVisible: searchResultsListView.visible
headerVisible: count && searchResultsListView.visible
}
}
@ -392,9 +401,7 @@ SidePanelBase {
visible: inNewSwarm
width: parent.width
anchors.top: donation.donationVisible ? donation.bottom : sidePanelTabBar.bottom
anchors.topMargin: (sidePanelTabBar.visible || searchStatusRect.visible) ? 0 : 12
anchors.bottom: parent.bottom
Layout.fillHeight: true
spacing: 4

View File

@ -79,10 +79,6 @@ ItemDelegate {
root.convId = UID
}
Component.onDestruction: {
UtilsAdapter.clearInteractionsCache(root.accountId, root.convId)
}
RowLayout {
anchors.fill: parent
anchors.leftMargin: 15
@ -192,32 +188,37 @@ ItemDelegate {
}
}
// Draft indicator
ResponsiveImage {
visible: Draft && !root.highlighted
source: JamiResources.round_edit_24dp_svg
color: JamiTheme.primaryForegroundColor
}
// Show that a call is ongoing for groups indicator
ResponsiveImage {
visible: ActiveCallsCount && !root.highlighted
source: JamiResources.videocam_24dp_svg
color: JamiTheme.primaryForegroundColor
}
BlinkingLocationIcon {
isSharing: true
visible: showSharePositionIndicator
arrowTimerVisibility: locationIconTimer.showIconArrow
color: JamiTheme.sharePositionIndicatorColor
color: JamiTheme.draftIconColor
containerWidth: 25
}
BlinkingLocationIcon {
isSharing: false
visible: showSharedPositionIndicator
arrowTimerVisibility: locationIconTimer.showIconArrow
color: JamiTheme.sharedPositionIndicatorColor
color: JamiTheme.draftIconColor
containerWidth: 25
}
// Draft indicator
ResponsiveImage {
visible: Draft && !root.highlighted
containerWidth: 20
source: JamiResources.round_edit_24dp_svg
color: JamiTheme.draftIconColor
}
// Show that a call is ongoing for groups indicator
ResponsiveImage {
visible: ActiveCallsCount && !root.highlighted
source: JamiResources.phone_in_talk_24dp_svg
containerWidth: 16
color: JamiTheme.primaryForegroundColor
}
ColumnLayout {
@ -228,6 +229,7 @@ ItemDelegate {
Text {
id: callStatusText
visible : text
Layout.minimumHeight: 20
Layout.alignment: Qt.AlignRight
text: InCall ? UtilsAdapter.getCallStatusStr(CallState) : ""
@ -239,17 +241,23 @@ ItemDelegate {
// unread message count
Item {
Layout.preferredWidth: childrenRect.width
Layout.preferredHeight: childrenRect.height
Layout.alignment: Qt.AlignTop | Qt.AlignRight
BadgeNotifier {
size: 20
size: 16
count: UnreadMessagesCount
animate: index === 0
radius: 3
}
}
}
Accessible.role: Accessible.Button
Accessible.name: Title === undefined? "" : Title
Accessible.description: LastInteraction === undefined? "" : LastInteraction

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