5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 02:01:01 +08:00

Add Show() and Hide() to runtime to show/hide application (#1599)

* Add Show() and Hide() to runtime to show/hide application

* Fix devserver

* Update API docs
This commit is contained in:
Lea Anthony 2022-07-20 20:59:49 +10:00 committed by GitHub
parent b21a92ecdb
commit 29912785fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 173 additions and 20 deletions

View File

@ -36,6 +36,8 @@ void Maximise(void* ctx);
void UnMaximise(void* ctx); void UnMaximise(void* ctx);
void Hide(void* ctx); void Hide(void* ctx);
void Show(void* ctx); void Show(void* ctx);
void HideApplication(void* ctx);
void ShowApplication(void* ctx);
void SetBackgroundColour(void* ctx, int r, int g, int b, int a); void SetBackgroundColour(void* ctx, int r, int g, int b, int a);
void ExecJS(void* ctx, const char*); void ExecJS(void* ctx, const char*);
void Quit(void*); void Quit(void*);

View File

@ -219,6 +219,21 @@ void Show(void *inctx) {
); );
} }
void HideApplication(void *inctx) {
WailsContext *ctx = (__bridge WailsContext*) inctx;
ON_MAIN_THREAD(
[ctx HideApplication];
);
}
void ShowApplication(void *inctx) {
WailsContext *ctx = (__bridge WailsContext*) inctx;
ON_MAIN_THREAD(
[ctx ShowApplication];
);
}
NSString* safeInit(const char* input) { NSString* safeInit(const char* input) {
NSString *result = nil; NSString *result = nil;
if (input != nil) { if (input != nil) {

View File

@ -75,6 +75,8 @@
- (void) ShowMouse; - (void) ShowMouse;
- (void) Hide; - (void) Hide;
- (void) Show; - (void) Show;
- (void) HideApplication;
- (void) ShowApplication;
- (void) Quit; - (void) Quit;
-(void) MessageDialog :(NSString*)dialogType :(NSString*)title :(NSString*)message :(NSString*)button1 :(NSString*)button2 :(NSString*)button3 :(NSString*)button4 :(NSString*)defaultButton :(NSString*)cancelButton :(void*)iconData :(int)iconDataLength; -(void) MessageDialog :(NSString*)dialogType :(NSString*)title :(NSString*)message :(NSString*)button1 :(NSString*)button2 :(NSString*)button3 :(NSString*)button4 :(NSString*)defaultButton :(NSString*)cancelButton :(void*)iconData :(int)iconDataLength;

View File

@ -356,6 +356,16 @@
[NSApp activateIgnoringOtherApps:YES]; [NSApp activateIgnoringOtherApps:YES];
} }
- (void) HideApplication {
[[NSApplication sharedApplication] hide:self];
}
- (void) ShowApplication {
[[NSApplication sharedApplication] unhide:self];
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
}
- (void) Maximise { - (void) Maximise {
if (![self.mainWindow isZoomed]) { if (![self.mainWindow isZoomed]) {
[self.mainWindow zoom:nil]; [self.mainWindow zoom:nil];

View File

@ -194,6 +194,13 @@ func (f *Frontend) WindowShow() {
func (f *Frontend) WindowHide() { func (f *Frontend) WindowHide() {
f.mainWindow.Hide() f.mainWindow.Hide()
} }
func (f *Frontend) Show() {
f.mainWindow.ShowApplication()
}
func (f *Frontend) Hide() {
f.mainWindow.HideApplication()
}
func (f *Frontend) WindowMaximise() { func (f *Frontend) WindowMaximise() {
f.mainWindow.Maximise() f.mainWindow.Maximise()
} }

View File

@ -199,6 +199,13 @@ func (w *Window) Show() {
func (w *Window) Hide() { func (w *Window) Hide() {
C.Hide(w.context) C.Hide(w.context)
} }
func (w *Window) ShowApplication() {
C.ShowApplication(w.context)
}
func (w *Window) HideApplication() {
C.HideApplication(w.context)
}
func parseIntDuo(temp string) (int, int) { func parseIntDuo(temp string) (int, int) {
split := strings.Split(temp, ",") split := strings.Split(temp, ",")

View File

@ -186,6 +186,14 @@ func (f *Frontend) WindowShow() {
func (f *Frontend) WindowHide() { func (f *Frontend) WindowHide() {
f.mainWindow.Hide() f.mainWindow.Hide()
} }
func (f *Frontend) Show() {
f.mainWindow.Show()
}
func (f *Frontend) Hide() {
f.mainWindow.Hide()
}
func (f *Frontend) WindowMaximise() { func (f *Frontend) WindowMaximise() {
f.mainWindow.Maximise() f.mainWindow.Maximise()
} }

View File

@ -7,6 +7,18 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"log"
"net/http"
"net/http/httptest"
"net/url"
"runtime"
"strconv"
"strings"
"sync"
"text/template"
"time"
"github.com/bep/debounce" "github.com/bep/debounce"
"github.com/wailsapp/wails/v2/internal/binding" "github.com/wailsapp/wails/v2/internal/binding"
"github.com/wailsapp/wails/v2/internal/frontend" "github.com/wailsapp/wails/v2/internal/frontend"
@ -19,17 +31,6 @@ import (
"github.com/wailsapp/wails/v2/internal/system/operatingsystem" "github.com/wailsapp/wails/v2/internal/system/operatingsystem"
"github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/windows" "github.com/wailsapp/wails/v2/pkg/options/windows"
"io"
"log"
"net/http"
"net/http/httptest"
"net/url"
"runtime"
"strconv"
"strings"
"sync"
"text/template"
"time"
) )
const startURL = "http://wails.localhost/" const startURL = "http://wails.localhost/"
@ -357,6 +358,14 @@ func (f *Frontend) ScreenGetAll() ([]Screen, error) {
return screens, err return screens, err
} }
func (f *Frontend) Show() {
f.mainWindow.Show()
}
func (f *Frontend) Hide() {
f.mainWindow.Hide()
}
func (f *Frontend) Quit() { func (f *Frontend) Quit() {
if f.frontendOptions.OnBeforeClose != nil && f.frontendOptions.OnBeforeClose(f.ctx) { if f.frontendOptions.OnBeforeClose != nil && f.frontendOptions.OnBeforeClose(f.ctx) {
return return

View File

@ -48,6 +48,14 @@ type DevWebServer struct {
devServerAddr string devServerAddr string
} }
func (d *DevWebServer) Hide() {
d.desktopFrontend.Hide()
}
func (d *DevWebServer) Show() {
d.desktopFrontend.Show()
}
func (d *DevWebServer) WindowSetSystemDefaultTheme() { func (d *DevWebServer) WindowSetSystemDefaultTheme() {
d.desktopFrontend.WindowSetSystemDefaultTheme() d.desktopFrontend.WindowSetSystemDefaultTheme()
} }

View File

@ -2,6 +2,7 @@ package dispatcher
import ( import (
"context" "context"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/wailsapp/wails/v2/internal/binding" "github.com/wailsapp/wails/v2/internal/binding"
"github.com/wailsapp/wails/v2/internal/frontend" "github.com/wailsapp/wails/v2/internal/frontend"
@ -44,6 +45,12 @@ func (d *Dispatcher) ProcessMessage(message string, sender frontend.Frontend) (s
case 'Q': case 'Q':
sender.Quit() sender.Quit()
return "", nil return "", nil
case 'S':
sender.Show()
return "", nil
case 'H':
sender.Hide()
return "", nil
default: default:
return "", errors.New("Unknown message from front end: " + message) return "", errors.New("Unknown message from front end: " + message)
} }

View File

@ -65,6 +65,8 @@ type MessageDialogOptions struct {
type Frontend interface { type Frontend interface {
Run(context.Context) error Run(context.Context) error
Hide()
Show()
Quit() Quit()
// Dialog // Dialog

View File

@ -21,6 +21,14 @@ export function Quit() {
window.WailsInvoke('Q'); window.WailsInvoke('Q');
} }
export function Show() {
window.WailsInvoke('S');
}
export function Hide() {
window.WailsInvoke('H');
}
export function Environment() { export function Environment() {
return Call(":wails:Environment"); return Call(":wails:Environment");
} }
@ -37,6 +45,8 @@ window.runtime = {
EventsEmit, EventsEmit,
EventsOff, EventsOff,
Environment, Environment,
Show,
Hide,
Quit Quit
}; };

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -193,3 +193,11 @@ export function Environment(): Promise<EnvironmentInfo>;
// [Quit](https://wails.io/docs/reference/runtime/intro#quit) // [Quit](https://wails.io/docs/reference/runtime/intro#quit)
// Quits the application. // Quits the application.
export function Quit(): void; export function Quit(): void;
// [Hide](https://wails.io/docs/reference/runtime/intro#hide)
// Hides the application.
export function Hide(): void;
// [Show](https://wails.io/docs/reference/runtime/intro#show)
// Shows the application.
export function Show(): void;

View File

@ -164,3 +164,11 @@ export function Environment() {
export function Quit() { export function Quit() {
window.runtime.Quit(); window.runtime.Quit();
} }
export function Hide() {
window.runtime.Hide();
}
export function Show() {
window.runtime.Show();
}

View File

@ -2,10 +2,11 @@ package runtime
import ( import (
"context" "context"
"github.com/wailsapp/wails/v2/internal/frontend"
"github.com/wailsapp/wails/v2/internal/logger"
"log" "log"
goruntime "runtime" goruntime "runtime"
"github.com/wailsapp/wails/v2/internal/frontend"
"github.com/wailsapp/wails/v2/internal/logger"
) )
const contextError = `An invalid context was passed. This method requires the specific context given in the lifecycle hooks: const contextError = `An invalid context was passed. This method requires the specific context given in the lifecycle hooks:
@ -67,6 +68,24 @@ func Quit(ctx context.Context) {
appFrontend.Quit() appFrontend.Quit()
} }
// Hide the application
func Hide(ctx context.Context) {
if ctx == nil {
log.Fatalf("cannot call Hide: context is nil")
}
appFrontend := getFrontend(ctx)
appFrontend.Hide()
}
// Show the application if it is hidden
func Show(ctx context.Context) {
if ctx == nil {
log.Fatalf("cannot call Show: context is nil")
}
appFrontend := getFrontend(ctx)
appFrontend.Show()
}
// EnvironmentInfo contains information about the environment // EnvironmentInfo contains information about the environment
type EnvironmentInfo struct { type EnvironmentInfo struct {
BuildType string `json:"buildType"` BuildType string `json:"buildType"`

View File

@ -24,6 +24,29 @@ The Javascript library is available to the frontend via the `window.runtime` map
mode that provides Typescript declarations for the runtime. This should be located in the `wailsjs` directory in your mode that provides Typescript declarations for the runtime. This should be located in the `wailsjs` directory in your
frontend directory. frontend directory.
### Hide
Go Signature: `Hide(ctx context.Context)`
Hides the application.
:::info Note
On Mac, this will hide the application in the same way as the `Hide` menu item in standard Mac applications.
This is different to hiding the window, but the application still being in the foreground.
For Windows and Linux, this is currently the same as `WindowHide`.
:::
### Show
Go Signature: `Show(ctx context.Context)`
Shows the application.
:::info Note
On Mac, this will bring the application back into the foreground.
For Windows and Linux, this is currently the same as `WindowShow`.
:::
### Quit ### Quit
Go Signature: `Quit(ctx context.Context)` Go Signature: `Quit(ctx context.Context)`