72 KiB
72 KiB
Changelog
All notable changes to this project will be documented in this file.
Please keep one empty line before and after all headers. (This is required for git to produce a conflict when a release is made while a PR is open and the PR's changelog entry would go into the wrong section).
And please only add new entries to the top of this list, right below the # Unreleased header.
Unreleased
0.28.7
- Fix window size sometimes being invalid when resizing on macOS 14 Sonoma.
0.28.6
- On macOS, fixed memory leak when getting monitor handle.
- On macOS, fix
Backspacebeing emitted when clearing preedit with it.
0.28.5
- On macOS, fix
key_upbeind ignored whenImeis disabled.
0.28.4
- On macOS, fix empty marked text blocking regular input.
- On macOS, fixed potential panic when getting refresh rate.
- On macOS, fix crash when calling
Window::set_ime_positionfrom another thread. - On macOS, fixed memory leak when getting monitor handle.
0.28.3
- Fix macOS memory leaks.
0.28.2
- Implement
HasRawDisplayHandleforEventLoop. - On macOS, set resize increments only for live resizes.
- On Wayland, fix rare crash on DPI change
- Web: Added support for
Window::theme. - On Wayland, fix rounding issues when doing resize.
- On macOS, fix wrong focused state on startup.
- On Windows, fix crash on setting taskbar when using Visual Studio debugger.
- On macOS, resize simple fullscreen windows on windowDidChangeScreen events.
0.28.1
- On Wayland, fix crash when dropping a window in multi-window setup.
0.28.0
- On macOS, fixed
Ime::Commitpersisting for all input after interacting withIme. - On macOS, added
WindowExtMacOS::option_as_altandWindowExtMacOS::set_option_as_alt. - On Windows, fix window size for maximized, undecorated windows.
- On Windows and macOS, add
WindowBuilder::with_active. - Add
Window::is_minimized. - On X11, fix errors handled during
register_xlib_error_hookinvocation bleeding into winit. - Add
Window::has_focus. - On Windows, fix
Window::set_minimized(false)not working for windows minimized byWin + Dhotkey. - Breaking: On Web, touch input no longer fires
WindowEvent::Cursor*,WindowEvent::MouseInput, orDeviceEvent::MouseMotionlike other platforms, but instead it firesWindowEvent::Touch. - Breaking: Removed platform specific
WindowBuilder::with_parentAPI in favor ofWindowBuilder::with_parent_window. - On Windows, retain
WS_MAXIMIZEwindow style when un-minimizing a maximized window. - On Windows, fix left mouse button release event not being sent after
Window::drag_window. - On macOS, run most actions on the main thread, which is strictly more correct, but might make multithreaded applications block slightly more.
- On macOS, fix panic when getting current monitor without any monitor attached.
- On Windows and MacOS, add API to enable/disable window buttons (close, minimize, ...etc).
- On Windows, macOS, X11 and Wayland, add
Window::set_theme. - Breaking: Remove
WindowExtWayland::wayland_set_csd_themeandWindowBuilderExtX11::with_gtk_theme_variant. - On Windows, revert window background to an empty brush to avoid white flashes when changing scaling.
- Breaking: Removed
Window::set_always_on_topand related APIs in favor ofWindow::set_window_level. - On Windows, MacOS and X11, add always on bottom APIs.
- On Windows, fix the value in
MouseButton::Other. - On macOS, add
WindowExtMacOS::is_document_editedandWindowExtMacOS::set_document_editedAPIs. - Breaking: Removed
WindowBuilderExtIOS::with_root_view_class; instead, you should use[[view layer] addSublayer: ...]to add an instance of the desired layer class (e.g.CAEAGLLayerorCAMetalLayer). Seevulkano-winorwgpufor examples of this. - On MacOS and Windows, add
Window::set_content_protected. - On MacOS, add
EventLoopBuilderExtMacOS::with_activate_ignoring_other_apps. - On Windows, fix icons specified on
WindowBuildernot taking effect for windows created after the first one. - On Windows and macOS, add
Window::titleto query the current window title. - On Windows, fix focusing menubar when pressing
Alt. - On MacOS, made
accepts_first_mouseconfigurable. - Migrated
WindowBuilderExtUnix::with_resize_incrementstoWindowBuilder. - Added
Window::resize_increments/Window::set_resize_incrementsto update resize increments at runtime for X11/macOS. - macOS/iOS: Use
objc2instead ofobjcinternally. - Breaking: Bump MSRV from
1.57to1.60. - Breaking: Split the
platform::unixmodule intoplatform::x11andplatform::wayland. The extension types are similarly renamed. - Breaking:: Removed deprecated method
platform::unix::WindowExtUnix::is_ready. - Removed
parking_lotdependency. - Breaking: On macOS, add support for two-finger touchpad magnification and rotation gestures with new events
WindowEvent::TouchpadMagnifyandWindowEvent::TouchpadRotate. Also add support for touchpad smart-magnification gesture with a new eventWindowEvent::SmartMagnify. - Breaking: On web, the
WindowBuilderExtWebSys::with_prevent_defaultsetting (enabled by default), now additionally prevents scrolling of the webpage in mobile browsers, previously it only disabled scrolling on desktop. - On Wayland,
wayland-csd-adwaitanow usesab_glyphinstead ofcrossfontto render the title for decorations. - On Wayland, a new
wayland-csd-adwaita-crossfontfeature was added to usecrossfontinstead ofab_glyphfor decorations. - On Wayland, if not otherwise specified use upstream automatic CSD theme selection.
- On X11, added
WindowExtX11::with_parentto create child windows. - Added support for
WindowBuilder::with_themeandWindow::themeto support per-window dark/light/system theme configuration on macos, windows and wayland. - On macOS, added support for
WindowEvent::ThemeChanged. - Breaking: Removed
WindowBuilderExtWindows::with_themeandWindowBuilderExtWayland::with_wayland_csd_themein favour ofWindowBuilder::with_theme. - Breaking: Removed
WindowExtWindows::themein favour ofWindow::theme. - Enabled
doc_auto_cfgwhen generating docs on docs.rs for feature labels. - Breaking: On Android, switched to using
android-activitycrate as a glue layer instead ofndk-glue. See README.md#Android for more details. (#2444) - Breaking: Removed support for
raw-window-handleversion0.4 - On Wayland,
RedrawRequestednot emitted during resize. - Add a
set_wait_timeoutfunction toControlFlowto allow waiting for aDuration. - Breaking: Remove the unstable
xlib_xconnection()function from the private interface. - Added Orbital support for Redox OS
- On X11, added
drag_resize_windowmethod. - Added
Window::set_transparentto provide a hint about transparency of the window on Wayland and macOS. - On macOS, fix the mouse buttons other than left/right/middle being reported as middle.
- On Wayland, support fractional scaling via the wp-fractional-scale protocol.
- On web, fix removal of mouse event listeners from the global object upon window distruction.
- Add WindowAttributes getter to WindowBuilder to allow introspection of default values.
- Added
Window::set_ime_purposefor setting the IME purpose, currently implemented on Wayland only.
0.27.5
- On Wayland, fix byte offset in
Ime::Preeditpointing to invalid bytes.
0.27.4
- On Windows, emit
ReceivedCharacterevents on system keybindings. - On Windows, fixed focus event emission on minimize.
- On X11, fixed IME crashing during reload.
0.27.3
- On Windows, added
WindowExtWindows::set_undecorated_shadowandWindowBuilderExtWindows::with_undecorated_shadowto draw the drop shadow behind a borderless window. - On Windows, fixed default window features (ie snap, animations, shake, etc.) when decorations are disabled.
- On Windows, fixed ALT+Space shortcut to open window menu.
- On Wayland, fixed
Ime::Preeditnot being sent on IME reset. - Fixed unbound version specified for
raw-window-handleleading to compilation failures. - Empty
Ime::Preeditevent will be sent beforeIme::Committo help clearing preedit. - On X11, fixed IME context picking by querying for supported styles beforehand.
0.27.2 (2022-8-12)
- On macOS, fixed touch phase reporting when scrolling.
- On X11, fix min, max and resize increment hints not persisting for resizable windows (e.g. on DPI change).
- On Windows, respect min/max inner sizes when creating the window.
- For backwards compatibility,
Windownow (additionally) implements the old version (0.4) of theHasRawWindowHandletrait - On Windows, added support for
EventLoopWindowTarget::set_device_event_filter. - On Wayland, fix user requested
WindowEvent::RedrawRequestedbeing delayed by a frame.
0.27.1 (2022-07-30)
- The minimum supported Rust version was lowered to
1.57.0and now explicitly tested. - On X11, fix crash on start due to inability to create an IME context without any preedit.
0.27.0 (2022-07-26)
- On Windows, fix hiding a maximized window.
- On Android,
ndk-glue'sNativeWindowlock is now held betweenEvent::ResumedandEvent::Suspended. - On Web, added
EventLoopExtWebSyswith aspawnmethod to start the event loop without throwing an exception. - Added
WindowEvent::Occluded(bool), currently implemented on macOS and X11. - On X11, fix events for caps lock key not being sent
- Build docs on
docs.rsfor iOS and Android as well. - Breaking: Removed the
WindowAttributesstruct, since all its functionality is accessible fromWindowBuilder. - Added
WindowBuilder::transparentgetter to check if the user settransparentattribute. - On macOS, Fix emitting
Event::LoopDestroyedon CMD+Q. - On macOS, fixed an issue where having multiple windows would prevent run_return from ever returning.
- On Wayland, fix bug where the cursor wouldn't hide in GNOME.
- On macOS, Windows, and Wayland, add
set_cursor_hittestto let the window ignore mouse events. - On Windows, added
WindowExtWindows::set_skip_taskbarandWindowBuilderExtWindows::with_skip_taskbar. - On Windows, added
EventLoopBuilderExtWindows::with_msg_hook. - On Windows, remove internally unique DC per window.
- On macOS, remove the need to call
set_ime_positionafter moving the window. - Added
Window::is_visible. - Added
Window::is_resizable. - Added
Window::is_decorated. - On X11, fix for repeated event loop iteration when
ControlFlowwasWait - On X11, fix scale factor calculation when the only monitor is reconnected
- On Wayland, report unaccelerated mouse deltas in
DeviceEvent::MouseMotion. - On Web, a focused event is manually generated when a click occurs to emulate behaviour of other backends.
- Breaking: Bump
ndkversion to 0.6, ndk-sys tov0.3,ndk-glueto0.6. - Remove no longer needed
WINIT_LINK_COLORSYNCenvironment variable. - Breaking: Rename the
Exitvariant ofControlFlowtoExitWithCode, which holds a value to control the exit code after running. Add anExitconstant which aliases toExitWithCode(0)instead to avoid major breakage. This shouldn't affect most existing programs. - Add
EventLoopBuilder, which allows you to create and tweak the settings of an event loop before creating it. - Deprecated
EventLoop::with_user_event; useEventLoopBuilder::with_user_eventinstead. - Breaking: Replaced
EventLoopExtMacOSwithEventLoopBuilderExtMacOS(which also has renamed methods). - Breaking: Replaced
EventLoopExtWindowswithEventLoopBuilderExtWindows(which also has renamed methods). - Breaking: Replaced
EventLoopExtUnixwithEventLoopBuilderExtUnix(which also has renamed methods). - Breaking: The platform specific extensions for Windows
winit::platform::windowshave changed. AllHANDLE-like types e.g.HWNDandHMENUwere converted from winapi types or*mut c_voidtoisize. This was done to be consistent with the type definitions in windows-sys and to not expose internal dependencies. - The internal bindings to the Windows API were changed from the unofficial winapi bindings to the official Microsoft windows-sys bindings.
- On Wayland, fix polling during consecutive
EventLoop::run_returninvocations. - On Windows, fix race issue creating fullscreen windows with
WindowBuilder::with_fullscreen - On Android,
virtual_keycodeforKeyboardInputevents is now filled in where a suitable match is found. - Added helper methods on
ControlFlowto set its value. - On Wayland, fix
TouchPhase::Endedalways reporting the location of the first touch down, unless the compositor sent a cancel or frame event. - On iOS, send
RedrawEventsClearedeven if there are no redraw events, consistent with other platforms. - Breaking: Replaced
Window::with_app_idandWindow::with_classwithWindow::with_nameonWindowBuilderExtUnix. - On Wayland, fallback CSD was replaced with proper one:
WindowBuilderExtUnix::with_wayland_csd_themeto set color theme in builder.WindowExtUnix::wayland_set_csd_themeto set color theme when creating a window.WINIT_WAYLAND_CSD_THEMEenv variable was added, it can be used to set "dark"/"light" theme in apps that don't expose theme setting.wayland-csd-adwaitafeature that enables proper CSD with title rendering using FreeType system library.wayland-csd-adwaita-notitlefeature that enables CSD but without title rendering.
- On Wayland and X11, fix window not resizing with
Window::set_inner_sizeafter callingWindow:set_resizable(false). - On Windows, fix wrong fullscreen monitors being recognized when handling WM_WINDOWPOSCHANGING messages
- Breaking: Added new
WindowEvent::Imesupported on desktop platforms. - Added
Window::set_ime_allowedsupported on desktop platforms. - Breaking: IME input on desktop platforms won't be received unless it's explicitly allowed via
Window::set_ime_allowedand newWindowEvent::Imeevents are handled. - On macOS,
WindowEvent::Resizedis now emitted inframeDidChangeinstead ofwindowDidResize. - Breaking: On X11, device events are now ignored for unfocused windows by default, use
EventLoopWindowTarget::set_device_event_filterto set the filter level. - Implemented
DefaultonEventLoop<()>. - Implemented
EqforFullscreen,Theme, andUserAttentionType. - Breaking:
Window::set_cursor_grabnow acceptsCursorGrabModeto control grabbing behavior. - On Wayland, add support for
Window::set_cursor_position. - Fix on macOS
WindowBuilder::with_disallow_hidpi, setting true or false by the user no matter the SO default value. EventLoopBuilder::buildwill now panic when theEventLoopis being created more than once.- Added
From<u64>forWindowIdandFrom<WindowId>foru64. - Added
MonitorHandle::refresh_rate_millihertzto get monitor's refresh rate. - Breaking, Replaced
VideoMode::refresh_ratewithVideoMode::refresh_rate_millihertzproviding better precision. - On Web, add
with_prevent_defaultandwith_focusabletoWindowBuilderExtWebSysto control whether events should be propagated. - On Windows, fix focus events being sent to inactive windows.
- Breaking, update
raw-window-handletov0.5and implementHasRawDisplayHandleforWindowandEventLoopWindowTarget. - On X11, add function
register_xlib_error_hookintowinit::platform::unixto subscribe for errors comming from Xlib. - On Android, upgrade
ndkandndk-gluedependencies to the recently released0.7.0. - All platforms can now be relied on to emit a
Resumedevent. Applications are recommended to lazily initialize graphics state and windows on first resume for portability. - Breaking:: Reverse horizontal scrolling sign in
MouseScrollDeltato match the direction of vertical scrolling. A positive X value now means moving the content to the right. The meaning of vertical scrolling stays the same: a positive Y value means moving the content down. - On MacOS, fix deadlock when calling
set_maximizedfrom event loop.
0.26.1 (2022-01-05)
- Fix linking to the
ColorSyncframework on macOS 10.7, and in newer Rust versions. - On Web, implement cursor grabbing through the pointer lock API.
- On X11, add mappings for numpad comma, numpad enter, numlock and pause.
- On macOS, fix Pinyin IME input by reverting a change that intended to improve IME.
- On Windows, fix a crash with transparent windows on Windows 11.
0.26.0 (2021-12-01)
- Update
raw-window-handletov0.4. This is not a breaking change, we still implementHasRawWindowHandlefromv0.3, see rust-windowing/raw-window-handle#74. Note that you might have to runcargo update -p raw-window-handleafter upgrading. - On X11, bump
mioto 0.8. - On Android, fixed
WindowExtAndroid::configinitially returning an emptyConfiguration. - On Android, fixed
Window::scale_factorandMonitorHandle::scale_factorinitially always returning 1.0. - On X11, select an appropriate visual for transparency if is requested
- On Wayland and X11, fix diagonal window resize cursor orientation.
- On macOS, drop the event callback before exiting.
- On Android, implement
Window::request_redraw - Breaking: On Web, remove the
stdwebbackend. - Added
Window::focus_windowto bring the window to the front and set input focus. - On Wayland and X11, implement
is_maximizedmethod onWindow. - On Windows, prevent ghost window from showing up in the taskbar after either several hours of use or restarting
explorer.exe. - On macOS, fix issue where
ReceivedCharacterwas not being emitted during some key repeat events. - On Wayland, load cursor icons
hand2andhand1forCursorIcon::Hand. - Breaking: On Wayland, Theme trait and its support types are dropped.
- On Wayland, bump
smithay-client-toolkitto 0.15.1. - On Wayland, implement
request_user_attentionwithxdg_activation_v1. - On X11, emit missing
WindowEvent::ScaleFactorChangedwhen the only monitor gets reconnected. - On X11, if RANDR based scale factor is higher than 20 reset it to 1
- On Wayland, add an enabled-by-default feature called
wayland-dlopenso users can opt out of usingdlopento load system libraries. - Breaking: On Android, bump
ndkandndk-glueto 0.5. - On Windows, increase wait timer resolution for more accurate timing when using
WaitUntil. - On macOS, fix native file dialogs hanging the event loop.
- On Wayland, implement a workaround for wrong configure size when using
xdg_decorationinkwin_wayland - On macOS, fix an issue that prevented the menu bar from showing in borderless fullscreen mode.
- On X11, EINTR while polling for events no longer causes a panic. Instead it will be treated as a spurious wakeup.
0.25.0 (2021-05-15)
- Breaking: On macOS, replace
WindowBuilderExtMacOS::with_activation_policywithEventLoopExtMacOS::set_activation_policy - On macOS, wait with activating the application until the application has initialized.
- On macOS, fix creating new windows when the application has a main menu.
- On Windows, fix fractional deltas for mouse wheel device events.
- On macOS, fix segmentation fault after dropping the main window.
- On Android,
InputEvent::KeyEventis partially implemented providing the key scancode. - Added
is_maximizedmethod toWindow. - On Windows, fix bug where clicking the decoration bar would make the cursor blink.
- On Windows, fix bug causing newly created windows to erroneously display the "wait" (spinning) cursor.
- On macOS, wake up the event loop immediately when a redraw is requested.
- On Windows, change the default window size (1024x768) to match the default on other desktop platforms (800x600).
- On Windows, fix bug causing mouse capture to not be released.
- On Windows, fix fullscreen not preserving minimized/maximized state.
- On Android, unimplemented events are marked as unhandled on the native event loop.
- On Windows, added
WindowBuilderExtWindows::with_menuto set a custom menu at window creation time. - On Android, bump
ndkandndk-glueto 0.3: use predefined constants for eventident. - On macOS, fix objects captured by the event loop closure not being dropped on panic.
- On Windows, fixed
WindowEvent::ThemeChangednot properly firing and fixedWindow::themereturning the wrong theme. - On Web, added support for
DeviceEvent::MouseMotionto listen for relative mouse movements. - Added
WindowBuilder::with_positionto allow setting the position of aWindowon creation. Supported on Windows, macOS and X11. - Added
Window::drag_window. Implemented on Windows, macOS, X11 and Wayland. - On X11, bump
mioto 0.7. - On Windows, added
WindowBuilderExtWindows::with_owner_windowto allow creating popup windows. - On Windows, added
WindowExtWindows::set_enableto allow creating modal popup windows. - On macOS, emit
RedrawRequestedevents immediately while the window is being resized. - Implement
Default,Hash, andEqforLogicalPosition,PhysicalPosition,LogicalSize, andPhysicalSize. - On macOS, initialize the Menu Bar with minimal defaults. (Can be prevented using
enable_default_menu_creation) - On macOS, change the default behavior for first click when the window was unfocused. Now the window becomes focused and then emits a
MouseInputevent on a "first mouse click". - Implement mint (math interoperability standard types) conversions (under feature flag
mint).
0.24.0 (2020-12-09)
- On Windows, fix applications not exiting gracefully due to thread_event_target_callback accessing corrupted memory.
- On Windows, implement
Window::set_ime_position. - Breaking: On Windows, Renamed
WindowBuilderExtWindows'sis_dark_modetotheme. - Breaking: On Windows, renamed
WindowBuilderExtWindows::is_dark_modetotheme. - On Windows, add
WindowBuilderExtWindows::with_themeto set a preferred theme. - On Windows, fix bug causing message boxes to appear delayed.
- On Android, calling
WindowEvent::Focusednow works properly instead of always returning false. - On Windows, fix Alt-Tab behaviour by removing borderless fullscreen "always on top" flag.
- On Windows, fix bug preventing windows with transparency enabled from having fully-opaque regions.
- Breaking: On Windows, include prefix byte in scancodes.
- On Wayland, fix window not being resizeable when using
WindowBuilder::with_min_inner_size. - On Unix, fix cross-compiling to wasm32 without enabling X11 or Wayland.
- On Windows, fix use-after-free crash during window destruction.
- On Web, fix
WindowEvent::ReceivedCharacternever being sent on key input. - On macOS, fix compilation when targeting aarch64.
- On X11, fix
Window::request_redrawnot waking the event loop. - On Wayland, the keypad arrow keys are now recognized.
- Breaking Rename
desktop::EventLoopExtDesktoptorun_return::EventLoopExtRunReturn. - Added
request_user_attentionmethod toWindow. - Breaking: On macOS, removed
WindowExt::request_user_attention, useWindow::request_user_attention. - Breaking: On X11, removed
WindowExt::set_urgent, useWindow::request_user_attention. - On Wayland, default font size in CSD increased from 11 to 17.
- On Windows, fix bug causing message boxes to appear delayed.
- On Android, support multi-touch.
- On Wayland, extra mouse buttons are not dropped anymore.
- Breaking:
MouseButton::Othernow usesu16.
0.23.0 (2020-10-02)
- On iOS, fixed support for the "Debug View Heirarchy" feature in Xcode.
- On all platforms,
available_monitorsandprimary_monitorare now onEventLoopWindowTargetrather thanEventLoopto list monitors event in the event loop. - On Unix, X11 and Wayland are now optional features (enabled by default)
- On X11, fix deadlock when calling
set_fullscreen_inner. - On Web, prevent the webpage from scrolling when the user is focused on a winit canvas
- On Web, calling
window.set_cursor_iconno longer breaks HiDPI scaling - On Windows, drag and drop is now optional (enabled by default) and can be disabled with
WindowBuilderExtWindows::with_drag_and_drop(false). - On Wayland, fix deadlock when calling to
set_inner_sizefrom a callback. - On macOS, add
hide__other_applicationstoEventLoopWindowTargetvia existingEventLoopWindowTargetExtMacOStrait.hide_other_applicationswill hide other applications by calling-[NSApplication hideOtherApplications: nil]. - On android added support for
run_return. - On MacOS, Fixed fullscreen and dialog support for
run_return. - On Windows, fix bug where we'd try to emit
MainEventsClearedevents during nested win32 event loops. - On Web, use mouse events if pointer events aren't supported. This affects Safari.
- On Windows,
set_ime_positionis now a no-op instead of a runtime crash. - On Android,
set_fullscreenis now a no-op instead of a runtime crash. - On iOS and Android,
set_inner_sizeis now a no-op instead of a runtime crash. - On Android, fix
ControlFlow::Pollnot polling the Android event queue. - On macOS, add
NSWindow.hasShadowsupport. - On Web, fix vertical mouse wheel scrolling being inverted.
- On Web, implement mouse capturing for click-dragging out of the canvas.
- On Web, fix
ControlFlow::Exitnot properly handled. - On Web (web-sys only), send
WindowEvent::ScaleFactorChangedevent whenwindow.devicePixelRatiois changed. - Breaking: On Web,
set_cursor_positionandset_cursor_grabwill now always return an error. - Breaking:
PixelDeltascroll events now return aPhysicalPosition. - On NetBSD, fixed crash due to incorrect detection of the main thread.
- Breaking: On X11,
-key is mapped to theMinusvirtual key code, instead ofSubtract. - On macOS, fix inverted horizontal scroll.
- Breaking:
current_monitornow returnsOption<MonitorHandle>. - Breaking:
primary_monitornow returnsOption<MonitorHandle>. - On macOS, updated core-* dependencies and cocoa.
- Bump
parking_lotto 0.11 - On Android, bump
ndk,ndk-sysandndk-glueto 0.2. Checkout the new ndk-glue main proc attribute. - On iOS, fixed starting the app in landscape where the view still had portrait dimensions.
- Deprecate the stdweb backend, to be removed in a future release
- Breaking: Prefixed virtual key codes
Add,Multiply,Divide,Decimal, andSubtractwithNumpad. - Added
AsteriskandPlusvirtual key codes. - On Web (web-sys only), the
Event::LoopDestroyedevent is correctly emitted when leaving the page. - On Web, the
WindowEvent::Destroyedevent now gets emitted when aWindowis dropped. - On Web (web-sys only), the event listeners are now removed when a
Windowis dropped or when the event loop is destroyed. - On Web, the event handler closure passed to
EventLoop::runnow gets dropped after the event loop is destroyed. - Breaking: On Web, the canvas element associated to a
Windowis no longer removed from the DOM when theWindowis dropped. - On Web,
WindowEvent::Resizedis now emitted whenWindow::set_inner_sizeis called. - Breaking:
Fullscreenenum now usesBorderless(Option<MonitorHandle>)instead ofBorderless(MonitorHandle)to allow picking the current monitor. - On MacOS, fix
WindowEvent::Movedignoring the scale factor. - On Wayland, add missing virtual keycodes.
- On Wayland, implement proper
set_cursor_grab. - On Wayland, the cursor will use similar icons if the requested one isn't available.
- On Wayland, right clicking on client side decorations will request application menu.
- On Wayland, fix tracking of window size after state changes.
- On Wayland, fix client side decorations not being hidden properly in fullscreen.
- On Wayland, fix incorrect size event when entering fullscreen with client side decorations.
- On Wayland, fix
resizableattribute not being applied properly on startup. - On Wayland, fix disabled repeat rate not being handled.
- On Wayland, fix decoration buttons not working after tty switch.
- On Wayland, fix scaling not being applied on output re-enable.
- On Wayland, fix crash when
XCURSOR_SIZEis0. - On Wayland, fix pointer getting created in some cases without pointer capability.
- On Wayland, on kwin, fix space between window and decorations on startup.
- Breaking: On Wayland,
Themetrait was reworked. - On Wayland, disable maximize button for non-resizable window.
- On Wayland, added support for
set_ime_position. - On Wayland, fix crash on startup since GNOME 3.37.90.
- On X11, fix incorrect modifiers state on startup.
0.22.2 (2020-05-16)
- Added Clone implementation for 'static events.
- On Windows, fix window intermittently hanging when
ControlFlowwas set toPoll. - On Windows, fix
WindowBuilder::with_maximizedbeing ignored. - On Android, minimal platform support.
- On iOS, touch positions are now properly converted to physical pixels.
- On macOS, updated core-* dependencies and cocoa
0.22.1 (2020-04-16)
- On X11, fix
ResumeTimeReachedbeing fired too early. - On Web, replaced zero timeout for
ControlFlow::PollwithrequestAnimationFrame - On Web, fix a possible panic during event handling
- On macOS, fix
EventLoopProxyleaking memory for every instance.
0.22.0 (2020-03-09)
- On Windows, fix minor timing issue in wait_until_time_or_msg
- On Windows, rework handling of request_redraw() to address panics.
- On macOS, fix
set_simple_screento remember frame excluding title bar. - On Wayland, fix coordinates in touch events when scale factor isn't 1.
- On Wayland, fix color from
close_button_icon_colornot applying. - Ignore locale if unsupported by X11 backend
- On Wayland, Add HiDPI cursor support
- On Web, add the ability to query "Light" or "Dark" system theme send
ThemeChangedon change. - Fix
Event::to_staticreturningNonefor user events. - On Wayland, Hide CSD for fullscreen windows.
- On Windows, ignore spurious mouse move messages.
- Breaking: Move
ModifiersChangedvariant fromDeviceEventtoWindowEvent. - On Windows, add
IconExtWindowstrait which exposes creating anIconfrom an external file or embedded resource - Add
BadIcon::OsErrorvariant for when OS icon functionality fails - On Windows, fix crash at startup on systems that do not properly support Windows' Dark Mode
- Revert On macOS, fix not sending ReceivedCharacter event for specific keys combinations.
- on macOS, fix incorrect ReceivedCharacter events for some key combinations.
- Breaking: Use
i32instead ofu32for position type inWindowEvent::Moved. - On macOS, a mouse motion event is now generated before every mouse click.
0.21.0 (2020-02-04)
- On Windows, fixed "error: linking with
link.exefailed: exit code: 1120" error on older versions of windows. - On macOS, fix set_minimized(true) works only with decorations.
- On macOS, add
hide_applicationtoEventLoopWindowTargetvia a newEventLoopWindowTargetExtMacOStrait.hide_applicationwill hide the entire application by calling-[NSApplication hide: nil]. - On macOS, fix not sending ReceivedCharacter event for specific keys combinations.
- On macOS, fix
CursorMovedevent reporting the cursor position using logical coordinates. - On macOS, fix issue where unbundled applications would sometimes open without being focused.
- On macOS, fix
run_returndoes not return unless it receives a message. - On Windows, fix bug where
RedrawRequestedwould only get emitted every other iteration of the event loop. - On X11, fix deadlock on window state when handling certain window events.
WindowBuildernow implementsDefault.- Breaking:
WindowEvent::CursorMovedchanged tof64units, preserving high-precision data supplied by most backends - On Wayland, fix coordinates in mouse events when scale factor isn't 1
- On Web, add the ability to provide a custom canvas
- Breaking: On Wayland, the
WaylandThemestruct has been replaced with aThemetrait, allowing for extra configuration
0.20.0 (2020-01-05)
- On X11, fix
ModifiersChangedemitting incorrect modifier change events - Breaking: Overhaul how Winit handles DPI:
- Window functions and events now return
PhysicalSizeinstead ofLogicalSize. - Functions that take
SizeorPositiontypes can now take eitherLogicalorPhysicaltypes. hidpi_factorhas been renamed toscale_factor.HiDpiFactorChangedhas been renamed toScaleFactorChanged, and lets you control how the OS resizes the window in response to the change.- On X11, deprecate
WINIT_HIDPI_FACTORenvironment variable in favor ofWINIT_X11_SCALE_FACTOR. SizeandPositiontypes are now generic over their exact pixel type.
- Window functions and events now return
0.20.0 Alpha 6 (2020-01-03)
- On macOS, fix
set_cursor_visiblehides cursor outside of window. - On macOS, fix
CursorEnteredandCursorLeftevents fired at old window size. - On macOS, fix error when
set_fullscreenis called during fullscreen transition. - On all platforms except mobile and WASM, implement
Window::set_minimized. - On X11, fix
CursorEnteredevent 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::ThemeChangedvariant to handle changes to the system theme. Currently only implemented on Windows. - Breaking: Changes to the
RedrawRequestedevent (#1041):RedrawRequestedhas been moved fromWindowEventtoEvent.EventsClearedhas been renamed toMainEventsCleared.RedrawRequestedis now issued only afterMainEventsCleared.RedrawEventsClearedis issued after each set ofRedrawRequestedevents.
- Implement synthetic window focus key events on Windows.
- Breaking: Change
ModifiersStateto abitflagsstruct. - On Windows, implement
VirtualKeyCodetranslation forLWinandRWin. - On Windows, fix closing the last opened window causing
DeviceEvents to stop getting emitted. - On Windows, fix
Window::set_visiblenot setting internal flags correctly. This resulted in some weird behavior. - Add
DeviceEvent::ModifiersChanged.- Deprecate
modifiersfields in other events in favor ofModifiersChanged.
- Deprecate
- On X11,
WINIT_HIDPI_FACTORnow dominatesXft.dpiwhen picking DPI factor for output. - On X11, add special value
randrforWINIT_HIDPI_FACTORto make winit use self computed DPI factor instead of the one fromXft.dpi.
0.20.0 Alpha 5 (2019-12-09)
- On macOS, fix application termination on
ControlFlow::Exit - On Windows, fix missing
ReceivedCharacterevents when Alt is held. - On macOS, stop emitting private corporate characters in
ReceivedCharacterevents. - 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
EventLoopClosedto contain the original event. - Breaking: Add
is_syntheticfield toWindowEventvariantKeyboardInput, 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
CursorMovedevent when aTouchevent occurs, as X11 implicitly moves the cursor for such events.
0.20.0 Alpha 4 (2019-10-18)
- 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_sendusage that was UB and/or would break if!is stabilized. - On Windows, unset
maximizedwhen manually changing the window's position or size. - On Windows, add touch pressure information for touch events.
- On macOS, differentiate between
CursorIcon::GrabandCursorIcon::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
HiDpiFactorChangedevent. - 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
RedrawRequestedevent 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
derivativecrate dependency. - On Wayland, add support for set_cursor_icon.
- Use
impl Iterator<Item = MonitorHandle>instead ofAvailableMonitorsIterconsistently. - On macOS, fix fullscreen state being updated after entering fullscreen instead of before,
resulting in
Window::fullscreenreturning the old state inResizedevents 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::newandEventLoop::with_user_eventfrom 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
EventLoopoutside 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.
0.20.0 Alpha 3 (2019-08-14)
- On macOS, drop the run closure on exit.
- On Windows, location of
WindowEvent::Touchare window client coordinates instead of screen coordinates. - On X11, fix delayed events after window redraw.
- On macOS, add
WindowBuilderExt::with_disallow_hidpito 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_eventmethod towith_user_event. - On macOS, the dock and the menu bar are now hidden in fullscreen mode.
Window::set_fullscreennow takesOption<Fullscreen>whereFullscreenconsists ofFullscreen::Exclusive(VideoMode)andFullscreen::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: Clonerequirement from theCloneimpl ofEventLoopProxy<T>. - On iOS, disable overscan compensation for external displays (removes black bars surrounding the image).
- On Linux, the functions
is_wayland,is_x11,xlib_xconnectionandwayland_displayhave been moved to a newEventLoopWindowTargetExtUnixtrait. - On iOS, add
set_prefers_status_bar_hiddenextension function instead of hijackingset_decorationsfor 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::HasRawWindowHandleforWindowtype 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.
0.20.0 Alpha 2 (2019-07-09)
- On X11, non-resizable windows now have maximize explicitly disabled.
- On Windows, support paths longer than MAX_PATH (260 characters) in
WindowEvent::DroppedFileandWindowEvent::HoveredFile. - On Mac, implement
DeviceEvent::Button. - Change
Event::Suspended(true / false)toEvent::SuspendedandEvent::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_PINGto 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_redrawduringEventsClearedsending multipleRedrawRequested events. - On Windows, fix edge case where
RedrawRequestedcould be dispatched before input events in event loop iteration. - On Windows, fix timing issue that could cause events to be improperly dispatched after
RedrawRequestedbut beforeEventsCleared. - 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_maximizednot properly setting window size to entire window. - On macOS, change
WindowExtMacOS::request_user_attention()to take anenuminstead of abool.
0.20.0 Alpha 1 (2019-06-21)
- Changes below are considered breaking.
- Change all occurrences of
EventsLooptoEventLoop. - Previously flat API is now exposed through
event,event_loop,monitor, andwindowmodules. osmodule changes:- Renamed to
platform. - All traits now have platform-specific suffixes.
- Exposes new
desktopmodule on Windows, Mac, and Linux.
- Renamed to
- Changes to event loop types:
EventLoopProxy::wakeuphas been removed in favor ofsend_event.- Major: New
runmethod drives winit event loop.- Returns
!to ensure API behaves identically across all supported platforms.- This allows
emscriptenimplementation to work without lying about the API.
- This allows
ControlFlow's variants have been replaced withWait,WaitUntil(Instant),Poll, andExit.- Is read after
EventsClearedis processed. Waitwaits until new events are available.WaitUntilwaits until either new events are available or the provided time has been reached.Pollinstantly resumes the event loop.Exitaborts the event loop.
- Is read after
- Takes a closure that implements
'static + FnMut(Event<T>, &EventLoop<T>, &mut ControlFlow).&EventLoop<T>is provided to allow newWindows to be created.
- Returns
- Major:
platform::desktopmodule exposesEventLoopExtDesktoptrait withrun_returnmethod.- Behaves identically to
run, but returns control flow to the calling context and can take non-'staticclosures.
- Behaves identically to
EventLoop'spoll_eventsandrun_forevermethods have been removed in favor ofrunandrun_return.
- Changes to events:
- Remove
Event::Awakenedin favor ofEvent::UserEvent(T).- Can be sent with
EventLoopProxy::send_event.
- Can be sent with
- Rename
WindowEvent::RefreshtoWindowEvent::RedrawRequested.RedrawRequestedcan be sent by the user with theWindow::request_redrawmethod.
EventLoop,EventLoopProxy, andEventare now generic overT, for use inUserEvent.- Major: Add
NewEvents(StartCause),EventsCleared, andLoopDestroyedvariants toEvent.NewEventsis emitted when new events are ready to be processed by event loop.StartCausedescribes why new events are available, withResumeTimeReached,Poll,WaitCancelled, andInit(sent once at start of loop).
EventsClearedis 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).
LoopDestroyedis emitted when therunorrun_returnmethod is about to exit.
- Remove
- Rename
MonitorIdtoMonitorHandle. - Removed
serdeimplementations fromControlFlow. - Rename several functions to improve both internal consistency and compliance with Rust API guidelines.
- Remove
WindowBuilder::multitouchfield, since it was only implemented on a few platforms. Multitouch is always enabled now. - Breaking: On macOS, change
nsidentifiers to use snake_case for consistency with iOS'suiidentifiers. - Add
MonitorHandle::video_modesmethod 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.
Version 0.19.1 (2019-04-08)
- On Wayland, added a
get_wayland_displayfunction toEventsLoopExt. - 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 Linux, the numpad's add, subtract and divide keys are now mapped to the
Add,SubtractandDividevirtual key codes - On macOS, the numpad's subtract key has been added to the
Subtractmapping - On Wayland, the numpad's home, end, page up and page down keys are now mapped to the
Home,End,PageUpandPageDownvirtual key codes - 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.
Version 0.19.0 (2019-03-06)
- On X11, we will use the faster
XRRGetScreenResourcesCurrentfunction instead ofXRRGetScreenResourceswhen available. - On macOS, fix keycodes being incorrect when using a non-US keyboard layout.
- On Wayland, fix
with_title()not setting the windows title - On Wayland, add
set_wayland_theme()to control client decoration color theme - Added serde serialization to
os::unix::XWindowType. - Breaking: Remove the
icon_loadingfeature and the associatedimagedependency. - On X11, make event loop thread safe by replacing XNextEvent with select(2) and XCheckIfEvent
- On Windows, fix malformed function pointer typecast that could invoke undefined behavior.
- Refactored Windows state/flag-setting code.
- On Windows, hiding the cursor no longer hides the cursor for all Winit windows - just the one
hide_cursorwas called on. - On Windows, cursor grabs used to get perpetually canceled when the grabbing window lost focus. Now, cursor grabs automatically get re-initialized when the window regains focus and the mouse moves over the client area.
- On Windows, only vertical mouse wheel events were handled. Now, horizontal mouse wheel events are also handled.
- On Windows, ignore the AltGr key when populating the
ModifersStatetype.
Version 0.18.1 (2018-12-30)
- On macOS, fix
Yen(JIS) so applications receive the event. - On X11 with a tiling WM, fixed high CPU usage when moving windows across monitors.
- On X11, fixed panic caused by dropping the window before running the event loop.
- on macOS, added
WindowExt::set_simple_fullscreenwhich does not require a separate space - Introduce
WindowBuilderExt::with_app_idto allow setting the application ID on Wayland. - On Windows, catch panics in event loop child thread and forward them to the parent thread. This prevents an invocation of undefined behavior due to unwinding into foreign code.
- On Windows, fix issue where resizing or moving window combined with grabbing the cursor would freeze program.
- On Windows, fix issue where resizing or moving window would eat
Awakenedevents. - On Windows, exiting fullscreen after entering fullscreen with disabled decorations no longer shrinks window.
- On X11, fixed a segfault when using virtual monitors with XRandR.
- Derive
OrdandPartialOrdforVirtualKeyCodeenum. - On Windows, fix issue where hovering or dropping a non file item would create a panic.
- On Wayland, fix resizing and DPI calculation when a
wl_outputis removed without sending aleaveevent to thewl_surface, such as disconnecting a monitor from a laptop. - On Wayland, DPI calculation is handled by smithay-client-toolkit.
- On X11,
WindowBuilder::with_min_dimensionsandWindowBuilder::with_max_dimensionsnow correctly account for DPI. - Added support for generating dummy
DeviceIds andWindowIds to better support unit testing. - On macOS, fixed unsoundness in drag-and-drop that could result in drops being rejected.
- On macOS, implemented
WindowEvent::Refresh. - On macOS, all
MouseCursorvariants are now implemented and the cursor will no longer reset after unfocusing. - Removed minimum supported Rust version guarantee.
Version 0.18.0 (2018-11-07)
- Breaking:
imagecrate upgraded to 0.20. This is exposed as part of theicon_loadingAPI. - 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
VirtualKeyCodeenum). - 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_variantto X11-specificWindowBuilderfunctions. - Fixed UTF8 handling bug in X11
set_titlefunction. - On Windows,
Window::set_cursornow applies immediately instead of requiring specific events to occur first. - On Windows, the
HoveredFileandHoveredFileCancelledevents are now implemented. - On Windows, fix
Window::set_maximized. - On Windows 10, fix transparency (#260).
- On macOS, fix modifiers during key repeat.
- Implemented the
Debugtrait forWindow,EventsLoop,EventsLoopProxyandWindowBuilder. - On X11, now a
Resizedevent 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
serdefeature with implementations ofSerialize/Deserializefor DPI types and various event types. - Add
PartialEq,Eq, andHashimplementations 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 fromActivationPolicyon macOS. - On macOS, the application can request the user's attention with
WindowExt::request_user_attention.
Version 0.17.2 (2018-08-19)
- 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.
Version 0.17.1 (2018-08-05)
- On X11, prevent a compilation failure in release mode for versions of Rust greater than or equal to 1.30.
- Fixed deadlock that broke fullscreen mode on Windows.
Version 0.17.0 (2018-08-02)
- Cocoa and core-graphics updates.
- Fixed thread-safety issues in several
Windowfunctions on Windows. - On MacOS, the key state for modifiers key events is now properly set.
- On iOS, the view is now set correctly. This makes it possible to render things (instead of being stuck on a black screen), and touch events work again.
- Added NetBSD support.
- Breaking: On iOS,
UIViewis now the default root view.WindowBuilderExt::with_root_view_classcan be used to set the root view objective-c class toGLKView(OpenGLES) orMTKView(Metal/MoltenVK). - On iOS, the
UIApplicationis not started untilWindow::newis called. - Fixed thread unsafety with cursor hiding on macOS.
- On iOS, fixed the size of the
JmpBuftype used forsetjmp/longjmpcalls. Previously this was a buffer overflow on most architectures. - On Windows, use cached window DPI instead of repeatedly querying the system. This fixes sporadic crashes on Windows 7.
Version 0.16.2 (2018-07-07)
- On Windows, non-resizable windows now have the maximization button disabled. This is consistent with behavior on macOS and popular X11 WMs.
- Corrected incorrect
unreachable!usage when guessing the DPI factor with no detected monitors.
Version 0.16.1 (2018-07-02)
- Added logging through
log. Logging will become more extensive over time. - On X11 and Windows, the window's DPI factor is guessed before creating the window. This greatly cuts back on unsightly auto-resizing that would occur immediately after window creation.
- Fixed X11 backend compilation for environments where
c_charis unsigned.
Version 0.16.0 (2018-06-25)
- Windows additionally has
WindowBuilderExt::with_no_redirection_bitmap. - Breaking: Removed
VirtualKeyCode::LMenuandVirtualKeyCode::RMenu; Windows now generatesVirtualKeyCode::LAltandVirtualKeyCode::RAltinstead. - On X11, exiting fullscreen no longer leaves the window in the monitor's top left corner.
- Breaking:
Window::hidpi_factorhas been renamed toWindow::get_hidpi_factorfor better consistency.WindowEvent::HiDPIFactorChangedhas been renamed toWindowEvent::HiDpiFactorChanged. DPI factors are always represented asf64instead off32now. - The Windows backend is now DPI aware.
WindowEvent::HiDpiFactorChangedis implemented, andMonitorId::get_hidpi_factorandWindow::hidpi_factorreturn accurate values. - Implemented
WindowEvent::HiDpiFactorChangedon X11. - On macOS,
Window::set_cursor_positionis now relative to the client area. - On macOS, setting the maximum and minimum dimensions now applies to the client area dimensions rather than to the window dimensions.
- On iOS,
MonitorId::get_dimensionshas been implemented and bothMonitorId::get_hidpi_factorandWindow::get_hidpi_factorreturn accurate values. - On Emscripten,
MonitorId::get_hidpi_factornow returns the same value asWindow::get_hidpi_factor(it previously would always return 1.0). - Breaking: The entire API for sizes, positions, etc. has changed. In the majority of cases, winit produces and consumes positions and sizes as
LogicalPositionandLogicalSize, respectively. The notable exception isMonitorIdmethods, which deal inPhysicalPositionandPhysicalSize. See the documentation for specifics and explanations of the types. Additionally, winit automatically conserves logical size when the DPI factor changes. - Breaking: All deprecated methods have been removed. For
Window::platform_displayandWindow::platform_window, switch to the appropriate platform-specificWindowExtmethods. ForWindow::get_inner_size_pointsandWindow::get_inner_size_pixels, use theLogicalSizereturned byWindow::get_inner_sizeand convert as needed. - HiDPI support for Wayland.
EventsLoop::get_available_monitorsandEventsLoop::get_primary_monitornow have identical counterparts onWindow, so this information can be acquired without anEventsLoopborrow.AvailableMonitorsIternow implementsDebug.- Fixed quirk on macOS where certain keys would generate characters at twice the normal rate when held down.
- On X11, all event loops now share the same
XConnection. - Breaking:
Window::set_cursor_stateandCursorStateenum removed in favor of the more composableWindow::grab_cursorandWindow::hide_cursor. As a result, grabbing the cursor no longer automatically hides it; you must call both methods to retain the old behavior on Windows and macOS.Cursor::NoneCursorhas been removed, as it's no longer useful. - Breaking:
Window::set_cursor_positionnow returnsResult<(), String>, thus allowing forBox<Error>conversion via?.
Version 0.15.1 (2018-06-13)
- On X11, the
Movedevent is no longer sent when the window is resized without changing position. MouseCursorandCursorStatenow implementDefault.WindowBuilder::with_resizableimplemented for Windows, X11, Wayland, and macOS.Window::set_resizableimplemented for Windows, X11, Wayland, and macOS.- On X11, if the monitor's width or height in millimeters is reported as 0, the DPI is now 1.0 instead of +inf.
- On X11, the environment variable
WINIT_HIDPI_FACTORhas been added for overriding DPI factor. - On X11, enabling transparency no longer causes the window contents to flicker when resizing.
- On X11,
with_override_redirectnow actually enables override redirect. - macOS now generates
VirtualKeyCode::LAltandVirtualKeyCode::RAltinstead ofNonefor both. - On macOS,
VirtualKeyCode::RWinandVirtualKeyCode::LWinare no longer switched. - On macOS, windows without decorations can once again be resized.
- Fixed race conditions when creating an
EventsLoopon X11, most commonly manifesting as "[xcb] Unknown sequence number while processing queue". - On macOS,
CursorMovedandMouseInputevents are only generated if they occurs within the window's client area. - On macOS, resizing the window no longer generates a spurious
MouseInputevent.
Version 0.15.0 (2018-05-22)
Icon::to_cardinalsis no longer public, since it was never supposed to be.- Wayland: improve diagnostics if initialization fails
- Fix some system event key doesn't work when focused, do not block keyevent forward to system on macOS
- On X11, the scroll wheel position is now correctly reset on i3 and other WMs that have the same quirk.
- On X11,
Window::get_current_monitornow reliably returns the correct monitor. - On X11,
Window::hidpi_factorreturns values from XRandR rather than the inaccurate values previously queried from the core protocol. - On X11, the primary monitor is detected correctly even when using versions of XRandR less than 1.5.
MonitorIdnow implementsDebug.- Fixed bug on macOS where using
with_decorations(false)would causeset_decorations(true)to produce a transparent titlebar with no title. - Implemented
MonitorId::get_positionon macOS. - On macOS,
Window::get_current_monitornow returns accurate values. - Added
WindowBuilderExt::with_resize_incrementsto macOS. - Breaking: On X11,
WindowBuilderExt::with_resize_incrementsandWindowBuilderExt::with_base_sizenow takeu32values rather thani32. - macOS keyboard handling has been overhauled, allowing for the use of dead keys, IME, etc. Right modifier keys are also no longer reported as being left.
- Added the
Window::set_ime_spot(x: i32, y: i32)method, which is implemented on X11 and macOS. - Breaking:
os::unix::WindowExt::send_xim_spot(x: i16, y: i16)no longer exists. Switch to the newWindow::set_ime_spot(x: i32, y: i32), which has equivalent functionality. - Fixed detection of
PauseandScrollkeys on Windows. - On Windows, alt-tabbing while the cursor is grabbed no longer makes it impossible to re-grab the cursor.
- On Windows, using
CursorState::Hidewhen the cursor is grabbed now ungrabs the cursor first. - Implemented
MouseCursor::NoneCursoron Windows. - Added
WindowBuilder::with_always_on_topandWindow::set_always_on_top. Implemented on Windows, macOS, and X11. - On X11,
WindowBuilderExtnow haswith_class,with_override_redirect, andwith_x11_window_typeto allow for more control over window creation.WindowExtadditionally hasset_urgent. - More hints are set by default on X11, including
_NET_WM_PIDandWM_CLIENT_MACHINE. Note that prior to this, theWM_CLASShint was automatically set to whatever value was passed towith_title. It's now set to the executable name to better conform to expectations and the specification; if this is undesirable, you must explicitly useWindowBuilderExt::with_class.
Version 0.14.0 (2018-05-09)
- Created the
Copy,PasteandCutVirtualKeyCodes and added support for them on X11 and Wayland - Fix
.with_decorations(false)in macOS - On Mac,
NSWindowand supporting objects might be alive long after they wereclosedwhich resulted in apps consuming more heap then needed. Mainly it was affecting multi window applications. Not expecting any user visible change of behaviour after the fix. - Fix regression of Window platform extensions for macOS where
NSFullSizeContentViewWindowMaskwas not being correctly applied to.fullsize_content_view. - Corrected
get_positionon Windows to be relative to the screen rather than to the taskbar. - Corrected
Movedevent on Windows to use position values equivalent to those returned byget_position. It previously supplied client area positions instead of window positions, and would additionally interpret negative values as being very large (aroundu16::MAX). - Implemented
Movedevent on macOS. - On X11, the
Movedevent correctly use window positions rather than client area positions. Additionally, a strayMovedthat unconditionally accompaniedResizedwith the client area position relative to the parent has been eliminated;Movedis still received alongsideResized, but now only once and always correctly. - On Windows, implemented all variants of
DeviceEventother thanText. MouseDeviceEvents are now received even if the window isn't in the foreground. DeviceIdon Windows is no longer a unit struct, and now contains au32. ForWindowEvents, this will always be 0, but onDeviceEvents it will be the handle to that device.DeviceIdExt::get_persistent_identifiercan be used to acquire a unique identifier for that device that persists across replugs/reboots/etc.- Corrected
run_foreveron X11 to stop discardingAwakenedevents. - Various safety and correctness improvements to the X11 backend internals.
- Fixed memory leak on X11 every time the mouse entered the window.
- On X11, drag and drop now works reliably in release mode.
- Added
WindowBuilderExt::with_resize_incrementsandWindowBuilderExt::with_base_sizeto X11, allowing for more optional hints to be set. - Rework of the wayland backend, migrating it to use Smithay's Client Toolkit.
- Added
WindowBuilder::with_window_iconandWindow::set_window_icon, finally making it possible to set the window icon on Windows and X11. Theicon_loadingfeature can be enabled to allow for icons to be easily loaded; see example programwindow_icon.rsfor usage. - Windows additionally has
WindowBuilderExt::with_taskbar_iconandWindowExt::set_taskbar_icon. - On Windows, fix panic when trying to call
set_fullscreen(None)on a window that has not been fullscreened prior.
Version 0.13.1 (2018-04-26)
- Ensure necessary
x11-dlversion is used.
Version 0.13.0 (2018-04-25)
- Implement
WindowBuilder::with_maximized,Window::set_fullscreen,Window::set_maximizedandWindow::set_decorationsfor MacOS. - Implement
WindowBuilder::with_maximized,Window::set_fullscreen,Window::set_maximizedandWindow::set_decorationsfor Windows. - On Windows,
WindowBuilder::with_fullscreenno longer changing monitor display resolution. - Overhauled X11 window geometry calculations.
get_positionandset_positionare more universally accurate across different window managers, andget_outer_sizeactually works now. - Fixed SIGSEGV/SIGILL crashes on macOS caused by stabilization of the
!(never) type. - Implement
WindowEvent::HiDPIFactorChangedfor macOS - On X11, input methods now work completely out of the box, no longer requiring application developers to manually call
setlocale. Additionally, when input methods are started, stopped, or restarted on the server end, it's correctly handled. - Implemented
Refreshevent on Windows. - Properly calculate the minimum and maximum window size on Windows, including window decorations.
- Map more
MouseCursorvariants to cursor icons on Windows. - Corrected
get_positionon macOS to return outer frame position, not content area position. - Corrected
set_positionon macOS to set outer frame position, not content area position. - Added
get_inner_positionmethod toWindow, which gets the position of the window's client area. This is implemented on all applicable platforms (all desktop platforms other than Wayland, where this isn't possible). - Breaking: the
Closedevent has been replaced byCloseRequestedandDestroyed. To migrate, you typically just need to replace all usages ofClosedwithCloseRequested; see example programs for more info. The exception is iOS, whereClosedmust be replaced byDestroyed.
Version 0.12.0 (2018-04-06)
- Added subclass to macos windows so they can be made resizable even with no decorations.
- Dead keys now work properly on X11, no longer resulting in a panic.
- On X11, input method creation first tries to use the value from the user's
XMODIFIERSenvironment variable, so application developers should no longer need to manually callXSetLocaleModifiers. If that fails, fallbacks are tried, which should prevent input method initialization from ever outright failing. - Fixed thread safety issues with input methods on X11.
- Add support for
Touchfor win32 backend. - Fixed
Window::get_inner_sizeand friends to return the size in pixels instead of points when using HIDPI displays on OSX.
Version 0.11.3 (2018-03-28)
- Added
set_min_dimensionsandset_max_dimensionsmethods toWindow, and implemented on Windows, X11, Wayland, and OSX. - On X11, dropping a
Windowactually closes it now, and clicking the window's × button (or otherwise having the WM signal to close it) will result in the window closing. - Added
WindowBuilderExtmethods for macos:with_titlebar_transparent,with_title_hidden,with_titlebar_buttons_hidden,with_fullsize_content_view. - Mapped X11 numpad keycodes (arrows, Home, End, PageUp, PageDown, Insert and Delete) to corresponding virtual keycodes
Version 0.11.2 (2018-03-06)
- Impl
Hash,PartialEq, andEqforevents::ModifiersState. - Implement
MonitorId::get_hidpi_factorfor MacOS. - Added method
os::macos::MonitorIdExt::get_nsscreen() -> *mut c_voidthat gets aNSScreenobject matching the monitor ID. - Send
Awakenedevent on Android when event loop is woken up.
Version 0.11.1 (2018-02-19)
- Fixed windows not receiving mouse events when click-dragging the mouse outside the client area of a window, on Windows platforms.
- Added method
os::android::EventsLoopExt:set_suspend_callback(Option<Box<Fn(bool) -> ()>>)that allows glutin to register a callback when a suspend event happens
Version 0.11.0 (2018-02-09)
- Implement
MonitorId::get_dimensionsfor Android. - Added method
os::macos::WindowBuilderExt::with_movable_by_window_background(bool)that allows to move a window without a titlebar -with_decorations(false) - Implement
Window::set_fullscreen,Window::set_maximizedandWindow::set_decorationsfor Wayland. - Added
Caretas VirtualKeyCode and support OSX ^-Key with german input.
Version 0.10.1 (2018-02-05)
Yanked
Version 0.10.0 (2017-12-27)
- Add support for
Touchfor emscripten backend. - Added support for
DroppedFile,HoveredFile, andHoveredFileCancelledto X11 backend. - Breaking:
unix::WindowExtno longer returns pointers for things that aren't actually pointers;get_xlib_windownow returnsOption<std::os::raw::c_ulong>andget_xlib_screen_idreturnsOption<std::os::raw::c_int>. Additionally, methods that previously returnedlibc::c_voidhave been changed to returnstd::os::raw::c_void, which are not interchangeable types, so users wanting the former will need to explicitly cast. - Added
set_decorationsmethod toWindowto allow decorations to be toggled after the window is built. Presently only implemented on X11. - Raised the minimum supported version of Rust to 1.20 on MacOS due to usage of associated constants in new versions of cocoa and core-graphics.
- Added
modifiersfield toMouseInput,MouseWheel, andCursorMovedevents to track the modifiers state (ModifiersState). - Fixed the emscripten backend to return the size of the canvas instead of the size of the window.
Version 0.9.0 (2017-12-01)
- Added event
WindowEvent::HiDPIFactorChanged. - Added method
MonitorId::get_hidpi_factor. - Deprecated
get_inner_size_pixelsandget_inner_size_pointsmethods ofWindowin favor ofget_inner_size. - Breaking:
EventsLoopis!Sendand!Syncbecause of platform-dependant constraints, butWindow,WindowId,DeviceIdandMonitorIdguaranteed to beSend. MonitorId::get_positionnow returns(i32, i32)instead of(u32, u32).- Rewrite of the wayland backend to use wayland-client-0.11
- Support for dead keys on wayland for keyboard utf8 input
- Monitor enumeration on Windows is now implemented using
EnumDisplayMonitorsinstead ofEnumDisplayDevices. This changes the value returned byMonitorId::get_name(). - On Windows added
MonitorIdExt::hmonitormethod - Impl
CloneforEventsLoopProxy EventsLoop::get_primary_monitor()on X11 will fallback to any available monitor if no primary is found- Support for touch event on wayland
WindowEventsMouseMoved,MouseEntered, andMouseLefthave been renamed toCursorMoved,CursorEntered, andCursorLeft.- New
DeviceEvents added,MouseMotionandMouseWheel. - Send
CursorMovedevent afterCursorEnteredandFocusedevents. - Add support for
ModifiersState,MouseMove,MouseInput,MouseMotionfor emscripten backend.
Version 0.8.3 (2017-10-11)
- Fixed issue of calls to
set_inner_sizeblocking on Windows. - Mapped
ISO_Left_TabtoVirtualKeyCode::Tabto make the key work with modifiers - Fixed the X11 backed on 32bit targets
Version 0.8.2 (2017-09-28)
- Uniformize keyboard scancode values accross Wayland and X11 (#297).
- Internal rework of the wayland event loop
- Added method
os::linux::WindowExt::is_ready
Version 0.8.1 (2017-09-22)
- Added various methods to
os::linux::EventsLoopExt, plus some hidden items necessary to make glutin work.
Version 0.8.0 (2017-09-21)
- Added
Window::set_maximized,WindowAttributes::maximizedandWindowBuilder::with_maximized. - Added
Window::set_fullscreen. - Changed
with_fullscreento take aOption<MonitorId>instead of aMonitorId. - Removed
MonitorId::get_native_identifer()in favor of platform-specific traits in theosmodule. - Changed
get_available_monitors()andget_primary_monitor()to be methods ofEventsLoopinstead of stand-alone methods. - Changed
EventsLoopto be tied to a specific X11 or Wayland connection. - Added a
os::linux::EventsLoopExttrait that makes it possible to configure the connection. - Fixed the emscripten code, which now compiles.
- Changed the X11 fullscreen code to use
xrandrinstead ofxxf86vm. - Fixed the Wayland backend to produce
Refreshevent after window creation. - Changed the
Suspendedevent to be outside ofWindowEvent. - Fixed the X11 backend sometimes reporting the wrong virtual key (#273).