mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-21 16:38:23 +01:00
fix initial size of windows (#1011)
This commit is contained in:
parent
f3e0ba8148
commit
3d2d68bc73
@ -253,11 +253,7 @@ async function handleWSEvent(evtMsg: WSEventType) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function mainResizeHandler(_: any, windowId: string, win: WaveBrowserWindow) {
|
async function persistWindowBounds(windowId: string, bounds: electron.Rectangle) {
|
||||||
if (win == null || win.isDestroyed() || win.fullScreen) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const bounds = win.getBounds();
|
|
||||||
try {
|
try {
|
||||||
await services.WindowService.SetWindowPosAndSize(
|
await services.WindowService.SetWindowPosAndSize(
|
||||||
windowId,
|
windowId,
|
||||||
@ -269,6 +265,14 @@ async function mainResizeHandler(_: any, windowId: string, win: WaveBrowserWindo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function mainResizeHandler(_: any, windowId: string, win: WaveBrowserWindow) {
|
||||||
|
if (win == null || win.isDestroyed() || win.fullScreen) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const bounds = win.getBounds();
|
||||||
|
await persistWindowBounds(windowId, bounds);
|
||||||
|
}
|
||||||
|
|
||||||
function shNavHandler(event: Electron.Event<Electron.WebContentsWillNavigateEventParams>, url: string) {
|
function shNavHandler(event: Electron.Event<Electron.WebContentsWillNavigateEventParams>, url: string) {
|
||||||
if (url.startsWith("http://127.0.0.1:5173/index.html") || url.startsWith("http://localhost:5173/index.html")) {
|
if (url.startsWith("http://127.0.0.1:5173/index.html") || url.startsWith("http://localhost:5173/index.html")) {
|
||||||
// this is a dev-mode hot-reload, ignore it
|
// this is a dev-mode hot-reload, ignore it
|
||||||
@ -310,9 +314,42 @@ function shFrameNavHandler(event: Electron.Event<Electron.WebContentsWillFrameNa
|
|||||||
console.log("frame navigation canceled");
|
console.log("frame navigation canceled");
|
||||||
}
|
}
|
||||||
|
|
||||||
// note, this does not *show* the window.
|
function computeNewWinBounds(waveWindow: WaveWindow): Electron.Rectangle {
|
||||||
// to show, await win.readyPromise and then win.show()
|
const targetWidth = waveWindow.winsize?.width || 2000;
|
||||||
function createBrowserWindow(clientId: string, waveWindow: WaveWindow, fullConfig: FullConfigType): WaveBrowserWindow {
|
const targetHeight = waveWindow.winsize?.height || 1080;
|
||||||
|
const primaryDisplay = electron.screen.getPrimaryDisplay();
|
||||||
|
const workSize = primaryDisplay.workAreaSize;
|
||||||
|
const targetPadding = 100;
|
||||||
|
let rtn = { x: 100, y: 100, width: targetWidth, height: targetHeight };
|
||||||
|
if (workSize.width < targetWidth + 2 * targetPadding) {
|
||||||
|
const spareWidth = workSize.width - targetWidth;
|
||||||
|
if (spareWidth < 20) {
|
||||||
|
rtn.x = 10;
|
||||||
|
rtn.width = workSize.width - 20;
|
||||||
|
} else if (spareWidth > 200) {
|
||||||
|
rtn.x = 100;
|
||||||
|
} else {
|
||||||
|
rtn.x = Math.floor(spareWidth / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (workSize.height < targetHeight + 2 * targetPadding) {
|
||||||
|
const spareHeight = workSize.height - targetHeight;
|
||||||
|
if (spareHeight < 20) {
|
||||||
|
rtn.y = 10;
|
||||||
|
rtn.height = workSize.height - 20;
|
||||||
|
} else if (spareHeight > 200) {
|
||||||
|
rtn.y = 100;
|
||||||
|
} else {
|
||||||
|
rtn.y = Math.floor(spareHeight / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
function computeWinBounds(waveWindow: WaveWindow): Electron.Rectangle {
|
||||||
|
if (waveWindow.isnew) {
|
||||||
|
return computeNewWinBounds(waveWindow);
|
||||||
|
}
|
||||||
let winWidth = waveWindow?.winsize?.width;
|
let winWidth = waveWindow?.winsize?.width;
|
||||||
let winHeight = waveWindow?.winsize?.height;
|
let winHeight = waveWindow?.winsize?.height;
|
||||||
let winPosX = waveWindow.pos.x;
|
let winPosX = waveWindow.pos.x;
|
||||||
@ -339,7 +376,15 @@ function createBrowserWindow(clientId: string, waveWindow: WaveWindow, fullConfi
|
|||||||
width: winWidth,
|
width: winWidth,
|
||||||
height: winHeight,
|
height: winHeight,
|
||||||
};
|
};
|
||||||
|
return winBounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
// note, this does not *show* the window.
|
||||||
|
// to show, await win.readyPromise and then win.show()
|
||||||
|
function createBrowserWindow(clientId: string, waveWindow: WaveWindow, fullConfig: FullConfigType): WaveBrowserWindow {
|
||||||
|
let winBounds = computeWinBounds(waveWindow);
|
||||||
winBounds = ensureBoundsAreVisible(winBounds);
|
winBounds = ensureBoundsAreVisible(winBounds);
|
||||||
|
persistWindowBounds(waveWindow.oid, winBounds);
|
||||||
const settings = fullConfig?.settings;
|
const settings = fullConfig?.settings;
|
||||||
const winOpts: Electron.BrowserWindowConstructorOptions = {
|
const winOpts: Electron.BrowserWindowConstructorOptions = {
|
||||||
titleBarStyle:
|
titleBarStyle:
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
.webview {
|
.webview {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-bottom-left-radius: 4px;
|
border: none !important;
|
||||||
border-bottom-right-radius: 4px;
|
outline: none !important;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
1
frontend/types/gotypes.d.ts
vendored
1
frontend/types/gotypes.d.ts
vendored
@ -677,6 +677,7 @@ declare global {
|
|||||||
type WaveWindow = WaveObj & {
|
type WaveWindow = WaveObj & {
|
||||||
workspaceid: string;
|
workspaceid: string;
|
||||||
activetabid: string;
|
activetabid: string;
|
||||||
|
isnew?: boolean;
|
||||||
pos: Point;
|
pos: Point;
|
||||||
winsize: WinSize;
|
winsize: WinSize;
|
||||||
lastfocusts: number;
|
lastfocusts: number;
|
||||||
|
@ -38,6 +38,7 @@ func (ws *WindowService) SetWindowPosAndSize(ctx context.Context, windowId strin
|
|||||||
if size != nil {
|
if size != nil {
|
||||||
win.WinSize = *size
|
win.WinSize = *size
|
||||||
}
|
}
|
||||||
|
win.IsNew = false
|
||||||
err = wstore.DBUpdate(ctx, win)
|
err = wstore.DBUpdate(ctx, win)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -131,6 +131,7 @@ type Window struct {
|
|||||||
Version int `json:"version"`
|
Version int `json:"version"`
|
||||||
WorkspaceId string `json:"workspaceid"`
|
WorkspaceId string `json:"workspaceid"`
|
||||||
ActiveTabId string `json:"activetabid"`
|
ActiveTabId string `json:"activetabid"`
|
||||||
|
IsNew bool `json:"isnew,omitempty"` // set when a window is created on the backend so the FE can size it properly. cleared on first resize
|
||||||
Pos Point `json:"pos"`
|
Pos Point `json:"pos"`
|
||||||
WinSize WinSize `json:"winsize"`
|
WinSize WinSize `json:"winsize"`
|
||||||
LastFocusTs int64 `json:"lastfocusts"`
|
LastFocusTs int64 `json:"lastfocusts"`
|
||||||
|
@ -96,16 +96,17 @@ func CreateWindow(ctx context.Context, winSize *waveobj.WinSize) (*waveobj.Windo
|
|||||||
workspaceId := uuid.NewString()
|
workspaceId := uuid.NewString()
|
||||||
if winSize == nil {
|
if winSize == nil {
|
||||||
winSize = &waveobj.WinSize{
|
winSize = &waveobj.WinSize{
|
||||||
Width: 1200,
|
Width: 0,
|
||||||
Height: 850,
|
Height: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
window := &waveobj.Window{
|
window := &waveobj.Window{
|
||||||
OID: windowId,
|
OID: windowId,
|
||||||
WorkspaceId: workspaceId,
|
WorkspaceId: workspaceId,
|
||||||
|
IsNew: true,
|
||||||
Pos: waveobj.Point{
|
Pos: waveobj.Point{
|
||||||
X: 100,
|
X: 0,
|
||||||
Y: 100,
|
Y: 0,
|
||||||
},
|
},
|
||||||
WinSize: *winSize,
|
WinSize: *winSize,
|
||||||
}
|
}
|
||||||
@ -178,7 +179,7 @@ func EnsureInitialData() (*waveobj.Window, bool, error) {
|
|||||||
if len(client.WindowIds) > 0 {
|
if len(client.WindowIds) > 0 {
|
||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
window, err := CreateWindow(ctx, &waveobj.WinSize{Height: 0, Width: 0})
|
window, err := CreateWindow(ctx, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, fmt.Errorf("error creating window: %w", err)
|
return nil, false, fmt.Errorf("error creating window: %w", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user