Make ITab an unsealed runtimeclass#8053
Conversation
|
inheritance isn't really a thing people do in winrt... |
|
If you're going to make it a base class, don't name it Is it possible to achieve what you're trying to do with a CRTP mix-in like IINheritable? |
|
I haven't really reviewed this, but I'm doing something silly and similar over here In that branch, both the |
fae2826 to
824c957
Compare
|
For whatever reason, the following crash only occurs with a settings tab: Call StackI get this by doing the following:
What's bizarre is that this only happens with a Settings UI tab, not a Terminal Tab. But all of the submenu logic is in |
824c957 to
c91623c
Compare
|
Good and bad news: the above bug seems to be a XAML Islands bug. It actually repros on the feature branch before this change even goes in effect. So we're just gonna push forward here. |
DHowett
left a comment
There was a problem hiding this comment.
While you're here, can you delete the old Tab.idl?
@zadjii-msft Composition is bad for various reasons, and I don't fully understand it (it requires the creation of a wrapper class, and there's this inner/outer class divide, where the outer class (TabBase) actually delegates to the inner class or something?)... but... doing the ConnectionStateHolder<T> or IInheritable<T> thing is even worse because we'd need to template it (again) so that we could dispatch the events with the right type[1].
[1]: we can't dispatch typed events off a TabBase, because the typed event's first argument is an IInspectable. TabBase would be outside the hierarchy, and not convertible to IInspectable. It's a whole ordeal to get it wired up, and it would require even more new macros like OBSERVABLE_GETSET_MACRO_BUT_WITH_EVENT_TYPE_T.
That raises even MORE questions❗ We should probably consider that a blocking bug for the SUI, right? Since it's pretty trivially reproable, and the severity is the whole app crashes |
zadjii-msft
left a comment
There was a problem hiding this comment.
I'm very concerned about the crash in feature/settings-ui, but this is okay
|
Hello @carlos-zamora! Because this pull request has the p.s. you can customize the way I help with merging this pull request, such as holding this pull request until a specific person approves. Simply @mention me (
|
In preparation for the Settings UI, we needed to make some changes to Tab to abstract out shared, common functionality between different types of tab. This is the result of that work. All code references to the settings have been removed or reverted. Contains changes from #8053, #7802. The messages below only make sense in the context of the Settings UI, which this pull request does not bring in. They do, however, provide valuable information. From #7802 (@leonMSFT): > This PR's goal was to add an option to the `OpenSettings` keybinding to > open the Settings UI in a tab. In order to implement that, a couple of > changes had to be made to `Tab`, specifically: > > - Introduce a tab interface named `ITab` > - Create/Rename two new Tab classes that implement `ITab` called > `SettingsTab` and `TerminalTab` > From #8053: > `TerminalTab` and `SettingsTab` share some implementation details. The > close submenu introduced in #7728 is a good example of functionality > that is consistent across all tabs. This PR transforms `ITab` from an > interface, into an [unsealed runtime class] to de-duplicate some > functionality. Most of the logic from `SettingsTab` was moved there > because I expect the default behavior of a tab to resemble the > `SettingsTab` over a `TerminalTab`. > > ## References > Verified that Close submenu work was transferred over (#7728, #7961, #8010). > > ## Validation Steps Performed > Check close submenu on first/last tab when multiple tabs are open. > > Closes #7969 > > [unsealed runtime class]: https://docs.microsoft.com/en-us/uwp/midl-3/intro#base-classes Co-authored-by: Carlos Zamora <[email protected]>
In preparation for the Settings UI, we needed to make some changes to Tab to abstract out shared, common functionality between different types of tab. This is the result of that work. All code references to the settings have been removed or reverted. Contains changes from #8053, #7802. The messages below only make sense in the context of the Settings UI, which this pull request does not bring in. They do, however, provide valuable information. From #7802 (@leonMSFT): > This PR's goal was to add an option to the `OpenSettings` keybinding to > open the Settings UI in a tab. In order to implement that, a couple of > changes had to be made to `Tab`, specifically: > > - Introduce a tab interface named `ITab` > - Create/Rename two new Tab classes that implement `ITab` called > `SettingsTab` and `TerminalTab` > From #8053: > `TerminalTab` and `SettingsTab` share some implementation details. The > close submenu introduced in #7728 is a good example of functionality > that is consistent across all tabs. This PR transforms `ITab` from an > interface, into an [unsealed runtime class] to de-duplicate some > functionality. Most of the logic from `SettingsTab` was moved there > because I expect the default behavior of a tab to resemble the > `SettingsTab` over a `TerminalTab`. > > ## References > Verified that Close submenu work was transferred over (#7728, #7961, #8010). > > ## Validation Steps Performed > Check close submenu on first/last tab when multiple tabs are open. > > Closes #7969 > > [unsealed runtime class]: https://docs.microsoft.com/en-us/uwp/midl-3/intro#base-classes Co-authored-by: Carlos Zamora <[email protected]>
In preparation for the Settings UI, we needed to make some changes to Tab to abstract out shared, common functionality between different types of tab. This is the result of that work. All code references to the settings have been removed or reverted. Contains changes from #8053, #7802. The messages below only make sense in the context of the Settings UI, which this pull request does not bring in. They do, however, provide valuable information. From #7802 (@leonMSFT): > This PR's goal was to add an option to the `OpenSettings` keybinding to > open the Settings UI in a tab. In order to implement that, a couple of > changes had to be made to `Tab`, specifically: > > - Introduce a tab interface named `ITab` > - Create/Rename two new Tab classes that implement `ITab` called > `SettingsTab` and `TerminalTab` > From #8053: > `TerminalTab` and `SettingsTab` share some implementation details. The > close submenu introduced in #7728 is a good example of functionality > that is consistent across all tabs. This PR transforms `ITab` from an > interface, into an [unsealed runtime class] to de-duplicate some > functionality. Most of the logic from `SettingsTab` was moved there > because I expect the default behavior of a tab to resemble the > `SettingsTab` over a `TerminalTab`. > > ## References > Verified that Close submenu work was transferred over (#7728, #7961, #8010). > > ## Validation Steps Performed > Check close submenu on first/last tab when multiple tabs are open. > > Closes #7969 > > [unsealed runtime class]: https://docs.microsoft.com/en-us/uwp/midl-3/intro#base-classes Co-authored-by: Carlos Zamora <[email protected]>
In preparation for the Settings UI, we needed to make some changes to Tab to abstract out shared, common functionality between different types of tab. This is the result of that work. All code references to the settings have been removed or reverted. Contains changes from #8053, #7802. The messages below only make sense in the context of the Settings UI, which this pull request does not bring in. They do, however, provide valuable information. From #7802 (@leonMSFT): > This PR's goal was to add an option to the `OpenSettings` keybinding to > open the Settings UI in a tab. In order to implement that, a couple of > changes had to be made to `Tab`, specifically: > > - Introduce a tab interface named `ITab` > - Create/Rename two new Tab classes that implement `ITab` called > `SettingsTab` and `TerminalTab` > From #8053: > `TerminalTab` and `SettingsTab` share some implementation details. The > close submenu introduced in #7728 is a good example of functionality > that is consistent across all tabs. This PR transforms `ITab` from an > interface, into an [unsealed runtime class] to de-duplicate some > functionality. Most of the logic from `SettingsTab` was moved there > because I expect the default behavior of a tab to resemble the > `SettingsTab` over a `TerminalTab`. > > ## References > Verified that Close submenu work was transferred over (#7728, #7961, #8010). > > ## Validation Steps Performed > Check close submenu on first/last tab when multiple tabs are open. > > Closes #7969 > > [unsealed runtime class]: https://docs.microsoft.com/en-us/uwp/midl-3/intro#base-classes Co-authored-by: Carlos Zamora <[email protected]> Co-authored-by: Leon Liang <[email protected]> Co-authored-by: Carlos Zamora <[email protected]>

TerminalTabandSettingsTabshare some implementation details. Theclose submenu introduced in #7728 is a good example of functionality
that is consistent across all tabs. This PR transforms
ITabfrom aninterface, into an unsealed runtime class to de-duplicate some
functionality. Most of the logic from
SettingsTabwas moved therebecause I expect the default behavior of a tab to resemble the
SettingsTabover aTerminalTab.References
Verified that Close submenu work was transferred over (#7728, #7961, #8010).
Validation Steps Performed
Check close submenu on first/last tab when multiple tabs are open.
Closes #7969