Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing: use a real terminal in test Test Results view #184963

Merged
merged 12 commits into from
Jun 16, 2023
3 changes: 3 additions & 0 deletions src/vs/base/browser/ui/scrollbar/scrollableElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,9 @@ export abstract class AbstractScrollableElement extends Widget {
}

private _onMouseWheel(e: StandardWheelEvent): void {
if (e.browserEvent?.defaultPrevented) {
return;
}
Comment on lines +376 to +378
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's this change for? Worried about regressions

Copy link
Member Author

@connor4312 connor4312 Jun 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

xterm correctly calls .preventDefault() if a scroll event gets handled by the terminal, but this wasn't respected by the editor. This resulted in scrolling within the terminal when it's shown in the inline peek to scroll the editor when it should instead have just scrolled the terminal.

I'm guessing this is the first time we have something in the editor that manually handles scrolling, so this check was missing.


const classifier = MouseWheelClassifier.INSTANCE;
if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) {
Expand Down
33 changes: 11 additions & 22 deletions src/vs/workbench/contrib/terminal/browser/media/scrollbar.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,54 +3,43 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

.monaco-workbench .editor-instance .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport {
.monaco-workbench .xterm-viewport {
/* Use the hack presented in https://stackoverflow.com/a/38748186/1156119 to get opacity transitions working on the scrollbar */
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
transition: background-color 800ms linear;
}

.monaco-workbench .editor-instance .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport {
.monaco-workbench .xterm-viewport {
scrollbar-width: thin;
}

.monaco-workbench .editor-instance .xterm-viewport::-webkit-scrollbar,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport::-webkit-scrollbar {
.monaco-workbench .xterm-viewport::-webkit-scrollbar {
width: 10px;
}

.monaco-workbench .editor-instance .xterm-viewport::-webkit-scrollbar-track,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport::-webkit-scrollbar-track {
.monaco-workbench .xterm-viewport::-webkit-scrollbar-track {
opacity: 0;
}

.monaco-workbench .editor-instance .xterm-viewport::-webkit-scrollbar-thumb,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport::-webkit-scrollbar-thumb {
.monaco-workbench .xterm-viewport::-webkit-scrollbar-thumb {
min-height: 20px;
background-color: inherit;
}

.monaco-workbench .editor-instance .force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .editor-instance .xterm.focus .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm.focus .xterm-viewport,
.monaco-workbench .editor-instance .xterm:focus .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm:focus .xterm-viewport,
.monaco-workbench .editor-instance .xterm:hover .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm:hover .xterm-viewport {
.monaco-workbench .force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .xterm.focus .xterm-viewport,
.monaco-workbench .xterm:focus .xterm-viewport,
.monaco-workbench .xterm:hover .xterm-viewport {
transition: opacity 100ms linear;
cursor: default;
}

.monaco-workbench .editor-instance .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover,
.monaco-workbench .pane-body.integrated-terminal .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover {
.monaco-workbench .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover {
transition: opacity 0ms linear;
}

.monaco-workbench .editor-instance .xterm .xterm-viewport::-webkit-scrollbar-thumb:window-inactive,
.monaco-workbench .pane-body.integrated-terminal .xterm .xterm-viewport::-webkit-scrollbar-thumb:window-inactive {
.monaco-workbench .xterm .xterm-viewport::-webkit-scrollbar-thumb:window-inactive {
background-color: inherit;
}
65 changes: 30 additions & 35 deletions src/vs/workbench/contrib/terminal/browser/media/terminal.css
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
.monaco-workbench .pane-body.integrated-terminal .terminal-groups-container,
.monaco-workbench .pane-body.integrated-terminal .terminal-group,
.monaco-workbench .pane-body.integrated-terminal .terminal-split-pane,
.monaco-workbench .editor-instance .terminal-split-pane,
.monaco-workbench .editor-instance .terminal-outer-container {
.monaco-workbench .terminal-editor .terminal-split-pane,
.monaco-workbench .terminal-editor .terminal-outer-container {
height: 100%;
}
.monaco-workbench .part.sidebar .pane-body.integrated-terminal .terminal-outer-container,
Expand All @@ -48,7 +48,7 @@
background-color: var(--vscode-terminal-tab-activeBorder);
}
/* Override monaco's styles for terminal editors */
.monaco-workbench .editor-instance .xterm textarea:focus {
.monaco-workbench .terminal-editor .xterm textarea:focus {
opacity: 0 !important;
outline: 0 !important;
}
Expand All @@ -62,20 +62,23 @@
background-image: none !important;
}

.monaco-workbench .editor-instance .terminal-wrapper {
.monaco-workbench .terminal-editor .terminal-wrapper {
background-color: var(--vscode-terminal-background, --vscode-editorPane-background);
}
.monaco-workbench .editor-instance .terminal-wrapper,
.monaco-workbench .terminal-editor .terminal-wrapper,
.monaco-workbench .pane-body.integrated-terminal .terminal-wrapper {
display: block;
height: 100%;
box-sizing: border-box;
}

.monaco-workbench .editor-instance .xterm,
.monaco-workbench .pane-body.integrated-terminal .xterm {
.monaco-workbench .xterm {
/* All terminals have at least 10px left/right edge padding and 2 padding on the bottom (so underscores on last line are visible */
padding: 0 10px 2px;
}

.monaco-workbench .terminal-editor .xterm,
.monaco-workbench .pane-body.integrated-terminal .xterm {
/* Bottom align the terminal within the split pane */
position: absolute;
bottom: 0;
Expand All @@ -88,23 +91,23 @@
top: 0;
}

.monaco-workbench .editor-instance .terminal-wrapper.fixed-dims .xterm,
.monaco-workbench .terminal-editor .terminal-wrapper.fixed-dims .xterm,
.monaco-workbench .pane-body.integrated-terminal .terminal-wrapper.fixed-dims .xterm {
position: static;
}

.monaco-workbench .editor-instance .xterm-viewport,
.monaco-workbench .terminal-editor .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport {
z-index: 30;
}

.monaco-workbench .editor-instance .xterm-decoration-overview-ruler,
.monaco-workbench .terminal-editor .xterm-decoration-overview-ruler,
.monaco-workbench .pane-body.integrated-terminal .xterm-decoration-overview-ruler {
z-index: 31; /* Must be higher than .xterm-viewport */
pointer-events: none;
}

.monaco-workbench .editor-instance .xterm-screen,
.monaco-workbench .terminal-editor .xterm-screen,
.monaco-workbench .pane-body.integrated-terminal .xterm-screen {
z-index: 31;
}
Expand All @@ -127,7 +130,7 @@
.xterm.xterm-cursor-pointer .xterm-screen { cursor: pointer; }
.xterm.column-select.focus .xterm-screen { cursor: crosshair; }

.monaco-workbench .editor-instance .xterm {
.monaco-workbench .terminal-editor .xterm {
padding-left: 20px !important;
}

Expand All @@ -136,34 +139,34 @@
padding-left: 20px !important;
}

.monaco-workbench .editor-instance .terminal-group .monaco-split-view2.horizontal .split-view-view:last-child .xterm,
.monaco-workbench .terminal-editor .terminal-group .monaco-split-view2.horizontal .split-view-view:last-child .xterm,
.monaco-workbench .pane-body.integrated-terminal .terminal-group .monaco-split-view2.horizontal .split-view-view:last-child .xterm {
padding-right: 20px;
}

.monaco-workbench .editor-instance .xterm a:not(.xterm-invalid-link),
.monaco-workbench .terminal-editor .xterm a:not(.xterm-invalid-link),
.monaco-workbench .pane-body.integrated-terminal .xterm a:not(.xterm-invalid-link) {
/* To support message box sizing */
position: relative;
}

.monaco-workbench .editor-instance .terminal-wrapper > div,
.monaco-workbench .terminal-editor .terminal-wrapper > div,
.monaco-workbench .pane-body.integrated-terminal .terminal-wrapper > div {
height: 100%;
}

.monaco-workbench .editor-instance .xterm-viewport,
.monaco-workbench .terminal-editor .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport {
box-sizing: border-box;
}

.monaco-workbench .editor-instance .terminal-wrapper.fixed-dims,
.monaco-workbench .terminal-editor .terminal-wrapper.fixed-dims,
.monaco-workbench .pane-body.integrated-terminal .terminal-wrapper.fixed-dims {
/* The viewport should be positioned against this so it does't conflict with a fixed dimensions terminal horizontal scroll bar*/
position: relative;
}

.monaco-workbench .editor-instance .terminal-wrapper:not(.fixed-dims) .xterm-viewport,
.monaco-workbench .terminal-editor .terminal-wrapper:not(.fixed-dims) .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .terminal-wrapper:not(.fixed-dims) .xterm-viewport {
/* Override xterm.js' width as we want to size the viewport to fill the panel so the scrollbar is on the right edge */
width: auto !important;
Expand Down Expand Up @@ -245,7 +248,7 @@
top: 0;
}

.monaco-workbench .pane-body.integrated-terminal .xterm .xterm-helper-textarea:focus {
.monaco-workbench .xterm .xterm-helper-textarea:focus {
/* Override the general vscode style applies `opacity:1!important` to textareas */
opacity: 0 !important;
}
Expand Down Expand Up @@ -522,34 +525,26 @@
background-color: var(--vscode-terminal-hoverHighlightBackground);
}

.monaco-workbench .editor-instance .force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .editor-instance .xterm.focus .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm.focus .xterm-viewport,
.monaco-workbench .editor-instance .xterm:focus .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm:focus .xterm-viewport,
.monaco-workbench .editor-instance .xterm:hover .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm:hover .xterm-viewport {
.force-scrollbar .xterm .xterm-viewport,
.monaco-workbench .xterm.focus .xterm-viewport,
.monaco-workbench .xterm:focus .xterm-viewport,
.monaco-workbench .xterm:hover .xterm-viewport {
background-color: var(--vscode-scrollbarSlider-background) !important;
}

.monaco-workbench .editor-instance .xterm-viewport,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport {
.monaco-workbench .xterm-viewport {
scrollbar-color: var(--vscode-scrollbarSlider-background) transparent;
}

.monaco-workbench .editor-instance .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover,
.monaco-workbench .pane-body.integrated-terminal .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover {
.monaco-workbench .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover {
background-color: var(--vscode-scrollbarSlider-hoverBackground);
}

.monaco-workbench .editor-instance .xterm-viewport:hover,
.monaco-workbench .pane-body.integrated-terminal .xterm-viewport:hover {
.monaco-workbench .xterm-viewport:hover {
scrollbar-color: var(--vscode-scrollbarSlider-hoverBackground) transparent;
}

.monaco-workbench .editor-instance .xterm .xterm-viewport::-webkit-scrollbar-thumb:active,
.monaco-workbench .pane-body.integrated-terminal .xterm .xterm-viewport::-webkit-scrollbar-thumb:active {
.monaco-workbench .xterm .xterm-viewport::-webkit-scrollbar-thumb:active {
background-color: var(--vscode-scrollbarSlider-activeBackground);
}

Expand Down
Loading