Le 30 juil. 07 à 13:22, David Chisnall a écrit :

> Whenever I encounter a bug in GNUstep that I know how to fix, I fix
> it in a category and send it to someone to push upstream.  Since
> GNUstep releases only happen every six months, would it be worth
> maintaining a library of categories that patch the current GNUstep
> release that all Étoilé components can link to?  StepChat, for
> example, fixes a bug in NSOutlineView that can cause application
> crashes, which could be useful in anything else which modifies the
> contents of an outline view.

We could have a bundle that keeps together all bug fixes and gets  
automatically injected in all AppKit-based applications with AppKit  
user bundle mechanism.
However we need to be very careful and very clear about what is put  
in this bundle, because it could result in very weird bugs when other  
categories already patch the same methods. This is specially  
important with Camaelon and EtoileWildMenus which patch many methods.
I already had category method conflict to solve between Camaelon and  
EtoileWildMenus. They can be very tricky because the category loading  
order seems to vary with each application, therefore you cannot  
predict the behavior of any applications which call a method patched  
by two categories or more.

A more solid solution could be to implement a method holder class  
mechanism. This would be a simple class whose instances hold various  
methods and which can be asked to replace methods in some precise  
class when everything is loaded. Replacing method would be done by  
method swizzlling and we could record each method replacement thereby  
also log a warning when a method is replaced two times.
GNUstep behavior concept may be helpful to implement this if they  
still work. GNUstep behavior is a GNUstep addition which allows to  
define a set of method you can share between several classes (like  
concrete protocol or a category which can be shared).

Cheers,
Quentin.

--
Quentin Mathé
[EMAIL PROTECTED]


_______________________________________________
Etoile-dev mailing list
Etoile-dev@gna.org
https://mail.gna.org/listinfo/etoile-dev

Reply via email to