Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Backports:SLE-15-SP4
deepin-kwin
deepin-kwin-tabbox-chameleon-rename.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File deepin-kwin-tabbox-chameleon-rename.patch of Package deepin-kwin
diff -Nur dde-kwin-5.3.7/configures/kwinrc dde-kwin-5.3.7-new/configures/kwinrc --- dde-kwin-5.3.7/configures/kwinrc 2021-03-17 17:39:07.000000000 +0800 +++ dde-kwin-5.3.7-new/configures/kwinrc 2021-05-04 19:39:18.739036254 +0800 @@ -40,7 +40,7 @@ ApplicationsMode=0 DesktopMode=1 HighlightWindows=true -LayoutName=thumbnail_grid +LayoutName=chameleon MinimizedMode=0 MultiScreenMode=0 ShowDesktopMode=1 diff -Nur dde-kwin-5.3.7/tabbox/chameleon/contents/ui/main.qml dde-kwin-5.3.7-new/tabbox/chameleon/contents/ui/main.qml --- dde-kwin-5.3.7/tabbox/chameleon/contents/ui/main.qml 1970-01-01 08:00:00.000000000 +0800 +++ dde-kwin-5.3.7-new/tabbox/chameleon/contents/ui/main.qml 2021-03-17 17:39:07.000000000 +0800 @@ -0,0 +1,327 @@ +import QtQuick 2.0 +import QtQuick.Window 2.0 +import QtGraphicalEffects 1.0 +import QtQuick.Layouts 1.1 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.kquickcontrolsaddons 2.0 +import org.kde.kwin 2.0 as KWin + +// https://techbase.kde.org/Development/Tutorials/KWin/WindowSwitcher +KWin.Switcher { + id: tabBox + currentIndex: itemsView.currentIndex + + Window { + id: dialog + visible: tabBox.visible + // FramelessWindowHint is needed under wayland platform + flags: Qt.BypassWindowManagerHint | Qt.FramelessWindowHint + color: "transparent" + + //NOTE: this is the *current* screen, not the *primary* screen + x: tabBox.screenGeometry.x + tabBox.screenGeometry.width * 0.5 - dialogMainItem.width * 0.5 + y: tabBox.screenGeometry.y + tabBox.screenGeometry.height * 0.5 - dialogMainItem.height * 0.5 + + onVisibleChanged: { + if (visible) { + dialogMainItem.calculateColumnCount(); + if (typeof(dde) != 'undefined') { + dialogMainItem.composited = dde.kwinUtils.isCompositing(); + } + } else { + itemsView.highCount = 0; + } + } + + Component.onCompleted: { + if (typeof(dde) != 'undefined') { + dde.enableDxcb(dialogMainItem) + } + } + + width: dialogMainItem.width + height: dialogMainItem.height + + Rectangle { + id: dialogMainItem + + QtObject { + id: constants + + readonly property int minItemBox: 128 + readonly property int defaultBoxMargin: 32 + readonly property int popupPadding: 70 + + readonly property int columnSpacing: 20 + readonly property int rowSpacing: 20 + readonly property int minItemsEachRow: 7 + readonly property int maxRows: 2 + } + + anchors.margins: 0 + color: "#4cffffff" + radius: 6 + antialiasing: true + border.width: 1 + border.color: "#19000000" + + property bool composited: true + + readonly property int maxWidth: tabBox.screenGeometry.width - constants.popupPadding * 2 + property int maxHeight: tabBox.screenGeometry.height * 0.7 + + property real screenFactor: tabBox.screenGeometry.width / tabBox.screenGeometry.height + property int maxGridColumnsByWidth: Math.floor(maxWidth / itemsView.cellWidth) + + property int gridColumns: maxGridColumnsByWidth + property int gridRows: 1 + + property int optimalWidth: itemsView.cellWidth * gridColumns + property int optimalHeight: itemsView.cellHeight * gridRows + + property bool canStretchX: false + property bool canStretchY: false + width: Math.min(Math.max(itemsView.cellWidth, optimalWidth), maxWidth) + height: Math.min(Math.max(itemsView.cellHeight, optimalHeight), maxHeight) + + clip: true + + function calculateColumnCount() { + var count = itemsView.count + var item_need_scale = false + var spacing = constants.defaultBoxMargin * 2 + 4 + var item_width = constants.minItemBox + constants.columnSpacing + var maxWidth = tabBox.screenGeometry.width - constants.popupPadding * 2 + + var max_items_each_row = Math.floor((maxWidth - spacing) / item_width); + if (max_items_each_row < constants.minItemsEachRow && count > max_items_each_row) { + item_need_scale = true; + max_items_each_row = Math.min(count, constants.minItemsEachRow); + } + + if (max_items_each_row * constants.maxRows < count) { + max_items_each_row = Math.floor(count / constants.maxRows); + item_need_scale = true; + } + + if (item_need_scale) { + item_width = maxWidth / max_items_each_row + } + + gridColumns = Math.min(max_items_each_row, count); + gridRows = Math.ceil(count / max_items_each_row); + if (gridRows == 0) gridRows = 1; + + optimalWidth = item_width * gridColumns + spacing + optimalHeight = item_width * gridRows + spacing + + itemsView.thumbnailWidth = item_width; + itemsView.thumbnailHeight = item_width; + + //console.log('------------------ optimalHeight: ' + optimalHeight + + //', optimalWidth: ' + optimalWidth + + //', max_items_each_row: ' + max_items_each_row + + //', gridColumns: ' + gridColumns + + //', item width: ' + item_width + ', count: ' + count + + //', need scale: ' + item_need_scale + + //', maxWidth: ' + maxWidth); + } + + + property bool mouseEnabled: false + MouseArea { + id: mouseDetector + anchors.fill: parent + hoverEnabled: true + onPositionChanged: dialogMainItem.mouseEnabled = true + + Accessible.role: Accessible.Button + Accessible.name: "Ma_tabbox_mouseDetector" + Accessible.description: "tabbox_mouseDetector" + Accessible.onPressAction: pressed() + } + + Rectangle { + anchors.fill: parent + anchors.margins: 1 + color: "transparent" + radius: 6 + antialiasing: true + border.width: 1 + border.color: "#19000000" + + + Component { + id: highlight + Rectangle { + width: itemsView.cellWidth + height: itemsView.cellHeight + + color: "#01bdff" + radius: 4 + + x: itemsView.currentItem ? itemsView.currentItem.x : 0 + y: itemsView.currentItem ? itemsView.currentItem.y : 0 + + Behavior on x { SmoothedAnimation { easing.type: Easing.InOutCubic; duration: 80 } } + Behavior on y { SmoothedAnimation { easing.type: Easing.InOutCubic; duration: 80 } } + + Accessible.role: Accessible.Indicator + Accessible.name: "Rect_tabbox_Indicator_"+itemsView.currentIndex + Accessible.description: "tabbox_Indicator_currentIndex_currentWindowId" + } + } + + Component { + id: desktopItem + + Rectangle { + anchors.margins: constants.columnSpacing / 2 + anchors.fill: parent + color: "transparent" + + // PlasmaCore.WindowThumbnail has problem to correctly render desktop thumb + // so we use KWin.ThumbnailItem + /* + PlasmaCore.WindowThumbnail { + winId: modelWId + anchors.fill: parent + } + */ + KWin.ThumbnailItem { + anchors.fill: parent + wId: modelWId + } + + Accessible.role: Accessible.Graphic + Accessible.name: "Rect_tabbox_desktopImage_" + modelWId + Accessible.description: "tabbox_desktopImage_desktopImageId" + } + + } + + Component { + id: windowItem + + Rectangle { + anchors.margins: constants.columnSpacing / 2 + anchors.fill: parent + color: "transparent" + + QIconItem { + id: iconItem + //FIXME: this is not the icon we want, seems to be a bug of kwin + icon: modelIcon + clip: true + anchors.fill: parent + smooth: true + } + + // shadow for icon + DropShadow { + anchors.fill: iconItem + horizontalOffset: 0 + verticalOffset: 8 + radius: 8.0 + samples: 17 + color: "#32000000" + source: iconItem + } + + Accessible.role: Accessible.Graphic + Accessible.name: !isCloseable && (modelIndex+1) == itemsView.count ? + "Rect_tabbox_desktopImage_" + modelWId : "Rect_tabbox_windowImage_" + modelWId + Accessible.description: "tabbox_windowImage_windowImageId" + } + } + + GridView { + id: itemsView + model: tabBox.model + // interactive: false // Disable drag to scroll + + anchors.fill: parent + anchors.margins: constants.defaultBoxMargin + + property int thumbnailWidth: constants.minItemBox + property int thumbnailHeight: constants.minItemBox + + cellWidth: thumbnailWidth + cellHeight: thumbnailHeight + + highlight: highlight + highlightFollowsCurrentItem: false + + // allow expansion on increasing count + property int highCount: 0 + onCountChanged: { + if (highCount != count) { + dialogMainItem.calculateColumnCount(); + highCount = count; + } + } + + + delegate: Item { + z: 1 + width: itemsView.cellWidth + height: itemsView.cellHeight + + MouseArea { + anchors.fill: parent + onClicked: { + parent.select() + } + + Accessible.role: Accessible.Button + Accessible.name: !closeable && (index+1) == itemsView.count ? + "Ma_tabbox_desktopItem_" + windowId : "Ma_tabbox_windowItem_" + windowId + Accessible.description: "tabbox_window/desktopItem_winId" + Accessible.onPressAction: pressed() + } + + function select() { + itemsView.currentIndex = index; + itemsView.currentIndexChanged(itemsView.currentIndex); + } + + Rectangle { + anchors.fill: parent + color: "transparent" + + Loader { + anchors.fill: parent + + property int modelIndex: index + property int modelWId: windowId + property variant modelIcon: model.icon + property bool isCloseable: closeable + sourceComponent: { + if (index < 0) { + return undefined + } + + if (!dialogMainItem.composited) return windowItem; + return !isCloseable && (index+1) == itemsView.count ? desktopItem: windowItem + } + } + + } + } // GridView.delegate + + Connections { + target: tabBox + onCurrentIndexChanged: { + itemsView.currentIndex = tabBox.currentIndex + } + } + + // keyNavigationEnabled: true // Requires: Qt 5.7 and QtQuick 2.? (2.7 didn't work). + // keyNavigationWraps: true // Requires: Qt 5.7 and QtQuick 2.? (2.7 didn't work). + + } // GridView + } // Dialog.mainItem + } + } // Dialog +} diff -Nur dde-kwin-5.3.7/tabbox/chameleon/metadata.desktop dde-kwin-5.3.7-new/tabbox/chameleon/metadata.desktop --- dde-kwin-5.3.7/tabbox/chameleon/metadata.desktop 1970-01-01 08:00:00.000000000 +0800 +++ dde-kwin-5.3.7-new/tabbox/chameleon/metadata.desktop 2021-05-04 19:40:45.083066022 +0800 @@ -0,0 +1,17 @@ +[Desktop Entry] +Name=chameleon +Comment= + +Type=Service +X-KDE-ServiceTypes=KWin/WindowSwitcher + +X-Plasma-API=declarativeappletscript +X-Plasma-MainScript=ui/main.qml + +Icon=preferences-system-windows-switcher-big-icons +X-KDE-PluginInfo-Author=Chris Holland +X-KDE-PluginInfo-Email=zrenfire@gmail.com +X-KDE-PluginInfo-Name=chameleon +X-KDE-PluginInfo-Version=4 +X-KDE-PluginInfo-Website=https://github.com/linuxdeepin/dde-kwin +X-KDE-PluginInfo-Depends= diff -Nur dde-kwin-5.3.7/tabbox/CMakeLists.txt dde-kwin-5.3.7-new/tabbox/CMakeLists.txt --- dde-kwin-5.3.7/tabbox/CMakeLists.txt 2021-03-17 17:39:07.000000000 +0800 +++ dde-kwin-5.3.7-new/tabbox/CMakeLists.txt 2021-05-04 19:39:31.263040571 +0800 @@ -1,6 +1,6 @@ install( DIRECTORY - thumbnail_grid + chameleon DESTINATION ${CMAKE_INSTALL_PREFIX}/share/kwin/tabbox ) diff -Nur dde-kwin-5.3.7/tabbox/thumbnail_grid/contents/ui/main.qml dde-kwin-5.3.7-new/tabbox/thumbnail_grid/contents/ui/main.qml --- dde-kwin-5.3.7/tabbox/thumbnail_grid/contents/ui/main.qml 2021-03-17 17:39:07.000000000 +0800 +++ dde-kwin-5.3.7-new/tabbox/thumbnail_grid/contents/ui/main.qml 1970-01-01 08:00:00.000000000 +0800 @@ -1,327 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Window 2.0 -import QtGraphicalEffects 1.0 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.kquickcontrolsaddons 2.0 -import org.kde.kwin 2.0 as KWin - -// https://techbase.kde.org/Development/Tutorials/KWin/WindowSwitcher -KWin.Switcher { - id: tabBox - currentIndex: itemsView.currentIndex - - Window { - id: dialog - visible: tabBox.visible - // FramelessWindowHint is needed under wayland platform - flags: Qt.BypassWindowManagerHint | Qt.FramelessWindowHint - color: "transparent" - - //NOTE: this is the *current* screen, not the *primary* screen - x: tabBox.screenGeometry.x + tabBox.screenGeometry.width * 0.5 - dialogMainItem.width * 0.5 - y: tabBox.screenGeometry.y + tabBox.screenGeometry.height * 0.5 - dialogMainItem.height * 0.5 - - onVisibleChanged: { - if (visible) { - dialogMainItem.calculateColumnCount(); - if (typeof(dde) != 'undefined') { - dialogMainItem.composited = dde.kwinUtils.isCompositing(); - } - } else { - itemsView.highCount = 0; - } - } - - Component.onCompleted: { - if (typeof(dde) != 'undefined') { - dde.enableDxcb(dialogMainItem) - } - } - - width: dialogMainItem.width - height: dialogMainItem.height - - Rectangle { - id: dialogMainItem - - QtObject { - id: constants - - readonly property int minItemBox: 128 - readonly property int defaultBoxMargin: 32 - readonly property int popupPadding: 70 - - readonly property int columnSpacing: 20 - readonly property int rowSpacing: 20 - readonly property int minItemsEachRow: 7 - readonly property int maxRows: 2 - } - - anchors.margins: 0 - color: "#4cffffff" - radius: 6 - antialiasing: true - border.width: 1 - border.color: "#19000000" - - property bool composited: true - - readonly property int maxWidth: tabBox.screenGeometry.width - constants.popupPadding * 2 - property int maxHeight: tabBox.screenGeometry.height * 0.7 - - property real screenFactor: tabBox.screenGeometry.width / tabBox.screenGeometry.height - property int maxGridColumnsByWidth: Math.floor(maxWidth / itemsView.cellWidth) - - property int gridColumns: maxGridColumnsByWidth - property int gridRows: 1 - - property int optimalWidth: itemsView.cellWidth * gridColumns - property int optimalHeight: itemsView.cellHeight * gridRows - - property bool canStretchX: false - property bool canStretchY: false - width: Math.min(Math.max(itemsView.cellWidth, optimalWidth), maxWidth) - height: Math.min(Math.max(itemsView.cellHeight, optimalHeight), maxHeight) - - clip: true - - function calculateColumnCount() { - var count = itemsView.count - var item_need_scale = false - var spacing = constants.defaultBoxMargin * 2 + 4 - var item_width = constants.minItemBox + constants.columnSpacing - var maxWidth = tabBox.screenGeometry.width - constants.popupPadding * 2 - - var max_items_each_row = Math.floor((maxWidth - spacing) / item_width); - if (max_items_each_row < constants.minItemsEachRow && count > max_items_each_row) { - item_need_scale = true; - max_items_each_row = Math.min(count, constants.minItemsEachRow); - } - - if (max_items_each_row * constants.maxRows < count) { - max_items_each_row = Math.floor(count / constants.maxRows); - item_need_scale = true; - } - - if (item_need_scale) { - item_width = maxWidth / max_items_each_row - } - - gridColumns = Math.min(max_items_each_row, count); - gridRows = Math.ceil(count / max_items_each_row); - if (gridRows == 0) gridRows = 1; - - optimalWidth = item_width * gridColumns + spacing - optimalHeight = item_width * gridRows + spacing - - itemsView.thumbnailWidth = item_width; - itemsView.thumbnailHeight = item_width; - - //console.log('------------------ optimalHeight: ' + optimalHeight + - //', optimalWidth: ' + optimalWidth + - //', max_items_each_row: ' + max_items_each_row + - //', gridColumns: ' + gridColumns + - //', item width: ' + item_width + ', count: ' + count + - //', need scale: ' + item_need_scale + - //', maxWidth: ' + maxWidth); - } - - - property bool mouseEnabled: false - MouseArea { - id: mouseDetector - anchors.fill: parent - hoverEnabled: true - onPositionChanged: dialogMainItem.mouseEnabled = true - - Accessible.role: Accessible.Button - Accessible.name: "Ma_tabbox_mouseDetector" - Accessible.description: "tabbox_mouseDetector" - Accessible.onPressAction: pressed() - } - - Rectangle { - anchors.fill: parent - anchors.margins: 1 - color: "transparent" - radius: 6 - antialiasing: true - border.width: 1 - border.color: "#19000000" - - - Component { - id: highlight - Rectangle { - width: itemsView.cellWidth - height: itemsView.cellHeight - - color: "#01bdff" - radius: 4 - - x: itemsView.currentItem ? itemsView.currentItem.x : 0 - y: itemsView.currentItem ? itemsView.currentItem.y : 0 - - Behavior on x { SmoothedAnimation { easing.type: Easing.InOutCubic; duration: 80 } } - Behavior on y { SmoothedAnimation { easing.type: Easing.InOutCubic; duration: 80 } } - - Accessible.role: Accessible.Indicator - Accessible.name: "Rect_tabbox_Indicator_"+itemsView.currentIndex - Accessible.description: "tabbox_Indicator_currentIndex_currentWindowId" - } - } - - Component { - id: desktopItem - - Rectangle { - anchors.margins: constants.columnSpacing / 2 - anchors.fill: parent - color: "transparent" - - // PlasmaCore.WindowThumbnail has problem to correctly render desktop thumb - // so we use KWin.ThumbnailItem - /* - PlasmaCore.WindowThumbnail { - winId: modelWId - anchors.fill: parent - } - */ - KWin.ThumbnailItem { - anchors.fill: parent - wId: modelWId - } - - Accessible.role: Accessible.Graphic - Accessible.name: "Rect_tabbox_desktopImage_" + modelWId - Accessible.description: "tabbox_desktopImage_desktopImageId" - } - - } - - Component { - id: windowItem - - Rectangle { - anchors.margins: constants.columnSpacing / 2 - anchors.fill: parent - color: "transparent" - - QIconItem { - id: iconItem - //FIXME: this is not the icon we want, seems to be a bug of kwin - icon: modelIcon - clip: true - anchors.fill: parent - smooth: true - } - - // shadow for icon - DropShadow { - anchors.fill: iconItem - horizontalOffset: 0 - verticalOffset: 8 - radius: 8.0 - samples: 17 - color: "#32000000" - source: iconItem - } - - Accessible.role: Accessible.Graphic - Accessible.name: !isCloseable && (modelIndex+1) == itemsView.count ? - "Rect_tabbox_desktopImage_" + modelWId : "Rect_tabbox_windowImage_" + modelWId - Accessible.description: "tabbox_windowImage_windowImageId" - } - } - - GridView { - id: itemsView - model: tabBox.model - // interactive: false // Disable drag to scroll - - anchors.fill: parent - anchors.margins: constants.defaultBoxMargin - - property int thumbnailWidth: constants.minItemBox - property int thumbnailHeight: constants.minItemBox - - cellWidth: thumbnailWidth - cellHeight: thumbnailHeight - - highlight: highlight - highlightFollowsCurrentItem: false - - // allow expansion on increasing count - property int highCount: 0 - onCountChanged: { - if (highCount != count) { - dialogMainItem.calculateColumnCount(); - highCount = count; - } - } - - - delegate: Item { - z: 1 - width: itemsView.cellWidth - height: itemsView.cellHeight - - MouseArea { - anchors.fill: parent - onClicked: { - parent.select() - } - - Accessible.role: Accessible.Button - Accessible.name: !closeable && (index+1) == itemsView.count ? - "Ma_tabbox_desktopItem_" + windowId : "Ma_tabbox_windowItem_" + windowId - Accessible.description: "tabbox_window/desktopItem_winId" - Accessible.onPressAction: pressed() - } - - function select() { - itemsView.currentIndex = index; - itemsView.currentIndexChanged(itemsView.currentIndex); - } - - Rectangle { - anchors.fill: parent - color: "transparent" - - Loader { - anchors.fill: parent - - property int modelIndex: index - property int modelWId: windowId - property variant modelIcon: model.icon - property bool isCloseable: closeable - sourceComponent: { - if (index < 0) { - return undefined - } - - if (!dialogMainItem.composited) return windowItem; - return !isCloseable && (index+1) == itemsView.count ? desktopItem: windowItem - } - } - - } - } // GridView.delegate - - Connections { - target: tabBox - onCurrentIndexChanged: { - itemsView.currentIndex = tabBox.currentIndex - } - } - - // keyNavigationEnabled: true // Requires: Qt 5.7 and QtQuick 2.? (2.7 didn't work). - // keyNavigationWraps: true // Requires: Qt 5.7 and QtQuick 2.? (2.7 didn't work). - - } // GridView - } // Dialog.mainItem - } - } // Dialog -} diff -Nur dde-kwin-5.3.7/tabbox/thumbnail_grid/metadata.desktop dde-kwin-5.3.7-new/tabbox/thumbnail_grid/metadata.desktop --- dde-kwin-5.3.7/tabbox/thumbnail_grid/metadata.desktop 2021-03-17 17:39:07.000000000 +0800 +++ dde-kwin-5.3.7-new/tabbox/thumbnail_grid/metadata.desktop 1970-01-01 08:00:00.000000000 +0800 @@ -1,17 +0,0 @@ -[Desktop Entry] -Name=Thumbnail Grid -Comment= - -Type=Service -X-KDE-ServiceTypes=KWin/WindowSwitcher - -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml - -Icon=preferences-system-windows-switcher-big-icons -X-KDE-PluginInfo-Author=Chris Holland -X-KDE-PluginInfo-Email=zrenfire@gmail.com -X-KDE-PluginInfo-Name=thumbnail_grid -X-KDE-PluginInfo-Version=4 -X-KDE-PluginInfo-Website=https://github.com/Zren/kwin-tabbox-thumbnail_grid -X-KDE-PluginInfo-Depends=
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor