forked from openlp/openlp
Added support for Powerpoint events, which is used to update the slidecontroller if OpenLP is not in focus.
This commit is contained in:
parent
af3eaf2b37
commit
cd6903be86
@ -32,7 +32,7 @@ import time
|
|||||||
from openlp.core.common import is_win, Settings
|
from openlp.core.common import is_win, Settings
|
||||||
|
|
||||||
if is_win():
|
if is_win():
|
||||||
from win32com.client import Dispatch
|
from win32com.client import DispatchWithEvents
|
||||||
import win32com
|
import win32com
|
||||||
import winreg
|
import winreg
|
||||||
import win32ui
|
import win32ui
|
||||||
@ -81,9 +81,21 @@ class PowerpointController(PresentationController):
|
|||||||
"""
|
"""
|
||||||
Loads PowerPoint process.
|
Loads PowerPoint process.
|
||||||
"""
|
"""
|
||||||
|
class PowerPointEvents:
|
||||||
|
"""
|
||||||
|
Class to catch events from PowerPoint.
|
||||||
|
"""
|
||||||
|
def OnSlideShowNextClick(self, slideshow_window, effect):
|
||||||
|
"""
|
||||||
|
Occurs on the next click of the slide. If the main OpenLP is not in focus force update of the slidecontroller.
|
||||||
|
"""
|
||||||
|
if not Registry().get('main_window').isActiveWindow():
|
||||||
|
log.debug('main window is not in focus - should update slidecontroller')
|
||||||
|
Registry().execute('slidecontroller_live_change', slideshow_window.View.CurrentShowPosition)
|
||||||
|
|
||||||
log.debug('start_process')
|
log.debug('start_process')
|
||||||
if not self.process:
|
if not self.process:
|
||||||
self.process = Dispatch('PowerPoint.Application')
|
self.process = DispatchWithEvents('PowerPoint.Application', PowerPointEvents)
|
||||||
|
|
||||||
def kill(self):
|
def kill(self):
|
||||||
"""
|
"""
|
||||||
@ -311,6 +323,7 @@ class PowerpointDocument(PresentationDocument):
|
|||||||
size = ScreenList().current['size']
|
size = ScreenList().current['size']
|
||||||
ppt_window = None
|
ppt_window = None
|
||||||
try:
|
try:
|
||||||
|
self.presentation.SlideShowSettings.ShowWithAnimation = True
|
||||||
ppt_window = self.presentation.SlideShowSettings.Run()
|
ppt_window = self.presentation.SlideShowSettings.Run()
|
||||||
except (AttributeError, pywintypes.com_error) as e:
|
except (AttributeError, pywintypes.com_error) as e:
|
||||||
log.exception('Caught exception while in start_presentation')
|
log.exception('Caught exception while in start_presentation')
|
||||||
@ -391,6 +404,7 @@ class PowerpointDocument(PresentationDocument):
|
|||||||
"""
|
"""
|
||||||
log.debug('next_step')
|
log.debug('next_step')
|
||||||
try:
|
try:
|
||||||
|
self.presentation.SlideShowWindow.Activate()
|
||||||
self.presentation.SlideShowWindow.View.Next()
|
self.presentation.SlideShowWindow.View.Next()
|
||||||
except (AttributeError, pywintypes.com_error) as e:
|
except (AttributeError, pywintypes.com_error) as e:
|
||||||
log.exception('Caught exception while in next_step')
|
log.exception('Caught exception while in next_step')
|
||||||
@ -401,6 +415,9 @@ class PowerpointDocument(PresentationDocument):
|
|||||||
if self.get_slide_number() > self.get_slide_count():
|
if self.get_slide_number() > self.get_slide_count():
|
||||||
log.debug('past end, stepping back to previous')
|
log.debug('past end, stepping back to previous')
|
||||||
self.previous_step()
|
self.previous_step()
|
||||||
|
# Make sure powerpoint doesn't steal focus, unless we're on a single screen setup
|
||||||
|
if len(ScreenList().screen_list) > 1:
|
||||||
|
Registry().get('main_window').activateWindow()
|
||||||
|
|
||||||
def previous_step(self):
|
def previous_step(self):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user