winit/CHANGELOG.md
Francesca Frangipane d667a395b6 x11: Destroy dropped windows; handle WM_DELETE_WINDOW (#416)
Fixes #79 #414

This changes the implementation of Drop for Window to send a WM_DELETE_WINDOW ClientMessage,
offloading all the cleanup and window destruction to the event loop. Unsurprisingly, this
entails that the event loop now handles WM_DELETE_WINDOW using the behavior that was
previously contained in Window's Drop implementation, along with destroying the Window.
Not only does this mean that dropped windows are closed, but also that clicking the × button
on the window actually closes it now.

The previous implemention of Drop was also broken, as the event loop would be (seemingly
permenanently) frozen after its invocation. That was caused specifically by the mutex
locking, and is no longer an issue now that the locking is done in the event loop.

While I don't have full confidence that it makes sense for the Drop implementation to behave
this way, this is nonetheless a significant improvement. The previous behavior led to
inconsistent state, panics, and event loop breakage, along with not actually destroying the
window.

This additionally makes the assumption that users don't need Focused or CursorLeft events
for the destroyed window, as Closed is adequate to indicate unfocus, and users may not
expect to receive events for closed/dropped windows. In my testing, those specific events
were sent immediately after the window was destroyed, though this sort of behavior could be
WM-specific. I've opted to explicitly suppress those events in the case of the window no
longer existing.
2018-03-23 10:31:31 +01:00

5.4 KiB
Raw Blame History

Unreleased

  • On X11, dropping a Window actually 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 WindowBuilderExt methods for macos: with_titlebar_transparent, with_title_hidden, with_titlebar_buttons_hidden, with_fullsize_content_view.

Version 0.11.2 (2018-03-06)

  • Impl Hash, PartialEq, and Eq for events::ModifiersState.
  • Implement MonitorId::get_hidpi_factor for MacOS.
  • Added method os::macos::MonitorIdExt::get_nsscreen() -> *mut c_void that gets a NSScreen object matching the monitor ID.
  • Send Awakened event 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_dimensions for 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_maximized and Window::set_decorations for Wayland.
  • Added Caret as 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 Touch for emscripten backend.
  • Added support for DroppedFile, HoveredFile, and HoveredFileCancelled to X11 backend.
  • Breaking: unix::WindowExt no longer returns pointers for things that aren't actually pointers; get_xlib_window now returns Option<std::os::raw::c_ulong> and get_xlib_screen_id returns Option<std::os::raw::c_int>. Additionally, methods that previously returned libc::c_void have been changed to return std::os::raw::c_void, which are not interchangeable types, so users wanting the former will need to explicitly cast.
  • Added set_decorations method to Window to 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 modifiers field to MouseInput, MouseWheel, and CursorMoved events 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_pixels and get_inner_size_points methods of Window in favor of get_inner_size.
  • Breaking: EventsLoop is !Send and !Sync because of platform-dependant constraints, but Window, WindowId, DeviceId and MonitorId guaranteed to be Send.
  • MonitorId::get_position now 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 EnumDisplayMonitors instead of EnumDisplayDevices. This changes the value returned by MonitorId::get_name().
  • On Windows added MonitorIdExt::hmonitor method
  • Impl Clone for EventsLoopProxy
  • EventsLoop::get_primary_monitor() on X11 will fallback to any available monitor if no primary is found
  • Support for touch event on wayland
  • WindowEvents MouseMoved, MouseEntered, and MouseLeft have been renamed to CursorMoved, CursorEntered, and CursorLeft.
  • New DeviceEvents added, MouseMotion and MouseWheel.
  • Send CursorMoved event after CursorEntered and Focused events.
  • Add support for ModifiersState, MouseMove, MouseInput, MouseMotion for emscripten backend.

Version 0.8.3 (2017-10-11)

  • Fixed issue of calls to set_inner_size blocking on Windows.
  • Mapped ISO_Left_Tab to VirtualKeyCode::Tab to 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::maximized and WindowBuilder::with_maximized.
  • Added Window::set_fullscreen.
  • Changed with_fullscreen to take a Option<MonitorId> instead of a MonitorId.
  • Removed MonitorId::get_native_identifer() in favor of platform-specific traits in the os module.
  • Changed get_available_monitors() and get_primary_monitor() to be methods of EventsLoop instead of stand-alone methods.
  • Changed EventsLoop to be tied to a specific X11 or Wayland connection.
  • Added a os::linux::EventsLoopExt trait that makes it possible to configure the connection.
  • Fixed the emscripten code, which now compiles.
  • Changed the X11 fullscreen code to use xrandr instead of xxf86vm.
  • Fixed the Wayland backend to produce Refresh event after window creation.
  • Changed the Suspended event to be outside of WindowEvent.
  • Fixed the X11 backend sometimes reporting the wrong virtual key (#273).