Commit Graph

28 Commits

Author SHA1 Message Date
Markus Himmel
a1eccae96f Make sure images containing BTranslators are not unloaded early
When a translator is uninstalled, BTranslatorPrivate::_RemoveTranslators is
called. This method used to unload the image containing the translator after
calling Release() on it resulting in several problems:

- If the translator was still busy, e.g. translating something while being
  installed, it crashed since the image was unloaded even though its refcount
  was larger than 0.
- Applications using code from one of the translators (e.g. its config view)
  would crash when the translator is uninstalled (this is bug #12005).

This problem is now fixed. The roster keeps track of all translators whose
image it manages (even if the translator was already removed from the roster).
It also keeps a refcount to all images. When a translator's refcount drops to
zero and it belonged to a roster at some point, it does not delete itself, but
notifies the roster that it is ready to destruct, which then removes it from
the roster if the translator is still in it, destroys the translator, decrements
the refcount of the image and if the new refcount is zero, unloads the image.
All of this is done in a message handler, since if the translator called
TranslatorDeleted like before, the unloaded image would be referenced when
the stack is walked up.

Finally, the DataTranslations preflet is required to Acquire() the translator
whose config view it is showing, because otherwise its refcount could be reduced
to 0 and the image unloaded. BTranslatorRoster now enables users to acquire a
translator by ID. By the time the translator has to be released, it might not
be part of the roster anymore though. Since BTranslatorRoster tries not to give
out raw pointers to the translators it manages, users who acquire a translator
through a roster now are given a BTranslatorReleaseDelegate, which allows for
releasing the BTranslator exactly once and then self-destructs.

Signed-off-by: Axel Dörfler <axeld@pinc-software.de>
2015-11-13 11:26:53 +01:00
Ryan Leavengood
e77304562d Actually sort the translator menu used in ShowImage.
There were two problems with the last commit:

* the list needed to be outside of the top-level loop.
* BList was just broken for sorting translation_format pointers.

I fixed this by moving the loop outside and converting the translation_formats
to translator_info, which has the translator_id, since that is needed to create
the menu item, and would otherwise be unavailable outside the loop.

I tried to get this working with BList, but the sorting was completely broken,
and converting to BObjectList made the code much, much better and worked great.
Screw BList and casting, hurray templated BObjectList.

Really fixes #6782.
2012-08-07 00:41:41 -04:00
Ryan Leavengood
adfe152ee2 Sort the translation formats in AddTranslationItems by name.
This is used by ShowImage and CodyCam to create a list of image formats which a
file can be saved as. Tracker sorts the image MIME types used in the Find
window by name, so this makes these Save As menus match that (minus the icons
which I think are superfluous.)

Fixes #6782.

If the use of BList is no longer recommended, I welcome better suggestions
for sorting which will work in both GCC2 and GCC4. But this works ;)
2012-08-06 02:08:37 -04:00
Axel Dörfler
cbcc98ed56 * Obviously, the GraphicsDefs.h header is needed as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32760 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 15:45:42 +00:00
Axel Dörfler
88cf71d26a * Rewrote last Translation Kit header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32757 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 14:34:29 +00:00
Axel Dörfler
d7571ebcf7 * Rewrote headers as needed.
* Cleaned up our own headers.
* Moved translator errors into Errors.h.
* Removed extra TranslationKit.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32755 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 14:20:56 +00:00
Axel Dörfler
8780d2073d * Rewrote header.
* Cleaned up sources.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32752 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-27 13:40:07 +00:00
Ingo Weinhold
a9cfff5fc2 Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-25 23:51:16 +00:00
Ingo Weinhold
8c7bf264f5 The 'extern "C"' was missing for the C function replacement of the Version()
method. Rather reintroduced the method (private) instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30854 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-25 23:32:53 +00:00
Axel Dörfler
f6e4cbb952 * Rewrote BeBuild.h which had "a few" consequences (got rid of all those class
definitions).
* Minor cleanup here and there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22577 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-15 20:13:55 +00:00
Axel Dörfler
849de6ef97 Added another GetStyledText() function to force a specific encoding.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19847 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-17 12:04:02 +00:00
Axel Dörfler
8acdd17f08 Added WriteStyledEditFile() variant that gets an encoding argument; it will automatically
encode the text in the BTextView accordingly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-01-17 09:10:16 +00:00
Axel Dörfler
b0bc48fbd3 Some more GCC 4 and PPC fixes.
* Mesa doesn't compile yet, as some PPC specific stuff seems to be
  missing, Philippe?
* Cortex and some other stuff has been marked x86-only, although
  it's more of a "GCC 2.95.3"-only.
* I'm not sure if it's a bug in GCC 4, or if that's what the C
  standard demands, but sizeof(some_type::some_field) is not
  valid anymore :-/


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-05-19 15:52:21 +00:00
Axel Dörfler
f90e454336 * More or less rewrote BTranslatorRoster - it now has a private implementation
class, and only wraps around that one.
* Translating is no longer serialized, you can translate more than one object
  at a time now.
* A BTranslator that is released (ie. deleted) will no longer let its BTranslatorRoster
  crash.
* Removed BTranslatorRoster::Version() - this kind of call definitely makes no
  sense at all. It's still exported from the sources, though, for backwards
  compatibility.
* Simplified and improved code.
* Images are now unloaded only once.
* Added new method IsTranslator() that will be used by the DataTranslations preferences
  application.
* Began implementing new methods StartWatching()/StopWatching() that will notify
  you if new translators are installed or old ones removed (this will also be used
  by DataTranslations once it's ready).
* The private BTranslatorRoster class will now add itself to the existing BApplication,
  in order to provide automatic updating of the translators if needed (not yet implemented
  though).
* Not heavily tested yet, there might be some regressions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17247 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-27 18:40:28 +00:00
Matthew Wilber
1adf927f76 Moved FuncTranslator.h to private headers since it is not intended for the user.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11357 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-02-12 14:33:31 +00:00
Matthew Wilber
fa2d26761c Moved translator_data struct to FuncTranslator private header because this struct is not intended to be used by the user.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11356 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-02-12 14:31:01 +00:00
Matthew Wilber
3bd1b732eb Changed TranslationKit version macros to make them more readable.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11256 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-02-05 18:03:28 +00:00
Matthew Wilber
a689e076c3 "Fixed" BTranslatorRoster so that it no longer stores the list of translators backwards. This is the order that applications assume, so this must be done to prevent inconsistent behavior between the R5 translation kit and the Haiku version.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9490 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-10-24 19:42:05 +00:00
Matthew Wilber
ba25ca5cf0 Fixed & / | mixup
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6808 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-02-29 18:12:29 +00:00
Matthew Wilber
ab71ec93c8 Changed version macros to use Be naming scheme
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6798 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-02-29 16:54:11 +00:00
Matthew Wilber
ed2a34c44f Added version macros to be used by the translation kit / translators for making and decoding version numbers
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-02-28 19:13:20 +00:00
Matthew Wilber
d551902916 Changed the quality/capability comments to more clearly explain what they are for
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6123 a95241bf-73f2-0310-859d-f6bbb57e9c96
2004-01-18 02:56:04 +00:00
Matthew Wilber
b0837927f6 changed to reflect the name change of R4xTranslator.h to FuncTranslator.h
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2408 a95241bf-73f2-0310-859d-f6bbb57e9c96
2003-01-11 13:52:59 +00:00
Matthew Wilber
0ac173e420 renamed R4xTranslator.h to FuncTranslator.h
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2003-01-11 13:51:18 +00:00
Matthew Wilber
d7e25ddc2b A beta tester reported that PackageBuilder failed to load when the OBOS libtranslation.so was used. This was because the
OBOS BBitmapStream was missing a protected function.  I implemented the protected function (SwapHeader) and changed the cl
ass to use it instead of the previous functions that I wrote to provide similar behavior.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2003-01-11 03:20:08 +00:00
Matthew Wilber
65328c9bf0 eliminated an unnessecary function
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2233 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-12-13 00:31:45 +00:00
Matthew Wilber
8da2aed831 fixed a spelling issue
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-10-18 03:25:28 +00:00
ejakowatz
52a3801208 It is accomplished ...
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-07-09 12:24:59 +00:00