Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
69 changes: 68 additions & 1 deletion scripts/windows.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import assert from 'node:assert/strict';

import { flushSync, mount, unmount } from 'svelte';
import { afterAll, beforeAll, describe, test, vi } from 'vitest';
import { afterAll, beforeAll, describe, onTestFinished, test, vi } from 'vitest';
import type { TranslationKey } from '../src/lib/utils/i18n.js';
import type { OpenFilePickerDeps } from '../src/lib/sessions/openFilePicker.svelte.js';
import type { OpenFileTarget } from '../src/lib/utils/openFileTarget.js';
Expand Down Expand Up @@ -1329,6 +1329,73 @@ describe('window organization', () => {
});
});

// #1061: on Windows the maximize button kept its maximize glyph and label on a
// maximized window. Every way of maximizing (the button, a title-bar double
// click, Win+Up, Aero Snap) ends in a WM_SIZE, which tao reports as a resize,
// so the button asks again on each resize.
describe('the maximize button follows the window state', () => {
let maximized = true;
let onResize: ((event: unknown) => void) | undefined;
// Unmounting unlistens, which goes through the event plugin's own global.
(window as any).__TAURI_EVENT_PLUGIN_INTERNALS__ ??= { unregisterListener() {} };
useTauri({
invoke: (cmd: string, args: any) => {
if (cmd === 'get_os_type') return Promise.resolve('windows');
if (cmd === 'plugin:window|is_maximized') return Promise.resolve(maximized);
if (cmd === 'plugin:event|listen' && args.event === 'tauri://resize') onResize = args.handler;
return Promise.resolve(null);
},
});

test('a maximized window offers Restore, and Maximize again once it is restored', async () => {
const { settings } = await import('../src/lib/stores/settings.svelte.js');
const { default: TitleBar } = await import('../src/lib/components/TitleBar.svelte');
const osType = settings.osType;
settings.osType = 'windows';
const target = document.createElement('div');
document.body.append(target);
const instance = mount(TitleBar, {
target,
props: {
isFocused: true,
isScrolled: false,
currentFile: '',
liveMode: false,
windowTitle: '',
showHome: true,
isEditing: false,
ontoggleHome: () => {},
ononpenFileLocation: () => {},
ontoggleLiveMode: () => {},
onsetViewMode: () => {},
theme: 'dark',
},
intro: false,
});
onTestFinished(() => {
unmount(instance);
target.remove();
settings.osType = osType;
});
const settle = async () => {
await new Promise((resolve) => setTimeout(resolve, 0));
flushSync();
};
const button = () => target.querySelector<HTMLButtonElement>('.maximize-btn')!;

await settle();
assert.equal(button().getAttribute('aria-label'), t('common.restore', 'en'));
assert.equal(button().querySelectorAll('rect').length, 1, 'restore draws the front square');
assert.equal(button().querySelectorAll('path').length, 1, 'and the back square behind it');

maximized = false;
onResize!({ event: 'tauri://resize', id: 0, payload: { width: 800, height: 600 } });
await settle();
assert.equal(button().getAttribute('aria-label'), t('common.maximize', 'en'));
assert.equal(button().querySelectorAll('path').length, 0, 'maximize is a single square');
});
});

// #1029: with "Ask me", a file opened from outside asks which window it goes to.
// Rust has already sent a file that some window has open to that window, so
// what reaches the picker is open nowhere, or open here. Every dependency is a
Expand Down
15 changes: 13 additions & 2 deletions src/lib/components/TitleBar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -1007,8 +1007,19 @@
<button class="control-btn" onclick={() => appWindow.minimize()} aria-label={t('common.minimize', currentLanguage)}>
<svg width="12" height="12" viewBox="0 0 12 12"><rect fill="currentColor" width="10" height="1" x="1" y="6" /></svg>
</button>
<button class="control-btn" onclick={() => appWindow.toggleMaximize()} aria-label={t('common.maximize', currentLanguage)}>
<svg width="12" height="12" viewBox="0 0 12 12"><rect fill="none" stroke="currentColor" stroke-width="1" width="9" height="9" x="1.5" y="1.5" /></svg>
<button
class="control-btn maximize-btn"
onclick={() => appWindow.toggleMaximize()}
aria-label={t(isMaximized ? 'common.restore' : 'common.maximize', currentLanguage)}>
{#if isMaximized}
<!-- Windows' restore glyph: an 8px square, with a second one 2px up and right behind it. -->
<svg width="12" height="12" viewBox="0 0 12 12"
><g fill="none" stroke="currentColor" stroke-width="1"
><rect width="7" height="7" x="1.5" y="3.5" /><path d="M3.5 3V1.5h7v7H9" /></g
></svg>
{:else}
<svg width="12" height="12" viewBox="0 0 12 12"><rect fill="none" stroke="currentColor" stroke-width="1" width="9" height="9" x="1.5" y="1.5" /></svg>
{/if}
</button>
<button
class="control-btn close-btn"
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/cs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Zavřít',
minimize: 'Minimalizovat',
maximize: 'Maximalizovat',
restore: 'Obnovit',
loadingFullDocument: 'Načítání celého dokumentu...',
decrease: 'Snížit',
increase: 'Zvýšit'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/da.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Luk',
minimize: 'Minimer',
maximize: 'Maksimer',
restore: 'Gendan',
loadingFullDocument: 'Indlæser hele dokumentet...',
decrease: 'Formindsk',
increase: 'Forøg'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Schließen',
minimize: 'Minimieren',
maximize: 'Maximieren',
restore: 'Wiederherstellen',
loadingFullDocument: 'Vollständiges Dokument wird geladen...',
decrease: 'Verringern',
increase: 'Erhöhen'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/el.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Κλείσιμο',
minimize: 'Ελαχιστοποίηση',
maximize: 'Μεγιστοποίηση',
restore: 'Επαναφορά',
loadingFullDocument: 'Φόρτωση ολόκληρου του εγγράφου...',
decrease: 'Μείωση',
increase: 'Αύξηση'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Cerrar',
minimize: 'Minimizar',
maximize: 'Maximizar',
restore: 'Restaurar',
loadingFullDocument: 'Cargando el documento completo...',
decrease: 'Disminuir',
increase: 'Aumentar'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/fi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Sulje',
minimize: 'Pienennä',
maximize: 'Suurenna',
restore: 'Palauta',
loadingFullDocument: 'Ladataan koko asiakirjaa...',
decrease: 'Pienennä',
increase: 'Suurenna'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Fermer',
minimize: 'Réduire',
maximize: 'Agrandir',
restore: 'Restaurer',
loadingFullDocument: 'Chargement du document complet...',
decrease: 'Diminuer',
increase: 'Augmenter'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/hu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Bezárás',
minimize: 'Minimalizálás',
maximize: 'Maximalizálás',
restore: 'Előző méret',
loadingFullDocument: 'A teljes dokumentum betöltése...',
decrease: 'Csökkentés',
increase: 'Növelés'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/id.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Tutup',
minimize: 'Perkecil',
maximize: 'Perbesar',
restore: 'Pulihkan',
loadingFullDocument: 'Memuat dokumen lengkap...',
decrease: 'Kurangi',
increase: 'Tambah'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Chiudi',
minimize: 'Minimizza',
maximize: 'Massimizza',
restore: 'Ripristina',
loadingFullDocument: 'Caricamento del documento completo...',
decrease: 'Diminuisci',
increase: 'Aumenta'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ export default {
close: '閉じる',
minimize: '最小化',
maximize: '最大化',
restore: '元のサイズに戻す',
loadingFullDocument: '文書全体を読み込み中...',
decrease: '減らす',
increase: '増やす'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ export default {
close: '닫기',
minimize: '최소화',
maximize: '최대화',
restore: '이전 크기로',
loadingFullDocument: '전체 문서를 불러오는 중...',
decrease: '줄이기',
increase: '늘리기'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Sluiten',
minimize: 'Minimaliseren',
maximize: 'Maximaliseren',
restore: 'Vorig formaat',
loadingFullDocument: 'Volledig document laden...',
decrease: 'Verlagen',
increase: 'Verhogen'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/no.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Lukk',
minimize: 'Minimer',
maximize: 'Maksimer',
restore: 'Gjenopprett',
loadingFullDocument: 'Laster inn hele dokumentet...',
decrease: 'Reduser',
increase: 'Øk'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Zamknij',
minimize: 'Minimalizuj',
maximize: 'Maksymalizuj',
restore: 'Przywróć',
loadingFullDocument: 'Wczytywanie całego dokumentu...',
decrease: 'Zmniejsz',
increase: 'Zwiększ'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Fechar',
minimize: 'Minimizar',
maximize: 'Maximizar',
restore: 'Restaurar',
loadingFullDocument: 'Carregando documento completo...',
decrease: 'Diminuir',
increase: 'Aumentar'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Fechar',
minimize: 'Minimizar',
maximize: 'Maximizar',
restore: 'Restaurar',
loadingFullDocument: 'A carregar o documento completo...',
decrease: 'Diminuir',
increase: 'Aumentar'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/ro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Închidere',
minimize: 'Minimizare',
maximize: 'Maximizare',
restore: 'Restabilire',
loadingFullDocument: 'Se încarcă documentul complet...',
decrease: 'Micșorează',
increase: 'Mărește'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Закрыть',
minimize: 'Свернуть',
maximize: 'Развернуть',
restore: 'Восстановить',
loadingFullDocument: 'Загрузка полного документа...',
decrease: 'Уменьшить',
increase: 'Увеличить'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/sk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Zatvoriť',
minimize: 'Minimalizovať',
maximize: 'Maximalizovať',
restore: 'Obnoviť',
loadingFullDocument: 'Načítava sa celý dokument...',
decrease: 'Znížiť',
increase: 'Zvýšiť'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/sv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Stäng',
minimize: 'Minimera',
maximize: 'Maximera',
restore: 'Återställ',
loadingFullDocument: 'Läser in hela dokumentet...',
decrease: 'Minska',
increase: 'Öka'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Kapat',
minimize: 'Küçült',
maximize: 'Büyüt',
restore: 'Geri Yükle',
loadingFullDocument: 'Belgenin tamamı yükleniyor...',
decrease: 'Azalt',
increase: 'Artır'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,7 @@ export default {
close: 'Đóng',
minimize: 'Thu nhỏ',
maximize: 'Phóng to',
restore: 'Khôi phục',
loadingFullDocument: 'Đang tải toàn bộ tài liệu...',
decrease: 'Giảm',
increase: 'Tăng'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ export default {
close: '关闭',
minimize: '最小化',
maximize: '最大化',
restore: '还原',
loadingFullDocument: '正在加载完整文档…',
decrease: '减少',
increase: '增加'
Expand Down
1 change: 1 addition & 0 deletions src/lib/locales/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,7 @@ export default {
close: '關閉',
minimize: '最小化',
maximize: '最大化',
restore: '還原',
loadingFullDocument: '正在讀取完整文件...',
decrease: '減少',
increase: '增加'
Expand Down
1 change: 1 addition & 0 deletions src/lib/utils/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,7 @@ const en = {
close: 'Close',
minimize: 'Minimize',
maximize: 'Maximize',
restore: 'Restore',
loadingFullDocument: 'Loading full document...',
decrease: 'Decrease',
increase: 'Increase'
Expand Down
Loading