46 lines
1.9 KiB
Python
Executable File
46 lines
1.9 KiB
Python
Executable File
import logging
|
|
import re
|
|
from core.constants import *
|
|
|
|
|
|
def center_window(win, max_height=None):
|
|
"""Center a Tk/Toplevel window on the primary monitor."""
|
|
logging.debug(f"Centering window with max_height={max_height}")
|
|
win.update_idletasks()
|
|
window_width = win.winfo_width()
|
|
window_height = win.winfo_height()
|
|
if max_height:
|
|
window_height = min(window_height, max_height)
|
|
logging.debug(f"Window dimensions: {window_width}x{window_height}")
|
|
primary_x, primary_y = 0, 0
|
|
primary_w, primary_h = win.winfo_screenwidth(), win.winfo_screenheight()
|
|
try:
|
|
if PLATFORM.startswith(LINUX):
|
|
logging.debug("Detecting monitors on Linux platform")
|
|
import subprocess
|
|
|
|
result = subprocess.run(
|
|
["xrandr", "--query"], capture_output=True, text=True, timeout=2
|
|
)
|
|
for line in result.stdout.splitlines():
|
|
if " connected primary" in line:
|
|
m = re.search(r"(\d+)x(\d+)\+(\d+)\+(\d+)", line)
|
|
if m:
|
|
primary_w = int(m.group(1))
|
|
primary_h = int(m.group(2))
|
|
primary_x = int(m.group(3))
|
|
primary_y = int(m.group(4))
|
|
logging.debug(
|
|
f"Primary monitor: position=({primary_x}, {primary_y}), size={primary_w}x{primary_h}"
|
|
)
|
|
break
|
|
except Exception as e:
|
|
logging.warning(f"Failed to detect primary monitor: {e}. Using fallback dimensions.")
|
|
x = primary_x + (primary_w - window_width) // 2
|
|
y = primary_y + (primary_h - window_height) // 2
|
|
x = max(primary_x, x)
|
|
y = max(primary_y, y)
|
|
logging.debug(f"Calculated window position: ({x}, {y})")
|
|
win.geometry(f"{window_width}x{window_height}+{x}+{y}")
|
|
logging.debug(f"Applied geometry: {window_width}x{window_height}+{x}+{y}")
|