Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
bd8c480
fix(cmake): remove redundant fmt package from optional packages and e…
xiaoyifang Jan 4, 2026
af96895
Merge pull request #2653 from xiaoyifang/opt/fmtlib
xiaoyifang Jan 4, 2026
2ef710b
Merge remote-tracking branch 'origin/master' into staged
xiaoyifang Jan 4, 2026
2c9beb3
bump alpha version to 26.2.0
xiaoyifang Jan 4, 2026
7a3baac
opt: open website dictionary in scan popup UI (#2650)
xiaoyifang Jan 5, 2026
2f5e6d9
Fix AppStream linter warning: add missing screenshot captions (#2654)
xiaoyifang Jan 5, 2026
be811a5
opt: remove metainfo obsolete version info
xiaoyifang Jan 5, 2026
8f41eb8
Metainfo cleanup: remove old releases and refine description
xiaoyifang Jan 5, 2026
f4e1e32
fix: fix website opened in popup but not mainwindow (#2659)
xiaoyifang Jan 5, 2026
179d89d
opt: remove qtwebengine/version text in the user-agent (#2660)
xiaoyifang Jan 5, 2026
86f91b7
Merge branch 'fix/empty-group1' into staged
xiaoyifang Jan 6, 2026
28975bc
opt: remove iframe-http* handler (#2662)
xiaoyifang Jan 6, 2026
3e8358a
update to version 26.2.0 alpha
xiaoyifang Jan 6, 2026
4dbeb14
opt: unify VERSION control in one place
xiaoyifang Jan 6, 2026
2d87534
Merge pull request #2663 from xiaoyifang/opt/version-unify
xiaoyifang Jan 6, 2026
ecd91e0
New Crowdin updates (#2655)
xiaoyifang Jan 6, 2026
5798271
opt: remove unused includes and clean up request handling
xiaoyifang Jan 6, 2026
c43b0ea
Merge pull request #2664 from xiaoyifang/opt/code-refactor
xiaoyifang Jan 6, 2026
79316ac
UI: change search no-suggestion feedback from italic font to colored …
xiaoyifang Dec 30, 2025
6215821
UI: Fix truncated dictionary group dropdown by enabling minimumSizeHi…
xiaoyifang Jan 8, 2026
ef27526
Merge pull request #2667 from xiaoyifang/opt/suggestion-list
xiaoyifang Jan 8, 2026
a9dbde6
opt: Optimize gdlookup:// URL: remove 'muted' parameter (#2666)
xiaoyifang Jan 8, 2026
de37daa
UI: add clear Favorites action and confirmation for clearing history/…
xiaoyifang Jan 8, 2026
48324e0
opt: mainwindow double click in the article , dispaly logic optimizat…
xiaoyifang Jan 8, 2026
eafc4d5
fix: website tab , add current tab to favorite (#2672)
xiaoyifang Jan 8, 2026
e2d8c1a
opt: defer init dict server (#2674)
xiaoyifang Jan 9, 2026
616ff17
fix(keyboardstate.cc): forgotten `Win` modifier + Qt >= 6.2 optimizat…
zaufi Jan 12, 2026
844082d
freebsd: missing header file (#2678)
xiaoyifang Jan 12, 2026
20e62ad
opt: add charset to resources url
xiaoyifang Jan 12, 2026
0ba0112
Merge pull request #2679 from xiaoyifang/opt/css-encoding
xiaoyifang Jan 12, 2026
bd03a0d
feat(dict): add support for 'whitelist' parameter in website dictiona…
xiaoyifang Jan 13, 2026
8a5f9e3
New Crowdin updates (#2670)
xiaoyifang Jan 14, 2026
2133180
opt: website script column disabled (#2685)
xiaoyifang Jan 19, 2026
7adb4cc
New Crowdin updates (#2686)
xiaoyifang Jan 20, 2026
95230a0
feat(config): remove network cache options (#2688)
xiaoyifang Jan 21, 2026
4c4c09e
fix(ui): improve window close event handling logic (#2689)
xiaoyifang Jan 21, 2026
def73ee
opt:xapian case folding indexing & search (#2596)
xiaoyifang Jan 21, 2026
f1d4ec4
New Crowdin updates (#2690)
xiaoyifang Jan 22, 2026
7884881
fix(ui): set maximum size policy for translate box (#2694)
xiaoyifang Jan 28, 2026
80a033e
opt: use modern html structure (#2695)
xiaoyifang Jan 28, 2026
3984914
opt: default wayland on wayland environment unless user specify the p…
xiaoyifang Feb 6, 2026
e9cb431
opt: delay scan popup initialization (#2703)
xiaoyifang Feb 25, 2026
b94263f
fix conflict
xiaoyifang Feb 26, 2026
75cc48d
upgrade to 26.3.0
xiaoyifang Feb 26, 2026
7eb3b6f
update flatpak version metainfo
xiaoyifang Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/Release-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
version: 26.1.1
prerelease: ${{ !contains(github.ref_name,'master') }}
versionSuffix: ${{ !contains(github.ref_name,'master') && 'alpha' || 'Release' }}
on:
Expand Down Expand Up @@ -153,6 +152,8 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # need all tags to genearte changelog
- name: Load version from VERSION file
run: echo "version=$(xargs < VERSION)" >> $GITHUB_ENV
- name: Get git short SHA
id: shortSHA
run: |
Expand Down
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,10 @@ endif ()

include(FeatureSummary)

file(READ "VERSION" PROJECT_VERSION_ST)
string(STRIP "${PROJECT_VERSION_ST}" PROJECT_VERSION_ST)
project(goldendict-ng
VERSION 26.1.1
VERSION ${PROJECT_VERSION_ST}
LANGUAGES CXX C)

if (APPLE)
Expand Down Expand Up @@ -67,7 +69,7 @@ if (WITH_TTS)
list(APPEND GD_QT_COMPONENTS TextToSpeech)
endif ()

find_package(Qt6 REQUIRED COMPONENTS ${GD_QT_COMPONENTS})
find_package(Qt6 6.2 REQUIRED COMPONENTS ${GD_QT_COMPONENTS})

qt_standard_project_setup()
set(CMAKE_AUTORCC ON) # not included in the qt_standard_project_setup
Expand Down
1 change: 1 addition & 0 deletions VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
26.3.0
4 changes: 2 additions & 2 deletions cmake/Deps_Linux.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
find_package(PkgConfig REQUIRED)

set(Optional_Pkgs "")
list(APPEND Optional_Pkgs "fmt")
if (USE_SYSTEM_TOML)
list(APPEND Optional_Pkgs "tomlplusplus")
endif ()
Expand Down Expand Up @@ -31,7 +30,8 @@ pkg_check_modules(DEPS REQUIRED IMPORTED_TARGET


find_package(BZip2 REQUIRED) # FreeBSD misses .pc file https://www.freshports.org/archivers/bzip2
target_link_libraries(${GOLDENDICT} PRIVATE PkgConfig::DEPS BZip2::BZip2)
find_package(fmt REQUIRED)
target_link_libraries(${GOLDENDICT} PRIVATE PkgConfig::DEPS BZip2::BZip2 fmt::fmt)

# On FreeBSD, there are two iconv, libc iconv & GNU libiconv.
# The system one is good enough, the following is a workaround to use libc iconv on freeBSD.
Expand Down
4 changes: 2 additions & 2 deletions cmake/Deps_macOS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ target_link_libraries(${GOLDENDICT} PRIVATE ${CARBON_LIBRARY})
find_package(PkgConfig REQUIRED)

set(Optional_Pkgs "")
list(APPEND Optional_Pkgs "fmt")
if (USE_SYSTEM_TOML)
list(APPEND Optional_Pkgs "tomlplusplus")
endif ()
Expand Down Expand Up @@ -51,7 +50,8 @@ pkg_check_modules(DEPS REQUIRED IMPORTED_TARGET

find_package(Iconv REQUIRED)
find_package(BZip2 REQUIRED)
target_link_libraries(${GOLDENDICT} PRIVATE PkgConfig::DEPS BZip2::BZip2 Iconv::Iconv)
find_package(fmt REQUIRED)
target_link_libraries(${GOLDENDICT} PRIVATE PkgConfig::DEPS BZip2::BZip2 Iconv::Iconv fmt::fmt)

if (WITH_EPWING_SUPPORT)
find_library(EB_LIBRARY eb REQUIRED)
Expand Down
37 changes: 37 additions & 0 deletions docs/startup_optimization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# GoldenDict-ng Startup Performance Optimization Record

## 1. Optimization Goal
Reduce interface stuttering during cold start, shorten the perceived time from clicking to displaying the main window, and lower the CPU and disk I/O peaks during the startup phase.

## 2. Core Strategy: Deferred Loading & Staged Startup
Decouple non-critical tasks from the `MainWindow` constructor and synchronous initialization flow. Utilize `QTimer::singleShot` to trigger these tasks in stages after the main event loop starts, achieving a "progressive startup."

## 3. Optimization Item List

| Task Item | Original Timing | Optimized Timing | Remarks |
| :--- | :--- | :--- | :--- |
| **ArticleInspector (Debugger)** | Sync creation in constructor | **Lazy creation** | Instantiated only when "Inspect Element" is triggered |
| **ScanPopup (Scan Progress)** | Sync trigger in constructor | **Delayed 1,000ms** | Avoids QWebEngine loading blocking main window display |
| **TrayIcon** | Sync init in constructor | **Delayed 1,000ms** | Reduces synchronous communication with system shell |
| **GlobalHotkeys** | Sync installation in constructor | **Delayed 2,000ms** | Moves system-level hotkey registration to background |
| **doDeferredInit (Deep Init)** | Sync execution at end of constructor | **Delayed 3,000ms** | Avoids peak I/O for file handles and abbreviation loading |
| **FullTextSearch (FTS Indexing)** | Sync start in `makeDictionaries` | **Delayed 5,000ms** | Ensures UI is idle before starting large-scale disk scanning |
| **New Release Check** | Immediate execution (0ms) | **Delayed 10,000ms** | Moves network requests and JSON parsing after stability |

## 4. Technical Details

### 4.1 Automatic Fallback Mechanism (`ensureInitDone`)
For the `doDeferredInit` delay, existing dictionary class implementations (e.g., `DslDictionary`, `MdxDictionary`) already include `ensureInitDone()` protection logic.
- **Safety**: If a user performs a lookup or FTS search before the delay (3s) expires, the code will automatically trigger synchronous initialization, ensuring no loss of functionality.
- **Experience**: The delay is only to release system resources and does not cause functional deadlocks.

### 4.2 UI Responsiveness Priority
By delaying `ScanPopup` and `ArticleInspector` (both WebEngine-driven), we significantly reduce the peak frequency of VRAM and RAM allocation, allowing the main viewport (`ArticleView`) to complete its first-paint at the highest priority.

## 5. Expected Results
- **Perceived Speedup**: Main window display speed improved by 30% - 50%.
- **I/O Peak Shaving**: Smooths the disk I/O "spike" from massive dictionary loading into a sustained "low-load" process over several seconds.
- **Stability**: Reduces the probability of thread deadlocks or UI freezes caused by resource contention during critical startup moments.

---
*Date: 2026-02-05*
86 changes: 37 additions & 49 deletions locale/ar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -888,10 +888,6 @@ between classic and school orthography in cyrillic)</source>
<source>Add folder</source>
<translation>أضف المجلد</translation>
</message>
<message>
<source>Clear All</source>
<translation>Clear All</translation>
</message>
<message>
<source>Favorites:</source>
<translation>المفضلة:</translation>
Expand All @@ -900,10 +896,6 @@ between classic and school orthography in cyrillic)</source>
<source>All selected items will be deleted. Continue?</source>
<translation>سيتم حذف جميع العناصر المحددة. يكمل؟</translation>
</message>
<message>
<source>Clear All Items</source>
<translation>Clear All Items</translation>
</message>
<message>
<source>Are you sure you want to clear all items?</source>
<translation>Are you sure you want to clear all items?</translation>
Expand All @@ -912,6 +904,14 @@ between classic and school orthography in cyrillic)</source>
<source>Make this folder the target of adding/removing words actions.</source>
<translation type="unfinished">Make this folder the target of adding/removing words actions.</translation>
</message>
<message>
<source>Clear</source>
<translation>مسح</translation>
</message>
<message>
<source>Clear Favorites</source>
<translation>مسح المفضلة</translation>
</message>
</context>
<context>
<name>Forvo::ForvoArticleRequest</name>
Expand Down Expand Up @@ -1113,6 +1113,14 @@ between classic and school orthography in cyrillic)</source>
<source>Are you sure you want to remove all the groups?</source>
<translation>هل أنت متأكد من إزالة كل المجموعات؟</translation>
</message>
<message>
<source>Add a new dictionary group</source>
<translation>إضافة مجموعة قاموس جديدة</translation>
</message>
<message>
<source>&amp;Add group</source>
<translation>أ&amp;ضف مجموعة</translation>
</message>
</context>
<context>
<name>HistoryPaneWidget</name>
Expand Down Expand Up @@ -2622,6 +2630,14 @@ To find &apos;*&apos;, &apos;?&apos;, &apos;[&apos;, &apos;]&apos; symbols use &
<source>Lock Panels</source>
<translation>تأمين اللوحات</translation>
</message>
<message>
<source>Clear History</source>
<translation>مسح المحفوظات</translation>
</message>
<message>
<source>Are you sure you want to clear all history items?</source>
<translation>هل أنت متأكد من أنك تريد مسح جميع عناصر التاريخ؟</translation>
</message>
</context>
<context>
<name>Mdx::MdxArticleRequest</name>
Expand Down Expand Up @@ -3296,42 +3312,6 @@ you are browsing. If some site breaks because of this, try disabling this.</sour
<source>Disallow loading content from other sites (hides most advertisements)</source>
<translation>امنع تحميل المحتوى من مواقع أخرى (يخفي أغلب الإعلانات)</translation>
</message>
<message>
<source>Some sites detect GoldenDict via HTTP headers and block the requests.
Enable this option to workaround the problem.</source>
<translation>بعض المواقع تكتشف القاموس الذهبي من خلال ترويسات HTTP وتمنع الطلبات.
مكّن هذا الخيار للالتفاف حول المشكلة.</translation>
</message>
<message>
<source>Do not identify GoldenDict in HTTP headers</source>
<translation>لا تعرّف القاموس الذهبي في ترويسات HTTP</translation>
</message>
<message>
<source>Maximum network cache size:</source>
<translation>الحد الأقصى لحجم ذاكرة التخزين المؤقت للشبكة:</translation>
</message>
<message>
<source>Maximum disk space occupied by GoldenDict&apos;s network cache in
%1
If set to 0 the network disk cache will be disabled.</source>
<translation>الحد الأقصى لمساحة القرص الذي يشغله GoldenDict&apos;s للشبكة ذاكرة التخزين المؤقت في
%1
إذا تم تعيين إلى 0 سيتم تعطيل ذاكرة التخزين المؤقت لقرص الشبكة.</translation>
</message>
<message>
<source> MiB</source>
<translation> MiB</translation>
</message>
<message>
<source>When this option is enabled, GoldenDict
clears its network cache from disk during exit.</source>
<translation>عند تمكين هذا الخيار ، يقوم GoldenDict
بمسح ذاكرة التخزين المؤقت للشبكة من القرص أثناء الخروج.</translation>
</message>
<message>
<source>Clear network cache on exit</source>
<translation>امسح ذاكرة التخزين المؤقت للشبكة عند الخروج</translation>
</message>
<message>
<source>When this is enabled, the program periodically
checks if a new, updated version of GoldenDict
Expand Down Expand Up @@ -3507,10 +3487,6 @@ from Stardict, Babylon and GLS dictionaries</source>
<source>Save debug messages to gd_log.txt in the config folder</source>
<translation>Save debug messages to gd_log.txt in the config folder</translation>
</message>
<message>
<source>Open website dictionary in seperate tab</source>
<translation>فتح قاموس الموقع في علامة تبويب منفصلة</translation>
</message>
<message>
<source>S&amp;can</source>
<translation>امسح</translation>
Expand All @@ -3523,6 +3499,10 @@ from Stardict, Babylon and GLS dictionaries</source>
<source>Suppress JavaScript dialogs</source>
<translation>قمع مربعات حوار جافا سكريبت</translation>
</message>
<message>
<source>Open website dictionary in separate tab</source>
<translation>فتح قاموس الموقع في علامة تبويب منفصلة</translation>
</message>
</context>
<context>
<name>ProgramTypeEditor</name>
Expand Down Expand Up @@ -3705,7 +3685,7 @@ from Stardict, Babylon and GLS dictionaries</source>
</message>
<message>
<source>Can&apos;t save article: %1</source>
<translation type="unfinished">Can&apos;t save article: %1</translation>
<translation>تعذّر حفظ المقالة: %1</translation>
</message>
<message>
<source>Save PDF complete</source>
Expand Down Expand Up @@ -3774,6 +3754,10 @@ from Stardict, Babylon and GLS dictionaries</source>
<source>WARNING: %1</source>
<translation>تحذير: %1</translation>
</message>
<message>
<source>Definition</source>
<translation>التعريف</translation>
</message>
</context>
<context>
<name>ScanPopupToolBar</name>
Expand Down Expand Up @@ -4250,6 +4234,10 @@ Full list of availiable languages can be found &lt;a href=&quot;https://linguali
<source>Only available when opening websites in separate tabs. Can be a file path (relative to config directory or absolute) or direct script content.</source>
<translation>متاح فقط عند فتح المواقع في علامات تبويب منفصلة. يمكن أن يكون مسار الملف (نسبة إلى مجلد التكوين أو مطلق) أو محتوى البرنامج النصي المباشر.</translation>
</message>
<message>
<source>This column is disabled because &quot;Open website dictionary in separate tab&quot; option is not enabled in Preferences.</source>
<translation>هذا العمود معطل لأن &quot;فتح قاموس الموقع في علامة تبويب منفصلة&quot; لم يتم تمكينه في التفضيلات.</translation>
</message>
</context>
<context>
<name>WordFinder</name>
Expand Down
Loading
Loading