Merge branch 'main' into project-panel-with-new-mouse-events
This commit is contained in:
commit
20e1044d49
46 changed files with 7318 additions and 7059 deletions
|
@ -544,12 +544,23 @@ impl TestAppContext {
|
|||
!prompts.is_empty()
|
||||
}
|
||||
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
pub fn current_window_title(&self, window_id: usize) -> Option<String> {
|
||||
let mut state = self.cx.borrow_mut();
|
||||
let (_, window) = state
|
||||
.presenters_and_platform_windows
|
||||
.get_mut(&window_id)
|
||||
.unwrap();
|
||||
let test_window = window
|
||||
.as_any_mut()
|
||||
.downcast_mut::<platform::test::Window>()
|
||||
.unwrap();
|
||||
test_window.title.clone()
|
||||
}
|
||||
|
||||
pub fn leak_detector(&self) -> Arc<Mutex<LeakDetector>> {
|
||||
self.cx.borrow().leak_detector()
|
||||
}
|
||||
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
pub fn assert_dropped(&self, handle: impl WeakHandle) {
|
||||
self.cx
|
||||
.borrow()
|
||||
|
@ -757,7 +768,7 @@ type SubscriptionCallback = Box<dyn FnMut(&dyn Any, &mut MutableAppContext) -> b
|
|||
type GlobalSubscriptionCallback = Box<dyn FnMut(&dyn Any, &mut MutableAppContext)>;
|
||||
type ObservationCallback = Box<dyn FnMut(&mut MutableAppContext) -> bool>;
|
||||
type FocusObservationCallback = Box<dyn FnMut(&mut MutableAppContext) -> bool>;
|
||||
type GlobalObservationCallback = Box<dyn FnMut(&dyn Any, &mut MutableAppContext)>;
|
||||
type GlobalObservationCallback = Box<dyn FnMut(&mut MutableAppContext)>;
|
||||
type ReleaseObservationCallback = Box<dyn FnOnce(&dyn Any, &mut MutableAppContext)>;
|
||||
type ActionObservationCallback = Box<dyn FnMut(TypeId, &mut MutableAppContext)>;
|
||||
type DeserializeActionCallback = fn(json: &str) -> anyhow::Result<Box<dyn Action>>;
|
||||
|
@ -1272,7 +1283,7 @@ impl MutableAppContext {
|
|||
pub fn observe_global<G, F>(&mut self, mut observe: F) -> Subscription
|
||||
where
|
||||
G: Any,
|
||||
F: 'static + FnMut(&G, &mut MutableAppContext),
|
||||
F: 'static + FnMut(&mut MutableAppContext),
|
||||
{
|
||||
let type_id = TypeId::of::<G>();
|
||||
let id = post_inc(&mut self.next_subscription_id);
|
||||
|
@ -1283,11 +1294,8 @@ impl MutableAppContext {
|
|||
.or_default()
|
||||
.insert(
|
||||
id,
|
||||
Some(
|
||||
Box::new(move |global: &dyn Any, cx: &mut MutableAppContext| {
|
||||
observe(global.downcast_ref().unwrap(), cx)
|
||||
}) as GlobalObservationCallback,
|
||||
),
|
||||
Some(Box::new(move |cx: &mut MutableAppContext| observe(cx))
|
||||
as GlobalObservationCallback),
|
||||
);
|
||||
|
||||
Subscription::GlobalObservation {
|
||||
|
@ -2304,27 +2312,24 @@ impl MutableAppContext {
|
|||
fn handle_global_notification_effect(&mut self, observed_type_id: TypeId) {
|
||||
let callbacks = self.global_observations.lock().remove(&observed_type_id);
|
||||
if let Some(callbacks) = callbacks {
|
||||
if let Some(global) = self.cx.globals.remove(&observed_type_id) {
|
||||
for (id, callback) in callbacks {
|
||||
if let Some(mut callback) = callback {
|
||||
callback(global.as_ref(), self);
|
||||
match self
|
||||
.global_observations
|
||||
.lock()
|
||||
.entry(observed_type_id)
|
||||
.or_default()
|
||||
.entry(id)
|
||||
{
|
||||
collections::btree_map::Entry::Vacant(entry) => {
|
||||
entry.insert(Some(callback));
|
||||
}
|
||||
collections::btree_map::Entry::Occupied(entry) => {
|
||||
entry.remove();
|
||||
}
|
||||
for (id, callback) in callbacks {
|
||||
if let Some(mut callback) = callback {
|
||||
callback(self);
|
||||
match self
|
||||
.global_observations
|
||||
.lock()
|
||||
.entry(observed_type_id)
|
||||
.or_default()
|
||||
.entry(id)
|
||||
{
|
||||
collections::btree_map::Entry::Vacant(entry) => {
|
||||
entry.insert(Some(callback));
|
||||
}
|
||||
collections::btree_map::Entry::Occupied(entry) => {
|
||||
entry.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
self.cx.globals.insert(observed_type_id, global);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3303,6 +3308,13 @@ impl<'a, T: View> ViewContext<'a, T> {
|
|||
self.app.focus(self.window_id, None);
|
||||
}
|
||||
|
||||
pub fn set_window_title(&mut self, title: &str) {
|
||||
let window_id = self.window_id();
|
||||
if let Some((_, window)) = self.presenters_and_platform_windows.get_mut(&window_id) {
|
||||
window.set_title(title);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_model<S, F>(&mut self, build_model: F) -> ModelHandle<S>
|
||||
where
|
||||
S: Entity,
|
||||
|
@ -5723,7 +5735,7 @@ mod tests {
|
|||
let observation_count = Rc::new(RefCell::new(0));
|
||||
let subscription = cx.observe_global::<Global, _>({
|
||||
let observation_count = observation_count.clone();
|
||||
move |_, _| {
|
||||
move |_| {
|
||||
*observation_count.borrow_mut() += 1;
|
||||
}
|
||||
});
|
||||
|
@ -5753,7 +5765,7 @@ mod tests {
|
|||
let observation_count = Rc::new(RefCell::new(0));
|
||||
cx.observe_global::<OtherGlobal, _>({
|
||||
let observation_count = observation_count.clone();
|
||||
move |_, _| {
|
||||
move |_| {
|
||||
*observation_count.borrow_mut() += 1;
|
||||
}
|
||||
})
|
||||
|
@ -6127,7 +6139,7 @@ mod tests {
|
|||
*subscription.borrow_mut() = Some(cx.observe_global::<(), _>({
|
||||
let observation_count = observation_count.clone();
|
||||
let subscription = subscription.clone();
|
||||
move |_, _| {
|
||||
move |_| {
|
||||
subscription.borrow_mut().take();
|
||||
*observation_count.borrow_mut() += 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue