winit/src/platform_impl/macos/app_delegate.rs

481 lines
18 KiB
Rust
Raw Normal View History

use std::cell::{Cell, RefCell};
use std::collections::VecDeque;
use std::mem;
use std::rc::Weak;
use std::sync::{Arc, Mutex};
use std::time::Instant;
use icrate::AppKit::{NSApplication, NSApplicationActivationPolicy, NSApplicationDelegate};
use icrate::Foundation::{MainThreadMarker, NSObject, NSObjectProtocol, NSSize};
use objc2::rc::Id;
2023-08-02 16:30:41 +02:00
use objc2::runtime::AnyObject;
use objc2::{declare_class, msg_send_id, mutability, ClassType, DeclaredClass};
use super::event_handler::EventHandler;
use super::event_loop::{stop_app_immediately, ActiveEventLoop, PanicInfo};
use super::observer::{EventLoopWaker, RunLoop};
use super::window::WinitWindow;
use super::{menu, WindowId, DEVICE_ID};
use crate::dpi::PhysicalSize;
use crate::event::{DeviceEvent, Event, InnerSizeWriter, StartCause, WindowEvent};
use crate::event_loop::{ActiveEventLoop as RootActiveEventLoop, ControlFlow};
use crate::window::WindowId as RootWindowId;
2022-06-08 11:50:26 -07:00
#[derive(Debug, Default)]
pub(super) struct State {
activation_policy: NSApplicationActivationPolicy,
default_menu: bool,
activate_ignoring_other_apps: bool,
event_handler: EventHandler,
stop_on_launch: Cell<bool>,
stop_before_wait: Cell<bool>,
stop_after_wait: Cell<bool>,
stop_on_redraw: Cell<bool>,
/// Whether `applicationDidFinishLaunching:` has been run or not.
is_launched: Cell<bool>,
/// Whether an `EventLoop` is currently running.
is_running: Cell<bool>,
/// Whether the user has requested the event loop to exit.
exit: Cell<bool>,
control_flow: Cell<ControlFlow>,
waker: RefCell<EventLoopWaker>,
start_time: Cell<Option<Instant>>,
wait_timeout: Cell<Option<Instant>>,
pending_events: RefCell<VecDeque<QueuedEvent>>,
pending_redraw: RefCell<Vec<WindowId>>,
}
declare_class!(
#[derive(Debug)]
pub(super) struct ApplicationDelegate;
unsafe impl ClassType for ApplicationDelegate {
type Super = NSObject;
type Mutability = mutability::MainThreadOnly;
const NAME: &'static str = "WinitApplicationDelegate";
}
Squashed commit of the following: (#853) commit fa95f204d3c10ceca70e794870657a0f33349761 Author: Hal Gentz <zegentzy@protonmail.com> Date: Sun Apr 28 00:14:01 2019 -0600 xrender Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit b62cee51c7b22f6f150bfe04f9b28f024e641323 Merge: 3f021ea7 a6551f46 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 18:13:43 2019 -0600 Merge branch 'macos-gentz' of github.com:ZeGentzy/winit into macos-gentz commit 3f021ea7f7ac6bc2a697a5b6e4e6424e838a2139 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 18:04:02 2019 -0600 Get rid of warnings. Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit a6551f4607ea0bc26df8716dee8115371ef367db Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 07:40:56 2019 -0600 Fix example Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit cbfda6c57e9740b49d2b496bda43197f611cb48c Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:47:46 2019 -0600 Fixes Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 86bc86f3d3add4a6125aa9b2eca79061c0dfcd91 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:39:19 2019 -0600 Backport https://github.com/rust-windowing/winit/commit/9a23ec3c373d096e5e9dd0cc0a23f7baf0b64135#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 742a688efe2f0eeacc2ffbf49b1157c4aaffccbd Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:09:14 2019 -0600 Backports https://github.com/rust-windowing/winit/commit/45a428141329377a1669698e4ca6561834c0dbcc#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 6c81f2a517d4e2d5ba2ff3eddca030bce972cb2a Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:05:57 2019 -0600 Francesca's macos changes Also backports https://github.com/rust-windowing/winit/commit/bfbcab3a010667e74fa3cc07ac85bd4c85491e65#diff-1d95fe39cdbaa708c975380a16c314cb commit 7c2e1300c26a0634ad505ce72b90eb6dc2fdcac7 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Apr 24 20:58:26 2019 -0600 Squashed commit of the following: commit 5f4aa9f01a719eef98c6d894801c20ee8f96d30f Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 17:14:14 2018 -0500 Protect against reentrancy (messily) commit b75073a5b2a8d65ab8806a00ffee390752255c8c Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 15:15:27 2018 -0500 Send resize events immediately commit 8e9fc01bd6b404f59488b130413f48e4e5f89b0d Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 16:07:43 2018 -0500 Don't use struct for window delegate commit c6853b0c4a8fe357f463604bb879dc1be424860e Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 21:17:48 2018 -0500 Split up util commit 262c46b148413130fa239099f1151c1f1bd5c13c Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:55:00 2018 -0500 Use dispatch crate commit 63152c2f475794d1a36a5b3687c777664d7d5613 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:29:13 2018 -0500 RedrawRequested commit 27e475c7c78b059fd9b5e8350cd26756eecdfc94 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 19:24:44 2018 -0500 User events commit 157418d7dedace9c571e977d98ea92464c3188b2 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 22:38:05 2018 -0500 Moved out cursor loading commit b4925641c973979a38743202b4269efe09ac43b4 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 21:32:12 2018 -0500 Fixed a bunch of threading issues commit 4aef63dfb78dfaf38c83cb0e88d4ea9d8d0578a6 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 17 13:54:59 2018 -0500 Wait works commit 72ed426c695df5dc410902263bd74188059b8ddd Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:49:10 2018 -0500 Fixed drag and dropg commit 658209f4a20acd536218f41a01fb8cbbebc705e0 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:42:42 2018 -0500 Made mutexes finer for less deadlock risk commit 8e6b9866084690da900c4d058e412cab8ebb30c4 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 16:45:06 2018 -0500 Dump (encapsulate) everything into AppState commit d2dc83df15939d89301e2cff0ffa2d98c48b406f Author: Francesca Plebani <franplebani@gmail.com> Date: Thu Dec 13 17:36:47 2018 -0500 All window events work! commit 7c7fcc98872b3c35bd7767b5c6235a74bc105e06 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 12 17:11:09 2018 -0500 Very rough usage of CFRunLoop commit 3c7a52ff4df683b5b7e1751e4051ec445a818774 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 11 15:45:23 2018 -0500 Fixed deadlocks commit b74c7fe1bcd173e9b0c0e004956c257e805bc2a2 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:59:46 2018 -0500 Fix keyDown deadlock commit 3798f9c1a4bef2a3d1552f846b26efc31b1bbb6c Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:44:40 2018 -0500 It builds! commit 8c8620214357714c5cd0b3beefda6704512e3f64 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 7 21:09:55 2018 -0500 Horribly broken so far commit 8269ed2a9270e5ec5b14f80fd21d1e0e6f51be29 Author: Osspial <osspial@gmail.com> Date: Mon Nov 19 23:51:20 2018 -0500 Fix crash with runner refcell not getting dropped commit 54ce6a21a0722e408ae49c74f5008005fc1e4cbf Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 19:12:45 2018 -0500 Fix buffered events not getting dispatched commit 2c18b804df66f49f93cfe722a679d6c5e01d8cb1 Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 18:51:24 2018 -0500 Fix thread executor not executing closure when called from non-loop thread commit 5a3a5e2293cec3e566c4aac344ae7eaa343608b5 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 22:43:59 2018 -0500 Fix some deadlocks that could occur when changing window state commit 2a3cefd8c5df1c06127b05651cbdf5e3d9e3a6d3 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:45:17 2018 -0500 Document and implement Debug for EventLoopWindowTarget commit fa46825a289ca0587dc97f9c00dea5516fb4925a Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:40:48 2018 -0500 Replace &EventLoop in callback with &EventLoopWindowTarget commit 9f36a7a68e1dc379cf9091213dae2c3586d3e473 Author: Osspial <osspial@gmail.com> Date: Wed Nov 14 21:28:38 2018 -0500 Fix freeze when setting decorations commit d9c3daca9b459e02ef614568fe803a723965fe8d Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 20:41:15 2018 -0500 Fix 1.24.1 build commit 5289d22372046bac403a279c3641737c0cfc46d2 Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 00:00:27 2018 -0500 Remove serde implementations from ControlFlow commit 92ac3d6ac7915923c22c380cc3a74c5f3830708e Author: Osspial <osspial@gmail.com> Date: Thu Nov 8 23:46:41 2018 -0500 Remove crossbeam dependency and make drop events work again commit 8299eb2f03773a34079c61fc8adb51405aafc467 Author: Osspial <osspial@gmail.com> Date: Thu Sep 13 22:39:40 2018 -0400 Fix crash when running in release mode commit bb6ab1bb6e9595e90f1915fdde7e23904f2ba594 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:28:16 2018 -0400 Fix unreachable panic after setting ControlFlow to Poll during some RedrawRequested events. commit 5068ff4ee152bfe93c9190235f02d001202feb88 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:14:28 2018 -0400 Improve clarity/fix typos in docs commit 8ed575ff4a4f0961bb2e784bda1ae109c6bd37b7 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 00:19:53 2018 -0400 Update send test and errors that broke some examples/APIs commit bf7bfa82ebb5d6ae110ce0492c124ef462945f85 Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 22:36:05 2018 -0400 Fix resize lag when waiting in some situations commit 70722cc4c322e3e599b3a03bce5058a5d433970b Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 19:58:52 2018 -1100 When SendEvent is called during event closure, buffer events commit 53370924b25da15ddd172173150b228065324864 Author: Osspial <osspial@gmail.com> Date: Sun Aug 26 21:55:51 2018 -0400 Improve WaitUntil timer precision commit a654400e730400c2e3584be2f47153043b5b7efe Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 21:06:19 2018 -0400 Add CHANGELOG entry commit deb7d379b7c04e61d6d50ff655eccac0ad692e44 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:19:56 2018 -0400 Rename MonitorId to MonitorHandle commit 8d8d9b7cd1386c99c40023d86e17d10c3fd6652f Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:16:52 2018 -0400 Change instances of "events_loop" to "event_loop" commit 0f344087630ae252c9c8f453864e684a1a5405b1 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:13:53 2018 -0400 Improve docs for run and run_return commit fba41f7a7ed8585cbb658b6d0b2f34f75482cb3d Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:53 2018 -0400 Small changes to examples commit 42e8a0d2cf77af79da082fff7cd29cc8f52d99df Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:19 2018 -0400 Improve documentation commit 4377680a44ea86dad52954f90bc7d8ad7ed0b4bf Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 23:01:36 2018 -0400 Re-organize into module structure commit f20fac99f6ac57c51603a92d792fd4f665feb7f6 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 22:07:39 2018 -0400 Add platform::desktop module with EventLoopExt::run_return commit dad24d086aaaff60e557efc4f41d1ae7e3c71738 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 18:03:41 2018 -0400 Rename os to platform, add Ext trait postfixes commit 7df59c60a06008226f6455619e7242ed0156ed8d Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:59:36 2018 -0400 Rename platform to platform_impl commit 99c0f84a9fc771c9c96099232de3716ddf27ca80 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:55:27 2018 -0400 Add request_redraw commit a0fef1a5fad9b5d5da59fff191c7d9c398ea9e01 Author: Osspial <osspial@gmail.com> Date: Mon Aug 20 01:47:11 2018 -0400 Fully invert windows control flow so win32 calls into winit's callback commit 2c607ff87f8fbcad8aa9dc3783b3298c014dd177 Author: Osspial <osspial@gmail.com> Date: Sun Aug 19 13:44:22 2018 -0400 Add ability to send custom user events commit a0b2bb36953f018ff782cef8fc86c6db9343095d Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:49:46 2018 -0400 Add StartCause::Init support, timer example commit 02f922f003f56215b92b8feeb9148ad2dd181fc2 Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:31:04 2018 -0400 Implement new ControlFlow and associated events commit 8b8a7675ec67e15a0f8f69db0bdeb79bee0ac20d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:48:26 2018 -0400 Replace windows Mutex with parking_lot Mutex commit 9feada206f6b9fb1e9da118be6b77dfc217ace8d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:39:53 2018 -0400 Update run_forever to hijack thread commit 2e83bac99cc264cd2723cb182feea84a0a15e08d Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 23:43:58 2018 -0400 Remove second thread from win32 backend commit 64b8a9c6a50362d10c074077a1e37b057f3e3c81 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:13:07 2018 -0400 Rename WindowEvent::Refresh to WindowEvent::Redraw commit 529c08555fd0b709a23d486211d28fbd0980fc94 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:04:38 2018 -0400 Rename EventsLoop and associated types to EventLoop Signed-off-by: Hal Gentz <zegentzy@protonmail.com> Co-authored-by: Hal Gentz <zegentzy@protonmail.com> commit cfb929ba0a9e787f8bb1a6dae4e05e4c7776bc97 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 07:40:56 2019 -0600 Fix example Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 68d3317ff58381d55f5f9bd3db0860d66544fe12 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:47:46 2019 -0600 Fixes Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 02d1aae4db27df054b703aa935ca118f31e17123 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:39:19 2019 -0600 Backport https://github.com/rust-windowing/winit/commit/9a23ec3c373d096e5e9dd0cc0a23f7baf0b64135#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit dd9de5a6d444a9ab17afe470f4cf2a57e3ed76ae Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:09:14 2019 -0600 Backports https://github.com/rust-windowing/winit/commit/45a428141329377a1669698e4ca6561834c0dbcc#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 533e2adc1d1e417742475786635848b1620e476c Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:05:57 2019 -0600 Francesca's macos changes Also backports https://github.com/rust-windowing/winit/commit/bfbcab3a010667e74fa3cc07ac85bd4c85491e65#diff-1d95fe39cdbaa708c975380a16c314cb commit 73b52221080bd3a881ae3a58c2dbb19bc8d954c6 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 20:58:26 2019 -0600 Squashed commit of the following: commit 5f4aa9f01a719eef98c6d894801c20ee8f96d30f Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 17:14:14 2018 -0500 Protect against reentrancy (messily) commit b75073a5b2a8d65ab8806a00ffee390752255c8c Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 15:15:27 2018 -0500 Send resize events immediately commit 8e9fc01bd6b404f59488b130413f48e4e5f89b0d Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 16:07:43 2018 -0500 Don't use struct for window delegate commit c6853b0c4a8fe357f463604bb879dc1be424860e Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 21:17:48 2018 -0500 Split up util commit 262c46b148413130fa239099f1151c1f1bd5c13c Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:55:00 2018 -0500 Use dispatch crate commit 63152c2f475794d1a36a5b3687c777664d7d5613 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:29:13 2018 -0500 RedrawRequested commit 27e475c7c78b059fd9b5e8350cd26756eecdfc94 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 19:24:44 2018 -0500 User events commit 157418d7dedace9c571e977d98ea92464c3188b2 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 22:38:05 2018 -0500 Moved out cursor loading commit b4925641c973979a38743202b4269efe09ac43b4 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 21:32:12 2018 -0500 Fixed a bunch of threading issues commit 4aef63dfb78dfaf38c83cb0e88d4ea9d8d0578a6 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 17 13:54:59 2018 -0500 Wait works commit 72ed426c695df5dc410902263bd74188059b8ddd Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:49:10 2018 -0500 Fixed drag and dropg commit 658209f4a20acd536218f41a01fb8cbbebc705e0 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:42:42 2018 -0500 Made mutexes finer for less deadlock risk commit 8e6b9866084690da900c4d058e412cab8ebb30c4 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 16:45:06 2018 -0500 Dump (encapsulate) everything into AppState commit d2dc83df15939d89301e2cff0ffa2d98c48b406f Author: Francesca Plebani <franplebani@gmail.com> Date: Thu Dec 13 17:36:47 2018 -0500 All window events work! commit 7c7fcc98872b3c35bd7767b5c6235a74bc105e06 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 12 17:11:09 2018 -0500 Very rough usage of CFRunLoop commit 3c7a52ff4df683b5b7e1751e4051ec445a818774 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 11 15:45:23 2018 -0500 Fixed deadlocks commit b74c7fe1bcd173e9b0c0e004956c257e805bc2a2 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:59:46 2018 -0500 Fix keyDown deadlock commit 3798f9c1a4bef2a3d1552f846b26efc31b1bbb6c Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:44:40 2018 -0500 It builds! commit 8c8620214357714c5cd0b3beefda6704512e3f64 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 7 21:09:55 2018 -0500 Horribly broken so far commit 8269ed2a9270e5ec5b14f80fd21d1e0e6f51be29 Author: Osspial <osspial@gmail.com> Date: Mon Nov 19 23:51:20 2018 -0500 Fix crash with runner refcell not getting dropped commit 54ce6a21a0722e408ae49c74f5008005fc1e4cbf Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 19:12:45 2018 -0500 Fix buffered events not getting dispatched commit 2c18b804df66f49f93cfe722a679d6c5e01d8cb1 Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 18:51:24 2018 -0500 Fix thread executor not executing closure when called from non-loop thread commit 5a3a5e2293cec3e566c4aac344ae7eaa343608b5 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 22:43:59 2018 -0500 Fix some deadlocks that could occur when changing window state commit 2a3cefd8c5df1c06127b05651cbdf5e3d9e3a6d3 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:45:17 2018 -0500 Document and implement Debug for EventLoopWindowTarget commit fa46825a289ca0587dc97f9c00dea5516fb4925a Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:40:48 2018 -0500 Replace &EventLoop in callback with &EventLoopWindowTarget commit 9f36a7a68e1dc379cf9091213dae2c3586d3e473 Author: Osspial <osspial@gmail.com> Date: Wed Nov 14 21:28:38 2018 -0500 Fix freeze when setting decorations commit d9c3daca9b459e02ef614568fe803a723965fe8d Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 20:41:15 2018 -0500 Fix 1.24.1 build commit 5289d22372046bac403a279c3641737c0cfc46d2 Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 00:00:27 2018 -0500 Remove serde implementations from ControlFlow commit 92ac3d6ac7915923c22c380cc3a74c5f3830708e Author: Osspial <osspial@gmail.com> Date: Thu Nov 8 23:46:41 2018 -0500 Remove crossbeam dependency and make drop events work again commit 8299eb2f03773a34079c61fc8adb51405aafc467 Author: Osspial <osspial@gmail.com> Date: Thu Sep 13 22:39:40 2018 -0400 Fix crash when running in release mode commit bb6ab1bb6e9595e90f1915fdde7e23904f2ba594 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:28:16 2018 -0400 Fix unreachable panic after setting ControlFlow to Poll during some RedrawRequested events. commit 5068ff4ee152bfe93c9190235f02d001202feb88 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:14:28 2018 -0400 Improve clarity/fix typos in docs commit 8ed575ff4a4f0961bb2e784bda1ae109c6bd37b7 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 00:19:53 2018 -0400 Update send test and errors that broke some examples/APIs commit bf7bfa82ebb5d6ae110ce0492c124ef462945f85 Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 22:36:05 2018 -0400 Fix resize lag when waiting in some situations commit 70722cc4c322e3e599b3a03bce5058a5d433970b Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 19:58:52 2018 -1100 When SendEvent is called during event closure, buffer events commit 53370924b25da15ddd172173150b228065324864 Author: Osspial <osspial@gmail.com> Date: Sun Aug 26 21:55:51 2018 -0400 Improve WaitUntil timer precision commit a654400e730400c2e3584be2f47153043b5b7efe Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 21:06:19 2018 -0400 Add CHANGELOG entry commit deb7d379b7c04e61d6d50ff655eccac0ad692e44 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:19:56 2018 -0400 Rename MonitorId to MonitorHandle commit 8d8d9b7cd1386c99c40023d86e17d10c3fd6652f Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:16:52 2018 -0400 Change instances of "events_loop" to "event_loop" commit 0f344087630ae252c9c8f453864e684a1a5405b1 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:13:53 2018 -0400 Improve docs for run and run_return commit fba41f7a7ed8585cbb658b6d0b2f34f75482cb3d Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:53 2018 -0400 Small changes to examples commit 42e8a0d2cf77af79da082fff7cd29cc8f52d99df Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:19 2018 -0400 Improve documentation commit 4377680a44ea86dad52954f90bc7d8ad7ed0b4bf Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 23:01:36 2018 -0400 Re-organize into module structure commit f20fac99f6ac57c51603a92d792fd4f665feb7f6 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 22:07:39 2018 -0400 Add platform::desktop module with EventLoopExt::run_return commit dad24d086aaaff60e557efc4f41d1ae7e3c71738 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 18:03:41 2018 -0400 Rename os to platform, add Ext trait postfixes commit 7df59c60a06008226f6455619e7242ed0156ed8d Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:59:36 2018 -0400 Rename platform to platform_impl commit 99c0f84a9fc771c9c96099232de3716ddf27ca80 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:55:27 2018 -0400 Add request_redraw commit a0fef1a5fad9b5d5da59fff191c7d9c398ea9e01 Author: Osspial <osspial@gmail.com> Date: Mon Aug 20 01:47:11 2018 -0400 Fully invert windows control flow so win32 calls into winit's callback commit 2c607ff87f8fbcad8aa9dc3783b3298c014dd177 Author: Osspial <osspial@gmail.com> Date: Sun Aug 19 13:44:22 2018 -0400 Add ability to send custom user events commit a0b2bb36953f018ff782cef8fc86c6db9343095d Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:49:46 2018 -0400 Add StartCause::Init support, timer example commit 02f922f003f56215b92b8feeb9148ad2dd181fc2 Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:31:04 2018 -0400 Implement new ControlFlow and associated events commit 8b8a7675ec67e15a0f8f69db0bdeb79bee0ac20d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:48:26 2018 -0400 Replace windows Mutex with parking_lot Mutex commit 9feada206f6b9fb1e9da118be6b77dfc217ace8d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:39:53 2018 -0400 Update run_forever to hijack thread commit 2e83bac99cc264cd2723cb182feea84a0a15e08d Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 23:43:58 2018 -0400 Remove second thread from win32 backend commit 64b8a9c6a50362d10c074077a1e37b057f3e3c81 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:13:07 2018 -0400 Rename WindowEvent::Refresh to WindowEvent::Redraw commit 529c08555fd0b709a23d486211d28fbd0980fc94 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:04:38 2018 -0400 Rename EventsLoop and associated types to EventLoop Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit ab1dfaaaa53a3acd206bf494ac90e3fe130dc609 Author: Hal Gentz <zegentzy@protonmail.com> Date: Tue Apr 23 21:52:17 2019 -0600 Minor Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 7933209d603e0794adb806d9cf53507f1c2f1d3c Author: Victor Berger <victor.berger@m4x.org> Date: Thu Apr 18 09:10:41 2019 +0200 wayland/x11: Make ControlFlow::Exit sticky commit 8355a7513e299ffba21062c8518bcf4bdb735ba9 Author: Victor Berger <victor.berger@m4x.org> Date: Tue Apr 16 12:21:33 2019 +0200 x11: Implement run_return using calloop commit f64edb60cc85fcd98a1cec955ba9980f617fdd73 Author: Victor Berger <victor.berger@m4x.org> Date: Tue Apr 16 10:42:04 2019 +0200 x11: port to evl2 with stubs commit be372898ddc60e47887c9a152c10ff498445f8cf Author: Victor Berger <victor.berger@m4x.org> Date: Mon Apr 15 17:35:59 2019 +0200 Fix compilation on Linux. Signed-off-by: Hal Gentz <zegentzy@protonmail.com> Co-authored-by: Francesca Plebani <franplebani@gmail.com>
2019-05-01 17:03:30 -06:00
impl DeclaredClass for ApplicationDelegate {
type Ivars = State;
}
Squashed commit of the following: (#853) commit fa95f204d3c10ceca70e794870657a0f33349761 Author: Hal Gentz <zegentzy@protonmail.com> Date: Sun Apr 28 00:14:01 2019 -0600 xrender Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit b62cee51c7b22f6f150bfe04f9b28f024e641323 Merge: 3f021ea7 a6551f46 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 18:13:43 2019 -0600 Merge branch 'macos-gentz' of github.com:ZeGentzy/winit into macos-gentz commit 3f021ea7f7ac6bc2a697a5b6e4e6424e838a2139 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 18:04:02 2019 -0600 Get rid of warnings. Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit a6551f4607ea0bc26df8716dee8115371ef367db Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 07:40:56 2019 -0600 Fix example Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit cbfda6c57e9740b49d2b496bda43197f611cb48c Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:47:46 2019 -0600 Fixes Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 86bc86f3d3add4a6125aa9b2eca79061c0dfcd91 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:39:19 2019 -0600 Backport https://github.com/rust-windowing/winit/commit/9a23ec3c373d096e5e9dd0cc0a23f7baf0b64135#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 742a688efe2f0eeacc2ffbf49b1157c4aaffccbd Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:09:14 2019 -0600 Backports https://github.com/rust-windowing/winit/commit/45a428141329377a1669698e4ca6561834c0dbcc#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 6c81f2a517d4e2d5ba2ff3eddca030bce972cb2a Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:05:57 2019 -0600 Francesca's macos changes Also backports https://github.com/rust-windowing/winit/commit/bfbcab3a010667e74fa3cc07ac85bd4c85491e65#diff-1d95fe39cdbaa708c975380a16c314cb commit 7c2e1300c26a0634ad505ce72b90eb6dc2fdcac7 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Apr 24 20:58:26 2019 -0600 Squashed commit of the following: commit 5f4aa9f01a719eef98c6d894801c20ee8f96d30f Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 17:14:14 2018 -0500 Protect against reentrancy (messily) commit b75073a5b2a8d65ab8806a00ffee390752255c8c Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 15:15:27 2018 -0500 Send resize events immediately commit 8e9fc01bd6b404f59488b130413f48e4e5f89b0d Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 16:07:43 2018 -0500 Don't use struct for window delegate commit c6853b0c4a8fe357f463604bb879dc1be424860e Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 21:17:48 2018 -0500 Split up util commit 262c46b148413130fa239099f1151c1f1bd5c13c Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:55:00 2018 -0500 Use dispatch crate commit 63152c2f475794d1a36a5b3687c777664d7d5613 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:29:13 2018 -0500 RedrawRequested commit 27e475c7c78b059fd9b5e8350cd26756eecdfc94 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 19:24:44 2018 -0500 User events commit 157418d7dedace9c571e977d98ea92464c3188b2 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 22:38:05 2018 -0500 Moved out cursor loading commit b4925641c973979a38743202b4269efe09ac43b4 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 21:32:12 2018 -0500 Fixed a bunch of threading issues commit 4aef63dfb78dfaf38c83cb0e88d4ea9d8d0578a6 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 17 13:54:59 2018 -0500 Wait works commit 72ed426c695df5dc410902263bd74188059b8ddd Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:49:10 2018 -0500 Fixed drag and dropg commit 658209f4a20acd536218f41a01fb8cbbebc705e0 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:42:42 2018 -0500 Made mutexes finer for less deadlock risk commit 8e6b9866084690da900c4d058e412cab8ebb30c4 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 16:45:06 2018 -0500 Dump (encapsulate) everything into AppState commit d2dc83df15939d89301e2cff0ffa2d98c48b406f Author: Francesca Plebani <franplebani@gmail.com> Date: Thu Dec 13 17:36:47 2018 -0500 All window events work! commit 7c7fcc98872b3c35bd7767b5c6235a74bc105e06 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 12 17:11:09 2018 -0500 Very rough usage of CFRunLoop commit 3c7a52ff4df683b5b7e1751e4051ec445a818774 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 11 15:45:23 2018 -0500 Fixed deadlocks commit b74c7fe1bcd173e9b0c0e004956c257e805bc2a2 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:59:46 2018 -0500 Fix keyDown deadlock commit 3798f9c1a4bef2a3d1552f846b26efc31b1bbb6c Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:44:40 2018 -0500 It builds! commit 8c8620214357714c5cd0b3beefda6704512e3f64 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 7 21:09:55 2018 -0500 Horribly broken so far commit 8269ed2a9270e5ec5b14f80fd21d1e0e6f51be29 Author: Osspial <osspial@gmail.com> Date: Mon Nov 19 23:51:20 2018 -0500 Fix crash with runner refcell not getting dropped commit 54ce6a21a0722e408ae49c74f5008005fc1e4cbf Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 19:12:45 2018 -0500 Fix buffered events not getting dispatched commit 2c18b804df66f49f93cfe722a679d6c5e01d8cb1 Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 18:51:24 2018 -0500 Fix thread executor not executing closure when called from non-loop thread commit 5a3a5e2293cec3e566c4aac344ae7eaa343608b5 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 22:43:59 2018 -0500 Fix some deadlocks that could occur when changing window state commit 2a3cefd8c5df1c06127b05651cbdf5e3d9e3a6d3 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:45:17 2018 -0500 Document and implement Debug for EventLoopWindowTarget commit fa46825a289ca0587dc97f9c00dea5516fb4925a Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:40:48 2018 -0500 Replace &EventLoop in callback with &EventLoopWindowTarget commit 9f36a7a68e1dc379cf9091213dae2c3586d3e473 Author: Osspial <osspial@gmail.com> Date: Wed Nov 14 21:28:38 2018 -0500 Fix freeze when setting decorations commit d9c3daca9b459e02ef614568fe803a723965fe8d Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 20:41:15 2018 -0500 Fix 1.24.1 build commit 5289d22372046bac403a279c3641737c0cfc46d2 Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 00:00:27 2018 -0500 Remove serde implementations from ControlFlow commit 92ac3d6ac7915923c22c380cc3a74c5f3830708e Author: Osspial <osspial@gmail.com> Date: Thu Nov 8 23:46:41 2018 -0500 Remove crossbeam dependency and make drop events work again commit 8299eb2f03773a34079c61fc8adb51405aafc467 Author: Osspial <osspial@gmail.com> Date: Thu Sep 13 22:39:40 2018 -0400 Fix crash when running in release mode commit bb6ab1bb6e9595e90f1915fdde7e23904f2ba594 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:28:16 2018 -0400 Fix unreachable panic after setting ControlFlow to Poll during some RedrawRequested events. commit 5068ff4ee152bfe93c9190235f02d001202feb88 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:14:28 2018 -0400 Improve clarity/fix typos in docs commit 8ed575ff4a4f0961bb2e784bda1ae109c6bd37b7 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 00:19:53 2018 -0400 Update send test and errors that broke some examples/APIs commit bf7bfa82ebb5d6ae110ce0492c124ef462945f85 Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 22:36:05 2018 -0400 Fix resize lag when waiting in some situations commit 70722cc4c322e3e599b3a03bce5058a5d433970b Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 19:58:52 2018 -1100 When SendEvent is called during event closure, buffer events commit 53370924b25da15ddd172173150b228065324864 Author: Osspial <osspial@gmail.com> Date: Sun Aug 26 21:55:51 2018 -0400 Improve WaitUntil timer precision commit a654400e730400c2e3584be2f47153043b5b7efe Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 21:06:19 2018 -0400 Add CHANGELOG entry commit deb7d379b7c04e61d6d50ff655eccac0ad692e44 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:19:56 2018 -0400 Rename MonitorId to MonitorHandle commit 8d8d9b7cd1386c99c40023d86e17d10c3fd6652f Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:16:52 2018 -0400 Change instances of "events_loop" to "event_loop" commit 0f344087630ae252c9c8f453864e684a1a5405b1 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:13:53 2018 -0400 Improve docs for run and run_return commit fba41f7a7ed8585cbb658b6d0b2f34f75482cb3d Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:53 2018 -0400 Small changes to examples commit 42e8a0d2cf77af79da082fff7cd29cc8f52d99df Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:19 2018 -0400 Improve documentation commit 4377680a44ea86dad52954f90bc7d8ad7ed0b4bf Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 23:01:36 2018 -0400 Re-organize into module structure commit f20fac99f6ac57c51603a92d792fd4f665feb7f6 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 22:07:39 2018 -0400 Add platform::desktop module with EventLoopExt::run_return commit dad24d086aaaff60e557efc4f41d1ae7e3c71738 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 18:03:41 2018 -0400 Rename os to platform, add Ext trait postfixes commit 7df59c60a06008226f6455619e7242ed0156ed8d Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:59:36 2018 -0400 Rename platform to platform_impl commit 99c0f84a9fc771c9c96099232de3716ddf27ca80 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:55:27 2018 -0400 Add request_redraw commit a0fef1a5fad9b5d5da59fff191c7d9c398ea9e01 Author: Osspial <osspial@gmail.com> Date: Mon Aug 20 01:47:11 2018 -0400 Fully invert windows control flow so win32 calls into winit's callback commit 2c607ff87f8fbcad8aa9dc3783b3298c014dd177 Author: Osspial <osspial@gmail.com> Date: Sun Aug 19 13:44:22 2018 -0400 Add ability to send custom user events commit a0b2bb36953f018ff782cef8fc86c6db9343095d Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:49:46 2018 -0400 Add StartCause::Init support, timer example commit 02f922f003f56215b92b8feeb9148ad2dd181fc2 Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:31:04 2018 -0400 Implement new ControlFlow and associated events commit 8b8a7675ec67e15a0f8f69db0bdeb79bee0ac20d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:48:26 2018 -0400 Replace windows Mutex with parking_lot Mutex commit 9feada206f6b9fb1e9da118be6b77dfc217ace8d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:39:53 2018 -0400 Update run_forever to hijack thread commit 2e83bac99cc264cd2723cb182feea84a0a15e08d Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 23:43:58 2018 -0400 Remove second thread from win32 backend commit 64b8a9c6a50362d10c074077a1e37b057f3e3c81 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:13:07 2018 -0400 Rename WindowEvent::Refresh to WindowEvent::Redraw commit 529c08555fd0b709a23d486211d28fbd0980fc94 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:04:38 2018 -0400 Rename EventsLoop and associated types to EventLoop Signed-off-by: Hal Gentz <zegentzy@protonmail.com> Co-authored-by: Hal Gentz <zegentzy@protonmail.com> commit cfb929ba0a9e787f8bb1a6dae4e05e4c7776bc97 Author: Hal Gentz <zegentzy@protonmail.com> Date: Thu Apr 25 07:40:56 2019 -0600 Fix example Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 68d3317ff58381d55f5f9bd3db0860d66544fe12 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:47:46 2019 -0600 Fixes Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 02d1aae4db27df054b703aa935ca118f31e17123 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:39:19 2019 -0600 Backport https://github.com/rust-windowing/winit/commit/9a23ec3c373d096e5e9dd0cc0a23f7baf0b64135#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit dd9de5a6d444a9ab17afe470f4cf2a57e3ed76ae Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:09:14 2019 -0600 Backports https://github.com/rust-windowing/winit/commit/45a428141329377a1669698e4ca6561834c0dbcc#diff-1d95fe39cdbaa708c975380a16c314cb Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 533e2adc1d1e417742475786635848b1620e476c Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 23:05:57 2019 -0600 Francesca's macos changes Also backports https://github.com/rust-windowing/winit/commit/bfbcab3a010667e74fa3cc07ac85bd4c85491e65#diff-1d95fe39cdbaa708c975380a16c314cb commit 73b52221080bd3a881ae3a58c2dbb19bc8d954c6 Author: Hal Gentz <zegentzy@protonmail.com> Date: Wed Apr 24 20:58:26 2019 -0600 Squashed commit of the following: commit 5f4aa9f01a719eef98c6d894801c20ee8f96d30f Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 17:14:14 2018 -0500 Protect against reentrancy (messily) commit b75073a5b2a8d65ab8806a00ffee390752255c8c Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 15:15:27 2018 -0500 Send resize events immediately commit 8e9fc01bd6b404f59488b130413f48e4e5f89b0d Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 21 16:07:43 2018 -0500 Don't use struct for window delegate commit c6853b0c4a8fe357f463604bb879dc1be424860e Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 21:17:48 2018 -0500 Split up util commit 262c46b148413130fa239099f1151c1f1bd5c13c Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:55:00 2018 -0500 Use dispatch crate commit 63152c2f475794d1a36a5b3687c777664d7d5613 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 20:29:13 2018 -0500 RedrawRequested commit 27e475c7c78b059fd9b5e8350cd26756eecdfc94 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 19 19:24:44 2018 -0500 User events commit 157418d7dedace9c571e977d98ea92464c3188b2 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 22:38:05 2018 -0500 Moved out cursor loading commit b4925641c973979a38743202b4269efe09ac43b4 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 18 21:32:12 2018 -0500 Fixed a bunch of threading issues commit 4aef63dfb78dfaf38c83cb0e88d4ea9d8d0578a6 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 17 13:54:59 2018 -0500 Wait works commit 72ed426c695df5dc410902263bd74188059b8ddd Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:49:10 2018 -0500 Fixed drag and dropg commit 658209f4a20acd536218f41a01fb8cbbebc705e0 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 20:42:42 2018 -0500 Made mutexes finer for less deadlock risk commit 8e6b9866084690da900c4d058e412cab8ebb30c4 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 14 16:45:06 2018 -0500 Dump (encapsulate) everything into AppState commit d2dc83df15939d89301e2cff0ffa2d98c48b406f Author: Francesca Plebani <franplebani@gmail.com> Date: Thu Dec 13 17:36:47 2018 -0500 All window events work! commit 7c7fcc98872b3c35bd7767b5c6235a74bc105e06 Author: Francesca Plebani <franplebani@gmail.com> Date: Wed Dec 12 17:11:09 2018 -0500 Very rough usage of CFRunLoop commit 3c7a52ff4df683b5b7e1751e4051ec445a818774 Author: Francesca Plebani <franplebani@gmail.com> Date: Tue Dec 11 15:45:23 2018 -0500 Fixed deadlocks commit b74c7fe1bcd173e9b0c0e004956c257e805bc2a2 Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:59:46 2018 -0500 Fix keyDown deadlock commit 3798f9c1a4bef2a3d1552f846b26efc31b1bbb6c Author: Francesca Plebani <franplebani@gmail.com> Date: Mon Dec 10 18:44:40 2018 -0500 It builds! commit 8c8620214357714c5cd0b3beefda6704512e3f64 Author: Francesca Plebani <franplebani@gmail.com> Date: Fri Dec 7 21:09:55 2018 -0500 Horribly broken so far commit 8269ed2a9270e5ec5b14f80fd21d1e0e6f51be29 Author: Osspial <osspial@gmail.com> Date: Mon Nov 19 23:51:20 2018 -0500 Fix crash with runner refcell not getting dropped commit 54ce6a21a0722e408ae49c74f5008005fc1e4cbf Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 19:12:45 2018 -0500 Fix buffered events not getting dispatched commit 2c18b804df66f49f93cfe722a679d6c5e01d8cb1 Author: Osspial <osspial@gmail.com> Date: Sun Nov 18 18:51:24 2018 -0500 Fix thread executor not executing closure when called from non-loop thread commit 5a3a5e2293cec3e566c4aac344ae7eaa343608b5 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 22:43:59 2018 -0500 Fix some deadlocks that could occur when changing window state commit 2a3cefd8c5df1c06127b05651cbdf5e3d9e3a6d3 Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:45:17 2018 -0500 Document and implement Debug for EventLoopWindowTarget commit fa46825a289ca0587dc97f9c00dea5516fb4925a Author: Osspial <osspial@gmail.com> Date: Thu Nov 15 16:40:48 2018 -0500 Replace &EventLoop in callback with &EventLoopWindowTarget commit 9f36a7a68e1dc379cf9091213dae2c3586d3e473 Author: Osspial <osspial@gmail.com> Date: Wed Nov 14 21:28:38 2018 -0500 Fix freeze when setting decorations commit d9c3daca9b459e02ef614568fe803a723965fe8d Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 20:41:15 2018 -0500 Fix 1.24.1 build commit 5289d22372046bac403a279c3641737c0cfc46d2 Author: Osspial <osspial@gmail.com> Date: Fri Nov 9 00:00:27 2018 -0500 Remove serde implementations from ControlFlow commit 92ac3d6ac7915923c22c380cc3a74c5f3830708e Author: Osspial <osspial@gmail.com> Date: Thu Nov 8 23:46:41 2018 -0500 Remove crossbeam dependency and make drop events work again commit 8299eb2f03773a34079c61fc8adb51405aafc467 Author: Osspial <osspial@gmail.com> Date: Thu Sep 13 22:39:40 2018 -0400 Fix crash when running in release mode commit bb6ab1bb6e9595e90f1915fdde7e23904f2ba594 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:28:16 2018 -0400 Fix unreachable panic after setting ControlFlow to Poll during some RedrawRequested events. commit 5068ff4ee152bfe93c9190235f02d001202feb88 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 14:14:28 2018 -0400 Improve clarity/fix typos in docs commit 8ed575ff4a4f0961bb2e784bda1ae109c6bd37b7 Author: Osspial <osspial@gmail.com> Date: Sun Sep 9 00:19:53 2018 -0400 Update send test and errors that broke some examples/APIs commit bf7bfa82ebb5d6ae110ce0492c124ef462945f85 Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 22:36:05 2018 -0400 Fix resize lag when waiting in some situations commit 70722cc4c322e3e599b3a03bce5058a5d433970b Author: Osspial <osspial@gmail.com> Date: Wed Sep 5 19:58:52 2018 -1100 When SendEvent is called during event closure, buffer events commit 53370924b25da15ddd172173150b228065324864 Author: Osspial <osspial@gmail.com> Date: Sun Aug 26 21:55:51 2018 -0400 Improve WaitUntil timer precision commit a654400e730400c2e3584be2f47153043b5b7efe Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 21:06:19 2018 -0400 Add CHANGELOG entry commit deb7d379b7c04e61d6d50ff655eccac0ad692e44 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:19:56 2018 -0400 Rename MonitorId to MonitorHandle commit 8d8d9b7cd1386c99c40023d86e17d10c3fd6652f Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:16:52 2018 -0400 Change instances of "events_loop" to "event_loop" commit 0f344087630ae252c9c8f453864e684a1a5405b1 Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 20:13:53 2018 -0400 Improve docs for run and run_return commit fba41f7a7ed8585cbb658b6d0b2f34f75482cb3d Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:53 2018 -0400 Small changes to examples commit 42e8a0d2cf77af79da082fff7cd29cc8f52d99df Author: Osspial <osspial@gmail.com> Date: Thu Aug 23 19:09:19 2018 -0400 Improve documentation commit 4377680a44ea86dad52954f90bc7d8ad7ed0b4bf Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 23:01:36 2018 -0400 Re-organize into module structure commit f20fac99f6ac57c51603a92d792fd4f665feb7f6 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 22:07:39 2018 -0400 Add platform::desktop module with EventLoopExt::run_return commit dad24d086aaaff60e557efc4f41d1ae7e3c71738 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 18:03:41 2018 -0400 Rename os to platform, add Ext trait postfixes commit 7df59c60a06008226f6455619e7242ed0156ed8d Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:59:36 2018 -0400 Rename platform to platform_impl commit 99c0f84a9fc771c9c96099232de3716ddf27ca80 Author: Osspial <osspial@gmail.com> Date: Wed Aug 22 17:55:27 2018 -0400 Add request_redraw commit a0fef1a5fad9b5d5da59fff191c7d9c398ea9e01 Author: Osspial <osspial@gmail.com> Date: Mon Aug 20 01:47:11 2018 -0400 Fully invert windows control flow so win32 calls into winit's callback commit 2c607ff87f8fbcad8aa9dc3783b3298c014dd177 Author: Osspial <osspial@gmail.com> Date: Sun Aug 19 13:44:22 2018 -0400 Add ability to send custom user events commit a0b2bb36953f018ff782cef8fc86c6db9343095d Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:49:46 2018 -0400 Add StartCause::Init support, timer example commit 02f922f003f56215b92b8feeb9148ad2dd181fc2 Author: Osspial <osspial@gmail.com> Date: Fri Aug 17 17:31:04 2018 -0400 Implement new ControlFlow and associated events commit 8b8a7675ec67e15a0f8f69db0bdeb79bee0ac20d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:48:26 2018 -0400 Replace windows Mutex with parking_lot Mutex commit 9feada206f6b9fb1e9da118be6b77dfc217ace8d Author: Osspial <osspial@gmail.com> Date: Fri Jul 13 01:39:53 2018 -0400 Update run_forever to hijack thread commit 2e83bac99cc264cd2723cb182feea84a0a15e08d Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 23:43:58 2018 -0400 Remove second thread from win32 backend commit 64b8a9c6a50362d10c074077a1e37b057f3e3c81 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:13:07 2018 -0400 Rename WindowEvent::Refresh to WindowEvent::Redraw commit 529c08555fd0b709a23d486211d28fbd0980fc94 Author: Osspial <osspial@gmail.com> Date: Thu Jul 12 22:04:38 2018 -0400 Rename EventsLoop and associated types to EventLoop Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit ab1dfaaaa53a3acd206bf494ac90e3fe130dc609 Author: Hal Gentz <zegentzy@protonmail.com> Date: Tue Apr 23 21:52:17 2019 -0600 Minor Signed-off-by: Hal Gentz <zegentzy@protonmail.com> commit 7933209d603e0794adb806d9cf53507f1c2f1d3c Author: Victor Berger <victor.berger@m4x.org> Date: Thu Apr 18 09:10:41 2019 +0200 wayland/x11: Make ControlFlow::Exit sticky commit 8355a7513e299ffba21062c8518bcf4bdb735ba9 Author: Victor Berger <victor.berger@m4x.org> Date: Tue Apr 16 12:21:33 2019 +0200 x11: Implement run_return using calloop commit f64edb60cc85fcd98a1cec955ba9980f617fdd73 Author: Victor Berger <victor.berger@m4x.org> Date: Tue Apr 16 10:42:04 2019 +0200 x11: port to evl2 with stubs commit be372898ddc60e47887c9a152c10ff498445f8cf Author: Victor Berger <victor.berger@m4x.org> Date: Mon Apr 15 17:35:59 2019 +0200 Fix compilation on Linux. Signed-off-by: Hal Gentz <zegentzy@protonmail.com> Co-authored-by: Francesca Plebani <franplebani@gmail.com>
2019-05-01 17:03:30 -06:00
unsafe impl NSObjectProtocol for ApplicationDelegate {}
unsafe impl NSApplicationDelegate for ApplicationDelegate {
// Note: This will, globally, only be run once, no matter how many
// `EventLoop`s the user creates.
#[method(applicationDidFinishLaunching:)]
2023-08-02 16:30:41 +02:00
fn did_finish_launching(&self, _sender: Option<&AnyObject>) {
trace_scope!("applicationDidFinishLaunching:");
self.ivars().is_launched.set(true);
let mtm = MainThreadMarker::from(self);
let app = NSApplication::sharedApplication(mtm);
// We need to delay setting the activation policy and activating the app
// until `applicationDidFinishLaunching` has been called. Otherwise the
// menu bar is initially unresponsive on macOS 10.15.
app.setActivationPolicy(self.ivars().activation_policy);
window_activation_hack(&app);
#[allow(deprecated)]
app.activateIgnoringOtherApps(self.ivars().activate_ignoring_other_apps);
if self.ivars().default_menu {
// The menubar initialization should be before the `NewEvents` event, to allow
// overriding of the default menu even if it's created
menu::initialize(&app);
}
self.ivars().waker.borrow_mut().start();
self.set_is_running(true);
self.dispatch_init_events();
// If the application is being launched via `EventLoop::pump_events()` then we'll
// want to stop the app once it is launched (and return to the external loop)
//
// In this case we still want to consider Winit's `EventLoop` to be "running",
// so we call `start_running()` above.
if self.ivars().stop_on_launch.get() {
// Note: the original idea had been to only stop the underlying `RunLoop`
// for the app but that didn't work as expected (`-[NSApplication run]`
// effectively ignored the attempt to stop the RunLoop and re-started it).
//
// So we return from `pump_events` by stopping the application.
let app = NSApplication::sharedApplication(mtm);
stop_app_immediately(&app);
}
}
#[method(applicationWillTerminate:)]
2023-08-02 16:30:41 +02:00
fn will_terminate(&self, _sender: Option<&AnyObject>) {
trace_scope!("applicationWillTerminate:");
// TODO: Notify every window that it will be destroyed, like done in iOS?
self.internal_exit();
}
}
);
impl ApplicationDelegate {
pub(super) fn new(
mtm: MainThreadMarker,
activation_policy: NSApplicationActivationPolicy,
default_menu: bool,
activate_ignoring_other_apps: bool,
) -> Id<Self> {
let this = mtm.alloc().set_ivars(State {
activation_policy,
default_menu,
activate_ignoring_other_apps,
..Default::default()
});
unsafe { msg_send_id![super(this), init] }
}
pub fn get(mtm: MainThreadMarker) -> Id<Self> {
let app = NSApplication::sharedApplication(mtm);
let delegate =
unsafe { app.delegate() }.expect("a delegate was not configured on the application");
if delegate.is_kind_of::<Self>() {
// SAFETY: Just checked that the delegate is an instance of `ApplicationDelegate`
unsafe { Id::cast(delegate) }
} else {
panic!("tried to get a delegate that was not the one Winit has registered")
}
}
/// Place the event handler in the application delegate for the duration
/// of the given closure.
pub fn set_event_handler<R>(
&self,
handler: impl FnMut(Event<HandlePendingUserEvents>, &RootActiveEventLoop),
closure: impl FnOnce() -> R,
) -> R {
self.ivars().event_handler.set(handler, closure)
}
/// If `pump_events` is called to progress the event loop then we
/// bootstrap the event loop via `-[NSApplication run]` but will use
/// `CFRunLoopRunInMode` for subsequent calls to `pump_events`.
pub fn set_stop_on_launch(&self) {
self.ivars().stop_on_launch.set(true);
}
pub fn set_stop_before_wait(&self, value: bool) {
self.ivars().stop_before_wait.set(value)
}
pub fn set_stop_after_wait(&self, value: bool) {
self.ivars().stop_after_wait.set(value)
}
pub fn set_stop_on_redraw(&self, value: bool) {
self.ivars().stop_on_redraw.set(value)
}
pub fn set_wait_timeout(&self, value: Option<Instant>) {
self.ivars().wait_timeout.set(value)
}
/// Clears the `running` state and resets the `control_flow` state when an `EventLoop` exits.
///
/// Note: that if the `NSApplication` has been launched then that state is preserved,
/// and we won't need to re-launch the app if subsequent EventLoops are run.
pub fn internal_exit(&self) {
self.handle_event(Event::LoopExiting);
self.set_is_running(false);
self.set_stop_on_redraw(false);
self.set_stop_before_wait(false);
self.set_stop_after_wait(false);
self.set_wait_timeout(None);
}
pub fn is_launched(&self) -> bool {
self.ivars().is_launched.get()
}
pub fn set_is_running(&self, value: bool) {
self.ivars().is_running.set(value)
}
pub fn is_running(&self) -> bool {
self.ivars().is_running.get()
}
pub fn exit(&self) {
self.ivars().exit.set(true)
}
pub fn clear_exit(&self) {
self.ivars().exit.set(false)
}
pub fn exiting(&self) -> bool {
self.ivars().exit.get()
}
pub fn set_control_flow(&self, value: ControlFlow) {
self.ivars().control_flow.set(value)
}
pub fn control_flow(&self) -> ControlFlow {
self.ivars().control_flow.get()
}
pub fn queue_window_event(&self, window_id: WindowId, event: WindowEvent) {
self.ivars()
.pending_events
.borrow_mut()
.push_back(QueuedEvent::WindowEvent(window_id, event));
}
pub fn queue_device_event(&self, event: DeviceEvent) {
self.ivars()
.pending_events
.borrow_mut()
.push_back(QueuedEvent::DeviceEvent(event));
}
pub fn queue_static_scale_factor_changed_event(
&self,
window: Id<WinitWindow>,
suggested_size: PhysicalSize<u32>,
scale_factor: f64,
) {
self.ivars()
.pending_events
.borrow_mut()
.push_back(QueuedEvent::ScaleFactorChanged {
window,
suggested_size,
scale_factor,
});
}
pub fn handle_redraw(&self, window_id: WindowId) {
let mtm = MainThreadMarker::from(self);
// Redraw request might come out of order from the OS.
// -> Don't go back into the event handler when our callstack originates from there
if !self.ivars().event_handler.in_use() {
self.handle_event(Event::WindowEvent {
window_id: RootWindowId(window_id),
event: WindowEvent::RedrawRequested,
});
// `pump_events` will request to stop immediately _after_ dispatching RedrawRequested events
// as a way to ensure that `pump_events` can't block an external loop indefinitely
if self.ivars().stop_on_redraw.get() {
let app = NSApplication::sharedApplication(mtm);
stop_app_immediately(&app);
}
}
}
pub fn queue_redraw(&self, window_id: WindowId) {
let mut pending_redraw = self.ivars().pending_redraw.borrow_mut();
if !pending_redraw.contains(&window_id) {
pending_redraw.push(window_id);
}
unsafe { RunLoop::get() }.wakeup();
}
fn handle_event(&self, event: Event<HandlePendingUserEvents>) {
self.ivars()
.event_handler
.handle_event(event, &ActiveEventLoop::new_root(self.retain()))
}
/// dispatch `NewEvents(Init)` + `Resumed`
pub fn dispatch_init_events(&self) {
self.handle_event(Event::NewEvents(StartCause::Init));
// NB: For consistency all platforms must emit a 'resumed' event even though macOS
// applications don't themselves have a formal suspend/resume lifecycle.
self.handle_event(Event::Resumed);
}
// Called by RunLoopObserver after finishing waiting for new events
pub fn wakeup(&self, panic_info: Weak<PanicInfo>) {
let mtm = MainThreadMarker::from(self);
let panic_info = panic_info
.upgrade()
.expect("The panic info must exist here. This failure indicates a developer error.");
// Return when in event handler due to https://github.com/rust-windowing/winit/issues/1779
if panic_info.is_panicking() || !self.ivars().event_handler.ready() || !self.is_running() {
return;
}
if self.ivars().stop_after_wait.get() {
let app = NSApplication::sharedApplication(mtm);
stop_app_immediately(&app);
}
let start = self.ivars().start_time.get().unwrap();
let cause = match self.control_flow() {
ControlFlow::Poll => StartCause::Poll,
ControlFlow::Wait => StartCause::WaitCancelled {
start,
requested_resume: None,
},
ControlFlow::WaitUntil(requested_resume) => {
if Instant::now() >= requested_resume {
StartCause::ResumeTimeReached {
start,
requested_resume,
}
} else {
StartCause::WaitCancelled {
start,
requested_resume: Some(requested_resume),
}
}
}
};
self.handle_event(Event::NewEvents(cause));
}
// Called by RunLoopObserver before waiting for new events
pub fn cleared(&self, panic_info: Weak<PanicInfo>) {
let mtm = MainThreadMarker::from(self);
let panic_info = panic_info
.upgrade()
.expect("The panic info must exist here. This failure indicates a developer error.");
// Return when in event handler due to https://github.com/rust-windowing/winit/issues/1779
// XXX: how does it make sense that `event_handler.ready()` can ever return `false` here if
// we're about to return to the `CFRunLoop` to poll for new events?
if panic_info.is_panicking() || !self.ivars().event_handler.ready() || !self.is_running() {
return;
}
self.handle_event(Event::UserEvent(HandlePendingUserEvents));
let events = mem::take(&mut *self.ivars().pending_events.borrow_mut());
for event in events {
match event {
QueuedEvent::WindowEvent(window_id, event) => {
self.handle_event(Event::WindowEvent {
window_id: RootWindowId(window_id),
event,
});
}
QueuedEvent::DeviceEvent(event) => {
self.handle_event(Event::DeviceEvent {
device_id: DEVICE_ID,
event,
});
}
QueuedEvent::ScaleFactorChanged {
window,
suggested_size,
scale_factor,
} => {
let new_inner_size = Arc::new(Mutex::new(suggested_size));
let scale_factor_changed_event = Event::WindowEvent {
window_id: RootWindowId(window.id()),
event: WindowEvent::ScaleFactorChanged {
scale_factor,
inner_size_writer: InnerSizeWriter::new(Arc::downgrade(
&new_inner_size,
)),
},
};
self.handle_event(scale_factor_changed_event);
let physical_size = *new_inner_size.lock().unwrap();
drop(new_inner_size);
let logical_size = physical_size.to_logical(scale_factor);
let size = NSSize::new(logical_size.width, logical_size.height);
window.setContentSize(size);
let resized_event = Event::WindowEvent {
window_id: RootWindowId(window.id()),
event: WindowEvent::Resized(physical_size),
};
self.handle_event(resized_event);
}
}
}
let redraw = mem::take(&mut *self.ivars().pending_redraw.borrow_mut());
for window_id in redraw {
self.handle_event(Event::WindowEvent {
window_id: RootWindowId(window_id),
event: WindowEvent::RedrawRequested,
});
}
self.handle_event(Event::AboutToWait);
if self.exiting() {
let app = NSApplication::sharedApplication(mtm);
stop_app_immediately(&app);
}
if self.ivars().stop_before_wait.get() {
let app = NSApplication::sharedApplication(mtm);
stop_app_immediately(&app);
}
self.ivars().start_time.set(Some(Instant::now()));
let wait_timeout = self.ivars().wait_timeout.get(); // configured by pump_events
let app_timeout = match self.control_flow() {
ControlFlow::Wait => None,
ControlFlow::Poll => Some(Instant::now()),
ControlFlow::WaitUntil(instant) => Some(instant),
};
self.ivars()
.waker
.borrow_mut()
.start_at(min_timeout(wait_timeout, app_timeout));
}
}
#[derive(Debug)]
pub(crate) enum QueuedEvent {
WindowEvent(WindowId, WindowEvent),
DeviceEvent(DeviceEvent),
ScaleFactorChanged {
window: Id<WinitWindow>,
suggested_size: PhysicalSize<u32>,
scale_factor: f64,
},
}
#[derive(Debug)]
pub(crate) struct HandlePendingUserEvents;
/// Returns the minimum `Option<Instant>`, taking into account that `None`
/// equates to an infinite timeout, not a zero timeout (so can't just use
/// `Option::min`)
fn min_timeout(a: Option<Instant>, b: Option<Instant>) -> Option<Instant> {
a.map_or(b, |a_timeout| {
b.map_or(Some(a_timeout), |b_timeout| Some(a_timeout.min(b_timeout)))
})
}
/// A hack to make activation of multiple windows work when creating them before
/// `applicationDidFinishLaunching:` / `Event::Event::NewEvents(StartCause::Init)`.
///
/// Alternative to this would be the user calling `window.set_visible(true)` in
/// `StartCause::Init`.
///
/// If this becomes too bothersome to maintain, it can probably be removed
/// without too much damage.
fn window_activation_hack(app: &NSApplication) {
// TODO: Proper ordering of the windows
app.windows().into_iter().for_each(|window| {
// Call `makeKeyAndOrderFront` if it was called on the window in `WinitWindow::new`
// This way we preserve the user's desired initial visibility status
// TODO: Also filter on the type/"level" of the window, and maybe other things?
if window.isVisible() {
tracing::trace!("Activating visible window");
window.makeKeyAndOrderFront(None);
} else {
tracing::trace!("Skipping activating invisible window");
}
})
}