Fix presentations not being able to return from Display Screen

This commit is contained in:
Tomas Groth 2023-08-13 21:54:00 +00:00 committed by Raoul Snyman
parent 2e95b09f67
commit 35dc55d7f7
3 changed files with 36 additions and 23 deletions

View File

@ -61,10 +61,10 @@ class Controller(object):
if not self.doc.load_presentation():
# Display error message to user
# Inform slidecontroller that the action failed?
self.doc.slidenumber = 0
self.doc.ui_slidenumber = 0
return
PresentationList().add(self.doc, unique_id)
self.doc.slidenumber = slide_no
self.doc.ui_slidenumber = slide_no
self.hide_mode = hide_mode
log.debug('add_handler, slide_number: {slide:d}'.format(slide=slide_no))
if self.is_live:
@ -78,7 +78,7 @@ class Controller(object):
else:
self.doc.start_presentation()
Registry().execute('live_display_hide', HideMode.Screen)
self.doc.slidenumber = 1
self.doc.ui_slidenumber = 1
if slide_no > 1:
self.slide(slide_no)
@ -97,10 +97,10 @@ class Controller(object):
return False
if self.is_live:
self.doc.start_presentation()
if self.doc.slidenumber > 1:
if self.doc.slidenumber > self.doc.get_slide_count():
self.doc.slidenumber = self.doc.get_slide_count()
self.doc.goto_slide(self.doc.slidenumber)
if self.doc.ui_slidenumber > 1:
if self.doc.ui_slidenumber > self.doc.get_slide_count():
self.doc.ui_slidenumber = self.doc.get_slide_count()
self.doc.goto_slide(self.doc.ui_slidenumber)
if self.doc.is_active():
return True
else:
@ -116,8 +116,8 @@ class Controller(object):
return
if not self.is_live:
return
self.doc.ui_slidenumber = int(slide) + 1
if self.hide_mode:
self.doc.slidenumber = int(slide) + 1
self.poll()
return
if not self.activate():
@ -134,8 +134,8 @@ class Controller(object):
return
if not self.is_live:
return
self.doc.ui_slidenumber = 1
if self.hide_mode:
self.doc.slidenumber = 1
self.poll()
return
if not self.activate():
@ -152,8 +152,8 @@ class Controller(object):
return
if not self.is_live:
return
self.doc.ui_slidenumber = self.doc.get_slide_count()
if self.hide_mode:
self.doc.slidenumber = self.doc.get_slide_count()
self.poll()
return
if not self.activate():
@ -170,12 +170,12 @@ class Controller(object):
return False
if not self.is_live:
return False
if not self.doc.is_active():
return False
if self.doc.ui_slidenumber < self.doc.get_slide_count():
self.doc.ui_slidenumber += 1
if self.hide_mode:
if not self.doc.is_active():
return False
if self.doc.slidenumber < self.doc.get_slide_count():
self.doc.slidenumber += 1
self.poll()
self.poll()
return False
if not self.activate():
return False
@ -192,12 +192,12 @@ class Controller(object):
return False
if not self.is_live:
return False
if not self.doc.is_active():
return False
if self.doc.ui_slidenumber > 1:
self.doc.ui_slidenumber -= 1
if self.hide_mode:
if not self.doc.is_active():
return False
if self.doc.slidenumber > 1:
self.doc.slidenumber -= 1
self.poll()
self.poll()
return False
if not self.activate():
return False
@ -235,6 +235,8 @@ class Controller(object):
if not self.activate():
return
self.doc.blank_screen()
elif hide_mode == HideMode.Screen:
self.stop()
def stop(self):
"""
@ -247,7 +249,7 @@ class Controller(object):
return
# Save the current slide number to be able to return to this slide if the presentation is activated again.
if self.doc.is_active():
self.doc.slidenumber = self.doc.get_slide_number()
self.doc.ui_slidenumber = self.doc.get_slide_number()
self.hide_mode = HideMode.Screen
if not self.doc:
return
@ -271,6 +273,8 @@ class Controller(object):
return
if not self.activate():
return
# if a different slide has been selected while blank, this will transfer to the correct slide
self.doc.goto_slide(self.doc.ui_slidenumber)
self.doc.unblank_screen()
Registry().execute('live_display_hide', HideMode.Screen)

View File

@ -112,6 +112,7 @@ class PresentationDocument(object):
:rtype: None
"""
self.slide_number = 0
self.ui_slidenumber = 0
self.file_path = document_path
create_paths(self.get_thumbnail_folder())
@ -317,8 +318,16 @@ class PresentationDocument(object):
if not hide_mode:
current = self.get_slide_number()
if current == self.slide_number:
# if the latest reported slide number is the same as the current, return here and skip sending an update
return
self.slide_number = current
else:
# when in blank mode the slide selected in the live slidecontroller overrules the slide
# currently selected in the blanked presentation.
if self.slide_number == self.ui_slidenumber:
# if the latest reported slide number is the same as the current, return here and skip sending an update
return
self.slide_number = self.ui_slidenumber
if is_live:
prefix = 'live'
else:

View File

@ -128,5 +128,5 @@ def test_add_handler_failure():
# WHEN: calling add_handler that fails
controller.add_handler(mocked_doc_controller, MagicMock(), True, 0, "uuid")
# THEN: slidenumber should be 0
assert controller.doc.slidenumber == 0, 'doc.slidenumber should be 0'
# THEN: ui_slidenumber should be 0
assert controller.doc.ui_slidenumber == 0, 'doc.ui_slidenumber should be 0'