PyWebWinUI3 1.2.2__tar.gz → 1.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pywebwinui3-1.2.2/PyWebWinUI3.egg-info → pywebwinui3-1.2.3}/PKG-INFO +1 -1
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3/PyWebWinUI3.egg-info}/PKG-INFO +1 -1
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/__init__.py +1 -1
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/core.py +169 -52
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/event.py +3 -1
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/LICENSE +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/MANIFEST.in +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/NOTICE +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/PyWebWinUI3.egg-info/SOURCES.txt +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/PyWebWinUI3.egg-info/dependency_links.txt +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/PyWebWinUI3.egg-info/requires.txt +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/PyWebWinUI3.egg-info/top_level.txt +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/README.md +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pyproject.toml +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/type.py +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/util.py +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.0.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.1.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.10.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.11.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.12.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.13.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.14.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.15.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.16.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.17.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.18.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.19.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.2.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.20.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.21.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.22.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.23.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.24.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.25.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.26.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.27.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.28.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.29.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.3.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.30.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.31.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.32.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.33.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.34.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.35.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.36.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.37.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.38.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.39.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.4.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.40.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.41.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.42.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.43.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.44.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.45.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.46.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.47.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.48.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.49.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.5.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.50.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.51.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.52.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.53.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.54.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.55.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.56.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.57.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.58.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.59.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.6.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.60.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.61.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.62.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.63.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.64.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.65.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.66.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.67.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.68.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.69.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.7.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.70.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.71.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.72.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.73.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.74.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.75.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.76.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.77.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.78.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.79.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.8.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.80.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.81.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.82.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.83.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.84.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.85.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.86.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.87.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.88.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.89.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.9.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.90.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.91.woff2 +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/Variable-dynamic-subset.min.css +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/SegoeFluentIcons.ttf +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/env.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/assets/2.YxEoeVwz.css +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/6pQH9Hkv.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/B-XLOWlt.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/CGGCsFu4.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/CW0wlPPy.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/CZPLFskb.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/CZuXpvpo.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/D94BNvJJ.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/chunks/DF1x2LYX.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/entry/app.B-Q6XOuJ.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/nodes/0.C49PHrK2.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/nodes/1.a96iIGzo.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/nodes/2.Ofs4dh3G.js +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/version.json +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/index.html +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/requirements.txt +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/setup.cfg +0 -0
- {pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/setup.py +0 -0
|
@@ -16,7 +16,7 @@ from urllib.parse import unquote, urlparse, urlunparse
|
|
|
16
16
|
from ctypes import wintypes
|
|
17
17
|
|
|
18
18
|
import webview
|
|
19
|
-
from hPyT import title_bar
|
|
19
|
+
from hPyT import title_bar, window_dwm
|
|
20
20
|
|
|
21
21
|
from .event import Event, PathEvent
|
|
22
22
|
from .type import Status
|
|
@@ -193,6 +193,7 @@ class _JsApi:
|
|
|
193
193
|
class WindowEvents:
|
|
194
194
|
def __init__(self) -> None:
|
|
195
195
|
self.windowReady = Event()
|
|
196
|
+
self.closing = Event()
|
|
196
197
|
self.closed = Event()
|
|
197
198
|
self.accentColorChange = Event()
|
|
198
199
|
self.valueChange = PathEvent()
|
|
@@ -211,6 +212,8 @@ class MainWindow:
|
|
|
211
212
|
self._setup_fired = False
|
|
212
213
|
self._minimum_width = DEFAULT_WINDOW_MIN_WIDTH
|
|
213
214
|
self._minimum_height = DEFAULT_WINDOW_MIN_HEIGHT
|
|
215
|
+
self._defer_window_chrome = False
|
|
216
|
+
self._startup_cloaked = False
|
|
214
217
|
self._sync_lock = threading.Lock()
|
|
215
218
|
self._pending_sync: dict[str, object] = {}
|
|
216
219
|
self._ui_server: _UiHttpServer | None = None
|
|
@@ -242,7 +245,7 @@ class MainWindow:
|
|
|
242
245
|
_apply_menu_theme_support(self.values.get("system_theme"))
|
|
243
246
|
|
|
244
247
|
self._window = webview.create_window(
|
|
245
|
-
self.
|
|
248
|
+
self.values.get("system_title", self._title),
|
|
246
249
|
f"{self._ui_origin}/index.html",
|
|
247
250
|
js_api=self.api,
|
|
248
251
|
background_color="#202020",
|
|
@@ -252,16 +255,18 @@ class MainWindow:
|
|
|
252
255
|
min_size=(self._minimum_width, self._minimum_height),
|
|
253
256
|
on_top=bool(self.values.get("system_pin", False)),
|
|
254
257
|
)
|
|
255
|
-
self.show = self.
|
|
256
|
-
self.restore = self.
|
|
257
|
-
self.hide = self.
|
|
258
|
-
self.destroy = self.
|
|
259
|
-
self.minimize = self.
|
|
258
|
+
self.show = self._show_window
|
|
259
|
+
self.restore = self._restore_window
|
|
260
|
+
self.hide = self._hide_window
|
|
261
|
+
self.destroy = self._destroy_window
|
|
262
|
+
self.minimize = self._minimize_window
|
|
260
263
|
self.api._init(self)
|
|
261
264
|
self._window.events.before_show += self._before_show
|
|
265
|
+
self._window.events.closing += self._on_closing
|
|
262
266
|
self._window.events.closed += self._on_closed
|
|
263
|
-
self._window.events.maximized +=
|
|
264
|
-
self._window.events.restored +=
|
|
267
|
+
self._window.events.maximized += self._on_window_maximized_state
|
|
268
|
+
self._window.events.restored += self._on_window_restored_state
|
|
269
|
+
self._window.events.restored += self._on_window_restored
|
|
265
270
|
|
|
266
271
|
core_logger.debug("Window created")
|
|
267
272
|
|
|
@@ -288,6 +293,9 @@ class MainWindow:
|
|
|
288
293
|
def onSetup(self):
|
|
289
294
|
return self._event_decorator(self.events.windowReady)
|
|
290
295
|
|
|
296
|
+
def onClosing(self):
|
|
297
|
+
return self._event_decorator(self.events.closing)
|
|
298
|
+
|
|
291
299
|
def onExit(self):
|
|
292
300
|
return self._event_decorator(self.events.closed)
|
|
293
301
|
|
|
@@ -317,11 +325,11 @@ class MainWindow:
|
|
|
317
325
|
def addPage(self, pageFile: str | Path | None = None, pageData: dict | None = None):
|
|
318
326
|
if pageFile and not pageData:
|
|
319
327
|
pageData = loadPage(pageFile)
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
328
|
+
page_path = str(pageData["attr"]["path"])
|
|
329
|
+
logger.debug("Page added: %s", page_path)
|
|
330
|
+
if self.values["system_pages"] is None:
|
|
331
|
+
self.values["system_pages"] = {}
|
|
332
|
+
self.values.set(f"system_pages[{json.dumps(page_path, ensure_ascii=False)}]", pageData)
|
|
325
333
|
|
|
326
334
|
def resolve_path(self, value: str | Path | None) -> Path | None:
|
|
327
335
|
if value is None:
|
|
@@ -341,9 +349,6 @@ class MainWindow:
|
|
|
341
349
|
|
|
342
350
|
return root_candidate.resolve()
|
|
343
351
|
|
|
344
|
-
def _current_title(self):
|
|
345
|
-
return self.values.get("system_title", self._title)
|
|
346
|
-
|
|
347
352
|
def _window_handle(self) -> int | None:
|
|
348
353
|
try:
|
|
349
354
|
native = getattr(self._window, "native", None)
|
|
@@ -437,24 +442,148 @@ class MainWindow:
|
|
|
437
442
|
try:
|
|
438
443
|
hwnd = self._window.native.Handle.ToInt64()
|
|
439
444
|
_apply_menu_theme_support(self.values.get("system_theme"), hwnd)
|
|
440
|
-
|
|
441
|
-
|
|
445
|
+
if self._defer_window_chrome:
|
|
446
|
+
window_dwm.toggle_cloak(hwnd, True)
|
|
447
|
+
self._startup_cloaked = True
|
|
448
|
+
else:
|
|
449
|
+
title_bar.hide(hwnd)
|
|
450
|
+
self._set_window_maximized_state(bool(_user32.IsZoomed(hwnd)), sync=False)
|
|
442
451
|
except Exception:
|
|
443
452
|
core_logger.debug("Failed to hide title bar", exc_info=True)
|
|
444
453
|
|
|
454
|
+
def _invoke_native(self, native, callback):
|
|
455
|
+
action_type = getattr(importlib.import_module("System"), "Action")
|
|
456
|
+
if native.InvokeRequired:
|
|
457
|
+
native.BeginInvoke(action_type(callback))
|
|
458
|
+
else:
|
|
459
|
+
callback()
|
|
460
|
+
|
|
461
|
+
def _invoke_native_sync(self, native, callback):
|
|
462
|
+
action_type = getattr(importlib.import_module("System"), "Action")
|
|
463
|
+
if native.InvokeRequired:
|
|
464
|
+
native.Invoke(action_type(callback))
|
|
465
|
+
else:
|
|
466
|
+
callback()
|
|
467
|
+
|
|
468
|
+
def _invoke_native_later(self, native, callback, delay: float):
|
|
469
|
+
timer = threading.Timer(delay, lambda: self._invoke_native(native, callback))
|
|
470
|
+
timer.daemon = True
|
|
471
|
+
timer.start()
|
|
472
|
+
|
|
473
|
+
def _on_window_maximized_state(self, *_):
|
|
474
|
+
self._set_window_maximized_state(True)
|
|
475
|
+
|
|
476
|
+
def _on_window_restored_state(self, *_):
|
|
477
|
+
self._set_window_maximized_state(False)
|
|
478
|
+
|
|
479
|
+
def _on_window_restored(self):
|
|
480
|
+
self._ensure_window_chrome()
|
|
481
|
+
self._refresh_client_layout()
|
|
482
|
+
|
|
483
|
+
def _ensure_window_chrome(self, delay: float = 0.08):
|
|
484
|
+
if not self._defer_window_chrome:
|
|
485
|
+
return
|
|
486
|
+
|
|
487
|
+
self._defer_window_chrome = False
|
|
488
|
+
native = getattr(self._window, "native", None)
|
|
489
|
+
if native is None:
|
|
490
|
+
return
|
|
491
|
+
|
|
492
|
+
def _apply():
|
|
493
|
+
try:
|
|
494
|
+
hwnd = int(native.Handle.ToInt64())
|
|
495
|
+
_apply_menu_theme_support(self.values.get("system_theme"), hwnd)
|
|
496
|
+
if self._startup_cloaked:
|
|
497
|
+
window_dwm.toggle_cloak(hwnd, False)
|
|
498
|
+
self._startup_cloaked = False
|
|
499
|
+
try:
|
|
500
|
+
title_bar.unhide(hwnd)
|
|
501
|
+
except Exception:
|
|
502
|
+
pass
|
|
503
|
+
title_bar.hide(hwnd)
|
|
504
|
+
self._set_window_maximized_state(bool(_user32.IsZoomed(hwnd)), sync=False)
|
|
505
|
+
except Exception:
|
|
506
|
+
core_logger.debug("Failed to ensure window chrome", exc_info=True)
|
|
507
|
+
|
|
508
|
+
self._invoke_native_later(native, _apply, delay)
|
|
509
|
+
|
|
510
|
+
def _refresh_client_layout(self, delay: float = 0.08):
|
|
511
|
+
native = getattr(self._window, "native", None)
|
|
512
|
+
if native is None:
|
|
513
|
+
return
|
|
514
|
+
|
|
515
|
+
forms = importlib.import_module("System.Windows.Forms")
|
|
516
|
+
|
|
517
|
+
def _apply():
|
|
518
|
+
try:
|
|
519
|
+
native.SuspendLayout()
|
|
520
|
+
webview_control = getattr(native, "webview", None)
|
|
521
|
+
if webview_control is not None:
|
|
522
|
+
webview_control.Dock = forms.DockStyle.Fill
|
|
523
|
+
webview_control.Bounds = native.ClientRectangle
|
|
524
|
+
webview_control.BringToFront()
|
|
525
|
+
webview_control.Invalidate()
|
|
526
|
+
webview_control.Update()
|
|
527
|
+
native.PerformLayout()
|
|
528
|
+
native.Invalidate(True)
|
|
529
|
+
native.Refresh()
|
|
530
|
+
except Exception:
|
|
531
|
+
core_logger.debug("Failed to refresh client layout", exc_info=True)
|
|
532
|
+
finally:
|
|
533
|
+
try:
|
|
534
|
+
native.ResumeLayout(True)
|
|
535
|
+
except Exception:
|
|
536
|
+
pass
|
|
537
|
+
|
|
538
|
+
self._invoke_native_later(native, _apply, delay)
|
|
539
|
+
|
|
540
|
+
def _show_window(self):
|
|
541
|
+
native = getattr(self._window, "native", None)
|
|
542
|
+
if native is None:
|
|
543
|
+
self._window.show()
|
|
544
|
+
else:
|
|
545
|
+
self._invoke_native_sync(native, self._window.show)
|
|
546
|
+
self._ensure_window_chrome()
|
|
547
|
+
self._refresh_client_layout()
|
|
548
|
+
|
|
549
|
+
def _restore_window(self):
|
|
550
|
+
native = getattr(self._window, "native", None)
|
|
551
|
+
if native is None:
|
|
552
|
+
self._window.restore()
|
|
553
|
+
else:
|
|
554
|
+
self._invoke_native_sync(native, self._window.restore)
|
|
555
|
+
self._ensure_window_chrome()
|
|
556
|
+
self._refresh_client_layout()
|
|
557
|
+
|
|
558
|
+
def _hide_window(self):
|
|
559
|
+
native = getattr(self._window, "native", None)
|
|
560
|
+
if native is None:
|
|
561
|
+
self._window.hide()
|
|
562
|
+
return
|
|
563
|
+
self._invoke_native_sync(native, self._window.hide)
|
|
564
|
+
|
|
565
|
+
def _destroy_window(self):
|
|
566
|
+
native = getattr(self._window, "native", None)
|
|
567
|
+
if native is None:
|
|
568
|
+
self._window.destroy()
|
|
569
|
+
return
|
|
570
|
+
self._invoke_native_sync(native, self._window.destroy)
|
|
571
|
+
|
|
572
|
+
def _minimize_window(self):
|
|
573
|
+
native = getattr(self._window, "native", None)
|
|
574
|
+
if native is None:
|
|
575
|
+
self._window.minimize()
|
|
576
|
+
return
|
|
577
|
+
self._invoke_native_sync(native, self._window.minimize)
|
|
578
|
+
|
|
579
|
+
def _on_closing(self, *_):
|
|
580
|
+
return not self.events.closing.set()
|
|
581
|
+
|
|
445
582
|
def _on_closed(self):
|
|
446
583
|
self.accent.stop()
|
|
447
584
|
self._stop_ui_server()
|
|
448
585
|
self.events.closed.set()
|
|
449
586
|
|
|
450
|
-
def _dispatch_or_defer_sync(self, key: str, value):
|
|
451
|
-
with self._sync_lock:
|
|
452
|
-
if not self._frontend_ready:
|
|
453
|
-
self._pending_sync[key] = value
|
|
454
|
-
return
|
|
455
|
-
|
|
456
|
-
self._dispatch_sync_value(key, value)
|
|
457
|
-
|
|
458
587
|
def _dispatch_sync_value(self, key: str, value):
|
|
459
588
|
if key == "system_title":
|
|
460
589
|
try:
|
|
@@ -471,7 +600,12 @@ class MainWindow:
|
|
|
471
600
|
core_logger.debug("Failed to sync value %s", key, exc_info=True)
|
|
472
601
|
|
|
473
602
|
def queue_sync_value(self, key: str, value):
|
|
474
|
-
self.
|
|
603
|
+
with self._sync_lock:
|
|
604
|
+
if not self._frontend_ready:
|
|
605
|
+
self._pending_sync[key] = value
|
|
606
|
+
return
|
|
607
|
+
|
|
608
|
+
self._dispatch_sync_value(key, value)
|
|
475
609
|
|
|
476
610
|
def _set_window_maximized_state(self, value: bool, *, sync: bool = True):
|
|
477
611
|
value = bool(value)
|
|
@@ -518,15 +652,10 @@ class MainWindow:
|
|
|
518
652
|
self._window.on_top = state
|
|
519
653
|
return
|
|
520
654
|
|
|
521
|
-
action_type = getattr(importlib.import_module("System"), "Action")
|
|
522
|
-
|
|
523
655
|
def _apply():
|
|
524
656
|
self._window.on_top = state
|
|
525
657
|
|
|
526
|
-
|
|
527
|
-
native.BeginInvoke(action_type(_apply))
|
|
528
|
-
else:
|
|
529
|
-
_apply()
|
|
658
|
+
self._invoke_native(native, _apply)
|
|
530
659
|
except Exception:
|
|
531
660
|
core_logger.debug("Failed to set window on top", exc_info=True)
|
|
532
661
|
|
|
@@ -536,17 +665,12 @@ class MainWindow:
|
|
|
536
665
|
if native is None:
|
|
537
666
|
return
|
|
538
667
|
|
|
539
|
-
action_type = getattr(importlib.import_module("System"), "Action")
|
|
540
|
-
|
|
541
668
|
def _apply():
|
|
542
669
|
hwnd = int(native.Handle.ToInt64())
|
|
543
670
|
_user32.ReleaseCapture()
|
|
544
671
|
_user32.SendMessageW(hwnd, 0x00A1, 2, 0) # WM_NCLBUTTONDOWN, HTCAPTION
|
|
545
672
|
|
|
546
|
-
|
|
547
|
-
native.BeginInvoke(action_type(_apply))
|
|
548
|
-
else:
|
|
549
|
-
_apply()
|
|
673
|
+
self._invoke_native(native, _apply)
|
|
550
674
|
except Exception:
|
|
551
675
|
core_logger.debug("Failed to start system window drag", exc_info=True)
|
|
552
676
|
|
|
@@ -556,18 +680,13 @@ class MainWindow:
|
|
|
556
680
|
if native is None:
|
|
557
681
|
return
|
|
558
682
|
|
|
559
|
-
action_type = getattr(importlib.import_module("System"), "Action")
|
|
560
|
-
|
|
561
683
|
def _apply():
|
|
562
684
|
hwnd = int(native.Handle.ToInt64())
|
|
563
685
|
is_zoomed = bool(_user32.IsZoomed(hwnd))
|
|
564
686
|
command = 9 if is_zoomed else 3 # SW_RESTORE / SW_MAXIMIZE
|
|
565
687
|
_user32.ShowWindow(hwnd, command)
|
|
566
688
|
|
|
567
|
-
|
|
568
|
-
native.BeginInvoke(action_type(_apply))
|
|
569
|
-
else:
|
|
570
|
-
_apply()
|
|
689
|
+
self._invoke_native(native, _apply)
|
|
571
690
|
except Exception:
|
|
572
691
|
core_logger.debug("Failed to toggle window maximize", exc_info=True)
|
|
573
692
|
|
|
@@ -577,8 +696,6 @@ class MainWindow:
|
|
|
577
696
|
if native is None:
|
|
578
697
|
return
|
|
579
698
|
|
|
580
|
-
action_type = getattr(importlib.import_module("System"), "Action")
|
|
581
|
-
|
|
582
699
|
def _apply():
|
|
583
700
|
hwnd = int(native.Handle.ToInt64())
|
|
584
701
|
menu = _user32.GetSystemMenu(hwnd, False)
|
|
@@ -604,10 +721,7 @@ class MainWindow:
|
|
|
604
721
|
_user32.PostMessageW(hwnd, 0x0112, command, 0) # WM_SYSCOMMAND
|
|
605
722
|
_user32.PostMessageW(hwnd, 0x0000, 0, 0) # WM_NULL
|
|
606
723
|
|
|
607
|
-
|
|
608
|
-
native.BeginInvoke(action_type(_apply))
|
|
609
|
-
else:
|
|
610
|
-
_apply()
|
|
724
|
+
self._invoke_native(native, _apply)
|
|
611
725
|
except Exception:
|
|
612
726
|
core_logger.debug("Failed to show window system menu", exc_info=True)
|
|
613
727
|
|
|
@@ -663,6 +777,7 @@ class MainWindow:
|
|
|
663
777
|
debug: bool = False,
|
|
664
778
|
*,
|
|
665
779
|
hidden: bool = False,
|
|
780
|
+
minimized: bool = False,
|
|
666
781
|
on_top: bool | None = None,
|
|
667
782
|
width: int | None = None,
|
|
668
783
|
height: int | None = None,
|
|
@@ -673,7 +788,9 @@ class MainWindow:
|
|
|
673
788
|
self._minimum_width = max(1, int(min_width))
|
|
674
789
|
self._minimum_height = max(1, int(min_height))
|
|
675
790
|
self._window.min_size = (self._minimum_width, self._minimum_height)
|
|
791
|
+
self._defer_window_chrome = bool(hidden or minimized)
|
|
676
792
|
self._window.hidden = bool(hidden)
|
|
793
|
+
self._window.minimized = bool(minimized and not hidden)
|
|
677
794
|
|
|
678
795
|
if width is not None and height is not None:
|
|
679
796
|
width = max(self._minimum_width, int(width))
|
|
@@ -12,11 +12,13 @@ class Event:
|
|
|
12
12
|
self.items: list[Callable[..., Any]] = []
|
|
13
13
|
|
|
14
14
|
def set(self, *args: Any):
|
|
15
|
+
result = False
|
|
15
16
|
for func in tuple(self.items):
|
|
16
17
|
try:
|
|
17
|
-
func(*args)
|
|
18
|
+
result = bool(func(*args)) or result
|
|
18
19
|
except Exception:
|
|
19
20
|
logger.exception("Event callback failed")
|
|
21
|
+
return result
|
|
20
22
|
|
|
21
23
|
def _add(self, item: Callable[..., Any]):
|
|
22
24
|
self.items.append(item)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.0.woff2
RENAMED
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.1.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.2.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.3.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.4.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.5.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.6.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.7.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.8.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/PretendardVariable.subset.9.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/Pretendard/Variable-dynamic-subset.min.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/assets/2.YxEoeVwz.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/entry/app.B-Q6XOuJ.js
RENAMED
|
File without changes
|
{pywebwinui3-1.2.2 → pywebwinui3-1.2.3}/pywebwinui3/web/_app/immutable/entry/start.C1-i6FUr.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|