Fix errors in configure.ac and src/plugins/Makefile.am of lxpanel.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 24 Feb 2008 19:58:42 +0000 (19:58 +0000)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 24 Feb 2008 19:58:42 +0000 (19:58 +0000)
DIST_SUBDIR should be used since PLUGIN_LIST will not contain all
plugins, if some of them are turned off with configure options.

12 files changed:
configure.ac
data/Makefile.am
data/default.in [deleted file]
data/default/config.in [new file with mode: 0644]
data/pager [deleted file]
src/configurator.c
src/misc.c
src/misc.h
src/panel.c
src/plugin.c
src/plugins/Makefile.am
src/plugins/launchbar.c

index ae6fc98..56f665f 100644 (file)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.53)
-AC_INIT(lxpanel, 0.2.5, http://lxde.sourceforge.net/)
+AC_INIT(lxpanel, 0.2.6, http://lxde.sourceforge.net/)
 AM_INIT_AUTOMAKE
 AC_CONFIG_SRCDIR([src/bg.c])
 AC_CONFIG_HEADER([config.h])
@@ -23,24 +23,24 @@ AC_SUBST(PACKAGE_CFLAGS)
 AC_SUBST(PACKAGE_LIBS)
 
 AC_ARG_ENABLE([cast-checks],
-       AS_HELP_STRING([--enable-cast-checks],
-                      [enable Glib casting checks (default: disable)]),
-                      cast_checks=$enableval, cast_checks="no")
+    AS_HELP_STRING([--enable-cast-checks],
+               [enable Glib casting checks (default: disable)]),
+               cast_checks=$enableval, cast_checks="no")
 G_CAST_CHECKS=""
 if test x"$cast_checks" = "xno"; then
-       G_CAST_CHECKS="-DG_DISABLE_CAST_CHECKS"
+    G_CAST_CHECKS="-DG_DISABLE_CAST_CHECKS"
 fi
 AC_SUBST(G_CAST_CHECKS)
 
 AC_ARG_ENABLE([alsa],
-       AS_HELP_STRING([--disable-alsa],
-                       [compile ALSA providers (default: enable)]),
-                       compile_alsa=$enableval, compile_alsa="yes")
+    AS_HELP_STRING([--disable-alsa],
+                    [compile ALSA providers (default: enable)]),
+            compile_alsa=$enableval, compile_alsa="yes")
 if test x"$compile_alsa" = "xyes"; then
-       AC_CHECK_HEADERS([alsa/asoundlib.h],
-                        [AC_CHECK_LIB([asound],
-                                      [snd_seq_open],
-                                      compile_alsa=yes,compile_alsa=no)],
+    AC_CHECK_HEADERS([alsa/asoundlib.h],
+                     [AC_CHECK_LIB([asound],
+                                   [snd_seq_open],
+                                   compile_alsa=yes,compile_alsa=no)],
                           compile_alsa=no)
 fi
 AM_CONDITIONAL(BUILD_ALSA_PLUGINS, test x$compile_alsa = xyes)
@@ -48,14 +48,14 @@ dnl FIXME: check OSS existence
 AM_CONDITIONAL(BUILD_OSS_PLUGINS, test x$compile_alsa = xno)
 
 AC_ARG_ENABLE([plugins-loading],
-       AS_HELP_STRING([--disable-plugins-loading],
-                      [disable plugin loading (default: enable)]),
-                      plugins_loading=$enableval, plugins_loading="yes")
+    AS_HELP_STRING([--disable-plugins-loading],
+               [disable plugin loading (default: enable)]),
+               plugins_loading=$enableval, plugins_loading="yes")
 
 AM_CONDITIONAL(BUILD_PLUGIN_LOADER, test x$plugins_loading = xyes)
 
 if test x"$plugins_loading" = "xno"; then
-       AC_DEFINE(DISABLE_PLUGINS_LOADING, [1], [Disable plugin loading])
+    AC_DEFINE(DISABLE_PLUGINS_LOADING, [1], [Disable plugin loading])
 fi
 
 dnl Here are plugin listing.
@@ -76,67 +76,76 @@ AC_ARG_WITH(plugins,
 [                         netstatus, netstat, volume, volumealsa, cpu, deskno, batt], plugins="$withval",[plugins="all"])
 
 if test x"$plugins" != xall -a x"$plugins" != xnone; then
-       if test x"$plugins_loading" = xno; then
-               AC_MSG_ERROR(
-               [--disable-plugins-loading and --with-plugins conflict each other.])
-       fi
+    if test x"$plugins_loading" = xno; then
+        AC_MSG_ERROR(
+        [--disable-plugins-loading and --with-plugins conflict each other.])
+    fi
 fi
 
+ALL_PLUGINS_LIST="netstatus netstat volume volumealsa cpu deskno batt"
+AC_SUBST(ALL_PLUGINS_LIST)
+
 if test x"$plugins" = xall; then
-       plugin_netstatus=netstatus
-       plugin_netstat=netstat
-       plugin_volume=volume
-       plugin_volumealsa=volumealsa
-       plugin_cpu=cpu
-       plugin_deskno=deskno
-       plugin_batt=batt
-       AC_MSG_RESULT(all)
+dnl    for name in $ALL_PLUGINS
+dnl    do
+dnl        export plugin_$name="$name"
+dnl    done
+
+    plugin_netstatus=netstatus
+    plugin_netstat=netstat
+    plugin_volume=volume
+    plugin_volumealsa=volumealsa
+    plugin_cpu=cpu
+    plugin_deskno=deskno
+    plugin_batt=batt
+
+    AC_MSG_RESULT(all)
 else
-       if test "$plugins" != "none"; then
-               plugins=`echo $plugins | sed 's/,/ /g'`
-               for plugin in $plugins
-               do
-               case "$plugin" in
-                       netstatus)
-                               plugin_netstatus=netstatus
-                               ;;
-                       netstat)
-                               plugin_netstat=netstat
-                               ;;
-                       volume)
-                               plugin_volume=volume
-                               ;;
-                       volumealsa)
-                               plugin_volumealsa=volumealsa
-                               ;;
-                       cpu)
-                               plugin_cpu=cpu
-                               ;;
-                       deskno)
-                               plugin_deskno=deskno
-                               ;;
-                       batt)
-                               plugin_deskno=batt
-                               ;;
-                       *)
-                               echo "Unknown plugin $plugin."
-                               exit 1
-                               ;;
-               esac
-               done
-               AC_MSG_RESULT($plugins)
-       fi
+    if test "$plugins" != "none"; then
+        plugins=`echo $plugins | sed 's/,/ /g'`
+        for plugin in $plugins
+        do
+        case "$plugin" in
+            netstatus)
+                plugin_netstatus=netstatus
+                ;;
+            netstat)
+                plugin_netstat=netstat
+                ;;
+            volume)
+                plugin_volume=volume
+                ;;
+            volumealsa)
+                plugin_volumealsa=volumealsa
+                ;;
+            cpu)
+                plugin_cpu=cpu
+                ;;
+            deskno)
+                plugin_deskno=deskno
+                ;;
+            batt)
+                plugin_deskno=batt
+                ;;
+            *)
+                echo "Unknown plugin $plugin."
+                exit 1
+                ;;
+        esac
+        done
+        AC_MSG_RESULT($plugins)
+    fi
 fi
 
 dnl FIXME: OSS/ALSA checking
 if test x"$compile_alsa" = "xno"; then
-       if test ! -z $plugin_volumealsa; then
-               AC_MSG_RESULT([no ALSA headers/libraries found!])
-               plugin_volumealsa=
-       fi
+    if test ! -z $plugin_volumealsa; then
+        AC_MSG_RESULT([no ALSA headers/libraries found!])
+        plugin_volumealsa=
+    fi
 else
-       dnl force OSS plugin to <null>
-       plugin_volume=
+    dnl force OSS plugin to <null>
+    plugin_volume=
 fi
 PLUGINS_LIST="$plugin_netstatus $plugin_netstat $plugin_volume $plugin_volumealsa $plugin_cpu $plugin_deskno $plugin_batt"
 AC_SUBST(PLUGINS_LIST)
@@ -172,49 +181,49 @@ ALL_LINGUAS="zh_TW ko hu sk pl"
 AM_GLIB_GNU_GETTEXT
 
 AC_CONFIG_FILES([
-       Makefile
-       src/Makefile
-       src/plugins/Makefile
-       src/plugins/netstatus/Makefile
-       src/plugins/netstat/Makefile
-       src/plugins/volume/Makefile
-       src/plugins/volumealsa/Makefile
-       src/plugins/cpu/Makefile
-       src/plugins/deskno/Makefile
-       src/plugins/batt/Makefile
-       po/Makefile.in
-       data/Makefile
-       data/default
+    Makefile
+    src/Makefile
+    src/plugins/Makefile
+    src/plugins/netstatus/Makefile
+    src/plugins/netstat/Makefile
+    src/plugins/volume/Makefile
+    src/plugins/volumealsa/Makefile
+    src/plugins/cpu/Makefile
+    src/plugins/deskno/Makefile
+    src/plugins/batt/Makefile
+    po/Makefile.in
+    data/Makefile
+    data/default/config
 ])
 AC_OUTPUT
 
-echo                                                                                                
+echo
 echo lxpanel ......................... : Version $VERSION
 echo
 echo Prefix........................... : $prefix
 if test x$plugins_loading = xyes; then
 echo Building dynamic plugins:
-       if test x"$plugin_netstatus" != x; then
-               AC_MSG_RESULT([    netstatus - Monitor networking status])
-       fi
-       if test x"$plugin_netstat" != x; then
-               AC_MSG_RESULT([    netstat - Monitor networking status (Linux Only)])
-       fi
-       if test x"$plugin_volume" != x; then
-               AC_MSG_RESULT([    volume - Display and adjust volume of sound card])
-       fi
-       if test x"$plugin_volumealsa" != x; then
-               AC_MSG_RESULT([    volumealsa - Display and adjust volume of sound card for ALSA])
-       fi
-       if test x"$plugin_cpu" != x; then
-               AC_MSG_RESULT([    cpu - Display CPU loading])
-       fi
-       if test x"$plugin_deskno" != x; then
-               AC_MSG_RESULT([    deskno - Display desktop number])
-       fi
-       if test x"$plugin_batt" != x; then
-               AC_MSG_RESULT([    batt - Monitor battery status])
-       fi
+    if test x"$plugin_netstatus" != x; then
+        AC_MSG_RESULT([    netstatus - Monitor networking status])
+    fi
+    if test x"$plugin_netstat" != x; then
+        AC_MSG_RESULT([    netstat - Monitor networking status (Linux Only)])
+    fi
+    if test x"$plugin_volume" != x; then
+        AC_MSG_RESULT([    volume - Display and adjust volume of sound card])
+    fi
+    if test x"$plugin_volumealsa" != x; then
+        AC_MSG_RESULT([    volumealsa - Display and adjust volume of sound card for ALSA])
+    fi
+    if test x"$plugin_cpu" != x; then
+        AC_MSG_RESULT([    cpu - Display CPU loading])
+    fi
+    if test x"$plugin_deskno" != x; then
+        AC_MSG_RESULT([    deskno - Display desktop number])
+    fi
+    if test x"$plugin_batt" != x; then
+        AC_MSG_RESULT([    batt - Monitor battery status])
+    fi
 else
 echo Dynamic loader for plugins....... : disabled.
 fi
index af53720..20eae0e 100644 (file)
@@ -1,8 +1,7 @@
-lxpanel_DATA = \
-       default \
-       pager
+default_config_DATA = \
+       default/config
 
-lxpaneldir = $(datadir)/lxpanel
+default_configdir = $(datadir)/lxpanel/profile/default
 
 lxpanel_images_DATA = \
        images/my-computer.svg \
@@ -49,6 +48,6 @@ lxpanel_images_DATA = \
 lxpanel_imagesdir = $(datadir)/lxpanel/images
 
 EXTRA_DIST = \
-       default.in \
+       default/config.in \
        $(lxpanel_DATA) \
        $(lxpanel_images_DATA)
diff --git a/data/default.in b/data/default.in
deleted file mode 100644 (file)
index 24134d3..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-########################################
-## lxpanel configuration file         ##
-########################################
-
-# DESCRIPTION
-# Configuration file consists of mandatory 'Global' block that MUST come first,
-# and optionally one or more 'Plugin' block.
-# Lines having '#' as first non-blank char or blank lines are ignored
-# Value of variable is a text from first non-blank char after '=' 
-# till the last non-blank char. '#' is NOT treated as coment in this context
-
-# 'Global' block describes gloabal parameters like position, size and 
-# some NETWM settings
-
-# GLobal {
-
-#     # screen edge  
-#     # legal values are: left, right, top, bottom
-#     edge = bottom
-
-#     # allignment of a panel
-#     # legal values are: left, right, center
-#     allign = left
-
-#     # length of margin (in pixels) 
-#     # legal values are numbers
-#     margin = 0
-
-#     # widthtype specifies how panel width is calculated
-#     # legal values are: request, pixel, percent
-#     #   request - follow widgets' size requests. can shrink or grow dynamically
-#     #   pixel   - ocupy fixed number of pixels, then 'width' variable holds a number
-#     #   percent - be 'width' precent of an edge.
-#     widthtype = percent
-
-#     # numerical value of width (not applicable for 'request' widthtype)
-#     # legal values are numbers
-#     width = 80
-
-#     # heighttype specifies how panel height is calculated
-#     # legal values are: pixel
-#     #   pixel   - ocupy fixed number of pixels, then 'height' variable holds a number
-#     heighttype = pixel
-
-#     # numerical value of height (if applicable)
-#     # legal values are numbers
-#     height = 28
-
-
-#     # Identify panel window type as dock 
-#     # legal values are boolean
-#     SetDockTpe = true
-
-#     # Reserve panel's space so that it will not be covered by maximazied windows
-#     # legal values are boolean
-#     # SetPartialStrut = true
-
-#     # Transparency stuff: 
-#     # TintColor is a color to composite on root background given as #RRGGBB or as name
-#     # Alpha is transparency of the tint color.
-#     # Transparent = true
-#     # TintColor = #FFFFFF
-#         or
-#     # TintColor = white
-#     # Alpha = 127
-
-#     # Font color: 
-#     # useFontColor = true
-#     # FontColor = #FFFFFF
-
-#     # Background stuff: 
-#     # Background = true
-#     # BackgroundFile = /usr/share/lxpanel/images/background.png
-# }
-
-# 'Plugin' block specifies a plugin to load. It has same syntax for both
-# builtin and external plugins.
-
-# First parameter is 'type'. It's mandatory and must come first
-# Legal values are plugin names. Names of builtin plugins are:
-# separator   - visual separator
-# wincmd      - 'show desktop' button
-# taskbar     - lists all opened windows (tasks)
-# launchbar   - bar with launch button
-# image       - just shows an image
-# dclock      - digital clock
-# space       - just seize space
-# pager       - thumbnailed view of the desktop
-# tray        - tray for XEMBED icons (aka docklets)
-# volume      - volume control
-# cpu         - cpu usage monitor
-# netstatus   - net status (ported from gnome-panel)
-
-# expand - specifies if plugin can accomodate extra space or not [optional]
-# padding - extra paddin around plugin  [optional]
-# config {} - block of plugin's private configuration. 
-#             This part is plugin  dependant
-
-Global {
-    edge = bottom
-    allign = left
-    margin = 0
-    widthtype = percent
-    width = 100
-    heighttype = pixel
-    height = 26
-    useFontColor = true
-    FontColor = #FFFFFF
-    Background = true
-    BackgroundFile = @prefix@/share/lxpanel/images/background.png
-}
-
-Plugin {
-    type = space
-    config {
-            size = 2
-    }
-}
-
-Plugin {
-    type = menu
-    config {
-        image = @prefix@/share/lxpanel/images/my-computer.svg
-        system {
-        }
-        separator {
-        }
-        item {
-            command = run
-        }
-        item {
-            image = @prefix@/share/lxpanel/images/gnome-setting.svg
-            command = configure
-        }
-        separator {
-        }
-        item {
-            image = gnome-logout
-            command = logout
-        }
-    }
-}
-
-Plugin {
-    type = launchbar
-    config {
-        button {
-            id = pcmanfm.desktop
-        }
-        button {
-            id = gnome-terminal.desktop
-        }
-        button {
-            id = firefox.desktop
-        }
-    }
-}
-
-Plugin {
-    type = space
-    config {
-            size = 4
-    }
-}
-
-Plugin {
-    type = wincmd
-}
-
-Plugin {
-    type = space
-    config {
-            size = 4
-    }
-}
-
-Plugin {
-    type = pager
-}
-
-Plugin {
-    type = space
-    config {
-        size = 4
-    }
-}
-
-Plugin {
-    type = taskbar
-    expand = true
-    config {
-        ShowIconified = true
-        ShowMapped    = true
-        ShowAllDesks  = false
-        tooltips = true
-        IconsOnly = false
-        MaxTaskWidth = 150
-    }
-}
-
-# Volume control
-#
-# Plugin {
-#     type = volume
-# }
-
-# Net status plug-in
-# %i in configtool is only a place holder, and will be replace by the value of iface.
-
-Plugin {
-    type = netstatus
-    config {
-        iface = eth0
-        configtool = network-admin --configure %i
-    }
-}
-
-# Net Status (Linux Only)
-#
-#Plugin {
-#    type = netstat
-#    config {
-#        FixCommand = /sbin/netctl %s renew
-#    }
-#}
-
-# CPU monitor
-Plugin {
-    type = cpu
-}
-
-Plugin {
-    type = tray
-}
-
-# Digital Clock
-Plugin {
-    type = dclock
-    config {
-        ClockFmt = %R
-        TooltipFmt = %A %x
-        Action = xmessage Please define some command &
-        BoldFont = false
-    }
-}
diff --git a/data/default/config.in b/data/default/config.in
new file mode 100644 (file)
index 0000000..24134d3
--- /dev/null
@@ -0,0 +1,246 @@
+########################################
+## lxpanel configuration file         ##
+########################################
+
+# DESCRIPTION
+# Configuration file consists of mandatory 'Global' block that MUST come first,
+# and optionally one or more 'Plugin' block.
+# Lines having '#' as first non-blank char or blank lines are ignored
+# Value of variable is a text from first non-blank char after '=' 
+# till the last non-blank char. '#' is NOT treated as coment in this context
+
+# 'Global' block describes gloabal parameters like position, size and 
+# some NETWM settings
+
+# GLobal {
+
+#     # screen edge  
+#     # legal values are: left, right, top, bottom
+#     edge = bottom
+
+#     # allignment of a panel
+#     # legal values are: left, right, center
+#     allign = left
+
+#     # length of margin (in pixels) 
+#     # legal values are numbers
+#     margin = 0
+
+#     # widthtype specifies how panel width is calculated
+#     # legal values are: request, pixel, percent
+#     #   request - follow widgets' size requests. can shrink or grow dynamically
+#     #   pixel   - ocupy fixed number of pixels, then 'width' variable holds a number
+#     #   percent - be 'width' precent of an edge.
+#     widthtype = percent
+
+#     # numerical value of width (not applicable for 'request' widthtype)
+#     # legal values are numbers
+#     width = 80
+
+#     # heighttype specifies how panel height is calculated
+#     # legal values are: pixel
+#     #   pixel   - ocupy fixed number of pixels, then 'height' variable holds a number
+#     heighttype = pixel
+
+#     # numerical value of height (if applicable)
+#     # legal values are numbers
+#     height = 28
+
+
+#     # Identify panel window type as dock 
+#     # legal values are boolean
+#     SetDockTpe = true
+
+#     # Reserve panel's space so that it will not be covered by maximazied windows
+#     # legal values are boolean
+#     # SetPartialStrut = true
+
+#     # Transparency stuff: 
+#     # TintColor is a color to composite on root background given as #RRGGBB or as name
+#     # Alpha is transparency of the tint color.
+#     # Transparent = true
+#     # TintColor = #FFFFFF
+#         or
+#     # TintColor = white
+#     # Alpha = 127
+
+#     # Font color: 
+#     # useFontColor = true
+#     # FontColor = #FFFFFF
+
+#     # Background stuff: 
+#     # Background = true
+#     # BackgroundFile = /usr/share/lxpanel/images/background.png
+# }
+
+# 'Plugin' block specifies a plugin to load. It has same syntax for both
+# builtin and external plugins.
+
+# First parameter is 'type'. It's mandatory and must come first
+# Legal values are plugin names. Names of builtin plugins are:
+# separator   - visual separator
+# wincmd      - 'show desktop' button
+# taskbar     - lists all opened windows (tasks)
+# launchbar   - bar with launch button
+# image       - just shows an image
+# dclock      - digital clock
+# space       - just seize space
+# pager       - thumbnailed view of the desktop
+# tray        - tray for XEMBED icons (aka docklets)
+# volume      - volume control
+# cpu         - cpu usage monitor
+# netstatus   - net status (ported from gnome-panel)
+
+# expand - specifies if plugin can accomodate extra space or not [optional]
+# padding - extra paddin around plugin  [optional]
+# config {} - block of plugin's private configuration. 
+#             This part is plugin  dependant
+
+Global {
+    edge = bottom
+    allign = left
+    margin = 0
+    widthtype = percent
+    width = 100
+    heighttype = pixel
+    height = 26
+    useFontColor = true
+    FontColor = #FFFFFF
+    Background = true
+    BackgroundFile = @prefix@/share/lxpanel/images/background.png
+}
+
+Plugin {
+    type = space
+    config {
+            size = 2
+    }
+}
+
+Plugin {
+    type = menu
+    config {
+        image = @prefix@/share/lxpanel/images/my-computer.svg
+        system {
+        }
+        separator {
+        }
+        item {
+            command = run
+        }
+        item {
+            image = @prefix@/share/lxpanel/images/gnome-setting.svg
+            command = configure
+        }
+        separator {
+        }
+        item {
+            image = gnome-logout
+            command = logout
+        }
+    }
+}
+
+Plugin {
+    type = launchbar
+    config {
+        button {
+            id = pcmanfm.desktop
+        }
+        button {
+            id = gnome-terminal.desktop
+        }
+        button {
+            id = firefox.desktop
+        }
+    }
+}
+
+Plugin {
+    type = space
+    config {
+            size = 4
+    }
+}
+
+Plugin {
+    type = wincmd
+}
+
+Plugin {
+    type = space
+    config {
+            size = 4
+    }
+}
+
+Plugin {
+    type = pager
+}
+
+Plugin {
+    type = space
+    config {
+        size = 4
+    }
+}
+
+Plugin {
+    type = taskbar
+    expand = true
+    config {
+        ShowIconified = true
+        ShowMapped    = true
+        ShowAllDesks  = false
+        tooltips = true
+        IconsOnly = false
+        MaxTaskWidth = 150
+    }
+}
+
+# Volume control
+#
+# Plugin {
+#     type = volume
+# }
+
+# Net status plug-in
+# %i in configtool is only a place holder, and will be replace by the value of iface.
+
+Plugin {
+    type = netstatus
+    config {
+        iface = eth0
+        configtool = network-admin --configure %i
+    }
+}
+
+# Net Status (Linux Only)
+#
+#Plugin {
+#    type = netstat
+#    config {
+#        FixCommand = /sbin/netctl %s renew
+#    }
+#}
+
+# CPU monitor
+Plugin {
+    type = cpu
+}
+
+Plugin {
+    type = tray
+}
+
+# Digital Clock
+Plugin {
+    type = dclock
+    config {
+        ClockFmt = %R
+        TooltipFmt = %A %x
+        Action = xmessage Please define some command &
+        BoldFont = false
+    }
+}
diff --git a/data/pager b/data/pager
deleted file mode 100644 (file)
index b84f3dd..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-########################################
-## lxpanel configuration file         ##
-########################################
-
-
-# DESCRIPTION
-# Configuration file consists of mandatory 'Global' block that MUST come first,
-# and optionally one or more 'Plugin' block.
-# Lines having '#' as first non-blank char or blank lines are ignored
-# Value of variable is a text from first non-blank char after '=' 
-# till the last non-blank char. '#' is NOT treated as coment in this context
-
-# 'Global' block describes gloabal parameters like position, size and 
-# some NETWM settings
-
-# GLobal {
-
-#     # screen edge  
-#     # legal values are: left, right, top, bottom
-#     edge = bottom
-
-#     # allignment of a panel
-#     # legal values are: left, right, center
-#     allign = left
-
-#     # length of margin (in pixels) 
-#     # legal values are numbers
-#     margin = 0
-
-#     # widthtype specifies how panel width is calculated
-#     # legal values are: request, pixel, percent
-#     #   request - follow widgets' size requests. can shrink or grow dynamically
-#     #   pixel   - ocupy fixed number of pixels, then 'width' variable holds a number
-#     #   percent - be 'width' precent of an edge.
-#     widthtype = percent
-
-#     # numerical value of width (not applicable for 'request' widthtype)
-#     # legal values are numbers
-#     width = 80
-
-#     # heighttype specifies how panel height is calculated
-#     # legal values are: pixel
-#     #   pixel   - ocupy fixed number of pixels, then 'height' variable holds a number
-#     heighttype = pixel
-
-#     # numerical value of height (if applicable)
-#     # legal values are numbers
-#     height = 28
-
-
-#     # Identify panel window type as dock 
-#     # legal values are boolean
-#     SetDockTpe = true
-
-#     # Reserve panel's space so that it will not be covered by maximazied windows
-#     # legal values are boolean
-#     # SetPartialStrut = true
-# }
-
-
-
-# 'Plugin' block specifies a plugin to load. It has same syntax for both
-# builtin and external plugins.
-
-# First parameter is 'type'. It's mandatory and must come first
-# Legal values are plugin names. Names of builtin plugins are:
-# separator   - visual separator
-# wincmd      - 'show desktop' button
-# taskbar     - lists all opened windows (tasks)
-# launchbar   - bar with launch button
-# image       - just shows an image
-# dclock      - digital clock
-
-# expand - specifies if plugin can accomodate extra space or not [optional]
-# padding - extra paddin around plugin  [optional]
-# config {} - block of plugin's private configuration. 
-#             This part is plugin  dependant
-
-
-#  
-# Plugin {
-#     type = wincmd
-#     config {
-#         image = ~/.lxpanel/images/Desktop2.png
-#         tooltip = Left click to iconify all windows. Middle click to shade them.
-#     }
-# }
-
-
-Global {
-
-    edge = left
-    allign = right
-    margin = 30
-    widthtype = request
-    width = 100
-    heighttype = pixel
-    height = 46
-
-}
-
-Plugin {
-    type = separator
-}
-
-Plugin {
-    type = pager
-}
index 30ce031..d45cf07 100644 (file)
@@ -92,32 +92,57 @@ static void update_toggle_button(GtkWidget *w, gboolean n);
 static void modify_plugin( GtkTreeView* view );
 static void on_entry_changed( GtkEditable* edit, gpointer user_data );
 
-static int
-mk_profile_dir()
+/* older versions of glib don't provde these API */
+#if ! GLIB_CHECK_VERSION(2, 8, 0)
+#include <errno.h>
+
+int g_mkdir_with_parents(const gchar *pathname, int mode)
 {
-    gchar fname[1024];
-    struct stat buf;
-    int ret;
+    struct stat statbuf;
+    char *dir, *sep;
+    dir = g_strdup( pathname );
+    sep = dir[0] == '/' ? dir + 1 : dir;
+    do {
+        sep = strchr( sep, '/' );
+        if( G_LIKELY( sep ) )
+            *sep = '\0';
+
+        if( stat( dir, &statbuf) == 0 )
+        {
+            if( ! S_ISDIR(statbuf.st_mode) )    /* parent not dir */
+                goto err;
+        }
+        else    /* stat failed */
+        {
+            if( errno == ENOENT )   /* not exists */
+            {
+                if( mkdir( dir, mode ) == -1 )
+                    goto err;
+            }
+            else
+                goto err;   /* unknown error */
+        }
 
-    ENTER;
-    sprintf(fname, "%s/.lxpanel", getenv("HOME"));
-    if ((ret = stat(fname, &buf))) {
-        LOG(LOG_INFO, "creating %s\n", fname);
-        mkdir(fname, 0755);
-        ret = stat(fname, &buf);
-    }
-    if (ret)
-        RET(0);
-    if (!(S_ISDIR(buf.st_mode) && (S_IWUSR & buf.st_mode) && (S_IXUSR & buf.st_mode)))
-        RET(0);
-    RET(1);
+        if( G_LIKELY( sep ) )
+        {
+            *sep = '/';
+            ++sep;
+        }
+        else
+            break;
+    }while( sep );
+    g_free( dir );
+    return 0;
+err:
+    g_free( dir );
+    return -1;
 }
-
+#endif
 
 static void
 response_event(GtkDialog *widget, gint arg1, gpointer user_data)
 {
-    gchar fname[1024];
+    gchar *fname;
     FILE *fp;
 
     ENTER;
@@ -128,20 +153,17 @@ response_event(GtkDialog *widget, gint arg1, gpointer user_data)
     case GTK_RESPONSE_DELETE_EVENT:
     case GTK_RESPONSE_CLOSE:
     case GTK_RESPONSE_NONE:
-        if (!mk_profile_dir()) {
-            ERR("can't make ~/.lxpanel direcory\n");
-            RET();
-        }
-        sprintf(fname, "%s/.lxpanel/%s", getenv("HOME"), cprofile);
-        LOG(LOG_WARN, "saving profile %s as %s\n", cprofile, fname);
+        fname = get_config_file_path( cprofile, FALSE );
         if (!(fp = fopen(fname, "w"))) {
             ERR("can't open for write %s:", fname);
             perror(NULL);
+            g_free ( fname );
             RET();
         }
         global_config_save(fp);
         plugin_config_save(fp);
         fclose(fp);
+        g_free( fname );
         /* NOTE: NO BREAK HERE*/
         gtk_widget_destroy(dialog);
         dialog = NULL;
@@ -1316,15 +1338,13 @@ plugin_config_save(FILE *fp)
 
 void config_save(void)
 {
-    gchar fname[1024];
+    gchar *fname;
     FILE *fp;
-    if (!mk_profile_dir()) {
-        ERR("can't make ~/.lxpanel direcory\n");
-        RET();
-    }
-    sprintf(fname, "%s/.lxpanel/%s", getenv("HOME"), cprofile);
-    LOG(LOG_WARN, "saving profile %s as %s\n", cprofile, fname);
+
+    fname = get_config_file_path( cprofile, FALSE );
+
     if (!(fp = fopen(fname, "w"))) {
+        g_free( fname );
         ERR("can't open for write %s:", fname);
         perror(NULL);
         RET();
@@ -1332,6 +1352,7 @@ void config_save(void)
     global_config_save(fp);
     plugin_config_save(fp);
     fclose(fp);
+    g_free( fname );
 }
 
 void restart(void)
@@ -1478,3 +1499,21 @@ GtkWidget* create_generic_config_dlg( const char* title, GtkWidget* parent,
     return dlg;
 }
 
+char* get_config_file_path( const char* name, gboolean is_global )
+{
+    char* path;
+    if( is_global )
+    {
+        path = g_build_filename( PACKAGE_DATA_DIR, "lxpanel/profile", name, "config", NULL );
+    }
+    else
+    {
+        char* dir = g_build_filename( g_get_user_config_dir(), "lxpanel" , name, NULL);
+        /* make sure the private profile dir exists */
+        g_mkdir_with_parents( dir, 0700 );
+        path = g_build_filename( dir,"config", NULL);
+        g_debug( "path: %s", path );
+        g_free( dir );
+    }
+    return path;
+}
index fe14c59..f3cb188 100644 (file)
@@ -980,8 +980,10 @@ gtk_image_new_from_file_scaled(const gchar *file, gint width,
 
     ENTER;
 
+    if( G_UNLIKELY( ! file ) )
+        goto err;
 
-    if (!g_file_test(file, G_FILE_TEST_EXISTS))
+    if ( ! g_file_test(file, G_FILE_TEST_EXISTS))
     {
         /* FIXME: should reload icon when theme gets changed */
         inf = gtk_icon_theme_lookup_icon(gtk_icon_theme_get_default(),
index a826953..63ec0e2 100644 (file)
@@ -88,7 +88,10 @@ void show_error( GtkWindow* parent_win, const char* msg );
 
 /* Parameters: const char* name, gpointer ret_value, GType type, ....NULL */
 GtkWidget* create_generic_config_dlg( const char* title, GtkWidget* parent,
-                                     GSourceFunc apply_func, gpointer plugin,
-                                     const char* name, ... );
+                              GSourceFunc apply_func, gpointer plugin,
+                      const char* name, ... );
+
+
+char* get_config_file_path( const char* name, gboolean is_global );
 
 #endif
index d699368..828afa8 100644 (file)
@@ -197,24 +197,24 @@ panel_event_filter(GdkXEvent *xevent, GdkEvent *event, panel *p)
             process_client_msg( p, (XClientMessageEvent*)ev );
         }
         RET(GDK_FILTER_CONTINUE);
-       }
+    }
 
     at = ev->xproperty.atom;
     win = ev->xproperty.window;
     DBG("win=%x at=%d\n", win, at);
     if (win == GDK_ROOT_WINDOW()) {
-       if (at == a_NET_CLIENT_LIST) {
+    if (at == a_NET_CLIENT_LIST) {
             DBG("A_NET_CLIENT_LIST\n");
             fb_ev_trigger(fbev, EV_CLIENT_LIST);
-       } else if (at == a_NET_CURRENT_DESKTOP) {
+    } else if (at == a_NET_CURRENT_DESKTOP) {
             DBG("A_NET_CURRENT_DESKTOP\n");
             p->curdesk = get_net_current_desktop();
             fb_ev_trigger(fbev, EV_CURRENT_DESKTOP);
-       } else if (at == a_NET_NUMBER_OF_DESKTOPS) {
+    } else if (at == a_NET_NUMBER_OF_DESKTOPS) {
             DBG("A_NET_NUMBER_OF_DESKTOPS\n");
             p->desknum = get_net_number_of_desktops();
             fb_ev_trigger(fbev, EV_NUMBER_OF_DESKTOPS);
-       } else if (at == a_NET_DESKTOP_NAMES) {
+    } else if (at == a_NET_DESKTOP_NAMES) {
             DBG("A_NET_DESKTOP_NAMES\n");
             fb_ev_trigger(fbev, EV_DESKTOP_NAMES);
         } else if (at == a_NET_ACTIVE_WINDOW) {
@@ -228,7 +228,7 @@ panel_event_filter(GdkXEvent *xevent, GdkEvent *event, panel *p)
             if (p->transparent) {
                 fb_bg_notify_changed_bg(p->bg);
             }
-       } else if (at == a_NET_WORKAREA) {
+    } else if (at == a_NET_WORKAREA) {
             DBG("A_NET_WORKAREA\n");
             g_free( p->workarea );
             p->workarea = get_xaproperty (GDK_ROOT_WINDOW(), a_NET_WORKAREA, XA_CARDINAL, &p->wa_len);
@@ -467,7 +467,7 @@ panel_start_gui(panel *p)
     wmhints.flags = InputHint;
     wmhints.input = 0;
     XSetWMHints (GDK_DISPLAY(), p->topxwin, &wmhints);
-#define WIN_HINTS_SKIP_FOCUS      (1<<0)       /* "alt-tab" skips this win */
+#define WIN_HINTS_SKIP_FOCUS      (1<<0)    /* "alt-tab" skips this win */
     val = WIN_HINTS_SKIP_FOCUS;
     XChangeProperty(GDK_DISPLAY(), p->topxwin,
           XInternAtom(GDK_DISPLAY(), "_WIN_HINTS", False), XA_CARDINAL, 32,
@@ -836,7 +836,8 @@ load_profile(gchar *profile)
 
     ENTER;
     LOG(LOG_INFO, "loading %s profile\n", profile);
-    fname = g_strdup_printf("%s/.lxpanel/%s", getenv("HOME"), profile);
+    /* check private configuration directory */
+    fname = get_config_file_path( profile, FALSE );
     g_file_get_contents( fname, &ret, NULL, NULL );
     if (ret) {
         cfgfile = fname;
@@ -845,8 +846,8 @@ load_profile(gchar *profile)
     //ERR("Can't load %s\n", fname);
     g_free(fname);
 
-    /* check private configuration directory */
-    fname = g_strdup_printf(PACKAGE_DATA_DIR "/lxpanel/%s", profile);
+    /* If private config is not available, check global configuration directory */
+    fname = get_config_file_path( profile, TRUE );  /* the global config file */
     g_file_get_contents( fname, &ret, NULL, NULL );
     if (ret) {
         cfgfile = fname;
index f1c0eb0..e98e183 100644 (file)
@@ -206,8 +206,10 @@ plugin_load(char *type)
 #ifndef DISABLE_PLUGINS_LOADING
     else if ( g_module_supported() ) {
         char* path[ PATH_MAX ];
+#if 0   /* put plugins in config dir is too dirty... */
         g_snprintf(path, PATH_MAX, "%s/.lxpanel/plugins/%s.so", getenv("HOME"), type);
         pc = plugin_load_dynamic( type, path );
+#endif
         if( !pc ) {
             g_snprintf(path, PATH_MAX, PACKAGE_LIB_DIR "/lxpanel/plugins/%s.so", type);
             pc = plugin_load_dynamic( type, path );
@@ -309,6 +311,7 @@ GList* plugin_get_available_classes()
     }
 
 #ifndef DISABLE_PLUGINS_LOADING
+#if 0   /* Put plugins in config dir is too dirty... */
     dir_path = g_build_filename( g_get_home_dir(), ".lxpanel/plugins", NULL );
     if( dir = g_dir_open( dir_path, 0, NULL ) ) {
         while( file = g_dir_read_name( dir ) ) {
@@ -331,7 +334,7 @@ GList* plugin_get_available_classes()
         g_dir_close( dir );
     }
     g_free( dir_path );
-
+#endif
     if( dir = g_dir_open( PACKAGE_LIB_DIR "/lxpanel/plugins", 0, NULL ) ) {
         while( file = g_dir_read_name( dir ) ) {
             GModule *m;
index 24f4c3c..2e86f12 100644 (file)
@@ -1,5 +1,7 @@
 ## Process this file with automake to produce Makefile.in
 
+DIST_SUBDIRS=$(ALL_PLUGINS_LIST)
+
 if BUILD_PLUGIN_LOADER
 DYNAMIC_PLUGINS = \
        $(PLUGINS_LIST)
index ec2ec47..25ee820 100644 (file)
@@ -288,10 +288,6 @@ read_button(plugin *p, char** fp)
         h = 10000;
     }
 
-    /* still not found? */
-    if (!fname)
-        goto error;
-
     button = fb_button_new_from_file( fname, w, h, 0x202020, TRUE );
     btn->widget = button;