Skip to content

Commit

Permalink
Remove unwraps in shell text functions
Browse files Browse the repository at this point in the history
  • Loading branch information
cmyr committed Mar 5, 2021
1 parent 46f99ec commit b91c473
Showing 1 changed file with 41 additions and 36 deletions.
77 changes: 41 additions & 36 deletions druid-shell/src/platform/mac/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1099,52 +1099,57 @@ impl WindowHandle {
}

pub fn remove_text_field(&self, token: TextFieldToken) {
let mut state = unsafe {
let view = self.nsview.load().as_ref().unwrap();
let state: *mut c_void = *view.get_ivar("viewState");
&mut (*(state as *mut ViewState))
};
if state.active_text_input == Some(token) {
state.active_text_input = None;
let view = self.nsview.load();
unsafe {
if let Some(view) = (*view).as_ref() {
let state: *mut c_void = *view.get_ivar("viewState");
let state = &mut (*(state as *mut ViewState));
if state.active_text_input == Some(token) {
state.active_text_input = None;
}
}
}
}

pub fn set_focused_text_field(&self, active_field: Option<TextFieldToken>) {
let mut state = unsafe {
let view = self.nsview.load().as_ref().unwrap();
let state: *mut c_void = *view.get_ivar("viewState");
&mut (*(state as *mut ViewState))
};
if let Some(old_field) = state.active_text_input {
self.update_text_field(old_field, Event::Reset);
}
state.active_text_input = active_field;
if let Some(new_field) = active_field {
self.update_text_field(new_field, Event::Reset);
unsafe {
if let Some(view) = self.nsview.load().as_ref() {
let state: *mut c_void = *view.get_ivar("viewState");
let state = &mut (*(state as *mut ViewState));

if let Some(old_field) = state.active_text_input {
self.update_text_field(old_field, Event::Reset);
}
state.active_text_input = active_field;
if let Some(new_field) = active_field {
self.update_text_field(new_field, Event::Reset);
}
}
}
}

pub fn update_text_field(&self, token: TextFieldToken, update: Event) {
let state = unsafe {
unsafe {
let view = self.nsview.load().as_ref().unwrap();
let state: *mut c_void = *view.get_ivar("viewState");
&mut (*(state as *mut ViewState))
};
if state.active_text_input != Some(token) {
return;
}
match update {
Event::LayoutChanged => unsafe {
let input_context: id = msg_send![*self.nsview.load(), inputContext];
let _: () = msg_send![input_context, invalidateCharacterCoordinates];
},
Event::Reset | Event::SelectionChanged => unsafe {
let input_context: id = msg_send![*self.nsview.load(), inputContext];
let _: () = msg_send![input_context, discardMarkedText];
let mut edit_lock = state.handler.acquire_input_lock(token, true);
edit_lock.set_composition_range(None);
state.handler.release_input_lock(token);
},
let state = &mut (*(state as *mut ViewState));

if state.active_text_input != Some(token) {
return;
}
match update {
Event::LayoutChanged => {
let input_context: id = msg_send![*self.nsview.load(), inputContext];
let _: () = msg_send![input_context, invalidateCharacterCoordinates];
}
Event::Reset | Event::SelectionChanged => {
let input_context: id = msg_send![*self.nsview.load(), inputContext];
let _: () = msg_send![input_context, discardMarkedText];
let mut edit_lock = state.handler.acquire_input_lock(token, true);
edit_lock.set_composition_range(None);
state.handler.release_input_lock(token);
}
}
}
}

Expand Down

0 comments on commit b91c473

Please sign in to comment.