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:
parent
b21a92ecdb
commit
29912785fa
@ -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*);
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
@ -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];
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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, ",")
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
@ -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;
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
@ -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"`
|
||||||
|
@ -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)`
|
||||||
|
Loading…
Reference in New Issue
Block a user