New function to debugging output that might be a bit
too much for normal debugging, so it is only shown
along with the other debuggin output if PANEL_DEBUG
contains the name of the key.
Watch menu changes. We always reload the menu, also
if an item is changed, because we don't know the new
sort order of the menu item in case the name changed.
With PANEL_DEBUG=gdb plugin will be started in gdb
and log files (with backtrace and register dump) are
automatically stored in /tmp.
Some functionality will not be available, like
automatically restart the plugins.
Also cleanup the debug level handling a bit, so it is
easier to extend and make struts debugging work again.
Split the base of the external plugin code in three pieces:
PanelPluginExternal as abstract object to handle the child
monitoring and access-point for the panel and
PanelPluginExternal{46,Wrapper} to handle the dbus or socket
communication. This drop a lot of duplicated code.
Also improve handling of external plugins during a child
crash; we now wait until the child is terminated before
we launch the new proccess and also handle restarts of a
child (requested by the panel) without bothering the
user.
Add support for colored and image backgrounds. This makes theming the
panel a lot easier and allows us to handle the colors and image
positioning in the external plugins.
The background image does not apply to the autohide window.
Because of the dbus signal we cannot return the reply
of the remote event, so add a method and handle ids to
reply to the panel.
When an implementation of the panel plugin provider returns
a handle, the dbus service waits for the reply before it
continues.
Adds internal support for group buttons. Working support
for the overflow menu when the buttons don't fit. Ctrl
click to access the panel menu on tasklist buttons. And
a lot of other stuff I can't remember.
Internal function for debugging support. It supports debug
domain filtering through the PANEL_DEBUG environment variable
(PANEL_DEBUG=1 for all debug output and for example
PANEL_DEBUG=positining:struts for only the positioning and struts
debug messages.
For now this is always enabled (ie. compiled) so everyone can easily
give me debug output without recompiling.
Each panel can be locked individually though Xfconf and
new API function xfce_panel_plugin_get_locked() for plugins;
although it might be safer for plugins to directly check the
Xfconf channel.
The restart counter was a bit flawed, because if the panel would
run for weeks and 3 restarts occured, it's not a big deal, still
the panel would've bothered the user what to do.
We now use a minimum time between restarts, if there was another
restart in the last 60 seconds, ask the user what to do.