def GetSafeSize(tlw: QW.QWidget, min_size: QC.QSize, gravity) -> QC.QSize: min_width = min_size.width() min_height = min_size.height() frame_padding = tlw.frameGeometry().size() - tlw.size() parent = tlw.parentWidget() if parent is None: width = min_width height = min_height else: parent_window = parent.window() # when we initialise, we might not have a frame yet because we haven't done show() yet # so borrow main gui's if frame_padding.isEmpty(): main_gui = HG.client_controller.gui if main_gui is not None and QP.isValid( main_gui) and not main_gui.isFullScreen(): frame_padding = main_gui.frameGeometry().size( ) - main_gui.size() if parent_window.isFullScreen(): parent_available_size = parent_window.size() else: parent_frame_size = parent_window.frameGeometry().size() parent_available_size = parent_frame_size - frame_padding parent_available_width = parent_available_size.width() parent_available_height = parent_available_size.height() (width_gravity, height_gravity) = gravity if width_gravity == -1: width = min_width else: max_width = parent_available_width - (2 * CHILD_POSITION_PADDING) width = int(width_gravity * max_width) if height_gravity == -1: height = min_height else: max_height = parent_available_height - (2 * CHILD_POSITION_PADDING) height = int(height_gravity * max_height) display_size = GetDisplaySize(tlw) display_available_size = display_size - frame_padding width = min(display_available_size.width() - 2 * CHILD_POSITION_PADDING, width) height = min(display_available_size.height() - 2 * CHILD_POSITION_PADDING, height) return QC.QSize(width, height)