feat(window): add option to disable controls

pull/406/head
Lucas Nogueira 2 years ago
parent a7cba0dac7
commit d02b03fb3e
No known key found for this signature in database
GPG Key ID: FFEA6C72E73482F1

@ -0,0 +1,5 @@
---
'window-js': 'minor:feat'
---
Added the `maximizable`, `minimizable` and `closable` fields on `WindowOptions`.

@ -0,0 +1,6 @@
---
'window': 'minor:feat'
'window-js': 'minor:feat'
---
Added the `setMaximizable`, `setMinimizable`, `setClosable`, `isMaximizable`, `isMinimizable` and `isClosable` methods.

737
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -5,8 +5,8 @@ resolver = "2"
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
log = "0.4"
tauri = "2.0.0-alpha.9"
tauri-build = "2.0.0-alpha.5"
tauri = { git = "https://github.com/tauri-apps/tauri", branch = "chore/merge-from-dev" }
tauri-build = { git = "https://github.com/tauri-apps/tauri", branch = "chore/merge-from-dev" }
serde_json = "1"
thiserror = "1"

@ -63,6 +63,9 @@
let urlValue = "https://tauri.app";
let resizable = true;
let maximizable = true;
let minimizable = true;
let closable = true;
let maximized = false;
let decorations = true;
let alwaysOnTop = false;
@ -178,6 +181,9 @@
loadWindowSize();
}
$: windowMap[selectedWindow]?.setResizable(resizable);
$: windowMap[selectedWindow]?.setMaximizable(maximizable);
$: windowMap[selectedWindow]?.setMinimizable(minimizable);
$: windowMap[selectedWindow]?.setClosable(closable);
$: maximized
? windowMap[selectedWindow]?.maximize()
: windowMap[selectedWindow]?.unmaximize();
@ -280,6 +286,18 @@
Resizable
<input type="checkbox" bind:checked={resizable} />
</label>
<label>
Maximizable
<input type="checkbox" bind:checked={maximizable} />
</label>
<label>
Minimizable
<input type="checkbox" bind:checked={minimizable} />
</label>
<label>
Closable
<input type="checkbox" bind:checked={closable} />
</label>
<label>
Has decorations
<input type="checkbox" bind:checked={decorations} />

@ -601,6 +601,69 @@ class WindowManager extends WebviewWindowHandle {
});
}
/**
* Gets the windows native maximize button state.
*
* #### Platform-specific
*
* - **Linux / iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* const maximizable = await appWindow.isMaximizable();
* ```
*
* @returns Whether the window's native maximize button is enabled or not.
* */
async isMaximizable(): Promise<boolean> {
return window.__TAURI_INVOKE__("plugin:window|is_maximizable", {
label: this.label,
});
}
/**
* Gets the windows native minimize button state.
*
* #### Platform-specific
*
* - **Linux / iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* const minimizable = await appWindow.isMinimizable();
* ```
*
* @returns Whether the window's native minimize button is enabled or not.
* */
async isMinimizable(): Promise<boolean> {
return window.__TAURI_INVOKE__("plugin:window|is_minimizable", {
label: this.label,
});
}
/**
* Gets the windows native close button state.
*
* #### Platform-specific
*
* - **Linux / iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* const closable = await appWindow.isClosable();
* ```
*
* @returns Whether the window's native close button is enabled or not.
* */
async isClosable(): Promise<boolean> {
return window.__TAURI_INVOKE__("plugin:window|is_closable", {
label: this.label,
});
}
/**
* Gets the window's current visible state.
* @example
@ -697,7 +760,7 @@ class WindowManager extends WebviewWindowHandle {
* await appWindow.requestUserAttention();
* ```
*
* @param resizable
* @param requestType
* @returns A promise indicating the success or failure of the operation.
*
* @since 2.0.0
@ -740,6 +803,78 @@ class WindowManager extends WebviewWindowHandle {
});
}
/**
* Sets whether the window's native maximize button is enabled or not.
* If resizable is set to false, this setting is ignored.
*
* #### Platform-specific
*
* - **macOS:** Disables the "zoom" button in the window titlebar, which is also used to enter fullscreen mode.
* - **Linux / iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* await appWindow.setMaximizable(false);
* ```
*
* @param maximizable
* @returns A promise indicating the success or failure of the operation.
*/
async setMaximizable(maximizable: boolean): Promise<void> {
return window.__TAURI_INVOKE__("plugin:window|set_maximizable", {
label: this.label,
value: maximizable,
});
}
/**
* Sets whether the window's native minimize button is enabled or not.
*
* #### Platform-specific
*
* - **Linux / iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* await appWindow.setMinimizable(false);
* ```
*
* @param minimizable
* @returns A promise indicating the success or failure of the operation.
*/
async setMinimizable(minimizable: boolean): Promise<void> {
return window.__TAURI_INVOKE__("plugin:window|set_minimizable", {
label: this.label,
value: minimizable,
});
}
/**
* Sets whether the window's native close button is enabled or not.
*
* #### Platform-specific
*
* - **Linux:** GTK+ will do its best to convince the window manager not to show a close button. Depending on the system, this function may not have any effect when called on a window that is already visible
* - **iOS / Android:** Unsupported.
*
* @example
* ```typescript
* import { appWindow } from '@tauri-apps/plugin-window';
* await appWindow.setClosable(false);
* ```
*
* @param closable
* @returns A promise indicating the success or failure of the operation.
*/
async setClosable(closable: boolean): Promise<void> {
return window.__TAURI_INVOKE__("plugin:window|set_closable", {
label: this.label,
value: closable,
});
}
/**
* Sets the window title.
* @example
@ -1049,12 +1184,12 @@ class WindowManager extends WebviewWindowHandle {
label: this.label,
value: size
? {
type: size.type,
data: {
width: size.width,
height: size.height,
},
}
type: size.type,
data: {
width: size.width,
height: size.height,
},
}
: null,
});
}
@ -1085,12 +1220,12 @@ class WindowManager extends WebviewWindowHandle {
label: this.label,
value: size
? {
type: size.type,
data: {
width: size.width,
height: size.height,
},
}
type: size.type,
data: {
width: size.width,
height: size.height,
},
}
: null,
});
}
@ -1886,17 +2021,29 @@ interface WindowOptions {
* The user agent for the webview.
*/
userAgent?: string;
/**
* Whether the window's native maximize button is enabled or not. Defaults to `true`.
*/
maximizable?: boolean
/**
* Whether the window's native minimize button is enabled or not. Defaults to `true`.
*/
minimizable?: boolean
/**
* Whether the window's native close button is enabled or not. Defaults to `true`.
*/
closable?: boolean
}
function mapMonitor(m: Monitor | null): Monitor | null {
return m === null
? null
: {
name: m.name,
scaleFactor: m.scaleFactor,
position: mapPhysicalPosition(m.position),
size: mapPhysicalSize(m.size),
};
name: m.name,
scaleFactor: m.scaleFactor,
position: mapPhysicalPosition(m.position),
size: mapPhysicalSize(m.size),
};
}
function mapPhysicalPosition(m: PhysicalPosition): PhysicalPosition {

File diff suppressed because one or more lines are too long

@ -113,6 +113,9 @@ getter!(is_minimized, bool);
getter!(is_maximized, bool);
getter!(is_decorated, bool);
getter!(is_resizable, bool);
getter!(is_maximizable, bool);
getter!(is_minimizable, bool);
getter!(is_closable, bool);
getter!(is_visible, bool);
getter!(title, String);
getter!(current_monitor, Option<Monitor>);
@ -123,6 +126,9 @@ getter!(theme, Theme);
setter!(center);
setter!(request_user_attention, Option<UserAttentionType>);
setter!(set_resizable, bool);
setter!(set_maximizable, bool);
setter!(set_minimizable, bool);
setter!(set_closable, bool);
setter!(set_title, &str);
setter!(maximize);
setter!(unmaximize);

@ -42,6 +42,9 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
desktop_commands::is_maximized,
desktop_commands::is_decorated,
desktop_commands::is_resizable,
desktop_commands::is_maximizable,
desktop_commands::is_minimizable,
desktop_commands::is_closable,
desktop_commands::is_visible,
desktop_commands::title,
desktop_commands::current_monitor,
@ -52,6 +55,9 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
desktop_commands::center,
desktop_commands::request_user_attention,
desktop_commands::set_resizable,
desktop_commands::set_maximizable,
desktop_commands::set_minimizable,
desktop_commands::set_closable,
desktop_commands::set_title,
desktop_commands::maximize,
desktop_commands::unmaximize,

Loading…
Cancel
Save