GMagic/GTK+ Magic
current version 0.14.1

screenshots | download | documentation | faq | contact

What is Gtk+ Magic ?

Gtk+ Magic is an attempt to enhance gtk+ (The Gimp Toolkit) with additional features and a user-friendly, customizable toolkit. I was inspired by the famous Amiga toolkit MUI (Magic User Interface) written by Stefan Stuntz (great work!).


Customizable Toolkits?
Because real users have a different taste for look and feel.
Easy-To-Use and Realtime?
Because creativity is a mood.
Evolutionary design process?
Question: "do embryos code in machine-language?!"
Gtk+ Magic?
Because it's an attempt.

A good user-interface should be customizable, because users have an individual taste and varying demands for what is vaguely called 'look and feel'. If you give people the right tools to make their desktops comfortable, then they will use them. The customization-process should not end up in one-ways. The demand for configuration should not be satisfied with a huge set of properties in first place, because it's much more like a demand for precision in detail. Users should be allowed to comfortably adapt their desktop environment to their needs, step-by-step, in an evolutionary process.

If you ever wanted to design gtk+'s look and feel with a graphical user-interface where applications reflect your settings in the very same moment as you trigger a button, then this software might be interesting for you. You can set system-wide, group-wide or user-specific as well as the toolkit's or application's specific properties in a combined context.

Gtk+ Magic uses a client/server network distributed database architecture for its property-management. Running applications are seen as clients that request toolkit properties. This mechanism is implemented in the gtk+ patch, so that any recompiled gtk+ application will establish such a property-management for its GUI on startup.


GMagic server with gui monitor...

monitoring factory preset
(703x374 - 64 kb)

monitoring gimp
(661x374 - 32 kb)

... GTK+ Magic Config...

style panel
(552x362 - 35 kb)

border panel
(552x362 - 35 kb)

... at work.

config gimp
(1024x768 - 150 kb)

config xchat
(1024x768 - 127 kb)

config gqmpeg
(1024x768 - 127 kb)


Status: unstable, maybe crash, read the installation and usage notes.

To enable magic in your gtk+ applications, you have to recompile them with the patched version of gtk+. Any existing application linked with the original gtk+ shared library, will not run with the modified one without recompilation.


current Release (unstable):

Installation steps:

  1. install gmagic

    1. unpack gmagic
    2. build


    3. install (as root)

      make install

  2. install gtk+ magic

    1. choose variante

      • patch gtk+ 1.2.3 source-tree

        1. unpack original source-tree
        2. patch source-tree

          gunzip -c gtk+-1.2.3-magic-0.14.1-patch.gz | patch -p0

          - or (if patch-file is unzipped) -

          cat -c gtk+-1.2.3-magic-0.14.1-patch | patch -p0

      • unpack gtk+ 1.2.3 magic source-tree

    2. build


    3. install (as root)

      make install

  3. install gtk+ magic config

    1. unpack gmagic
    2. build


    3. install (as root)

      make install

  4. (optional) install the gmagic server gui-version

    1. cd unpacked gmagic sourcetree
    2. build

      ./configure --with-server-gui

    3. install (as root)

      make install


After recompilating your gtk+ applications and linkage against the gtk+ magic-patched library, you may try it out in conjunction with the gmagicd.

NOTE: Applications that use gtkrc resource files, can't be configured with gtkmagic-config in a proper way, because the gtkrc-mechanism has a higher priority towards gtkmagic. Remove the "gtkrc"-Files if you like to control the gui through gtkmagic-config. Several tools (like Grip) set their style internally, this has the highest priority, so there's currently no way of enable gtk-magic for these widgets in such an application.

  1. Run the gmagic daemon "gmagicd" or "gmagicd_gtk" before any application, else the gtk+ applications will not get connected to the server and the property behaviour is as usual.

  2. Run applications

  3. Call "gtkmagic-config" at anytime if you wish to customize the gui.

NOTE: The GUI of gtkmagic-config and gmagicd_gtk is not controlled through gmagic, because of a bug. They are auto-disabled for gtkmagic. Will be fixed in the future.


The database

The database holds clients, presets, properties and observer-agents for clients. Presets are identified by a specific user- and application-context and hold properties for this context. Properties currently contain any flat datatype and list, which helps mapping structures in a property. Observers are used, when a client is interessted in changes to the property. You have to seperate the property which is seen by the client. The client is interessted in an aspect which is named, but there may be several properties with A client implements an access-model. Currently there is only a gui access-model implemented which targets the management of properties for user-interfaces in a multi-user environment with group- and system-administrators, which can influence the look'n feel of their users if they didn't

The Gtk+ application

Each application started will try to connect the gmagic da

GtkMagic class

This class represents a gmagic database client. It is created with informations about its user- and application-context and connects the database. It especially works as a GtkProp object factory.

GtkProp class

This class holds a property-value. Several callbacks are implemented that will be called, when the property changed for some reason.

gtk+ startup arguments

Two new options are available for all gtk+ applications.

--gtk-magic-disable This will disable the magic feature. The default class properties will be taken from internal or gtk-rc files (in case of GtkStyle).
--gmagic-addr=server-address This will set the gmagic server address (default ="unix:/tmp/.gmagic").
The format is:

Licence and Copyright

This Software is released under the GNU Public Licence.
GMagic, Gtk+ Magic, Gtk+ Magic Config and this Web-Content is copyright 1999 by Daniel 'plex/TEK' Adler - neoscientists.
There is no warranty that this software will work proper.
Use it on your own risk.


Is gnome supported ?


Gtk+ magic is an enhancement for gtk+. Therefore the real-time property management is also targeted for the gnome desktop-environment, so it should definetly work in a stable version 8).

Are there any plans for integrating it in gnome ?


Not really, if developers like to have the mechanism for properties, they can take the GtkProp class which is implemented in gtk+ magic. This will give them the groundbase for using it the way it works in gtk+.


Please send bug-reports and suggestions to

You can meet me on IRC #neoscientists (IRCNet) and on several parties in europe.

Last words


so long,