mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 19:31:20 +08:00
Feature: WindowToggleMaximise (#1159)
* [windows] Add WindowToggleMaximise * Add mac support * Update docs * [linux] Toggle Maximise
This commit is contained in:
parent
6e8d65e3aa
commit
f059c35d9e
@ -30,6 +30,7 @@ void Fullscreen(void* ctx);
|
||||
void UnFullscreen(void* ctx);
|
||||
void Minimise(void* ctx);
|
||||
void UnMinimise(void* ctx);
|
||||
void ToggleMaximise(void* ctx);
|
||||
void Maximise(void* ctx);
|
||||
void UnMaximise(void* ctx);
|
||||
void Hide(void* ctx);
|
||||
|
@ -156,6 +156,13 @@ void Maximise(void* inctx) {
|
||||
);
|
||||
}
|
||||
|
||||
void ToggleMaximise(void* inctx) {
|
||||
WailsContext *ctx = (__bridge WailsContext*) inctx;
|
||||
ON_MAIN_THREAD(
|
||||
[ctx ToggleMaximise];
|
||||
);
|
||||
}
|
||||
|
||||
const char* GetSize(void *inctx) {
|
||||
WailsContext *ctx = (__bridge WailsContext*) inctx;
|
||||
NSRect frame = [ctx.mainWindow frame];
|
||||
|
@ -67,6 +67,7 @@
|
||||
- (void) Minimise;
|
||||
- (void) UnMinimise;
|
||||
- (void) Maximise;
|
||||
- (void) ToggleMaximise;
|
||||
- (void) UnMaximise;
|
||||
- (void) SetRGBA:(int)r :(int)g :(int)b :(int)a;
|
||||
- (void) HideMouse;
|
||||
|
@ -322,11 +322,6 @@
|
||||
return (mask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen;
|
||||
}
|
||||
|
||||
- (bool) isMaximised {
|
||||
long mask = [self.mainWindow styleMask];
|
||||
return (mask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen;
|
||||
}
|
||||
|
||||
// Fullscreen sets the main window to be fullscreen
|
||||
- (void) Fullscreen {
|
||||
if( ! [self isFullScreen] ) {
|
||||
@ -366,6 +361,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void) ToggleMaximise {
|
||||
[self.mainWindow zoom:nil];
|
||||
}
|
||||
|
||||
- (void) UnMaximise {
|
||||
if ([self.mainWindow isZoomed]) {
|
||||
[self.mainWindow zoom:nil];
|
||||
|
@ -181,6 +181,9 @@ func (f *Frontend) WindowHide() {
|
||||
func (f *Frontend) WindowMaximise() {
|
||||
f.mainWindow.Maximise()
|
||||
}
|
||||
func (f *Frontend) WindowToggleMaximise() {
|
||||
f.mainWindow.ToggleMaximise()
|
||||
}
|
||||
func (f *Frontend) WindowUnmaximise() {
|
||||
f.mainWindow.UnMaximise()
|
||||
}
|
||||
|
@ -154,6 +154,9 @@ func (w *Window) SetTitle(title string) {
|
||||
func (w *Window) Maximise() {
|
||||
C.Maximise(w.context)
|
||||
}
|
||||
func (w *Window) ToggleMaximise() {
|
||||
C.ToggleMaximise(w.context)
|
||||
}
|
||||
|
||||
func (w *Window) UnMaximise() {
|
||||
C.UnMaximise(w.context)
|
||||
|
@ -173,6 +173,9 @@ func (f *Frontend) WindowHide() {
|
||||
func (f *Frontend) WindowMaximise() {
|
||||
f.mainWindow.Maximise()
|
||||
}
|
||||
func (f *Frontend) WindowToggleMaximise() {
|
||||
f.mainWindow.ToggleMaximise()
|
||||
}
|
||||
func (f *Frontend) WindowUnmaximise() {
|
||||
f.mainWindow.UnMaximise()
|
||||
}
|
||||
|
@ -80,6 +80,13 @@ int IsFullscreen(GtkWidget *widget) {
|
||||
return state & GDK_WINDOW_STATE_FULLSCREEN == GDK_WINDOW_STATE_FULLSCREEN;
|
||||
}
|
||||
|
||||
int IsMaximised(GtkWidget *widget) {
|
||||
GdkWindow *gdkwindow = gtk_widget_get_window(widget);
|
||||
GdkWindowState state = gdk_window_get_state(GDK_WINDOW(gdkwindow));
|
||||
return state & GDK_WINDOW_STATE_MAXIMIZED;
|
||||
}
|
||||
|
||||
|
||||
extern void processMessage(char*);
|
||||
|
||||
static void sendMessageToBackend(WebKitUserContentManager *contentManager,
|
||||
@ -673,6 +680,11 @@ func (w *Window) IsFullScreen() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (w *Window) IsMaximised() bool {
|
||||
result := C.IsMaximised(w.asGTKWidget())
|
||||
return result > 0
|
||||
}
|
||||
|
||||
func (w *Window) SetRGBA(r uint8, g uint8, b uint8, a uint8) {
|
||||
data := C.RGBAOptions{
|
||||
r: C.uchar(r),
|
||||
@ -813,3 +825,11 @@ func (w *Window) MessageDialog(dialogOptions frontend.MessageDialogOptions) {
|
||||
}
|
||||
C.ExecuteOnMainThread(C.messageDialog, C.gpointer(&data))
|
||||
}
|
||||
|
||||
func (w *Window) ToggleMaximise() {
|
||||
if w.IsMaximised() {
|
||||
w.UnMaximise()
|
||||
} else {
|
||||
w.Maximise()
|
||||
}
|
||||
}
|
||||
|
@ -199,6 +199,18 @@ func (f *Frontend) WindowMaximise() {
|
||||
f.frontendOptions.WindowStartState = options.Maximised
|
||||
}
|
||||
}
|
||||
func (f *Frontend) WindowToggleMaximise() {
|
||||
runtime.LockOSThread()
|
||||
if !f.hasStarted {
|
||||
return
|
||||
}
|
||||
if f.mainWindow.IsMaximised() {
|
||||
f.WindowUnmaximise()
|
||||
} else {
|
||||
f.WindowMaximise()
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Frontend) WindowUnmaximise() {
|
||||
runtime.LockOSThread()
|
||||
f.mainWindow.Restore()
|
||||
|
@ -207,6 +207,11 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr {
|
||||
return w.Form.WndProc(msg, wparam, lparam)
|
||||
}
|
||||
|
||||
func (w *Window) IsMaximised() bool {
|
||||
style := uint32(w32.GetWindowLong(w.Handle(), w32.GWL_STYLE))
|
||||
return style&w32.WS_MAXIMIZE != 0
|
||||
}
|
||||
|
||||
// TODO this should be put into the winc if we are happy with this solution.
|
||||
var (
|
||||
modkernel32 = syscall.NewLazyDLL("dwmapi.dll")
|
||||
|
@ -187,6 +187,10 @@ func (d *DevWebServer) WindowMaximise() {
|
||||
d.desktopFrontend.WindowMaximise()
|
||||
}
|
||||
|
||||
func (d *DevWebServer) WindowToggleMaximise() {
|
||||
d.desktopFrontend.WindowToggleMaximise()
|
||||
}
|
||||
|
||||
func (d *DevWebServer) WindowUnmaximise() {
|
||||
d.desktopFrontend.WindowUnmaximise()
|
||||
}
|
||||
|
@ -55,6 +55,8 @@ func (d *Dispatcher) processWindowMessage(message string, sender frontend.Fronte
|
||||
go sender.WindowSetRGBA(&rgba)
|
||||
case 'M':
|
||||
go sender.WindowMaximise()
|
||||
case 't':
|
||||
go sender.WindowToggleMaximise()
|
||||
case 'U':
|
||||
go sender.WindowUnmaximise()
|
||||
case 'm':
|
||||
|
@ -72,6 +72,7 @@ type Frontend interface {
|
||||
WindowShow()
|
||||
WindowHide()
|
||||
WindowCenter()
|
||||
WindowToggleMaximise()
|
||||
WindowMaximise()
|
||||
WindowUnmaximise()
|
||||
WindowMinimise()
|
||||
|
@ -146,6 +146,15 @@ export function WindowMaximise() {
|
||||
window.WailsInvoke('WM');
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the Maximise of the Window
|
||||
*
|
||||
* @export
|
||||
*/
|
||||
export function WindowToggleMaximise() {
|
||||
window.WailsInvoke('Wt');
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmaximise the Window
|
||||
*
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -65,6 +65,8 @@ export interface runtime {
|
||||
|
||||
WindowMaximise(): void;
|
||||
|
||||
WindowToggleMaximise(): void;
|
||||
|
||||
WindowUnmaximise(): void;
|
||||
|
||||
WindowMinimise(): void;
|
||||
|
@ -1 +1 @@
|
||||
(()=>{var d=Object.defineProperty;var m=n=>d(n,"__esModule",{value:!0});var t=(n,i)=>{m(n);for(var o in i)d(n,o,{get:i[o],enumerable:!0})};var e={};t(e,{LogDebug:()=>c,LogError:()=>x,LogFatal:()=>s,LogInfo:()=>W,LogTrace:()=>p,LogWarning:()=>f});function p(n){window.runtime.LogTrace(n)}function c(n){window.runtime.LogDebug(n)}function W(n){window.runtime.LogInfo(n)}function f(n){window.runtime.LogWarning(n)}function x(n){window.runtime.LogError(n)}function s(n){window.runtime.LogFatal(n)}var w={};t(w,{EventsEmit:()=>g,EventsOn:()=>a,EventsOnMultiple:()=>l,EventsOnce:()=>S});function l(n,i,o){window.runtime.EventsOnMultiple(n,i,o)}function a(n,i){OnMultiple(n,i,-1)}function S(n,i){OnMultiple(n,i,1)}function g(n){let i=[n].slice.call(arguments);return window.runtime.EventsEmit.apply(null,i)}var r={};t(r,{WindowCenter:()=>M,WindowFullscreen:()=>v,WindowGetPosition:()=>B,WindowGetSize:()=>O,WindowHide:()=>P,WindowMaximise:()=>b,WindowMinimise:()=>A,WindowReload:()=>L,WindowSetMaxSize:()=>F,WindowSetMinSize:()=>G,WindowSetPosition:()=>R,WindowSetRGBA:()=>D,WindowSetSize:()=>U,WindowSetTitle:()=>E,WindowShow:()=>T,WindowUnFullscreen:()=>z,WindowUnmaximise:()=>h,WindowUnminimise:()=>C});function L(){window.runtime.WindowReload()}function M(){window.runtime.WindowCenter()}function E(n){window.runtime.WindowSetTitle(n)}function v(){window.runtime.WindowFullscreen()}function z(){window.runtime.WindowUnFullscreen()}function O(){window.runtime.WindowGetSize()}function U(n,i){window.runtime.WindowSetSize(n,i)}function F(n,i){window.runtime.WindowSetMaxSize(n,i)}function G(n,i){window.runtime.WindowSetMinSize(n,i)}function R(n,i){window.runtime.WindowSetPosition(n,i)}function B(){window.runtime.WindowGetPosition()}function P(){window.runtime.WindowHide()}function T(){window.runtime.WindowShow()}function b(){window.runtime.WindowMaximise()}function h(){window.runtime.WindowUnmaximise()}function A(){window.runtime.WindowMinimise()}function C(){window.runtime.WindowUnminimise()}function D(n){window.runtime.WindowSetRGBA(n)}var u={};t(u,{BrowserOpenURL:()=>H});function H(n){window.runtime.BrowserOpenURL(n)}function I(){window.runtime.Quit()}var y={...e,...w,...r,...u,Quit:I};})();
|
||||
(()=>{var d=Object.defineProperty;var m=n=>d(n,"__esModule",{value:!0});var e=(n,i)=>{m(n);for(var o in i)d(n,o,{get:i[o],enumerable:!0})};var t={};e(t,{LogDebug:()=>W,LogError:()=>f,LogFatal:()=>s,LogInfo:()=>c,LogTrace:()=>p,LogWarning:()=>x});function p(n){window.runtime.LogTrace(n)}function W(n){window.runtime.LogDebug(n)}function c(n){window.runtime.LogInfo(n)}function x(n){window.runtime.LogWarning(n)}function f(n){window.runtime.LogError(n)}function s(n){window.runtime.LogFatal(n)}var w={};e(w,{EventsEmit:()=>S,EventsOn:()=>a,EventsOnMultiple:()=>l,EventsOnce:()=>g});function l(n,i,o){window.runtime.EventsOnMultiple(n,i,o)}function a(n,i){OnMultiple(n,i,-1)}function g(n,i){OnMultiple(n,i,1)}function S(n){let i=[n].slice.call(arguments);return window.runtime.EventsEmit.apply(null,i)}var r={};e(r,{WindowCenter:()=>M,WindowFullscreen:()=>v,WindowGetPosition:()=>T,WindowGetSize:()=>O,WindowHide:()=>B,WindowMaximise:()=>b,WindowMinimise:()=>C,WindowReload:()=>L,WindowSetMaxSize:()=>F,WindowSetMinSize:()=>G,WindowSetPosition:()=>R,WindowSetRGBA:()=>H,WindowSetSize:()=>U,WindowSetTitle:()=>E,WindowShow:()=>P,WindowToggleMaximise:()=>h,WindowUnFullscreen:()=>z,WindowUnmaximise:()=>A,WindowUnminimise:()=>D});function L(){window.runtime.WindowReload()}function M(){window.runtime.WindowCenter()}function E(n){window.runtime.WindowSetTitle(n)}function v(){window.runtime.WindowFullscreen()}function z(){window.runtime.WindowUnFullscreen()}function O(){window.runtime.WindowGetSize()}function U(n,i){window.runtime.WindowSetSize(n,i)}function F(n,i){window.runtime.WindowSetMaxSize(n,i)}function G(n,i){window.runtime.WindowSetMinSize(n,i)}function R(n,i){window.runtime.WindowSetPosition(n,i)}function T(){window.runtime.WindowGetPosition()}function B(){window.runtime.WindowHide()}function P(){window.runtime.WindowShow()}function b(){window.runtime.WindowMaximise()}function h(){window.runtime.WindowToggleMaximise()}function A(){window.runtime.WindowUnmaximise()}function C(){window.runtime.WindowMinimise()}function D(){window.runtime.WindowUnminimise()}function H(n){window.runtime.WindowSetRGBA(n)}var u={};e(u,{BrowserOpenURL:()=>I});function I(n){window.runtime.BrowserOpenURL(n)}function Q(){window.runtime.Quit()}var j={...t,...w,...r,...u,Quit:Q};})();
|
||||
|
@ -149,6 +149,15 @@ export function WindowMaximise() {
|
||||
window.runtime.WindowMaximise();
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle the Maximise of the Window
|
||||
*
|
||||
* @export
|
||||
*/
|
||||
export function WindowToggleMaximise() {
|
||||
window.runtime.WindowToggleMaximise();
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmaximise the Window
|
||||
*
|
||||
|
@ -88,6 +88,12 @@ func WindowMaximise(ctx context.Context) {
|
||||
appFrontend.WindowMaximise()
|
||||
}
|
||||
|
||||
// WindowToggleMaximise the window
|
||||
func WindowToggleMaximise(ctx context.Context) {
|
||||
appFrontend := getFrontend(ctx)
|
||||
appFrontend.WindowToggleMaximise()
|
||||
}
|
||||
|
||||
// WindowUnmaximise the window
|
||||
func WindowUnmaximise(ctx context.Context) {
|
||||
appFrontend := getFrontend(ctx)
|
||||
|
@ -119,6 +119,13 @@ JS Signature: `WindowUnmaximise()`
|
||||
|
||||
Restores the window to the dimensions and position prior to maximising.
|
||||
|
||||
### WindowToggleMaximise
|
||||
Go Signature: `WindowToggleMaximise(ctx context.Context)`
|
||||
|
||||
JS Signature: `WindowToggleMaximise()`
|
||||
|
||||
Toggles between Maximised and UnMaximised.
|
||||
|
||||
### WindowMinimise
|
||||
Go Signature: `WindowMinimise(ctx context.Context)`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user