use crate::{
webview::{FileDropHandler, WebviewAttributes, WebviewRpcHandler},
Dispatch, Runtime, WindowBuilder,
};
use serde::Serialize;
use tauri_utils::config::WindowConfig;
use std::hash::{Hash, Hasher};
pub mod dpi;
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum WindowEvent {
Resized(dpi::PhysicalSize<u32>),
Moved(dpi::PhysicalPosition<i32>),
CloseRequested,
Destroyed,
Focused(bool),
ScaleFactorChanged {
scale_factor: f64,
new_inner_size: dpi::PhysicalSize<u32>,
},
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MenuEvent {
pub menu_item_id: u16,
}
pub struct PendingWindow<R: Runtime> {
pub label: String,
pub window_builder: <R::Dispatcher as Dispatch>::WindowBuilder,
pub webview_attributes: WebviewAttributes,
pub rpc_handler: Option<WebviewRpcHandler<R>>,
pub file_drop_handler: Option<FileDropHandler<R>>,
pub url: String,
}
impl<R: Runtime> PendingWindow<R> {
pub fn new(
window_builder: <R::Dispatcher as Dispatch>::WindowBuilder,
webview_attributes: WebviewAttributes,
label: impl Into<String>,
) -> Self {
Self {
window_builder,
webview_attributes,
label: label.into(),
rpc_handler: None,
file_drop_handler: None,
url: "tauri://localhost".to_string(),
}
}
pub fn with_config(
window_config: WindowConfig,
webview_attributes: WebviewAttributes,
label: impl Into<String>,
) -> Self {
Self {
window_builder: <<R::Dispatcher as Dispatch>::WindowBuilder>::with_config(window_config),
webview_attributes,
label: label.into(),
rpc_handler: None,
file_drop_handler: None,
url: "tauri://localhost".to_string(),
}
}
}
#[derive(Debug)]
pub struct DetachedWindow<R: Runtime> {
pub label: String,
pub dispatcher: R::Dispatcher,
}
impl<R: Runtime> Clone for DetachedWindow<R> {
fn clone(&self) -> Self {
Self {
label: self.label.clone(),
dispatcher: self.dispatcher.clone(),
}
}
}
impl<R: Runtime> Hash for DetachedWindow<R> {
fn hash<H: Hasher>(&self, state: &mut H) {
self.label.hash(state)
}
}
impl<R: Runtime> Eq for DetachedWindow<R> {}
impl<R: Runtime> PartialEq for DetachedWindow<R> {
fn eq(&self, other: &Self) -> bool {
self.label.eq(&other.label)
}
}