diff options
| author | Wagner Soares <[email protected]> | 2026-02-19 17:57:02 -0300 |
|---|---|---|
| committer | Méven Car <[email protected]> | 2026-03-11 16:33:57 +0000 |
| commit | 0f7a9c681c4f7336362bf8a5d1c41f2bc8ed9215 (patch) | |
| tree | 247b5517d24f773a7d6d964474b8b1d92b257b38 /src/views/dolphinview.cpp | |
| parent | 69dd9b4ef427a697dc04a329917cdfba62c5b145 (diff) | |
viewproperties: Add per-folder zoom
Adds ZoomLevel flag to the directory and uses it instead of global settings when globalViewProps is set to false.
CCBUG: 169405
Diffstat (limited to 'src/views/dolphinview.cpp')
| -rw-r--r-- | src/views/dolphinview.cpp | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index b01833d69..b48e1ae74 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -479,9 +479,16 @@ void DolphinView::selectItems(const QRegularExpression ®exp, bool enabled) void DolphinView::setZoomLevel(int level) { + if (m_defaultZoomLevel < 0) { + updateDefaultZoomLevel(); + } + const int oldZoomLevel = zoomLevel(); m_view->setZoomLevel(level); if (zoomLevel() != oldZoomLevel) { + ViewProperties props(viewPropertiesUrl()); + props.setZoomLevel(level == m_defaultZoomLevel ? -1 : level); + hideToolTip(); Q_EMIT zoomLevelChanged(zoomLevel(), oldZoomLevel); } @@ -1798,10 +1805,10 @@ Qt::SortOrder DolphinView::defaultSortOrderForRole(const QByteArray &role) void DolphinView::resetZoomLevel() { - ViewModeSettings settings{m_mode}; - const int userDefaultIconSize = settings.iconSize(); - - setZoomLevel(ZoomLevelInfo::zoomLevelForIconSize(QSize(userDefaultIconSize, userDefaultIconSize))); + if (m_defaultZoomLevel < 0) { + updateDefaultZoomLevel(); + } + setZoomLevel(m_defaultZoomLevel); } void DolphinView::selectFileOnceAvailable(const QUrl &url, const std::function<bool()> &condition) @@ -2312,11 +2319,16 @@ void DolphinView::applyViewProperties(const ViewProperties &props) { m_view->beginTransaction(); + // Caches old zoom level change for signal emitting + int zoomLevelChangeFrom = -1; + const Mode mode = props.viewMode(); if (m_mode != mode) { const Mode previousMode = m_mode; m_mode = mode; + updateDefaultZoomLevel(); + // Changing the mode might result in changing // the zoom level. Remember the old zoom level so // that zoomLevelChanged() can get emitted. @@ -2326,7 +2338,7 @@ void DolphinView::applyViewProperties(const ViewProperties &props) Q_EMIT modeChanged(m_mode, previousMode); if (m_view->zoomLevel() != oldZoomLevel) { - Q_EMIT zoomLevelChanged(m_view->zoomLevel(), oldZoomLevel); + zoomLevelChangeFrom = oldZoomLevel; } } @@ -2383,10 +2395,28 @@ void DolphinView::applyViewProperties(const ViewProperties &props) // Changing the preview-state might result in a changed zoom-level if (oldZoomLevel != zoomLevel()) { - Q_EMIT zoomLevelChanged(zoomLevel(), oldZoomLevel); + zoomLevelChangeFrom = oldZoomLevel; } } + // Only check for folder zoom changes if we're using local view props + if (!GeneralSettings::globalViewProps()) { + const int propZoomLevel = props.zoomLevel(); + if (m_defaultZoomLevel < 0) { + updateDefaultZoomLevel(); + } + + const int nextZoomLevel = propZoomLevel < 0 ? m_defaultZoomLevel : propZoomLevel; + if (nextZoomLevel != m_view->zoomLevel()) { + zoomLevelChangeFrom = m_view->zoomLevel(); + m_view->setZoomLevel(nextZoomLevel); + } + } + + if (zoomLevelChangeFrom > -1) { + Q_EMIT zoomLevelChanged(m_view->zoomLevel(), zoomLevelChangeFrom); + } + KItemListView *itemListView = m_container->controller()->view(); if (itemListView->isHeaderVisible()) { KItemListHeader *header = itemListView->header(); @@ -2409,6 +2439,14 @@ void DolphinView::applyViewProperties(const ViewProperties &props) m_view->endTransaction(); } +void DolphinView::updateDefaultZoomLevel() +{ + ViewModeSettings settings{m_mode}; + const int userDefaultIconSize = settings.iconSize(); + + m_defaultZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(QSize(userDefaultIconSize, userDefaultIconSize)); +} + void DolphinView::applyModeToView() { switch (m_mode) { |
