@@ -21,16 +21,17 @@ import cockpit from 'cockpit';
21
21
22
22
import { VncConsole } from '@patternfly/react-console' ;
23
23
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" ;
25
25
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" ;
27
27
import { Button } from "@patternfly/react-core/dist/esm/components/Button" ;
28
28
import { Divider } from "@patternfly/react-core/dist/esm/components/Divider" ;
29
29
import { EmptyState , EmptyStateBody , EmptyStateFooter } from "@patternfly/react-core/dist/esm/components/EmptyState" ;
30
30
import { Split , SplitItem } from "@patternfly/react-core/dist/esm/layouts/Split/index.js" ;
31
31
import { DescriptionList , DescriptionListTerm , DescriptionListGroup , DescriptionListDescription } from "@patternfly/react-core/dist/esm/components/DescriptionList" ;
32
32
import { Text , TextContent , TextVariants , TextList , TextListItem , TextListItemVariants , TextListVariants } from "@patternfly/react-core/dist/esm/components/Text" ;
33
33
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" ;
34
35
35
36
import { useDialogs , DialogsContext } from 'dialogs.jsx' ;
36
37
import { KebabDropdown } from 'cockpit-components-dropdown.jsx' ;
@@ -227,6 +228,7 @@ class Vnc extends React.Component {
227
228
this . state = {
228
229
path : undefined ,
229
230
connected : true ,
231
+ size_mode : "local" ,
230
232
} ;
231
233
232
234
this . connect = this . connect . bind ( this ) ;
@@ -289,7 +291,7 @@ class Vnc extends React.Component {
289
291
consoleDetail, inactiveConsoleDetail, vm, onAddErrorNotification, isExpanded, connectionAddress,
290
292
spiceDetail,
291
293
} = this . props ;
292
- const { path, connected } = this . state ;
294
+ const { path, connected, size_mode } = this . state ;
293
295
294
296
function edit_vnc ( ) {
295
297
Dialogs . show ( < EditVNCModal
@@ -324,9 +326,9 @@ class Vnc extends React.Component {
324
326
< DrilldownMenu id = "sendkey-menu" >
325
327
{
326
328
[
327
- < MenuItem key = "back" itemId = "drilldown:sendkey_back" direction = "up" >
329
+ < DropdownItem key = "back" itemId = "drilldown:sendkey_back" direction = "up" >
328
330
{ _ ( "Send key" ) }
329
- </ MenuItem > ,
331
+ </ DropdownItem > ,
330
332
< Divider key = "divider" /> ,
331
333
...[ 'Delete' , 'Backspace' ] . map ( key => renderDropdownItem ( key ) ) ,
332
334
< Divider key = "separator" /> ,
@@ -338,18 +340,33 @@ class Vnc extends React.Component {
338
340
>
339
341
{ _ ( "Send key" ) }
340
342
</ 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 > ,
353
370
] ;
354
371
355
372
const detail = (
@@ -432,8 +449,8 @@ class Vnc extends React.Component {
432
449
onInitFailed = { this . onInitFailed }
433
450
textConnecting = { _ ( "Connecting" ) }
434
451
consoleContainerId = { isExpanded ? "vnc-display-container-expanded" : "vnc-display-container-minimized" }
435
- resizeSession
436
- scaleViewport
452
+ scaleViewport = { size_mode == "local" }
453
+ resizeSession = { size_mode == "remote" }
437
454
/>
438
455
: < div className = "pf-v5-c-console__vnc" >
439
456
< EmptyState >
0 commit comments