def eventFilter(self, obj, event): if obj == self.tabBar(): if event.type() == QEvent.MouseButtonPress and event.buttons( ) == Qt.LeftButton: # can start tab drag only if mouse is at some tab, not at empty tabbar space if self.tabBar().tabAt(event.pos()) >= 0: self.tabDragCanStart = True else: self.dragCanStart = True elif event.type() == QEvent.MouseButtonRelease: self.tabDragCanStart = False self.dragCanStart = False self.manager.updateDragPosition() elif event.type() == QEvent.MouseMove: self.manager.updateDragPosition() if self.tabDragCanStart: if self.tabBar().rect().contains(event.pos()): return False if event.buttons() != Qt.LeftButton: return False toolWindow = self.currentWidget() if not (toolWindow and self.manager.hasToolWindow(toolWindow)): return False self.tabDragCanStart = False #stop internal tab drag in QTabBar releaseEvent = QtGui.QMouseEvent(QEvent.MouseButtonRelease, event.pos(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) QApplication.sendEvent(self.tabBar(), releaseEvent) self.manager.startDrag([toolWindow]) elif self.dragCanStart: self.check_mouse_move(event) return QTabWidget.eventFilter(self, obj, event)
def eventFilter ( self, o, e ): if o == self.tabBar () or o == self.cornerWidget () or o == self.tabFrame or o == self.tabFrame.caption: # debug msg # if e.type () == Qt.QEvent.MouseButtonPress or e.type () == Qt.QEvent.MouseMove: # if o == self.tabBar (): # qWarning ( "eventFilter o == self.tabBar ()" ) # elif o == self.cornerWidget (): # qWarning ( "eventFilter o == self.cornerWidget ()" ) # elif o == self.tabFrame: # qWarning ( "eventFilter o == self.tabFrame" ) # elif o == self.tabFrame.caption: # qWarning ( "eventFilter o == self.tabFrame.caption" ) if e.type () == QEvent.MouseButtonPress and e.buttons () == QtCore.Qt.LeftButton: self.areaDragCanStart = False self.tabDragCanStart = False # if ((pObject == m_pTabFrame & & m_pTabFrame->m_pCaption->rect().contains ( me->pos())) | | pObject == m_pTabFrame->m_pCaption | | (pObject == tabBar() & & tabBar()->tabAt(static_cast < QMouseEvent * > (pEvent)->pos()) >= 0)) if ( o == self.tabFrame and self.tabFrame.caption.rect ().contains ( e.pos () ) ) or o == self.tabFrame.caption or ( o == self.tabBar () and self.tabBar ().tabAt ( e.pos () ) >= 0 ): self.tabDragCanStart = True # qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart = true" ) elif self.manager.config.setdefault ( QTWM_AREA_SHOW_DRAG_HANDLE, False ) and ( o == self.cornerWidget () or ( o == self.tabBar () and self.cornerWidget ().isVisible () and self.manager.config.setdefault ( QTWM_AREA_EMPTY_SPACE_DRAG, False ) ) ): self.areaDragCanStart = True # qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart = true" ) # MyCode # else: # self.dragCanStart = True if self.manager.isMainWrapper ( self.parentWidget () ): self.areaDragCanStart = False if self.count () == 1: self.tabDragCanStart = False elif e.type () == QEvent.MouseButtonRelease: self.tabDragCanStart = False # self.dragCanStart = False self.areaDragCanStart = False self.manager.updateDragPosition () # qWarning ( "[QToolWindowArea] eventFilter: MouseButtonRelease" ) elif e.type () == QEvent.MouseMove: self.manager.updateDragPosition () if self.tabDragCanStart: if self.tabBar ().rect ().contains ( e.pos () ) or ( self.manager.config.setdefault ( QTWM_AREA_SHOW_DRAG_HANDLE, False ) and self.cornerWidget ().rect ().contains ( e.pos () ) ): return False # if qApp.mouseButtons () != QtCore.Qt.LeftButton: if e.buttons () != QtCore.Qt.LeftButton: return False # qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart." ) toolWindow = self.currentWidget () if cast ( toolWindow, QToolWindowSingleTabAreaFrame ) == self.tabFrame: toolWindow = self.tabFrame.contents # if toolWindow is None: # return False if not ( toolWindow and self.manager.ownsToolWindow ( toolWindow ) ): return False self.tabDragCanStart = False # qWarning ( "[QToolWindowArea] eventFilter: tabDragCanStart = false" ) # stop internal tab drag in QTabBar releaseEvent = QMouseEvent ( QEvent.MouseButtonRelease, e.pos (), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier ) qApp.sendEvent ( self.tabBar (), releaseEvent ) # qApp.sendEvent ( o, releaseEvent ) self.manager.startDrag ( [ toolWindow ], self ) # self.releaseMouse () elif self.areaDragCanStart: if qApp.mouseButtons () == QtCore.Qt.LeftButton and not ( self.manager.config.setdefault ( QTWM_AREA_SHOW_DRAG_HANDLE, False ) and self.cornerWidget ().rect ().contains ( self.mapFromGlobal ( QCursor.pos () ) ) ): # qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart." ) toolWindows = [ ] for i in range ( 0, self.count () ): toolWindow = self.widget ( i ) if cast ( toolWindow, QToolWindowSingleTabAreaFrame ) == self.tabFrame: toolWindow = self.tabFrame.contents toolWindows.append ( toolWindow ) self.areaDragCanStart = False # qWarning ( "[QToolWindowArea] eventFilter: areaDragCanStart = false" ) if self.cornerWidget () != None: releaseEvent = QMouseEvent ( Qt.QEvent.MouseButtonRelease, e.pos (), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier ) qApp.sendEvent ( self.cornerWidget (), releaseEvent ) self.manager.startDrag ( toolWindows, self ) self.releaseMouse () # elif self.dragCanStart: # self.check_mouse_move ( e ) return QTabWidget.eventFilter ( self, o, e )