Minimize window id usage
This commit is contained in:
parent
afd89b256a
commit
8e49d1419a
4 changed files with 38 additions and 37 deletions
|
@ -477,10 +477,10 @@ pub struct AppContext {
|
||||||
focus_observations: CallbackCollection<usize, FocusObservationCallback>,
|
focus_observations: CallbackCollection<usize, FocusObservationCallback>,
|
||||||
release_observations: CallbackCollection<usize, ReleaseObservationCallback>,
|
release_observations: CallbackCollection<usize, ReleaseObservationCallback>,
|
||||||
action_dispatch_observations: CallbackCollection<(), ActionObservationCallback>,
|
action_dispatch_observations: CallbackCollection<(), ActionObservationCallback>,
|
||||||
window_activation_observations: CallbackCollection<usize, WindowActivationCallback>,
|
window_activation_observations: CallbackCollection<AnyWindowHandle, WindowActivationCallback>,
|
||||||
window_fullscreen_observations: CallbackCollection<usize, WindowFullscreenCallback>,
|
window_fullscreen_observations: CallbackCollection<AnyWindowHandle, WindowFullscreenCallback>,
|
||||||
window_bounds_observations: CallbackCollection<usize, WindowBoundsCallback>,
|
window_bounds_observations: CallbackCollection<AnyWindowHandle, WindowBoundsCallback>,
|
||||||
keystroke_observations: CallbackCollection<usize, KeystrokeCallback>,
|
keystroke_observations: CallbackCollection<AnyWindowHandle, KeystrokeCallback>,
|
||||||
active_labeled_task_observations: CallbackCollection<(), ActiveLabeledTasksCallback>,
|
active_labeled_task_observations: CallbackCollection<(), ActiveLabeledTasksCallback>,
|
||||||
|
|
||||||
foreground: Rc<executor::Foreground>,
|
foreground: Rc<executor::Foreground>,
|
||||||
|
@ -1460,7 +1460,7 @@ impl AppContext {
|
||||||
|
|
||||||
let mut refreshing = false;
|
let mut refreshing = false;
|
||||||
let mut updated_windows = HashSet::default();
|
let mut updated_windows = HashSet::default();
|
||||||
let mut focus_effects = HashMap::<usize, FocusEffect>::default();
|
let mut focus_effects = HashMap::<AnyWindowHandle, FocusEffect>::default();
|
||||||
loop {
|
loop {
|
||||||
self.remove_dropped_entities();
|
self.remove_dropped_entities();
|
||||||
if let Some(effect) = self.pending_effects.pop_front() {
|
if let Some(effect) = self.pending_effects.pop_front() {
|
||||||
|
@ -1538,13 +1538,13 @@ impl AppContext {
|
||||||
|
|
||||||
Effect::Focus(mut effect) => {
|
Effect::Focus(mut effect) => {
|
||||||
if focus_effects
|
if focus_effects
|
||||||
.get(&effect.window().id())
|
.get(&effect.window())
|
||||||
.map_or(false, |prev_effect| prev_effect.is_forced())
|
.map_or(false, |prev_effect| prev_effect.is_forced())
|
||||||
{
|
{
|
||||||
effect.force();
|
effect.force();
|
||||||
}
|
}
|
||||||
|
|
||||||
focus_effects.insert(effect.window().id(), effect);
|
focus_effects.insert(effect.window(), effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
Effect::FocusObservation {
|
Effect::FocusObservation {
|
||||||
|
@ -1577,7 +1577,7 @@ impl AppContext {
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
} => self.window_activation_observations.add_callback(
|
} => self.window_activation_observations.add_callback(
|
||||||
window.id(),
|
window,
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
),
|
),
|
||||||
|
@ -1586,7 +1586,7 @@ impl AppContext {
|
||||||
if self.handle_window_activation_effect(window, is_active) && is_active
|
if self.handle_window_activation_effect(window, is_active) && is_active
|
||||||
{
|
{
|
||||||
focus_effects
|
focus_effects
|
||||||
.entry(window.id())
|
.entry(window)
|
||||||
.or_insert_with(|| FocusEffect::View {
|
.or_insert_with(|| FocusEffect::View {
|
||||||
window,
|
window,
|
||||||
view_id: self
|
view_id: self
|
||||||
|
@ -1603,7 +1603,7 @@ impl AppContext {
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
} => self.window_fullscreen_observations.add_callback(
|
} => self.window_fullscreen_observations.add_callback(
|
||||||
window.id(),
|
window,
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
),
|
),
|
||||||
|
@ -1618,7 +1618,7 @@ impl AppContext {
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
} => self.window_bounds_observations.add_callback(
|
} => self.window_bounds_observations.add_callback(
|
||||||
window.id(),
|
window,
|
||||||
subscription_id,
|
subscription_id,
|
||||||
callback,
|
callback,
|
||||||
),
|
),
|
||||||
|
@ -1718,10 +1718,10 @@ impl AppContext {
|
||||||
let root_view_id = cx.window.root_view().id();
|
let root_view_id = cx.window.root_view().id();
|
||||||
if focused_view_id != root_view_id
|
if focused_view_id != root_view_id
|
||||||
&& !cx.views.contains_key(&(window, focused_view_id))
|
&& !cx.views.contains_key(&(window, focused_view_id))
|
||||||
&& !focus_effects.contains_key(&window.id())
|
&& !focus_effects.contains_key(&window)
|
||||||
{
|
{
|
||||||
focus_effects.insert(
|
focus_effects.insert(
|
||||||
window.id(),
|
window,
|
||||||
FocusEffect::View {
|
FocusEffect::View {
|
||||||
window,
|
window,
|
||||||
view_id: Some(root_view_id),
|
view_id: Some(root_view_id),
|
||||||
|
@ -1860,12 +1860,12 @@ impl AppContext {
|
||||||
cx.window.is_fullscreen = is_fullscreen;
|
cx.window.is_fullscreen = is_fullscreen;
|
||||||
|
|
||||||
let mut fullscreen_observations = cx.window_fullscreen_observations.clone();
|
let mut fullscreen_observations = cx.window_fullscreen_observations.clone();
|
||||||
fullscreen_observations.emit(window.id(), |callback| callback(is_fullscreen, cx));
|
fullscreen_observations.emit(window, |callback| callback(is_fullscreen, cx));
|
||||||
|
|
||||||
if let Some(uuid) = cx.window_display_uuid() {
|
if let Some(uuid) = cx.window_display_uuid() {
|
||||||
let bounds = cx.window_bounds();
|
let bounds = cx.window_bounds();
|
||||||
let mut bounds_observations = cx.window_bounds_observations.clone();
|
let mut bounds_observations = cx.window_bounds_observations.clone();
|
||||||
bounds_observations.emit(window.id(), |callback| callback(bounds, uuid, cx));
|
bounds_observations.emit(window, |callback| callback(bounds, uuid, cx));
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(())
|
Some(())
|
||||||
|
@ -1881,7 +1881,7 @@ impl AppContext {
|
||||||
) {
|
) {
|
||||||
self.update_window(window, |cx| {
|
self.update_window(window, |cx| {
|
||||||
let mut observations = cx.keystroke_observations.clone();
|
let mut observations = cx.keystroke_observations.clone();
|
||||||
observations.emit(window.id(), move |callback| {
|
observations.emit(window, move |callback| {
|
||||||
callback(&keystroke, &result, handled_by.as_ref(), cx)
|
callback(&keystroke, &result, handled_by.as_ref(), cx)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1895,7 +1895,7 @@ impl AppContext {
|
||||||
cx.window.is_active = active;
|
cx.window.is_active = active;
|
||||||
|
|
||||||
let mut observations = cx.window_activation_observations.clone();
|
let mut observations = cx.window_activation_observations.clone();
|
||||||
observations.emit(window.id(), |callback| callback(active, cx));
|
observations.emit(window, |callback| callback(active, cx));
|
||||||
true
|
true
|
||||||
})
|
})
|
||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
|
@ -1989,7 +1989,7 @@ impl AppContext {
|
||||||
let bounds = cx.window_bounds();
|
let bounds = cx.window_bounds();
|
||||||
cx.window_bounds_observations
|
cx.window_bounds_observations
|
||||||
.clone()
|
.clone()
|
||||||
.emit(window.id(), move |callback| {
|
.emit(window, move |callback| {
|
||||||
callback(bounds, display, cx);
|
callback(bounds, display, cx);
|
||||||
true
|
true
|
||||||
});
|
});
|
||||||
|
@ -4038,12 +4038,12 @@ impl AnyWindowHandle {
|
||||||
#[cfg(any(test, feature = "test-support"))]
|
#[cfg(any(test, feature = "test-support"))]
|
||||||
pub fn simulate_activation(&self, cx: &mut TestAppContext) {
|
pub fn simulate_activation(&self, cx: &mut TestAppContext) {
|
||||||
self.update(cx, |cx| {
|
self.update(cx, |cx| {
|
||||||
let other_window_ids = cx
|
let other_windows = cx
|
||||||
.windows()
|
.windows()
|
||||||
.filter(|window| *window != *self)
|
.filter(|window| *window != *self)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
for window in other_window_ids {
|
for window in other_windows {
|
||||||
cx.window_changed_active_status(window, false)
|
cx.window_changed_active_status(window, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4243,10 +4243,6 @@ impl AnyViewHandle {
|
||||||
self.window
|
self.window
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn window_id(&self) -> usize {
|
|
||||||
self.window.id()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn id(&self) -> usize {
|
pub fn id(&self) -> usize {
|
||||||
self.view_id
|
self.view_id
|
||||||
}
|
}
|
||||||
|
@ -4660,10 +4656,16 @@ pub enum Subscription {
|
||||||
GlobalSubscription(callback_collection::Subscription<TypeId, GlobalSubscriptionCallback>),
|
GlobalSubscription(callback_collection::Subscription<TypeId, GlobalSubscriptionCallback>),
|
||||||
GlobalObservation(callback_collection::Subscription<TypeId, GlobalObservationCallback>),
|
GlobalObservation(callback_collection::Subscription<TypeId, GlobalObservationCallback>),
|
||||||
FocusObservation(callback_collection::Subscription<usize, FocusObservationCallback>),
|
FocusObservation(callback_collection::Subscription<usize, FocusObservationCallback>),
|
||||||
WindowActivationObservation(callback_collection::Subscription<usize, WindowActivationCallback>),
|
WindowActivationObservation(
|
||||||
WindowFullscreenObservation(callback_collection::Subscription<usize, WindowFullscreenCallback>),
|
callback_collection::Subscription<AnyWindowHandle, WindowActivationCallback>,
|
||||||
WindowBoundsObservation(callback_collection::Subscription<usize, WindowBoundsCallback>),
|
),
|
||||||
KeystrokeObservation(callback_collection::Subscription<usize, KeystrokeCallback>),
|
WindowFullscreenObservation(
|
||||||
|
callback_collection::Subscription<AnyWindowHandle, WindowFullscreenCallback>,
|
||||||
|
),
|
||||||
|
WindowBoundsObservation(
|
||||||
|
callback_collection::Subscription<AnyWindowHandle, WindowBoundsCallback>,
|
||||||
|
),
|
||||||
|
KeystrokeObservation(callback_collection::Subscription<AnyWindowHandle, KeystrokeCallback>),
|
||||||
ReleaseObservation(callback_collection::Subscription<usize, ReleaseObservationCallback>),
|
ReleaseObservation(callback_collection::Subscription<usize, ReleaseObservationCallback>),
|
||||||
ActionObservation(callback_collection::Subscription<(), ActionObservationCallback>),
|
ActionObservation(callback_collection::Subscription<(), ActionObservationCallback>),
|
||||||
ActiveLabeledTasksObservation(
|
ActiveLabeledTasksObservation(
|
||||||
|
|
|
@ -326,7 +326,7 @@ impl<'a> WindowContext<'a> {
|
||||||
});
|
});
|
||||||
Subscription::WindowActivationObservation(
|
Subscription::WindowActivationObservation(
|
||||||
self.window_activation_observations
|
self.window_activation_observations
|
||||||
.subscribe(handle.id(), subscription_id),
|
.subscribe(handle, subscription_id),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ impl<'a> WindowContext<'a> {
|
||||||
});
|
});
|
||||||
Subscription::WindowActivationObservation(
|
Subscription::WindowActivationObservation(
|
||||||
self.window_activation_observations
|
self.window_activation_observations
|
||||||
.subscribe(window.id(), subscription_id),
|
.subscribe(window, subscription_id),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ impl<'a> WindowContext<'a> {
|
||||||
});
|
});
|
||||||
Subscription::WindowBoundsObservation(
|
Subscription::WindowBoundsObservation(
|
||||||
self.window_bounds_observations
|
self.window_bounds_observations
|
||||||
.subscribe(window.id(), subscription_id),
|
.subscribe(window, subscription_id),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,10 +374,10 @@ impl<'a> WindowContext<'a> {
|
||||||
let window = self.window_handle;
|
let window = self.window_handle;
|
||||||
let subscription_id = post_inc(&mut self.next_subscription_id);
|
let subscription_id = post_inc(&mut self.next_subscription_id);
|
||||||
self.keystroke_observations
|
self.keystroke_observations
|
||||||
.add_callback(window.id(), subscription_id, Box::new(callback));
|
.add_callback(window, subscription_id, Box::new(callback));
|
||||||
Subscription::KeystrokeObservation(
|
Subscription::KeystrokeObservation(
|
||||||
self.keystroke_observations
|
self.keystroke_observations
|
||||||
.subscribe(window.id(), subscription_id),
|
.subscribe(window, subscription_id),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -882,7 +882,7 @@ impl platform::Window for Window {
|
||||||
|
|
||||||
fn is_topmost_for_position(&self, position: Vector2F) -> bool {
|
fn is_topmost_for_position(&self, position: Vector2F) -> bool {
|
||||||
let self_borrow = self.0.borrow();
|
let self_borrow = self.0.borrow();
|
||||||
let self_id = self_borrow.handle;
|
let self_handle = self_borrow.handle;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let app = NSApplication::sharedApplication(nil);
|
let app = NSApplication::sharedApplication(nil);
|
||||||
|
@ -899,8 +899,8 @@ impl platform::Window for Window {
|
||||||
let is_panel: BOOL = msg_send![top_most_window, isKindOfClass: PANEL_CLASS];
|
let is_panel: BOOL = msg_send![top_most_window, isKindOfClass: PANEL_CLASS];
|
||||||
let is_window: BOOL = msg_send![top_most_window, isKindOfClass: WINDOW_CLASS];
|
let is_window: BOOL = msg_send![top_most_window, isKindOfClass: WINDOW_CLASS];
|
||||||
if is_panel == YES || is_window == YES {
|
if is_panel == YES || is_window == YES {
|
||||||
let topmost_window_id = get_window_state(&*top_most_window).borrow().handle;
|
let topmost_window = get_window_state(&*top_most_window).borrow().handle;
|
||||||
topmost_window_id == self_id
|
topmost_window == self_handle
|
||||||
} else {
|
} else {
|
||||||
// Someone else's window is on top
|
// Someone else's window is on top
|
||||||
false
|
false
|
||||||
|
|
|
@ -192,7 +192,6 @@ where
|
||||||
F: FnOnce(&mut gpui::ViewContext<V>) -> D,
|
F: FnOnce(&mut gpui::ViewContext<V>) -> D,
|
||||||
{
|
{
|
||||||
const TITLEBAR_HEIGHT: f32 = 28.;
|
const TITLEBAR_HEIGHT: f32 = 28.;
|
||||||
// let active = cx.window_is_active(cx.window_id());
|
|
||||||
|
|
||||||
Flex::column()
|
Flex::column()
|
||||||
.with_child(
|
.with_child(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue