feat(positioner, window-state): impl `WindowExt` for `WebviewWindow` (#1283)

closes #1281
pull/1285/head
Amr Bashir 1 year ago committed by GitHub
parent b4efa58d5d
commit d9de5b19d1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,6 @@
---
"positioner": "patch"
"window-state": "patch"
---
Implement `WindowExt` for `WebviewWindow`.

58
Cargo.lock generated

@ -230,7 +230,7 @@ checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1"
[[package]] [[package]]
name = "api" name = "api"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6043,7 +6043,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-authenticator" name = "tauri-plugin-authenticator"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"authenticator", "authenticator",
"base64 0.22.0", "base64 0.22.0",
@ -6065,7 +6065,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-autostart" name = "tauri-plugin-autostart"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"auto-launch", "auto-launch",
"log", "log",
@ -6078,7 +6078,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-barcode-scanner" name = "tauri-plugin-barcode-scanner"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6090,7 +6090,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-biometric" name = "tauri-plugin-biometric"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6103,7 +6103,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-cli" name = "tauri-plugin-cli"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"clap", "clap",
"log", "log",
@ -6116,7 +6116,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-clipboard-manager" name = "tauri-plugin-clipboard-manager"
version = "2.1.0-beta.1" version = "2.1.0-beta.2"
dependencies = [ dependencies = [
"arboard", "arboard",
"image", "image",
@ -6130,7 +6130,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-deep-link" name = "tauri-plugin-deep-link"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6143,7 +6143,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-dialog" name = "tauri-plugin-dialog"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"dunce", "dunce",
"log", "log",
@ -6159,7 +6159,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-fs" name = "tauri-plugin-fs"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"glob", "glob",
@ -6178,7 +6178,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-global-shortcut" name = "tauri-plugin-global-shortcut"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"global-hotkey", "global-hotkey",
"log", "log",
@ -6191,7 +6191,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-http" name = "tauri-plugin-http"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"data-url", "data-url",
"http", "http",
@ -6210,7 +6210,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-localhost" name = "tauri-plugin-localhost"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"http", "http",
"log", "log",
@ -6223,7 +6223,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-log" name = "tauri-plugin-log"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"android_logger", "android_logger",
"byte-unit", "byte-unit",
@ -6242,7 +6242,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-nfc" name = "tauri-plugin-nfc"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6255,7 +6255,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-notification" name = "tauri-plugin-notification"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"chrono", "chrono",
"color-backtrace", "color-backtrace",
@ -6282,7 +6282,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-os" name = "tauri-plugin-os"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"gethostname", "gethostname",
"log", "log",
@ -6298,7 +6298,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-persisted-scope" name = "tauri-plugin-persisted-scope"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"bincode", "bincode",
@ -6312,7 +6312,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-positioner" name = "tauri-plugin-positioner"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",
@ -6325,7 +6325,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-process" name = "tauri-plugin-process"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"tauri", "tauri",
"tauri-plugin", "tauri-plugin",
@ -6333,7 +6333,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-shell" name = "tauri-plugin-shell"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"encoding_rs", "encoding_rs",
"log", "log",
@ -6351,7 +6351,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-single-instance" name = "tauri-plugin-single-instance"
version = "2.0.0-beta.6" version = "2.0.0-beta.7"
dependencies = [ dependencies = [
"log", "log",
"semver", "semver",
@ -6365,7 +6365,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-sql" name = "tauri-plugin-sql"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"log", "log",
@ -6381,7 +6381,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-store" name = "tauri-plugin-store"
version = "2.0.0-beta.5" version = "2.0.0-beta.6"
dependencies = [ dependencies = [
"dunce", "dunce",
"log", "log",
@ -6394,7 +6394,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-stronghold" name = "tauri-plugin-stronghold"
version = "2.0.0-beta.3" version = "2.0.0-beta.4"
dependencies = [ dependencies = [
"hex", "hex",
"iota-crypto 0.23.1", "iota-crypto 0.23.1",
@ -6415,7 +6415,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-updater" name = "tauri-plugin-updater"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"base64 0.22.0", "base64 0.22.0",
"dirs-next", "dirs-next",
@ -6442,7 +6442,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-upload" name = "tauri-plugin-upload"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"log", "log",
@ -6459,7 +6459,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-websocket" name = "tauri-plugin-websocket"
version = "2.0.0-beta.4" version = "2.0.0-beta.5"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"http", "http",
@ -6476,7 +6476,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-window-state" name = "tauri-plugin-window-state"
version = "2.0.0-beta.5" version = "2.0.0-beta.6"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"log", "log",

@ -8,7 +8,7 @@ use crate::Tray;
use serde_repr::Deserialize_repr; use serde_repr::Deserialize_repr;
#[cfg(feature = "tray-icon")] #[cfg(feature = "tray-icon")]
use tauri::Manager; use tauri::Manager;
use tauri::{PhysicalPosition, PhysicalSize, Result, Runtime, Window}; use tauri::{PhysicalPosition, PhysicalSize, Result, Runtime, WebviewWindow, Window};
/// Well known window positions. /// Well known window positions.
#[derive(Debug, Deserialize_repr)] #[derive(Debug, Deserialize_repr)]
@ -45,6 +45,11 @@ pub trait WindowExt {
fn move_window(&self, position: Position) -> Result<()>; fn move_window(&self, position: Position) -> Result<()>;
} }
impl<R: Runtime> WindowExt for WebviewWindow<R> {
fn move_window(&self, pos: Position) -> Result<()> {
self.as_ref().window().move_window(pos)
}
}
impl<R: Runtime> WindowExt for Window<R> { impl<R: Runtime> WindowExt for Window<R> {
fn move_window(&self, pos: Position) -> Result<()> { fn move_window(&self, pos: Position) -> Result<()> {
use Position::*; use Position::*;

@ -26,8 +26,6 @@ pub async fn restore_state<R: Runtime>(
.ok_or_else(|| format!("Invalid state flags bits: {}", flags))?; .ok_or_else(|| format!("Invalid state flags bits: {}", flags))?;
app.get_webview_window(&label) app.get_webview_window(&label)
.ok_or_else(|| format!("Couldn't find window with label: {}", label))? .ok_or_else(|| format!("Couldn't find window with label: {}", label))?
.as_ref()
.window()
.restore_state(flags) .restore_state(flags)
.map_err(|e| e.to_string())?; .map_err(|e| e.to_string())?;
Ok(()) Ok(())

@ -16,8 +16,8 @@ use bitflags::bitflags;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tauri::{ use tauri::{
plugin::{Builder as PluginBuilder, TauriPlugin}, plugin::{Builder as PluginBuilder, TauriPlugin},
LogicalSize, Manager, Monitor, PhysicalPosition, PhysicalSize, RunEvent, Runtime, Window, LogicalSize, Manager, Monitor, PhysicalPosition, PhysicalSize, RunEvent, Runtime,
WindowEvent, WebviewWindow, Window, WindowEvent,
}; };
use std::{ use std::{
@ -118,7 +118,7 @@ impl<R: Runtime> AppHandleExt for tauri::AppHandle<R> {
let mut state = cache.0.lock().unwrap(); let mut state = cache.0.lock().unwrap();
for (label, s) in state.iter_mut() { for (label, s) in state.iter_mut() {
if let Some(window) = self.get_webview_window(label) { if let Some(window) = self.get_webview_window(label) {
window.as_ref().window().update_state(s, flags)?; window.update_state(s, flags)?;
} }
} }
@ -141,6 +141,11 @@ pub trait WindowExt {
fn restore_state(&self, flags: StateFlags) -> tauri::Result<()>; fn restore_state(&self, flags: StateFlags) -> tauri::Result<()>;
} }
impl<R: Runtime> WindowExt for WebviewWindow<R> {
fn restore_state(&self, flags: StateFlags) -> tauri::Result<()> {
self.as_ref().window().restore_state(flags)
}
}
impl<R: Runtime> WindowExt for Window<R> { impl<R: Runtime> WindowExt for Window<R> {
fn restore_state(&self, flags: StateFlags) -> tauri::Result<()> { fn restore_state(&self, flags: StateFlags) -> tauri::Result<()> {
let cache = self.state::<WindowStateCache>(); let cache = self.state::<WindowStateCache>();
@ -246,6 +251,12 @@ trait WindowExtInternal {
fn update_state(&self, state: &mut WindowState, flags: StateFlags) -> tauri::Result<()>; fn update_state(&self, state: &mut WindowState, flags: StateFlags) -> tauri::Result<()>;
} }
impl<R: Runtime> WindowExtInternal for WebviewWindow<R> {
fn update_state(&self, state: &mut WindowState, flags: StateFlags) -> tauri::Result<()> {
self.as_ref().window().update_state(state, flags)
}
}
impl<R: Runtime> WindowExtInternal for Window<R> { impl<R: Runtime> WindowExtInternal for Window<R> {
fn update_state(&self, state: &mut WindowState, flags: StateFlags) -> tauri::Result<()> { fn update_state(&self, state: &mut WindowState, flags: StateFlags) -> tauri::Result<()> {
let is_maximized = match flags.intersects(StateFlags::MAXIMIZED | StateFlags::SIZE) { let is_maximized = match flags.intersects(StateFlags::MAXIMIZED | StateFlags::SIZE) {

Loading…
Cancel
Save