Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
05b92d9
feat: Wayland migration and PR fixes
pplupo Jul 3, 2026
685f45b
Merge branch 'origin/main' into feature/wayland-migration
pplupo Jul 3, 2026
8f28800
fix: address code review comments on dbus, qt paths and database formats
pplupo Jul 3, 2026
acc5477
Fix Qt discovery from common.cmake
pplupo Jul 4, 2026
9d4dfe2
fix: link OpenGLWidgets for the Wayland CEF GL overlay
pplupo Jul 7, 2026
61c0eb1
fix: tab right-click context menu renders at screen center on Wayland
pplupo Jul 10, 2026
ea20112
fix: build error, QContextMenuEvent uses globalPos() not globalPositi…
pplupo Jul 10, 2026
5099fd3
fix: tab context menu centers on window instead of appearing at click…
pplupo Jul 10, 2026
3efda65
fix: correct context-menu Wayland fix, previous attempt was a no-op
pplupo Jul 10, 2026
76db0b9
fix: qt scaling
rikled Jul 17, 2026
f53dcde
fix: X11Backend must use Qt's X11 connection, not a private one
rikled Jul 18, 2026
fa05cba
fix: merge issues in cmake file
rikled Jul 19, 2026
1561d5e
Merge branch with cmake merge-issue fix
pplupo Jul 23, 2026
fa1b1b1
Remove incorrect Wayland early-return from DPI ratio helpers
pplupo Jul 22, 2026
b29381b
Remove Wayland hardcoded-neutral scaling factor across window classes
pplupo Jul 23, 2026
7f76fe7
TEMPORARY: log getScreenDpiRatioByWidget() readings to investigate gi…
pplupo Jul 23, 2026
f71ce83
TEMPORARY: log both widget- and screen-level devicePixelRatio()
pplupo Jul 23, 2026
18189fb
Set HighDpiScaleFactorRoundingPolicy::PassThrough on Wayland
pplupo Jul 23, 2026
15516ab
Re-apply window scaling once Qt's real devicePixelRatio() arrives
pplupo Jul 23, 2026
3b25047
Remove unused Utils::getScreenDpiRatio(int) overload
pplupo Jul 23, 2026
9b39dbe
Remove temporary DPI-race debug logging
pplupo Jul 23, 2026
26bacf5
Fix gigantic message dialogs on Wayland
pplupo Jul 25, 2026
4d019e3
Force dialog resize after re-applying scaling on Wayland
pplupo Jul 25, 2026
d250db5
Stop double-scaling native widgets on Wayland
pplupo Jul 25, 2026
104067b
Revert "Stop double-scaling native widgets on Wayland"
pplupo Jul 25, 2026
4c078eb
TEMPORARY: log per-widget DPI factor to diagnose oversized dialog
pplupo Jul 25, 2026
81ec7cb
Fix oversized/mis-styled message dialog on Wayland
pplupo Jul 25, 2026
eaaaccd
Fix Wayland message dialog size and style it like the GTK dialog
pplupo Jul 26, 2026
44e4407
Refine Wayland message dialog styling toward the GTK look
pplupo Jul 26, 2026
1cce5fb
Fix Wayland message dialog: remove DPI-scaling from min-width, left-a…
pplupo Jul 26, 2026
40e6ede
Center icon+text block over buttons in Wayland message dialog
pplupo Jul 26, 2026
51da4a3
feat: configurable default save format (ODF / OOXML)
pplupo Jul 28, 2026
941e8c6
fix: add blank line before onboarding dialog's Settings hint
pplupo Jul 29, 2026
cd7eacb
fix: make "create new" tile badges follow the default save format
pplupo Jul 29, 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 .docker/desktop-apps.bake.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ FROM core-base AS desktop-linux
bison \
libnotify-dev \
libcups2-dev \
libwayland-dev \
libdbus-1-dev \
libxcb-util0-dev \
libxcb-xkb-dev \
Expand Down Expand Up @@ -102,7 +103,7 @@ FROM core-base AS desktop-linux
-DVCPKG_MANIFEST_FEATURES="desktop-editors" \
-DABOUT_PAGE_APP_NAME="${ABOUT_PAGE_APP_NAME}" \
/desktop-apps/win-linux/ && \
cmake --build . && \
cmake --build . -- -j4 && \
cmake --install . && \
ccache --show-stats && \
cp -a desktopeditors /desktopeditors
Expand Down
7 changes: 7 additions & 0 deletions common/loginpage/src/document-creation-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,13 @@ window.DocumentCreationGrid = function (config = {}) {
`).join('')}
</div>`;

// clear any previous render (e.g. a re-render with a new
// DocumentCreationGrid instance after the default save format
// changed) -- queried against the DOM rather than the local
// $el, since a fresh instance's own $el starts out empty
// regardless of what an earlier instance already rendered here
parentElement.find('.document-creation-grid').remove();

$parent = parentElement;
$el = $parent.append(_template).find('.document-creation-grid');
},
Expand Down
4 changes: 4 additions & 0 deletions common/loginpage/src/locale.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@ l10n.en = {
settOptLaunchMode: 'Open file',
settOptLaunchInTab: 'In its own tab',
settOptLaunchInWindow: 'In its own window',
settDefaultSaveFormat: 'Default save format',
settOptFormatOoxml: 'Compatibility (OOXML)',
settOptFormatOdf: 'Sovereign (ODF)',
settDefaultSaveFormatManaged: 'Your default save format is managed by your organization.',
settSpellcheckDetection: 'Spelling language detection',
settOptDisabled: 'Disabled',
settOptEnabled: 'Enabled',
Expand Down
144 changes: 87 additions & 57 deletions common/loginpage/src/panelrecent.js
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,76 @@
});
};

function _document_types(format) {
const isODF = format === 'ODF';
return [
{
id: 'word',
title: utils.Lang.newDoc,
langKey: 'newDoc',
formatLabel: {
value: isODF ? 'ODT' : 'DOCX',
gradientColorStart: '#4298C5',
gradientColorEnd: '#2D84B2',
bgColorWinXP: '#287ca9',
},
icon: '#docx-big',
},
{
id: 'cell',
title: utils.Lang.newXlsx,
langKey: 'newXlsx',
formatLabel: {
value: isODF ? 'ODS' : 'XLSX',
gradientColorStart: '#5BB514',
gradientColorEnd: '#318C2B',
bgColorWinXP: '#3aa133',
},
icon: '#xlsx-big',
},
{
id: 'slide',
title: utils.Lang.newPptx,
langKey: 'newPptx',
formatLabel: {
value: isODF ? 'ODP' : 'PPTX',
gradientColorStart: '#F4893A',
gradientColorEnd: '#DE7341',
bgColorWinXP: '#f36700',
},
icon: '#pptx-big',
},
{
// forms always stay DOCXF/PDF regardless of the
// ODF/OOXML default save format setting
id: 'form',
title: utils.Lang.newForm,
langKey: 'newForm',
formatLabel: {
value: 'PDF',
gradientColorStart: '#F36653',
gradientColorEnd: '#D2402D',
bgColorWinXP: '#e54d39',
},
icon: '#pdf-big',
}
];
}

// (re)renders the "create new" tile grid for the given default save
// format ('ODF' or anything else, treated as OOXML). Safe to call
// repeatedly -- DocumentCreationGrid.render() clears its own previous
// output before appending.
function _render_document_grid(format) {
const docGrid = new DocumentCreationGrid({
documentTypes: _document_types(format),
onDocumentSelect: (docType) => {
window.sdk.command("create:new", docType);
}
});
docGrid.render(this.view.$panel.find("#area-document-creation-grid"));
}

function _init_ppmenu() {
if (ppmenu) {
Menu.closeAll();
Expand Down Expand Up @@ -657,6 +727,17 @@
}

this.appready = true;
} else if (/settings:init/.test(cmd)) {
// read directly rather than relying solely on the
// Settings panel's own defaultformat:changed relay,
// since that panel (and its settings:init parsing)
// isn't constructed until the user opens Settings --
// this fires at genuine startup regardless
try {
const settings = JSON.parse($('<div>').html(param).text());
if (settings.defaultsaveformat)
_render_document_grid.call(this, settings.defaultsaveformat.format);
} catch (e) { /* ignore malformed settings:init */ }
}
});

Expand All @@ -674,66 +755,15 @@
this.dndZone = new DnDFileZone();
this.dndZone.render(this.view.$panel.find("#area-dnd-file"));

const docGrid = new DocumentCreationGrid({
documentTypes: [
{
id: 'word',
title: utils.Lang.newDoc,
langKey: 'newDoc',
formatLabel: {
value: 'DOCX',
gradientColorStart: '#4298C5',
gradientColorEnd: '#2D84B2',
bgColorWinXP: '#287ca9',
},
icon: '#docx-big',
},
{
id: 'cell',
title: utils.Lang.newXlsx,
langKey: 'newXlsx',
formatLabel: {
value: 'XLSX',
gradientColorStart: '#5BB514',
gradientColorEnd: '#318C2B',
bgColorWinXP: '#3aa133',
},
icon: '#xlsx-big',
},
{
id: 'slide',
title: utils.Lang.newPptx,
langKey: 'newPptx',
formatLabel: {
value: 'PPTX',
gradientColorStart: '#F4893A',
gradientColorEnd: '#DE7341',
bgColorWinXP: '#f36700',
},
icon: '#pptx-big',
},
{
id: 'form',
title: utils.Lang.newForm,
langKey: 'newForm',
formatLabel: {
value: 'PDF',
gradientColorStart: '#F36653',
gradientColorEnd: '#D2402D',
bgColorWinXP: '#e54d39',
},
icon: '#pdf-big',
}
],
onDocumentSelect: (docType) => {
window.sdk.command("create:new", docType);
}
});
// renders with the OOXML labels first (matches the
// compiled-in Tier-1 default); corrected via settings:init
// above or defaultformat:changed below as soon as the
// actual resolved/chosen format is known
_render_document_grid.call(this, 'OOXML');
CommonEvents.on('defaultformat:changed', _render_document_grid.bind(this));

CommonEvents.on('lang:changed', _init_ppmenu.bind(this));

docGrid.render(this.view.$panel.find("#area-document-creation-grid"));

$('#idx-recent-filter', this.view.$panel).on('input', _on_filter_recents.bind(this));

return this;
Expand Down
36 changes: 36 additions & 0 deletions common/loginpage/src/panelsettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,18 @@
</section>
</div>
</div>
<div class='settings-field' id="opts-default-save-format" style='display:none;'>
<label class='sett__caption' l10n>${_lang.settDefaultSaveFormat}</label>
<div class='sett--label-lift-top hbox'>
<section class='box-cmp-select'>
<select class='combobox'>
<option value='OOXML' l10n>${_lang.settOptFormatOoxml}</option>
<option value='ODF' l10n>${_lang.settOptFormatOdf}</option>
</select>
</section>
</div>
<label class='sett__caption' id='sett-save-format-managed' style='display:none;' l10n>${_lang.settDefaultSaveFormatManaged}</label>
</div>
<div class='settings-field' id="opts-spellcheck-mode" style='display:none;'>
<label class='sett__caption' l10n>${_lang.settSpellcheckDetection}</label>
<div class='sett--label-lift-top hbox'>
Expand Down Expand Up @@ -318,6 +330,7 @@
$optsUITheme,
$optsSpellcheckMode,
$optsLaunchMode,
$optsDefaultSaveFormat,
$optsAutoupdateMode;
let $chGpu,
$chUseAI;
Expand Down Expand Up @@ -456,6 +469,15 @@
$optsSpellcheckMode.selectpicker('refresh');
}

/* an enforced format is administrator policy: the combo is
disabled, so nothing is sent back for the native shell to store */
if ( $optsDefaultSaveFormat && !appSettings.defaultsaveformat.locked ) {
_new_settings.defaultsaveformat = $optsDefaultSaveFormat.val();
$optsDefaultSaveFormat.selectpicker('refresh');

CommonEvents.fire('defaultformat:changed', [_new_settings.defaultsaveformat]);
}

if ( $chGpu ) {
_new_settings.usegpu = $chGpu.prop("checked");

Expand Down Expand Up @@ -651,6 +673,20 @@
});
}

if ( !!appSettings.defaultsaveformat ) {
($optsDefaultSaveFormat = ($('#opts-default-save-format', $panel).show().find('select')))
.val(appSettings.defaultsaveformat.format)
.prop('disabled', !!appSettings.defaultsaveformat.locked)
.selectpicker().on('change', e => {
$btnApply.isdisabled() && $btnApply.disable(false);
});

if ( appSettings.defaultsaveformat.locked )
$('#sett-save-format-managed', $panel).show();

CommonEvents.fire('defaultformat:changed', [appSettings.defaultsaveformat.format]);
}

if ( appSettings.spellcheckdetect !== undefined ) {
($optsSpellcheckMode = ($('#opts-spellcheck-mode', $panel).show().find('select')))
.val(appSettings.spellcheckdetect)
Expand Down
25 changes: 21 additions & 4 deletions win-linux/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ set(BUILD_DESKTOP TRUE CACHE INTERNAL "tell common to prepare third party for de
include(${CORE_ROOT_DIR}/common.cmake)


# 2. Find Qt Packages
if(UNIX)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS DBus)
add_definitions(-DLINUX -D_LINUX -D_WAYLAND)
Expand Down Expand Up @@ -115,6 +114,8 @@ if(NOT TARGET allthemesgen)
add_subdirectory( "${CORE_ROOT_DIR}/DesktopEditor/allthemesgen" allthemesgen )
endif()



# 3. Definitions & Global Config
add_definitions(-D__DONT_WRITE_IN_APP_TITLE)
add_definitions(-DAPP_ICON_PATH="./res/icons/desktopeditors-eo.ico")
Expand Down Expand Up @@ -279,6 +280,9 @@ elseif(UNIX AND NOT APPLE)
src/platform_linux/gtkprintdialog.cpp
src/platform_linux/gtkutils.cpp
src/platform_linux/linux_window_utils.cpp
src/platform_linux/x11backend.cpp
src/platform_linux/waylandbackend.cpp
src/platform_linux/platformbackendfactory.cpp
extras/update-daemon/src/classes/csocket.cpp
)
list(APPEND COMMON_HEADERS
Expand All @@ -294,11 +298,20 @@ elseif(UNIX AND NOT APPLE)
src/platform_linux/gtkprintdialog.h
src/platform_linux/gtkutils.h
src/platform_linux/linux_window_utils.h
src/platform_linux/iplatformbackend.h
src/platform_linux/x11backend.h
src/platform_linux/waylandbackend.h
extras/update-daemon/src/classes/csocket.h
)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED glib-2.0 gtk+-3.0 atk gtk+-unix-print-3.0 xcb xext libnotify)
pkg_check_modules(GTK3 REQUIRED glib-2.0 gtk+-3.0 atk gtk+-unix-print-3.0 libnotify)
pkg_check_modules(XCB_LIBS xcb xext)
pkg_check_modules(X11_LIBS x11 x11-xcb)
if(XCB_LIBS_FOUND AND X11_LIBS_FOUND)
add_definitions(-DHAVE_X11)
endif()
add_definitions(-DHAVE_WAYLAND)

# Custom command for glib-compile-resources
set(GRESOURCE_XML ${CMAKE_CURRENT_SOURCE_DIR}/res/gresource.xml)
Expand All @@ -310,7 +323,10 @@ elseif(UNIX AND NOT APPLE)
)
list(APPEND COMMON_SOURCES ${GRESOURCE_C})

set(PLATFORM_LIBS ${GTK3_LIBRARIES} X11 X11-xcb cups)
set(PLATFORM_LIBS ${GTK3_LIBRARIES} cups)
if(XCB_LIBS_FOUND AND X11_LIBS_FOUND)
list(APPEND PLATFORM_LIBS ${X11_LIBS_LIBRARIES} ${XCB_LIBS_LIBRARIES})
endif()
endif()

# 7. Create Executable
Expand Down Expand Up @@ -362,8 +378,9 @@ target_link_libraries(DesktopEditors PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Svg
Qt${QT_VERSION_MAJOR}::PrintSupport
Qt${QT_VERSION_MAJOR}::Multimedia
Qt${QT_VERSION_MAJOR}::Multimedia
Qt${QT_VERSION_MAJOR}::MultimediaWidgets
Qt${QT_VERSION_MAJOR}::OpenGLWidgets
${PLATFORM_LIBS}
${DBUS_LIBRARIES}

Expand Down
4 changes: 2 additions & 2 deletions win-linux/res/icons/logo-dark-eo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions win-linux/res/icons/logo-light-eo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion win-linux/res/icons/message_warn.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions win-linux/res/styles/styles.qss
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ QPushButton#toolButtonMain {
font-weight: bold;
border-left: 0px;
border-right: 1px solid %7;
qproperty-icon: url(:/logo-light-eo.png);
qproperty-icon: url(:/logo-light-eo.svg);
}
#mainPanel[rtl=true] QPushButton#toolButtonMain {border-right: 0px; border-left: 1px solid %7;}
#mainPanel[win10=true] QPushButton#toolButtonMain {margin-top: 5px;}
Expand Down Expand Up @@ -94,7 +94,7 @@ QPushButton#toolButtonDownload {border-left: 0px; border-right: 1px solid %6; ma
#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize[class=min] {image: url(:/maximize_light.svg) center no-repeat;}
#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize {image: url(:/minimize_light.svg) center no-repeat;}
#mainPanel[uithemetype=dark] QPushButton#toolButtonClose {image: url(:/close_light.svg) center no-repeat;}
#mainPanel[uithemetype=dark] QPushButton#toolButtonMain {qproperty-icon: url(:/logo-dark-eo.png);}
#mainPanel[uithemetype=dark] QPushButton#toolButtonMain {qproperty-icon: url(:/logo-dark-eo.svg);}

/* Menu */

Expand Down
Loading