Warning, /plasma/latte-dock/containment/package/contents/ui/BindingsExternal.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 import QtQuick 2.1
0007 
0008 import org.kde.plasma.core 2.0 as PlasmaCore
0009 import org.kde.plasma.plasmoid 2.0
0010 
0011 import org.kde.latte.core 0.2 as LatteCore
0012 import org.kde.latte.private.containment 0.1 as LatteContainment
0013 
0014 Item {
0015     property bool updateIsEnabled: autosize.inCalculatedIconSize
0016                                    && !visibilityManager.inSlidingIn
0017                                    && !visibilityManager.inSlidingOut
0018                                    && !visibilityManager.inRelocationHiding
0019 
0020     //! Latte::View Main Bindings 
0021     Binding{
0022         target: latteView
0023         property:"maxThickness"
0024         //! prevents updating window geometry during closing window in wayland and such fixes a crash
0025         when: latteView && !visibilityManager.inRelocationHiding && !visibilityManager.inClientSideScreenEdgeSliding //&& !inStartup
0026         value: root.behaveAsPlasmaPanel ? visibilityManager.thicknessAsPanel : metrics.maxThicknessForView
0027     }
0028 
0029     Binding{
0030         target: latteView
0031         property:"normalThickness"
0032         when: latteView && updateIsEnabled
0033         value: root.behaveAsPlasmaPanel ? visibilityManager.thicknessAsPanel : metrics.mask.screenEdge + metrics.mask.thickness.maxNormalForItemsWithoutScreenEdge
0034     }
0035 
0036     Binding{
0037         target: latteView
0038         property:"maxNormalThickness"
0039         when: latteView && updateIsEnabled
0040         value: metrics.mask.thickness.maxNormal
0041     }
0042 
0043     Binding {
0044         target: latteView
0045         property: "headThicknessGap"
0046         when: latteView && updateIsEnabled && !visibilityManager.inClientSideScreenEdgeSliding
0047         value: {
0048             if (root.behaveAsPlasmaPanel || root.viewType === LatteCore.Types.PanelView || (latteView && latteView.byPassWM)) {
0049                 return 0;
0050             }
0051 
0052             return metrics.maxThicknessForView - metrics.mask.thickness.maxNormalForItems;
0053         }
0054     }
0055 
0056     Binding{
0057         target: latteView
0058         property: "type"
0059         when: latteView
0060         value: root.viewType
0061     }
0062 
0063     Binding{
0064         target: latteView
0065         property: "behaveAsPlasmaPanel"
0066         when: latteView
0067         value: root.behaveAsPlasmaPanel
0068     }
0069 
0070     Binding{
0071         target: latteView
0072         property: "fontPixelSize"
0073         when: theme
0074         value: theme.defaultFont.pixelSize
0075     }
0076 
0077     Binding{
0078         target: latteView
0079         property: "maxLength"
0080         when: latteView
0081         value: root.maxLengthPerCentage/100
0082     }
0083 
0084     Binding{
0085         target: latteView
0086         property: "offset"
0087         when: latteView
0088         value: plasmoid.configuration.offset/100
0089     }
0090 
0091     Binding{
0092         target: latteView
0093         property: "screenEdgeMargin"
0094         when: latteView
0095         value: Math.max(0, plasmoid.configuration.screenEdgeMargin)
0096     }
0097 
0098     Binding{
0099         target: latteView
0100         property: "screenEdgeMarginEnabled"
0101         when: latteView
0102         value: root.screenEdgeMarginEnabled && !root.hideThickScreenGap
0103     }
0104 
0105     Binding{
0106         target: latteView
0107         property: "alignment"
0108         when: latteView
0109         value: myView.alignment
0110     }
0111 
0112     Binding{
0113         target: latteView
0114         property: "isTouchingTopViewAndIsBusy"
0115         when: root.viewIsAvailable
0116         value: {
0117             if (!root.viewIsAvailable) {
0118                 return false;
0119             }
0120 
0121             var isTouchingTopScreenEdge = (latteView.y === latteView.screenGeometry.y);
0122             var isStickedOnTopBorder = (plasmoid.configuration.alignment === LatteCore.Types.Justify && plasmoid.configuration.maxLength===100)
0123                     || (plasmoid.configuration.alignment === LatteCore.Types.Top && plasmoid.configuration.offset===0);
0124 
0125             return root.isVertical && !latteView.visibility.isHidden && !isTouchingTopScreenEdge && isStickedOnTopBorder && background.isShown;
0126         }
0127     }
0128 
0129     Binding{
0130         target: latteView
0131         property: "isTouchingBottomViewAndIsBusy"
0132         when: latteView
0133         value: {
0134             if (!root.viewIsAvailable) {
0135                 return false;
0136             }
0137 
0138             var latteBottom = latteView.y + latteView.height;
0139             var screenBottom = latteView.screenGeometry.y + latteView.screenGeometry.height;
0140             var isTouchingBottomScreenEdge = (latteBottom === screenBottom);
0141 
0142             var isStickedOnBottomBorder = (plasmoid.configuration.alignment === LatteCore.Types.Justify && plasmoid.configuration.maxLength===100)
0143                     || (plasmoid.configuration.alignment === LatteCore.Types.Bottom && plasmoid.configuration.offset===0);
0144 
0145             return root.isVertical && !latteView.visibility.isHidden && !isTouchingBottomScreenEdge && isStickedOnBottomBorder && background.isShown;
0146         }
0147     }
0148 
0149     Binding{
0150         target: latteView
0151         property: "colorizer"
0152         when: latteView
0153         value: colorizerManager
0154     }
0155 
0156     Binding{
0157         target: latteView
0158         property: "metrics"
0159         when: latteView
0160         value: metrics
0161     }
0162 
0163     //! View::Effects bindings
0164     Binding{
0165         target: latteView && latteView.effects ? latteView.effects : null
0166         property: "backgroundAllCorners"
0167         when: latteView && latteView.effects
0168         value: plasmoid.configuration.backgroundAllCorners
0169                && (!root.screenEdgeMarginEnabled /*no-floating*/
0170                    || (root.screenEdgeMarginEnabled /*floating with justify alignment and 100% maxlength*/
0171                        && plasmoid.configuration.maxLength===100
0172                        && myView.alignment===LatteCore.Types.Justify
0173                        && !root.hideLengthScreenGaps))
0174     }
0175 
0176     Binding{
0177         target: latteView && latteView.effects ? latteView.effects : null
0178         property: "backgroundRadius"
0179         when: latteView && latteView.effects
0180         value: background.customRadius
0181     }
0182 
0183     Binding{
0184         target: latteView && latteView.effects ? latteView.effects : null
0185         property: "backgroundRadiusEnabled"
0186         when: latteView && latteView.effects
0187         value: background.customRadiusIsEnabled
0188     }
0189 
0190     Binding{
0191         target: latteView && latteView.effects ? latteView.effects : null
0192         property: "backgroundOpacity"
0193         when: latteView && latteView.effects
0194         value: plasmoid.configuration.panelTransparency===-1 /*Default option*/ ? -1 : background.currentOpacity
0195     }
0196 
0197     Binding{
0198         target: latteView && latteView.effects ? latteView.effects : null
0199         property: "drawEffects"
0200         when: latteView && latteView.effects && !root.inStartup
0201         value: LatteCore.WindowSystem.compositingActive
0202                && (((root.blurEnabled && root.useThemePanel) || (root.blurEnabled && root.forceSolidPanel))
0203                    && (!root.inStartup || visibilityManager.inRelocationHiding))
0204     }
0205 
0206     Binding{
0207         target: latteView && latteView.effects ? latteView.effects : null
0208         property: "drawShadows"
0209         when: latteView && latteView.effects
0210         value: root.drawShadowsExternal && (!root.inStartup || visibilityManager.inRelocationHiding) && !(latteView && latteView.visibility.isHidden)
0211     }
0212 
0213     Binding{
0214         target: latteView && latteView.effects ? latteView.effects : null
0215         property:"editShadow"
0216         when: latteView && latteView.effects
0217         value: root.editShadow
0218     }
0219 
0220     Binding{
0221         target: latteView && latteView.effects ? latteView.effects : null
0222         property:"innerShadow"
0223         when: latteView && latteView.effects
0224         value: background.shadows.headThickness
0225     }
0226 
0227     Binding{
0228         target: latteView && latteView.effects ? latteView.effects : null
0229         property: "panelBackgroundSvg"
0230         when: latteView && latteView.effects
0231         value: background.panelBackgroundSvg
0232     }
0233 
0234     Binding{
0235         target: latteView && latteView.effects ? latteView.effects : null
0236         property:"appletsLayoutGeometry"
0237         when: latteView && latteView.effects && visibilityManager.inNormalState
0238         value: {
0239             if (root.behaveAsPlasmaPanel
0240                     || !LatteCore.WindowSystem.compositingActive
0241                     || (!parabolic.isEnabled && root.userShowPanelBackground && plasmoid.configuration.panelSize===100)) {
0242                 var paddingtail = background.tailRoundness + background.tailRoundnessMargin;
0243                 var paddinghead = background.headRoundness + background.headRoundnessMargin;
0244 
0245                 if (root.isHorizontal) {
0246                     return Qt.rect(latteView.localGeometry.x + paddingtail,
0247                                    latteView.localGeometry.y,
0248                                    latteView.localGeometry.width - paddingtail - paddinghead,
0249                                    latteView.localGeometry.height);
0250                 } else {
0251                     return Qt.rect(latteView.localGeometry.x,
0252                                    latteView.localGeometry.y + paddingtail,
0253                                    latteView.localGeometry.width,
0254                                    latteView.localGeometry.height - paddingtail - paddinghead);
0255                 }
0256             }
0257 
0258             return Qt.rect(-1, -1, 0, 0);
0259         }
0260     }
0261 
0262     //! View::Positioner bindings
0263     Binding{
0264         target: latteView && latteView.positioner ? latteView.positioner : null
0265         property: "isStickedOnTopEdge"
0266         when: latteView && latteView.positioner
0267         value: plasmoid.configuration.isStickedOnTopEdge
0268     }
0269 
0270     Binding{
0271         target: latteView && latteView.positioner ? latteView.positioner : null
0272         property: "isStickedOnBottomEdge"
0273         when: latteView && latteView.positioner
0274         value: plasmoid.configuration.isStickedOnBottomEdge
0275     }
0276 
0277     //! View::VisibilityManager
0278     Binding{
0279         target: latteView && latteView.visibility ? latteView.visibility : null
0280         property: "isShownFully"
0281         when: latteView && latteView.visibility
0282         value: myView.isShownFully
0283     }
0284 
0285     Binding{
0286         target: latteView && latteView.visibility ? latteView.visibility : null
0287         property: "strutsThickness"
0288         when: latteView && latteView.visibility
0289         value: {
0290             var isCapableToHideScreenGap = root.screenEdgeMarginEnabled && plasmoid.configuration.hideFloatingGapForMaximized
0291             var mirrorGapFactor = root.mirrorScreenGap ? 2 : 1;
0292 
0293             //! Hide Thickness Screen Gap scenario provides two different struts thicknesses.
0294             //! [1] The first struts thickness is when there is no maximized window and is such case
0295             //!     the view is behaving as in normal AlwaysVisible visibility mode. This is very useful
0296             //!     when users tile windows. [bug #432122]
0297             //! [2] The second struts thickness is when there is a maximized window present and in such case
0298             //!     the view is hiding all of its screen edges. It is used mostly when the view is wanted
0299             //!     to act as a window titlebar.
0300             var thicknessForIsCapableToHideScreenGap = (root.hideThickScreenGap ? 0 : mirrorGapFactor * metrics.mask.screenEdge);
0301 
0302             if (root.behaveAsPlasmaPanel) {
0303                 return isCapableToHideScreenGap ?
0304                             (visibilityManager.thicknessAsPanel + thicknessForIsCapableToHideScreenGap) :
0305                             (mirrorGapFactor*metrics.mask.screenEdge) + visibilityManager.thicknessAsPanel;
0306             }
0307 
0308             var edgeThickness = isCapableToHideScreenGap ? thicknessForIsCapableToHideScreenGap : metrics.mask.screenEdge * mirrorGapFactor;
0309             return edgeThickness + metrics.mask.thickness.maxNormalForItemsWithoutScreenEdge;
0310         }
0311     }
0312 
0313     Binding {
0314         target: latteView && latteView.visibility ? latteView.visibility : null
0315         property: "isFloatingGapWindowEnabled"
0316         when: latteView && latteView.visibility
0317         value: root.hasFloatingGapInputEventsDisabled
0318                && (latteView.visibility.mode === LatteCore.Types.AutoHide
0319                    || latteView.visibility.mode === LatteCore.Types.DodgeActive
0320                    || latteView.visibility.mode === LatteCore.Types.DodgeAllWindows
0321                    || latteView.visibility.mode === LatteCore.Types.DodgeMaximized
0322                    || latteView.visibility.mode === LatteCore.Types.SidebarAutoHide)
0323     }
0324 
0325     //! View::WindowsTracker bindings
0326     Binding{
0327         target: latteView && latteView.windowsTracker ? latteView.windowsTracker : null
0328         property: "enabled"
0329         //! During startup phase windows tracking is not enabled and does not
0330         //! influence startup sequence at all. At the same time no windows tracking
0331         //! takes place during startup and as such startup time is reduced
0332         when: latteView && latteView.windowsTracker && latteView.visibility && !root.inStartup
0333         value: (latteView && latteView.visibility
0334                 && !(latteView.visibility.mode === LatteCore.Types.AlwaysVisible /* Visibility */
0335                      || latteView.visibility.mode === LatteCore.Types.WindowsGoBelow
0336                      || latteView.visibility.mode === LatteCore.Types.AutoHide))
0337                || indexer.clientsTrackingWindowsCount  > 0                   /*Applets Need Windows Tracking */
0338                || root.dragActiveWindowEnabled                               /*Dragging Active Window(Empty Areas)*/
0339                || ((root.backgroundOnlyOnMaximized                           /*Dynamic Background */
0340                     || plasmoid.configuration.solidBackgroundForMaximized
0341                     || root.disablePanelShadowMaximized
0342                     || root.windowColors !== LatteContainment.Types.NoneWindowColors))
0343                || (root.screenEdgeMarginsEnabled                             /*Dynamic Screen Edge Margin*/
0344                    && plasmoid.configuration.hideFloatingGapForMaximized)
0345     }
0346 
0347     //! View::ExtendedInterface bindings
0348     Binding{
0349         target: latteView && latteView.extendedInterface ? latteView.extendedInterface : null
0350         property: "plasmoid"
0351         when: latteView && latteView.extendedInterface
0352         value: plasmoid
0353     }
0354 
0355     Binding{
0356         target: latteView && latteView.extendedInterface ? latteView.extendedInterface : null
0357         property: "layoutManager"
0358         when: latteView && latteView.extendedInterface
0359         value: fastLayoutManager
0360     }
0361 }