atom / tabs

Tabs in Atom
MIT License
111 stars 118 forks source link

Make tab scrolling settings work #553

Closed 50Wliu closed 5 years ago

50Wliu commented 5 years ago

Requirements

Description of the Change

Where to even start? The tabScrolling setting uses a mixed enum of booleans and strings, and declares its type as any. This should be fine...except that since settings-view determines the value of a setting by looking at the HTML value, all booleans are coerced to strings. Then atom.config.set decides that the new stringified value is not valid as it isn't in the valid list of values for tabScrolling and ignores it. The "fix" is to explicitly declare the enum as having types boolean and string, so that atom.config.set will coerce the stringified boolean back to an actual boolean before checking it against the schema...

Oh, and I also fixed being unable to disable tab scrolling after you enabled it without restarting the tabs package, as the event listener wasn't being removed (function equality). The event listener is now always active but only does anything if the tabScrolling setting is enabled.

Alternate Designs

Fix settings-view, because there's nothing technically wrong with how tabs decided to implement this setting.

Benefits

Changing the tab scrolling setting through settings-view will work again, and tab scrolling can be disabled on the fly.

Possible Drawbacks

None.

Applicable Issues

Fixes #311