Bert Freudenberg wrote:
> On Jun 4, 2007, at 16:41 , Marco Pesenti Gritti wrote:
>
>> Bert Freudenberg wrote:
>>> On Jun 3, 2007, at 18:01 , Zarro Boogs per Child wrote:
>>>
>>>> #1560: Activity launch not detected
>>>> ---------------------+------------------------------------------------------
>>>>  
>>>>
>>>>   Reporter:  bert    |       Owner:  dcbw
>>>>       Type:  defect  |      Status:  reopened
>>>>   Priority:  normal  |   Milestone:  Trial-2
>>>>  Component:  sugar   |     Version:
>>>> Resolution:          |    Keywords:
>>>>   Verified:  0       |
>>>> ---------------------+------------------------------------------------------
>>>>  
>>>>
>>>> Comment (by marco):
>>>>
>>>>  This should be fixed again in the latest git. Activity id and 
>>>> bundle id
>>>>  should now be provided by two properties of the toplevel X window.
>>>>
>>>>  _SUGAR_ACTIVITY_ID (utf8 string)
>>>>  _SUGAR_BUNDLE_ID (utf8 string)
>>>>
>>>>  sugar/lib/sugar-x11-util.c has the code which we use to set those
>>>>  properties for python activities.
>>>
>>> This only complicates matters. Not only for Etoys (which does not 
>>> have a way to set X properties currently), but I see you had to 
>>> resort to C code even for Python activities. I'd much prefer if the 
>>> only thing Sugar cares about an activity X-wise is its window ID 
>>> (and we're working on a way to make that accessible in Squeak). 
>>> Everything else should be handled by DBus, and this is how it 
>>> actually was before your refactoring. If anything I'd shift 
>>> communication *towards" DBus, not away from it towards X by 
>>> introducing arbitrary and unnecessary properties.
>>
>> [ CCing Dan, since he wrote the original startup notification and  
>> I'm interested in his opinion ]
>>
>> We decided a while ago to use X  for window management and I don't 
>> see a reason to revisit that decision. Etoys should respect the 
>> multiple windows semantic (which I know you are working on, thanks).
>>
>> To reassure you, we are not going to use X as an IPC (as people have 
>> done in the past), since that gets unbelievably ugly: that's where 
>> dbus has his role in the shell -> activity instance communication.
>
> That's good to hear. However, the X properties required now are more 
> complex than before. In the case of Squeak, at window creation time I 
> have no way of knowing the dbus activity id yet.
>
>>> Besides, it does not address the original problem - that if an 
>>> activity X window is opened and detected by the Sugar shell, but it 
>>> has not created its DBus service yet, the shell will mistake it for 
>>> a raw X app (creating a
>>> "raw" icon in the donut next to the still flashing activity icon).
>>
>> If there is a _SUGAR_ACTIVITY_ID property the window is an activity, 
>> otherwise it's a raw X window. So I think it actually solves the 
>> problem.
>>
>> The shell must know the activity and the bundle id as soon as an 
>> activity window is displayed, otherwise it can't represent it 
>> properly in the home. Relying on the dbus service for this was very 
>> fragile and introduced races which was hard or impossible to solve 
>> properly.
>
> To show the icon it's sufficient to know the bundle id. Actually, you 
> don't even really need that, because the icon is already showing 
> (flashing). You just need to know if this is an activity window or 
> not. And if it is, then sooner or later the dbus service will appear 
> telling you if that window belongs to this activity.
>

You are probably misunderstanding how startup notification works.

1 Before an activity is started from the panel it informs the shell that 
an activity with a certain $ID is going to startup -> The shell display 
a pulsing icon.
2 When the window finally appear, sugar needs to get its activity id so 
that it can transform the notification icon in a normal one (stop the 
pulsing, map it to the window xid etc).

> It's practically the same whether you announce the dbus service via X 
> props, or you send the XID via dbus. Supporting both makes activity 
> developer's live easier.
>

Using X props the operation is atomic. The window appears *and* you know 
his activity_id at the same time. And that obviously avoid the races.

>> Window management should work using X communication. Mixing dbus and 
>> X there just introduce races and confusion. If we was going down the 
>> "dbus for window management" route then I'd agree with you, but we 
>> aren't.
>
>>> This can easily be fixed up later by detecting the DBus service 
>>> creation and removing the raw icon - this is how my fix worked.
>>
>> Now, that's really a bad hack. I don't want to show a random icon on 
>> the screen and than replace it when the DBUS service appear... it 
>> just suck.
>
> That icon would not even be visible because it is hidden by the X 
> window that just appeared. It is noble to try preventing to create 
> that icon unnecessarily, but if I had a say in designing Sugar, I'd 
> opt for robustness, making it simpler for external developers, not 
> harder.
>

Robustness is exactly the reason I chose to use the X properties. It 
makes it slightly harder to setup a non-python Sugar activity but it's a 
much cleaner and robust approach.

> In fact, if I launch an activity from the Sugar frame, it's reasonable 
> to assume that the next X window opened actually belongs to that 
> activity. So you don't really need to show that raw icon, at least 
> until the activity launch is finished.
>

Huh. You are really not opting for robustness here!

>> The startup phase is completed when the window appear on the screen, 
>> not when the dbus service appear. That's also exactly how startup 
>> notification is implemented in GNOME btw.
>
> Which isn't really relevant to Sugar, is it?

It's relevant that the Sugar approach to startup notification has been 
already used successfully in another based on  the same platform.

Marco
_______________________________________________
Sugar mailing list
[email protected]
http://lists.laptop.org/listinfo/sugar

Reply via email to