This commit is contained in:
maxkadushkin
2025-12-05 00:06:09 +03:00
16 changed files with 646 additions and 192 deletions

View File

@ -174,24 +174,25 @@ h4 {
.switch-svg {
@media only screen {
@media (-webkit-min-device-pixel-ratio: 1.1) and (-webkit-max-device-pixel-ratio: 1.9),
(min-resolution: 1.1dppx) and (max-resolution: 1.9dppx),
(min-resolution: 97dpi) and (max-resolution: 191dpi) {
@media (-webkit-min-device-pixel-ratio: 1.25) and (-webkit-max-device-pixel-ratio: 1.99),
(min-resolution: 1.25dppx) and (max-resolution: 1.99dppx),
(min-resolution: 120dpi) and (max-resolution: 191dpi) {
svg.icon {
display: none;
}
}
@media (-webkit-device-pixel-ratio: 1),
(resolution: 1dppx),
(resolution: 96dpi) {
i.icon, i.badge {
(min-resolution: 1dppx) and (max-resolution: 1.24dppx),
(min-resolution: 1dpi) and (max-resolution: 119dpi) {
i.icon, i.badge, .icon.img-format {
display: none;
}
}
@media (-webkit-min-device-pixel-ratio: 2),
(min-resolution: 2dppx),
(min-resolution: 192dpi) {
i.icon, i.badge {
i.icon, i.badge, .icon.img-format {
display: none;
}
}
@ -438,7 +439,7 @@ li.menu-item {
.col-name {
height: 32px;
.switch-svg();
.icon {
// width: 32px;
@ -650,6 +651,8 @@ li.menu-item {
}
}
.switch-svg();
.img-el {
display: inline-block;
&.folder {
@ -711,9 +714,9 @@ li.menu-item {
opacity: 0;
display: flex;
align-items: center;
i.icon {
display: block;
display: block;
}
button {
@ -809,6 +812,7 @@ li.menu-item {
&.templates {
/* padding: 20px;*/
padding-left: 35px;
}
// Folders
@ -817,7 +821,7 @@ li.menu-item {
justify-content: normal;
gap: clamp(10px, 6vw, 104px);
> div {
min-width: 30px;
min-width: 30px;
}
}
@ -946,7 +950,7 @@ li.menu-item {
padding-left: 104px;
padding-right: 112px;
}
> * {
margin-right: 32px;
}
@ -957,17 +961,17 @@ li.menu-item {
}
> * {
margin-bottom: 40px;
margin-bottom: 40px;
}
> *:last-child {
margin-bottom: 0;
margin-bottom: 0;
}
.file-list-head,
.file-list-body .row {
> * {
margin-right: 8px;
margin-right: 8px;
width: 264px;
}
@ -1022,13 +1026,13 @@ li.menu-item {
.file-list-body {
.row {
justify-content: flex-start;
> * {
margin-right: calc(8vw);
}
}
}
}
}
}
}
}
#area-document-creation-grid {
@ -1191,15 +1195,15 @@ li.menu-item {
padding: 0 8px 0 0;
overflow: visible;
position: absolute;
top: 50%;
top: 50%;
right: 0;
transform: translateY(-50%);
display: flex;
align-items: center;
.rtl & {
padding: 0 0 0 8px;
right: auto;
left: 0;
right: auto;
left: 0;
}
.hlayout {
@ -2182,17 +2186,15 @@ li.menu-item {
}
.templates {
padding-left: 35px;
.rtl & {
padding-left: 40;
padding-right: 35px;
}
.rtl & {
padding-left: 40;
}
.flexbox.content-box > * {
padding-left: 5px;
.rtl & {
padding-left: 0;
padding-right: 5px;
padding-left: 5px;
.rtl & {
padding-left: 0;
padding-right: 5px;
}
}
@ -2220,17 +2222,17 @@ li.menu-item {
content: '';
position: absolute;
bottom: 0;
left: 5px;
right: 0;
left: 5px;
right: 0;
height: 1px;
background-color: @border-divider;
}
.rtl & {
text-align: right;
&::after {
left: 0;
right: 5px;
right: 5px;
}
}
}
@ -2267,7 +2269,7 @@ li.menu-item {
#idx-nothing-found-dark {
display: none;
}
}
}
.no-results-title {
@ -2435,8 +2437,8 @@ li.menu-item {
position: relative;
.badge-wrapper {
display: flex;
.switch-svg();
display: flex;
.switch-svg();
.icon,
i.badge {
@ -2500,7 +2502,7 @@ li.menu-item {
.action-panel.templates {
.table-templates.list {
> * {
margin: 8px;
margin: 8px;
}
}
@ -2661,7 +2663,7 @@ li.menu-item {
border-bottom-left-radius: @border-radius-sidebar-item;
}
&:last-child {
&:nth-last-child(2) {
border-top-right-radius: @border-radius-sidebar-item;
border-bottom-right-radius: @border-radius-sidebar-item;
}
@ -2674,7 +2676,7 @@ li.menu-item {
border-bottom-right-radius: @border-radius-sidebar-item;
}
&:last-child {
&:nth-last-child(2) {
border-top-left-radius: @border-radius-sidebar-item;
border-bottom-left-radius: @border-radius-sidebar-item;
}
@ -2718,12 +2720,12 @@ li.menu-item {
.rtl & {
margin-right: 0;
margin-left: 16px;
}
}
.icon {
display:none;
}
.icon, .icon--default {
border: @scaled-one-px solid @border-divider;
border-radius: 4px;
@ -2739,20 +2741,20 @@ li.menu-item {
.description {
display: flex;
flex-direction: column;
.name {
color: @text-normal;
font-weight: bold;
font-size: 14px;
margin: 4px 0 10px;
}
.pricing, .descr, .file-info {
font-size: 12px;
color: @text-normal;
margin: 0 0 10px;
}
.file-info {
display: flex;
justify-content: space-between;
@ -2763,7 +2765,7 @@ li.menu-item {
font-weight: bold;
}
.btn--landing {
.btn--landing {
margin-left: auto;
margin-top: 10px;
border-radius: 4px;
@ -2800,6 +2802,6 @@ li.menu-item {
.btn--landing {
margin-top: 0;
}
}
}
}
}
}

View File

@ -102,6 +102,9 @@
BE6251BA22BD089100656116 /* dictionaries in Resources */ = {isa = PBXBuildFile; fileRef = BE6251B922BD089100656116 /* dictionaries */; };
BE9A63CD2E2A429F0040CE84 /* ascdocumentscore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE9A63CC2E2A429F0040CE84 /* ascdocumentscore.framework */; };
BE9A63CF2E2A42A60040CE84 /* ooxmlsignature.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE9A63CE2E2A42A60040CE84 /* ooxmlsignature.framework */; };
F10175932EAB756000C6C1B8 /* ASCLicenseController.m in Sources */ = {isa = PBXBuildFile; fileRef = F10175922EAB756000C6C1B8 /* ASCLicenseController.m */; };
F10175942EAB756100C6C1B8 /* ASCLicenseController.m in Sources */ = {isa = PBXBuildFile; fileRef = F10175922EAB756000C6C1B8 /* ASCLicenseController.m */; };
F10175952EAB756100C6C1B8 /* ASCLicenseController.m in Sources */ = {isa = PBXBuildFile; fileRef = F10175922EAB756000C6C1B8 /* ASCLicenseController.m */; };
FC09073E1C1855A400D9E881 /* editors in Resources */ = {isa = PBXBuildFile; fileRef = FC09073D1C1855A400D9E881 /* editors */; };
FC0907411C186A7A00D9E881 /* converter in Resources */ = {isa = PBXBuildFile; fileRef = FC0907401C186A7A00D9E881 /* converter */; };
FC0BD686258B63F700C47F95 /* NSView+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = FC73E6DB207DE3C700EFFD2F /* NSView+Extensions.m */; };
@ -829,6 +832,8 @@
BE95F0A623E9FF590045E0CB /* mac_cefview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mac_cefview.h; sourceTree = "<group>"; };
BE9A63CC2E2A429F0040CE84 /* ascdocumentscore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ascdocumentscore.framework; path = ../../build_tools/out/mac_arm64/onlyoffice/desktopeditors/ascdocumentscore.framework; sourceTree = "<group>"; };
BE9A63CE2E2A42A60040CE84 /* ooxmlsignature.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ooxmlsignature.framework; path = ../../build_tools/out/mac_arm64/onlyoffice/desktopeditors/ooxmlsignature.framework; sourceTree = "<group>"; };
F10175912EAB756000C6C1B8 /* ASCLicenseController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCLicenseController.h; sourceTree = "<group>"; };
F10175922EAB756000C6C1B8 /* ASCLicenseController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASCLicenseController.m; sourceTree = "<group>"; };
FC033D251BB13B9900F6C55F /* mac_application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mac_application.h; sourceTree = "<group>"; };
FC035A5B24855E8C00AF820F /* ASCTabViewType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASCTabViewType.h; sourceTree = "<group>"; };
FC09073D1C1855A400D9E881 /* editors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = editors; path = Vendor/ONLYOFFICE/editors; sourceTree = SOURCE_ROOT; };
@ -1157,6 +1162,15 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
F10175902EAB739E00C6C1B8 /* License */ = {
isa = PBXGroup;
children = (
F10175912EAB756000C6C1B8 /* ASCLicenseController.h */,
F10175922EAB756000C6C1B8 /* ASCLicenseController.m */,
);
path = License;
sourceTree = "<group>";
};
FC035A5A24855E1900AF820F /* Enums */ = {
isa = PBXGroup;
children = (
@ -1691,6 +1705,7 @@
FCF289722150E6A1002FD438 /* Controllers */ = {
isa = PBXGroup;
children = (
F10175902EAB739E00C6C1B8 /* License */,
FCF289742150E820002FD438 /* Common */,
FCF289762150E904002FD438 /* MainWindow */,
FCF289782150E95F002FD438 /* About */,
@ -2251,7 +2266,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "#!/bin/sh\n\n#exit 0\n\nCreateDir() {\nif [ ! -d $1 ]; then\nmkdir -p $1\nelse\nrm -Rf $1\nmkdir -p $1\nfi\n}\n\nBASE_DIR=$(pwd)\nDST_DIR=\"${BASE_DIR}/Vendor/ONLYOFFICE\"\nSRC_BASE_DIR=\"${BASE_DIR}/../../build_tools/out/mac_64/onlyoffice/desktopeditors\"\n\n# Copy application resources\necho \"Copy application resources\"\nCreateDir \"${DST_DIR}/login\"\ncp -vR \"${SRC_BASE_DIR}/index.html\" \"${DST_DIR}/login/index.html\"\ncp -vR \"${SRC_BASE_DIR}/editors/webext/noconnect.html\" \"${DST_DIR}/login/noconnect.html\"\ncp -vR \"${SRC_BASE_DIR}/fonts\" \"${DST_DIR}/login/fonts\"\ncp -vR \"${BASE_DIR}/ONLYOFFICE/Resources/acknowledgments.html\" \"${DST_DIR}/login/acknowledgments.html\"\ncp -vR \"${SRC_BASE_DIR}/license\" \"${DST_DIR}\"\ncp -vR \"${SRC_BASE_DIR}/providers\" \"${DST_DIR}\"\n\n# Copy editors and convertor\necho \"Copy editors and convertor\"\ncd \"$BASE_DIR\"\ncp -vR \"${SRC_BASE_DIR}/editors\" \"${DST_DIR}\"\ncp -vR \"${SRC_BASE_DIR}/converter\" \"${DST_DIR}\"\n";
shellScript = "#!/bin/sh\n\n#exit 0\n\nCreateDir() {\nif [ ! -d $1 ]; then\nmkdir -p $1\nelse\nrm -Rf $1\nmkdir -p $1\nfi\n}\n\nBASE_DIR=$(pwd)\nDST_DIR=\"${BASE_DIR}/Vendor/ONLYOFFICE\"\nSRC_BASE_DIR=\"${BASE_DIR}/../../build_tools/out/mac_64/onlyoffice/desktopeditors\"\n\n# Copy application resources\necho \"Copy application resources\"\nCreateDir \"${DST_DIR}/login\"\ncp -vR \"${SRC_BASE_DIR}/index.html\" \"${DST_DIR}/login/index.html\"\ncp -vR \"${SRC_BASE_DIR}/editors/webext/noconnect.html\" \"${DST_DIR}/login/noconnect.html\"\ncp -vR \"${SRC_BASE_DIR}/fonts\" \"${DST_DIR}/login/fonts\"\ncp -vR \"${BASE_DIR}/ONLYOFFICE/Resources/acknowledgments.html\" \"${DST_DIR}/login/acknowledgments.html\"\ncp -vR \"${SRC_BASE_DIR}/providers\" \"${DST_DIR}\"\n\nCreateDir \"${DST_DIR}/license\"\n[ -d \"${SRC_BASE_DIR}/license\" ] && cp -vR \"${SRC_BASE_DIR}/license\" \"${DST_DIR}\"\n\n# Copy editors and convertor\necho \"Copy editors and convertor\"\ncd \"$BASE_DIR\"\ncp -vR \"${SRC_BASE_DIR}/editors\" \"${DST_DIR}\"\n# cp -vR \"${SRC_BASE_DIR}/converter\" \"${DST_DIR}\"\n";
showEnvVarsInLog = 0;
};
FCB4C6BB26DD018B0012C20D /* Copy Library */ = {
@ -2391,6 +2406,7 @@
FC0BD6AC258B63F700C47F95 /* ASCDownloadController.mm in Sources */,
FC0BD6AD258B63F700C47F95 /* ASCTabCloseButtonCell.m in Sources */,
FC0BD6AE258B63F700C47F95 /* ASCTabTouchBarItem.m in Sources */,
F10175952EAB756100C6C1B8 /* ASCLicenseController.m in Sources */,
FC0BD6AF258B63F700C47F95 /* ASCTabViewController.m in Sources */,
FC2C439625D4356E003A39C4 /* ASCCertificatePreviewTextViewController.m in Sources */,
FC0BD6B0258B63F700C47F95 /* ASCPresentationReporter.mm in Sources */,
@ -2466,6 +2482,7 @@
FCB4C6E526DD018B0012C20D /* ASCDownloadController.mm in Sources */,
FCB4C6E626DD018B0012C20D /* ASCTabCloseButtonCell.m in Sources */,
FCB4C6E726DD018B0012C20D /* ASCTabTouchBarItem.m in Sources */,
F10175932EAB756000C6C1B8 /* ASCLicenseController.m in Sources */,
FCB4C6E826DD018B0012C20D /* ASCTabViewController.m in Sources */,
FCB4C6E926DD018B0012C20D /* ASCCertificatePreviewTextViewController.m in Sources */,
FCB4C6EA26DD018B0012C20D /* ASCPresentationReporter.mm in Sources */,
@ -2541,6 +2558,7 @@
FCD294691BB97D3300318930 /* ASCDownloadController.mm in Sources */,
FCC77C91206CEE85001B7837 /* ASCTabCloseButtonCell.m in Sources */,
FCCC2FE121E5E10D00FB9209 /* ASCTabTouchBarItem.m in Sources */,
F10175942EAB756100C6C1B8 /* ASCLicenseController.m in Sources */,
FC25A1A71C2E844800063A42 /* ASCTabViewController.m in Sources */,
FC2C439525D4356E003A39C4 /* ASCCertificatePreviewTextViewController.m in Sources */,
FC54A2941F94BCE00086F4FE /* ASCPresentationReporter.mm in Sources */,

View File

@ -1075,10 +1075,10 @@
<buttonCell key="cell" type="bevel" title="License agreement" bezelStyle="regularSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="8Ga-Cu-VGe">
<behavior key="behavior" lightByContents="YES"/>
<font key="font" metaFont="label" size="12"/>
<connections>
<action selector="onLicenseButtonClick:" target="kIG-b2-o2F" id="0YB-Fw-bH4"/>
</connections>
</buttonCell>
<connections>
<segue destination="KRO-Tf-SDi" kind="sheet" id="mDF-Nf-qW8"/>
</connections>
</button>
</subviews>
<constraints>
@ -1104,55 +1104,6 @@
</objects>
<point key="canvasLocation" x="1674" y="1756"/>
</scene>
<!--About Controller-->
<scene sceneID="cTW-F0-aao">
<objects>
<viewController id="KRO-Tf-SDi" customClass="ASCAboutController" sceneMemberID="viewController">
<view key="view" id="5RA-3C-cHz">
<rect key="frame" x="0.0" y="0.0" width="800" height="491"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<webView translatesAutoresizingMaskIntoConstraints="NO" id="rxD-dJ-5nd">
<rect key="frame" x="10" y="60" width="780" height="421"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="780" id="5L3-pz-emb"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="420" id="CFF-ti-tZ6"/>
</constraints>
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12" minimumFontSize="7" plugInsEnabled="NO" javaEnabled="NO" javaScriptCanOpenWindowsAutomatically="NO">
<nil key="identifier"/>
</webPreferences>
</webView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UVj-pl-yO9">
<rect key="frame" x="366" y="13" width="69" height="32"/>
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Riu-oE-8dj">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
</buttonCell>
<connections>
<action selector="dismissController:" target="4Gz-l5-4i0" id="VWc-In-XyJ"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="rxD-dJ-5nd" firstAttribute="leading" secondItem="5RA-3C-cHz" secondAttribute="leading" constant="10" id="ATh-Zd-Bng"/>
<constraint firstItem="rxD-dJ-5nd" firstAttribute="top" secondItem="5RA-3C-cHz" secondAttribute="top" constant="10" id="OOn-Cf-86P"/>
<constraint firstItem="UVj-pl-yO9" firstAttribute="centerX" secondItem="5RA-3C-cHz" secondAttribute="centerX" id="Rnw-Js-xvO"/>
<constraint firstAttribute="trailing" secondItem="rxD-dJ-5nd" secondAttribute="trailing" constant="10" id="SGh-ex-i5C"/>
<constraint firstAttribute="bottom" secondItem="UVj-pl-yO9" secondAttribute="bottom" constant="20" id="W90-kj-63m"/>
<constraint firstItem="UVj-pl-yO9" firstAttribute="top" secondItem="rxD-dJ-5nd" secondAttribute="bottom" constant="20" symbolic="YES" id="l3C-JB-km4"/>
</constraints>
</view>
<connections>
<outlet property="eulaWebView" destination="rxD-dJ-5nd" id="OXX-65-NSp"/>
</connections>
</viewController>
<customObject id="4Gz-l5-4i0" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2693" y="1069.5"/>
</scene>
<!--Common View Controller-->
<scene sceneID="hIz-AP-VOD">
<objects>
@ -1546,6 +1497,80 @@ DQ
</objects>
<point key="canvasLocation" x="131" y="34"/>
</scene>
<!--Window Controller-->
<scene sceneID="wU6-OG-e5u">
<objects>
<windowController storyboardIdentifier="ASCLicenseWindowControllerId" id="quU-PS-Zqh" sceneMemberID="viewController">
<window key="window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" titlebarAppearsTransparent="YES" id="ooH-wy-fad">
<windowStyleMask key="styleMask" titled="YES" fullSizeContentView="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="294" y="313" width="680" height="340"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
<view key="contentView" id="3dt-ev-Idy">
<rect key="frame" x="0.0" y="0.0" width="680" height="340"/>
<autoresizingMask key="autoresizingMask"/>
</view>
<connections>
<outlet property="delegate" destination="quU-PS-Zqh" id="CHC-gh-jHU"/>
</connections>
</window>
<connections>
<segue destination="VpZ-MX-EgL" kind="relationship" relationship="window.shadowedContentViewController" id="90Y-gx-R9D"/>
</connections>
</windowController>
<customObject id="ZmP-al-Equ" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1207" y="2334"/>
</scene>
<!--License Controller-->
<scene sceneID="U8C-hR-HlF">
<objects>
<viewController id="VpZ-MX-EgL" customClass="ASCLicenseController" sceneMemberID="viewController">
<view key="view" id="baa-lw-Js5">
<rect key="frame" x="0.0" y="0.0" width="800" height="491"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<webView translatesAutoresizingMaskIntoConstraints="NO" id="nPq-tX-WST">
<rect key="frame" x="10" y="60" width="780" height="421"/>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="780" id="cUr-Iz-0Ec"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="420" id="juy-Wf-L5D"/>
</constraints>
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12" minimumFontSize="7" plugInsEnabled="NO" javaEnabled="NO" javaScriptCanOpenWindowsAutomatically="NO">
<nil key="identifier"/>
</webPreferences>
</webView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fh8-FG-lR6">
<rect key="frame" x="365" y="13" width="70" height="32"/>
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3FX-nT-Klk">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
<connections>
<action selector="onCloseButtonClick:" target="VpZ-MX-EgL" id="Mvv-jG-hat"/>
</connections>
</buttonCell>
</button>
</subviews>
<constraints>
<constraint firstItem="fh8-FG-lR6" firstAttribute="centerX" secondItem="baa-lw-Js5" secondAttribute="centerX" id="LoW-y6-Eam"/>
<constraint firstItem="fh8-FG-lR6" firstAttribute="top" secondItem="nPq-tX-WST" secondAttribute="bottom" constant="20" symbolic="YES" id="QDY-9x-oev"/>
<constraint firstAttribute="trailing" secondItem="nPq-tX-WST" secondAttribute="trailing" constant="10" id="WJE-cY-Yst"/>
<constraint firstItem="nPq-tX-WST" firstAttribute="top" secondItem="baa-lw-Js5" secondAttribute="top" constant="10" id="XOh-fP-a5f"/>
<constraint firstItem="nPq-tX-WST" firstAttribute="leading" secondItem="baa-lw-Js5" secondAttribute="leading" constant="10" id="h8m-P5-eTK"/>
<constraint firstAttribute="bottom" secondItem="fh8-FG-lR6" secondAttribute="bottom" constant="20" id="uz5-gt-aP8"/>
</constraints>
</view>
<connections>
<outlet property="eulaWebView" destination="nPq-tX-WST" id="2zB-fJ-pd9"/>
</connections>
</viewController>
<customObject id="oty-wv-CAn" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2189" y="2370"/>
</scene>
</scenes>
<resources>
<image name="NSApplicationIcon" width="32" height="32"/>

View File

@ -41,5 +41,5 @@
#import <Cocoa/Cocoa.h>
@interface ASCAboutController : NSViewController
- (IBAction)onLicenseButtonClick:(id)sender;
@end

View File

@ -40,11 +40,10 @@
#import "ASCAboutController.h"
#import <WebKit/WebKit.h>
#import "ASCConstants.h"
#import "ASCExternalController.h"
#import "ASCSharedSettings.h"
#import "ASCLicenseController.h"
@interface ASCAboutController () {
BOOL isCommercialVersion;
@ -53,7 +52,6 @@
@property (weak) IBOutlet NSTextField *versionText;
@property (weak) IBOutlet NSTextField *copyrightText;
@property (weak) IBOutlet NSButton *licenseButton;
@property (weak) IBOutlet WebView *eulaWebView;
@property (weak) IBOutlet NSStackView *infoStackView;
@end
@ -99,12 +97,6 @@
NSURL * eulaUrl = [[NSBundle mainBundle] URLForResource:@"EULA" withExtension:@"html" subdirectory:@"license"];
isCommercialVersion = eulaUrl != nil;
// EULA View
if (self.eulaWebView) {
if ( !eulaUrl )
eulaUrl = [[NSBundle mainBundle] URLForResource:@"LICENSE" withExtension:@"html" subdirectory:@"license"];
[[self.eulaWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:eulaUrl]];
} else {
// About View
// Setup license button view
NSMutableAttributedString * attrTitle = [[NSMutableAttributedString alloc] initWithAttributedString:[self.licenseButton attributedTitle]];
@ -140,27 +132,16 @@
// Window
[self setTitle:[NSString stringWithFormat:NSLocalizedString(@"About %@", nil), locProductName]];
}
}
- (void)viewDidAppear {
[super viewDidAppear];
// EULA View
if (self.eulaWebView) {
return;
}
[self.view.window setStyleMask:[self.view.window styleMask] & ~NSResizableWindowMask];
}
- (void)viewDidDisappear {
[super viewDidDisappear];
// EULA View
if (self.eulaWebView) {
return;
}
[NSApp stopModal];
}
@ -184,4 +165,23 @@
#endif
}
- (IBAction)onLicenseButtonClick:(id)sender {
NSURL * eulaUrl = [[NSBundle mainBundle] URLForResource:@"EULA" withExtension:@"html" subdirectory:@"license"];
if ( !eulaUrl )
eulaUrl = [[NSBundle mainBundle] URLForResource:@"LICENSE" withExtension:@"html" subdirectory:@"license"];
NSWindowController * windowController = [self.storyboard instantiateControllerWithIdentifier:@"ASCLicenseWindowControllerId"];
ASCLicenseController *licView = (ASCLicenseController *)windowController.contentViewController;
[licView setUrl:eulaUrl];
NSWindow *licWindow = windowController.window;
NSRect parentFrame = self.view.window.frame;
NSRect childFrame = licWindow.frame;
[licWindow setFrameOrigin:NSMakePoint(NSMidX(parentFrame) - childFrame.size.width/2,
NSMidY(parentFrame) - childFrame.size.height/2)];
[licWindow makeKeyAndOrderFront:nil]; // Show the window first to apply the coordinates
[NSApp runModalForWindow:licWindow];
}
@end

View File

@ -71,6 +71,7 @@
#import "ASCThemesController.h"
#import "ASCEditorJSVariables.h"
#import "ASCPresentationReporter.h"
#import "ASCLicenseController.h"
#import <Carbon/Carbon.h>
#import <QuartzCore/QuartzCore.h>
@ -240,21 +241,40 @@
}
- (void)openLocalPage:(NSString *)path query:(NSString *)query title:(NSString *)title {
if ( !path ) return;
NSURLComponents *urlPage = [NSURLComponents componentsWithString:path];
urlPage.scheme = NSURLFileScheme;
urlPage.query = query;
ASCTabView * existTab = [self tabWithParam:@"url" value:[urlPage string]];
if (existTab) {
[self.tabsControl selectTab:existTab];
} else {
ASCTabView *tab = [[ASCTabView alloc] initWithFrame:CGRectZero];
tab.title = title;
tab.type = ASCTabViewTypePortal;
tab.params = [@{@"url" : [urlPage string]} mutableCopy];
// ASCTabView * existTab = [self tabWithParam:@"url" value:[urlPage string]];
//
// if (existTab) {
// [self.tabsControl selectTab:existTab];
// } else {
// ASCTabView *tab = [[ASCTabView alloc] initWithFrame:CGRectZero];
// tab.title = title;
// tab.type = ASCTabViewTypePortal;
// tab.params = [@{@"url" : [urlPage string]} mutableCopy];
//
// [self.tabsControl addTab:tab selected:YES];
// }
[self.tabsControl addTab:tab selected:YES];
NSWindow *mainWindow = [[NSApp windows] objectAtIndex:0];
if (mainWindow) {
ASCCommonViewController * controller = (ASCCommonViewController *)mainWindow.contentViewController;
NSWindowController * windowController = [controller.storyboard instantiateControllerWithIdentifier:@"ASCLicenseWindowControllerId"];
ASCLicenseController *licView = (ASCLicenseController *)windowController.contentViewController;
[licView setUrl:urlPage.URL];
NSWindow *licWindow = windowController.window;
NSRect parentFrame = mainWindow.frame;
NSRect childFrame = licWindow.frame;
[licWindow setFrameOrigin:NSMakePoint(NSMidX(parentFrame) - childFrame.size.width/2,
NSMidY(parentFrame) - childFrame.size.height/2)];
[licWindow makeKeyAndOrderFront:nil]; // Show the window first to apply the coordinates
[NSApp runModalForWindow:licWindow];
}
}
@ -343,7 +363,13 @@
}
- (void)openEULA {
[self openLocalPage:[[NSBundle mainBundle] pathForResource:@"EULA" ofType:@"html"] title:NSLocalizedString(@"License Agreement", nil)];
NSString * eulaUrl = [[NSBundle mainBundle] pathForResource:@"EULA" ofType:@"html" inDirectory:@"license"];
if ( !eulaUrl )
eulaUrl = [[NSBundle mainBundle] pathForResource:@"LICENSE" ofType:@"html" inDirectory:@"license"];
if ( eulaUrl ) {
[self openLocalPage:eulaUrl title:NSLocalizedString(@"License Agreement", nil)];
}
}
- (void)openPreferences {

View File

@ -0,0 +1,45 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
//
// ASCLicenseController.h
// ONLYOFFICE
//
// Copyright © 2025 Ascensio System SIA. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface ASCLicenseController : NSViewController
- (void)setUrl:(NSURL *)url;
- (IBAction)onCloseButtonClick:(id)sender;
@end

View File

@ -0,0 +1,79 @@
/*
* (c) Copyright Ascensio System SIA 2010-2019
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
//
// ASCLicenseController.m
// ONLYOFFICE
//
// Copyright © 2025 Ascensio System SIA. All rights reserved.
//
#import "ASCLicenseController.h"
#import <WebKit/WebKit.h>
@interface ASCLicenseController () {
NSURL *_url;
}
@property (weak) IBOutlet WebView *eulaWebView;
@end
@implementation ASCLicenseController
- (void)viewDidLoad {
[super viewDidLoad];
if (_url) {
[[self.eulaWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:_url]];
}
}
- (void)viewDidAppear {
[super viewDidAppear];
}
- (void)viewDidDisappear {
[super viewDidDisappear];
}
- (void)setUrl:(NSURL *)url {
_url = url;
if (self.isViewLoaded) {
[[self.eulaWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
}
}
- (IBAction)onCloseButtonClick:(id)sender {
[NSApp stopModal];
[self.view.window close];
}
@end

View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ONLYOFFICE Release Notes</title>
<style type="text/css">
/* variables */
:root {
--color-black: #141923;
--color-white: #fff;
--color-gray-100: #f7fafc;
--color-gray-200: #edf2f7;
--color-gray-300: #e2e8f0;
--color-gray-400: #cbd5e0;
--color-gray-500: #a0aec0;
--color-gray-600: #718096;
--color-gray-700: #4a5568;
--color-gray-800: #2d3748;
--color-gray-900: #1a202c;
}
body {
background: var(--color-white);
color: var(--color-gray-800);
font: 12px "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif;
}
h1, h2, h3 {
color: var(--color-gray-800);
font-weight: normal;
font-style: normal;
}
h1 {
font-size: 1.7em;
}
h2 {
font-size: 1.4em;
font-weight: lighter;
}
h4 {
font-size: 1.2em;
font-weight: lighter;
}
code {
background: var(--color-gray-200);
font-family: monospace;
padding: 1px 5px;
}
ul {
padding: 8.1.3 20px;
}
li {
margin-left: 20px;
margin-bottom: 0.2em;
padding: 0;
}
hr {
margin: 20px 0;
border: var(--color-gray-400) solid 0.5px;
}
.releasedate {
color: var(--color-gray-600);
font-weight: lighter;
}
/* prefers light mode */
@media (prefers-color-scheme: dark) {
body {
background: var(--color-gray-900);
color: var(--color-gray-200);
}
h1, h2, h3 {
color: var(--color-white);
}
code {
background: var(--color-gray-800);
color: var(--color-gray-200);
}
.releasedate {
color: var(--color-gray-600);
}
}
</style>
</head>
<body>
<div class="version">
<h1>ONLYOFFICE 9.2.0<span class="releasedate"> - {{DATE}}</span></h1>
<h2>New features</h2>
<h4>All Editors</h4>
<ul>
<li>Added AI Agent, enabling document generation, PDF form filling, document content reading, document analysis, local file operations, MCP Server connection, and online information search</li>
<li>Added the ability to customize keyboard shortcuts</li>
<li>Added the ability to record some executed actions as a macro in all editors, except for PDF</li>
</ul>
<h4>Presentation Editor</h4>
<ul>
<li>Implemented insertion of equations from a third-party resource</li>
</ul>
<h4>Forms</h4>
<ul>
<li>Added local PDF Forms templates</li>
<li>Implemented the ability to select the role for which new fields will be added</li>
<li>Implemented the ability to add labels for checkboxes and radio buttons. In the filling mode, clicking on the label works like clicking on the checkbox itself.</li>
</ul>
<h4>PDF Editor</h4>
<ul>
<li>Added the ability to change color for hidden text (Redact)</li>
<li>Implemented insertion of equations from a third-party resource</li>
</ul>
<h2>Fixes</h2>
<h4>Security</h4>
<ul>
<li>Fixed the vulnerability which allows adding a named range in the protected workbook via websocket</li>
</ul>
</div>
</body>
</html>

View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>История изменений ONLYOFFICE</title>
<style type="text/css">
/* variables */
:root {
--color-black: #141923;
--color-white: #fff;
--color-gray-100: #f7fafc;
--color-gray-200: #edf2f7;
--color-gray-300: #e2e8f0;
--color-gray-400: #cbd5e0;
--color-gray-500: #a0aec0;
--color-gray-600: #718096;
--color-gray-700: #4a5568;
--color-gray-800: #2d3748;
--color-gray-900: #1a202c;
}
body {
background: var(--color-white);
color: var(--color-gray-800);
font: 12px "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif;
}
h1, h2, h3 {
color: var(--color-gray-800);
font-weight: normal;
font-style: normal;
}
h1 {
font-size: 1.7em;
}
h2 {
font-size: 1.4em;
font-weight: lighter;
}
h4 {
font-size: 1.2em;
font-weight: lighter;
}
code {
background: var(--color-gray-200);
font-family: monospace;
padding: 1px 5px;
}
ul {
padding: 8.1.3 20px;
}
li {
margin-left: 20px;
margin-bottom: 0.2em;
padding: 0;
}
hr {
margin: 20px 0;
border: var(--color-gray-400) solid 0.5px;
}
.releasedate {
color: var(--color-gray-600);
font-weight: lighter;
}
/* prefers light mode */
@media (prefers-color-scheme: dark) {
body {
background: var(--color-gray-900);
color: var(--color-gray-200);
}
h1, h2, h3 {
color: var(--color-white);
}
code {
background: var(--color-gray-800);
color: var(--color-gray-200);
}
.releasedate {
color: var(--color-gray-600);
}
}
</style>
</head>
<body>
<div class="version">
<h1>ONLYOFFICE 9.2.0<span class="releasedate"> - {{DATE}}</span></h1>
<h2>New features</h2>
<h4>All Editors</h4>
<ul>
<li>Added AI Agent, enabling document generation, PDF form filling, document content reading, document analysis, local file operations, MCP Server connection, and online information search</li>
<li>Added the ability to customize keyboard shortcuts</li>
<li>Added the ability to record some executed actions as a macro in all editors, except for PDF</li>
</ul>
<h4>Presentation Editor</h4>
<ul>
<li>Implemented insertion of equations from a third-party resource</li>
</ul>
<h4>Forms</h4>
<ul>
<li>Added local PDF Forms templates</li>
<li>Implemented the ability to select the role for which new fields will be added</li>
<li>Implemented the ability to add labels for checkboxes and radio buttons. In the filling mode, clicking on the label works like clicking on the checkbox itself.</li>
</ul>
<h4>PDF Editor</h4>
<ul>
<li>Added the ability to change color for hidden text (Redact)</li>
<li>Implemented insertion of equations from a third-party resource</li>
</ul>
<h2>Fixes</h2>
<h4>Security</h4>
<ul>
<li>Fixed the vulnerability which allows adding a named range in the protected workbook via websocket</li>
</ul>
</div>
</body>
</html>

View File

@ -728,28 +728,36 @@ namespace NS_File
bool verifyEmbeddedSignature(const wstring &fileName)
{
WINTRUST_FILE_INFO fileInfo;
ZeroMemory(&fileInfo, sizeof(fileInfo));
fileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO);
fileInfo.pcwszFilePath = fileName.c_str();
fileInfo.hFile = NULL;
fileInfo.pgKnownSubject = NULL;
WINTRUST_FILE_INFO wfi;
ZeroMemory(&wfi, sizeof(wfi));
wfi.cbStruct = sizeof(WINTRUST_FILE_INFO);
wfi.pcwszFilePath = fileName.c_str();
wfi.hFile = NULL;
wfi.pgKnownSubject = NULL;
GUID guidAction = WINTRUST_ACTION_GENERIC_VERIFY_V2;
WINTRUST_DATA winTrustData;
ZeroMemory(&winTrustData, sizeof(winTrustData));
winTrustData.cbStruct = sizeof(WINTRUST_DATA);
winTrustData.pPolicyCallbackData = NULL;
winTrustData.pSIPClientData = NULL;
winTrustData.dwUIChoice = WTD_UI_NONE;
winTrustData.fdwRevocationChecks = WTD_REVOKE_NONE;
winTrustData.dwUnionChoice = WTD_CHOICE_FILE;
winTrustData.dwStateAction = WTD_STATEACTION_VERIFY;
winTrustData.hWVTStateData = NULL;
winTrustData.pwszURLReference = NULL;
winTrustData.dwUIContext = 0;
winTrustData.pFile = &fileInfo;
return WinVerifyTrust(NULL, &guidAction, &winTrustData) == ERROR_SUCCESS;
WINTRUST_DATA wtd;
ZeroMemory(&wtd, sizeof(wtd));
wtd.cbStruct = sizeof(WINTRUST_DATA);
wtd.pPolicyCallbackData = NULL;
wtd.pSIPClientData = NULL;
wtd.dwUIChoice = WTD_UI_NONE;
wtd.fdwRevocationChecks = WTD_REVOKE_NONE;
wtd.dwUnionChoice = WTD_CHOICE_FILE;
wtd.dwStateAction = WTD_STATEACTION_VERIFY;
wtd.hWVTStateData = NULL;
wtd.pwszURLReference = NULL;
wtd.dwUIContext = 0;
wtd.pFile = &wfi;
GUID action = WINTRUST_ACTION_GENERIC_VERIFY_V2;
LONG res = WinVerifyTrust(NULL, &action, &wtd);
if (wtd.hWVTStateData) {
wtd.dwStateAction = WTD_STATEACTION_CLOSE;
WinVerifyTrust(NULL, &action, &wtd);
}
return (res == ERROR_SUCCESS);
}
}

View File

@ -24,7 +24,7 @@
<ROW Property="CompanyPath" Value="ONLYOFFICE" ValueLocId="-"/>
<ROW Property="DesktopPath" Value="DesktopEditors" ValueLocId="-"/>
<ROW Property="EMPTY_LANG_DIR" Value="en-US"/>
<ROW Property="Edition" Value="Open Source" ValueLocId="-"/>
<ROW Property="Edition" Value="Community" ValueLocId="-"/>
<ROW Property="ExtPfx" Value="ASC" ValueLocId="-"/>
<ROW Property="FORMS" Value="1" ValueLocId="-"/>
<ROW Property="IncompatibleVersion_ErrorText" Value="Another version of the application is already installed that is incompatible with this installation. Please uninstall the current version first or download the correct version to install."/>
@ -513,7 +513,7 @@
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="MsiBuild32" BuildName="MsiBuild32" BuildOrder="2" BuildType="0" PackageFolder="." PackageFileName="[|PackageFileName]-[|ProductVersion]-[|Arch]" Languages="en;ar;be;bg;ca;cs;da;de;el;en_GB;es;fi;fr;gl;he;hu;id;it;ja;ko;lv;nb;nl;pl;pt;pt_BR;ro;ru;sk;sl;sq;sr_SP_Cyrillic;sr_SP_Latin;sv;tr;uk;ur;vi;zh;zh_TW" LangOpt="1" InstallationType="4" SummInfoMetadata="Creating Application:[|AI_PACKAGING_TOOL]#Subject:[|PackageName] [|ProductVersion] [|Arch]" UseLargeSchema="true"/>
<ROW BuildKey="MsiBuild64" BuildName="MsiBuild64" BuildOrder="1" BuildType="0" PackageFolder="." PackageFileName="[|PackageFileName]-[|ProductVersion]-[|Arch]" Languages="en;ar;be;bg;ca;cs;da;de;el;en_GB;es;fi;fr;gl;he;hu;id;it;ja;ko;lv;nb;nl;pl;pt;pt_BR;ro;ru;sk;sl;sq;sr_SP_Cyrillic;sr_SP_Latin;sv;tr;uk;ur;vi;zh;zh_TW" LangOpt="1" InstallationType="4" SummInfoMetadata="Creating Application:[|AI_PACKAGING_TOOL]#Subject:[|PackageName] [|ProductVersion] [|Arch]" UseLargeSchema="true" MsiPackageType="x64"/>
<ROW BuildKey="MsiBuildARM64" BuildName="MsiBuildARM64" BuildOrder="3" BuildType="0" PackageFolder="." PackageFileName="[|PackageFileName]-[|ProductVersion]-[|Arch]" Languages="en;ar;be;bg;ca;cs;da;de;el;en_GB;es;fi;fr;gl;he;hu;id;it;ja;ko;lv;nb;nl;pl;pt;pt_BR;ro;ru;sk;sl;sq;sr_SP_Cyrillic;sr_SP_Latin;sv;tr;uk;ur;vi;zh;zh_TW" LangOpt="1" InstallationType="4" SummInfoMetadata="Creating Application:[|AI_PACKAGING_TOOL]#Subject:[|PackageName] [|ProductVersion] [|Arch]" UseLargeSchema="true" MsiPackageType="Arm64"/>
<ROW BuildKey="MsiBuildARM64" BuildName="MsiBuildARM64" BuildOrder="3" BuildType="0" PackageFolder="." PackageFileName="[|PackageFileName]-[|ProductVersion]-[|Arch]" Languages="en;ar;be;bg;ca;cs;da;de;el;en_GB;es;fi;fr;gl;he;hu;id;it;ja;ko;lv;nb;nl;pl;pt;pt_BR;ro;ru;sk;sl;sq;sr_SP_Cyrillic;sr_SP_Latin;sv;tr;uk;ur;vi;zh;zh_TW" LangOpt="1" InstallationType="4" SummInfoMetadata="Creating Application:[|AI_PACKAGING_TOOL]#Page Count:500#Subject:[|PackageName] [|ProductVersion] [|Arch]" UseLargeSchema="true" MsiPackageType="Arm64"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
@ -1535,6 +1535,7 @@
<ROW Condition="(VersionNT &lt;&gt; 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="MsiBuild64;MsiBuild32;MsiBuildARM64"/>
<ROW Condition="(VersionNT &lt;&gt; 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="MsiBuild64;MsiBuild32;MsiBuildARM64"/>
<ROW Condition="(VersionNT &lt;&gt; 600)" Description="[ProductName] cannot be installed on [WindowsTypeNT60Display]." DescriptionLocId="AI.LaunchCondition.NoNT60" IsPredefined="true" Builds="MsiBuild64;MsiBuild32;MsiBuildARM64"/>
<ROW Condition="AiArm64" Description="[ProductName] can only be installed on Arm64 Windows versions." Builds="MsiBuildARM64"/>
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="MsiBuild64;MsiBuild32;MsiBuildARM64"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiMergeModsComponent">
@ -1560,6 +1561,9 @@
<ROW Registry="ModifyPath" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="ModifyPath" Value="[AI_UNINSTALLER] /i [ProductCode] AI_UNINSTALLER_CTP=1" Component_="AI_CustomARPName"/>
<ROW Registry="NoModify" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoModify" Value="#1" Component_="AI_DisableModify" VirtualValue="#"/>
<ROW Registry="NoRepair" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="NoRepair" Value="#1" Component_="AI_CustomARPName" VirtualValue="#"/>
<ROW Registry="PackageArch" Root="-1" Key="Software\[CompanyPath]\[DesktopPath]" Name="PackageArch" Value="[Arch]" Component_="c_reg_sw_app"/>
<ROW Registry="PackageEdition" Root="-1" Key="Software\[CompanyPath]\[DesktopPath]" Name="PackageEdition" Value="[Edition]" Component_="c_reg_sw_app"/>
<ROW Registry="PackageType" Root="-1" Key="Software\[CompanyPath]\[DesktopPath]" Name="PackageType" Value="advinst" Component_="c_reg_sw_app"/>
<ROW Registry="ProductNameProductVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="\"/>
<ROW Registry="Publisher" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Publisher" Value="[Manufacturer]" Component_="AI_CustomARPName"/>
<ROW Registry="Readme" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="Readme" Value="[ARPREADME]" Component_="AI_CustomARPName"/>

View File

@ -5,6 +5,9 @@
#endif
#include BRANDING_DIR + '\defines.iss'
#ifndef PACKAGE_EDITION
#define PACKAGE_EDITION 'Community'
#endif
#ifndef VERSION
#define VERSION '0.0.0.0'
#endif
@ -15,14 +18,15 @@
#ifndef BUILD_DIR
#define BUILD_DIR '.\build.' + ARCH
#endif
#ifdef PACKAGE_EDITION
#define sPackageName sPackageName + '-' + PACKAGE_EDITION
#endif
#ifndef OUTPUT_DIR
#define OUTPUT_DIR '.'
#endif
#ifndef OUTPUT_FILE
#if PACKAGE_EDITION == 'Community'
#define OUTPUT_FILE sPackageName + '-' + VERSION + '-' + ARCH
#else
#define OUTPUT_FILE sPackageName + '-' + PACKAGE_EDITION + '-' + VERSION + '-' + ARCH
#endif
#endif
#if FileExists(BRANDING_DIR + '\branding.iss')
@ -68,7 +72,7 @@ DisableDirPage = auto
AllowNoIcons = yes
AlwaysShowDirOnReadyPage = yes
UninstallDisplayIcon = {app}\app.ico
#ifndef PACKAGE_EDITION
#if PACKAGE_EDITION == "Community" | PACKAGE_EDITION == "XP"
UninstallDisplayName = {#sAppName} {#sAppVerShort} ({#ARCH})
#else
UninstallDisplayName = {#sAppName} ({#PACKAGE_EDITION}) {#sAppVerShort} ({#ARCH})
@ -79,14 +83,15 @@ AppMutex ={code:getAppMutex}
ChangesEnvironment =yes
SetupMutex =ASC
#if ARCH == "x64" | ARCH == "arm64"
#if Int(DecodeVer(PREPROCVER,1)) >= 6
ArchitecturesAllowed = x64compatible or arm64
ArchitecturesInstallIn64BitMode = x64compatible or arm64
#else
#if Ver < EncodeVer(6,0,0) & ARCH == "x64"
ArchitecturesAllowed = x64
ArchitecturesInstallIn64BitMode = x64
#endif
#elif Ver >= EncodeVer(6,0,0) & ARCH == "x64"
ArchitecturesAllowed = x64compatible
ArchitecturesInstallIn64BitMode = x64compatible
#elif ARCH == "arm64"
ArchitecturesAllowed = arm64
ArchitecturesInstallIn64BitMode = arm64
#endif
#ifdef _WIN_XP
@ -102,15 +107,11 @@ SignTool =byparam $p
SetupIconFile={#BRANDING_DIR}\..\..\extras\projicons\res\icons\desktopeditors.ico
WizardImageFile={#BRANDING_DIR}\data\dialogpicture*.bmp
WizardSmallImageFile={#BRANDING_DIR}\data\dialogicon*.bmp
#ifdef PACKAGE_EDITION
#if PACKAGE_EDITION == "Enterprise"
LicenseFile={#BRANDING_DIR}\..\..\..\common\package\license\commercial\LICENSE.rtf
#else
LicenseFile={#BRANDING_DIR}\..\..\..\common\package\license\opensource\LICENSE.rtf
#endif
#else
LicenseFile={#BRANDING_DIR}\..\..\..\common\package\license\opensource\LICENSE.rtf
#endif
SolidCompression=yes
Compression=lzma2/ultra64
@ -1180,20 +1181,14 @@ Source: "{#BUILD_DIR}\desktop\*"; DestDir: {app}; Flags: ignoreversion recursesu
#if defined(_WIN_XP) | defined(EMBED_HELP)
Source: "{#BUILD_DIR}\help\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs;
#endif
Source: "{#BUILD_DIR}\desktop\*.exe"; DestDir: {app}; Flags: signonce;
Source: "{#BUILD_DIR}\desktop\*.dll"; DestDir: {app}; Flags: signonce;
Source: "{#BUILD_DIR}\desktop\converter\*.exe"; DestDir: {app}\converter; Flags: signonce;
Source: "{#BUILD_DIR}\desktop\converter\*.dll"; DestDir: {app}\converter; Flags: signonce;
Source: "{#BUILD_DIR}\desktop\*.exe"; DestDir: {app}; Flags: recursesubdirs signonce;
Source: "{#BUILD_DIR}\desktop\*.dll"; DestDir: {app}; Flags: recursesubdirs signonce;
Source: "..\..\..\common\converter\package.config"; DestDir: {app}\converter;
#ifdef PACKAGE_EDITION
#if PACKAGE_EDITION == "Enterprise"
Source: "{#BRANDING_DIR}\..\..\..\common\package\license\commercial\LICENSE.txt"; DestDir: {app}; DestName: "EULA.txt";
#else
Source: "{#BRANDING_DIR}\..\..\..\common\package\license\opensource\LICENSE.txt"; DestDir: {app};
#endif
#else
Source: "{#BRANDING_DIR}\..\..\..\common\package\license\opensource\LICENSE.txt"; DestDir: {app};
#endif
Source: "{#BRANDING_DIR}\..\..\..\common\package\license\3dparty\3DPARTYLICENSE"; DestDir: {app};
[InstallDelete]
@ -1234,6 +1229,9 @@ Root: HKLM; Subkey: {#APP_REG_PATH}; ValueType: string; ValueName: AppPath;
Root: HKLM; Subkey: {#APP_REG_PATH}; ValueType: string; ValueName: locale; ValueData: {code:getAppPrevLang}; Flags: uninsdeletevalue;
Root: HKCU; Subkey: {#APP_REG_PATH}; ValueType: string; ValueName: locale; ValueData: {code:getAppPrevLang}; Flags: uninsdeletevalue;
Root: HKLM; Subkey: {#APP_REG_PATH}; ValueType: qword; ValueName: timestamp; ValueData: {code:getPosixTime}; Flags: uninsdeletevalue;
Root: HKLM; Subkey: "{#APP_REG_PATH}"; ValueType: "string"; ValueName: "PackageArch"; ValueData: "{#ARCH}"; Flags: uninsdeletevalue;
Root: HKLM; Subkey: "{#APP_REG_PATH}"; ValueType: "string"; ValueName: "PackageEdition"; ValueData: "{#PACKAGE_EDITION}"; Flags: uninsdeletevalue;
Root: HKLM; Subkey: "{#APP_REG_PATH}"; ValueType: "string"; ValueName: "PackageType"; ValueData: "inno"; Flags: uninsdeletevalue;
#ifdef _ONLYOFFICE
Root: HKLM; Subkey: "SOFTWARE\Classes\{#sAppProtocol}"; ValueType: "string"; ValueData: "URL:{#sAppName} Protocol"; Flags: uninsdeletekey;

View File

@ -85,9 +85,7 @@ Write-Host "`n[ Sign files ]"
if ($Sign) {
Set-Location "$BuildDir\desktop"
$SignFiles = Get-ChildItem `
*.exe, *.dll, converter\*.exe, converter\*.dll, plugins\*\*.dll `
| Resolve-Path -Relative
$SignFiles = Get-ChildItem *.exe, *.dll -Recurse | Resolve-Path -Relative
# Sign
Write-Host "signtool sign /a /n $CertName /t $TimestampServer ..."
@ -95,9 +93,7 @@ if ($Sign) {
if ($LastExitCode -ne 0) { throw }
# Verify
Write-Host "signtool verify /q /pa /all ..."
& signtool verify /q /pa /all $SignFiles | Out-Null
if ($LastExitCode -ne 0) { throw }
Get-ChildItem *.exe, *.dll -Recurse | % { Get-AuthenticodeSignature $_ }
# VLC plugin cache
if (

View File

@ -2117,7 +2117,8 @@ void CAscApplicationManagerWrapper::applyTheme(const wstring& theme, bool force)
_editor->applyTheme(theme);
}
QJsonObject _json_obj{{"theme", _app.m_themes->current().json()}};
// QJsonObject _json_obj{{"theme", _app.m_themes->current().json()}};
QJsonObject _json_obj{{"theme", QString::fromStdWString(actual_id)}}; // for bug 78050. send only theme id
AscAppManager::getInstance().UpdatePlugins(Utils::stringifyJson(_json_obj).toStdWString());
AscAppManager::sendCommandTo(SEND_TO_ALL_START_PAGE, L"uitheme:changed", theme);
}

View File

@ -56,7 +56,7 @@ void CMainWindowImpl::refreshAboutVersion()
{
QJsonObject _json_obj;
auto _read_license_name = [](const QString& path) -> QString {
auto _read_license_name = [](QString& path) -> QString {
QFileInfo fi(path);
QDir dir = fi.dir();
QStringList files = dir.entryList(QStringList() << fi.fileName(),
@ -64,8 +64,8 @@ void CMainWindowImpl::refreshAboutVersion()
if (files.isEmpty())
return QString();
QString correctPath = dir.filePath(files.first());
QFile f(correctPath);
path = dir.filePath(files.first());
QFile f(path);
QString n;
if ( f.exists() ) {
if ( f.open(QIODevice::ReadOnly | QIODevice::Text )) {