6b949cac02
The current "Minimize Overlapping" window placement tends to position windows in locations that seem completely random, typically in a screen corner. It is doing this because, true to its name, it is trying to avoid overlapping other windows as much as possible. However in practice this is rarely helpful. When the user opens a new window, it's because they want to use it, and positioning the window far from where the user is likely to be looking is counter-productive. This is even more true on today's large and wide displays, where placing the window in a corner may position it entirely outside the user's current field of vision. We get bug reports about this exact issue for notifications (which always appear in a corner by default) by users of such screens. For notifications, this can be justifiable because notifications are designed to be ignorable; app windows on the other hand, are not. As a result, I commonly see Plasma users open windows and then immediately, reflexively grab the window's titlebar and drag it to the center of the screen. I have seen my wife do this. I have seen every YouTube reviewer of Plasma do this. I have even see fellow KDE developers at sprints do this. It seems like quite a common impulse to want a newly-opened window to appear in the center of the screen, which is where the user is likely to already be looking. Thankfully, KWin already has a window placement mode that does this automatically: "Centered". Accordingly, this commit changes the default KWin window placement mode from "Minimize Overlapping" to "Centered". No kconf migration script is provided because this is a better default for most people in most cases, and existing users are highly likely to appreciate this change.
435 lines
15 KiB
XML
435 lines
15 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
|
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
|
<kcfgfile arg="true">
|
|
<parameter name="ruleDescriptionOrNumber"/>
|
|
</kcfgfile>
|
|
<group name="$(ruleDescriptionOrNumber)">
|
|
<entry name="description" key="Description" type="String">
|
|
<label>Rule description</label>
|
|
</entry>
|
|
<entry name="descriptionLegacy" key="description" type="String">
|
|
<label>Rule description (legacy)</label>
|
|
</entry>
|
|
<entry name="DeleteRule" key="deleteRule" type="Bool">
|
|
<label>Delete this rule (for use in imports)</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="wmclass" type="String">
|
|
<label>Window class (application)</label>
|
|
</entry>
|
|
<entry name="wmclassmatch" type="Int">
|
|
<label>Window class string match type</label>
|
|
<default code="true">Rules::UnimportantMatch</default>
|
|
<min code="true">Rules::FirstStringMatch</min>
|
|
<max code="true">Rules::LastStringMatch</max>
|
|
</entry>
|
|
<entry name="wmclasscomplete" type="Bool">
|
|
<label>Match whole window class</label>
|
|
<default code="true">Rules::UnimportantMatch</default>
|
|
</entry>
|
|
|
|
<entry name="windowrole" type="String">
|
|
<label>Window role</label>
|
|
</entry>
|
|
<entry name="windowrolematch" type="Int">
|
|
<label>Window role string match type</label>
|
|
<default code="true">Rules::UnimportantMatch</default>
|
|
<min code="true">Rules::FirstStringMatch</min>
|
|
<max code="true">Rules::LastStringMatch</max>
|
|
</entry>
|
|
|
|
<entry name="title" type="String">
|
|
<label>Window title</label>
|
|
</entry>
|
|
<entry name="titlematch" type="Int">
|
|
<label>Window title string match type</label>
|
|
<default code="true">Rules::UnimportantMatch</default>
|
|
<min code="true">Rules::FirstStringMatch</min>
|
|
<max code="true">Rules::LastStringMatch</max>
|
|
</entry>
|
|
|
|
<entry name="clientmachine" type="String">
|
|
<label>Machine (hostname)</label>
|
|
</entry>
|
|
<entry name="clientmachinematch" type="Int">
|
|
<label>Machine string match type</label>
|
|
<default code="true">Rules::UnimportantMatch</default>
|
|
<min code="true">Rules::FirstStringMatch</min>
|
|
<max code="true">Rules::LastStringMatch</max>
|
|
</entry>
|
|
|
|
<entry name="types" type="UInt">
|
|
<label>Window types that match</label>
|
|
<default>NET::AllTypesMask</default>
|
|
</entry>
|
|
|
|
<entry name="placement" type="Enum">
|
|
<label>Initial placement</label>
|
|
<choices name="Placement::Policy"/>
|
|
<default code="true">Placement::Centered</default>
|
|
</entry>
|
|
<entry name="placementrule" type="Int">
|
|
<label>Initial placement rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="position" type="Point">
|
|
<label>Window position</label>
|
|
<default>invalidPoint</default>
|
|
</entry>
|
|
<entry name="positionrule" type="Int">
|
|
<label>Window position rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="size" type="Size">
|
|
<label>Window size</label>
|
|
</entry>
|
|
<entry name="sizerule" type="Int">
|
|
<label>Window size rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="minsize" type="Size">
|
|
<label>Window minimum size</label>
|
|
<!-- <default>QSize(1, 1)</default> -->
|
|
</entry>
|
|
<entry name="minsizerule" type="Int">
|
|
<label>Window minimum size rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="maxsize" type="Size">
|
|
<label>Window maximum size</label>
|
|
<!-- <default>QSize(32767, 32767)</default> -->
|
|
</entry>
|
|
<entry name="maxsizerule" type="Int">
|
|
<label>Window maximum size rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="opacityactive" type="Int">
|
|
<label>Active opacity</label>
|
|
<min>0</min>
|
|
<max>100</max>
|
|
<default>0</default>
|
|
</entry>
|
|
<entry name="opacityactiverule" type="Int">
|
|
<label>Active opacity rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="opacityinactive" type="Int">
|
|
<label>Inactive opacity</label>
|
|
<min>0</min>
|
|
<max>100</max>
|
|
<default>0</default>
|
|
</entry>
|
|
<entry name="opacityinactiverule" type="Int">
|
|
<label>Inactive opacity rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="ignoregeometry" type="Bool">
|
|
<label>Ignore requested geometry</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="ignoregeometryrule" type="Int">
|
|
<label>Ignore requested geometry rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="desktops" type="StringList">
|
|
<label>List of Desktop Ids</label>
|
|
<default>{}</default>
|
|
</entry>
|
|
<entry name="desktopsrule" type="Int">
|
|
<label>Desktop Ids rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="screen" type="Int">
|
|
<label>Screen number</label>
|
|
<default>0</default>
|
|
</entry>
|
|
<entry name="screenrule" type="Int">
|
|
<label>Screen number rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="activity" type="StringList">
|
|
<label>Activity</label>
|
|
</entry>
|
|
<entry name="activityrule" type="Int">
|
|
<label>Activity rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="type" type="Int">
|
|
<label>Set window type to</label>
|
|
<min code="true">NET::Normal</min>
|
|
<max code="true">NET::CriticalNotification</max>
|
|
<default code="true">NET::Unknown</default>
|
|
</entry>
|
|
<entry name="typerule" type="Int">
|
|
<label>Set window type rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="maximizevert" type="Bool">
|
|
<label>Maximized vertically</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="maximizevertrule" type="Int">
|
|
<label>Maximized vertically rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="maximizehoriz" type="Bool">
|
|
<label>Maximized horizontally</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="maximizehorizrule" type="Int">
|
|
<label>Maximized horizontally rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="minimize" type="Bool">
|
|
<label>Minimized</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="minimizerule" type="Int">
|
|
<label>Minimized rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="shade" type="Bool">
|
|
<label>Shaded</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="shaderule" type="Int">
|
|
<label>Shaded rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="skiptaskbar" type="Bool">
|
|
<label>Skip taskbar</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="skiptaskbarrule" type="Int">
|
|
<label>Skip taskbar rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="skippager" type="Bool">
|
|
<label>Skip pager</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="skippagerrule" type="Int">
|
|
<label>Skip pager rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="skipswitcher" type="Bool">
|
|
<label>Skip switcher</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="skipswitcherrule" type="Int">
|
|
<label>Skip switcher rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="above" type="Bool">
|
|
<label>Keep above</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="aboverule" type="Int">
|
|
<label>Keep above rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="below" type="Bool">
|
|
<label>Keep below</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="belowrule" type="Int">
|
|
<label>Keep below rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="fullscreen" type="Bool">
|
|
<label>Fullscreen</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="fullscreenrule" type="Int">
|
|
<label>Fullscreen rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="noborder" type="Bool">
|
|
<label>No titlebar and frame</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="noborderrule" type="Int">
|
|
<label>No titlebar rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="decocolor" type="String">
|
|
<label>Titlebar color and scheme</label>
|
|
</entry>
|
|
<entry name="decocolorrule" type="Int">
|
|
<label>Titlebar color rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="blockcompositing" type="Bool">
|
|
<label>Block Compositing</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="blockcompositingrule" type="Int">
|
|
<label>Block Compositing rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="fsplevel" type="Int">
|
|
<label>Focus stealing prevention</label>
|
|
<default>0</default>
|
|
<min>0</min>
|
|
<max>4</max>
|
|
</entry>
|
|
<entry name="fsplevelrule" type="Int">
|
|
<label>Focus stealing prevention rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="fpplevel" type="Int">
|
|
<label>Focus protection</label>
|
|
<default>0</default>
|
|
<min>0</min>
|
|
<max>4</max>
|
|
</entry>
|
|
<entry name="fpplevelrule" type="Int">
|
|
<label>Focus protection rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="acceptfocus" type="Bool">
|
|
<label>Accept Focus</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="acceptfocusrule" type="Int">
|
|
<label>Accept Focus rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="closeable" type="Bool">
|
|
<label>Closeable</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="closeablerule" type="Int">
|
|
<label>Closeable rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="autogroup" type="Bool">
|
|
<label>Autogroup with identical</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="autogrouprule" type="Int">
|
|
<label>Autogroup with identical rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="autogroupfg" type="Bool">
|
|
<label>Autogroup in foreground</label>
|
|
<default>true</default>
|
|
</entry>
|
|
<entry name="autogroupfgrule" type="Int">
|
|
<label>Autogroup in foreground rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="autogroupid" type="String">
|
|
<label>Autogroup by ID</label>
|
|
</entry>
|
|
<entry name="autogroupidrule" type="Int">
|
|
<label>Autogroup by ID rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="strictgeometry" type="Bool">
|
|
<label>Obey geometry restrictions</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="strictgeometryrule" type="Int">
|
|
<label>Obey geometry restrictions rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="shortcut" type="String">
|
|
<label>Shortcut</label>
|
|
</entry>
|
|
<entry name="shortcutrule" type="Int">
|
|
<label>Shortcut rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
|
|
<entry name="disableglobalshortcuts" type="Bool">
|
|
<label>Ignore global shortcuts</label>
|
|
<default>false</default>
|
|
</entry>
|
|
<entry name="disableglobalshortcutsrule" type="Int">
|
|
<label>Ignore global shortcuts rule type</label>
|
|
<default code="true">Rules::UnusedForceRule</default>
|
|
</entry>
|
|
|
|
<entry name="desktopfile" type="String">
|
|
<label>Desktop file name</label>
|
|
</entry>
|
|
<entry name="desktopfilerule" type="Int">
|
|
<label>Desktop file name rule type</label>
|
|
<min code="true">Rules::UnusedSetRule</min>
|
|
<max code="true">static_cast<Rules::SetRule>(Rules::ForceTemporarily)</max>
|
|
<default code="true">Rules::UnusedSetRule</default>
|
|
</entry>
|
|
</group>
|
|
</kcfg>
|