mirror of
https://github.com/mileswolfallen2/gelectron.git
synced 2026-09-08 12:43:16 +00:00
112 lines
2.8 KiB
Rust
112 lines
2.8 KiB
Rust
// Copyright 2020-2023 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
use tao::{
|
|
event::{ElementState, Event, KeyEvent, WindowEvent},
|
|
event_loop::{ControlFlow, EventLoop},
|
|
keyboard::Key,
|
|
window::WindowBuilder,
|
|
};
|
|
use wry::WebViewBuilder;
|
|
|
|
#[cfg(target_os = "macos")]
|
|
use {objc2_app_kit::NSWindow, tao::platform::macos::WindowExtMacOS, wry::WebViewExtMacOS};
|
|
#[cfg(target_os = "windows")]
|
|
use {tao::platform::windows::WindowExtWindows, wry::WebViewExtWindows};
|
|
|
|
#[cfg(not(any(
|
|
target_os = "windows",
|
|
target_os = "macos",
|
|
target_os = "ios",
|
|
target_os = "android"
|
|
)))]
|
|
#[cfg(not(any(
|
|
target_os = "windows",
|
|
target_os = "macos",
|
|
target_os = "ios",
|
|
target_os = "android"
|
|
)))]
|
|
use {
|
|
tao::platform::unix::WindowExtUnix,
|
|
wry::{WebViewBuilderExtUnix, WebViewExtUnix},
|
|
};
|
|
|
|
fn main() -> wry::Result<()> {
|
|
let event_loop = EventLoop::new();
|
|
let window = WindowBuilder::new().build(&event_loop).unwrap();
|
|
let window2 = WindowBuilder::new().build(&event_loop).unwrap();
|
|
|
|
let builder = WebViewBuilder::new().with_url("https://tauri.app");
|
|
|
|
#[cfg(any(
|
|
target_os = "windows",
|
|
target_os = "macos",
|
|
target_os = "ios",
|
|
target_os = "android"
|
|
))]
|
|
let webview = builder.build(&window)?;
|
|
#[cfg(not(any(
|
|
target_os = "windows",
|
|
target_os = "macos",
|
|
target_os = "ios",
|
|
target_os = "android"
|
|
)))]
|
|
let webview = {
|
|
use tao::platform::unix::WindowExtUnix;
|
|
let vbox = window.default_vbox().unwrap();
|
|
builder.build_gtk(vbox)?
|
|
};
|
|
|
|
let mut webview_container = window.id();
|
|
|
|
event_loop.run(move |event, _event_loop, control_flow| {
|
|
*control_flow = ControlFlow::Wait;
|
|
|
|
match event {
|
|
Event::WindowEvent {
|
|
event: WindowEvent::CloseRequested,
|
|
..
|
|
} => *control_flow = ControlFlow::Exit,
|
|
|
|
Event::WindowEvent {
|
|
event:
|
|
WindowEvent::KeyboardInput {
|
|
event:
|
|
KeyEvent {
|
|
logical_key: Key::Character("x"),
|
|
state: ElementState::Pressed,
|
|
..
|
|
},
|
|
..
|
|
},
|
|
..
|
|
} => {
|
|
let new_parent = if webview_container == window.id() {
|
|
&window2
|
|
} else {
|
|
&window
|
|
};
|
|
webview_container = new_parent.id();
|
|
|
|
#[cfg(target_os = "macos")]
|
|
webview
|
|
.reparent(new_parent.ns_window() as *mut NSWindow)
|
|
.unwrap();
|
|
#[cfg(not(any(
|
|
target_os = "windows",
|
|
target_os = "macos",
|
|
target_os = "ios",
|
|
target_os = "android"
|
|
)))]
|
|
webview
|
|
.reparent(new_parent.default_vbox().unwrap())
|
|
.unwrap();
|
|
#[cfg(target_os = "windows")]
|
|
webview.reparent(new_parent.hwnd()).unwrap();
|
|
}
|
|
_ => {}
|
|
}
|
|
});
|
|
}
|