Bug 435124 - plasmashell config reset when using mobile shell
Summary: plasmashell config reset when using mobile shell
Status: RESOLVED UPSTREAM
Alias: None
Product: plasmashell
Classification: Plasma
Component: general (other bugs)
Version First Reported In: master
Platform: Other Linux
: VHI normal
Target Milestone: 1.0
Assignee: David Edmundson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-03-29 17:19 UTC by Bhushan Shah
Modified: 2022-03-03 23:26 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bhushan Shah 2021-03-29 17:19:49 UTC
SUMMARY

On Plasma Mobile after few restarts plasmashell resets it's own configuration, adds new containment and looses the old containment.

STEPS TO REPRODUCE
1. Start plasma mobile on pinephone, change wallpaper for example
2. Restart phone multiple times


OBSERVED RESULT
3. Eventually the config will go in wrong state and wallpaper will be reset as well as launcher/shortcuts

EXPECTED RESULT

3. Nothing happens to config, and launchers stay as-is
Comment 1 Bhushan Shah 2021-03-29 17:20:44 UTC
Example config before bug happens

[Containments][23]
Favorites=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop,org.kde.mobile.qmlkonsole.desktop-0
ItemGeometriesVertical=Applet-24:0,0,360,113,0;
MaxFavoriteCount=4
activityId=1bb207c6-7b0f-4d53-849e-2a5c359dc0b9
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.phone.homescreen
wallpaperplugin=org.kde.image

[Containments][23][Applets][24]
immutability=1
plugin=org.kde.phone.krunner

[Containments][23][ConfigDialog]
DialogHeight=666
DialogWidth=360

[Containments][23][General]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop,org.kde.mobile.qmlkonsole.desktop-0

[Containments][23][Wallpaper][org.kde.image][General]
Image=file:///usr/share/wallpapers/logo_dark.jpg
Comment 2 Bhushan Shah 2021-03-29 17:21:10 UTC
Config after bug happens

[Containments][25]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop
DesktopItems=
Favorites=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop
MaxFavoriteCount=4
activityId=1bb207c6-7b0f-4d53-849e-2a5c359dc0b9
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.phone.homescreen
wallpaperplugin=org.kde.image

[Containments][25][General]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop,org.kde.mobile.camera.desktop

[Containments][25][Wallpaper][org.kde.image][General]
Image=file:///usr/share/wallpapers/Next/contents/images/720x1440.png
Comment 3 Bhushan Shah 2021-03-29 17:24:32 UTC
Running on Plasma 5.21 based image, we see following in log,

org.kde.plasma.phoneshell/contents/views/Desktop.qml:78: TypeError: Cannot read property 'availableScreenRect' of null

which DavidE thought is interesting and that was "fixed" in,

https://invent.kde.org/plasma/plasma-phone-components/-/commit/59297a25f316d772f0e7e18ee7ce29c703cd58c5

But according to DavidE, containment never should be null(?). This is pending investigation.
Comment 4 Bhushan Shah 2021-03-29 17:26:21 UTC
From another affected user's config what I noticed is, there is bunch of empty containment with no activityId assigned to it.

This is after config was reset

[Containments][16]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop
DesktopItems=
Favorites=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop
MaxFavoriteCount=4
activityId=a8a6782c-c5aa-45b3-80b2-6b02da0d82c1
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.phone.homescreen
wallpaperplugin=org.kde.image

[Containments][16][General]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop,org.kde.mobile.camera.desktop

[Containments][16][Wallpaper][org.kde.image][General]
Image=file:///usr/share/wallpapers/Next/contents/images/720x1440.png

[Containments][3]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=3
plugin=org.kde.phone.panel
wallpaperplugin=org.kde.image

[Containments][3][Applets][4]
immutability=1
plugin=org.kde.plasma.notifications

[Containments][3][Applets][4][Configuration]
PreloadWeight=100

[Containments][3][Applets][5]
immutability=1
plugin=org.kde.plasma.mediacontroller

[Containments][3][Applets][5][Configuration]
PreloadWeight=100

[Containments][6]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.phone.taskpanel
wallpaperplugin=org.kde.image
Comment 5 Bhushan Shah 2021-03-29 17:27:28 UTC
And for same user as comment #5 config file before reset was this,

[Containments][14]
AppOrder=org.kde.phone.dialer.desktop,telegramdesktop.desktop-0,org.postmarketos.Megapixels.desktop-0,org.kde.mobile.angelfish.desktop
DesktopItems=
Favorites=org.kde.phone.dialer.desktop,telegramdesktop.desktop-0,org.postmarketos.Megapixels.desktop-0,org.kde.mobile.angelfish.desktop
ItemGeometriesVertical=Applet-15:0,0,360,113,0;
MaxFavoriteCount=4
activityId=a8a6782c-c5aa-45b3-80b2-6b02da0d82c1
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.phone.homescreen
wallpaperplugin=org.kde.image

[Containments][14][Applets][15]
immutability=1
plugin=org.kde.phone.krunner

[Containments][14][ConfigDialog]
DialogHeight=666
DialogWidth=360

[Containments][14][General]
AppOrder=org.kde.phone.dialer.desktop,org.kde.phonebook.desktop,org.kde.mobile.angelfish.desktop,org.kde.mobile.camera.desktop

[Containments][14][Wallpaper][org.kde.image][General]
Image=file:///home/lukasz/Downloads/Other stuff/backgroundphone.png

[Containments][3]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=3
plugin=org.kde.phone.panel
wallpaperplugin=org.kde.image

[Containments][3][Applets][4]
immutability=1
plugin=org.kde.plasma.notifications

[Containments][3][Applets][4][Configuration]
PreloadWeight=100

[Containments][3][Applets][5]
immutability=1
plugin=org.kde.plasma.mediacontroller

[Containments][3][Applets][5][Configuration]
PreloadWeight=100

[Containments][6]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.phone.taskpanel
wallpaperplugin=org.kde.image
Comment 6 Bhushan Shah 2021-03-29 17:28:58 UTC
I am marking this as confirmed since I get reports about this at least twice a week in plasma mobile as well as pinephone channel.
Comment 7 Bhushan Shah 2021-03-29 17:30:48 UTC
This also might be potential duplicate of bug 427861, 

Although personally I doubt it because that bug report is mostly about user where screenId is not assigned correctly and config is not removed completely, assigning correct screenID fixes it for them.
Comment 8 Bhushan Shah 2021-04-27 10:50:15 UTC
I am starting to get more and more reports about this, so I am up-ing the severity of this bug report to VHI.
Comment 9 David Edmundson 2021-05-08 23:21:49 UTC
There is a possibility this is fixed by: https://codereview.qt-project.org/c/qt/qtwayland/+/347774

If we were hitting this it would have the symptoms listed. 
Lets assume it's a fix until we hear otherwise.
Comment 10 Bhushan Shah 2021-05-11 13:08:29 UTC
Git commit d5186701e27ad6f09f3944809cec2a25c5328026 by Bhushan Shah, on behalf of Vlad Zahorodnii.
Committed on 11/05/2021 at 06:56.
Pushed by apol into branch 'kde/5.15'.

Client: Announce an output after receiving more complete state

Output initialization is not atomic, meaning that the compositor may
process a wl_output bind request in one event loop cycle, and the
xdg_output_manager.get_xdg_output in another event loop cycle.

This means that xdg_output properties may arrive in another wl_output
done frame. Prior to xdg-output v3, that wasn't an issue because the
compositor is required to send an xdg_output.done event after sending
xdg_output properties.

Starting with v3, the compositor may choose not to send an
xdg_output.done event after sending xdg_output properties. Therefore,
as is, QtWayland may announce an output with bad logical geometry or
even worse without name assigned by the compositor.

Unfortunately, that breaks applications such as plasmashell. Plasma uses
output names as a criterion to determine what kind of contents should be
displayed on a particular output.

In order to fix the initialization sequence, this change makes every
QWaylandScreen track processed events. After all required events have
been received, the screen can be announced to the rest of Qt.

Change-Id: If5da747edd7af277ec1364cbea105c6994f47402
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 69ea480f2e53ad4a5bbca78cde044eb8d4c48896)

Original Ticket: https://codereview.qt-project.org/c/qt/qtwayland/+/347774

M  +23   -9    src/client/qwaylandscreen.cpp
M  +8    -2    src/client/qwaylandscreen_p.h

https://invent.kde.org/qt/qt/qtwayland/commit/d5186701e27ad6f09f3944809cec2a25c5328026
Comment 11 Albert Astals Cid 2022-03-03 23:26:47 UTC
Git commit a6fb2a976ecd778e450afe89c180c8c748beb568 by Albert Astals Cid, on behalf of Vlad Zahorodnii.
Committed on 03/03/2022 at 20:02.
Pushed by aacid into branch 'kde/5.15'.

Client: Announce an output after receiving more complete state

Output initialization is not atomic, meaning that the compositor may
process a wl_output bind request in one event loop cycle, and the
xdg_output_manager.get_xdg_output in another event loop cycle.

This means that xdg_output properties may arrive in another wl_output
done frame. Prior to xdg-output v3, that wasn't an issue because the
compositor is required to send an xdg_output.done event after sending
xdg_output properties.

Starting with v3, the compositor may choose not to send an
xdg_output.done event after sending xdg_output properties. Therefore,
as is, QtWayland may announce an output with bad logical geometry or
even worse without name assigned by the compositor.

Unfortunately, that breaks applications such as plasmashell. Plasma uses
output names as a criterion to determine what kind of contents should be
displayed on a particular output.

In order to fix the initialization sequence, this change makes every
QWaylandScreen track processed events. After all required events have
been received, the screen can be announced to the rest of Qt.

Change-Id: If5da747edd7af277ec1364cbea105c6994f47402
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 69ea480f2e53ad4a5bbca78cde044eb8d4c48896)

Original Ticket: https://codereview.qt-project.org/c/qt/qtwayland/+/347774

M  +23   -9    src/client/qwaylandscreen.cpp
M  +8    -2    src/client/qwaylandscreen_p.h

https://invent.kde.org/qt/qt/qtwayland/commit/a6fb2a976ecd778e450afe89c180c8c748beb568