Revert attempt to try to hide powerpoint presentation window. Instead try to minimized the flashing in the taskbar.

This commit is contained in:
Tomas Groth 2015-05-26 22:26:59 +01:00
parent a5cebb73c4
commit 6cd2704814
3 changed files with 29 additions and 30 deletions

View File

@ -151,6 +151,7 @@ class PowerpointDocument(PresentationDocument):
self.slide_count = 0
self.blank_slide = 1
self.blank_click = None
self.presentation_hwnd = None
def load_presentation(self):
"""
@ -269,6 +270,9 @@ class PowerpointDocument(PresentationDocument):
log.exception(e)
trace_error_handler(log)
self.show_error_msg()
# Stop powerpoint from flashing in the taskbar
if self.presentation_hwnd:
win32gui.FlashWindowEx(self.presentation_hwnd, win32con.FLASHW_STOP, 0, 0)
# 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()
@ -353,10 +357,11 @@ class PowerpointDocument(PresentationDocument):
except AttributeError as e:
log.exception('AttributeError while in start_presentation')
log.exception(e)
# Hide the presentation windows icon from the taskbar, if enabled and if powerpoint 2007 or newer
if ppt_window and Settings().value('presentations/powerpoint hide in taskbar') and \
float(self.presentation.Application.Version) >= 12.0:
log.debug('main display size: y=%d, height=%d, x=%d, width=%d' % (size.y(), size.height(), size.x(), size.width()))
# Find the presentation window and save the handle for later
self.presentation_hwnd = None
if ppt_window:
log.debug('main display size: y=%d, height=%d, x=%d, width=%d'
% (size.y(), size.height(), size.x(), size.width()))
win32gui.EnumWindows(self._window_enum_callback, size)
# Make sure powerpoint doesn't steal focus, unless we're on a single screen setup
if len(ScreenList().screen_list) > 1:
@ -365,26 +370,30 @@ class PowerpointDocument(PresentationDocument):
def _window_enum_callback(self, hwnd, size):
"""
Method for callback from win32gui.EnumWindows.
Used to hide the powerpoint presentation window from the taskbar.
Used to find the powerpoint presentation window and stop it flashing in the taskbar.
"""
# Get the size of the current window and if it matches the size of our main display we assume
# it is the powerpoint presentation window and hides it from the taskbar.
# it is the powerpoint presentation window.
(left, top, right, bottom) = win32gui.GetWindowRect(hwnd)
log.debug('window size: left=%d, top=%d, right=%d, width=%d' % (left, top, right, bottom))
log.debug('compare size: %d and %d, %d and %d, %d and %d, %d and %d' % (size.y(), top, size.height(), (bottom - top), size.x(), left, size.width(), (right - left)))
log.debug('compare size: %d and %d, %d and %d, %d and %d, %d and %d'
% (size.y(), top, size.height(), (bottom - top), size.x(), left, size.width(), (right - left)))
log.debug('window title: %s' % win32gui.GetWindowText(hwnd))
module_name = ''
try:
t,p = win32process.GetWindowThreadProcessId(hwnd)
handle = win32api.OpenProcess(0x0410, False, p)
nama = win32process.GetModuleFileNameEx(handle, 0)
log.debug('module name: %s' % nama)
thread_ud, process_id = win32process.GetWindowThreadProcessId(hwnd)
handle = win32api.OpenProcess((win32con.PROCESS_VM_READ | win32con.PROCESS_QUERY_INFORMATION),
False, process_id)
module_name = win32process.GetModuleFileNameEx(handle, 0)
log.debug('module name: %s' % module_name)
except Exception:
log.debug('could not get window module name')
if size.y() == top and size.height() == (bottom - top) and size.x() == left and size.width() == (right - left):
win32gui.ShowWindow(hwnd, win32con.SW_HIDE)
win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE,
win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) | win32con.WS_EX_TOOLWINDOW)
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
if size.y() == top and size.height() == (bottom - top) and size.x() == left and \
size.width() == (right - left) and 'POWERPNT.EXE' in module_name:
log.debug('Found a match and will save the handle')
self.presentation_hwnd = hwnd
# Stop powerpoint from flashing in the taskbar
win32gui.FlashWindowEx(self.presentation_hwnd, win32con.FLASHW_STOP, 0, 0)
def get_slide_number(self):
"""
@ -458,6 +467,9 @@ class PowerpointDocument(PresentationDocument):
if self.get_slide_number() > self.get_slide_count():
log.debug('past end, stepping back to previous')
self.previous_step()
# Stop powerpoint from flashing in the taskbar
if self.presentation_hwnd:
win32gui.FlashWindowEx(self.presentation_hwnd, win32con.FLASHW_STOP, 0, 0)
# 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()

View File

@ -79,9 +79,6 @@ class PresentationTab(SettingsTab):
self.ppt_window_check_box = QtGui.QCheckBox(self.powerpoint_group_box)
self.ppt_window_check_box.setObjectName('ppt_window_check_box')
self.powerpoint_layout.addWidget(self.ppt_window_check_box)
self.ppt_hide_check_box = QtGui.QCheckBox(self.powerpoint_group_box)
self.ppt_hide_check_box.setObjectName('ppt_hide_check_box')
self.powerpoint_layout.addWidget(self.ppt_hide_check_box)
self.left_layout.addWidget(self.powerpoint_group_box)
# Pdf options
self.pdf_group_box = QtGui.QGroupBox(self.left_column)
@ -132,9 +129,6 @@ class PresentationTab(SettingsTab):
self.ppt_window_check_box.setText(
translate('PresentationPlugin.PresentationTab',
'Let PowerPoint control the size and position of the presentation window.'))
self.ppt_hide_check_box.setText(
translate('PresentationPlugin.PresentationTab',
'Hide PowerPoint presentation windows from the taskbar (PowerPoint 2007 and newer)'))
self.pdf_program_check_box.setText(
translate('PresentationPlugin.PresentationTab', 'Use given full path for mudraw or ghostscript binary:'))
@ -162,8 +156,6 @@ class PresentationTab(SettingsTab):
self.ppt_slide_click_check_box.setEnabled(powerpoint_available)
self.ppt_window_check_box.setChecked(Settings().value(self.settings_section + '/powerpoint control window'))
self.ppt_window_check_box.setEnabled(powerpoint_available)
self.ppt_hide_check_box.setChecked(Settings().value(self.settings_section + '/powerpoint hide in taskbar'))
self.ppt_hide_check_box.setEnabled(powerpoint_available)
# load pdf-program settings
enable_pdf_program = Settings().value(self.settings_section + '/enable_pdf_program')
self.pdf_program_check_box.setChecked(enable_pdf_program)
@ -206,10 +198,6 @@ class PresentationTab(SettingsTab):
if Settings().value(setting_key) != self.ppt_window_check_box.checkState():
Settings().setValue(setting_key, self.ppt_window_check_box.checkState())
changed = True
setting_key = self.settings_section + '/powerpoint hide in taskbar'
if Settings().value(setting_key) != self.ppt_hide_check_box.checkState():
Settings().setValue(setting_key, self.ppt_hide_check_box.checkState())
changed = True
# Save pdf-settings
pdf_program = self.pdf_program_path.text()
enable_pdf_program = self.pdf_program_check_box.checkState()

View File

@ -46,8 +46,7 @@ __default_settings__ = {'presentations/override app': QtCore.Qt.Unchecked,
'presentations/presentations files': [],
'presentations/thumbnail_scheme': '',
'presentations/powerpoint slide click advance': QtCore.Qt.Unchecked,
'presentations/powerpoint control window': QtCore.Qt.Unchecked,
'presentations/powerpoint hide in taskbar': QtCore.Qt.Checked
'presentations/powerpoint control window': QtCore.Qt.Unchecked
}