Skip to content

Releases: rust-windowing/winit

v0.20.0

08 Feb 07:51
v0.20.0
627a127
Compare
Choose a tag to compare
  • Breaking: Overhaul how Winit handles DPI:
    • Window functions and events now return PhysicalSize instead of LogicalSize.
    • Functions that take Size or Position types can now take either Logical or Physical types.
    • hidpi_factor has been renamed to scale_factor.
    • HiDpiFactorChanged has been renamed to ScaleFactorChanged, and lets you control how the OS
      resizes the window in response to the change.
    • On X11, deprecate WINIT_HIDPI_FACTOR environment variable in favor of WINIT_X11_SCALE_FACTOR.
    • Size and Position types are now generic over their exact pixel type.

v0.20.0-alpha6

08 Feb 07:50
v0.20.0-alpha6
c0b46a0
Compare
Choose a tag to compare
v0.20.0-alpha6 Pre-release
Pre-release
  • On macOS, fix set_cursor_visible hides cursor outside of window.
  • On macOS, fix CursorEntered and CursorLeft events fired at old window size.
  • On macOS, fix error when set_fullscreen is called during fullscreen transition.
  • On all platforms except mobile and WASM, implement Window::set_minimized.
  • On X11, fix CursorEntered event being generated for non-winit windows.
  • On macOS, fix crash when starting maximized without decorations.
  • On macOS, fix application not terminating on run_return.
  • On Wayland, fix cursor icon updates on window borders when using CSD.
  • On Wayland, under mutter(GNOME Wayland), fix CSD being behind the status bar, when starting window in maximized mode.
  • On Windows, theme the title bar according to whether the system theme is "Light" or "Dark".
  • Added WindowEvent::ThemeChanged variant to handle changes to the system theme. Currently only implemented on Windows.
  • Breaking: Changes to the RedrawRequested event (#1041):
    • RedrawRequested has been moved from WindowEvent to Event.
    • EventsCleared has been renamed to MainEventsCleared.
    • RedrawRequested is now issued only after MainEventsCleared.
    • RedrawEventsCleared is issued after each set of RedrawRequested events.
  • Implement synthetic window focus key events on Windows.
  • Breaking: Change ModifiersState to a bitflags struct.
  • On Windows, implement VirtualKeyCode translation for LWin and RWin.
  • On Windows, fix closing the last opened window causing DeviceEvents to stop getting emitted.
  • On Windows, fix Window::set_visible not setting internal flags correctly. This resulted in some weird behavior.
  • Add DeviceEvent::ModifiersChanged.
    • Deprecate modifiers fields in other events in favor of ModifiersChanged.
  • On X11, WINIT_HIDPI_FACTOR now dominates Xft.dpi when picking DPI factor for output.
  • On X11, add special value randr for WINIT_HIDPI_FACTOR to make winit use self computed DPI factor instead of the one from Xft.dpi.

v0.20.0-alpha5

08 Feb 07:50
v0.20.0-alpha5
Compare
Choose a tag to compare
v0.20.0-alpha5 Pre-release
Pre-release
  • On macOS, fix application termination on ControlFlow::Exit
  • On Windows, fix missing ReceivedCharacter events when Alt is held.
  • On macOS, stop emitting private corporate characters in ReceivedCharacter events.
  • On X11, fix misreporting DPI factor at startup.
  • On X11, fix events not being reported when using run_return.
  • On X11, fix key modifiers being incorrectly reported.
  • On X11, fix window creation hanging when another window is fullscreen.
  • On Windows, fix focusing unfocused windows when switching from fullscreen to windowed.
  • On X11, fix reporting incorrect DPI factor when waking from suspend.
  • Change EventLoopClosed to contain the original event.
  • Breaking: Add is_synthetic field to WindowEvent variant KeyboardInput,
    indicating that the event is generated by winit.
  • On X11, generate synthetic key events for keys held when a window gains or loses focus.
  • On X11, issue a CursorMoved event when a Touch event occurs,
    as X11 implicitly moves the cursor for such events.

v0.20.0-alpha4

08 Feb 07:49
v0.20.0-alpha4
429bbfa
Compare
Choose a tag to compare
v0.20.0-alpha4 Pre-release
Pre-release
  • Add web support via the 'stdweb' or 'web-sys' features
  • On Windows, implemented function to get HINSTANCE
  • On macOS, implement run_return.
  • On iOS, fix inverted parameter in set_prefers_home_indicator_hidden.
  • On X11, performance is improved when rapidly calling Window::set_cursor_icon.
  • On iOS, fix improper msg_send usage that was UB and/or would break if ! is stabilized.
  • On Windows, unset maximized when manually changing the window's position or size.
  • On Windows, add touch pressure information for touch events.
  • On macOS, differentiate between CursorIcon::Grab and CursorIcon::Grabbing.
  • On Wayland, fix event processing sometimes stalling when using OpenGL with vsync.
  • Officially remove the Emscripten backend.
  • On Windows, fix handling of surrogate pairs when dispatching ReceivedCharacter.
  • On macOS 10.15, fix freeze upon exiting exclusive fullscreen mode.
  • On iOS, fix panic upon closing the app.
  • On X11, allow setting mulitple XWindowTypes.
  • On iOS, fix null window on initial HiDpiFactorChanged event.
  • On Windows, fix fullscreen window shrinking upon getting restored to a normal window.
  • On macOS, fix events not being emitted during modal loops, such as when windows are being resized
    by the user.
  • On Windows, fix hovering the mouse over the active window creating an endless stream of CursorMoved events.
  • Always dispatch a RedrawRequested event after creating a new window.
  • On X11, return dummy monitor data to avoid panicking when no monitors exist.
  • On X11, prevent stealing input focus when creating a new window.
    Only steal input focus when entering fullscreen mode.
  • On Wayland, fixed DeviceEvents for relative mouse movement is not always produced
  • On Wayland, add support for set_cursor_visible and set_cursor_grab.
  • On Wayland, fixed DeviceEvents for relative mouse movement is not always produced.
  • Removed derivative crate dependency.
  • On Wayland, add support for set_cursor_icon.
  • Use impl Iterator<Item = MonitorHandle> instead of AvailableMonitorsIter consistently.
  • On macOS, fix fullscreen state being updated after entering fullscreen instead of before,
    resulting in Window::fullscreen returning the old state in Resized events instead of
    reflecting the new fullscreen state
  • On X11, fix use-after-free during window creation
  • On Windows, disable monitor change keyboard shortcut while in exclusive fullscreen.
  • On Windows, ensure that changing a borderless fullscreen window's monitor via keyboard shortcuts keeps the window fullscreen on the new monitor.
  • Prevent EventLoop::new and EventLoop::with_user_event from getting called outside the main thread.
    • This is because some platforms cannot run the event loop outside the main thread. Preventing this
      reduces the potential for cross-platform compatibility gotchyas.
  • On Windows and Linux X11/Wayland, add platform-specific functions for creating an EventLoop outside the main thread.
  • On Wayland, drop resize events identical to the current window size.
  • On Windows, fix window rectangle not getting set correctly on high-DPI systems.

v0.20.0-alpha3

08 Feb 07:49
v0.20.0-alpha3
31110be
Compare
Choose a tag to compare
v0.20.0-alpha3 Pre-release
Pre-release
  • On macOS, drop the run closure on exit.
  • On Windows, location of WindowEvent::Touch are window client coordinates instead of screen coordinates.
  • On X11, fix delayed events after window redraw.
  • On macOS, add WindowBuilderExt::with_disallow_hidpi to have the option to turn off best resolution openGL surface.
  • On Windows, screen saver won't start if the window is in fullscreen mode.
  • Change all occurrences of the new_user_event method to with_user_event.
  • On macOS, the dock and the menu bar are now hidden in fullscreen mode.
  • Window::set_fullscreen now takes Option<Fullscreen> where Fullscreen
    consists of Fullscreen::Exclusive(VideoMode) and
    Fullscreen::Borderless(MonitorHandle) variants.
    • Adds support for exclusive fullscreen mode.
  • On iOS, add support for hiding the home indicator.
  • On iOS, add support for deferring system gestures.
  • On iOS, fix a crash that occurred while acquiring a monitor's name.
  • On iOS, fix armv7-apple-ios compile target.
  • Removed the T: Clone requirement from the Clone impl of EventLoopProxy<T>.
  • On iOS, disable overscan compensation for external displays (removes black
    bars surrounding the image).
  • On Linux, the functions is_wayland, is_x11, xlib_xconnection and wayland_display have been moved to a new EventLoopWindowTargetExtUnix trait.
  • On iOS, add set_prefers_status_bar_hidden extension function instead of
    hijacking set_decorations for this purpose.
  • On macOS and iOS, corrected the auto trait impls of EventLoopProxy.
  • On iOS, add touch pressure information for touch events.
  • Implement raw_window_handle::HasRawWindowHandle for Window type on all supported platforms.
  • On macOS, fix the signature of -[NSView drawRect:].
  • On iOS, fix the behavior of ControlFlow::Poll. It wasn't polling if that was the only mode ever used by the application.
  • On iOS, fix DPI sent out by views on creation was 0.0 - now it gives a reasonable number.
  • On iOS, RedrawRequested now works for gl/metal backed views.
  • On iOS, RedrawRequested is generally ordered after EventsCleared.

v0.20.0-alpha2

08 Feb 07:49
v0.20.0-alpha2
ce5cf97
Compare
Choose a tag to compare
v0.20.0-alpha2 Pre-release
Pre-release
  • On X11, non-resizable windows now have maximize explicitly disabled.
  • On Windows, support paths longer than MAX_PATH (260 characters) in WindowEvent::DroppedFile
    and WindowEvent::HoveredFile.
  • On Mac, implement DeviceEvent::Button.
  • Change Event::Suspended(true / false) to Event::Suspended and Event::Resumed.
  • On X11, fix sanity check which checks that a monitor's reported width and height (in millimeters) are non-zero when calculating the DPI factor.
  • Revert the use of invisible surfaces in Wayland, which introduced graphical glitches with OpenGL (#835)
  • On X11, implement _NET_WM_PING to allow desktop environment to kill unresponsive programs.
  • On Windows, when a window is initially invisible, it won't take focus from the existing visible windows.
  • On Windows, fix multiple calls to request_redraw during EventsCleared sending multiple RedrawRequested events.
  • On Windows, fix edge case where RedrawRequested could be dispatched before input events in event loop iteration.
  • On Windows, fix timing issue that could cause events to be improperly dispatched after RedrawRequested but before EventsCleared.
  • On macOS, drop unused Metal dependency.
  • On Windows, fix the trail effect happening on transparent decorated windows. Borderless (or un-decorated) windows were not affected.
  • On Windows, fix with_maximized not properly setting window size to entire window.
  • On macOS, change WindowExtMacOS::request_user_attention() to take an enum instead of a bool.

v0.20.0-alpha1

08 Feb 07:48
v0.20.0-alpha1
8d6e8bb
Compare
Choose a tag to compare
v0.20.0-alpha1 Pre-release
Pre-release
  • Changes below are considered breaking.
  • Change all occurrences of EventsLoop to EventLoop.
  • Previously flat API is now exposed through event, event_loop, monitor, and window modules.
  • os module changes:
    • Renamed to platform.
    • All traits now have platform-specific suffixes.
    • Exposes new desktop module on Windows, Mac, and Linux.
  • Changes to event loop types:
    • EventLoopProxy::wakeup has been removed in favor of send_event.
    • Major: New run method drives winit event loop.
      • Returns ! to ensure API behaves identically across all supported platforms.
        • This allows emscripten implementation to work without lying about the API.
      • ControlFlow's variants have been replaced with Wait, WaitUntil(Instant), Poll, and Exit.
        • Is read after EventsCleared is processed.
        • Wait waits until new events are available.
        • WaitUntil waits until either new events are available or the provided time has been reached.
        • Poll instantly resumes the event loop.
        • Exit aborts the event loop.
      • Takes a closure that implements 'static + FnMut(Event<T>, &EventLoop<T>, &mut ControlFlow).
        • &EventLoop<T> is provided to allow new Windows to be created.
    • Major: platform::desktop module exposes EventLoopExtDesktop trait with run_return method.
      • Behaves identically to run, but returns control flow to the calling context and can take non-'static closures.
    • EventLoop's poll_events and run_forever methods have been removed in favor of run and run_return.
  • Changes to events:
    • Remove Event::Awakened in favor of Event::UserEvent(T).
      • Can be sent with EventLoopProxy::send_event.
    • Rename WindowEvent::Refresh to WindowEvent::RedrawRequested.
      • RedrawRequested can be sent by the user with the Window::request_redraw method.
    • EventLoop, EventLoopProxy, and Event are now generic over T, for use in UserEvent.
    • Major: Add NewEvents(StartCause), EventsCleared, and LoopDestroyed variants to Event.
      • NewEvents is emitted when new events are ready to be processed by event loop.
        • StartCause describes why new events are available, with ResumeTimeReached, Poll, WaitCancelled, and Init (sent once at start of loop).
      • EventsCleared is emitted when all available events have been processed.
        • Can be used to perform logic that depends on all events being processed (e.g. an iteration of a game loop).
      • LoopDestroyed is emitted when the run or run_return method is about to exit.
  • Rename MonitorId to MonitorHandle.
  • Removed serde implementations from ControlFlow.
  • Rename several functions to improve both internal consistency and compliance with Rust API guidelines.
  • Remove WindowBuilder::multitouch field, since it was only implemented on a few platforms. Multitouch is always enabled now.
  • Breaking: On macOS, change ns identifiers to use snake_case for consistency with iOS's ui identifiers.
  • Add MonitorHandle::video_modes method for retrieving supported video modes for the given monitor.
  • On Wayland, the window now exists even if nothing has been drawn.
  • On Windows, fix initial dimensions of a fullscreen window.
  • On Windows, Fix transparent borderless windows rendering wrong.

v0.19.1

07 May 23:07
cd5caf6
Compare
Choose a tag to compare
  • On Wayland, added a get_wayland_display function to EventsLoopExt.
  • On Windows, fix CursorMoved(0, 0) getting dispatched on window focus.
  • On macOS, fix command key event left and right reverse.
  • On FreeBSD, NetBSD, and OpenBSD, fix build of X11 backend.
  • On Windows, fix icon not showing up in corner of window.
  • On X11, change DPI scaling factor behavior. First, winit tries to read it from "Xft.dpi" XResource, and uses DPI calculation from xrandr dimensions as fallback behavior.

v0.18.0

07 Nov 05:43
Compare
Choose a tag to compare
  • Breaking: image crate upgraded to 0.20. This is exposed as part of the icon_loading API.
  • On Wayland, pointer events will now provide the current modifiers state.
  • On Wayland, titles will now be displayed in the window header decoration.
  • On Wayland, key repetition is now ended when keyboard loses focus.
  • On Wayland, windows will now use more stylish and modern client side decorations.
  • On Wayland, windows will use server-side decorations when available.
  • Breaking: Added support for F16-F24 keys (variants were added to the VirtualKeyCode enum).
  • Fixed graphical glitches when resizing on Wayland.
  • On Windows, fix freezes when performing certain actions after a window resize has been triggered. Reintroduces some visual artifacts when resizing.
  • Updated window manager hints under X11 to v1.5 of Extended Window Manager Hints.
  • Added WindowBuilderExt::with_gtk_theme_variant to X11-specific WindowBuilder functions.
  • Fixed UTF8 handling bug in X11 set_title function.
  • On Windows, Window::set_cursor now applies immediately instead of requiring specific events to occur first.
  • On Windows, the HoveredFile and HoveredFileCancelled events are now implemented.
  • On Windows, fix Window::set_maximized.
  • On Windows 10, fix transparency (#260).
  • On macOS, fix modifiers during key repeat.
  • Implemented the Debug trait for Window, EventsLoop, EventsLoopProxy and WindowBuilder.
  • On X11, now a Resized event will always be generated after a DPI change to ensure the window's logical size is consistent with the new DPI.
  • Added further clarifications to the DPI docs.
  • On Linux, if neither X11 nor Wayland manage to initialize, the corresponding panic now consists of a single line only.
  • Add optional serde feature with implementations of Serialize/Deserialize for DPI types and various event types.
  • Add PartialEq, Eq, and Hash implementations on public types that could have them but were missing them.
  • On X11, drag-and-drop receiving an unsupported drop type can no longer cause the WM to freeze.
  • Fix issue whereby the OpenGL context would not appear at startup on macOS Mojave (#1069).
  • Breaking: Removed From<NSApplicationActivationPolicy> impl from ActivationPolicy on macOS.
  • On macOS, the application can request the user's attention with WindowExt::request_user_attention.

v0.17.2

19 Aug 22:30
Compare
Choose a tag to compare
  • On macOS, fix <C-Tab> so applications receive the event.
  • On macOS, fix <Cmd-{key}> so applications receive the event.
  • On Wayland, key press events will now be repeated.