|
|
Subscribe / Log in / New account

Development

Using Parasite to delve into GTK+ applications

March 3, 2009

This article was contributed by Ben Martin

Trying to debug your own GUI applications can be a pain if you are not extremely familiar with the toolkit used to make the user interface. When the code you are working on is also unfamiliar, the whole experience quickly becomes less than desirable. The GTK+ Parasite tool helps you to work out the structure of the widgets that comprise a GUI, inspect and change properties of those widgets, and perform more in-depth analysis using an embedded Python shell.

The GTK+ toolkit provides an object-oriented framework for making user interfaces in C. GTK+ gives you facilities to inspect and change the properties of objects and supports introspection so you don't need to know about classes at compile time in order to make use of them at runtime. The GTK+ Parasite attaches itself to a GTK+ application and takes advantage of these dynamic features to let you inspect and change the interface of an application as it runs.

GTK+ Parasite doesn't have any official releases yet, but the source can easily be pulled from its Git repository, compiled and installed using the standard ./autogen.sh && make autotools dance. You'll want to make sure that you have the development packages for PyGtk installed first in order to get the embedded Python shell functionality.

To use GTK+ Parasite, add its name to the GTK_MODULES environment variable and run your GTK+ application as you normally would. For example:

    GTK_MODULES=gtkparasite gedit

Along with your application, you should see and additional Parasite window with a Widget Tree and Action List tab and a small area in the lower part of the window with a Python prompt.

[GTK+ Parasite screenshot] To find out the hierarchy of widgets in your GTK+ application, click on the Inspect button in the Parasite window and then any part of the GUI of your GTK+ application. Along with each widget in a tree view you should see if that widget is realized, mapped and visible, along with the address of both the X Window of the widget and the GTK+ widget itself. The latter address is very handy because you can right click on it and "Send Widget to Shell" to obtain a reference to the widget from the embedded Python interpreter.

The list in the far right of the Widget Tree tab in the Parasite window lists the properties and their value for the current widget. Holding the left button down over a property pops up a list of possible values for you to change it too. On the other hand, if the range of values for a property is too large, like for an integer property, no menu is presented and you can enter the value directly.

The Action List tab in Parasite shows you all the GTKAction objects in the application. For those unfamiliar with the GTK+ toolkit, a GtkAction object represents a piece of functionality that can be connected to a menu or toolbar, for example, opening a Save as dialog or starting a search within the current document. As an example, running Parasite on the text editor gedit, finding the FileOpen action in the list and selecting "Send Object to Shell" from the menu, you can perform the GtkAction by calling the activate method on the object. You should see the file dialog appear. The embedded Python shell command should look something like:

    >>> parasite.gobj(0xa78980).activate()

where everything up to the .activate() was added automatically by Parasite when I told it to send the object to the shell.

If you are writing a custom GTK widget, the "Show Graphic Updates" button causes any redraws that the application performs to briefly flash red first. This makes it fairly simple to see if you are drawing more than you think in order for your widget to update itself. For example, in gedit, only a rectangle covering the current line is updated when you type text into the active document, but when you hit return the current line and everything below it flashes red.

There are a few rough edges to the GUI of GTK+ Parasite, which is to be expected from such a young application. For example, in the "Action List" tab, one might expect to be able to simply double-click on an action to execute it. In addition, left-clicking on a property lets you either edit the value directly inline in the cell or if there is a limited number of acceptable values a popup menu appears allowing you to select a value. While this provides a consistent user interface for editing though left clicking, it does mean that you have to click on a property row before editing its value. One might at first expect a context menu to be available offering such editing functionality, with the added bonus that you could directly right click on a property to edit it rather than having to select it with a left click first.

For such a young application GTK+ Parasite is already very useful and a great tool for ironing out the kinks in an application's GTK+ interface. If you are a Python fan, the embedded Python interpreter lets you tinker with the GTK+ interface even if the program itself is written in C.

Parasite is developed by Christian Hammond and David Trowbridge. Activity on the mailing list is currently on the slow side, but it should pick up as developers discover this tool.

Comments (none posted)

System Applications

Database Software

buzhug 1.5 released

Version 1.5 of buzhug has been announced. "buzhug is the fastest pure-Python database engine, with a clear and intuitive syntax (no SQL) The new release 1.5 brings the following improvements : - introduce a thread-safe version - introduce a new syntax for record selection : record = db(key1=value2[,key2=value2...]) - allow an iterable of records for update db.update(list_of_records,key1=value1...)"

Full Story (comments: none)

Golconde 0.4 released

Version 0.4 of Golconde has been announced. "I am pleased to announce the first beta release of Golconde, 0.4. Golconde is a queue based replication solution for PostgreSQL written in Python 2.6. It is designed to be loosely coupled and rely upon existing enterprise messaging systems that have STOMP protocol support. Designed to scale easily and with multi-data center implementations in mind, the application and message queues for distribution live outside of the database."

Full Story (comments: none)

pgpool-II 2.2 and pgpoolAdmin 2.2 are released

Version 2.2 of pgpool-II and pgpoolAdmin have been announced. "pgpool-II is a synchronous replication middle ware for PostgreSQL 7.3 or later. Also pgpoolAdmin 2.2, a GUI tool for pgpool-II 2.2 is available now."

Full Story (comments: none)

phpMyAdmin: 3.1.3 is released (SourceForge)

Version 3.1.3 of phpMyAdmin has been announced. "phpMyAdmin is a tool written in PHP intended to handle the administration of MySQL over the Web. Currently it can create and drop databases, create/drop/alter tables, delete/edit/add fields, execute any SQL statement, manage keys on fields. Welcome to phpMyAdmin 3.1.3, a bugfix-only release with updates to 5 languages."

Comments (none posted)

PostgreSQL Weekly News

The March 1, 2009 edition of the PostgreSQL Weekly News is online with the latest PostgreSQL DBMS articles and resources.

Full Story (comments: none)

pysqlite 2.5.2 is out

Version 2.5.2 of pysqlite has been announced. "Release focus: minor bugfixes, minor new features. pysqlite is a DB-API 2.0-compliant database interface for SQLite. SQLite is a in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine."

Full Story (comments: none)

Device Drivers

Tour the Linux generic SCSI driver (IBM devloperWorks)

IBM developerWorks has an introduction to the Linux generic SCSI driver. "Linux provides a generic driver for SCSI devices and an application programming interface so users can build applications to send SCSI commands directly to SCSI devices. In this article, the author introduces some of the SCSI commands and methods of executing SCSI commands when using SCSI API in Linux. He also provides background on the SCSI client/server model and the storage SCSI command."

Comments (none posted)

Networking Tools

Zenoss: 2.3.3 is now available (SourceForge)

Version 2.3.3 of Zenoss Core has been announced. "Zenoss Core is an enterprise network and systems management application written in Python/Zope. Zenoss provides an integrated product for monitoring availability, performance, events and configuration across layers and across platforms. We are proud to announce the Zenoss 2.3.3 maintenance release which fixes over 80 defects."

Comments (none posted)

Security

announcing ClamAV 0.95rc1

Version 0.95rc1 of ClamAV, a virus scanner, has been announced. "ClamAV 0.95rc1 introduces many bugfixes, improvements and additions."

Full Story (comments: none)

Virtualization Software

Open Letter: Leaving TightVNC, Founding TigerVNC

Peter Åstrand has announced the launch of the TigerVNC project. "For the last six years, I have worked with the VNC community in general and the TightVNC project in particular, encouraging cooperation and unity. We have made great progress. When the TurboVNC developer and Fedora VNC maintainer joined forces almost a year ago, we believed we could take this technology to another level of success, and accelerate development. Recently, however, it has became clear that the TightVNC project cannot support this development. This is why we are now announcing the TigerVNC project."

Full Story (comments: none)

Web Site Development

spawn-fcgi 1.6.0 released

Version 1.6.0 of spawn-fcgi has been announced on the lighttpd web site. "As mentioned before, we planned to extract spawn-fcgi into its own project and remove it from lighttpd. Now the first standalone release has been published, starting at version 1.6.0."

Comments (none posted)

Miscellaneous

DeviceKit 003 released

Version 003 of DeviceKit has been announced. "DeviceKit is an abstraction for enumerating devices and listening to device events. Any application on the system can access the org.freedesktop.DeviceKit service via the system message bus. On GNU/Linux, DeviceKit can be considered a simple D-Bus frontend to udev." This is supposed to be the final release of the project: "The functionality of DeviceKit is going to be merged into the udev-extras with the only changes being the D-Bus name as well as the prefix for the GObject library and the command line tool."

Full Story (comments: none)

Microlog: V1.1.0 released (SourceForge)

Version 1.1.0 of Microlog has been announced. "Microlog is a small logging library for Java ME (J2ME) like Log4j. It has support for logging to console, file, RecordStore, Canvas, Form, Bluetooth, a serial port (Bluetooth, IR, USB), Socket(incl SSL), UDP, Syslog, MMS, SMS, e-mail or to Amazon S3. The long awaited Microlog V1.1.0 release is here. Please download and try it out."

Comments (none posted)

Desktop Applications

Audio Applications

Invada Studio Plugins 0.3.0 announced

Version 0.3.0 of Invada Studio Plugins has been announced. "I've released a new version of the Invada Studio plugins which are a bit cleaner and fix an issue with gains at maximum not working as expected. The source now includes the necessary files to allow for deb packages to be built."

Full Story (comments: none)

Business Applications

Gnumeric 1.9.4 announced

Version 1.9.4 of the Gnumeric spreadsheet has been announced. "This release is a development release with lots and lots of bug fixes. Also, this version is considerably faster than previous versions in three ways: (1) when dealing with spreadsheets containing large farms of VLOOKUP, HLOOKUP, or MATCH calls over the same database, we now pre-process the database range once and the actual lookups are very fast; (2) we now only calculate the relevant branch of IF calls, unless implicit iteration is in effect; (3) large spreadsheets containing many similar ranges like, for example, A$10:A10, A$10:A11, ..., A$10:A9999 used to hit a degenerate case in our dependency tracking."

Full Story (comments: none)

Collaboration Software

Agilefant: 1.5.4 released (SourceForge)

Version 1.4 of Agilefant has been announced. "Agilefant is a tool for managing agile software development activities, such as: projects, products, releases, iterations and backlogs. It brings together the perspectives of long-term product and release planning and project portfolio management. Usability and user interface improvements were done to this release. Agilefant's performance is also greatly improved! Also a handful of minor improvements and bug fixes are included."

Comments (none posted)

gumnut: 0.2.7 released (SourceForge)

Version 0.2.7 of gumnut has been announced. "Gumnut is a moderated, distributed, discussion forum that may be used by groups of people to find an agreed positive direction for any decisions that affect that group. Each group may be of any size and associated by geography, common interest, or both."

Comments (none posted)

Desktop Environments

GNOME Software Announcements

The following new GNOME software has been announced this week: You can find more new GNOME software releases at gnomefiles.org.

Comments (none posted)

KDE Software Announcements

The following new KDE software has been announced this week: You can find more new KDE software releases at kde-apps.org.

Comments (none posted)

Xfce 4.6 released

The announcement has gone out for the Xfce 4.6 release. "Xfce 4.6 features a new configuration backend, a new settings manager, a brand new session manager and sound mixer as well as several huge improvements of its core components." An extensive list of changes can be found in the changelog.

Comments (5 posted)

Xorg Software Announcements

The following new Xorg software has been announced this week: More information can be found on the X.Org Foundation wiki.

Comments (none posted)

Electronics

zParts: 0.93 Released (SourceForge)

Version 0.93 of zParts has been announced. "zParts is an electronic parts inventory system. It is an alternative to using spreadsheet software and has a very high degree of customization. It was created with the electronic hobbyist in mind and even has support for part datasheets and images! Version 0.93 comes with some big bug fixes that should help things run smoother for all. I'm working towards a system to help first time users get acquainted with zParts and use it well."

Comments (none posted)

Encryption Software

GnuPG 2.0.11 released

Version 2.0.11 of GnuPG, a GNU tool for secure communication and data storage, has been announced. Changes include: "* Fixed a problem in SCDAEMON which caused unexpected card resets. * SCDAEMON is now aware of the Geldkarte. * The SCDAEMON option --allow-admin is now used by default. * GPGCONF now restarts SCdaemon if necessary. * The default cipher algorithm in GPGSM is now again 3DES. This is due to interoperability problems with Outlook 2003 which still can't cope with AES."

Full Story (comments: none)

Games

Doomsday Engine: 1.9.0-beta6 released (SourceForge)

Version 1.9.0-beta6 of Doomsday Engine has been announced. "A Windows/Unix/Mac OS X game engine for 2.5d first person shooters such as DOOM, Heretic and Hexen. Lets you enjoy the original games using modern technology e.g. OpenGL, 3D models, unlimited framerate, high-resolution graphics, simulated radiosity."

Comments (none posted)

ScummVM: 0.13.0 'More Guests' enter(s) the house (SourceForge)

Version 0.13.0 of ScummVM has been announced. "ScummVM is a cross-platform interpreter for several point-and-click adventure engines. This includes all SCUMM-based adventures by LucasArts, Simon the Sorcerer 1&2 by AdventureSoft, Beneath a Steel Sky and Broken Sword 1&2 by Revolution, and many more. As we turned to a 6 months release cycle, our newest and best ScummVM version is ready for you! A couple of new engines were added, and besides 2 Humongous Entertainment titles, we now support The 7th Guest and Bud Tucker in Double Trouble."

Comments (none posted)

GUI Packages

Qt 4.5 released

Version 4.5 of the Qt toolkit has been announced. "Qt 4.5 includes several new features, but sees the greatest improvement via a concerted effort to increase performance across the entire framework. Significant performance enhancements were made to the graphics system, data handling, and the web engine. These improvements result in an appreciable performance increase in Qt-based applications." The Qt Creator 1.0 release is also available.

Comments (3 posted)

Interoperability

Wine 1.1.16 announced

Version 1.1.16 of Wine has been announced. Changes include: "Improved SANE scanner support. Support for digital CD audio playback. Improved cookies management in Wininet. Support for building stand-alone 16-bit modules. Many fixes to the regression tests on Windows. Various bug fixes."

Comments (none posted)

Medical Applications

GNUmed 0.4.0 released (LinuxMedNews)

Version 0.4.0 of the GNUmed medical record system has been announced. "This release provides nice and stable new features: * can show log file from client on demand * can merge two patients into one * can edit existing progress note on any encounter * can access text expansion macros by startof-keyword (will show a list for selection) * has new hook "after_new_doc_created" * has minimum HIPAA compliance * has waiting list * has random access to plugins * has screenshots on Linux include window decoration * has local "installer" for tarball * has a large part of the user interface translated to Brazilian Portuguese".

Comments (none posted)

Multimedia

Elisa Media Center 0.5.30 Release

Version 0.5.30 of Elisa Media Center has been announced. "This release is a "light weight" release, meaning it is pushed through our automatic plugin update system. That is why there is no new Elisa windows installer nor any new packages: use the existing ones for 0.5.27; with the default configuration, they should upgrade automatically to 0.5.30."

Full Story (comments: none)

Music Applications

mingus 0.4 released

Version 0.4 of mingus has been announced. "Mingus is an advanced, cross-platform music theory and notation package for Python with MIDI file and playback support. It can be used to play around with music theory, to build editors, educational tools and other applications that need to process and/or play music. It can also be used to create sheet music with LilyPond."

Full Story (comments: none)

Digital Photography

hugin: 0.8.0 beta1 testers release (SourceForge)

Version 0.8.0 beta1 of hugin has been announced. The project description states: "Panorama stitching and more. A powerful software package for creation and processing of panoramic images. Similar to the windows programs PTGui and PTAssembler."

Comments (none posted)

Video Applications

Gnash 0.8.5 released

Version 0.8.5 (also know as "the fourth beta release") of the Gnash flash player has been released. There's lots of new features, including improved performance, support for saving media files to disk, new codecs, and more; see the announcement for details.

Comments (12 posted)

Web Browsers

Browsing in GNOME

Should GNOME adopt a web browser component? If so, which one? Benjamin Otte takes on this question with a detailed look at Webkit and Mozilla but comes to no clear conclusion. "Regardless of which project were to be chosen, my expectation would be that if we were to start now, it would take 5 experienced GNOME developers roughly a year to get this work to a point were it would hold up against today's requirements of the web. For Webkit, this would mostly require writing source code. For Mozilla, both writing code and evangelizing inside their community would be necessary." (Thanks to Paul Wise).

Comments (23 posted)

Languages and Tools

C

LLVM 2.5 released

Version 2.5 of the LLVM compiler is out. "LLVM 2.5 includes an amazing collection of bug fixes, performance improvements (both in the compiler itself and in the generated code) and new features. Some highlights include a new XCore backend, significantly improved llvm-gcc GFortran support, code generator support for arbitrary sized integers (e.g. i71), support for acting on overflow of integer operations, an amazing new 'Writing an LLVM Compiler Backend' document, and many many other things." See the release notes for details.

Full Story (comments: 5)

Caml

Caml Weekly News

The March 3, 2009 edition of the Caml Weekly News is out with new articles about the Caml language.

Full Story (comments: none)

Java

IcedTea6 1.4.1 released

Version 1.4.1 of IcedTea6 has been announced, it includes bug fixes and some rewritten code. "The IcedTea6 project provides a harness to build the source code from OpenJDK6 (http://openjdk.java.net) using Free Software build tools."

Full Story (comments: none)

Perl

Rakudo Perl development release #14 (use Perl)

Development release #14 of Rakudo Perl, an implementation of Perl 6 on the Parrot Virtual Machine, has been announced. "This is the fourteenth development release of Rakudo Perl, but it's the first release independent from Parrot releases. We will continue to follow a monthly release cycle, with each release to be code named after a Perl Mongers group."

Comments (none posted)

PHP

PHP 5.2.9 released

Version 5.2.9 of PHP has been announced. "This release focuses on improving the stability of the PHP 5.2.x branch with over 50 bug fixes, several of which are security related. All users of PHP are encouraged to upgrade to this release."

Comments (none posted)

Python

Python-URL! - weekly Python news and links

The February 26, 2009 edition of the Python-URL! is online with a new collection of Python article links.

Full Story (comments: none)

Python-URL! - weekly Python news and links

The March 3, 2009 edition of the Python-URL! is online with a new collection of Python article links.

Full Story (comments: none)

Tcl/Tk

Tcl-URL! - weekly Tcl news and links

The February 25, 2009 edition of the Tcl-URL! is online with new Tcl/Tk articles and resources.

Full Story (comments: none)

Cross Compilers

SDCC 2.9.0 RC1 released

Version 2.9.0 RC1 of SDCC has been announced. "SDCC is a retargettable, optimizing ANSI - C compiler that targets the Intel 8051, Maxim 80DS390, Zilog Z80 and the Motorola 68HC08 based MCUs. Work is in progress on supporting the Microchip PIC16 and PIC18 series."

Comments (none posted)

Editors

Emacs 23.0.91 pretest

A pretest release of Emacs 23.0.91 has been announced "This is the second pretest for what will be the Emacs 23.1 release. Pretesters: please send an email to me reporting success or failure on your build platform."

Comments (none posted)

Profilers

Valgrind 3.4.1 is available

Version 3.4.1 of Valgrind has been announced. "Valgrind is an open-source suite of simulation based debugging and profiling tools. 3.4.1 fixes some regressions and assertion failures in debug info reading in 3.4.0, most notably incorrect stack traces on amd64-linux on older (glibc-2.3 based) systems. A number of other bugs, including some in the new exp-ptrcheck tool, have also been fixed."

Full Story (comments: none)

Test Suites

The Linux Test Project: February 2009 release (SourceForge)

The February, 2009 release of the The Linux Test Project has been announced. "The Linux Test Project is a group aimed at testing and improving Linux. The goal of the LTP is to deliver a suite of automated testing tools for Linux as well as publishing the results of tests we run. LTP invites community to contribute in new horizons. The Linux Test Project test suite has been released for the month of FEBRUARY 2009. Please see ltp/INSTALL file carefully, as, there has been multiple changes for building/installing the test suite."

Comments (none posted)

Version Control

GIT 1.6.2 released

Version 1.6.2 of the GIT distributed version control system has been announced. "With the next major release, "git push" into a branch that is currently checked out will be refused by default. You can choose what should happen upon such a push by setting the configuration variable receive.denyCurrentBranch in the receiving repository. To ease the transition plan, the receiving repository of such a push running this release will issue a big warning when the configuration variable is missing."

Full Story (comments: none)

Page editor: Forrest Cook
Next page: Linux in the news>>


Copyright © 2009, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds