[Lazarus] Order of OnCreate and OnActivate in Qt4

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[Lazarus] Order of OnCreate and OnActivate in Qt4

vojtech.cihak

Hi,

 

I met strange bug today. I have these lines in .lpr:

...

Application.CreateForm(TFrmMain, FrmMain);

...

Application.CreateForm(TFrmContext, FrmContext);

...

 

and the order of events in Qt and GTk2 is:

FrmMain.Create

FrmContext.Create

FrmMain.Activate

 

Today I used tool qtconfig and changed style (Appearance) from Plastique to QtCurve. Now my code crashes, order of events is:

FrmMain.Create

FrmMain.Activate

CRASH, because code in OnActivate assumes that FrmContext already exists.

 

So, Qt4+Plastique has different order of events than Qt4+QtCurve.

Unfortunately, I cannot reproduce with simple demo.

 

What I'm doing wrong? Do I rely on something that is not guaranteed?

 

Thanks.


--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Order of OnCreate and OnActivate in Qt4

Free Pascal - Lazarus mailing list
On 11/25/2018 04:43 PM, Vojtěch Čihák via lazarus wrote:

> Today I used tool qtconfig and changed style (Appearance) from Plastique
> to QtCurve. Now my code crashes, order of events is:
>
> FrmMain.Create
>
> FrmMain.Activate
>
> CRASH, because code in OnActivate assumes that FrmContext already exists.
>
> So, Qt4+Plastique has different order of events than Qt4+QtCurve.
>
> Unfortunately, I cannot reproduce with simple demo.
>
> What I'm doing wrong? Do I rely on something that is not guaranteed?

Afaik not, that should work w/o problems. Never seen such kind of
problem with different themes. In any case, without example project I
cannot help.

zeljko
--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Order of OnCreate and OnActivate in Qt4

Free Pascal - Lazarus mailing list
In reply to this post by vojtech.cihak
On 11/25/2018 04:43 PM, Vojtěch Čihák via lazarus wrote:

> CRASH, because code in OnActivate assumes that FrmContext already exists.
>
> So, Qt4+Plastique has different order of events than Qt4+QtCurve.
>
> Unfortunately, I cannot reproduce with simple demo.
>
> What I'm doing wrong? Do I rely on something that is not guaranteed?

Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's
enabled.

zeljko
--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Order of OnCreate and OnActivate in Qt4

Free Pascal - Lazarus mailing list
I wouldn't rely on event order as anything between the creation to Application.Run could call Application.ProcessMessages - including some components/controls you may be using. As a rule of thumb you should assume that after calling a control (or form) that it can start receiving events.

In Qt4 styling is done through native code (QStyle subclasses) and it can alter widgets (QStyle::polish) so it isn't unthinkable that a theme could do something that generates events.


On Sun, Nov 25, 2018 at 6:47 PM zeljko via lazarus <[hidden email]> wrote:
On 11/25/2018 04:43 PM, Vojtěch Čihák via lazarus wrote:

> CRASH, because code in OnActivate assumes that FrmContext already exists.
>
> So, Qt4+Plastique has different order of events than Qt4+QtCurve.
>
> Unfortunately, I cannot reproduce with simple demo.
>
> What I'm doing wrong? Do I rely on something that is not guaranteed?

Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's
enabled.

zeljko
--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Order of OnCreate and OnActivate in Qt4

vojtech.cihak
In reply to this post by Free Pascal - Lazarus mailing list

Thanks, Kostas, especially part about Qt styling.

 

I answered my solution yesterday, but it didn't appear in ML, it went to zejlko only - I noticed later. So here it is:

 

I don't have QtNativeEventFilter in qtdefines.inc at all.

However, I found simple workaround. I create main form with Visible:=False; and when all other forms are created I do FrmMain.Show; (in *.lpr). The order of events is as expected.

 

Thanks.

 

______________________________________________________________
> Od: "Kostas Michalopoulos via lazarus" <[hidden email]>
> Komu: "Lazarus mailing list" <[hidden email]>
> Datum: 26.11.2018 11:32
> Předmět: Re: [Lazarus] Order of OnCreate and OnActivate in Qt4
>

I wouldn't rely on event order as anything between the creation to Application.Run could call Application.ProcessMessages - including some components/controls you may be using. As a rule of thumb you should assume that after calling a control (or form) that it can start receiving events.
In Qt4 styling is done through native code (QStyle subclasses) and it can alter widgets (QStyle::polish) so it isn't unthinkable that a theme could do something that generates events.

On Sun, Nov 25, 2018 at 6:47 PM zeljko via lazarus <[hidden email]> wrote:
On 11/25/2018 04:43 PM, Vojtěch Čihák via lazarus wrote:

> CRASH, because code in OnActivate assumes that FrmContext already exists.
>
> So, Qt4+Plastique has different order of events than Qt4+QtCurve.
>
> Unfortunately, I cannot reproduce with simple demo.
>
> What I'm doing wrong? Do I rely on something that is not guaranteed?

Try to disable usage of QtNativeEventFilter in qtdefines.inc if it's
enabled.

zeljko
--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus


----------

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus