From 366cf758870f6bc54c36acfecfbda261ed28bebf Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Mon, 31 Jan 2022 19:39:44 +0800 Subject: [PATCH] feat: add `use_desktop_context` hook --- examples/borderless.rs | 10 +++------- packages/desktop/src/desktop_context.rs | 10 ++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/examples/borderless.rs b/examples/borderless.rs index e6cd4eda1..15756503e 100644 --- a/examples/borderless.rs +++ b/examples/borderless.rs @@ -1,5 +1,4 @@ use dioxus::prelude::*; -use dioxus_desktop::desktop_context::DesktopContext; fn main() { dioxus::desktop::launch_cfg(app, |cfg| { @@ -8,16 +7,13 @@ fn main() { } fn app(cx: Scope) -> Element { - let desktop = cx.consume_context::().unwrap(); - - let drag = desktop.clone(); - let close = desktop.clone(); + let desktop = dioxus::desktop::desktop_context::use_desktop_context(&cx); cx.render(rsx!( link { href:"https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css", rel:"stylesheet" } header { class: "text-gray-400 bg-gray-900 body-font", - onmousedown: move |_| drag.drag_window(), + onmousedown: move |_| desktop.drag_window(), div { class: "container mx-auto flex flex-wrap p-5 flex-col md:flex-row items-center", a { class: "flex title-font font-medium items-center text-white mb-4 md:mb-0", @@ -33,7 +29,7 @@ fn app(cx: Scope) -> Element { button { class: "inline-flex items-center bg-gray-800 border-0 py-1 px-3 focus:outline-none hover:bg-gray-700 rounded text-base mt-4 md:mt-0", onmousedown: |evt| evt.cancel_bubble(), - onclick: move |_| close.close(), + onclick: move |_| desktop.close(), "Close" } } diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index 0a1fa2b02..0e2fbdddd 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -1,3 +1,6 @@ +use std::rc::Rc; + +use dioxus_core::ScopeState; use wry::application::event_loop::EventLoopProxy; use crate::UserWindowEvent; @@ -50,3 +53,10 @@ impl DesktopContext { let _ = self.proxy.send_event(UserWindowEvent::CloseWindow); } } + +/// use this function can get the `DesktopContext` context. +pub fn use_desktop_context(cx: &ScopeState) -> &Rc { + cx.use_hook(|_| cx.consume_context::()) + .as_ref() + .unwrap() +}