hi I was involved in email discussions at the end of last year on this subject with Peter Astrand (author of Xalf), Owen, Havoc and others on some gnome-aliases. Some issues that arose in providing a solution for visual feedback for application launching were: - problems of using a solution involving LD_PRELOAD - problems of a solution involving the patching of Xlib mapping functions - desirability of establishing a common protocol that will work for both gnome and non gnome apps Ideas put forward included: - setting a new property on top level window of gnome applications. _NET_WM_PID was discussed but this leads to problems when starting apps via a script. - using the root window's _WIN_CLIENT_LIST property to monitor for new windows, and then checking if this new property has been set on the app. With these issues/suggestions in mind I did some experimenting and came up with the attached 'prototype'. 1. Visual feedback is controlled by an ORBit server (called feedback-server), and client (feedback-client). 2. feedback-client acts as a binary wrapper around the app to be launched. - It sets an environmental variable (DESKTOP_LAUNCH_ID) with a unique value. - It then invokes a remote method to start the visual feedback for this app. (At the moment this is the tasklist window hacked from the Xalf code, but by implementing a pluggable interface here could have customised visual feedback). A compliance flag indicates whether this is a gnome application or not. - feedback-client then invokes a remote oneway method (monitorWindows()) to monitor the root window for any changes in the _WIN_CLIENT_LIST property (ie addition of new window). - feedback-client then forks and execs the app to be launched. 3. The gdk library has been edited so that if the DESKTOP_LAUNCH_ID has been set then the property _NET_WM_LAUNCH_ID is set on the toplevel window of the gtk app. 4. Once the remote method monitorWindows() detects the new window, it checks for the _NET_WM_LAUNCH_ID property and stops the appropriate feedback. If the new window does not have the _NET_WM_LAUNCH_ID set, and if the feedback was started for a non-gnome app (ie compliance flag not set), then the feedback is stopped (similar to Xalf's mappingmode). In this way the framework supports applications using a toolkit that supports the DESKTOP_LAUNCH_ID property and the _NET_WM_LAUNCH_ID property. It also has a default solution for other apps. The attached code is a basic prototype designed as a proof of concept of the framework. Some of the technology is new to me so the prototype is far from perfect. In particular, I had some problems integrating it with OAF, so I resorted to writing an ior to a file :-(. This means you have to manually start the feedback-server each time. But as I said, I was just concentrating on investigating the framework. I would very much appreciate some feedback/discussion on this. To set up prototype: - unzip and untar tarball as usual - run configure and make as usual - locate attached library in a directory and create a link as follows: $mv libgdk-1.2.so.0.5.3 /mydir #chmod 755 /mydir/libgdk-1.2.so.0.5.3 #ln -s /mydir/libgdk-1.2.so.0.5.3 /mydir/libgdk-1.2.so.0 (NOTE: is the gtk+-1.2.8 linux library libgdk-1.2.so.0.5.4 is the solaris library) To run: 1. Have the tasklist applet running on your front panel 2. server OAF code is not working, so need to manually start feedback-server $cd visual-feedback/src $./feedback-server 3. start app $export LD_LIBRARY_PATH=/mydir:$LD_LIBRARY_PATH $export INSTALL_DIR=/opt/GNOME-debug (or whatever non-default location you use) $cd visual-feedback/src $./feedback-client gcalc (or any gnome app) Repeat using netscape (ie non-gnome) (NOTE: feedback-server will need to be restarted each time) many thanks Mary ~ I speak for myself, not for my employer ~ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Mary Dwyer Desktop Applications & Middleware Grp Sun Microsystems Ireland Tel: +353-1-8199222 (xt 19222) Fax: +353-1-8199078 email: mary dwyer ireland sun com =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Attachment:
Feedback-0.1.tar.gz
Description: Feedback-0.1.tar.gz
Attachment:
libgdk-1.2.so.0.5.3.gz
Description: libgdk-1.2.so.0.5.3.gz
Attachment:
libgdk-1.2.so.0.5.4.gz
Description: libgdk-1.2.so.0.5.4.gz