diff options
| author | 2021-06-25 14:47:14 +0200 | |
|---|---|---|
| committer | 2021-06-25 14:47:14 +0200 | |
| commit | 06d0158efbaadc5ae0a6dea22e7a761a3e1c2a8f (patch) | |
| tree | acf6d59469d89e46020cb7a27ce217294ed47e9e | |
| parent | d2c8a3e04b02a1fcf54504bcbd41c488a8bba88a (diff) | |
| parent | 612585109ffc9a14a507c3c8423c6aa790c35cbf (diff) | |
| download | iced-06d0158efbaadc5ae0a6dea22e7a761a3e1c2a8f.tar.gz iced-06d0158efbaadc5ae0a6dea22e7a761a3e1c2a8f.tar.bz2 iced-06d0158efbaadc5ae0a6dea22e7a761a3e1c2a8f.zip  | |
Merge pull request #917 from derezzedex/macos-url
Enable receiving URLs on MacOS
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | examples/url_handler/Cargo.toml | 10 | ||||
| -rw-r--r-- | examples/url_handler/src/main.rs | 73 | ||||
| -rw-r--r-- | glutin/Cargo.toml | 6 | ||||
| -rw-r--r-- | glutin/src/application.rs | 10 | ||||
| -rw-r--r-- | native/src/event.rs | 21 | ||||
| -rw-r--r-- | winit/Cargo.toml | 6 | ||||
| -rw-r--r-- | winit/src/application.rs | 10 | 
8 files changed, 134 insertions, 3 deletions
@@ -84,6 +84,7 @@ members = [      "examples/todos",      "examples/tour",      "examples/tooltip", +    "examples/url_handler",  ]  [dependencies] diff --git a/examples/url_handler/Cargo.toml b/examples/url_handler/Cargo.toml new file mode 100644 index 00000000..911b2f25 --- /dev/null +++ b/examples/url_handler/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "url_handler" +version = "0.1.0" +authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"] +edition = "2018" +publish = false + +[dependencies] +iced = { path = "../.." } +iced_native = { path = "../../native" }
\ No newline at end of file diff --git a/examples/url_handler/src/main.rs b/examples/url_handler/src/main.rs new file mode 100644 index 00000000..f14e5227 --- /dev/null +++ b/examples/url_handler/src/main.rs @@ -0,0 +1,73 @@ +use iced::{ +    executor, Application, Clipboard, Command, Container, Element, Length, +    Settings, Subscription, Text, +}; +use iced_native::{ +    event::{MacOS, PlatformSpecific}, +    Event, +}; + +pub fn main() -> iced::Result { +    App::run(Settings::default()) +} + +#[derive(Debug, Default)] +struct App { +    url: Option<String>, +} + +#[derive(Debug, Clone)] +enum Message { +    EventOccurred(iced_native::Event), +} + +impl Application for App { +    type Executor = executor::Default; +    type Message = Message; +    type Flags = (); + +    fn new(_flags: ()) -> (App, Command<Message>) { +        (App::default(), Command::none()) +    } + +    fn title(&self) -> String { +        String::from("Url - Iced") +    } + +    fn update( +        &mut self, +        message: Message, +        _clipboard: &mut Clipboard, +    ) -> Command<Message> { +        match message { +            Message::EventOccurred(event) => { +                if let Event::PlatformSpecific(PlatformSpecific::MacOS( +                    MacOS::ReceivedUrl(url), +                )) = event +                { +                    self.url = Some(url); +                } +            } +        }; + +        Command::none() +    } + +    fn subscription(&self) -> Subscription<Message> { +        iced_native::subscription::events().map(Message::EventOccurred) +    } + +    fn view(&mut self) -> Element<Message> { +        let content = match &self.url { +            Some(url) => Text::new(format!("{}", url)), +            None => Text::new("No URL received yet!"), +        }; + +        Container::new(content.size(48)) +            .width(Length::Fill) +            .height(Length::Fill) +            .center_x() +            .center_y() +            .into() +    } +} diff --git a/glutin/Cargo.toml b/glutin/Cargo.toml index 92aa5018..913ff5b8 100644 --- a/glutin/Cargo.toml +++ b/glutin/Cargo.toml @@ -13,8 +13,10 @@ categories = ["gui"]  [features]  debug = ["iced_winit/debug"] -[dependencies] -glutin = "0.27" +[dependencies.glutin] +version = "0.27" +git = "https://github.com/iced-rs/glutin" +rev = "be6793b5b3defc9452cd1c896cd315ed7442d546"  [dependencies.iced_native]  version = "0.4" diff --git a/glutin/src/application.rs b/glutin/src/application.rs index 79fcf745..a8e5dbf9 100644 --- a/glutin/src/application.rs +++ b/glutin/src/application.rs @@ -237,6 +237,16 @@ async fn run_instance<A, E, C>(                  context.window().request_redraw();              } +            event::Event::PlatformSpecific(event::PlatformSpecific::MacOS( +                event::MacOS::ReceivedUrl(url), +            )) => { +                use iced_native::event; +                events.push(iced_native::Event::PlatformSpecific( +                    event::PlatformSpecific::MacOS(event::MacOS::ReceivedUrl( +                        url, +                    )), +                )); +            }              event::Event::UserEvent(message) => {                  messages.push(message);              } diff --git a/native/src/event.rs b/native/src/event.rs index 205bb797..1c26b5f2 100644 --- a/native/src/event.rs +++ b/native/src/event.rs @@ -23,6 +23,27 @@ pub enum Event {      /// A touch event      Touch(touch::Event), + +    /// A platform specific event +    PlatformSpecific(PlatformSpecific), +} + +/// A platform specific event +#[derive(Debug, Clone, PartialEq)] +pub enum PlatformSpecific { +    /// A MacOS specific event +    MacOS(MacOS), +} + +/// Describes an event specific to MacOS +#[derive(Debug, Clone, PartialEq)] +pub enum MacOS { +    /// Triggered when the app receives an URL from the system +    /// +    /// _**Note:** For this event to be triggered, the executable needs to be properly [bundled]!_ +    /// +    /// [bundled]: https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW19 +    ReceivedUrl(String),  }  /// The status of an [`Event`] after being processed. diff --git a/winit/Cargo.toml b/winit/Cargo.toml index 4bb46029..b926a9c5 100644 --- a/winit/Cargo.toml +++ b/winit/Cargo.toml @@ -14,11 +14,15 @@ categories = ["gui"]  debug = ["iced_native/debug"]  [dependencies] -winit = "0.25"  window_clipboard = "0.2"  log = "0.4"  thiserror = "1.0" +[dependencies.winit] +version = "0.25" +git = "https://github.com/iced-rs/winit" +rev = "9c358959ed99736566d50a511b03d2fed3aac2ae" +  [dependencies.iced_native]  version = "0.4"  path = "../native" diff --git a/winit/src/application.rs b/winit/src/application.rs index b1d5f418..49f2f513 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -310,6 +310,16 @@ async fn run_instance<A, E, C>(                  window.request_redraw();              } +            event::Event::PlatformSpecific(event::PlatformSpecific::MacOS( +                event::MacOS::ReceivedUrl(url), +            )) => { +                use iced_native::event; +                events.push(iced_native::Event::PlatformSpecific( +                    event::PlatformSpecific::MacOS(event::MacOS::ReceivedUrl( +                        url, +                    )), +                )); +            }              event::Event::UserEvent(message) => {                  messages.push(message);              }  | 
