hal-sharp foo

Working on more Sonance stuff, I thought it’d be cool to have easy HAL access in Mono. With about 10 hours of work, I bring all-who-care hal-sharp, complete with HAL callback support, wrapped up in all the glory that is C#. It’s not finished, but it is functional, and it does rock.

hal-sharp is available from Mono SVN.

iPods, Networks, Trains, Planes, and Flying Saucers

Today started out with fixing lots of little Sonance bugs that were reported in GNOME Bugzilla, and updating CVS. It just keeps getting closer. I’m also very happy with the work that fejj has done on gnome-volume-manager. I’ve replaced submount with hal/g-v-m/pmount, and the mounting of my iPods works beautifully under SuSE, just like it does under Ubuntu. I also ported libipoddevice to use the new HAL (0.5.2 or better) API, and added better iPod ejection by calling an unmount program before eject (which eject should take care of but may not, when a device may be mounted with pmount).

I took some configuration options from gnome-volume-manager, and a snippet of code or two, to allow unmount and eject program commands to be passed to libipoddevice at configure time. Passing --with-unmount-command="/usr/bin/pumount %m" and --with-eject-command="/bin/eject %d" makes libipoddevice unmount the iPod with pumount, and then eject it. Also, submount-specific code can be enabled by passing --enable-submount. This will allow libipoddevice to manually sync() before eject, and enables some other safety checks when using submount. The best solution is to just not use submount!

Finally for libipoddevice is a new GObject class, IpodDeviceEventListener, to which an application can subscribe to iPod-specific HAL (add/remove) events. Connecting to the “device-added” or the “device-removed” events allows an application to receive a HAL UDI which can be passed to the constructor of the IpodDevice class, for magic iPod stuff to start working.

Now everyone needs to bug snorp about finding a distribution that ships proper D-Bus and HAL to be able to get the nice HAL/g-v-m/pmount setup, so he can mount his iPod, build libipoddevice, and update the ipod-sharp bindings. :-D

Towards the end of today, I really started getting frustrated with the wonderful NetworkManager’s applet/tray icon. Originally an entire top-level GTK menu bar was placed into the tray icon area. This allowed the main connections drop-down menu to be handled without any extra popup/geometry code, but was just plain weird. I’m going to guess that I was the first to notice the problem, because the menu bar in Clearlooks is drawn as a gradient with a 1px line at the bottom — this looked very odd in my panel!

Fixed NetworkManager Tray

I replaced the menu bar with an event box, updated the button-press-event handler to drop the connections menu on left click, and adapted Joe’s menu positioning/geometry code from netapplet. I submitted the patch to Robert, since his involvement with some other UI hacking in NetworkManager, and how well it was working under SuSE, got me interested in it. Hopefully it will actually make it into NetworkManager.