Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/application/canvastooldock.py

    r11495 r11502  
    1111 
    1212from PyQt4.QtCore import ( 
    13     Qt, QSize, QObject, QPropertyAnimation, QEvent, QRect, 
     13    Qt, QSize, QObject, QPropertyAnimation, QEvent, QRect, QPoint, 
    1414    QModelIndex, QPersistentModelIndex, QEventLoop, QMimeData 
    1515) 
     
    536536 
    537537    return geom 
     538 
     539 
     540def popup_position_from_source(popup, source, orientation=Qt.Vertical): 
     541    popup.ensurePolished() 
     542    source.ensurePolished() 
     543 
     544    if popup.testAttribute(Qt.WA_Resized): 
     545        size = popup.size() 
     546    else: 
     547        size = popup.sizeHint() 
     548 
     549    desktop = QApplication.desktop() 
     550    screen_geom = desktop.availableGeometry(source) 
     551    source_rect = QRect(source.mapToGlobal(QPoint(0, 0)), source.size()) 
     552 
     553    if orientation == Qt.Vertical: 
     554        if source_rect.right() + size.width() < screen_geom.width(): 
     555            x = source_rect.right() 
     556        else: 
     557            x = source_rect.left() - size.width() 
     558 
     559        # bottom overflow 
     560        dy = source_rect.top() + size.height() - screen_geom.height() 
     561        if dy < 0: 
     562            y = source_rect.top() 
     563        else: 
     564            y = source_rect.top() - dy 
     565    else: 
     566        # right overflow 
     567        dx = source_rect.left() + size.width() - screen_geom.width() 
     568        if dx < 0: 
     569            x = source_rect.left() 
     570        else: 
     571            x = source_rect.left() - dx 
     572 
     573        if source_rect.bottom() + size.height() < screen_geom.height(): 
     574            y = source_rect.bottom() 
     575        else: 
     576            y = source_rect.top() - size.height() 
     577 
     578    return QPoint(x, y) 
Note: See TracChangeset for help on using the changeset viewer.