Skip to content

Commit a9d5633

Browse files
committed
added WithController option
1 parent 592f054 commit a9d5633

5 files changed

+50
-28
lines changed

virtualization.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,8 @@ func (v *VirtualMachine) Stop() error {
361361
}
362362

363363
type startGraphicApplicationOptions struct {
364-
title string
364+
title string
365+
enableController bool
365366
}
366367

367368
// StartGraphicApplicationOption is an option for display graphics start.
@@ -375,6 +376,14 @@ func WithWindowTitle(title string) StartGraphicApplicationOption {
375376
}
376377
}
377378

379+
// WithController is an option to set virtual machine controller on graphics window toolbar.
380+
func WithController(enable bool) StartGraphicApplicationOption {
381+
return func(sgao *startGraphicApplicationOptions) error {
382+
sgao.enableController = enable
383+
return nil
384+
}
385+
}
386+
378387
// StartGraphicApplication starts an application to display graphics of the VM.
379388
//
380389
// You must to call runtime.LockOSThread before calling this method.
@@ -390,7 +399,14 @@ func (v *VirtualMachine) StartGraphicApplication(width, height float64, opts ...
390399
}
391400
windowTitle := charWithGoString(defaultOpts.title)
392401
defer windowTitle.Free()
393-
C.startVirtualMachineWindow(objc.Ptr(v), v.dispatchQueue, C.double(width), C.double(height), windowTitle.CString())
402+
C.startVirtualMachineWindow(
403+
objc.Ptr(v),
404+
v.dispatchQueue,
405+
C.double(width),
406+
C.double(height),
407+
windowTitle.CString(),
408+
C.bool(defaultOpts.enableController),
409+
)
394410
return nil
395411
}
396412

virtualization_12.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,4 @@ void setKeyboardsVZVirtualMachineConfiguration(void *config,
4545
void setAudioDevicesVZVirtualMachineConfiguration(void *config,
4646
void *audioDevices);
4747

48-
void startVirtualMachineWindow(void *machine, void *queue, double width, double height, const char *title);
48+
void startVirtualMachineWindow(void *machine, void *queue, double width, double height, const char *title, bool enableController);

virtualization_12.m

+3-2
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ void setVZVirtioFileSystemDeviceConfigurationShare(void *config, void *share)
343343
RAISE_UNSUPPORTED_MACOS_EXCEPTION();
344344
}
345345

346-
void startVirtualMachineWindow(void *machine, void *queue, double width, double height, const char *title)
346+
void startVirtualMachineWindow(void *machine, void *queue, double width, double height, const char *title, bool enableController)
347347
{
348348
// Create a shared app instance.
349349
// This will initialize the global variable
@@ -357,7 +357,8 @@ void startVirtualMachineWindow(void *machine, void *queue, double width, double
357357
queue:(dispatch_queue_t)queue
358358
windowWidth:(CGFloat)width
359359
windowHeight:(CGFloat)height
360-
windowTitle:windowTitle] autorelease];
360+
windowTitle:windowTitle
361+
enableController:enableController] autorelease];
361362

362363
NSApp.delegate = appDelegate;
363364
[NSApp run];

virtualization_view.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,6 @@ API_AVAILABLE(macos(12.0))
2929
queue:(dispatch_queue_t)queue
3030
windowWidth:(CGFloat)windowWidth
3131
windowHeight:(CGFloat)windowHeight
32-
windowTitle:(NSString *)windowTitle;
32+
windowTitle:(NSString *)windowTitle
33+
enableController:(BOOL)enableController;
3334
@end

virtualization_view.m

+26-22
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ @implementation AppDelegate {
171171
VZVirtualMachineView *_virtualMachineView;
172172
NSWindow *_window;
173173
NSToolbar *_toolbar;
174+
BOOL _enableController;
174175
// Overlay for pause mode.
175176
NSVisualEffectView *_pauseOverlayView;
176177
// Zoom function properties.
@@ -185,6 +186,7 @@ - (instancetype)initWithVirtualMachine:(VZVirtualMachine *)virtualMachine
185186
windowWidth:(CGFloat)windowWidth
186187
windowHeight:(CGFloat)windowHeight
187188
windowTitle:(NSString *)windowTitle
189+
enableController:(BOOL)enableController
188190
{
189191
self = [super init];
190192
_virtualMachine = virtualMachine;
@@ -206,6 +208,7 @@ - (instancetype)initWithVirtualMachine:(VZVirtualMachine *)virtualMachine
206208
// Setup some window configs
207209
_window = [self createMainWindowWithTitle:windowTitle width:windowWidth height:windowHeight];
208210
_toolbar = [self createCustomToolbar];
211+
_enableController = enableController;
209212
[_virtualMachine addObserver:self
210213
forKeyPath:@"state"
211214
options:NSKeyValueObservingOptionNew
@@ -321,23 +324,31 @@ - (void)hideOverlay
321324
static NSString *const PowerToolbarIdentifier = @"Power";
322325
static NSString *const SpaceToolbarIdentifier = @"Space";
323326

324-
- (void)updateToolbarItems
327+
- (NSArray<NSToolbarItemIdentifier> *)setupToolbarItemIdentifiers
325328
{
326329
NSMutableArray<NSToolbarItemIdentifier> *toolbarItems = [NSMutableArray array];
327-
if ([self canPauseVirtualMachine]) {
328-
[toolbarItems addObject:PauseToolbarIdentifier];
329-
}
330-
if ([self canResumeVirtualMachine]) {
331-
[toolbarItems addObject:SpaceToolbarIdentifier];
332-
[toolbarItems addObject:PlayToolbarIdentifier];
333-
}
334-
if ([self canStopVirtualMachine] || [self canStartVirtualMachine]) {
335-
[toolbarItems addObject:SpaceToolbarIdentifier];
336-
[toolbarItems addObject:PowerToolbarIdentifier];
330+
if (_enableController) {
331+
if ([self canPauseVirtualMachine]) {
332+
[toolbarItems addObject:PauseToolbarIdentifier];
333+
}
334+
if ([self canResumeVirtualMachine]) {
335+
[toolbarItems addObject:SpaceToolbarIdentifier];
336+
[toolbarItems addObject:PlayToolbarIdentifier];
337+
}
338+
if ([self canStopVirtualMachine] || [self canStartVirtualMachine]) {
339+
[toolbarItems addObject:SpaceToolbarIdentifier];
340+
[toolbarItems addObject:PowerToolbarIdentifier];
341+
}
337342
}
338343
[toolbarItems addObject:NSToolbarSpaceItemIdentifier];
339344
[toolbarItems addObject:ZoomToolbarIdentifier];
340345
[toolbarItems addObject:NSToolbarFlexibleSpaceItemIdentifier];
346+
return [toolbarItems copy];
347+
}
348+
349+
- (void)updateToolbarItems
350+
{
351+
NSArray<NSToolbarItemIdentifier> *toolbarItems = [self setupToolbarItemIdentifiers];
341352
[self setToolBarItems:toolbarItems];
342353
}
343354

@@ -467,14 +478,7 @@ - (NSWindow *)createMainWindowWithTitle:(NSString *)title
467478

468479
- (NSArray<NSToolbarItemIdentifier> *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
469480
{
470-
return @[
471-
PauseToolbarIdentifier,
472-
SpaceToolbarIdentifier,
473-
PowerToolbarIdentifier,
474-
NSToolbarSpaceItemIdentifier,
475-
ZoomToolbarIdentifier,
476-
NSToolbarFlexibleSpaceItemIdentifier
477-
];
481+
return [self setupToolbarItemIdentifiers];
478482
}
479483

480484
- (NSArray<NSToolbarItemIdentifier> *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
@@ -526,10 +530,10 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSToolbar
526530
[item setLabel:@"Zoom"];
527531
[item setToolTip:@"Toggle Zoom"];
528532
} else if ([itemIdentifier isEqualToString:SpaceToolbarIdentifier]) {
529-
NSView *spaceView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, 5, 10)] autorelease];
533+
NSView *spaceView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, 2, 10)] autorelease];
530534
item.view = spaceView;
531-
item.minSize = NSMakeSize(2.5, 10);
532-
item.maxSize = NSMakeSize(2.5, 10);
535+
item.minSize = NSMakeSize(1, 10);
536+
item.maxSize = NSMakeSize(1, 10);
533537
}
534538

535539
return item;

0 commit comments

Comments
 (0)