← Back to team overview

lubuntu-desktop team mailing list archive

About lxpanel2


Recently there are some discussions about lxpanel on the mailing list,
which is really great.
Hope that we can have a new maintainer for it.

The original lxpanel, however, is bound to gtk2, xlib, and some
linux-specific stuff.
This makes migration to new technology very difficult.
Much has happened in recent years.
1. gtk3 replaces gtk2.
  The management of window geometry and underlying drawing parts have
radical and backward incompatible changes.
  Background image support will be completely broken in gtk3 as many
deprecated APIs are removed from gtk3, especially the pixmap-related ones.
2. HAL is deprecated and now we have udisks/upower (linux-only), and things
never work for other unix variants.
3. logout/shutdown should be done with ConsoleKit now.
4. Xlib is going to be replaced by xcb.
5. Xorg will sooner or later be replaced by Wayland in some distros
6. gio and dbus became widely used nowadays.
7. pulse audio is widely used, and direct ALSA access sometimes causes

Hence, making old code work with new tech might even be more difficult then
a rewrite.
That's why a rewrite/redesign is planned.
A project without many maintainers should not be trapped in the vicious
cycle of fixing the broken compatibilities again and again.
We have only one way out, reusing existing libraries whenever possible and
trying not to touch too low level stuff.

Now I mainly focus on finishing pcmanfm 1.0, but previously I already have
a proof-of-concept prototype for lxpanel2. It's now 40% finished.
Here is the spec of the new lxpanel2.

1. Mainly written in Vala, and use C when absolutely needed to speed up
2. Directly based on gtk3 and does not mess with gtk2. Drawing stuff will
be done completely with cairo.
3. Built with CMake instead of automake (already done)
4. Use standard widgets whenever possible to get proper accessibility
support (important!!)
5. Network monitor part is based on libgtop (90% finished)
    Libgtop is a nice lightweight library designed for system monitoring.
It works for major systems, not Linux-only.
    Even better, it has no gnome dependency.
6. Pager and task manager part will use libwnck. (80% finished)
    With libwnck, we do not touch underlying X11 stuff and can be much more
portable and resistant to future changes of X.
    Though it's a gnome lib, it only depends on gtk and has no other gnome
    The implementation is quite clean and complete and the APIs are well
documented, making it nice to work with.
7. Battery monitor will use dbus + UPower. (70% finished)
    Glib/gio has built-in dbus support now so no additional deps are
needed. Vala even has dbus integration at the language level. Great!
    This may be much better than read from /sys as upower devs will handle
future incompatible changes and provide a constant dbus interface.
8. IPC stuff will use dbus instead of XSelection hacks. (dbus is quite
common now and glib has built-in support)
9. The config file might become a single xml file (not sure, still under
evaluation. Ini file based solution is not very handy for tree like data
10.The UI might be similar than that of the old lxpanel initially, but in
the future we need to be more unique and won't be Windows-like.
11.Volume control should be an additional plugin or systray applet instead
of built into the panel. So we won't depend on ALSA by default.

Instead of reinventing everything in a poor manner, this time I will reuse
existing implementations whenever possible
if they are lightweight enough. This should decrease maintenance load to a
minimum and guarantee tolerance to future changes.
With Vala, coding became much faster than before. To achieve the same
functionality as in C, I felt that only 1/3 of code is needed.
Though the new lxpanel2 will not be available soon, it will be pushed into
repo once I got a first working version.
Of course, this should happen after the file manager 1.0 is done.

Thanks for your patience.

Follow ups