diff --git a/geometry.cpp b/geometry.cpp
index ad8352e438..fdb112bdc9 100644
--- a/geometry.cpp
+++ b/geometry.cpp
@@ -1604,6 +1604,9 @@ const QPoint Client::calculateGravitation(bool invert, int gravity) const
void Client::configureRequest(int value_mask, int rx, int ry, int rw, int rh, int gravity, bool from_tool)
{
+ if (rules()->checkIgnoreGeometry(false))
+ return; // user said: "FU!"
+
// "maximized" is a user setting -> we do not allow the client to resize itself
// away from this & against the users explicit wish
kDebug(1212) << this << bool(value_mask & (CWX|CWWidth|CWY|CWHeight)) <<
diff --git a/kcmkwin/kwinrules/ruleswidget.cpp b/kcmkwin/kwinrules/ruleswidget.cpp
index 4a3159e210..04ff275277 100644
--- a/kcmkwin/kwinrules/ruleswidget.cpp
+++ b/kcmkwin/kwinrules/ruleswidget.cpp
@@ -111,7 +111,7 @@ RulesWidget::RulesWidget(QWidget* parent)
// workarounds tab
SETUP(fsplevel, force);
SETUP(type, force);
- SETUP(ignoreposition, force);
+ SETUP(ignoregeometry, set);
SETUP(minsize, force);
SETUP(maxsize, force);
SETUP(strictgeometry, force);
@@ -186,7 +186,7 @@ void RulesWidget::updateEnableshortcut()
// workarounds tab
UPDATE_ENABLE_SLOT(fsplevel)
UPDATE_ENABLE_SLOT(type)
-UPDATE_ENABLE_SLOT(ignoreposition)
+UPDATE_ENABLE_SLOT(ignoregeometry)
UPDATE_ENABLE_SLOT(minsize)
UPDATE_ENABLE_SLOT(maxsize)
UPDATE_ENABLE_SLOT(strictgeometry)
@@ -454,7 +454,7 @@ void RulesWidget::setRules(Rules* rules)
LINEEDIT_SET_RULE(shortcut,);
COMBOBOX_FORCE_RULE(fsplevel,);
COMBOBOX_FORCE_RULE(type, typeToCombo);
- CHECKBOX_FORCE_RULE(ignoreposition,);
+ CHECKBOX_SET_RULE(ignoregeometry,);
LINEEDIT_FORCE_RULE(minsize, sizeToStr);
LINEEDIT_FORCE_RULE(maxsize, sizeToStr);
CHECKBOX_FORCE_RULE(strictgeometry,);
@@ -551,7 +551,7 @@ Rules* RulesWidget::rules() const
LINEEDIT_SET_RULE(shortcut,);
COMBOBOX_FORCE_RULE(fsplevel,);
COMBOBOX_FORCE_RULE(type, comboToType);
- CHECKBOX_FORCE_RULE(ignoreposition,);
+ CHECKBOX_SET_RULE(ignoregeometry,);
LINEEDIT_FORCE_RULE(minsize, strToSize);
LINEEDIT_FORCE_RULE(maxsize, strToSize);
CHECKBOX_FORCE_RULE(strictgeometry,);
@@ -671,7 +671,7 @@ void RulesWidget::prefillUnusedValues(const KWindowInfo& info)
//LINEEDIT_PREFILL( shortcut, );
//COMBOBOX_PREFILL( fsplevel, );
COMBOBOX_PREFILL(type, typeToCombo, info.windowType(SUPPORTED_MANAGED_WINDOW_TYPES_MASK));
- //CHECKBOX_PREFILL( ignoreposition, );
+ //CHECKBOX_PREFILL( ignoregeometry, );
LINEEDIT_PREFILL(minsize, sizeToStr, info.frameGeometry().size());
LINEEDIT_PREFILL(maxsize, sizeToStr, info.frameGeometry().size());
//CHECKBOX_PREFILL( strictgeometry, );
diff --git a/kcmkwin/kwinrules/ruleswidget.h b/kcmkwin/kwinrules/ruleswidget.h
index 585c4feded..4392ac93e1 100644
--- a/kcmkwin/kwinrules/ruleswidget.h
+++ b/kcmkwin/kwinrules/ruleswidget.h
@@ -82,7 +82,7 @@ private slots:
// workarounds tab
void updateEnablefsplevel();
void updateEnabletype();
- void updateEnableignoreposition();
+ void updateEnableignoregeometry();
void updateEnableminsize();
void updateEnablemaxsize();
void updateEnablestrictgeometry();
diff --git a/kcmkwin/kwinrules/ruleswidgetbase.ui b/kcmkwin/kwinrules/ruleswidgetbase.ui
index 60c781ed91..bfa9891328 100644
--- a/kcmkwin/kwinrules/ruleswidgetbase.ui
+++ b/kcmkwin/kwinrules/ruleswidgetbase.ui
@@ -14,7 +14,7 @@
-
- 0
+ 1
@@ -1114,7 +1114,7 @@
-
-
+
Windows can ask to appear in a certain position.
By default this overrides the placement strategy
@@ -1127,7 +1127,7 @@ to unconditionally popup in the middle of your screen.
-
-
+
false
@@ -1136,11 +1136,26 @@ to unconditionally popup in the middle of your screen.
Do Not Affect
+ -
+
+ Apply Initially
+
+
+ -
+
+ Remember
+
+
-
Force
+ -
+
+ Apply Now
+
+
-
Force Temporarily
@@ -1149,7 +1164,7 @@ to unconditionally popup in the middle of your screen.
-
-
+
false
@@ -2518,8 +2533,8 @@ but this may sometimes fail or superact.
enable_placement
rule_placement
placement
- enable_ignoreposition
- rule_ignoreposition
+ enable_ignoregeometry
+ rule_ignoregeometry
enable_minsize
rule_minsize
minsize
diff --git a/manage.cpp b/manage.cpp
index c1af7dd7b6..0a55feeb3c 100644
--- a/manage.cpp
+++ b/manage.cpp
@@ -281,7 +281,7 @@ bool Client::manage(Window w, bool isMapped)
; // Force using placement policy
else
usePosition = true;
- if (!rules()->checkIgnoreGeometry(!usePosition)) {
+ if (!rules()->checkIgnoreGeometry(!usePosition, true)) {
if (((xSizeHint.flags & PPosition)) ||
(xSizeHint.flags & USPosition)) {
placementDone = true;
diff --git a/rules.cpp b/rules.cpp
index 8a1edc8531..2beca526d7 100644
--- a/rules.cpp
+++ b/rules.cpp
@@ -52,7 +52,7 @@ Rules::Rules()
, maxsizerule(UnusedForceRule)
, opacityactiverule(UnusedForceRule)
, opacityinactiverule(UnusedForceRule)
- , ignorepositionrule(UnusedForceRule)
+ , ignoregeometryrule(UnusedSetRule)
, desktoprule(UnusedSetRule)
, screenrule(UnusedSetRule)
, activityrule(UnusedSetRule)
@@ -158,7 +158,7 @@ void Rules::readFromCfg(const KConfigGroup& cfg)
READ_FORCE_RULE(opacityinactive, , 0);
if (opacityinactive < 0 || opacityinactive > 100)
opacityinactive = 100;
- READ_FORCE_RULE(ignoreposition, , false);
+ READ_SET_RULE(ignoregeometry, , false);
READ_SET_RULE(desktop, , 0);
READ_SET_RULE(screen, , 0);
READ_SET_RULE(activity, , QString());
@@ -248,7 +248,7 @@ void Rules::write(KConfigGroup& cfg) const
WRITE_FORCE_RULE(maxsize,);
WRITE_FORCE_RULE(opacityactive,);
WRITE_FORCE_RULE(opacityinactive,);
- WRITE_FORCE_RULE(ignoreposition,);
+ WRITE_SET_RULE(ignoregeometry,);
WRITE_SET_RULE(desktop,);
WRITE_SET_RULE(screen,);
WRITE_SET_RULE(activity,);
@@ -290,7 +290,7 @@ bool Rules::isEmpty() const
&& maxsizerule == UnusedForceRule
&& opacityactiverule == UnusedForceRule
&& opacityinactiverule == UnusedForceRule
- && ignorepositionrule == UnusedForceRule
+ && ignoregeometryrule == UnusedSetRule
&& desktoprule == UnusedSetRule
&& screenrule == UnusedSetRule
&& activityrule == UnusedSetRule
@@ -582,13 +582,7 @@ APPLY_FORCE_RULE(minsize, MinSize, QSize)
APPLY_FORCE_RULE(maxsize, MaxSize, QSize)
APPLY_FORCE_RULE(opacityactive, OpacityActive, int)
APPLY_FORCE_RULE(opacityinactive, OpacityInactive, int)
-APPLY_FORCE_RULE(ignoreposition, IgnorePosition, bool)
-
-// the cfg. entry needs to stay named the say for backwards compatibility
-bool Rules::applyIgnoreGeometry(bool& ignore) const
-{
- return applyIgnorePosition(ignore);
-}
+APPLY_RULE(ignoregeometry, IgnoreGeometry, bool)
APPLY_RULE(desktop, Desktop, int)
APPLY_RULE(screen, Screen, int)
@@ -680,7 +674,7 @@ void Rules::discardUsed(bool withdrawn)
DISCARD_USED_FORCE_RULE(maxsize);
DISCARD_USED_FORCE_RULE(opacityactive);
DISCARD_USED_FORCE_RULE(opacityinactive);
- DISCARD_USED_FORCE_RULE(ignoreposition);
+ DISCARD_USED_SET_RULE(ignoregeometry);
DISCARD_USED_SET_RULE(desktop);
DISCARD_USED_SET_RULE(screen);
DISCARD_USED_SET_RULE(activity);
@@ -790,12 +784,7 @@ CHECK_FORCE_RULE(MinSize, QSize)
CHECK_FORCE_RULE(MaxSize, QSize)
CHECK_FORCE_RULE(OpacityActive, int)
CHECK_FORCE_RULE(OpacityInactive, int)
-CHECK_FORCE_RULE(IgnorePosition, bool)
-
-bool WindowRules::checkIgnoreGeometry(bool ignore) const
-{
- return checkIgnorePosition(ignore);
-}
+CHECK_RULE(IgnoreGeometry, bool)
CHECK_RULE(Desktop, int)
CHECK_RULE(Activity, QString)
@@ -867,7 +856,7 @@ void Client::applyWindowRules()
if (geom != orig_geom)
setGeometry(geom);
// MinSize, MaxSize handled by Geometry
- // IgnorePosition
+ // IgnoreGeometry
setDesktop(desktop());
workspace()->sendClientToScreen(this, screen());
setOnActivities(activities());
diff --git a/rules.h b/rules.h
index 2299dd8593..a4893b5fc0 100644
--- a/rules.h
+++ b/rules.h
@@ -61,7 +61,7 @@ public:
QSize checkMaxSize(QSize s) const;
int checkOpacityActive(int s) const;
int checkOpacityInactive(int s) const;
- bool checkIgnoreGeometry(bool ignore) const;
+ bool checkIgnoreGeometry(bool ignore, bool init = false) const;
int checkDesktop(int desktop, bool init = false) const;
int checkScreen(int screen, bool init = false) const;
QString checkActivity(QString activity, bool init = false) const;
@@ -86,7 +86,6 @@ public:
bool checkStrictGeometry(bool strict) const;
QString checkShortcut(QString s, bool init = false) const;
bool checkDisableGlobalShortcuts(bool disable) const;
- bool checkIgnorePosition(bool ignore) const; // obsolete
private:
MaximizeMode checkMaximizeVert(MaximizeMode mode, bool init) const;
MaximizeMode checkMaximizeHoriz(MaximizeMode mode, bool init) const;
@@ -127,7 +126,7 @@ public:
bool applyMaxSize(QSize& s) const;
bool applyOpacityActive(int& s) const;
bool applyOpacityInactive(int& s) const;
- bool applyIgnoreGeometry(bool& ignore) const;
+ bool applyIgnoreGeometry(bool& ignore, bool init) const;
bool applyDesktop(int& desktop, bool init) const;
bool applyScreen(int& desktop, bool init) const;
bool applyActivity(QString& activity, bool init) const;
@@ -153,7 +152,6 @@ public:
bool applyStrictGeometry(bool& strict) const;
bool applyShortcut(QString& shortcut, bool init) const;
bool applyDisableGlobalShortcuts(bool& disable) const;
- bool applyIgnorePosition(bool& ignore) const; // obsolete
private:
#endif
bool matchType(NET::WindowType match_type) const;
@@ -223,8 +221,8 @@ private:
ForceRule opacityactiverule;
int opacityinactive;
ForceRule opacityinactiverule;
- bool ignoreposition;
- ForceRule ignorepositionrule;
+ bool ignoregeometry;
+ SetRule ignoregeometryrule;
int desktop;
SetRule desktoprule;
int screen;