dogtail 0.8.2
=============
Second update to the 0.8 series containing several fixes and improvements

 * Added the dogtail-run-headless-next to replace the dogtail-run-headless in future.
  -next, uses a diplay manager (kdm or gdm) for session management, should be used instead of older
  headless on systemd systems already

 * Unittests vastly improved and updated

 * Fixed a missing reset of FocusWindow to None on application refocus

 * Fixed the dogtail-logout to use gnome-shell instead of old gnome-panel

dogtail 0.8.1
=============
A first update to the new GNOME3 / KDE4 compatible release containing several fixes:

 * Sniff's autorefresh made togglable, to help avoid collisions with potential
   running dogtail scripts. Sniff checks at startup whether some script is running
   and sets up the autorefresh off if it is.

 * Added a locking mechanism into utils that can be used to solve situations when
   multiple dogtail processes/thread are running (applied in tree/procedural and sniff
   already)

 * Removed the deprecated dependency on CORBA

 * Icons no longer use absolute pathing in sniff (thx roignac)

 * Deprecated  .has_key() operator replaced with 'in'.

 * Removed .svg inside sniff's .desktop file

dogtail 0.8.0
=============
Finally a big release updating dogtail after more than 2 years ! Dogtail
is developed and maintained now again.

Simply put, ported to be compatible with the new GNOME 3 and to work well in major
GNOME 3 (GTK3) distributions.

We'd like to make the 0.8.x version onward the GNOME 3 compatible branch usable
for Fedora, RHEL7 and others, while keeping 0.7.x releases for fixes in older GNOME2
systems.

--- What was done ---

Notably, Sniff's UI needed to ported completely to GTK3, yet there are
also several places in dogtail 'itself' that needed to be rewritten to go ahead
with the new technologies. Those were all the modules where the old pygtk was
used for various reasons (rawinput, utils, tree...). Incompatibilites were also
present due to the new version of pyatspi (notably with the doAction method).

Release highlights:

* A great number of fixes everywhere related to GTK/GNOME/At-Spi updates

* The dogtail-recorder was dropped for now, but might return in RC or 0.8.1

* Thanks to the qt-at-spi project, dogtail now works out-of-the-box for QT!

* Headless supports KDE sessions

* Headless working with full 3D-Accelerated GNOME session (no fallback anymore)

* Highlight used in sniff completely re-written and made toggleable (of by default)

* Makefile updated, 'make run' builds packages in homedir/rpmbuld now

* Several examples fixed for updated gedit

* Added tree.isChild() convenience method

* Renamed doAction to doActionNamed due to conflict with doAction inside
  pyatspi namespace

* Delay made configurable in absoluteMotion and relativeMotion functions

* Changed at-spi activation to use DConf instead of GConf

* A bit of code clean-up and modernization (using @property now etc.)

* More error checking added

* A couple of unit tests for Node added

* Node.findChildren() updated to be faster


dogtail 0.7.0
=============

This release has too many changes to list. Here are some of the major ones:

* Dogtail has been ported to pyatspi. This means:
    - Faster performance.
    - Errors will be more clear.
    - No more segfaulting or myserious crashes.

* There is now useful generated API documentation:
    http://fedorapeople.org/~zmc/dogtail/epydoc/

* Inline documentation has been greatly improved.

* Headless execution support was completely rewritten.

* Sniff was completely rewritten. It is now:
    - Faster.
    - More reliable.
    - Self-updating via AT-SPI events.
    - Slightly prettier.
    - Able to tell you about certain states and relations.

* Image Comparison (TCImage) was rewritten. No more ImageMagick!

Note: tests/Node.py's TestNodeAttributes is failing due to GNOME bugs #498557
      and #498563


dogtail 0.6.1
=============

Features:

 * dogtail-recorder has a Play button now.

 * dogtail-recorder now records right-clicks. That it didn't previously was an
   oversight. Note that there is some inconsistency when dealing with context
   menus, as the events often get fired in the wrong order.

 * New logging mechanism:

    - Debug output is now written to a file. To disable this, set
      dogtail.config.config.logDebugToFile to False.

    - The procedural API defaults to not raising FocusErrors, and instead
      issuing warnings via the debug logging mechanism (which prints to
      standard out along with writing to a file). To re-enable FocusErrors, set
      dogtail.config.config.fatalErrors to True.

 * Brian Cameron submitted a patch to make dogtail.distro correctly detect that
   it is running on Solaris.

Bugfixes:

 * dogtail-recorder no longer offers the broken Object-Oriented backend as a
   choice. If it gets fixed, it will be offered again.

 * dogtail-recorder can be properly exited by clicking on the window manager
   close button. In fact, the Quit button was removed also.

 * dogtail-recorder's syntax hilighting works again, thanks to a patch from
   Dave Malcolm.

 * Searching for nodes with parentheses in their names will no longer fail.

 * The various pressKey() functions were blowing up on punctuation and
   newlines. Fixed.

 * Predicate subclasses in dogtail.predicate which were missing debugNames have
   gotten them back.

 * Warnings are no longer issued when dogtail encounters invalid Unicode.

 * Where several of our example scripts were broken, Michal Babej noticed and
   submitted patches fixing them.

 * dogtail's tarball is 90% smaller! Some overly large test images were
   replaced with very, very small ones that still do the job.


dogtail 0.6.0
=============

Features:

 * Keystroke recording support in dogtail-recorder:

    - Normal keypresses (e.g. typing 'foo bar baz') will be recorded as
      "type('foo bar baz')" in the procedural API. dogtail.tree.Node has a new
      method, typeText(), which is called by dogtail.procedural.type().

    - Nonprintable keypresses (e.g. typing Control-Shift-c) will be recorded as
      "keyCombo('<Control><Shift>c')" in the procedural API. dogtail.tree.Node
      has a new method, keyCombo(), which is called by
      dogtail.procedural.keyCombo().

    - The now-unnecessary 'Input Text' button has been removed.

 * dogtail.tree.Node has new attributes and a new method:

    - grabFocus(): Attempts to cause the node to grab the keyboard focus.

    - focusable: Whether the node is able to have keyboard focus.

    - focused: Whether the node currently has keyboard focus.

    - checked: Whether the node is a checkbox that is currently checked.

 * Dogtail now checks if accessibility is enabled before it does anything.
   sniff and dogtail-recorder will prompt to enable it via a dialog, and
   scripts themselves will just refuse to run.

 * Dogtail no longer uses the IconLogger (in the notification area) by default.
   Set dogtail.config.config.useIconLogger to True to reenable it.

 * dogtail.utils.screenshot() was rewritten to use GDK instead of ImageMagick.

Bugfixes:

 * Dogtail is now much more robust in dealing with possibly-invalid Unicode
   strings passed to it via AT-SPI. (GNOME bug #354515)

 * Dogtail will not crash when it receives an SpiException caused by a CORBA
   COMM_FAILURE, unless the source of that error is the application under test.

 * While exceptions occuring inside callbacks used in dogtail-recorder will
   still not properly be raised, they are now printed to standard out.

 * SuSe support in dogtail.distro is fixed. (GNOME bug #353601)

 * sniff and dogtail-recorder will now find their glade files, even if they're
   installed into a nonstandard prefix. (GNOME bug #353719, #353731)

 * dogtail-run-headless had a few bugs fixed.


dogtail 0.5.2
=============

Features:

 * A much-improved recorder:

    - A procedural script writer, which is now default.

    - An 'Input Text' feature, which allows you to set the text attribute
      of any visible Node via the recorder. Coming soon is proper keystroke
      recording.

    - The script view now uses syntax hilighting where available. (GNOME bug
      #345374)

 * A completely-rewritten dogtail-run-headless, which now offers two session
   types: minimal GNOME and metacity. The syntax has changed, so use
   'dogtail-run-headless --help' to get started. (GNOME bug #320548)

 * All 'name' arguments in dogtail.tree and dogtail.procedural now accept
   regular expressions.

 * Support for AccessibleSelections, providing a clean way to select page
   tabs and combo box items. (GNOME bug #336562)

 * Support for building in a jhbuild environment. (GNOME bug #318535)

 * Far more extensive unit tests for dogtail.tree.Node.

Bugfixes:

 * The source is now indented with spaces and not tabs! :) (GNOME bug #318833)

 * Pyspi and dogtail no longer mysteriously stop working. (GNOME bug #321273)

 * Sniff no longer crashes when an application being poked disappears. (GNOME
   bug #318135)


dogtail 0.5.1
=============

Features:

 * An improved build system for RPMs.

 * dogtail.procedural's FocusErrors are now more informative.

Bugfixes:

 * examples/recorder.py was broken; a bug in dogtail.predicate.makeCamel()
   was breaking the predicates' makeScriptVariableName() calls. It's fixed.


dogtail 0.5.0
=============

Features:

 * Automatic runtime translation into the current locale using the application
   under test's own translations. See
   examples/gedit-test-utf8-procedural-api.py for an example.

 * dogtail.distro.packageDb gained new methods: getFiles(), getMoFiles(), and
   getDependencies().

 * dogtail.distro.packageDb now has support for JHBuild environments.

 * dogtail.distro has gained exceptions:

   - PackageNotFoundError: raised when the specified package is not found.

   - DistributionNotSupportedError: raised when support for the current
     distribution is not currently implemented in dogtail.distro. This does
     not mean that dogtail will not work at all; only that
     distribution-specific functionality, like automatic runtime translation,
     will not.

 * dogtail.errors is a new module for very general exceptions, such as
   DependencyNotFoundError, which is raised when the use of a feature that
   depends on some missing piece of software is attempted.

 * sniff will now cause the selected node to blink onscreen.

 * dogtail.tree has a new Node subclass, Link. Link nodes have a roleName of
   'hyper link' and an action called 'jump'. Their main purpose is to allow
   us to follow links in web pages.

 * dogtail.tree.Node has new properties and methods:

   - position: the onscreen position of the node, if it wraps an
     atspi.Component.

   - size: the onscreen size of the node, if it wraps an atspi.Component.

   - blink(): causes the node to blink onscreen.

   - grabFocus(): causes the node to grab the keyboard focus, if it wraps an
     atspi.Component.

   - rawClick(): synthesizes a raw mouse click on the node, if it wraps an
     atspi.Component.

   - rawType(): synthesizes raw keyboard events to type text into the node, if
     it wraps an atspi.Component.

 * dogtail.procedural has new helper methods:

   - menu(): executes the 'menu' action on the focused widget.

   - focus.frame(): a shortcut to focus.widget(roleName='frame' ...)

   - focus.window(): a shortcut to focus.widget(roleName='window' ...)

 * dogtail.procedural.click() can now synthesize raw mouse events to perform
   "raw" clicks.

 * dogtail.rawinput has gained new methods:

   - pressKey(): synthesizes a raw keyboard event, pressing the key whose
     name is specified.

   - typeText(): types a specified string, one key at a time, using raw
     keyboard events.

 * dogtail.config was rewritten.

 * dogtail.config.config has new parameters:

   - ensureSensitivity: controls whether a NotSensitiveError is raised when
     an attempt is made to execute an action belonging to a Node instance
     that is not sensitive, or if a warning is simply printed instead (the
     default).

   - debugTranslation: Controls whether details of the autotranslation
     process will be outputted to the debug logger.

 * dogtail.config now creates its scratchDir, dataDir, and logDir as soon as
   the values are set.

 * dogtail.utils.screenshot(), by default, whether using a custom filename or
   not, now appends a timestamp to the filename. That may be disabled by
   passing 'timeStamp = False' to the method. For this reason, it also prints
   the full path to the screenshot.

 * dogtail.logging.TimeStamp.fileStamp()'s format has changed, to
   filename_YYYYMMDD-hhmmss or just filename_YYYYMMDD, controlled by the new
   optional argument 'addTime'.

 * dogtail prints the full path to any logfiles it creates.

 * dogtail-run-headless will now turn accessibility on before executing the
   script under test, and also restore the old value after the the script has
   finished executing (GNOME bug #320548).

Bugfixes:

 * sniff will correctly show the text of a non-editable text node again
   (GNOME bug #321564).

 * dogtail.tree.screenshot() was mostly rewritten, and no longer breaks when
   given a custom filename.

 * dogtail.procedural no longer causes PyDoc to fail miserably (or at all).

 * dogtail will no longer warn about missing wnck bindings, because they're
   not actually used anyway.

 * dogtail.procedural.focus.dialog() no longer searches recursively (GNOME
   bug #321624).

 * dogtail.procedural.focus.widget() and its shortcut functions now properly
   raise a FocusError if their search fails.

 * dogtail.tc.TCString.compare() will now fail properly again, thanks to
   Muktha Narayan (GNOME bug #321151).

 * dogtail.tc.TCImage.compare() now works with the newest version of
   ImageMagick. That version had changed its behavior, breaking the function.
   (GNOME bug #321431).

 * Attempting to instantiate a dogtail.tc.TCImage object while ImageMagick is
   not installed will now give a comprehensible error message, thanks to the
   new dogtail.errors.DependencyNotFoundError exception.

 * Calling dogtail.utils.screenshot() while ImageMagick is not installed will
   also raise a dogtail.errors.DependencyNotFoundError.

 * Attempting to execute an action belonging to a Node instance that isn't
   sensitive no longer fails by default, but prints a warning. This behavior
   is controlled by the ensureSensitivity configuration parameter.

 * dogtail-run-headless now correctly returns the exit code of the script
   being executed (GNOME bug #320535).

 * dogtail.distro's APT support implementation now only calls
   apt_pkg.GetCache() once, improving performance significantly when multiple
   calls to packageDb.get{Version,Dependencies}() are needed.

 * Building RPM packages from the supplied dogtail.spec works again on distros
   that are as old or older than RHEL4.

 * Building RPM packages with 'make rpm' works again without root privileges.

API breaks:

 * Action execution via dogtail.tree.Node instances was forced to change
   interfaces from the "node.open()" model to a "node.doAction('open')"
   model. To retain backward compatibility with the application wrappers, the
   "click" action is still available as "node.click()". The
   dogtail.procedural interface was able to remain unchanged.

 * dogtail.config was rewritten to be more robust, and its interface was
   changed slightly. To port, First, remove any instantiations of the old
   Config class, and then make the following parameter replacements:

   - Config  => config
   - logdir  => logDir
   - scratch => scratchDir
   - data    => dataDir


dogtail 0.4.3
=============

Features:
 * Headless support has been added. Use dogtail-run-headless to spawn an X
   server, a minimal "Nat/Jeff" GNOME session, and execute a given dogtail
   script before exiting. The dogtail-detect-session script detects a running
   GNOME session, but KDE support can be dropped in once KDE has accessibility
   support.

 * dogtail now uses a notification icon while it is running. Its tooltip is
   equal to the last message relayed by the debug logger. Most of the code
   was taken from jhbuild.

 * Sniff, the AT-SPI browser that uses the dogtail libraries, has gained icons
   for both applications and specific widgets (based on the role name, taken
   from at-poke) to make browsing easier.

 * Sniff also gained a proper dogtail icon.

 * The procedural API has been given more convenience functions for 'focusing'
   different types of widgets.

 * The procedural API has also been given an openItem() method, which works
   just like click(), for opening icons on nautilus' desktop.

 * dogtail can now detect Gentoo and Conary distributions, thanks to Brent
   Smith and Tim Gerla, respectively.

 * The Node class in dogtail.tree now exports the 'role' attribute in addition
   to the 'role name'.

 * Wrappers for gcalctool and yelp were added, thanks to Dave Malcolm.

 * A wrapper for gedit was added, thanks to Paolo Borelli.

 * New examples for Evolution, gcalctool and the GTK file chooser were added,
   thanks to Dave Malcolm.

 * Dave Malcolm also enhanced the Evolution wrapper, adding support for
   creating new meetings.

 * A new example that generates fake documentation for a given application has
   been added, thanks to Dave Malcolm.

 * dogtail.spec has been added, thanks to Jeremy Katz, to improve the quality
   of the RPM packages.

Bugfixes:
 * several examples had not been updated to reflect API changes before the
   last release. This has been corrected.

 * The epiphany wrapper now uses the package name 'epiphany-browser' on
   Debian-based distributions to detect the package version, thanks to Andrew
   Beresford.
