PyDisplayWindow Pro - Changelog v2.0.1
🔧 Critical Fixes
1. Always on Top Feature Completely Rewritten
Old Problem:
- Window always stayed on top regardless of checkbox state
- Setting had no effect, it was purely cosmetic
New Solution:
_on_always_on_top_changed()method completely rewritten- Using correct method for Windows:
hide() → setWindowFlags() → show() - Window state (minimized, maximized, fullscreen) is preserved
- Every change is automatically saved to
config.json - Post-change verification implemented (
_verify_always_on_top()) - Full transparency with console logging
Technical Details:
# Old (non-working) method:
self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint, on_top)
self.show()
# New (working) method:
self.hide()
self.setWindowFlags(self.windowFlags() & ~Qt.WindowType.WindowStaysOnTopHint)
if on_top:
self.setWindowFlags(self.windowFlags() | Qt.WindowType.WindowStaysOnTopHint)
self.show()2. Screen Capture Continues When Minimized
Old Problem:
- Screen capture completely stopped when window was minimized
- Major issue during streaming
New Solution:
changeEvent()event handler added- Only rendering is paused with
isMinimized()check - Capture worker thread continues running
- Frames are stored in
self.current_frame - Console log written every 60 frames (proof)
- Shows how many frames were captured when window is restored
Technical Details:
def _on_frame_captured(self, frame: np.ndarray):
# Store frame FIRST
self.current_frame = frame
# Skip rendering if minimized, but capture continues
if self.isMinimized():
# Prove it with log counter
self._minimize_log_counter += 1
if self._minimize_log_counter % 60 == 0:
logger.info(f"Still capturing while minimized (frame #{self._minimize_log_counter})")
return
# Normal rendering...3. Settings Loading Order Fixed
Old Problem:
_load_config()was called before UI was created- Tried to apply settings when checkbox didn't exist yet
New Solution:
- Config is loaded FIRST
- UI is created
- Then
_apply_always_on_top_setting()is called - Checkbox signals are blocked to prevent infinite loops
4. Presentation Mode Fixed
Old Problem:
- Presentation mode always forced always on top to be enabled
- User setting was ignored
New Solution:
- Presentation mode no longer forces always on top
- Only follows user's setting
- Status reported via log messages
📊 Console Logs
Detailed log messages for every operation:
Startup:
============================================================
INITIAL Always on top setting: True
Window flag actually set: True
[OK] Always on top correctly applied at startup
============================================================
Always on Top Change:
Always on top changed to: True
[OK] Always on top verified: True
Minimize:
============================================================
WINDOW MINIMIZED - Capture worker continues running!
Frame capture continues, only Qt rendering is paused
============================================================
[OK] Capture worker is RUNNING (is_running=True)
[OK] Still capturing while minimized (frame #60)
[OK] Still capturing while minimized (frame #120)
Restore:
============================================================
WINDOW RESTORED - Rendering resumed
============================================================
Window restored - captured 180 frames while minimized
🧪 Test Instructions
See TEST_INSTRUCTIONS.md for detailed test instructions.
Quick Test:
-
Always on Top:
- Toggle checkbox on/off
- Open another window
- Check if PyDisplayWindow stays on top or not
-
Minimize Capture:
- Start capture
- Minimize window
- Check console logs
- Verify frame counter is increasing
🔍 Changed Files
main.py- Main program file (all fixes here)README.md- New features addedTEST_INSTRUCTIONS.md- Test instructions (NEW)CHANGELOG_v2.0.1.md- This file (NEW)
🎯 Result
Both issues are completely fixed:
✅ Always on Top now actually works
✅ Capture continues when minimized
✅ Settings are correctly saved and loaded
✅ Full transparency with detailed logs
✅ Much better user experience
Developer: PyDisplayWindow Team
Date: March 28, 2026
Version: 2.0.1