Skip to content

Commit 5c152a3

Browse files
committed
consoles: Allow control over scaling and resizing behavior
1 parent 86f5f21 commit 5c152a3

File tree

1 file changed

+36
-19
lines changed

1 file changed

+36
-19
lines changed

src/components/vm/consoles/vnc.jsx

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,17 @@ import cockpit from 'cockpit';
2121

2222
import { VncConsole } from '@patternfly/react-console';
2323
import { Popover } from "@patternfly/react-core/dist/esm/components/Popover";
24-
import { Dropdown, DropdownItem, DropdownList } from "@patternfly/react-core/dist/esm/components/Dropdown";
24+
import { Dropdown, DropdownItem, DropdownList, DropdownGroup } from "@patternfly/react-core/dist/esm/components/Dropdown";
2525
import { MenuToggle } from "@patternfly/react-core/dist/esm/components/MenuToggle";
26-
import { MenuItem, DrilldownMenu } from "@patternfly/react-core/dist/esm/components/Menu";
26+
import { DrilldownMenu } from "@patternfly/react-core/dist/esm/components/Menu";
2727
import { Button } from "@patternfly/react-core/dist/esm/components/Button";
2828
import { Divider } from "@patternfly/react-core/dist/esm/components/Divider";
2929
import { EmptyState, EmptyStateBody, EmptyStateFooter } from "@patternfly/react-core/dist/esm/components/EmptyState";
3030
import { Split, SplitItem } from "@patternfly/react-core/dist/esm/layouts/Split/index.js";
3131
import { DescriptionList, DescriptionListTerm, DescriptionListGroup, DescriptionListDescription } from "@patternfly/react-core/dist/esm/components/DescriptionList";
3232
import { Text, TextContent, TextVariants, TextList, TextListItem, TextListItemVariants, TextListVariants } from "@patternfly/react-core/dist/esm/components/Text";
3333
import { ClipboardCopy } from "@patternfly/react-core/dist/esm/components/ClipboardCopy/index.js";
34+
import { ToggleGroup, ToggleGroupItem } from "@patternfly/react-core/dist/esm/components/ToggleGroup/index.js";
3435

3536
import { useDialogs, DialogsContext } from 'dialogs.jsx';
3637
import { KebabDropdown } from 'cockpit-components-dropdown.jsx';
@@ -227,6 +228,7 @@ class Vnc extends React.Component {
227228
this.state = {
228229
path: undefined,
229230
connected: true,
231+
size_mode: "local",
230232
};
231233

232234
this.connect = this.connect.bind(this);
@@ -289,7 +291,7 @@ class Vnc extends React.Component {
289291
consoleDetail, inactiveConsoleDetail, vm, onAddErrorNotification, isExpanded, connectionAddress,
290292
spiceDetail,
291293
} = this.props;
292-
const { path, connected } = this.state;
294+
const { path, connected, size_mode } = this.state;
293295

294296
function edit_vnc() {
295297
Dialogs.show(<EditVNCModal
@@ -324,9 +326,9 @@ class Vnc extends React.Component {
324326
<DrilldownMenu id="sendkey-menu">
325327
{
326328
[
327-
<MenuItem key="back" itemId="drilldown:sendkey_back" direction="up">
329+
<DropdownItem key="back" itemId="drilldown:sendkey_back" direction="up">
328330
{_("Send key")}
329-
</MenuItem>,
331+
</DropdownItem>,
330332
<Divider key="divider" />,
331333
...['Delete', 'Backspace'].map(key => renderDropdownItem(key)),
332334
<Divider key="separator" />,
@@ -338,18 +340,33 @@ class Vnc extends React.Component {
338340
>
339341
{_("Send key")}
340342
</DropdownItem>,
341-
<DropdownItem
342-
id="vnc-edit"
343-
key="edit"
344-
onClick={edit_vnc}>
345-
{_("Edit VNC server settings")}
346-
</DropdownItem>,
347-
<DropdownItem
348-
id="vnc-disconnect"
349-
key="disconnect"
350-
onClick={() => this.setState({ connected: false })}>
351-
{_("Disconnect")}
352-
</DropdownItem>,
343+
<Divider key="divider3" />,
344+
<DropdownGroup key="scaling" label={_("Scaling and resizing")}>
345+
<DropdownItem isSelected={!size_mode} onClick={() => this.setState({ size_mode: null })}>
346+
{_("No scaling or resizing")}
347+
</DropdownItem>
348+
<DropdownItem isSelected={size_mode == "local"} onClick={() => this.setState({ size_mode: "local" })}>
349+
{_("Local scaling")}
350+
</DropdownItem>
351+
<DropdownItem isSelected={size_mode == "remote"} onClick={() => this.setState({ size_mode: "remote" })}>
352+
{_("Remote resizing")}
353+
</DropdownItem>
354+
</DropdownGroup>,
355+
<Divider key="divider2" />,
356+
<DropdownGroup key="server" label={_("VNC server")}>
357+
<DropdownItem
358+
id="vnc-edit"
359+
key="edit"
360+
onClick={edit_vnc}>
361+
{_("Edit settings")}
362+
</DropdownItem>
363+
<DropdownItem
364+
id="vnc-disconnect"
365+
key="disconnect"
366+
onClick={() => this.setState({ connected: false })}>
367+
{_("Disconnect")}
368+
</DropdownItem>
369+
</DropdownGroup>,
353370
];
354371

355372
const detail = (
@@ -432,8 +449,8 @@ class Vnc extends React.Component {
432449
onInitFailed={this.onInitFailed}
433450
textConnecting={_("Connecting")}
434451
consoleContainerId={isExpanded ? "vnc-display-container-expanded" : "vnc-display-container-minimized"}
435-
resizeSession
436-
scaleViewport
452+
scaleViewport={size_mode == "local"}
453+
resizeSession={size_mode == "remote"}
437454
/>
438455
: <div className="pf-v5-c-console__vnc">
439456
<EmptyState>

0 commit comments

Comments
 (0)