Skip to content

Commit afb102c

Browse files
fix(runtime-wry): window edge not working after setting resizable false and decorated false dynamically (#10211)
* Fix window edge not working after setting resziable false and decorated false dynamically * Fix example don't go crazy on resize * cargo fmt
1 parent 5998a90 commit afb102c

3 files changed

Lines changed: 94 additions & 67 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-runtime-wry": "patch:bug"
3+
---
4+
5+
Fix window edge not working after setting resizable false and decorated false dynamically

core/tauri-runtime-wry/src/lib.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2774,7 +2774,15 @@ fn handle_user_message<T: UserEvent>(
27742774
WindowMessage::RequestUserAttention(request_type) => {
27752775
window.request_user_attention(request_type.map(|r| r.0));
27762776
}
2777-
WindowMessage::SetResizable(resizable) => window.set_resizable(resizable),
2777+
WindowMessage::SetResizable(resizable) => {
2778+
window.set_resizable(resizable);
2779+
#[cfg(windows)]
2780+
if !resizable {
2781+
undecorated_resizing::detach_resize_handler(window.hwnd());
2782+
} else if !window.is_decorated() {
2783+
undecorated_resizing::attach_resize_handler(window.hwnd());
2784+
}
2785+
}
27782786
WindowMessage::SetMaximizable(maximizable) => window.set_maximizable(maximizable),
27792787
WindowMessage::SetMinimizable(minimizable) => window.set_minimizable(minimizable),
27802788
WindowMessage::SetClosable(closable) => window.set_closable(closable),
@@ -2796,7 +2804,7 @@ fn handle_user_message<T: UserEvent>(
27962804
#[cfg(windows)]
27972805
if decorations {
27982806
undecorated_resizing::detach_resize_handler(window.hwnd());
2799-
} else {
2807+
} else if window.is_resizable() {
28002808
undecorated_resizing::attach_resize_handler(window.hwnd());
28012809
}
28022810
}

examples/api/src/views/Window.svelte

Lines changed: 79 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,14 @@
238238
mainEl.classList.add('dark:bg-darkPrimary')
239239
}
240240
241+
async function updatePosition() {
242+
webviewMap[selectedWebview]?.setPosition(new PhysicalPosition(x, y))
243+
}
244+
245+
async function updateSize() {
246+
webviewMap[selectedWebview]?.setSize(new PhysicalSize(width, height))
247+
}
248+
241249
$: {
242250
webviewMap[selectedWebview]
243251
loadWindowPosition()
@@ -256,9 +264,6 @@
256264
$: webviewMap[selectedWebview]?.setContentProtected(contentProtected)
257265
$: webviewMap[selectedWebview]?.setFullscreen(fullscreen)
258266
259-
$: width &&
260-
height &&
261-
webviewMap[selectedWebview]?.setSize(new PhysicalSize(width, height))
262267
$: minWidth && minHeight
263268
? webviewMap[selectedWebview]?.setMinSize(
264269
new LogicalSize(minWidth, minHeight)
@@ -269,9 +274,6 @@
269274
new LogicalSize(maxWidth, maxHeight)
270275
)
271276
: webviewMap[selectedWebview]?.setMaxSize(null)
272-
$: x !== null &&
273-
y !== null &&
274-
webviewMap[selectedWebview]?.setPosition(new PhysicalPosition(x, y))
275277
$: webviewMap[selectedWebview]
276278
?.scaleFactor()
277279
.then((factor) => (scaleFactor = factor))
@@ -403,22 +405,46 @@
403405
<div class="flex children:grow flex-col">
404406
<div>
405407
X
406-
<input class="input" type="number" bind:value={x} min="0" />
408+
<input
409+
class="input"
410+
type="number"
411+
bind:value={x}
412+
on:change={updatePosition}
413+
min="0"
414+
/>
407415
</div>
408416
<div>
409417
Y
410-
<input class="input" type="number" bind:value={y} min="0" />
418+
<input
419+
class="input"
420+
type="number"
421+
bind:value={y}
422+
on:change={updatePosition}
423+
min="0"
424+
/>
411425
</div>
412426
</div>
413427
414428
<div class="flex children:grow flex-col">
415429
<div>
416430
Width
417-
<input class="input" type="number" bind:value={width} min="400" />
431+
<input
432+
class="input"
433+
type="number"
434+
bind:value={width}
435+
on:change={updateSize}
436+
min="400"
437+
/>
418438
</div>
419439
<div>
420440
Height
421-
<input class="input" type="number" bind:value={height} min="400" />
441+
<input
442+
class="input"
443+
type="number"
444+
bind:value={height}
445+
on:change={updateSize}
446+
min="400"
447+
/>
422448
</div>
423449
</div>
424450
@@ -445,70 +471,58 @@
445471
</div>
446472
</div>
447473
<br />
448-
<div>
449-
<div class="flex">
450-
<div class="grow">
451-
<div class="text-accent dark:text-darkAccent font-700">
452-
Inner Size
453-
</div>
454-
<span>Width: {innerSize.width}</span>
455-
<span>Height: {innerSize.height}</span>
456-
</div>
457-
<div class="grow">
458-
<div class="text-accent dark:text-darkAccent font-700">
459-
Outer Size
460-
</div>
461-
<span>Width: {outerSize.width}</span>
462-
<span>Height: {outerSize.height}</span>
463-
</div>
474+
<div class="grid grid-cols-2 gap-2 max-inline-2xl">
475+
<div >
476+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">Inner Size</div>
477+
<span>Width: {innerSize.width}</span>
478+
<span>Height: {innerSize.height}</span>
464479
</div>
465-
<div class="flex">
466-
<div class="grow">
467-
<div class="text-accent dark:text-darkAccent font-700">
468-
Inner Logical Size
469-
</div>
470-
<span>Width: {innerSize.toLogical(scaleFactor).width}</span>
471-
<span>Height: {innerSize.toLogical(scaleFactor).height}</span>
480+
<div>
481+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">Outer Size</div>
482+
<span>Width: {outerSize.width}</span>
483+
<span>Height: {outerSize.height}</span>
484+
</div>
485+
<div>
486+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
487+
Inner Logical Size
472488
</div>
473-
<div class="grow">
474-
<div class="text-accent dark:text-darkAccent font-700">
475-
Outer Logical Size
476-
</div>
477-
<span>Width: {outerSize.toLogical(scaleFactor).width}</span>
478-
<span>Height: {outerSize.toLogical(scaleFactor).height}</span>
489+
<span>Width: {innerSize.toLogical(scaleFactor).width.toFixed(3)}</span>
490+
<span>Height: {innerSize.toLogical(scaleFactor).height.toFixed(3)}</span>
491+
</div>
492+
<div>
493+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
494+
Outer Logical Size
479495
</div>
496+
<span>Width: {outerSize.toLogical(scaleFactor).width.toFixed(3)}</span>
497+
<span>Height: {outerSize.toLogical(scaleFactor).height.toFixed(3)}</span>
480498
</div>
481-
<div class="flex">
482-
<div class="grow">
483-
<div class="text-accent dark:text-darkAccent font-700">
484-
Inner Position
485-
</div>
486-
<span>x: {innerPosition.x}</span>
487-
<span>y: {innerPosition.y}</span>
499+
<div>
500+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
501+
Inner Position
488502
</div>
489-
<div class="grow">
490-
<div class="text-accent dark:text-darkAccent font-700">
491-
Outer Position
492-
</div>
493-
<span>x: {outerPosition.x}</span>
494-
<span>y: {outerPosition.y}</span>
503+
<span>x: {innerPosition.x}</span>
504+
<span>y: {innerPosition.y}</span>
505+
</div>
506+
<div>
507+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
508+
Outer Position
495509
</div>
510+
<span>x: {outerPosition.x}</span>
511+
<span>y: {outerPosition.y}</span>
496512
</div>
497-
<div class="flex">
498-
<div class="grow">
499-
<div class="text-accent dark:text-darkAccent font-700">
500-
Inner Logical Position
501-
</div>
502-
<span>x: {innerPosition.toLogical(scaleFactor).x}</span>
503-
<span>y: {innerPosition.toLogical(scaleFactor).y}</span>
513+
<div>
514+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
515+
Inner Logical Position
504516
</div>
505-
<div class="grow">
506-
<div class="text-accent dark:text-darkAccent font-700">
507-
Outer Logical Position
508-
</div>
509-
<span>x: {outerPosition.toLogical(scaleFactor).x}</span>
510-
<span>y: {outerPosition.toLogical(scaleFactor).y}</span>
517+
<span>x: {innerPosition.toLogical(scaleFactor).x.toFixed(3)}</span>
518+
<span>y: {innerPosition.toLogical(scaleFactor).y.toFixed(3)}</span>
519+
</div>
520+
<div>
521+
<div class="text-accent dark:text-darkAccent font-700 m-block-2">
522+
Outer Logical Position
511523
</div>
524+
<span>x: {outerPosition.toLogical(scaleFactor).x.toFixed(3)}</span>
525+
<span>y: {outerPosition.toLogical(scaleFactor).y.toFixed(3)}</span>
512526
</div>
513527
</div>
514528
<br />

0 commit comments

Comments
 (0)