2 Shared code for ROX applications
4 http://rox.sourceforge.net
6 Note: for a detailed changelog, do:
8 svn log -v https://svn.sourceforge.net/svnroot/rox/trunk/ROX-Lib2
14 - Added ROX-Lib.xml file, which makes it easy to register a CVS copy of ROX-Lib
15 with the 0launch, using '0launch --add-feed' (Thomas Leonard).
17 - If pygtk is found, but not gtk, give a better error (Thomas Leonard; reported
20 - Double-click on a line in the stacktrace display of the debug box to
21 open the source code in Edit.
23 - Added rox.isappdir() function to test the validity of an AppDir (Stephen
26 - Set sys.excepthook to our graphical exception explorer so that untrapped
27 exceptions are reported nicely.
29 - Don't display KeyboardInterrupt in an error box.
34 - When displaying an uncaught exception, still write it to stderr as well as
35 opening the exception dialog box.
39 - Made message in AppRun translatable (Andras Mohari).
41 - Include AppRun when generating translations, and rename translation function
42 in OptionsBox to avoid confusing pygettext (reported by Andras Mohari).
44 - Added Hungarian translation.
46 - More strings marked for translation.
51 es Juan Carlos Jimenez Garcia
56 pt_BR * Jose Carlos do Nascimento
60 * indicates a translation which is out-of-date.
64 - Added method for applets to determine the panel orientation (Stephen Watson).
68 - Made filer.py use 0launch if available (Thomas Leonard; requested by
73 - Added launch module, which allows running programs easily using the injector,
74 and made filer.py use 0launch if available (Thomas Leonard; requested by
79 - Changed the doc string in Menu.py to prefer the new MenuItem based method
80 of defining menus not the old tuple method (Stephen Watson).
84 - Added mime.get_type_handler(), which uses the same algorithm as ROX-Filer to
85 find the handler for a file (Ken Hayber and Thomas Leonard).
89 - EXPERIMENTAL code for installing MIME handlers via 0launch (Stephen Watson)
91 - Better detection of the MIME-types/MIME-thumb location when installing type
92 handlers (Stephen Watson).
94 - Improve installation of MIME type handler under Zero Install (Stephen Watson)
96 - Bugfix: spurious argument when installing SendTo handler under Zero Install
97 (Stephen Watson, reported by Andras Mohari)
101 - Rename translation function in OptionsBox to avoid confusing pygettext.
103 - Make the options box use ComboBox instead of OptionMenu whenever possible. It
104 also makes sure that the OptionMenu's initial width is large enough to
105 display the widest item (Andras Mohari).
109 - When saving a file to a FAT filesystem, the chmod would fail. Log a warning
110 instead of aborting (Thomas Leonard; reported by QS Computing).
112 - Save box now selects icon from same icon theme as ROX-Filer (Stephen Watson).
116 - Added rox.session module for communicating with ROX-Session.
118 - Use XMLRPC if the DBUS version is too old.
120 - Check that ROX-Session is providing the dbus service, don't just assume that
121 it is (Stephen Watson).
125 - Added settings module (Tony Houghton, based on code from LookAndFeel).
127 - Don't create bus object until constructor is called.
129 - rox.settings now uses rox.session to communicate with ROX-Session and
130 the duplicate Options work has been removed from rox.session (Stephen
135 - If 'xterm' isn't available, give a sensible error message when using the
136 su module (Thomas Leonard; reported by Vincent Lefevre).
140 - Added 'xxmlrpc' module. This allows sending XML-RPC messages to other
141 processes, via the X server.
143 - Extended XML-RPC code to return response values and faults to caller.
145 - Better error codes (NoSuchService, UnknownObject, NoSuchMethod). Cope with
146 returning None (returns True instead). Simplified API (no need to subclass
147 ExportedObject, call register, or use invoke).
149 - If a service property exists but the window it points to doesn't, then
150 report that the service is no longer running.
152 - XXMLRPC call objects support the Blocker interface (so you can block
153 until the reply is available).
155 - If an XXMLRPC Call object is destroyed before the response is read then
156 display a warning and destroy the IPC window.
160 Updated French translation (Vincent Lefèvre).
164 Bugfix: spurious argument when installing SendTo handler under Zero
165 Install (Stephen Watson, reported by Andras Mohari)
169 When installing a type handler under Zero Install, make sure to pass the
170 arguments to the program and run 0launch in console mode (Stephen Watson).
174 Added mime.get_type_handler(), which uses the same algorithm as ROX-Filer to
175 find the handler for a file (Ken Hayber and Thomas Leonard).
179 New class Setting in rox.session is an option tied to a ROX-Session setting
184 Added rox.session module for communicating with ROX-Session.
185 Added method for applets to determine the panel orientation (Stephen Watson).
189 Set sys.excepthook to our graphical exception explorer so that untrapped
190 exceptions are reported nicely.
194 Save box now selects icon from same icon theme as ROX-Filer (Stephen Watson).
198 When saving a file to a FAT filesystem, the chmod would fail. Log a warning
199 instead of aborting (Thomas Leonard; reported by QS Computing).
203 Better detection of the MIME-types/MIME-thumb location when installing
204 type handlers (Stephen Watson).
208 Added rox.isappdir() function to test the validity of an AppDir (Stephen
210 EXPERIMENTAL code for installing MIME handlers via 0launch (Stephen Watson).
214 Changed the doc string in Menu.py to prefer the new MenuItem based method
215 of defining menus not the old tuple method (Stephen Watson).
219 Added Hungarian translation (Andras Mohari).
223 Made message in AppRun translatable (Andras Mohari).
227 Added launch module, which allows running programs easily using the injector,
228 and made filer.py use 0launch if available (Thomas Leonard; requested by
230 Double-click on a line in the stack-trace display of an error to open the
231 source file in Edit (Thomas Leonard).
235 If pygtk is found, but not gtk, give a better error (Thomas Leonard; reported
240 If 'xterm' isn't available, give a sensible error message when using the
241 su module (Thomas Leonard; reported by Vincent Lefevre).
245 Added ROX-Lib.xml file, which makes it easy to register a CVS copy of ROX-Lib
246 with the 0launch, using '0launch --add-feed' (Thomas Leonard).
248 25-Jul-2005 (Release 2.0.2)
250 Bugfix: Installing MIME handlers under the XDG base dir system didn't
251 work (Stephen Watson).
253 17-Jun-2005 (Release 2.0.1)
255 Send deprecation warnings to stdout, not stderr, so only developers will
256 see them (Thomas Leonard).
260 Fixed deprecation warning in processes.py (Thomas Leonard).
264 Avoid apparent PyGTK bug related to icon themes, may result in a
265 memory leak but probably won't (Stephen Watson).
269 Clean up of icon theme handling (Stephen Watson).
273 Compatability with PyGTK 2.4 retaining backwards compatability with
274 2.2 at least (Ken Hayber, Stephen Watson).
278 Updated Chinese translation (Babyfai Cheung).
282 Added Portuguese translation (José Carlos do Nascimento).
286 Don't try to get pygtk through Zero Install. The injector can be used to
287 choose the implementation of pygtk to use, including a version in Zero
288 Install if desired (Thomas Leonard).
292 MIME handler install now uses basedir (Stephen Watson).
293 Tests use gtk.main() instead of the deprecated gtk.mainloop() (Stephen Watson).
297 Some versions of GTK silently remove '-' from sys.argv (GTK bug #303166).
298 Added a work-around (Thomas Leonard).
302 Put "root" back in su command, but detect what the exact string should be, as
303 Solaris needs something here (reported by Stephen Watson).
307 The default SaveArea.confirm_new_path() now shows an error if the target
308 exists as a directory, instead of asking if you want to overwrite it (Thomas
309 Leonard; reported by Jonatan Liljedahl).
310 Remove "root" from the su command, as some systems call user 0 something else
311 (Thomas Leonard; reported by Jonatan Liljedahl).
315 When getting an icon for saving, specify the size if PyGTK is recent enough.
316 This prevents SVG icons from appearing in huge sizes (Thomas Leonard;
317 requested by John Pettigrew).
318 Bugfix: Theme index parser failed to cope with comments at the start of the
319 file (Thomas Leonard).
323 Compatability fixes for the su module (Stephen Watson).
327 Fixed Zero Install version test in findrox.py (Thomas Leonard).
329 16-Apr-2005 (Release 2.0.0)
331 Run unit tests in alphabetical order as it fixes a strange interaction between them (Stephen Watson).
335 Added unit tests for processes module, based on old tests in Archive (Thomas
340 Changed MakeDist to allow use of other SourceForge accounts (Stephen Watson).
344 Added 'testall' script to run all the unit tests together (Thomas Leonard).
346 23-Mar-2005 (Release 1.9.18)
348 German translation (Guido Schimmels).
352 Added TODO file to track bugs and changes needed for 2.0.0 release.
356 Bugfix: Set default in Options box to OK to avoid triggering a GTK bug
357 (Thomas Leonard, reported by Guido Schimmels).
359 16-Jan-2005 (Release 1.9.17)
361 Added OutputBlocker, which works in a similar way to InputBlocker (Thomas
366 Be consistent about URI escaping. set_uri() is now always passed an unescaped
367 UTF-8 string (Thomas Leonard).
371 Added fixedlist and varlist widgets to OptionsBox (Stephen Watson).
375 Added MIME type matching by file contents (Stephen Watson).
379 If a 'rox' module is in PYTHONPATH, use that without any searching (Thomas
384 Added Chinese translation (Babyfai Cheung).
388 Suppress warning when we use GtkItemFactory under pygtk 2.4 (Stephen Watson).
392 Added tasks.InputBlocker, which triggers when an input source becomes
393 readable (Thomas Leonard).
397 Bugfix: Use only text nodes when getting the tool tip from the Options.xml
398 file (Stephen Watson).
402 Bugfix: Theme subdirectories are separated by ',' not ';' (reported by
407 Bugfix: When a menu has more than one toggle item, only one is updated
408 correctly (Ken Hayber).
412 Replace g.mainloop() and g.mainquit() with g.main() and g.main_quit() as
413 recommended since pygtk 2.0.0 to avoid warnings with pygtk 2.4.0 (Stephen
418 Added options.ListOption to support multi-valued option widgets, such as
419 lists (Stephen Watson).
421 02-Oct-2004 (Release 1.9.16)
423 Cope better with user cancelling su operation. New interface to replace
424 create_su_proxy (Thomas Leonard).
428 The choices module is now deprecated. You can use choices.migrate() to move
429 settings over to the basedir system (Thomas Leonard). Also added
430 basedir.load_first_config(), which works like the old choices.load().
434 Several incompatible changes to the experimental proxy API to make it simpler
437 - Create_su_proxy now returns the MasterObject directly, not the MasterProxy.
438 - You can call finish on the MasterObject (so the MasterProxy isn't needed).
439 - Slave methods no longer take a 'request' argument. Instead, the return
440 value of the function is returned.
441 - Methods can only return one value. dequeue and dequeue_last have been
442 replaced with a 'result' property.
443 - Methods on MasterObject now return a RequestBlocker, not a Queue. This
444 means you just yield the object itself, not object.blocker.
446 Tasks API is no longer experimental, but proxy API is.
450 Added a Help button to the exception dialog, which opens the new Help/Errors
451 file (Thomas Leonard).
455 Bugfix: Failed to call the parent constructor to AbortSave correctly.
459 Simplified su code and interface.
460 New suchild methods: open, close, read, write, chmod and rename, which work
461 just like their normal Python counterparts (Thomas Leonard).
465 Removed code to turn off the separator in the debug dialog. GTK 2.4 doesn't
466 need it, and generates a warning if you use it (Thomas Leonard).
468 27-Aug-2004 (Release 1.9.15)
470 Added spawnvpe and waitpid methods to suchild.
474 If the unit field for a <numentry> option is blank, don't try to translate it
475 (reported by Guido Schimmels).
479 Added 'su' module for performing operations as root.
483 Allow "" as a valid value in a OptionsBox menu (reported by Guido Schimmels).
487 Added 'proxy' module. This allows one Python process to invoke methods on
488 another asynchronously.
489 Added rox.UserAbort exception, to be raised when users cancel something
494 Fix syntax error I caused when I added a docstring (Stephen Watson).
498 Get update-mime-database command through Zero Install, if possible.
502 mime_handler can now uninstall (Stephen Watson).
506 Translate menu items in options (Guido Schimmels).
510 Added <slider> widget to options.
514 Added 'size-group' attribute to Options.xml elements. This allows grouping
515 elements so that their labels all appear the same width.
519 Bugfix: Colour buttons in the Options boxes didn't work with some themes
522 17-Apr-2004 (Release 1.9.14)
524 Added ToggleItem (based on a patch from Ken Hayber).
528 Better <label> widgets (wrapping and icon). Taken from LookAndFeel.
532 Stop themes from overriding the display of the colour-picker buttons in
533 the options box (Rene Ejury).
537 Warn about old versions of findrox.py.
538 Bugfix: Bug in new menu API prevented submenus from working.
540 16-Mar-2004 (Release 1.9.13)
542 Bugfix: Icon themes didn't work with python versions older than 2.2.2
543 (reported by Thomas Zajic).
547 Bugfix: Use filer module to show ROX-Lib help, rather than using os.system,
548 so that it works with Zero Install (reported by Keith Hopper).
552 Added widget_registry to OptionsBox, to provide an easy way to register
553 new option types. Removed build_button in favour of this method.
555 Bugfix: If an error occurred loading the ROX theme at startup it could not
556 be reported, because icon_theme wants debug, debug wants saving, and
557 saving wants icon_theme (reported by Thomas Zajic).
561 Cope with pygtk2.2 API change (Stephen Watson, reported by Guido Schimmels).
565 Added secretentry and button options to the OptionsBox (Stephen Watson).
569 Cope with option values split into multiple DOM text nodes (Rene Ejury).
573 Allow a list of values to be stored in each menu Action. These are used as
574 the arguments to the callback function.
575 If a file's details were recorded (in document.save_last_stat) when it was
576 loaded, make sure they haven't changed when saving. Saving also updates this
577 variable (requested by Arnaud Calvo).
581 Updated examples in documentation for new findrox (Yuri Bongiorno).
585 New API for menus. Instead of passing tuples for menu items, python classes
586 can be used. The old tuple interface is still supported.
590 Don't stop DnD working in the savebox just because no icon can be found
591 (reported by Martin Lucina).
595 Added French translation (Vincent Lefèvre).
599 Also translate <label> elements in the Options box (reported by Arnaud Calvo).
603 Also translate section names in the Options box (reported by Arnaud Calvo).
605 22-Jan-2004 (Release 1.9.12)
607 Added 'tasks' module to provide a light-weight alternative to threads.
608 Bugfix: On non-zero-install systems, the sense of the version check in findrox
613 Added method to MIMEtype to fetch its icon. Install list window for
614 the MIME handler installation uses it (Stephen Watson).
618 Translate text in Options box.
622 Allow ROXLIB_DISABLE_ZEROINSTALL to override looking for ROX-Lib in Zero
623 Install (useful for ROX-Lib developers). Prefer a locally installed version
624 of ROX-Filer to the Zero Install version; this also allows users to select
625 which Zero Install version they want (eg, stable or developer).
626 Moved MIME handler installation into a separate module (mime_handler) and
627 made a few changes to the XML syntax.
631 Added <menu> OptionMenu widget for Options box (Chris Shaffer).
635 Fixed bug in findrox when not using Zero Install (Lionel Bringuier).
639 Escape and unescape URIs, as required by ROX-Filer 2.1.0 (reported by
641 Note that the xds_load_uris() method is now called with escaped URIs.
642 Try to run the filer through Zero Install, if possible.
646 If we can't get pygtk through Zero Install, try the local copy.
650 Added support in mime.py for an application to set MIME-type run
651 actions and thumbnail programs (Stephen Watson).
655 Simplified implementation of saving.SaveFilter by using the new
656 processes.PipeThroughCommand class. The child_run() method of SaveFilter
657 is no longer supported.
658 In processes.PipeThroughCommand, a None input stream gets /dev/null instead
659 of inheriting its parent's stream. The class has a new run_child_with_streams
660 to make overriding the behaviour easier.
661 findrox.py script now warns if ROX-Lib2 version is too old (unless requesting
662 a version too old to have a version number).
666 Changed 'Dismiss' to 'Close' (Chris Shaffer).
667 Bugfix: Error reporting in mime.py failed to import the _ function (reported
668 by Christopher Haines).
669 New AppInfo.py for parsing AppInfo.xml files (Christopher Arndt), InfoWin
670 converted to use it (Stephen Watson).
672 15-Oct-2003 (Release 1.9.11)
674 Bugfix: Python 2.3's new bool type broke options saving (reported by Lars
679 Added PipeThroughCommand class (copied from Archive, with some minor
684 Allow event to be None for Menu.popup. This allows the menu to be activated
685 from the keyboard, using the 'popup-menu' signal.
689 Added French translation in AppInfo.xml (Vincent Lefèvre).
691 03-Oct-2003 (Release 1.9.10)
693 Added support for icon themes (doesn't do inheritance yet).
697 Added some version information to the dialog you get when you run ROX-Lib
702 New bug() function to quickly bring up a debugging prompt.
706 The glob patterns in mime.py are now sorted longest first. Fix for setting
707 icon in the old way when there was no icon (Stephen Watson).
711 Try to cope better with bad hostname setup (reported by Nathan Howell).
715 Added InfoWin.py to provide standardized information window (Stephen Watson).
719 Fall back to old way of setting default icon for older pygtk's (Stephen
724 Added Italian translation (Yuri Bongiorno).
728 Better way to set the default icon.
730 16-Aug-2003 (Release 1.9.9)
732 Give windows a default icon from .DirIcon (Chris Shaffer).
736 Try to get pygtk through ZeroInstall.
740 Updated findrox to use ZeroInstall, if possible.
744 Work out correct application name even if invoked via a symlink. This stops
745 applications from calling themselves 'text_plain', etc (reported by Joe Hill).
747 19-Jul-2003 (Release 1.9.8)
749 Make default menu positioning function keep the pointer inside the menu.
750 Allow stock icons in menus.
754 Added position_fn argument to rox.Menu.popup.
758 Cope with % escaped URIs.
762 Added italian translation in AppInfo.xml (Yuri Bongiorno)
766 When loading data from another application, pass the suggested leafname to
767 xds_load_from_stream().
771 Code tidying, thanks to pychecker.
775 Added fileutils module, which provides an interactive makedirs() function
777 Changed savebox module to use it.
779 16-May-2003 (Release 1.9.7)
781 New icon (Geoff Youngs).
782 Added 'basedir' module for freedesktop.org Base Directory specification.
786 Added functions to read MIME database (Stephen Watson).
788 27-Jan-2003 (Release 1.9.6)
790 Make the default window class the name of the application directory, not
791 'AppRun' (suggested by Albert Wagner).
792 Bugfix: With pygtk-1.99.14, only the first error message from a process
793 would be detected; this meant that ROX-Lib wouldn't detect when the
794 process quit (reported by joehill).
795 Bugfix: <hbox> and <vbox> layouts didn't work in the options box (Allen
800 If python is too old, raise SystemExit instead of quitting.
801 Ensure that True and False are defined.
805 Work around bug in some versions of pygtk that stopped the options window
808 12-Dec-2002 (Release 1.9.5)
810 Upgrade Options box to new style.
814 Bugfix: If an option had an empty value, an exception was thrown on loading
815 (reported by Stephen Watson).
819 Cope with missing input_add_full.
823 Pygtk 1.99.12 seems to more-or-less work now (according to Alastair Porter), so
824 remove the warning for that so we can support RedHat 8.0.
826 20-Oct-2002 (Release 1.9.4)
828 More warnings about old pygtk versions.
829 Added Dialog class (does ref-counting, like Window).
833 Trying to use ROX-Lib2 with earlier versions of python now gives a sensible
838 Make clicking on ROX-Lib itself work again (Christopher Arndt).
842 Updated findrox.py to use pygtk 1.99.13 -- update your programs!
844 25-Aug-2002 (Release 1.9.3)
846 Switch to use new pygtk versioning system (requires pygtk 1.99.13).
850 Added 'processes' module, based on code in Archive, which makes controlling
855 Bugfix: Changing the keys lost any builtin shortcuts (Gtk behaviour has
860 Trap exceptions when activating menu items and report nicely.
864 Bugfix: Remember to call drop_finish() after a drag-and-drop operation.
866 05-Aug-2002 (Release 1.9.2)
868 Renamed XDSLoader module to 'loading' (like 'saving').
869 Added 'mime' module for installing extra MIME information.
870 Bugfix: XDSLoader didn't handle the drag-drop signal, and so only worked for
871 widgets with their own implementation!
875 Show local variables in report_exception, and allow expressions to be
876 evaluated in the context of any frame.
877 Added StringSaver class.
881 Added applet module for creating ROX panel applets.
885 Bugfix: saving code didn't cope with missing images (reported by Musus Umbra).
889 If 'gtk2' isn't available, see if 'gtk' is actually the 2.0 version.
890 Added save_set_permissions to Saveable interface, allowing the default
891 save_to_file to preserve file permissions.
892 Changes to XDSLoader: xds_load_from_stream(name, type, stream)
893 replaces the old xds_load_data(data).
894 Loading files from remote filers works now.
895 Added much improved exception reporting system.
897 19-Jul-2002 (Release 1.9.1)
899 Added support for translations.
903 License change to the LGPL (allows commercial programs to use this library).
904 Added AbortSave exception.
908 Saveable.save_to_file() should raise an exception when saving fails, rather
909 than returning 0. The return value is now ignored (note that raising an
910 exception will still work with 1.9.0).
911 toplevel_unref() ignores any arguments, so it is easier to use as a signal
914 12-Jul-2002 (Release 1.9.0)
916 First release for Gtk+-2.0.