From 6cd270481434d475ffd44d6a115bcc1ffd544d10 Mon Sep 17 00:00:00 2001 From: Tomas Groth Date: Tue, 26 May 2015 22:26:59 +0100 Subject: [PATCH] Revert attempt to try to hide powerpoint presentation window. Instead try to minimized the flashing in the taskbar. --- .../presentations/lib/powerpointcontroller.py | 44 ++++++++++++------- .../presentations/lib/presentationtab.py | 12 ----- .../presentations/presentationplugin.py | 3 +- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index cf846e5df..f20ef57ac 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -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() diff --git a/openlp/plugins/presentations/lib/presentationtab.py b/openlp/plugins/presentations/lib/presentationtab.py index e157b5012..a93ceb7b9 100644 --- a/openlp/plugins/presentations/lib/presentationtab.py +++ b/openlp/plugins/presentations/lib/presentationtab.py @@ -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() diff --git a/openlp/plugins/presentations/presentationplugin.py b/openlp/plugins/presentations/presentationplugin.py index 5065c6064..361df514c 100644 --- a/openlp/plugins/presentations/presentationplugin.py +++ b/openlp/plugins/presentations/presentationplugin.py @@ -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 }