Commit graph

17318 commits

Author SHA1 Message Date
Vlad Zagorodniy
d948d247fe Don't crash when highlighted tabbox client is closed
Summary:
The compositor tries to switch to the next tabbox client when currently
highlighted client is closed. Though there is a small issue with that.
Because the switch happens too late, a dangling pointer can be inserted
into the unconstrained stacking order, which can lead to a crash later on.

There are two cases:
- compositing is on;
- compositing is off.

Compositing is on: TabBox will try to un-elevate currently highlighted
client, though by that time the client no longer owns EffectWindow, so
this is basically a no-op (that's why we haven't experienced this bug
before).

Compositing is off: TabBox will try to restack currently hightlighted
client under the next tabbox client. Given that the restack method
doesn't do any sanity checks(see Client::manage why), a client that is
about to be destroyed will be re-inserted back into the unconstrained
stacking order.

This change ensures that the switch happens before currently highlighted
client is removed from the stacking order.

BUG: 406784

Test Plan:
- Turn off compositing;
- Follow steps to reproduce in the bug report (see comment 2).

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D20916
2019-07-15 16:56:49 +03:00
l10n daemon script
9c0a71c37f SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2019-07-13 05:18:09 +02:00
Nate Graham
e3cd87276a Merge branch 'Plasma/5.16' 2019-07-10 19:13:52 -04:00
Sam Edwards
3b0f704e3b Fix case-sensitivity typo in libinput configuration function
Summary:
This fixes the bug where KWin-on-Wayland doesn't respect keyboard repeat settings

BUG: 408943
FIXED-IN: 5.16.4

Test Plan:
1. Start Wayland session
2. Open Wayland KCM and note the keyboard repeat/rate/delay
3. Go to keyboard preferences KCM and adjust the keyboard repeat/rate/delay
4. Open the Wayland KCM again and verify the keyboard repeat/rate/delay adjustments (it may be necessary to restart the Wayland session before this step)

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22388
2019-07-10 19:13:21 -04:00
Vlad Zagorodniy
09f2d95a9c Don't use deprecated QDesktopWidget
Summary:
QApplication::desktop() is deprecated. It is advised to use
QGuiApplication::screens() instead.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: apol, davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22379
2019-07-10 22:50:41 +03:00
Vlad Zagorodniy
28a4337ad5 Don't use deprecated toAscii() method
Summary:
QChar::toAscii() and QString::toAscii() are deprecated in favor of
QChar::toLatin1() and QString::toLatin1() respectively.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22374
2019-07-10 22:50:00 +03:00
Vlad Zagorodniy
4f76e5f6c5 Don't use deprecated QPalette::background()
Summary:
QPalette::background() is deprecated since long time ago. It is advised
to use QPalette::window() instead.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22373
2019-07-10 22:49:40 +03:00
Vlad Zagorodniy
2b3e679b0f Don't use deprecated QAbstractItemModel::reset()
Summary:
QAbstractItemModel::reset() is deprecated since Qt 5.0. It is strongly
advised to use combination of QAbstractItemModel::beginResetModel() and
QAbstractItemModel::endResetModel() instead.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22372
2019-07-10 22:49:19 +03:00
Aleix Pol
cc6d2c2d1b drm: Save scaling and position of displays at shutdown
Summary:
Position and most importantly scaling will likely be the same on the next run,
This saves a flicker round at startup when scaling is different of 1 initialising the view at 1 then jumping at whatever the user requested.

Test Plan: Restarted my system several times

Reviewers: #kwin, #plasma, romangg

Reviewed By: #kwin, #plasma, romangg

Subscribers: davidedmundson, zzag, romangg, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22292
2019-07-10 21:01:46 +02:00
David Edmundson
9b04e0315c [autotests] Test placement strategies
Summary:
The maximise test is moved and a simple test is added for smart
placement and placeCorner.

The class tries to make a framework to make it faster to add future
xdg_toplevel placement tests without having to copy too much
boilerplate.

Test Plan: Passes

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D21996
2019-07-10 18:41:42 +01:00
Fabian Vogt
fcad1198ce Merge branch 'Plasma/5.16' 2019-07-10 11:05:50 +02:00
Fabian Vogt
f6b1e028da Merge branch 'Plasma/5.12' into Plasma/5.16 2019-07-10 11:04:04 +02:00
Fabian Vogt
c3c030d8b5 Fix creation of kdeglobals if /etc/xdg/kdeglobals present
Summary:
If /etc/xdg/kdeglobals exists but ~/.config/kdeglobals
does not (like on the first start of kwin_wayland), it did not notice
changes to kdeglobals.
This lead to KWin using the wrong color scheme for the window decoration
on the first login, which also could not be changed without a session restart.

Test Plan: Cleared ~ and logged in again, title bar color is now correct.

Reviewers: #plasma, romangg

Reviewed By: #plasma, romangg

Subscribers: sitter, broulik, rikmills, kwin, plasma-devel

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22238
2019-07-10 11:03:41 +02:00
Vlad Zagorodniy
50c89d4858 Fix -Wdeprecated-copy
Summary:
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/scripting/scriptedeffect.cpp:408:57: warning: implicitly-declared ‘constexpr KWin::FPx2& KWin::FPx2::operator=(const KWin::FPx2&)’ is deprecated [-Wdeprecated-copy]
      408 |         fpx2 = FPx2(value1.toNumber(), value2.toNumber());
          |                                                         ^
    In file included from /home/vlad/Workspace/KDE/src/kde/workspace/kwin/scripting/scriptedeffect.h:24,
                     from /home/vlad/Workspace/KDE/src/kde/workspace/kwin/scripting/scriptedeffect.cpp:21:
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/libkwineffects/kwinanimationeffect.h:39:5: note: because ‘KWin::FPx2’ has user-provided ‘KWin::FPx2::FPx2(const KWin::FPx2&)’
       39 |     FPx2(const FPx2 &other) { f[0] = other.f[0]; f[1] = other.f[1]; valid = other.valid; }
          |     ^~~~

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22361
2019-07-10 02:03:39 +03:00
Vlad Zagorodniy
cccb3456f3 Use QColor::darker/lighter instead of QColor::dark/light
Summary: QColor::dark() and QColor::light() are obsolete since long time ago.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22360
2019-07-10 02:03:10 +03:00
Vlad Zagorodniy
0be5bc45a7 Don't use deprecated QAbstractItemModel::setRoleNames
Summary:
setRoleNames() method is deprecated since Qt 5.0. It is strongly advised
to reimplement roleNames() method instead.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22358
2019-07-10 02:02:39 +03:00
Vlad Zagorodniy
5e0e708a76 Port away from deprecated QImage::byteCount
Summary:
QImage::byteCount() was deprecated in Qt 5.10. It is advised to use
QImage::sizeInBytes() method instead.

Reviewers: #kwin, apol

Reviewed By: apol

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22355
2019-07-10 02:02:15 +03:00
Vlad Zagorodniy
4e5d3d0010 Port away from QRegion::rects
Summary:
QRegion::rects was deprecated in Qt 5.11. It is advised to use begin()
and end() methods instead.

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22353
2019-07-10 01:00:51 +03:00
Vlad Zagorodniy
e839c7067e Port away from deprecated Qt::escape
Summary: Qt::escape() is deprecated since Qt 5.0.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22356
2019-07-10 00:59:48 +03:00
Vlad Zagorodniy
d0865f2163 Fix -Wredundant-move
Summary:
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/kcmkwin/kwindecoration/declarative-plugin/previewbridge.cpp: In member function ‘virtual std::unique_ptr<KDecoration2::DecoratedClientPrivate> KDecoration2::Preview::PreviewBridge::createClient(KDecoration2::DecoratedClient*, KDecoration2::Decoration*)’:
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/kcmkwin/kwindecoration/declarative-plugin/previewbridge.cpp:63:21: warning: redundant move in return statement [-Wredundant-move]
       63 |     return std::move(ptr);
          |            ~~~~~~~~~^~~~~
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/kcmkwin/kwindecoration/declarative-plugin/previewbridge.cpp:63:21: note: remove ‘std::move’ call
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/kcmkwin/kwindecoration/declarative-plugin/previewbridge.cpp: In member function ‘virtual std::unique_ptr<KDecoration2::DecorationSettingsPrivate> KDecoration2::Preview::PreviewBridge::settings(KDecoration2::DecorationSettings*)’:
    /home/vlad/Workspace/KDE/src/kde/workspace/kwin/kcmkwin/kwindecoration/declarative-plugin/previewbridge.cpp:81:21: warning: redundant move in return statement [-Wredundant-move]
       81 |     return std::move(ptr);
          |            ~~~~~~~~~^~~~~

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22357
2019-07-10 00:31:28 +03:00
Vlad Zagorodniy
927f579df9 Port away from deprecated qSort function
Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22354
2019-07-10 00:00:29 +03:00
Vlad Zagorodniy
c7639fd7ed Port away from deprecated headers
Summary: Headers like stdio.h are deprecated in C++.

Test Plan:
Compiles.

clangd no longer spews these warnings

{F6997789, size=full}

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22351
2019-07-09 23:59:07 +03:00
Vlad Zagorodniy
b18351669a [colorcorrection] Introduce toggle Night Color shortcut
Summary:
The new shortcut can be useful if a user wants to quickly disable the
Night Color manager for a brief moment.

FEATURE: 409083

Reviewers: #kwin, davidedmundson, romangg

Reviewed By: #kwin, davidedmundson, romangg

Subscribers: romangg, ngraham, broulik, davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22287
2019-07-09 18:43:21 +03:00
Jonathan Riddell
acd25f07fd Update version number for 5.16.3
GIT_SILENT
2019-07-09 15:51:51 +01:00
Vlad Zagorodniy
6f7bea3acd [wayland] Make clients with forced minimize state unminimizeable
Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: fmonteiro, graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18496
2019-07-09 15:13:49 +03:00
Vlad Zagorodniy
99abfe4e28 [wayland] Discard Force Temporarily rules for shell clients
Summary:
Force Temporarily rules have to be discarded when a client is unmapped.
Otherwise there won't be a difference between Force and Force
Temporarily rules.

Reviewers: #kwin

Subscribers: graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18494
2019-07-09 15:13:49 +03:00
Vlad Zagorodniy
18844f5925 [wayland] Apply window rules only to xdg-shell clients
Summary:
There are rules that have to be applied only once, e.g. every Remember
and Apply Initially rule, as well rules that need to configure the client,
e.g. size, etc. In the best scenario the compositor would evaluate such
rules when the client is about to be mapped.

This change limits window rules only to xdg-shell clients because right
now only this protocol lets compositors to intervene in the client
initialization process. Also, it makes things a bit easier for us on the
compositor side.

xdg-shell protocol satisfies most of ours requirements to implement window
rules, but not all of them. If the client is about to be mapped for the
second time and its size is forced by a rule, then compositor may need
to configure it. Currently, xdg-shell protocol doesn't have any mechanism
that a client could use to notify the compositor about its intent to map.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: fmonteiro, davidedmundson, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D19411
2019-07-09 15:13:49 +03:00
Vlad Zagorodniy
be48d36349 [autotests] Rewrite testShellClientRules
Summary:
Currently, the test doesn't verify that each rule does what it should,
e.g. a force rule is a force rule and not force temporarily, etc. This
as it turns out hides some bugs, e.g. all remember rules do not work,
forced window shortcuts can't be released, etc.

CCBUG: 403305

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: davidedmundson, graesslin, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D18464
2019-07-09 15:13:49 +03:00
Kai Uwe Broulik
ea97928426 Merge branch 'Plasma/5.16' 2019-07-09 11:15:20 +02:00
Igor Kovalenko
8dba9bfd43 Fix check for SCHED_RESET_ON_FORK feature in clean build
Configuration macro HAVE_SCHED_RESET_ON_FORK is not reflecting availability of SCHED_RESET_ON_FORK
in config-kwin.h because that feature is detected after file is already generated.

Fix this by moving config-kwin.h generation after feature detection.

Differential Revision: https://phabricator.kde.org/D22337
2019-07-09 11:14:37 +02:00
Roman Gilg
b0d1689722 Remove Client fullscreen hack
Summary:
This hack seems to be deactivated by default nowadays and I did not find an
option in the KCMs to activate it. Git blame shows some last commits from
around 2012 to the functions, but they only deal with code style.

Also even if it would be enabled, in light of Wayland we don't want some
roque XWayland client go bonkers via this hack.

This patch removes the code path in order to decrease complexity and ease
future changes to the fullscreen handling overall.

Test Plan: Manually and autotests pass.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, graesslin, kwin

Tags: #kwin

Maniphest Tasks: T11098

Differential Revision: https://phabricator.kde.org/D18157
2019-07-09 10:41:51 +02:00
Bhushan Shah
4f2a8711a4 Hide some of kwin kcm on mobile
Summary:
- Window decorations, useless, since we use maximized and borderless
  windows
- Virtual Desktop, odd concept to be useful on mobile
- KWin Effects, doesn't have much of usecase on mobile

Reviewers: nicolasfella, davidedmundson

Reviewed By: davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22336
2019-07-09 12:30:59 +05:30
Fredrik Höglund
5191311d36 [effects/blur] Disable sRGB when the framebuffer is linear
Disable sRGB rendering when the color encoding of the default
framebuffer is linear.

BUG: 408594
FIXED-IN: 5.16.3

Differential Revision: https://phabricator.kde.org/D22153

Signed-off-by: Fredrik Höglund <fredrik@kde.org>
2019-07-09 00:43:33 +02:00
Tomaz Canabrava
a3f2d56eaf Don't call << in a temporary vector
Summary: Create the vector using an initializer list.

Reviewers: davidedmundson

Reviewed By: davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D21263
2019-07-08 21:05:25 +02:00
Roman Gilg
4f7800a56a Correct code style of Client fullscreen control
Summary:
As a preperational step for future changes obey the code
styling guide in Client fullscreen functionality.

No functional changes.

Test Plan: Manually, autotests pass.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: zzag, graesslin, kwin

Tags: #kwin

Maniphest Tasks: T11098

Differential Revision: https://phabricator.kde.org/D18153
2019-07-08 12:51:57 +02:00
Roman Gilg
1347610bb9 Rework ShellClient fullscreen control
Summary:
The ShellClient::setFullScreen method was a direct copy of the Client
version.

Straighten out the function logic now and align with modern coding style.

In short we check:
1. what the manual override window rule wants,
2. if there is a change at all with this,
3. if such a change is possible.
And do:
4. (un-)set the fullscreen,
5. emit the changed signal.

Test Plan: Manually, autotests pass.

Reviewers: #kwin

Subscribers: zzag, kwin

Tags: #kwin

Maniphest Tasks: T11098

Differential Revision: https://phabricator.kde.org/D18132
2019-07-08 12:44:13 +02:00
Vlad Zagorodniy
3e1b616642 Merge branch 'Plasma/5.16' 2019-07-08 12:45:56 +03:00
Vlad Zagorodniy
0a9c254769 Fix maximize Apply Now rule
Summary:
AbstractClient applies maximize rules by running

    maximize(maximizeMode());

but because window rules are checked only in changeMaximize
implementation, the if statement prevents us from applying maximize
rules (m and maximizeMode() are equal).

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22255
2019-07-08 12:44:26 +03:00
l10n daemon script
c0f994dafc SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2019-07-07 08:33:47 +02:00
l10n daemon script
46106bdae0 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2019-07-07 05:24:04 +02:00
Roman Gilg
787c22ec4c Split up fullscreen able check into AbstractClient subclasses
Summary:
Most parts of this function are only relevant for X clients, in particular
the "fullscreen hack". Therefore split up the function into the AbstractClient
subclasses.

Test Plan: Manually and autotests still pass.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: graesslin, zzag, kwin

Tags: #kwin

Maniphest Tasks: T11098

Differential Revision: https://phabricator.kde.org/D18128
2019-07-06 16:00:32 +02:00
Filip Fila
f2bbb60419 [kcmkwin] Add a clear button to the Desktop Effects search field
Summary: This patch adds a clear button to the Desktop Effects search field by using Kirigami's SearchField.

Test Plan: {F6973312}

Reviewers: #kwin, #vdg, davidedmundson, ngraham

Reviewed By: #kwin, #vdg, davidedmundson, ngraham

Subscribers: ngraham, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D22286
2019-07-06 09:47:06 +02:00
Roman Gilg
20205f93f7 Save Compositor state in single variable
Summary:
Replace the several internal state booleans of Compositor with a single
enum to register the current state of the compositor. We register four
states of starting, started, stopping and stopped.

The goal is to replace the several different conditionals when starting
and stopping the compositor with a single well defined flow.

There are currently still some ugly conditionals and some replaced ones
might need some more work.

Test Plan: Manually in X and Wayland. Relevant auto tests pass.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22277
2019-07-04 22:52:05 +02:00
Roman Gilg
d21f09d4ab Remove Compositor created check
Summary:
Cleans up the Compositor code some more. The check is only
used in a single assert statement.

Test Plan: Compiles.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22278
2019-07-04 20:18:28 +02:00
Roman Gilg
09cfc2c0b4 Remove composite reset timer
Summary:
To streamline Compositor code more remove the composite reset timer. The two
times it was used we can either use a singleshot timer instead or connect the
call to a different signal in the X11 backend.

Long term goal is to have a well structured init of the Compositor such that
we can call directly instead.

Test Plan: Manually in X and Wayland nested session.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22270
2019-07-04 19:15:36 +02:00
Roman Gilg
8c047613c5 Partly remove Compositor restart functionality
Summary:
This removes the restart function of the Compositor class and renames the
internal reinitialize function.

Instead of the restart function reinitialize can be called. Reading again
the settings in this case is fine, since it is done rarely. This reduces
the code complexity.

Test Plan: Manually on Wayland and X. 100% autotests pass.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: davidedmundson, zzag, kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22225
2019-07-04 15:31:40 +02:00
Roman Gilg
ba6daecb4f Remove compositing initialized check
Summary:
The check is used to limit settings reload. But we can afford to reload
settings in case the compositing gets toggled since this happens rarely.

Removing the check reduces code complexity.

Test Plan: Manually in X and Wayland.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22220
2019-07-04 14:49:10 +02:00
Roman Gilg
cc801a4518 Use new slot syntax in Compositor class
Summary:
As a preparation for further changes clean up the Compositor
class. First step is to use the new slot syntax and rename
some of the slots.

Includes some other minor code style improvements to the class
as well.

Test Plan: Manually in X and Wayland nested session.

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: davidedmundson, zzag, kwin

Tags: #kwin

Maniphest Tasks: T11071

Differential Revision: https://phabricator.kde.org/D22218
2019-07-04 14:22:04 +02:00
Vlad Zagorodniy
3608fb52dd Pedantic whitespace additions 2019-07-03 19:56:36 +03:00
Vlad Zagorodniy
01ff92d16c Add more details about default implementation of isInternal() 2019-07-03 19:44:37 +03:00