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.
5.4 KiB
5.4 KiB
Unreleased
- 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.
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).