Abdelrazak Younes wrote:
> Georg Baum wrote:
>> I strongly disagree. In case you don't remember what we did please reread
>> the old mails. There was a lot of testing, and the outcome was that some
>> internal qt structures rely on the fact that the QApplication variable is
>> created at the very beginning of main() and destroyed at the end of
>> main(). Since we cannot do that (or maybe we can - make main() a thin
>> wrapper and move it to the frontends) we have to workaround it.
>
> Look at the present code. That's exactly what I am doing.
No. main() is still in main.C. In case you mean the workaround: Yes, you do
it almost, apart from the destruction of the Application object.
>> The old workaround was
>> a plain variable that was sitting in a function. This did not work on
>> windows for reasons we where not able to figure out, so the static trick
>> was used there.
>
> I know exactly the reason why it didn't work. That was because the
> QApplication creation was local to the lyx_gui::exec() function thus in
> principle invisible to the exec2() function; Qt structure make this
> instance visible even though part of it was still visible.
I don't understand the last sentence. Should I replace the first or the
second "visible" with "invisible"?
> The static
> trick made the QApplication instance persistent accross the lyx
> structure, that's all. Now that I moved the exec2() function out or
> lyx_gui, the LyX class can safely access this instance without being
> affraid that it disappeared.
The old code on non-windows that did not work on windows was:
lyx_gui::exec() {
// 1) create QApplication
// 2) call LyX::ref().exec2()
// 3) destroy QApplication
}
Therefore it was guaranteed that the QApplication object was valid during
the call of exec2.
The problem on windows was that 3) lead to some infinite loop/crash (I don't
remember which).
Your explanation above does not match this code.
>> Now you create the variable at the right time, but destruction is wrong.
>
> I think this is due to how we manage server and sockets. There's
> something fishy in there and I will fix it. If you look at the recent
> change, WRT linux, the only thing I did is to encapsulate the
> Application instance inside a scoped_ptr. It is weird that this simple
> change causes the crashes you are having on exit.
It is not weird at all. Destruction happens now from a destructor of the
static LyX singleton. Before it happend at the end of exec2.
>> I am sure that you will need the static thing again on windows if you fix
>> destruction time.
>
> I am sure of the opposite.
We will see.
>> I don't care at all about the old code, but I do care a lot about the
>> testing that was done and the results. Everybody loves clean code, but
>> working code is even more important. I prefer code that is a bit clumsy,
>> but works, a lot over code that is clean, but does only work partially.
>> And if new features require some reorganization, then it should be done
>> completely.
>
> Who said that I will not do it? Not me. I am just saying that at last
> resort, much before release time, I will revert to the old solution if
> it didn't work out.
This commit with only a short notification before in the context of your
recentr changes looked to me as if you where rushing through and where not
aware of any potential problems.
>> Please explain. AFAIK it was working.
>
> Not entirely. Every little exception or crash induced the infinite
> killtimer loop. It was very, very annoying to work under these conditions.
I did not know that.
> Once I put my multiple view support (which is already done). I will
> tackle that problem.
Thanks.
Georg