@@ -29,14 +29,15 @@ import { HelperText, HelperTextItem } from "@patternfly/react-core/dist/esm/comp
29
29
import { TextInput } from "@patternfly/react-core/dist/esm/components/TextInput" ;
30
30
import { InputGroup } from "@patternfly/react-core/dist/esm/components/InputGroup" ;
31
31
import { EyeIcon , EyeSlashIcon , PendingIcon , HelpIcon } from "@patternfly/react-icons" ;
32
+ import { ToggleGroup , ToggleGroupItem } from '@patternfly/react-core/dist/esm/components/ToggleGroup' ;
32
33
33
34
import {
34
35
EmptyState , EmptyStateHeader , EmptyStateIcon , EmptyStateBody , EmptyStateFooter , EmptyStateActions
35
36
} from "@patternfly/react-core/dist/esm/components/EmptyState" ;
36
37
import { Split , SplitItem } from "@patternfly/react-core/dist/esm/layouts/Split/index.js" ;
37
38
38
39
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" ;
40
41
41
42
import { Modal , ModalVariant } from "@patternfly/react-core/dist/esm/components/Modal" ;
42
43
import { ModalError } from 'cockpit-components-inline-notification.jsx' ;
@@ -72,10 +73,13 @@ const Enum = {
72
73
73
74
export const useVncState = ( ) => {
74
75
const [ connected , setConnected ] = useState ( true ) ;
76
+ const [ sizeMode , setSizeMode ] = useState ( null ) ;
75
77
76
78
return {
77
79
connected,
78
- setConnected
80
+ setConnected,
81
+ sizeMode,
82
+ setSizeMode,
79
83
} ;
80
84
} ;
81
85
@@ -198,7 +202,7 @@ const VncEditModal = ({ vm, inactive_vnc }) => {
198
202
) ;
199
203
} ;
200
204
201
- export const VncActiveActions = ( { state, vm, vnc, onAddErrorNotification } ) => {
205
+ export const VncActiveActions = ( { state, vm, vnc, isExpanded , onAddErrorNotification } ) => {
202
206
const renderDropdownItem = keyName => {
203
207
return (
204
208
< DropdownItem
@@ -242,11 +246,33 @@ export const VncActiveActions = ({ state, vm, vnc, onAddErrorNotification }) =>
242
246
] ;
243
247
244
248
return (
245
- < KebabDropdown
246
- toggleButtonId = "vnc-actions"
247
- position = 'right'
248
- dropdownItems = { dropdownItems }
249
- />
249
+ < Split >
250
+ < SplitItem >
251
+ < KebabDropdown
252
+ toggleButtonId = "vnc-actions"
253
+ position = 'right'
254
+ dropdownItems = { dropdownItems }
255
+ />
256
+ </ SplitItem >
257
+ { isExpanded &&
258
+ < SplitItem >
259
+ < ToggleGroup >
260
+ < ToggleGroupItem
261
+ text = { _ ( "No scaling or resizing" ) }
262
+ isSelected = { ! state . sizeMode }
263
+ onChange = { ( ) => state . setSizeMode ( null ) } />
264
+ < ToggleGroupItem
265
+ text = { _ ( "Local scaling" ) }
266
+ isSelected = { state . sizeMode == "local" }
267
+ onChange = { ( ) => state . setSizeMode ( "local" ) } />
268
+ < ToggleGroupItem
269
+ text = { _ ( "Remote resizing" ) }
270
+ isSelected = { state . sizeMode == "remote" }
271
+ onChange = { ( ) => state . setSizeMode ( "remote" ) } />
272
+ </ ToggleGroup >
273
+ </ SplitItem >
274
+ }
275
+ </ Split >
250
276
) ;
251
277
} ;
252
278
@@ -398,8 +424,8 @@ export class VncActive extends React.Component {
398
424
onSecurityFailure = { this . onSecurityFailure }
399
425
textConnecting = { _ ( "Connecting" ) }
400
426
consoleContainerId = { isExpanded ? "vnc-display-container-expanded" : "vnc-display-container-minimized" }
401
- resizeSession
402
- scaleViewport
427
+ scaleViewport = { ! isExpanded || state . sizeMode == "local" }
428
+ resizeSession = { ! ! isExpanded && state . sizeMode == "remote" }
403
429
/>
404
430
: < div className = "pf-v5-c-console__vnc" >
405
431
< EmptyState >
0 commit comments