Compare commits

...

7 Commits

Author SHA1 Message Date
Mads Marquart
2ebbfab6a4 Winit version 0.28.7 2023-09-28 00:00:19 +02:00
Mads Marquart
55f60a35b1 Use frame instead of visibleRect (#3043) 2023-09-27 23:41:10 +02:00
Kirill Chibisov
640c51fe6f Winit version 0.28.6 2023-05-14 19:02:10 +03:00
Kirill Chibisov
8e4ef92669 On macOS, fix backspace emission on preedit clear
Fixes: d15feb5cfa (On macOS, fix empty marked text)
2023-05-14 19:02:10 +03:00
Xiaopeng Li
5278441547 Fix device description leak (#2758)
* Fix device description leak

* Update CHANGELOG.md

---------

Co-authored-by: Xiaopeng Li <lixiaopeng.jetspark@bytedance.com>
2023-05-14 19:02:10 +03:00
Kirill Chibisov
340202f842 Winit version 0.28.5 2023-05-06 20:42:05 +03:00
Kirill Chibisov
870e6d1cb2 On macOS, fix key_up being ignored without IME
Fixes: d15feb5cfa (On macOS, fix empty marked text)
2023-05-06 20:42:05 +03:00
6 changed files with 40 additions and 23 deletions

View File

@@ -8,11 +8,25 @@ And please only add new entries to the top of this list, right below the `# Unre
# 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 `Backspace` being emitted when clearing preedit with it.
# 0.28.5
- On macOS, fix `key_up` beind ignored when `Ime` is 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_position` from another thread.
- On macOS, fixed memory leak when getting monitor handle.
# 0.28.3

View File

@@ -1,6 +1,6 @@
[package]
name = "winit"
version = "0.28.4"
version = "0.28.7"
authors = ["The winit contributors", "Pierre Krieger <pierre.krieger1708@gmail.com>"]
description = "Cross-platform window creation library."
edition = "2021"

View File

@@ -6,7 +6,7 @@
```toml
[dependencies]
winit = "0.28.4"
winit = "0.28.7"
```
## [Documentation](https://docs.rs/winit)

View File

@@ -39,21 +39,25 @@ extern_methods!(
}
pub fn display_id(&self) -> u32 {
let device_description = self.deviceDescription();
let key = ns_string!("NSScreenNumber");
// Retrieve the CGDirectDisplayID associated with this screen
//
// SAFETY: The value from @"NSScreenNumber" in deviceDescription is guaranteed
// to be an NSNumber. See documentation for `deviceDescription` for details:
// <https://developer.apple.com/documentation/appkit/nsscreen/1388360-devicedescription?language=objc>
let obj = device_description
.get(ns_string!("NSScreenNumber"))
.expect("failed getting screen display id from device description");
let obj: *const Object = obj;
let obj: *const NSNumber = obj.cast();
let obj: &NSNumber = unsafe { &*obj };
objc2::rc::autoreleasepool(|_| {
let device_description = self.deviceDescription();
obj.as_u32()
// Retrieve the CGDirectDisplayID associated with this screen
//
// SAFETY: The value from @"NSScreenNumber" in deviceDescription is guaranteed
// to be an NSNumber. See documentation for `deviceDescription` for details:
// <https://developer.apple.com/documentation/appkit/nsscreen/1388360-devicedescription?language=objc>
let obj = device_description
.get(key)
.expect("failed getting screen display id from device description");
let obj: *const Object = obj;
let obj: *const NSNumber = obj.cast();
let obj: &NSNumber = unsafe { &*obj };
obj.as_u32()
})
}
#[sel(backingScaleFactor)]

View File

@@ -44,9 +44,6 @@ extern_methods!(
unsafe { msg_send_id![self, inputContext] }
}
#[sel(visibleRect)]
pub fn visibleRect(&self) -> NSRect;
#[sel(hasMarkedText)]
pub fn hasMarkedText(&self) -> bool;

View File

@@ -50,7 +50,7 @@ impl Default for CursorState {
}
}
#[derive(Debug, Eq, PartialEq)]
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
enum ImeState {
/// The IME events are disabled, so only `ReceivedCharacter` is being sent to the user.
Disabled,
@@ -209,7 +209,7 @@ declare_class!(
self.removeTrackingRect(tracking_rect);
}
let rect = self.visibleRect();
let rect = self.frame();
let tracking_rect = self.add_tracking_rect(rect, false);
self.state.tracking_rect = Some(tracking_rect);
}
@@ -221,7 +221,7 @@ declare_class!(
self.removeTrackingRect(tracking_rect);
}
let rect = self.visibleRect();
let rect = self.frame();
let tracking_rect = self.add_tracking_rect(rect, false);
self.state.tracking_rect = Some(tracking_rect);
@@ -481,6 +481,7 @@ declare_class!(
&& !ev_mods.logo();
let characters = get_characters(event, ignore_alt_characters);
let old_ime_state = self.state.ime_state;
self.state.forward_key_to_app = false;
// The `interpretKeyEvents` function might call
@@ -518,7 +519,8 @@ declare_class!(
true
}
ImeState::Preedit => true,
_ => false,
// `key_down` could result in preedit clear, so compare old and current state.
_ => old_ime_state != self.state.ime_state,
};
if !had_ime_input || self.state.forward_key_to_app {
@@ -549,7 +551,7 @@ declare_class!(
self.update_potentially_stale_modifiers(event);
// We want to send keyboard input when we are currently in the ground state.
if self.state.ime_state == ImeState::Ground {
if matches!(self.state.ime_state, ImeState::Ground | ImeState::Disabled) {
#[allow(deprecated)]
self.queue_event(WindowEvent::KeyboardInput {
device_id: DEVICE_ID,