fix: responsive toolbar and Chromium resize on screen geometry change
This commit is contained in:
+38
@@ -128,6 +128,29 @@ class CDP:
|
|||||||
threading.Thread(target=self._send, args=(method, params),
|
threading.Thread(target=self._send, args=(method, params),
|
||||||
daemon=True).start()
|
daemon=True).start()
|
||||||
|
|
||||||
|
def resize_window(self, x, y, w, h):
|
||||||
|
"""Move and resize the Chrome window via CDP Browser.setWindowBounds."""
|
||||||
|
if not self.ready:
|
||||||
|
return
|
||||||
|
import websocket
|
||||||
|
with self._lock:
|
||||||
|
try:
|
||||||
|
ws = websocket.create_connection(self._ws_url(), timeout=3)
|
||||||
|
ws.send(json.dumps({"id": 1, "method": "Browser.getWindowForTarget"}))
|
||||||
|
resp = json.loads(ws.recv())
|
||||||
|
wid = resp.get("result", {}).get("windowId")
|
||||||
|
if wid:
|
||||||
|
ws.send(json.dumps({"id": 2,
|
||||||
|
"method": "Browser.setWindowBounds",
|
||||||
|
"params": {"windowId": wid,
|
||||||
|
"bounds": {"left": x, "top": y,
|
||||||
|
"width": w, "height": h,
|
||||||
|
"windowState": "normal"}}}))
|
||||||
|
ws.recv()
|
||||||
|
ws.close()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"CDP resize error: {e}")
|
||||||
|
|
||||||
def navigate(self, url):
|
def navigate(self, url):
|
||||||
self._async("Page.navigate", {"url": url})
|
self._async("Page.navigate", {"url": url})
|
||||||
|
|
||||||
@@ -486,6 +509,21 @@ class KioskOverlay(QWidget):
|
|||||||
self.bm_panel = BookmarkPanel(cdp, self)
|
self.bm_panel = BookmarkPanel(cdp, self)
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
|
# Reflow toolbar and Chrome when screen/RDP size changes
|
||||||
|
screen = QApplication.instance().primaryScreen()
|
||||||
|
screen.geometryChanged.connect(self._on_screen_resize)
|
||||||
|
|
||||||
|
def _on_screen_resize(self, rect):
|
||||||
|
global SCREEN_W, SCREEN_H
|
||||||
|
SCREEN_W, SCREEN_H = rect.width(), rect.height()
|
||||||
|
self.setGeometry(0, 0, SCREEN_W, TOP_H)
|
||||||
|
self.resize(SCREEN_W, TOP_H)
|
||||||
|
# Resize Chrome after brief delay so X has settled
|
||||||
|
QTimer.singleShot(300, self._resize_chrome)
|
||||||
|
|
||||||
|
def _resize_chrome(self):
|
||||||
|
self.cdp.resize_window(0, TOP_H, SCREEN_W, SCREEN_H - TOP_H)
|
||||||
|
|
||||||
def _build_toolbar(self):
|
def _build_toolbar(self):
|
||||||
bar = QWidget(); bar.setFixedHeight(TOOLBAR_H)
|
bar = QWidget(); bar.setFixedHeight(TOOLBAR_H)
|
||||||
bar.setStyleSheet(f"background:{TOOLBAR_COLOR};")
|
bar.setStyleSheet(f"background:{TOOLBAR_COLOR};")
|
||||||
|
|||||||
Reference in New Issue
Block a user