Implement proper full-screen mode

This commit is contained in:
Matthias Metelka 2023-01-14 03:05:49 +01:00
parent 08f02e441d
commit e3d11e278e
2 changed files with 37 additions and 13 deletions

View file

@ -170,7 +170,7 @@ class AnkiQt(QMainWindow):
col: Collection col: Collection
pm: ProfileManagerType pm: ProfileManagerType
web: MainWebView web: MainWebView
bottomWeb: AnkiWebView bottomWeb: BottomWebView
def __init__( def __init__(
self, self,
@ -1363,6 +1363,13 @@ title="{}" {}>{}</button>""".format(
window.windowState() ^ Qt.WindowState.WindowFullScreen window.windowState() ^ Qt.WindowState.WindowFullScreen
) )
# Hide Menubar on Windows and Linux
if Qt.WindowState.WindowFullScreen in window.windowState() and not is_mac:
self.form.menubar.setFixedHeight(0)
else:
self.form.menubar.setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)
self.form.menubar.setMinimumSize(0, 0)
# Auto update # Auto update
########################################################################## ##########################################################################

View file

@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
import re import re
from typing import Any, Optional, cast from typing import Any, Optional, Callable, cast
import aqt import aqt
from anki.sync import SyncStatus from anki.sync import SyncStatus
@ -28,6 +28,8 @@ class BottomToolbar:
class ToolbarWebView(AnkiWebView): class ToolbarWebView(AnkiWebView):
hide_condition: Callable[..., bool]
def __init__(self, mw: aqt.AnkiQt, title: str) -> None: def __init__(self, mw: aqt.AnkiQt, title: str) -> None:
AnkiWebView.__init__(self, mw, title=title) AnkiWebView.__init__(self, mw, title=title)
self.mw = mw self.mw = mw
@ -38,17 +40,9 @@ class ToolbarWebView(AnkiWebView):
self.hide_timer.setSingleShot(True) self.hide_timer.setSingleShot(True)
self.hide_timer.setInterval(1000) self.hide_timer.setInterval(1000)
def eventFilter(self, obj, evt): def reset_timer(self) -> None:
if handled := super().eventFilter(obj, evt): self.hide_timer.stop()
return handled self.hide_timer.setInterval(1000)
# prevent collapse if pointer inside
if evt.type() == QEvent.Type.Enter:
self.hide_timer.stop()
self.hide_timer.setInterval(1000)
return True
return False
def hide(self) -> None: def hide(self) -> None:
self.hidden = True self.hidden = True
@ -71,6 +65,18 @@ class TopWebView(ToolbarWebView):
self.hide_condition = self.mw.pm.hide_top_bar self.hide_condition = self.mw.pm.hide_top_bar
qconnect(self.hide_timer.timeout, self.hide_if_allowed) qconnect(self.hide_timer.timeout, self.hide_if_allowed)
def eventFilter(self, obj, evt):
if handled := super().eventFilter(obj, evt):
return handled
# prevent collapse of both toolbars if pointer is inside one of them
if evt.type() == QEvent.Type.Enter:
self.reset_timer()
self.mw.bottomWeb.reset_timer()
return True
return False
def on_body_classes_need_update(self) -> None: def on_body_classes_need_update(self) -> None:
super().on_body_classes_need_update() super().on_body_classes_need_update()
self.adjustHeightToFit() self.adjustHeightToFit()
@ -138,6 +144,17 @@ class BottomWebView(ToolbarWebView):
self.hide_condition = self.mw.pm.hide_bottom_bar self.hide_condition = self.mw.pm.hide_bottom_bar
qconnect(self.hide_timer.timeout, self.hide_if_allowed) qconnect(self.hide_timer.timeout, self.hide_if_allowed)
def eventFilter(self, obj, evt):
if handled := super().eventFilter(obj, evt):
return handled
if evt.type() == QEvent.Type.Enter:
self.reset_timer()
self.mw.toolbarWeb.reset_timer()
return True
return False
def on_body_classes_need_update(self) -> None: def on_body_classes_need_update(self) -> None:
super().on_body_classes_need_update() super().on_body_classes_need_update()