Skip to content

Commit 1bde77f

Browse files
committed
consoles: Allow control over scaling and resizing behavior
1 parent 1edb67d commit 1bde77f

File tree

3 files changed

+53
-19
lines changed

3 files changed

+53
-19
lines changed

src/components/vm/consoles/consoles.jsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import './consoles.css';
3434

3535
const _ = cockpit.gettext;
3636

37-
export const ConsoleCard = ({ vm, config, type, setType, onAddErrorNotification, isExpanded }) => {
37+
export const ConsoleCard = ({ vm, config, type, setType, sizeMode, setSizeMode, onAddErrorNotification, isExpanded }) => {
3838
const serials = vm.displays && vm.displays.filter(display => display.type == 'pty');
3939
const inactive_serials = vm.inactiveXML.displays && vm.inactiveXML.displays.filter(display => display.type == 'pty');
4040
const vnc = vm.displays && vm.displays.find(display => display.type == 'vnc');
@@ -105,13 +105,15 @@ export const ConsoleCard = ({ vm, config, type, setType, onAddErrorNotification,
105105
if (vnc) {
106106
body = (
107107
<VncActive
108-
type="VncConsole"
109-
vm={vm}
110-
consoleDetail={vnc}
111-
inactiveConsoleDetail={inactive_vnc}
112-
spiceDetail={spice}
113-
onAddErrorNotification={onAddErrorNotification}
114-
isExpanded={isExpanded} />
108+
type="VncConsole"
109+
vm={vm}
110+
consoleDetail={vnc}
111+
inactiveConsoleDetail={inactive_vnc}
112+
spiceDetail={spice}
113+
sizeMode={sizeMode}
114+
setSizeMode={setSizeMode}
115+
onAddErrorNotification={onAddErrorNotification}
116+
isExpanded={isExpanded} />
115117
);
116118
} else if (inactive_vnc) {
117119
body = (

src/components/vm/consoles/vnc.jsx

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ import { HelperText, HelperTextItem } from "@patternfly/react-core/dist/esm/comp
2929
import { TextInput } from "@patternfly/react-core/dist/esm/components/TextInput";
3030
import { InputGroup } from "@patternfly/react-core/dist/esm/components/InputGroup";
3131
import { EyeIcon, EyeSlashIcon, PendingIcon, HelpIcon } from "@patternfly/react-icons";
32+
import { ToggleGroup, ToggleGroupItem } from '@patternfly/react-core/dist/esm/components/ToggleGroup';
3233

3334
import {
3435
EmptyState, EmptyStateHeader, EmptyStateIcon, EmptyStateBody, EmptyStateFooter, EmptyStateActions
3536
} from "@patternfly/react-core/dist/esm/components/EmptyState";
3637
import { Split, SplitItem } from "@patternfly/react-core/dist/esm/layouts/Split/index.js";
3738

3839
import { KebabDropdown } from 'cockpit-components-dropdown.jsx';
39-
import { DropdownItem } from "@patternfly/react-core/dist/esm/components/Dropdown";
40+
import { DropdownItem, DropdownGroup } from "@patternfly/react-core/dist/esm/components/Dropdown";
4041

4142
import { Modal, ModalVariant } from "@patternfly/react-core/dist/esm/components/Modal";
4243
import { ModalError } from 'cockpit-components-inline-notification.jsx';
@@ -189,7 +190,11 @@ const VncEditModal = ({ vm, inactive_vnc }) => {
189190
);
190191
};
191192

192-
const VncFooter = ({ vm, vnc, inactive_vnc, connected, onDisconnect, onAddErrorNotification }) => {
193+
const VncFooter = ({
194+
vm, vnc, inactive_vnc, connected, onDisconnect,
195+
isExpanded, sizeMode, setSizeMode,
196+
onAddErrorNotification
197+
}) => {
193198
const Dialogs = useDialogs();
194199

195200
const renderDropdownItem = keyName => {
@@ -261,6 +266,24 @@ const VncFooter = ({ vm, vnc, inactive_vnc, connected, onDisconnect, onAddErrorN
261266
</Button>
262267
</Popover>
263268
</SplitItem>
269+
{ isExpanded &&
270+
<SplitItem>
271+
<ToggleGroup>
272+
<ToggleGroupItem
273+
text={_("No scaling or resizing")}
274+
isSelected={!sizeMode}
275+
onChange={() => setSizeMode(null)} />
276+
<ToggleGroupItem
277+
text={_("Local scaling")}
278+
isSelected={sizeMode == "local"}
279+
onChange={() => setSizeMode("local")} />
280+
<ToggleGroupItem
281+
text={_("Remote resizing")}
282+
isSelected={sizeMode == "remote"}
283+
onChange={() => setSizeMode("remote")} />
284+
</ToggleGroup>
285+
</SplitItem>
286+
}
264287
<SplitItem>
265288
<KebabDropdown
266289
toggleButtonId="vnc-actions"
@@ -344,7 +367,8 @@ export class VncActive extends React.Component {
344367

345368
render() {
346369
const {
347-
consoleDetail, inactiveConsoleDetail, vm, onAddErrorNotification, isExpanded
370+
consoleDetail, inactiveConsoleDetail, vm, onAddErrorNotification, isExpanded,
371+
sizeMode, setSizeMode,
348372
} = this.props;
349373
const { path, connected } = this.state;
350374

@@ -363,12 +387,15 @@ export class VncActive extends React.Component {
363387

364388
const footer = (
365389
<VncFooter
366-
vm={vm}
367-
vnc={consoleDetail}
368-
inactive_vnc={inactiveConsoleDetail}
369-
connected={connected}
370-
onDisconnect={() => this.setState({ connected: false })}
371-
onAddErrorNotification={onAddErrorNotification} />
390+
vm={vm}
391+
vnc={consoleDetail}
392+
inactive_vnc={inactiveConsoleDetail}
393+
connected={connected}
394+
isExpanded={isExpanded}
395+
sizeMode={sizeMode}
396+
setSizeMode={setSizeMode}
397+
onDisconnect={() => this.setState({ connected: false })}
398+
onAddErrorNotification={onAddErrorNotification} />
372399
);
373400

374401
return (
@@ -387,8 +414,8 @@ export class VncActive extends React.Component {
387414
onSecurityFailure={this.onSecurityFailure}
388415
textConnecting={_("Connecting")}
389416
consoleContainerId={isExpanded ? "vnc-display-container-expanded" : "vnc-display-container-minimized"}
390-
resizeSession
391-
scaleViewport
417+
scaleViewport={!isExpanded || sizeMode == "local"}
418+
resizeSession={!!isExpanded && sizeMode == "remote"}
392419
/>
393420
: <div className="pf-v5-c-console__vnc">
394421
<EmptyState>

src/components/vm/vmDetailsPage.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export const VmDetailsPage = ({
6464
}, []);
6565

6666
const [consoleType, setConsoleType] = useState(null);
67+
const [consoleSizeMode, setConsoleSizeMode] = useState(null);
6768

6869
const vmActionsPageSection = (
6970
<PageSection className="actions-pagesection" variant={PageSectionVariants.light} isWidthLimited>
@@ -95,6 +96,8 @@ export const VmDetailsPage = ({
9596
config={config}
9697
type={consoleType}
9798
setType={setConsoleType}
99+
sizeMode={consoleSizeMode}
100+
setSizeMode={setConsoleSizeMode}
98101
onAddErrorNotification={onAddErrorNotification}
99102
isExpanded />
100103
</Page>
@@ -128,6 +131,8 @@ export const VmDetailsPage = ({
128131
config={config}
129132
type={consoleType}
130133
setType={setConsoleType}
134+
sizeMode={consoleSizeMode}
135+
setSizeMode={setConsoleSizeMode}
131136
onAddErrorNotification={onAddErrorNotification} />
132137
},
133138
{

0 commit comments

Comments
 (0)