> On Nov. 25, 2014, 12:56 p.m., Aleix Pol Gonzalez wrote:
> > shell/shellcorona.cpp, line 328
> > <https://git.reviewboard.kde.org/r/121240/diff/1/?file=329712#file329712line328>
> >
> >     Are you sure this is correct?
> >     
> >     This was done because at some point Configuration::primaryOutput and 
> > Output::isPrimary were not consistent and this was a way to make it 
> > consistent.

The behaviour has changed a little with the new API (mostly because the way 
Outputs are updated have changed). Now Configuration::primaryOutput is changed 
after all Outputs have been updated. That's why this patch also switches from 
listening to Output::isPrimaryChanged to Configuration::primaryOutputChanged.

The problem with reacting to Output::isPrimaryChanged is, that you will get the 
signal always twice: once for the output that is set to be primary, and once 
for the output where primary flag is unset. If the order is first unset, then 
set, then everything is OK, but if the order happens to be that first you get 
signal from the output that was set a primary and then from the one that was 
unset from primary, stuff gets broken and you start hitting various asserts in 
the codepath.

By reacting to Config::primaryOutputChanged, you are sure that all the changes 
have already been applied (including primary), and that calling 
Config::primaryOutput gives you what you expect.


- Daniel


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/121240/#review70911
-----------------------------------------------------------


On Nov. 25, 2014, 10:18 a.m., Daniel Vrátil wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/121240/
> -----------------------------------------------------------
> 
> (Updated Nov. 25, 2014, 10:18 a.m.)
> 
> 
> Review request for Plasma.
> 
> 
> Repository: plasma-workspace
> 
> 
> Description
> -------
> 
> This patch ports ShellCorona and PanelView to new KScreen API. The new API is 
> completely asynchronous and is using shared pointers. The internals have also 
> undergone some major changes, but they don't directly affect Plasma.
> 
> Additionally to the port, this patch also changes the way ShellCorona reacts 
> to primary screen changes: instead of listening to Output::isPrimaryChanged 
> on each output, it listens now to Config::primaryOutputChanged. The reason is 
> that when some output is set as primary, the signal is emitted right away. 
> This can happen before the old primary is unset though, which then causes 
> crashes in screenInvariants() in some situations/configurations. Listening to 
> Config::primaryOutputChanges ensures that Plasma reacts only once, and only 
> when the Config is consistent.
> 
> The new KScreen API is available in dev/redesign branches in libkscreen.git. 
> I'll merge the branch to "frameworks" branch once this review is approved in 
> order not to break build.
> 
> 
> Diffs
> -----
> 
>   shell/panelview.cpp 0dc5740 
>   shell/shellcorona.h 5e97e02 
>   shell/shellcorona.cpp 0da789f 
> 
> Diff: https://git.reviewboard.kde.org/r/121240/diff/
> 
> 
> Testing
> -------
> 
> Been using this patch and the new KScreen for couple weeks now, works better 
> than the old one.
> 
> 
> Thanks,
> 
> Daniel Vrátil
> 
>

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to