mirror of https://gitlab.com/openlp/openlp.git
Merge branch 'background-media-display-hidden-fix' into 'master'
Background media display fixes See merge request openlp/openlp!527
This commit is contained in:
commit
c0e178c875
|
@ -73,3 +73,12 @@ def is_64bit_instance():
|
|||
:return: True if the python/OpenLP instance running is 64 bit, otherwise False.
|
||||
"""
|
||||
return (sys.maxsize > 2**32)
|
||||
|
||||
|
||||
def is_xorg_server():
|
||||
"""
|
||||
Returns true if the Qt is running on X.org/XWayland display server (Linux/*nix)
|
||||
:return: True if the Qt is running on X.org/XWayland display server (Linux/*nix), otherwise False.
|
||||
"""
|
||||
from PyQt5 import QtGui
|
||||
return QtGui.QGuiApplication.platformName() == 'xcb'
|
||||
|
|
|
@ -141,6 +141,9 @@ class DisplayWindow(QtWidgets.QWidget, RegistryProperties, LogMixin):
|
|||
flags = QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool | QtCore.Qt.WindowStaysOnTopHint
|
||||
if self.settings.value('advanced/x11 bypass wm'):
|
||||
flags |= QtCore.Qt.X11BypassWindowManagerHint
|
||||
else:
|
||||
# This helps the window not being hidden by KDE's "Hide utility windows for inactive applications" option
|
||||
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_X11NetWmWindowTypeDialog)
|
||||
if is_macosx():
|
||||
self.setAttribute(QtCore.Qt.WA_MacAlwaysShowToolWindow, True)
|
||||
# Need to import this inline to get around a QtWebEngine issue
|
||||
|
|
|
@ -333,7 +333,9 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||
if self.is_theme_background:
|
||||
self.is_autoplay = True
|
||||
if self.is_autoplay:
|
||||
if not self.media_play(controller):
|
||||
start_hidden = self.is_theme_background and controller.is_live and \
|
||||
(controller.current_hide_mode == HideMode.Blank or controller.current_hide_mode == HideMode.Screen)
|
||||
if not self.media_play(controller, start_hidden):
|
||||
critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported File'),
|
||||
translate('MediaPlugin.MediaItem', 'Unsupported File'))
|
||||
return False
|
||||
|
@ -440,11 +442,12 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||
"""
|
||||
return self.media_play(self.live_controller)
|
||||
|
||||
def media_play(self, controller):
|
||||
def media_play(self, controller, start_hidden=False):
|
||||
"""
|
||||
Responds to the request to play a loaded video
|
||||
|
||||
:param controller: The controller to be played
|
||||
:param start_hidden: Whether to play the video without showing the controller
|
||||
"""
|
||||
self.log_debug(f'media_play is_live:{controller.is_live}')
|
||||
controller.seek_slider.blockSignals(True)
|
||||
|
@ -455,7 +458,8 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||
controller.volume_slider.blockSignals(False)
|
||||
return False
|
||||
self.media_volume(controller, controller.media_info.volume)
|
||||
self._media_set_visibility(controller, True)
|
||||
if not start_hidden:
|
||||
self._media_set_visibility(controller, True)
|
||||
controller.mediabar.actions['playbackPlay'].setVisible(False)
|
||||
controller.mediabar.actions['playbackPause'].setVisible(True)
|
||||
controller.mediabar.actions['playbackStop'].setDisabled(False)
|
||||
|
@ -728,6 +732,9 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||
self.live_hide_timer.stop()
|
||||
visible = visible and controller.media_info.media_type is not MediaType.Audio
|
||||
self.current_media_players[controller.controller_type].set_visible(controller, visible)
|
||||
if controller.is_live and visible:
|
||||
display = self._define_display(controller)
|
||||
display.raise_()
|
||||
|
||||
def media_blank(self, msg):
|
||||
"""
|
||||
|
@ -756,7 +763,7 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||
else:
|
||||
self.live_hide_timer.stop()
|
||||
else:
|
||||
if playing:
|
||||
if playing and not self.is_theme_background:
|
||||
self.media_pause(self.live_controller)
|
||||
self._media_set_visibility(self.live_controller, False)
|
||||
|
||||
|
|
|
@ -107,8 +107,8 @@ class VlcPlayer(MediaPlayer):
|
|||
"""
|
||||
vlc = get_vlc()
|
||||
if controller.is_live:
|
||||
controller.vlc_widget = QtWidgets.QFrame()
|
||||
controller.vlc_widget.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool |
|
||||
controller.vlc_widget = QtWidgets.QFrame(controller)
|
||||
controller.vlc_widget.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowType.Tool |
|
||||
QtCore.Qt.WindowStaysOnTopHint)
|
||||
else:
|
||||
controller.vlc_widget = QtWidgets.QFrame(display)
|
||||
|
|
|
@ -212,6 +212,10 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||
def display(self):
|
||||
return self.displays[0] if self.displays else None
|
||||
|
||||
@property
|
||||
def current_hide_mode(self):
|
||||
return self._current_hide_mode
|
||||
|
||||
def setup_ui(self):
|
||||
"""
|
||||
Initialise the UI elements of the controller
|
||||
|
@ -1019,8 +1023,13 @@ class SlideController(QtWidgets.QWidget, LogMixin, RegistryProperties):
|
|||
self.preview_widget.replace_service_item(self.service_item, width, slide_no)
|
||||
# Tidy up aspects associated with the old item
|
||||
if old_item:
|
||||
new_item_has_background_video = self.service_item.is_capable(ItemCapabilities.HasBackgroundVideo) or \
|
||||
self.service_item.is_capable(ItemCapabilities.HasBackgroundStream)
|
||||
# Media Manager cannot play background videos on preview pane yet
|
||||
is_unsupported_preview_background = not self.is_live and new_item_has_background_video
|
||||
# Close the old item if it's not to be used by the new service item
|
||||
if not self.service_item.is_media() and not self.service_item.requires_media():
|
||||
if not self.service_item.is_media() and (not self.service_item.requires_media() or
|
||||
is_unsupported_preview_background):
|
||||
self.on_media_close()
|
||||
if old_item.is_command() and not old_item.is_media():
|
||||
Registry().execute('{name}_stop'.format(name=old_item.name.lower()), [old_item, self.is_live])
|
||||
|
|
|
@ -87,7 +87,7 @@ def test_load_video(media_env, settings):
|
|||
# The controls should have been made visible
|
||||
media_env.media_controller.media_reset.assert_called_once_with(mocked_slide_controller)
|
||||
assert mocked_slide_controller.media_info.volume == 1
|
||||
media_env.media_controller.media_play.assert_called_once_with(mocked_slide_controller)
|
||||
media_env.media_controller.media_play.assert_called_once_with(mocked_slide_controller, False)
|
||||
media_env.media_controller.set_controls_visible.assert_called_once_with(mocked_slide_controller, True)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue