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)