@@ -62,6 +62,7 @@ export class WindowManager extends Service {
6262 height : 670 ,
6363 show : false ,
6464 autoHideMenuBar : true ,
65+ frame : false , // Custom title bar
6566 icon : this . opts . icon ,
6667 title : input . title ,
6768 webPreferences : {
@@ -80,6 +81,14 @@ export class WindowManager extends Service {
8081 win . show ( )
8182 } )
8283
84+ // Notify renderer about maximize state changes
85+ win . on ( 'maximize' , ( ) => {
86+ win . webContents . send ( 'window:maximized-changed' , true )
87+ } )
88+ win . on ( 'unmaximize' , ( ) => {
89+ win . webContents . send ( 'window:maximized-changed' , false )
90+ } )
91+
8392 win . webContents . setWindowOpenHandler ( ( details ) => {
8493 shell . openExternal ( details . url )
8594 return { action : 'deny' }
@@ -142,5 +151,46 @@ export class WindowManager extends Service {
142151 const ok = this . navigateWindow ( win , route )
143152 return ok ? { success : true } : { success : false , message : 'Window not found' }
144153 } )
154+
155+ // Window controls
156+ this . mainCtx . handle ( 'window:minimize' , ( event ) => {
157+ const win = BrowserWindow . fromWebContents ( event . sender )
158+ if ( win ) win . minimize ( )
159+ } )
160+
161+ this . mainCtx . handle ( 'window:maximize' , ( event ) => {
162+ const win = BrowserWindow . fromWebContents ( event . sender )
163+ if ( win ) {
164+ if ( win . isMaximized ( ) ) {
165+ win . unmaximize ( )
166+ return false
167+ } else {
168+ win . maximize ( )
169+ return true
170+ }
171+ }
172+ return false
173+ } )
174+
175+ this . mainCtx . handle ( 'window:close' , ( event ) => {
176+ const win = BrowserWindow . fromWebContents ( event . sender )
177+ if ( win ) win . close ( )
178+ } )
179+
180+ this . mainCtx . handle ( 'window:isMaximized' , ( event ) => {
181+ const win = BrowserWindow . fromWebContents ( event . sender )
182+ return win ? win . isMaximized ( ) : false
183+ } )
184+
185+ this . mainCtx . handle ( 'window:toggle-devtools' , ( event ) => {
186+ const win = BrowserWindow . fromWebContents ( event . sender )
187+ if ( win ) {
188+ if ( win . webContents . isDevToolsOpened ( ) ) {
189+ win . webContents . closeDevTools ( )
190+ } else {
191+ win . webContents . openDevTools ( )
192+ }
193+ }
194+ } )
145195 }
146196}
0 commit comments