kwin: remove fullscreen hack

there never was a way to enable it (not via gui anyway) meaning the bits
are doing nothing (other than slow down kwin that is)

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-11-05 02:40:38 +02:00
parent df90948b17
commit a49fd23243
6 changed files with 12 additions and 100 deletions

View file

@ -82,9 +82,8 @@ class Client
**/
Q_PROPERTY(bool onAllDesktops READ isOnAllDesktops WRITE setOnAllDesktops NOTIFY desktopChanged)
/**
* Whether this Client is fullScreen. A Client might either be fullScreen due to the _NET_WM property
* or through a legacy support hack. The fullScreen state can only be changed if the Client does not
* use the legacy hack. To be sure whether the state changed, connect to the notify signal.
* Whether this Client is fullScreen. A Client might either be fullScreen due to the _NET_WM property.
* To be sure whether the state changed, connect to the notify signal.
**/
Q_PROPERTY(bool fullScreen READ isFullScreen WRITE setFullScreen NOTIFY fullScreenChanged)
/**
@ -366,7 +365,7 @@ public:
void setFullScreen(bool set, bool user = true);
bool isFullScreen() const;
bool isFullScreenable(bool fullscreen_hack = false) const;
bool isFullScreenable() const;
bool isActiveFullScreen() const;
bool userCanSetFullScreen() const;
QRect geometryFSRestore() const {
@ -719,8 +718,7 @@ private:
void updateAllowedActions(bool force = false);
QRect fullscreenMonitorsArea(NETFullscreenMonitors topology) const;
void changeMaximize(bool horizontal, bool vertical, bool adjust);
int checkFullScreenHack(const QRect& geom) const; // 0 - None, 1 - One xinerama screen, 2 - Full area
void updateFullScreenHack(const QRect& geom);
void updateFullScreen();
void getWmNormalHints();
void getMotifHints();
void getIcons();
@ -868,8 +866,7 @@ private:
// DON'T reorder - Saved to config files !!!
enum FullScreenMode {
FullScreenNone,
FullScreenNormal,
FullScreenHack ///< Non-NETWM fullscreen (noborder and size of desktop)
FullScreenNormal
};
FullScreenMode fullscreen_mode;
MaximizeMode max_mode;

View file

@ -1655,7 +1655,7 @@ void Client::configureRequest(int value_mask, int rx, int ry, int rw, int rh, in
move(new_pos);
plainResize(ns);
setGeometry(QRect(calculateGravitation(false, gravity), size()));
updateFullScreenHack(QRect(new_pos, QSize(nw, nh)));
updateFullScreen();
QRect area = workspace()->clientArea(WorkArea, this);
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()
&& area.contains(origClientGeometry))
@ -1682,11 +1682,8 @@ void Client::configureRequest(int value_mask, int rx, int ry, int rw, int rh, in
if (ns != size()) { // don't restore if some app sets its own size again
QRect origClientGeometry(pos() + clientPos(), clientSize());
GeometryUpdatesBlocker blocker(this);
int save_gravity = xSizeHint.win_gravity;
xSizeHint.win_gravity = gravity;
resizeWithChecks(ns);
xSizeHint.win_gravity = save_gravity;
updateFullScreenHack(QRect(calculateGravitation(true, xSizeHint.win_gravity), QSize(nw, nh)));
updateFullScreen();
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()) {
// try to keep the window in its xinerama screen if possible,
// if that fails at least keep it visible somewhere
@ -2348,12 +2345,10 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust)
updateWindowRules(Rules::MaximizeVert|Rules::MaximizeHoriz|Rules::Position|Rules::Size);
}
bool Client::isFullScreenable(bool fullscreen_hack) const
bool Client::isFullScreenable() const
{
if (!rules()->checkFullScreen(true))
return false;
if (fullscreen_hack)
return isNormalWindow();
if (rules()->checkStrictGeometry(true)) { // allow rule to ignore geometry constraints
QRect fsarea = workspace()->clientArea(FullScreenArea, this);
if (sizeForClientSize(fsarea.size(), SizemodeAny, true) != fsarea.size())
@ -2365,9 +2360,7 @@ bool Client::isFullScreenable(bool fullscreen_hack) const
bool Client::userCanSetFullScreen() const
{
if (fullscreen_mode == FullScreenHack)
return false;
if (!isFullScreenable(false))
if (!isFullScreenable())
return false;
return isNormalWindow() || isDialog();
}
@ -2376,8 +2369,6 @@ void Client::setFullScreen(bool set, bool user)
{
if (!isFullScreen() && !set)
return;
if (fullscreen_mode == FullScreenHack)
return;
if (user && !userCanSetFullScreen())
return;
set = rules()->checkFullScreen(set && !isSpecialWindow());
@ -2468,42 +2459,8 @@ QRect Client::fullscreenMonitorsArea(NETFullscreenMonitors requestedTopology) co
return total;
}
int Client::checkFullScreenHack(const QRect& geom) const
void Client::updateFullScreen()
{
if (!options->isLegacyFullscreenSupport())
return 0;
// if it's noborder window, and has size of one screen or the whole desktop geometry, it's fullscreen hack
if (noBorder() && app_noborder && isFullScreenable(true)) {
if (geom.size() == workspace()->clientArea(FullArea, geom.center(), desktop()).size())
return 2; // full area fullscreen hack
if (geom.size() == workspace()->clientArea(ScreenArea, geom.center(), desktop()).size())
return 1; // xinerama-aware fullscreen hack
}
return 0;
}
void Client::updateFullScreenHack(const QRect& geom)
{
int type = checkFullScreenHack(geom);
if (fullscreen_mode == FullScreenNone && type != 0) {
fullscreen_mode = FullScreenHack;
updateDecoration(false, false);
QRect geom;
if (rules()->checkStrictGeometry(false)) {
geom = type == 2 // 1 - it's xinerama-aware fullscreen hack, 2 - it's full area
? workspace()->clientArea(FullArea, geom.center(), desktop())
: workspace()->clientArea(ScreenArea, geom.center(), desktop());
} else
geom = workspace()->clientArea(FullScreenArea, geom.center(), desktop());
setGeometry(geom);
emit fullScreenChanged();
} else if (fullscreen_mode == FullScreenHack && type == 0) {
fullscreen_mode = FullScreenNone;
updateDecoration(false, false);
// whoever called this must setup correct geometry
emit fullScreenChanged();
}
StackingUpdatesBlocker blocker(workspace());
workspace()->updateClientLayer(this); // active fullscreens get different layer
}

View file

@ -108,9 +108,6 @@
<entry name="RollOverDesktops" type="Bool">
<default>true</default>
</entry>
<entry name="LegacyFullscreenSupport" type="Bool">
<default>false</default>
</entry>
<entry name="FocusStealingPreventionLevel" type="Int">
<default>1</default>
<min>0</min>

View file

@ -220,17 +220,6 @@ bool Client::manage(xcb_window_t w, bool isMapped)
area = workspace()->clientArea(PlacementArea, screens()->geometry(screen).center(), desktop());
}
if (int type = checkFullScreenHack(geom)) {
fullscreen_mode = FullScreenHack;
if (rules()->checkStrictGeometry(false)) {
geom = type == 2 // 1 = It's xinerama-aware fullscreen hack, 2 = It's full area
? workspace()->clientArea(FullArea, geom.center(), desktop())
: workspace()->clientArea(ScreenArea, geom.center(), desktop());
} else
geom = workspace()->clientArea(FullScreenArea, geom.center(), desktop());
placementDone = true;
}
if (isDesktop())
// KWin doesn't manage desktop windows
placementDone = true;
@ -467,9 +456,7 @@ bool Client::manage(xcb_window_t w, bool isMapped)
if (session->maximized != MaximizeRestore) {
maximize(MaximizeMode(session->maximized));
}
if (session->fullscreen == FullScreenHack)
; // Nothing, this should be already set again above
else if (session->fullscreen != FullScreenNone) {
if (session->fullscreen != FullScreenNone) {
setFullScreen(true, false);
geom_fs_restore = session->fsrestore;
}
@ -499,7 +486,6 @@ bool Client::manage(xcb_window_t w, bool isMapped)
demandAttention();
if (info->state() & NET::Modal)
setModal(true);
if (fullscreen_mode != FullScreenHack)
setFullScreen(rules()->checkFullScreen(info->state() & NET::FullScreen, !isMapped), false);
}

View file

@ -88,7 +88,6 @@ Options::Options(QObject *parent)
, m_showDesktopIsMinimizeAll(false)
, m_rollOverDesktops(false)
, m_focusStealingPreventionLevel(0)
, m_legacyFullscreenSupport(false)
, m_killPingTimeout(0)
, m_hideUtilityWindowsForInactive(false)
, m_inactiveTabsSkipTaskbar(false)
@ -314,15 +313,6 @@ void Options::setFocusStealingPreventionLevel(int focusStealingPreventionLevel)
emit focusStealingPreventionLevelChanged();
}
void Options::setLegacyFullscreenSupport(bool legacyFullscreenSupport)
{
if (m_legacyFullscreenSupport == legacyFullscreenSupport) {
return;
}
m_legacyFullscreenSupport = legacyFullscreenSupport;
emit legacyFullscreenSupportChanged();
}
void Options::setOperationTitlebarDblClick(WindowOperation operationTitlebarDblClick)
{
if (OpTitlebarDblClick == operationTitlebarDblClick) {
@ -709,7 +699,6 @@ void Options::syncFromKcfgc()
setNextFocusPrefersMouse(m_settings->nextFocusPrefersMouse());
setSeparateScreenFocus(m_settings->separateScreenFocus());
setRollOverDesktops(m_settings->rollOverDesktops());
setLegacyFullscreenSupport(m_settings->legacyFullscreenSupport());
setFocusStealingPreventionLevel(m_settings->focusStealingPreventionLevel());
setPlacement(m_settings->placement());
setAutoRaise(m_settings->autoRaise());

View file

@ -101,10 +101,6 @@ class Options : public QObject, public KDecorationOptions
* 0 - 4 , see Workspace::allowClientActivation()
**/
Q_PROPERTY(int focusStealingPreventionLevel READ focusStealingPreventionLevel WRITE setFocusStealingPreventionLevel NOTIFY focusStealingPreventionLevelChanged)
/**
* support legacy fullscreen windows hack: borderless non-netwm windows with screen geometry
*/
Q_PROPERTY(bool legacyFullscreenSupport READ isLegacyFullscreenSupport WRITE setLegacyFullscreenSupport NOTIFY legacyFullscreenSupportChanged)
Q_PROPERTY(WindowOperation operationTitlebarDblClick READ operationTitlebarDblClick WRITE setOperationTitlebarDblClick NOTIFY operationTitlebarDblClickChanged)
Q_PROPERTY(MouseCommand commandActiveTitlebar1 READ commandActiveTitlebar1 WRITE setCommandActiveTitlebar1 NOTIFY commandActiveTitlebar1Changed)
Q_PROPERTY(MouseCommand commandActiveTitlebar2 READ commandActiveTitlebar2 WRITE setCommandActiveTitlebar2 NOTIFY commandActiveTitlebar2Changed)
@ -313,13 +309,6 @@ public:
return m_focusStealingPreventionLevel;
}
/**
* support legacy fullscreen windows hack: borderless non-netwm windows with screen geometry
*/
bool isLegacyFullscreenSupport() const {
return m_legacyFullscreenSupport;
}
WindowOperation operationTitlebarDblClick() const {
return OpTitlebarDblClick;
}
@ -517,7 +506,6 @@ public:
void setShowDesktopIsMinimizeAll(bool showDesktopIsMinimizeAll);
void setRollOverDesktops(bool rollOverDesktops);
void setFocusStealingPreventionLevel(int focusStealingPreventionLevel);
void setLegacyFullscreenSupport(bool legacyFullscreenSupport);
void setOperationTitlebarDblClick(WindowOperation operationTitlebarDblClick);
void setCommandActiveTitlebar1(MouseCommand commandActiveTitlebar1);
void setCommandActiveTitlebar2(MouseCommand commandActiveTitlebar2);
@ -675,7 +663,6 @@ Q_SIGNALS:
void showDesktopIsMinimizeAllChanged();
void rollOverDesktopsChanged(bool enabled);
void focusStealingPreventionLevelChanged();
void legacyFullscreenSupportChanged();
void operationTitlebarDblClickChanged();
void commandActiveTitlebar1Changed();
void commandActiveTitlebar2Changed();
@ -733,7 +720,6 @@ private:
bool m_showDesktopIsMinimizeAll;
bool m_rollOverDesktops;
int m_focusStealingPreventionLevel;
bool m_legacyFullscreenSupport;
int m_killPingTimeout;
bool m_hideUtilityWindowsForInactive;
bool m_inactiveTabsSkipTaskbar;