diff --git a/CHANGELOG.md b/CHANGELOG.md index c1c32697..2c545cbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Packaging - AppImage: download certificate issue [#280](https://github.com/vinifmor/bauh/issues/280) - GUI - - management panel not fully maximizing + - initialization panel size not based on the current display device size + - management panel: + - not fully maximizing + - not maximizing based on the current display device size (for multiple display setups) + - not respecting a minimal/maximum width based on the current display device size (for multiple display setup) + - dialogs not respecting the current display device width + - not readjusting size after maximizing/minimizing ### Localization (i18n) - Italian ([@albanobattistella](https://github.com/albanobattistella), [@luca-digrazia](https://github.com/luca-digrazia)) diff --git a/bauh/manage.py b/bauh/manage.py index 789ea3d3..495148b3 100644 --- a/bauh/manage.py +++ b/bauh/manage.py @@ -76,7 +76,6 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg manage_window = ManageWindow(i18n=i18n, manager=manager, icon_cache=icon_cache, - screen_size=screen_size, config=app_config, context=context, http_client=http_client, @@ -84,8 +83,7 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg force_suggestions=force_suggestions, logger=logger) - prepare = PreparePanel(screen_size=screen_size, - context=context, + prepare = PreparePanel(context=context, manager=manager, i18n=i18n, manage_window=manage_window, diff --git a/bauh/view/qt/apps_table.py b/bauh/view/qt/apps_table.py index 87dfe125..c08e58e6 100644 --- a/bauh/view/qt/apps_table.py +++ b/bauh/view/qt/apps_table.py @@ -15,6 +15,7 @@ from bauh.api.abstract.model import PackageStatus, CustomSoftwareAction from bauh.commons.html import strip_html, bold from bauh.view.qt.components import IconButton, QCustomMenuAction, QCustomToolbar from bauh.view.qt.dialog import ConfirmationDialog +from bauh.view.qt.qt_utils import get_current_screen_geometry from bauh.view.qt.view_model import PackageView from bauh.view.util.translation import I18n @@ -68,9 +69,8 @@ class PackagesTable(QTableWidget): COL_NUMBER = 9 DEFAULT_ICON_SIZE = QSize(16, 16) - def __init__(self, parent: QWidget, icon_cache: MemoryCache, download_icons: bool, screen_width: int): + def __init__(self, parent: QWidget, icon_cache: MemoryCache, download_icons: bool): super(PackagesTable, self).__init__() - self.screen_width = screen_width self.setObjectName('table_packages') self.setParent(parent) self.window = parent @@ -180,15 +180,16 @@ class PackagesTable(QTableWidget): action=custom_action) def refresh(self, pkg: PackageView): - self._update_row(pkg, update_check_enabled=False, change_update_col=False) + screen_width = get_current_screen_geometry(self.parent()).width() + self._update_row(pkg, screen_width, update_check_enabled=False, change_update_col=False) - def update_package(self, pkg: PackageView, change_update_col: bool = False): + def update_package(self, pkg: PackageView, screen_width: int, change_update_col: bool = False): if self.download_icons and pkg.model.icon_url: icon_request = QNetworkRequest(QUrl(pkg.model.icon_url)) icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True) self.network_man.get(icon_request) - self._update_row(pkg, change_update_col=change_update_col) + self._update_row(pkg, screen_width, change_update_col=change_update_col) def _uninstall(self, pkg: PackageView): if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.uninstall.popup.title'], @@ -255,6 +256,7 @@ class PackagesTable(QTableWidget): self.setEnabled(True) if pkgs: + screen_width = get_current_screen_geometry(self.parent()).width() self.setColumnCount(self.COL_NUMBER if update_check_enabled else self.COL_NUMBER - 1) self.setRowCount(len(pkgs)) @@ -266,16 +268,17 @@ class PackagesTable(QTableWidget): icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True) self.network_man.get(icon_request) - self._update_row(pkg, update_check_enabled) + self._update_row(pkg, screen_width, update_check_enabled) self.scrollToTop() - def _update_row(self, pkg: PackageView, update_check_enabled: bool = True, change_update_col: bool = True): + def _update_row(self, pkg: PackageView, screen_width: int, + update_check_enabled: bool = True, change_update_col: bool = True): self._set_col_icon(0, pkg) - self._set_col_name(1, pkg) - self._set_col_version(2, pkg) - self._set_col_description(3, pkg) - self._set_col_publisher(4, pkg) + self._set_col_name(1, pkg, screen_width) + self._set_col_version(2, pkg, screen_width) + self._set_col_description(3, pkg, screen_width) + self._set_col_publisher(4, pkg, screen_width) self._set_col_type(5, pkg) self._set_col_installed(6, pkg) self._set_col_actions(7, pkg) @@ -355,7 +358,7 @@ class PackagesTable(QTableWidget): col_type_icon.setToolTip(icon_data['tip']) self.setCellWidget(pkg.table_index, col, col_type_icon) - def _set_col_version(self, col: int, pkg: PackageView): + def _set_col_version(self, col: int, pkg: PackageView, screen_width: int): label_version = QLabel(str(pkg.model.version if pkg.model.version else '?')) label_version.setObjectName('app_version') label_version.setAlignment(Qt.AlignCenter) @@ -383,7 +386,7 @@ class PackagesTable(QTableWidget): f"{self.i18n['version.latest']}: {pkg.model.latest_version})" label_version.setText(f"{label_version.text()} > {pkg.model.latest_version}") - if label_version.sizeHint().width() / self.screen_width > 0.22: + if label_version.sizeHint().width() / screen_width > 0.22: label_version.setText(pkg.model.latest_version) item.setToolTip(tooltip) @@ -426,7 +429,7 @@ class PackagesTable(QTableWidget): self._update_icon(col_icon, icon) self.setCellWidget(pkg.table_index, col, col_icon) - def _set_col_name(self, col: int, pkg: PackageView): + def _set_col_name(self, col: int, pkg: PackageView, screen_width: int): col_name = QLabel() col_name.setObjectName('app_name') col_name.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred) @@ -439,7 +442,7 @@ class PackagesTable(QTableWidget): col_name.setToolTip(self.i18n['app.name'].lower()) col_name.setText(name) - screen_perc = col_name.sizeHint().width() / self.screen_width + screen_perc = col_name.sizeHint().width() / screen_width if screen_perc > 0.15: max_chars = int(len(name) * 0.15 / screen_perc) - 3 @@ -454,7 +457,7 @@ class PackagesTable(QTableWidget): sizes = icon.availableSizes() return sizes[-1] if sizes else self.DEFAULT_ICON_SIZE - def _set_col_description(self, col: int, pkg: PackageView): + def _set_col_description(self, col: int, pkg: PackageView, screen_width: int): item = QLabel() item.setObjectName('app_description') @@ -468,7 +471,7 @@ class PackagesTable(QTableWidget): item.setText(desc) - current_width_perc = item.sizeHint().width() / self.screen_width + current_width_perc = item.sizeHint().width() / screen_width if current_width_perc > 0.18: max_width = int(len(desc) * 0.18 / current_width_perc) - 3 desc = desc[0:max_width] + '...' @@ -479,7 +482,7 @@ class PackagesTable(QTableWidget): self.setCellWidget(pkg.table_index, col, item) - def _set_col_publisher(self, col: int, pkg: PackageView): + def _set_col_publisher(self, col: int, pkg: PackageView, screen_width: int): item = QToolBar() publisher = pkg.model.get_publisher() @@ -494,7 +497,7 @@ class PackagesTable(QTableWidget): if publisher: lb_name.setText(publisher) - screen_perc = lb_name.sizeHint().width() / self.screen_width + screen_perc = lb_name.sizeHint().width() / screen_width if screen_perc > 0.12: max_chars = int(len(publisher) * 0.12 / screen_perc) - 3 diff --git a/bauh/view/qt/info.py b/bauh/view/qt/info.py index 618988e7..f12f2d29 100644 --- a/bauh/view/qt/info.py +++ b/bauh/view/qt/info.py @@ -1,6 +1,6 @@ from collections.abc import Iterable -from PyQt5.QtCore import QSize, Qt +from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QCursor from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \ QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QScrollArea, QFrame, QWidget, QSizePolicy, \ @@ -8,6 +8,7 @@ from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \ from bauh.api.abstract.cache import MemoryCache from bauh.view.qt.components import new_spacer +from bauh.view.qt.qt_utils import get_current_screen_geometry from bauh.view.util.translation import I18n IGNORED_ATTRS = {'name', '__app__'} @@ -15,10 +16,9 @@ IGNORED_ATTRS = {'name', '__app__'} class InfoDialog(QDialog): - def __init__(self, pkg_info: dict, icon_cache: MemoryCache, i18n: I18n, screen_size: QSize): + def __init__(self, pkg_info: dict, icon_cache: MemoryCache, i18n: I18n): super(InfoDialog, self).__init__() self.setWindowTitle(str(pkg_info['__app__'])) - self.screen_size = screen_size self.i18n = i18n layout = QVBoxLayout() self.setLayout(layout) @@ -108,7 +108,9 @@ class InfoDialog(QDialog): lower_container.layout().addWidget(self.bt_close) layout.addWidget(lower_container) self.setMinimumWidth(int(self.gbox_info.sizeHint().width() * 1.2)) - self.setMaximumHeight(int(screen_size.height() * 0.8)) + + screen_height = get_current_screen_geometry().height() + self.setMaximumHeight(int(screen_height * 0.8)) self.adjustSize() def _gen_show_button(self, idx: int, val): diff --git a/bauh/view/qt/prepare.py b/bauh/view/qt/prepare.py index b93ee42e..f1b94fc6 100644 --- a/bauh/view/qt/prepare.py +++ b/bauh/view/qt/prepare.py @@ -15,7 +15,7 @@ from bauh.api.abstract.controller import SoftwareManager, SoftwareAction from bauh.api.abstract.handler import TaskManager from bauh.api import user from bauh.view.qt.components import new_spacer, QCustomToolbar -from bauh.view.qt.qt_utils import centralize +from bauh.view.qt.qt_utils import centralize, get_current_screen_geometry from bauh.view.qt.root import RootDialog from bauh.view.qt.thread import AnimateProgress from bauh.view.util.translation import I18n @@ -145,7 +145,7 @@ class PreparePanel(QWidget, TaskManager): signal_status = pyqtSignal(int) signal_password_response = pyqtSignal(bool, str) - def __init__(self, context: ApplicationContext, manager: SoftwareManager, screen_size: QSize, + def __init__(self, context: ApplicationContext, manager: SoftwareManager, i18n: I18n, manage_window: QWidget, app_config: dict, force_suggestions: bool = False): super(PreparePanel, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint) self.i18n = i18n @@ -153,9 +153,7 @@ class PreparePanel(QWidget, TaskManager): self.app_config = app_config self.manage_window = manage_window self.setWindowTitle('{} ({})'.format(__app_name__, self.i18n['prepare_panel.title.start'].lower())) - self.setMinimumWidth(int(screen_size.width() * 0.5)) - self.setMinimumHeight(int(screen_size.height() * 0.35)) - self.setMaximumHeight(int(screen_size.height() * 0.95)) + self.setLayout(QVBoxLayout()) self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) self.manager = manager @@ -292,6 +290,10 @@ class PreparePanel(QWidget, TaskManager): super(PreparePanel, self).show() self.prepare_thread.start() centralize(self) + screen_size = get_current_screen_geometry() + self.setMinimumWidth(int(screen_size.width() * 0.5)) + self.setMinimumHeight(int(screen_size.height() * 0.35)) + self.setMaximumHeight(int(screen_size.height() * 0.95)) def start(self, tasks: int): self.started_at = time.time() diff --git a/bauh/view/qt/qt_utils.py b/bauh/view/qt/qt_utils.py index ca092d6e..f84ea46d 100644 --- a/bauh/view/qt/qt_utils.py +++ b/bauh/view/qt/qt_utils.py @@ -1,16 +1,18 @@ -from PyQt5.QtCore import Qt +from typing import Optional, Union + +from PyQt5.QtCore import Qt, QRect, QPoint from PyQt5.QtGui import QIcon, QPixmap -from PyQt5.QtWidgets import QWidget, QApplication +from PyQt5.QtWidgets import QWidget, QApplication, QDesktopWidget from bauh.view.util import resource +desktop: Optional[QDesktopWidget] = None + def centralize(widget: QWidget): - geo = widget.frameGeometry() - screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos()) - center_point = QApplication.desktop().screenGeometry(screen).center() - geo.moveCenter(center_point) - widget.move(geo.topLeft()) + screen_geometry = get_current_screen_geometry() + widget.frameGeometry().moveCenter(screen_geometry.center()) + widget.move(widget.frameGeometry().topLeft()) def load_icon(path: str, width: int, height: int = None) -> QIcon: @@ -27,3 +29,13 @@ def measure_based_on_width(percent: float) -> int: def measure_based_on_height(percent: float) -> int: return round(percent * QApplication.primaryScreen().size().height()) + + +def get_current_screen_geometry(source_widget: Optional[Union[QWidget, QPoint]] = None) -> QRect: + global desktop + + if not desktop: + desktop = QDesktopWidget() + + current_screen_idx = desktop.screenNumber(source_widget if source_widget else desktop.cursor().pos()) + return desktop.screen(current_screen_idx).geometry() diff --git a/bauh/view/qt/thread.py b/bauh/view/qt/thread.py index 9ff1f5b2..5b8eb18c 100644 --- a/bauh/view/qt/thread.py +++ b/bauh/view/qt/thread.py @@ -29,6 +29,7 @@ from bauh.view.core import timeshift from bauh.view.core.config import CoreConfigManager, BACKUP_REMOVE_METHODS, BACKUP_DEFAULT_REMOVE_METHOD from bauh.view.qt import commons from bauh.view.qt.commons import sort_packages +from bauh.view.qt.qt_utils import get_current_screen_geometry from bauh.view.qt.view_model import PackageView, PackageViewStatus from bauh.view.util.translation import I18n @@ -231,12 +232,12 @@ class UpgradeSelected(AsyncAction): SUMMARY_FILE = UPGRADE_LOGS_DIR + '/{}_summary.txt' def __init__(self, manager: SoftwareManager, internet_checker: InternetChecker, i18n: I18n, - screen_width: int, pkgs: List[PackageView] = None): + parent_widget: QWidget, pkgs: List[PackageView] = None): super(UpgradeSelected, self).__init__(i18n=i18n) self.pkgs = pkgs self.manager = manager self.internet_checker = internet_checker - self.screen_width = screen_width + self._parent_widget = parent_widget def _req_as_option(self, req: UpgradeRequirement, tooltip: bool = True, custom_tooltip: str = None, required_size: bool = True, display_sizes: bool = True, positive_size_symbol: bool = False) -> InputOption: @@ -495,9 +496,10 @@ class UpgradeSelected(AsyncAction): comps.insert(0, TextComponent(f'{disc_size_text} ({download_size_text})', size=14)) comps.insert(1, TextComponent('')) + screen_width = get_current_screen_geometry(self._parent_widget).width() if not self.request_confirmation(title=self.i18n['action.update.summary'].capitalize(), body='', components=comps, confirmation_label=self.i18n['proceed'].capitalize(), deny_label=self.i18n['cancel'].capitalize(), - confirmation_button=can_upgrade, min_width=int(0.45 * self.screen_width)): + confirmation_button=can_upgrade, min_width=int(0.45 * screen_width)): self.notify_finished({'success': success, 'updated': updated, 'types': updated_types, 'id': None}) self.pkgs = None return diff --git a/bauh/view/qt/window.py b/bauh/view/qt/window.py index 2d033675..3f287cbe 100755 --- a/bauh/view/qt/window.py +++ b/bauh/view/qt/window.py @@ -5,8 +5,8 @@ import time from pathlib import Path from typing import List, Type, Set, Tuple, Optional -from PyQt5.QtCore import QEvent, Qt, pyqtSignal, QSize -from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QCursor +from PyQt5.QtCore import QEvent, Qt, pyqtSignal, QRect +from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QCursor, QMoveEvent from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \ QLabel, QPlainTextEdit, QProgressBar, QPushButton, QComboBox, QApplication, QListView, QSizePolicy, \ QMenu, QHBoxLayout @@ -33,6 +33,7 @@ from bauh.view.qt.components import new_spacer, IconButton, QtComponentsManager, from bauh.view.qt.dialog import ConfirmationDialog from bauh.view.qt.history import HistoryDialog from bauh.view.qt.info import InfoDialog +from bauh.view.qt.qt_utils import get_current_screen_geometry from bauh.view.qt.root import RootDialog from bauh.view.qt.screenshots import ScreenshotsDialog from bauh.view.qt.settings import SettingsWindow @@ -95,7 +96,7 @@ class ManageWindow(QWidget): signal_table_update = pyqtSignal() signal_stop_notifying = pyqtSignal() - def __init__(self, i18n: I18n, icon_cache: MemoryCache, manager: SoftwareManager, screen_size: QSize, config: dict, + def __init__(self, i18n: I18n, icon_cache: MemoryCache, manager: SoftwareManager, config: dict, context: ApplicationContext, http_client: HttpClient, logger: logging.Logger, icon: QIcon, force_suggestions: bool = False): super(ManageWindow, self).__init__() @@ -111,7 +112,6 @@ class ManageWindow(QWidget): self.pkgs_installed = [] # cached installed packages self.display_limit = config['ui']['table']['max_displayed'] self.icon_cache = icon_cache - self.screen_size = screen_size self.config = config self.context = context self.http_client = http_client @@ -278,8 +278,7 @@ class ManageWindow(QWidget): self.table_container.layout().setContentsMargins(0, 0, 0, 0) self.table_apps = PackagesTable(self, self.icon_cache, - download_icons=bool(self.config['download']['icons']), - screen_width=int(screen_size.width())) + download_icons=bool(self.config['download']['icons'])) self.table_apps.change_headers_policy() self.table_container.layout().addWidget(self.table_apps) @@ -332,7 +331,7 @@ class ManageWindow(QWidget): self.thread_update = self._bind_async_action(UpgradeSelected(manager=self.manager, i18n=self.i18n, internet_checker=context.internet_checker, - screen_width=screen_size.width()), + parent_widget=self), finished_call=self._finish_upgrade_selected) self.thread_refresh = self._bind_async_action(RefreshApps(i18n, self.manager), finished_call=self._finish_refresh_packages, only_finished=True) self.thread_uninstall = self._bind_async_action(UninstallPackage(self.manager, self.icon_cache, self.i18n), finished_call=self._finish_uninstall) @@ -432,8 +431,6 @@ class ManageWindow(QWidget): self.container_progress.add_space() self.layout.addWidget(self.container_progress) - qt_utils.centralize(self) - self.filter_only_apps = True self.type_filter = self.any_type_filter self.category_filter = self.any_category_filter @@ -456,9 +453,8 @@ class ManageWindow(QWidget): self.thread_load_installed = NotifyInstalledLoaded() self.thread_load_installed.signal_loaded.connect(self._finish_loading_installed) - self.setMinimumHeight(int(screen_size.height() * 0.5)) - self.setMinimumWidth(int(screen_size.width() * 0.5)) self._register_groups() + self._screen_geometry: Optional[QRect] = None def _register_groups(self): common_filters = (CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME) @@ -594,6 +590,8 @@ class ManageWindow(QWidget): self.thread_warnings.start() qt_utils.centralize(self) + self._screen_geometry = get_current_screen_geometry() + self._update_size_limits() def verify_warnings(self): self.thread_warnings.start() @@ -668,7 +666,8 @@ class ManageWindow(QWidget): if self.table_apps.isEnabled() and self.pkgs is not None and 0 <= idx < len(self.pkgs): pkg = self.pkgs[idx] pkg.status = PackageViewStatus.READY - self.table_apps.update_package(pkg) + screen_width = get_current_screen_geometry(self).width() + self.table_apps.update_package(pkg, screen_width=screen_width) def _reload_categories(self): categories = set() @@ -684,11 +683,33 @@ class ManageWindow(QWidget): if categories: self._update_categories(categories, keep_selected=True) + def _update_size_limits(self): + self.setMinimumHeight(int(self._screen_geometry.height() * 0.5)) + self.setMinimumWidth(int(self._screen_geometry.width() * 0.5)) + self.setMaximumWidth(int(self._screen_geometry.width())) + def changeEvent(self, e: QEvent): if isinstance(e, QWindowStateChangeEvent): self._maximized = self.isMaximized() self.table_apps.change_headers_policy(maximized=self._maximized) + if not self._maximized: + self._reorganize() + self.adjustSize() + + def event(self, e: QEvent) -> bool: + res = super(ManageWindow, self).event(e) + + if self.isVisible() and e.type() == 216: # drop event + current_geometry = get_current_screen_geometry() + if current_geometry != self._screen_geometry: # only if the display device has changed + self._screen_geometry = current_geometry + self._update_size_limits() + self._reorganize() + self.adjustSize() + + return res + def _handle_console(self, checked: bool): if checked: self.textarea_details.show() @@ -777,6 +798,7 @@ class ManageWindow(QWidget): util.notify_user('{} ({}) {}'.format(src_pkg.model.name, src_pkg.model.get_type(), self.i18n['uninstalled'])) if res['removed']: + screen_width = get_current_screen_geometry(self).width() for list_idx, pkg_list in enumerate((self.pkgs_available, self.pkgs, self.pkgs_installed)): if pkg_list: removed_idxs = [] @@ -793,7 +815,9 @@ class ManageWindow(QWidget): removed_idxs.append(pkgv_idx) if self.search_performed and list_idx == 1: # only for displayed - self.table_apps.update_package(pkgv, change_update_col=True) + self.table_apps.update_package(pkgv, + screen_width=screen_width, + change_update_col=True) break # as the model has been found, stops the loop @@ -1283,8 +1307,7 @@ class ManageWindow(QWidget): if pkg_info: if len(pkg_info) > 1: - dialog_info = InfoDialog(pkg_info=pkg_info, icon_cache=self.icon_cache, - i18n=self.i18n, screen_size=self.screen_size) + dialog_info = InfoDialog(pkg_info=pkg_info, icon_cache=self.icon_cache, i18n=self.i18n) dialog_info.exec_() else: dialog.show_message(title=self.i18n['warning'].capitalize(), @@ -1459,10 +1482,11 @@ class ManageWindow(QWidget): self.pkgs_available.insert(new_idx, data[2]) # updating the respective table rows: + screen_width = get_current_screen_geometry(self).width() for displayed in self.pkgs: for model in models_updated: if displayed.model == model: - self.table_apps.update_package(displayed, change_update_col=True) + self.table_apps.update_package(displayed, screen_width=screen_width, change_update_col=True) self.update_bt_upgrade() @@ -1562,7 +1586,8 @@ class ManageWindow(QWidget): self.settings_window.handle_display() else: self.settings_window = SettingsWindow(manager=self.manager, i18n=self.i18n, window=self) - self.settings_window.setMinimumWidth(int(self.screen_size.width() / 4)) + screen_width = get_current_screen_geometry(self).width() + self.settings_window.setMinimumWidth(int(screen_width / 4)) self.settings_window.resize(self.size()) self.settings_window.adjustSize() qt_utils.centralize(self.settings_window) @@ -1625,10 +1650,11 @@ class ManageWindow(QWidget): self._update_table_indexes() self.update_bt_upgrade() else: + screen_width = get_current_screen_geometry(self).width() for pkg in self.pkgs: if pkg == res['pkg']: pkg.update_model(res['pkg'].model) - self.table_apps.update_package(pkg, change_update_col=not any([self.search_performed, self.suggestions_requested])) + self.table_apps.update_package(pkg, screen_width=screen_width, change_update_col=not any([self.search_performed, self.suggestions_requested])) self.update_bt_upgrade() break