diff --git a/.CI/full-ubuntu-build.sh b/.CI/full-ubuntu-build.sh
index 5c2e9f801b3..114c3ffda62 100755
--- a/.CI/full-ubuntu-build.sh
+++ b/.CI/full-ubuntu-build.sh
@@ -29,7 +29,6 @@ cmake \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DCHATTERINO_PLUGINS="$C2_PLUGINS" \
-DCMAKE_PREFIX_PATH="$Qt6_DIR/lib/cmake" \
- -DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \
-DCHATTERINO_STATIC_QT_BUILD=On \
-DCMAKE_CXX_FLAGS="-fno-sized-deallocation" \
.
diff --git a/.CI/setup-clang-tidy.sh b/.CI/setup-clang-tidy.sh
index 4884285eb8e..0a9df6cf596 100755
--- a/.CI/setup-clang-tidy.sh
+++ b/.CI/setup-clang-tidy.sh
@@ -19,7 +19,6 @@ cmake -S. -Bbuild-clang-tidy \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DCHATTERINO_LTO=Off \
-DCHATTERINO_PLUGINS=On \
- -DBUILD_WITH_QT6=On \
-DBUILD_TESTS=On \
-DBUILD_BENCHMARKS=On
diff --git a/.cirrus.yml b/.cirrus.yml
index d4ac409cd92..1183ff7129f 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -20,7 +20,6 @@ task:
-DUSE_SYSTEM_QTKEYCHAIN="ON" \
-DCMAKE_BUILD_TYPE="release" \
-DCMAKE_EXPORT_COMPILE_COMMANDS="ON" \
- -DBUILD_WITH_QT6="ON" \
..
cat compile_commands.json
make -j $(getconf _NPROCESSORS_ONLN)
diff --git a/.docker/Dockerfile-ubuntu-22.04-qt6-build b/.docker/Dockerfile-ubuntu-22.04-qt6-build
index 2fcedd198ca..8ac4a31c37b 100644
--- a/.docker/Dockerfile-ubuntu-22.04-qt6-build
+++ b/.docker/Dockerfile-ubuntu-22.04-qt6-build
@@ -3,7 +3,6 @@ ARG UBUNTU_VERSION=22.04
FROM ubuntu:$UBUNTU_VERSION
ARG QT_VERSION=6.2.4
-ARG BUILD_WITH_QT6=ON
ENV TZ=UTC
ENV OPENSSL_VER=1.1.1w
@@ -62,7 +61,6 @@ RUN mkdir /src/build
# cmake
RUN cd /src/build && \
OPENSSL_ROOT_DIR=/usr/local/ssl CXXFLAGS=-fno-sized-deallocation cmake \
- -DBUILD_WITH_QT6=$BUILD_WITH_QT6 \
-DCMAKE_INSTALL_PREFIX=appdir/usr/ \
-DCMAKE_PREFIX_PATH=/opt/qt/$QT_VERSION/gcc_64/lib/cmake \
-DBUILD_WITH_QTKEYCHAIN=OFF \
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index bb6fde07f75..fdccd4c0f8a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -53,7 +53,6 @@ jobs:
C2_ENABLE_LTO: ${{ matrix.force-lto }}
C2_PLUGINS: ${{ matrix.plugins }}
C2_ENABLE_CRASHPAD: ${{ matrix.skip-crashpad == false }}
- C2_BUILD_WITH_QT6: ${{ startsWith(matrix.qt-version, '6.') }}
steps:
- uses: actions/checkout@v4
@@ -78,7 +77,6 @@ jobs:
-DCHATTERINO_LTO="$C2_ENABLE_LTO" \
-DCHATTERINO_PLUGINS="$C2_PLUGINS" \
-DCMAKE_PREFIX_PATH="$Qt6_DIR/lib/cmake" \
- -DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \
-DCHATTERINO_STATIC_QT_BUILD=On \
..
make -j"$(nproc)"
@@ -147,7 +145,7 @@ jobs:
- name: Install Qt5
if: startsWith(matrix.qt-version, '5.')
- uses: jurplel/install-qt-action@v4.0.0
+ uses: jurplel/install-qt-action@v4.1.1
with:
cache: true
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
@@ -155,7 +153,7 @@ jobs:
- name: Install Qt6
if: startsWith(matrix.qt-version, '6.')
- uses: jurplel/install-qt-action@v4.0.0
+ uses: jurplel/install-qt-action@v4.1.1
with:
cache: true
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml
index 8f9214ab9c1..54111c29a81 100644
--- a/.github/workflows/clang-tidy.yml
+++ b/.github/workflows/clang-tidy.yml
@@ -30,7 +30,7 @@ jobs:
- name: Install Qt6
if: startsWith(matrix.qt-version, '6.')
- uses: jurplel/install-qt-action@v4.0.0
+ uses: jurplel/install-qt-action@v4.1.1
with:
cache: true
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
diff --git a/.github/workflows/test-macos.yml b/.github/workflows/test-macos.yml
index c1807885feb..3e96d39456d 100644
--- a/.github/workflows/test-macos.yml
+++ b/.github/workflows/test-macos.yml
@@ -48,7 +48,7 @@ jobs:
fetch-depth: 0 # allows for tags access
- name: Install Qt
- uses: jurplel/install-qt-action@v4.0.0
+ uses: jurplel/install-qt-action@v4.1.1
with:
cache: true
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml
index 58450c27fe8..59766f7f241 100644
--- a/.github/workflows/test-windows.yml
+++ b/.github/workflows/test-windows.yml
@@ -58,7 +58,7 @@ jobs:
fetch-depth: 0 # allows for tags access
- name: Install Qt
- uses: jurplel/install-qt-action@v4.0.0
+ uses: jurplel/install-qt-action@v4.1.1
with:
cache: true
cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index d41740acaf1..05e1c5ca2d4 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -33,7 +33,6 @@ jobs:
fail-fast: false
env:
C2_PLUGINS: ${{ matrix.plugins }}
- C2_BUILD_WITH_QT6: ${{ startsWith(matrix.qt-version, '6.') }}
steps:
- uses: actions/checkout@v4
@@ -57,7 +56,6 @@ jobs:
-DBUILD_APP=OFF \
-DCHATTERINO_PLUGINS="$C2_PLUGINS" \
-DCMAKE_PREFIX_PATH="$Qt6_DIR/lib/cmake" \
- -DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \
-DCHATTERINO_STATIC_QT_BUILD=On \
-DCHATTERINO_GENERATE_COVERAGE=On \
-DCMAKE_BUILD_TYPE=Debug \
@@ -98,10 +96,10 @@ jobs:
working-directory: build-test
- name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v4.6.0
+ uses: codecov/codecov-action@v5.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
- plugin: gcov
+ plugins: gcov
fail_ci_if_error: true
verbose: true
if: false
diff --git a/BUILDING_ON_FREEBSD.md b/BUILDING_ON_FREEBSD.md
index 0c16884784e..9d8022568c6 100644
--- a/BUILDING_ON_FREEBSD.md
+++ b/BUILDING_ON_FREEBSD.md
@@ -17,7 +17,7 @@ FreeBSD 15.0-SNAP.
```
1. Generate build files. To enable Lua plugins in your build add `-DCHATTERINO_PLUGINS=ON` to this command.
```sh
- cmake -DBUILD_WITH_QT6=ON ..
+ cmake ..
```
1. Build the project
```sh
diff --git a/BUILDING_ON_LINUX.md b/BUILDING_ON_LINUX.md
index 51317ecd1ff..104a41e2baa 100644
--- a/BUILDING_ON_LINUX.md
+++ b/BUILDING_ON_LINUX.md
@@ -53,7 +53,7 @@ nix-shell -p openssl boost qt6.full pkg-config cmake
```
1. Generate build files. To enable Lua plugins in your build add `-DCHATTERINO_PLUGINS=ON` to this command.
```sh
- cmake -DBUILD_WITH_QT6=ON -DBUILD_WITH_QTKEYCHAIN=OFF ..
+ cmake -DBUILD_WITH_QTKEYCHAIN=OFF ..
```
1. Build the project
```sh
diff --git a/BUILDING_ON_MAC.md b/BUILDING_ON_MAC.md
index 7c06c95709a..6592f56d7da 100644
--- a/BUILDING_ON_MAC.md
+++ b/BUILDING_ON_MAC.md
@@ -10,7 +10,7 @@ Local dev machines for testing are available on Apple Silicon on macOS 13.
1. Install [Homebrew](https://brew.sh/#install)
We use this for dependency management on macOS
1. Install all dependencies:
- `brew install boost openssl@1.1 rapidjson cmake qt@5 libavif`
+ `brew install boost openssl@3 rapidjson cmake qt@6 libavif`
## Building
@@ -21,7 +21,7 @@ Local dev machines for testing are available on Apple Silicon on macOS 13.
1. Create a build directory and go into it:
`mkdir build && cd build`
1. Run CMake. To enable Lua plugins in your build add `-DCHATTERINO_PLUGINS=ON` to this command.
- `cmake -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@5 -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@1.1 ..`
+ `cmake -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@6 ..`
1. Build:
`make`
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ca72b9ab939..9b3d80fd5f3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -42,6 +42,7 @@
- Minor: Tabs unhighlight when their content is read in other tabs. (#5649)
- Minor: Made usernames in bits and sub messages clickable. (#5686)
- Minor: Mentions of FrankerFaceZ and BetterTTV in settings are standardized as such. (#5698)
+- Minor: Emote names are no longer duplicated when using smarter emote completion. (#5705)
- Bugfix: Fixed tab move animation occasionally failing to start after closing a tab. (#5426, #5612)
- Bugfix: If a network request errors with 200 OK, Qt's error code is now reported instead of the HTTP status. (#5378)
- Bugfix: Fixed restricted users usernames not being clickable. (#5405)
@@ -71,6 +72,8 @@
- Bugfix: Fixed 7TV emotes messing with Qt's HTML. (#5677)
- Bugfix: Fixed incorrect messages getting replaced visually. (#5683)
- Bugfix: Fixed rendering of multi-line selection that starts at a trailing space. (#5691)
+- Bugfix: Fixed pause indicator not appearing in certain cases. (#5707)
+- Dev: Default build with Qt6 on all platforms. (#5716)
- Dev: Update Windows build from Qt 6.5.0 to Qt 6.7.1. (#5420)
- Dev: Update vcpkg build Qt from 6.5.0 to 6.7.0, boost from 1.83.0 to 1.85.0, openssl from 3.1.3 to 3.3.0. (#5422)
- Dev: Unsingletonize `ISoundController`. (#5462)
@@ -127,6 +130,7 @@
- Dev: Fixed some compiler warnings. (#5672)
- Dev: Unified parsing of historic and live IRC messages. (#5678)
- Dev: 7TV's `entitlement.reset` is now explicitly ignored. (#5685)
+- Dev: Qt 6.8 and later now default to the GDI fontengine. (#5710)
## 2.5.1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 39c7fe468cd..829fd1c27ac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,11 +21,7 @@ option(BUILD_WITH_QTKEYCHAIN "Build Chatterino with support for your system key
option(USE_SYSTEM_MINIAUDIO "Build Chatterino with your system miniaudio" OFF)
option(BUILD_WITH_CRASHPAD "Build chatterino with crashpad" OFF)
option(USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
-if(WIN32)
- option(BUILD_WITH_QT6 "Build with Qt6, default on for Windows" On)
-else()
- option(BUILD_WITH_QT6 "Use Qt6 instead of default Qt5" OFF)
-endif()
+option(BUILD_WITH_QT6 "Build with Qt6" On)
option(CHATTERINO_GENERATE_COVERAGE "Generate coverage files" OFF)
# We don't use translations, and we don't want qtkeychain to build translations
option(BUILD_TRANSLATIONS "" OFF)
@@ -33,6 +29,7 @@ option(BUILD_SHARED_LIBS "" OFF)
option(CHATTERINO_LTO "Enable LTO for all targets" OFF)
option(CHATTERINO_PLUGINS "Enable ALPHA plugin support in Chatterino" OFF)
option(CHATTERINO_NO_AVIF_PLUGIN "Disable AVIF plugin" OFF)
+option(CHATTERINO_USE_GDI_FONTENGINE "Use the legacy GDI fontengine instead of the new DirectWrite one on Windows (Qt 6.8.0 and later)" ON)
option(CHATTERINO_UPDATER "Enable update checks" ON)
mark_as_advanced(CHATTERINO_UPDATER)
diff --git a/cmake/resources/generate_resources.cmake b/cmake/resources/generate_resources.cmake
index 0bd28a80e3c..df227a7d695 100644
--- a/cmake/resources/generate_resources.cmake
+++ b/cmake/resources/generate_resources.cmake
@@ -88,6 +88,15 @@ if (WIN32)
list(APPEND RES_AUTOGEN_FILES "${CMAKE_BINARY_DIR}/autogen/windows.rc")
endif ()
+set(WINDOWS_ARGUMENTS "@Invalid()") # empty QVariant() in QSettings
+if (CHATTERINO_USE_GDI_FONTENGINE AND Qt${MAJOR_QT_VERSION}_VERSION VERSION_GREATER_EQUAL "6.8.0")
+ message(STATUS "Using legacy GDI fontengine")
+ set(WINDOWS_ARGUMENTS "fontengine=gdi")
+endif ()
+
+configure_file("${CMAKE_CURRENT_LIST_DIR}/qt.conf.in" "${CMAKE_SOURCE_DIR}/resources/qt.conf")
+list(APPEND RES_AUTOGEN_FILES "${CMAKE_SOURCE_DIR}/resources/qt.conf")
+
list(APPEND RES_AUTOGEN_FILES
"${CMAKE_SOURCE_DIR}/resources/resources_autogenerated.qrc"
"${CMAKE_BINARY_DIR}/autogen/ResourcesAutogen.cpp"
diff --git a/cmake/resources/qt.conf.in b/cmake/resources/qt.conf.in
new file mode 100644
index 00000000000..4706fdcc481
--- /dev/null
+++ b/cmake/resources/qt.conf.in
@@ -0,0 +1,2 @@
+[Platforms]
+WindowsArguments = ${WINDOWS_ARGUMENTS}
diff --git a/cmake/resources/resources_autogenerated.qrc.in b/cmake/resources/resources_autogenerated.qrc.in
index cce67fae913..9e28de4a68b 100644
--- a/cmake/resources/resources_autogenerated.qrc.in
+++ b/cmake/resources/resources_autogenerated.qrc.in
@@ -6,4 +6,7 @@
@RES_RESOURCES_CONTENT@
+
+ qt.conf
+
\ No newline at end of file
diff --git a/resources/.gitignore b/resources/.gitignore
index 1d38bf35715..5402f76fb70 100644
--- a/resources/.gitignore
+++ b/resources/.gitignore
@@ -1 +1,2 @@
linuxinstall
+/qt.conf
diff --git a/resources/qt.conf b/resources/qt.conf
deleted file mode 100644
index 310dd86abee..00000000000
--- a/resources/qt.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Platforms]
-WindowArguments = dpiawareness=2
diff --git a/resources/resources.qrc b/resources/resources.qrc
deleted file mode 100644
index 8568b5032a7..00000000000
--- a/resources/resources.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- qt.conf
-
-
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b3b9738596d..17bb43e0ae9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -759,8 +759,6 @@ set(SOURCE_FILES
widgets/splits/SplitInput.hpp
widgets/splits/SplitOverlay.cpp
widgets/splits/SplitOverlay.hpp
-
- ${CMAKE_SOURCE_DIR}/resources/resources.qrc
)
if (APPLE)
diff --git a/src/controllers/completion/TabCompletionModel.cpp b/src/controllers/completion/TabCompletionModel.cpp
index 585fe3a08fa..829fe8e82c0 100644
--- a/src/controllers/completion/TabCompletionModel.cpp
+++ b/src/controllers/completion/TabCompletionModel.cpp
@@ -43,11 +43,15 @@ void TabCompletionModel::updateResults(const QString &query,
query, fullTextContent, cursorPosition, isFirstWord);
if (done)
{
+ auto uniqueResults = std::unique(results.begin(), results.end());
+ results.erase(uniqueResults, results.end());
this->setStringList(results);
return;
}
#endif
this->source_->addToStringList(results, 0, isFirstWord);
+ auto uniqueResults = std::unique(results.begin(), results.end());
+ results.erase(uniqueResults, results.end());
this->setStringList(results);
}
}
diff --git a/src/widgets/helper/ChannelView.cpp b/src/widgets/helper/ChannelView.cpp
index 22cb629c470..c7ee929c208 100644
--- a/src/widgets/helper/ChannelView.cpp
+++ b/src/widgets/helper/ChannelView.cpp
@@ -474,6 +474,8 @@ bool ChannelView::paused() const
void ChannelView::pause(PauseReason reason, std::optional msecs)
{
+ bool wasUnpaused = !this->paused();
+
if (msecs)
{
/// Msecs has a value
@@ -504,6 +506,11 @@ void ChannelView::pause(PauseReason reason, std::optional msecs)
}
this->updatePauses();
+
+ if (wasUnpaused)
+ {
+ this->update();
+ }
}
void ChannelView::unpause(PauseReason reason)