33CSD headerbar replicating GTK4/Adwaita style. Fullscreen auto-hide overlay.
44"""
55
6- APP_VERSION = "3.4.0 "
6+ APP_VERSION = "3.4.1 "
77
88import argparse
99import json
@@ -351,18 +351,6 @@ class NavOverlay(QWidget):
351351 return btn
352352
353353
354- class _ResizeGrip (QSizeGrip ):
355- """SizeGrip that unlocks window resize during user drag."""
356-
357- def mousePressEvent (self , e ):
358- self .parentWidget ()._unlock_size ()
359- super ().mousePressEvent (e )
360-
361- def mouseReleaseEvent (self , e ):
362- super ().mouseReleaseEvent (e )
363- self .parentWidget ()._lock_size ()
364-
365-
366354class WebAppWindow (QMainWindow ):
367355 """CSD window + Chromium WebEngine. Adwaita-style headerbar."""
368356
@@ -373,35 +361,16 @@ class WebAppWindow(QMainWindow):
373361 self .setWindowFlags (Qt .FramelessWindowHint | Qt .Window )
374362 self .setAttribute (Qt .WidgetAttribute .WA_TranslucentBackground , True )
375363
376- # resize lock: only user-initiated resize (grip drag) is allowed
377- self ._resize_locked = False
378-
379364 self ._setup_profile (app_id )
380365 self ._setup_ui (url , title , icon )
381366 self ._setup_shortcuts ()
382367 self ._load_geometry ()
383368
384- # lock window size hard via min/max constraints
385- self ._lock_size ()
386-
387369 # fullscreen hover detection
388370 self ._hover_timer = QTimer (self )
389371 self ._hover_timer .timeout .connect (self ._check_hover )
390372 self ._hover_timer .start (150 )
391373
392- def _lock_size (self ) -> None :
393- """Lock current size by setting min=max=current."""
394- self ._resize_locked = True
395- s = self .size ()
396- self .setMinimumSize (s )
397- self .setMaximumSize (s )
398-
399- def _unlock_size (self ) -> None :
400- """Unlock resize constraints."""
401- self ._resize_locked = False
402- self .setMinimumSize (0 , 0 )
403- self .setMaximumSize (16777215 , 16777215 )
404-
405374 def _setup_profile (self , app_id : str ) -> None :
406375 storage = str (DATA_BASE / app_id )
407376 Path (storage ).mkdir (parents = True , exist_ok = True )
@@ -440,6 +409,7 @@ class WebAppWindow(QMainWindow):
440409 QWebEngineSettings .WebAttribute .JavascriptEnabled ,
441410 QWebEngineSettings .WebAttribute .LocalStorageEnabled ,
442411 QWebEngineSettings .WebAttribute .ScrollAnimatorEnabled ,
412+ QWebEngineSettings .WebAttribute .PluginsEnabled ,
443413 QWebEngineSettings .WebAttribute .JavascriptCanAccessClipboard ,
444414 ):
445415 s .setAttribute (attr , True )
@@ -451,7 +421,6 @@ class WebAppWindow(QMainWindow):
451421 )
452422 # disable non-essential features → reduce RAM
453423 for off_attr in (
454- QWebEngineSettings .WebAttribute .WebGLEnabled ,
455424 QWebEngineSettings .WebAttribute .AutoLoadIconsForPage ,
456425 QWebEngineSettings .WebAttribute .TouchIconsEnabled ,
457426 ):
@@ -505,7 +474,7 @@ class WebAppWindow(QMainWindow):
505474 self .webview .page ().newWindowRequested .connect (self ._on_new_window )
506475
507476 # resize grip — bottom-right
508- self ._grip = _ResizeGrip (self )
477+ self ._grip = QSizeGrip (self )
509478 self ._grip .setFixedSize (16 , 16 )
510479
511480 def _setup_shortcuts (self ) -> None :
@@ -538,7 +507,6 @@ class WebAppWindow(QMainWindow):
538507 self .nav .raise_ ()
539508
540509 def _toggle_fullscreen (self ) -> None :
541- self ._unlock_size ()
542510 if self .isFullScreen ():
543511 self ._exit_fullscreen ()
544512 else :
@@ -550,15 +518,12 @@ class WebAppWindow(QMainWindow):
550518 def _exit_fullscreen (self ) -> None :
551519 if not self .isFullScreen ():
552520 return
553- self ._unlock_size ()
554521 self .header .setVisible (True )
555522 self ._grip .setVisible (True )
556523 self .showNormal ()
557524 self ._apply_mask ()
558- self ._lock_size ()
559525
560526 def _toggle_maximize (self ) -> None :
561- self ._unlock_size ()
562527 fg = _get_theme_colors ()["fg" ]
563528 if self .isMaximized ():
564529 self .showNormal ()
@@ -567,9 +532,6 @@ class WebAppWindow(QMainWindow):
567532 self .showMaximized ()
568533 self .header .max_btn .setIcon (_make_adw_icon ("restore" , size = 20 , fg_hex = fg ))
569534 self ._apply_mask ()
570- # re-lock at new size (but not when maximized — WM controls it)
571- if not self .isMaximized ():
572- self ._lock_size ()
573535
574536 def _on_title (self , title : str ) -> None :
575537 if title :
@@ -627,9 +589,7 @@ class WebAppWindow(QMainWindow):
627589 h = d .get ("height" , 720 )
628590 self .resize (w , h )
629591 if d .get ("maximized" ):
630- self ._resize_locked = False
631592 self .showMaximized ()
632- self ._resize_locked = True
633593 elif sg :
634594 x = sg .x () + (sg .width () - w ) // 2
635595 y = sg .y () + (sg .height () - h ) // 2
0 commit comments