aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-graphics/openbox
diff options
context:
space:
mode:
authorOtavio Salvador <otavio@ossystems.com.br>2012-02-14 22:25:51 +0000
committerKoen Kooi <koen@dominion.thruhere.net>2012-02-20 22:22:02 +0100
commita8f2001c7c81ed4dea297a8fc9c98df4b91b3865 (patch)
tree3606f3b98759e9570c097339c4c11774a4ee160d /meta-oe/recipes-graphics/openbox
parent5fdcce5941e25e220783e7f5fdcca47897f9c639 (diff)
downloadmeta-openembedded-contrib-a8f2001c7c81ed4dea297a8fc9c98df4b91b3865.tar.gz
openbox: add 3.4.11.2
This version inclues O.S. Systems' internal tree fixes and a sync against 3.4-working branch. Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Diffstat (limited to 'meta-oe/recipes-graphics/openbox')
-rw-r--r--meta-oe/recipes-graphics/openbox/openbox/fix-decorations.patch73
-rw-r--r--meta-oe/recipes-graphics/openbox/openbox/fix-dialog-buttons.patch38
-rw-r--r--meta-oe/recipes-graphics/openbox/openbox/sync-with-3.4-working.patch2739
-rw-r--r--meta-oe/recipes-graphics/openbox/openbox_3.4.11.2.bb40
4 files changed, 2890 insertions, 0 deletions
diff --git a/meta-oe/recipes-graphics/openbox/openbox/fix-decorations.patch b/meta-oe/recipes-graphics/openbox/openbox/fix-decorations.patch
new file mode 100644
index 0000000000..e3489b7ced
--- /dev/null
+++ b/meta-oe/recipes-graphics/openbox/openbox/fix-decorations.patch
@@ -0,0 +1,73 @@
+Fix client decorations
+
+Upstream-Status: Pending
+
+diff --git a/openbox/client.c b/openbox/client.c
+index c65e350..1c82763 100644
+--- a/openbox/client.c
++++ b/openbox/client.c
+@@ -1733,8 +1733,20 @@ void client_setup_decor_and_functions(ObClient *self, gboolean reconfig)
+ switch (self->type) {
+ case OB_CLIENT_TYPE_NORMAL:
+ /* normal windows retain all of the possible decorations and
+- functionality, and can be fullscreen */
+- self->functions |= OB_CLIENT_FUNC_FULLSCREEN;
++ functionality, and can be fullscreen, unless if it can't be resized */
++ if (self->functions & OB_CLIENT_FUNC_RESIZE)
++ self->functions |= OB_CLIENT_FUNC_FULLSCREEN;
++ else {
++ self->decorations &= ~(OB_FRAME_DECOR_HANDLE |
++ OB_FRAME_DECOR_MAXIMIZE);
++
++ self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE;
++
++ self->mwmhints.decorations &= ~(OB_MWM_DECOR_HANDLE |
++ OB_MWM_DECOR_MAXIMIZE);
++
++ self->mwmhints.functions &= ~OB_MWM_FUNC_MAXIMIZE;
++ }
+ break;
+
+ case OB_CLIENT_TYPE_DIALOG:
+diff --git a/openbox/frame.c b/openbox/frame.c
+index 64dd290..fc84f2f 100644
+--- a/openbox/frame.c
++++ b/openbox/frame.c
+@@ -1209,6 +1209,7 @@ static void layout_title(ObFrame *self)
+ firstcon = &self->rightmost;
+ }
+
++ self->decorations = self->client->decorations;
+ /* stop at the end of the string (or the label, which calls break) */
+ for (; *lc != '\0' && lc >= config_title_layout; lc+=i) {
+ if (*lc == 'L') {
+@@ -1217,23 +1218,23 @@ static void layout_title(ObFrame *self)
+ self->label_x = x;
+ }
+ break; /* break the for loop, do other side of label */
+- } else if (*lc == 'N') {
++ } else if (*lc == 'N' && (self->decorations & OB_FRAME_DECOR_ICON)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_ICON;
+ /* icon is bigger than buttons */
+ place_button(self, lc, bwidth + 2, left, i, &x, &self->icon_on, &self->icon_x);
+- } else if (*lc == 'D') {
++ } else if (*lc == 'D' && (self->decorations & OB_FRAME_DECOR_ALLDESKTOPS)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_ALLDESKTOPS;
+ place_button(self, lc, bwidth, left, i, &x, &self->desk_on, &self->desk_x);
+- } else if (*lc == 'S') {
++ } else if (*lc == 'S' && (self->decorations & OB_FRAME_DECOR_SHADE)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_SHADE;
+ place_button(self, lc, bwidth, left, i, &x, &self->shade_on, &self->shade_x);
+- } else if (*lc == 'I') {
++ } else if (*lc == 'I' && (self->decorations & OB_FRAME_DECOR_ICONIFY)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_ICONIFY;
+ place_button(self, lc, bwidth, left, i, &x, &self->iconify_on, &self->iconify_x);
+- } else if (*lc == 'M') {
++ } else if (*lc == 'M' && (self->decorations & OB_FRAME_DECOR_MAXIMIZE)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_MAXIMIZE;
+ place_button(self, lc, bwidth, left, i, &x, &self->max_on, &self->max_x);
+- } else if (*lc == 'C') {
++ } else if (*lc == 'C' && (self->decorations & OB_FRAME_DECOR_CLOSE)) {
+ if (firstcon) *firstcon = OB_FRAME_CONTEXT_CLOSE;
+ place_button(self, lc, bwidth, left, i, &x, &self->close_on, &self->close_x);
+ } else
diff --git a/meta-oe/recipes-graphics/openbox/openbox/fix-dialog-buttons.patch b/meta-oe/recipes-graphics/openbox/openbox/fix-dialog-buttons.patch
new file mode 100644
index 0000000000..02486eecbf
--- /dev/null
+++ b/meta-oe/recipes-graphics/openbox/openbox/fix-dialog-buttons.patch
@@ -0,0 +1,38 @@
+Fix dialog support
+
+Upstream-Status: Pending
+
+diff --git a/openbox/client.c b/openbox/client.c
+index 4d54b38..c65e350 100644
+--- a/openbox/client.c
++++ b/openbox/client.c
+@@ -562,6 +562,14 @@ void client_manage(Window window, ObPrompt *prompt)
+ /* free the ObAppSettings shallow copy */
+ g_free(settings);
+
++ /* force dialogs to skip taskbar */
++ if (self->type == OB_CLIENT_TYPE_DIALOG) {
++ self->skip_taskbar = TRUE;
++
++ gulong state = prop_atoms.net_wm_state_skip_taskbar;
++ PROP_SET32(self->window, net_wm_state, atom, state);
++ }
++
+ ob_debug("Managed window 0x%lx plate 0x%x (%s)\n",
+ window, self->frame->window, self->class);
+
+@@ -1733,6 +1741,14 @@ void client_setup_decor_and_functions(ObClient *self, gboolean reconfig)
+ /* sometimes apps make dialog windows fullscreen for some reason (for
+ e.g. kpdf does this..) */
+ self->functions |= OB_CLIENT_FUNC_FULLSCREEN;
++ /* these windows cannot be maximized or minimized*/
++ self->decorations &= ~(OB_FRAME_DECOR_ICONIFY |
++ OB_FRAME_DECOR_MAXIMIZE |
++ OB_FRAME_DECOR_HANDLE);
++
++ self->functions &= ~(OB_CLIENT_FUNC_ICONIFY |
++ OB_CLIENT_FUNC_MAXIMIZE |
++ OB_CLIENT_FUNC_RESIZE);
+ break;
+
+ case OB_CLIENT_TYPE_UTILITY:
diff --git a/meta-oe/recipes-graphics/openbox/openbox/sync-with-3.4-working.patch b/meta-oe/recipes-graphics/openbox/openbox/sync-with-3.4-working.patch
new file mode 100644
index 0000000000..6cd91b9487
--- /dev/null
+++ b/meta-oe/recipes-graphics/openbox/openbox/sync-with-3.4-working.patch
@@ -0,0 +1,2739 @@
+Sync with 3.4-working branch
+
+Upstream-Status: Backport
+
+diff --git a/.gitignore b/.gitignore
+index 907abb9..bac98c7 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -22,6 +22,7 @@ doc/openbox-gnome-session.1
+ doc/openbox-kde-session.1
+ doc/openbox-session.1
+ doc/openbox.1
++doc/obxprop.1
+ libtool
+ ltmain.sh
+ m4/*.m4
+diff --git a/CHANGELOG b/CHANGELOG
+index 915e315..3ad87e9 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,3 +1,16 @@
++3.4.11.2:
++ * Updated Estonian and Portuguese translations.
++ * Fix a rare crash involving moving fullscreen windows to different monitors
++ * Fix a more common crash involving pressing right in a menu
++
++3.4.11.1:
++ * Updated Polish translation.
++ * Fixed bug #4519 (Incorrect focus in reused windows).
++ * Lower the default submenu open/hide delay from 200ms to 100ms.
++ * Fix some more problems with gnome integration.
++ * Update Clearlooks theme.
++ * Some other small fixes.
++
+ 3.4.11:
+ * Update Hungarian, Japanese, and Latvian translations.
+ * Make xdg-autostart use the OPENBOX environment by default, so you can use
+diff --git a/Makefile.am b/Makefile.am
+index fe6ef92..e2430e0 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -444,6 +444,7 @@ edit = $(SED) \
+ -e 's!@version\@!$(VERSION)!' \
+ -e 's!@configdir\@!$(configdir)!' \
+ -e 's!@secretbindir\@!$(secretbindir)!' \
++ -e 's!@libexecdir\@!$(libexecdir)!' \
+ -e 's!@bindir\@!$(bindir)!'
+
+ data/autostart.sh: $(srcdir)/data/autostart.sh.in Makefile
+@@ -542,6 +543,7 @@ CLEANFILES = \
+ doc/openbox-session.1 \
+ doc/openbox-gnome-session.1 \
+ doc/openbox-kde-session.1 \
++ doc/obxprop.1 \
+ data/xsession/openbox-session \
+ data/xsession/openbox-gnome-session \
+ data/xsession/openbox-kde-session \
+diff --git a/configure.ac b/configure.ac
+index 1ed2fd2..72445fa 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1,5 +1,5 @@
+ AC_PREREQ([2.54])
+-AC_INIT([openbox], [3.4.11], [http://bugzilla.icculus.org])
++AC_INIT([openbox], [3.4.11.2], [http://bugzilla.icculus.org])
+ AM_INIT_AUTOMAKE
+ AC_CONFIG_SRCDIR([openbox/openbox.c])
+
+@@ -15,9 +15,9 @@ dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match
+ dnl
+ OB_MAJOR_VERSION=3
+ OB_MINOR_VERSION=4
+-OB_MICRO_VERSION=28
+-OB_INTERFACE_AGE=7
+-OB_BINARY_AGE=7
++OB_MICRO_VERSION=30
++OB_INTERFACE_AGE=9
++OB_BINARY_AGE=9
+ OB_VERSION=$PACKAGE_VERSION
+
+ AC_SUBST(OB_MAJOR_VERSION)
+diff --git a/data/autostart.sh.in b/data/autostart.sh.in
+index eb55558..910e5e8 100644
+--- a/data/autostart.sh.in
++++ b/data/autostart.sh.in
+@@ -22,8 +22,8 @@ if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
+ fi
+
+ # Make GTK apps look and behave how they were set up in the gnome config tools
+-if test -x /usr/libexec/gnome-settings-daemon >/dev/null; then
+- /usr/libexec/gnome-settings-daemon &
++if test -x @libexecdir@/gnome-settings-daemon >/dev/null; then
++ @libexecdir@/gnome-settings-daemon &
+ elif which gnome-settings-daemon >/dev/null; then
+ gnome-settings-daemon &
+ # Make GTK apps look and behave how they were set up in the XFCE config tools
+diff --git a/data/gnome-wm-properties/openbox.desktop b/data/gnome-wm-properties/openbox.desktop
+index 23e690e..67e49e4 100644
+--- a/data/gnome-wm-properties/openbox.desktop
++++ b/data/gnome-wm-properties/openbox.desktop
+@@ -1,4 +1,5 @@
+ [Desktop Entry]
++Type=Application
+ Name=Openbox
+ Exec=openbox
+
+diff --git a/data/rc.xml b/data/rc.xml
+index 9c5424f..1b947b5 100644
+--- a/data/rc.xml
++++ b/data/rc.xml
+@@ -373,6 +373,12 @@
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>left</edge></action>
+ </mousebind>
++
++ <mousebind button="Right" action="Press">
++ <action name="Focus"/>
++ <action name="Raise"/>
++ <action name="ShowMenu"><menu>client-menu</menu></action>
++ </mousebind>
+ </context>
+
+ <context name="Right">
+@@ -383,6 +389,12 @@
+ <mousebind button="Left" action="Drag">
+ <action name="Resize"><edge>right</edge></action>
+ </mousebind>
++
++ <mousebind button="Right" action="Press">
++ <action name="Focus"/>
++ <action name="Raise"/>
++ <action name="ShowMenu"><menu>client-menu</menu></action>
++ </mousebind>
+ </context>
+
+ <context name="Bottom">
+@@ -615,7 +627,7 @@
+ menu is hidden again -->
+ <middle>no</middle>
+ <!-- center submenus vertically about the parent entry -->
+- <submenuShowDelay>200</submenuShowDelay>
++ <submenuShowDelay>100</submenuShowDelay>
+ <!-- time to delay before showing a submenu after hovering over the parent
+ entry.
+ if this is a negative value, then the delay is infinite and the
+diff --git a/doc/openbox.1.in b/doc/openbox.1.in
+index d508e8c..89183aa 100644
+--- a/doc/openbox.1.in
++++ b/doc/openbox.1.in
+@@ -4,7 +4,7 @@ openbox \(em A minimalistic, highly configurable, next generation window
+ manager with extensive standards support.
+ .SH "SYNOPSIS"
+ .PP
+-\fBopenbox\fR [\fB\-\-help\fP] [\fB\-\-version\fP] [\fB\-\-replace\fP] [\fB\-\-reconfigure\fP] [\fB\-\-restart\fP] [\fB\-\-sm-disable\fP] [\fB\-\-sync\fP] [\fB\-\-debug\fP] [\fB\-\-debug-focus\fP] [\fB\-\-debug-xinerama\fP]
++\fBopenbox\fR [\fB\-\-help\fP] [\fB\-\-version\fP] [\fB\-\-replace\fP] [\fB\-\-reconfigure\fP] [\fB\-\-restart\fP] [\fB\-\-config-file FILE\fP] [\fB\-\-sm-disable\fP] [\fB\-\-sync\fP] [\fB\-\-debug\fP] [\fB\-\-debug-focus\fP] [\fB\-\-debug-xinerama\fP]
+ .SH "DESCRIPTION"
+ .PP
+ Openbox is minimalistic, highly configurable, next generation window
+@@ -70,6 +70,9 @@ reload its configuration.
+ If Openbox is already running on the display, tell it to
+ restart. This is useful if you have upgraded Openbox and don't
+ want to restart X.
++.IP "\fB\-\-config-file FILE\fP" 10
++Use FILE for configuration instead of looking for rc.xml
++in the XDG search path. FILE is an absolute path.
+ .IP "\fB\-\-sm-disable\fP" 10
+ Do not connect to the session manager.
+ .IP "\fB\-\-sync\fP" 10
+@@ -92,4 +95,4 @@ The program's full documentation is available on the website:
+ .PP
+ Please report bugs to: \fBhttp://bugzilla.icculus.org/
+ \fP
+-.\" created by instant / docbook-to-man, Wed 06 Jan 2010, 13:40
++.\" created by instant / docbook-to-man, Fri 26 Mar 2010, 01:55
+diff --git a/doc/openbox.1.sgml b/doc/openbox.1.sgml
+index 275c324..a06d0cf 100644
+--- a/doc/openbox.1.sgml
++++ b/doc/openbox.1.sgml
+@@ -41,6 +41,7 @@ manpage.1: manpage.sgml
+ <arg><option>--replace</option></arg>
+ <arg><option>--reconfigure</option></arg>
+ <arg><option>--restart</option></arg>
++ <arg><option>--config-file FILE</option></arg>
+ <arg><option>--sm-disable</option></arg>
+ <arg><option>--sync</option></arg>
+ <arg><option>--debug</option></arg>
+@@ -137,6 +138,13 @@ manpage.1: manpage.sgml
+ </listitem>
+ </varlistentry>
+ <varlistentry>
++ <term><option>--config-file FILE</option></term>
++ <listitem>
++ <para>Use FILE for configuration instead of looking for rc.xml
++ in the XDG search path. FILE is an absolute path.</para>
++ </listitem>
++ </varlistentry>
++ <varlistentry>
+ <term><option>--sm-disable</option></term>
+ <listitem>
+ <para>Do not connect to the session manager.</para>
+diff --git a/openbox/actions.c b/openbox/actions.c
+index 948ac2c..a6a6ea4 100644
+--- a/openbox/actions.c
++++ b/openbox/actions.c
+@@ -47,6 +47,7 @@ struct _ObActionsDefinition {
+ ObActionsRunFunc run;
+ ObActionsInteractiveInputFunc i_input;
+ ObActionsInteractiveCancelFunc i_cancel;
++ ObActionsShutdownFunc shutdown;
+ };
+
+ struct _ObActionsAct {
+@@ -73,7 +74,9 @@ void actions_shutdown(gboolean reconfig)
+
+ /* free all the registered actions */
+ while (registered) {
+- actions_definition_unref(registered->data);
++ ObActionsDefinition *d = registered->data;
++ if (d->shutdown) d->shutdown();
++ actions_definition_unref(d);
+ registered = g_slist_delete_link(registered, registered);
+ }
+ }
+@@ -105,12 +108,29 @@ gboolean actions_register(const gchar *name,
+ def->run = run;
+ def->i_input = i_input;
+ def->i_cancel = i_cancel;
++ def->shutdown = NULL;
+
+ registered = g_slist_prepend(registered, def);
+
+ return TRUE;
+ }
+
++gboolean actions_set_shutdown(const gchar *name,
++ ObActionsShutdownFunc shutdown)
++{
++ GSList *it;
++ ObActionsDefinition *def;
++
++ for (it = registered; it; it = g_slist_next(it)) {
++ def = it->data;
++ if (!g_ascii_strcasecmp(name, def->name)) {
++ def->shutdown = shutdown;
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
+ static void actions_definition_ref(ObActionsDefinition *def)
+ {
+ ++def->ref;
+diff --git a/openbox/actions.h b/openbox/actions.h
+index fb9a6a8..7a98aab 100644
+--- a/openbox/actions.h
++++ b/openbox/actions.h
+@@ -35,6 +35,7 @@ typedef gpointer (*ObActionsDataSetupFunc)(ObParseInst *i,
+ typedef void (*ObActionsDataFreeFunc)(gpointer options);
+ typedef gboolean (*ObActionsRunFunc)(ObActionsData *data,
+ gpointer options);
++typedef void (*ObActionsShutdownFunc)(void);
+ typedef gboolean (*ObActionsInteractiveInputFunc)(guint initial_state,
+ XEvent *e,
+ gpointer options,
+@@ -64,9 +65,13 @@ gboolean actions_register(const gchar *name,
+ ObActionsInteractiveInputFunc i_input,
+ ObActionsInteractiveCancelFunc i_cancel);
+
++gboolean actions_set_shutdown(const gchar *name,
++ ObActionsShutdownFunc shutdown);
++
+ ObActionsAct* actions_parse(ObParseInst *i,
+ xmlDocPtr doc,
+ xmlNodePtr node);
++
+ ObActionsAct* actions_parse_string(const gchar *name);
+
+ gboolean actions_act_is_interactive(ObActionsAct *act);
+diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c
+index 4e0dfd8..29cd327 100644
+--- a/openbox/actions/execute.c
++++ b/openbox/actions/execute.c
+@@ -1,4 +1,5 @@
+ #include "openbox/actions.h"
++#include "openbox/client.h"
+ #include "openbox/event.h"
+ #include "openbox/startupnotify.h"
+ #include "openbox/prompt.h"
+@@ -16,18 +17,16 @@ typedef struct {
+ gchar *sn_icon;
+ gchar *sn_wmclass;
+ gchar *prompt;
++ ObActionsData *data;
+ } Options;
+
+ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+ static void free_func(gpointer options);
+ static gboolean run_func(ObActionsData *data, gpointer options);
+-/*
+-static gboolean i_input_func(guint initial_state,
+- XEvent *e,
+- gpointer options,
+- gboolean *used);
+-static void i_cancel_func(gpointer options);
+-*/
++static void shutdown_func(void);
++static void client_dest(ObClient *client, gpointer data);
++
++static GSList *prompt_opts = NULL;
+
+ void action_execute_startup(void)
+ {
+@@ -36,6 +35,20 @@ void action_execute_startup(void)
+ free_func,
+ run_func,
+ NULL, NULL);
++ actions_set_shutdown("Execute", shutdown_func);
++
++ client_add_destroy_notify(client_dest, NULL);
++}
++
++static void client_dest(ObClient *client, gpointer data)
++{
++ GSList *it;
++
++ for (it = prompt_opts; it; it = g_slist_next(it)) {
++ Options *o = it->data;
++ if (o->data->client == client)
++ o->data->client = NULL;
++ }
+ }
+
+ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+@@ -70,21 +83,29 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+ return o;
+ }
+
++static void shutdown_func(void)
++{
++ client_remove_destroy_notify(client_dest);
++}
++
+ static void free_func(gpointer options)
+ {
+ Options *o = options;
+
+ if (o) {
++ prompt_opts = g_slist_remove(prompt_opts, o);
++
+ g_free(o->cmd);
+ g_free(o->sn_name);
+ g_free(o->sn_icon);
+ g_free(o->sn_wmclass);
+ g_free(o->prompt);
++ if (o->data) g_free(o->data);
+ g_free(o);
+ }
+ }
+
+-static Options* dup_options(Options *in)
++static Options* dup_options(Options *in, ObActionsData *data)
+ {
+ Options *o = g_new(Options, 1);
+ o->cmd = g_strdup(in->cmd);
+@@ -93,15 +114,15 @@ static Options* dup_options(Options *in)
+ o->sn_icon = g_strdup(in->sn_icon);
+ o->sn_wmclass = g_strdup(in->sn_wmclass);
+ o->prompt = NULL;
++ o->data = g_memdup(data, sizeof(ObActionsData));
+ return o;
+ }
+
+-static gboolean run_func(ObActionsData *data, gpointer options);
+-
+ static gboolean prompt_cb(ObPrompt *p, gint result, gpointer options)
+ {
++ Options *o = options;
+ if (result)
+- run_func(NULL, options);
++ run_func(o->data, o);
+ return TRUE; /* call the cleanup func */
+ }
+
+@@ -129,7 +150,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
+ { _("Yes"), 1 }
+ };
+
+- ocp = dup_options(options);
++ ocp = dup_options(options, data);
+ p = prompt_new(o->prompt, _("Execute"), answers, 2, 0, 0,
+ prompt_cb, prompt_cleanup, ocp);
+ prompt_show(p, NULL, FALSE);
+@@ -149,7 +170,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
+ event_cancel_all_key_grabs();
+
+ if (!g_shell_parse_argv(cmd, NULL, &argv, &e)) {
+- g_message(e->message, o->cmd);
++ g_message("%s", e->message);
+ g_error_free(e);
+ }
+ else {
+@@ -168,7 +189,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL, NULL, &e))
+ {
+- g_message(e->message, o->cmd);
++ g_message("%s", e->message);
+ g_error_free(e);
+
+ if (o->sn)
+diff --git a/openbox/actions/exit.c b/openbox/actions/exit.c
+index 567926e..f447830 100644
+--- a/openbox/actions/exit.c
++++ b/openbox/actions/exit.c
+@@ -10,11 +10,12 @@ typedef struct {
+
+ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+ static gboolean run_func(ObActionsData *data, gpointer options);
++static void free_func(gpointer options);
+
+ void action_exit_startup(void)
+ {
+- actions_register("Exit", setup_func, NULL, run_func, NULL, NULL);
+- actions_register("SessionLogout", setup_func, NULL, run_func, NULL, NULL);
++ actions_register("Exit", setup_func, free_func, run_func, NULL, NULL);
++ actions_register("SessionLogout", setup_func, free_func, run_func, NULL, NULL);
+ }
+
+ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+@@ -31,6 +32,12 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+ return o;
+ }
+
++static void free_func(gpointer options)
++{
++ if (options)
++ g_free(options);
++}
++
+ static void do_exit(void)
+ {
+ if (session_connected())
+diff --git a/openbox/actions/moverelative.c b/openbox/actions/moverelative.c
+index 1d1189c..a553519 100644
+--- a/openbox/actions/moverelative.c
++++ b/openbox/actions/moverelative.c
+@@ -54,15 +54,15 @@ static gboolean run_func(ObActionsData *data, gpointer options)
+ gint x, y, lw, lh, w, h;
+
+ c = data->client;
+- x = data->client->area.x + o->x;
+- y = data->client->area.y + o->y;
+- w = data->client->area.width;
+- h = data->client->area.height;
+- client_try_configure(data->client, &x, &y, &w, &h, &lw, &lh, TRUE);
+- client_find_onscreen(data->client, &x, &y, w, h, FALSE);
++ x = c->area.x + o->x;
++ y = c->area.y + o->y;
++ w = c->area.width;
++ h = c->area.height;
++ client_try_configure(c, &x, &y, &w, &h, &lw, &lh, TRUE);
++ client_find_onscreen(c, &x, &y, w, h, FALSE);
+
+ actions_client_move(data, TRUE);
+- client_configure(data->client, x, y, w, h, TRUE, TRUE, FALSE);
++ client_configure(c, x, y, w, h, TRUE, TRUE, FALSE);
+ actions_client_move(data, FALSE);
+ }
+
+diff --git a/openbox/client.c b/openbox/client.c
+index fd5d375..2d6885d 100644
+--- a/openbox/client.c
++++ b/openbox/client.c
+@@ -372,7 +372,7 @@ void client_manage(Window window, ObPrompt *prompt)
+ /* NET_WM_USER_TIME 0 when mapping means don't focus */
+ (user_time != 0) &&
+ /* this checks for focus=false for the window */
+- (!settings || settings->focus != 0) &&
++ settings->focus != 0 &&
+ focus_valid_target(self, FALSE, FALSE, TRUE, FALSE, FALSE,
+ settings->focus == 1))
+ {
+@@ -782,7 +782,7 @@ static gboolean client_can_steal_focus(ObClient *self, Time steal_time,
+
+ /* This is focus stealing prevention */
+ ob_debug_type(OB_DEBUG_FOCUS,
+- "Want to focus new window 0x%x at time %u "
++ "Want to focus window 0x%x at time %u "
+ "launched at %u (last user interaction time %u)\n",
+ self->window, steal_time, launch_time,
+ event_last_user_time);
+@@ -791,8 +791,9 @@ static gboolean client_can_steal_focus(ObClient *self, Time steal_time,
+ if (!(self->desktop == screen_desktop ||
+ self->desktop == DESKTOP_ALL) &&
+ /* the timestamp is from before you changed desktops */
+- launch_time && screen_desktop_user_time &&
+- !event_time_after(launch_time, screen_desktop_user_time))
++ (!launch_time ||
++ (screen_desktop_user_time &&
++ !event_time_after(launch_time, screen_desktop_user_time))))
+ {
+ steal = FALSE;
+ ob_debug_type(OB_DEBUG_FOCUS,
+@@ -2488,7 +2489,7 @@ ObClient *client_search_focus_tree_full(ObClient *self)
+
+ for (it = self->parents; it; it = g_slist_next(it)) {
+ ObClient *c = it->data;
+- if ((c = client_search_focus_tree_full(it->data))) return c;
++ if ((c = client_search_focus_tree_full(c))) return c;
+ }
+
+ return NULL;
+@@ -3175,7 +3176,8 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h,
+
+ /* if it moved between monitors, then this can affect the stacking
+ layer of this window or others - for fullscreen windows */
+- if (screen_find_monitor(&self->frame->area) !=
++ if (self->managed &&
++ screen_find_monitor(&self->frame->area) !=
+ screen_find_monitor(&oldframe))
+ {
+ client_calc_layer(self);
+diff --git a/openbox/config.c b/openbox/config.c
+index 1a99539..503f028 100644
+--- a/openbox/config.c
++++ b/openbox/config.c
+@@ -205,7 +205,7 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc,
+ gboolean x_pos_given;
+
+ while (app) {
+- name_set = class_set = type_set = x_pos_given = FALSE;
++ x_pos_given = FALSE;
+
+ class_set = parse_attr_string("class", app, &class);
+ name_set = parse_attr_string("name", app, &name);
+@@ -1018,7 +1018,7 @@ void config_startup(ObParseInst *i)
+
+ config_menu_hide_delay = 250;
+ config_menu_middle = FALSE;
+- config_submenu_show_delay = 200;
++ config_submenu_show_delay = 100;
+ config_submenu_hide_delay = 400;
+ config_menu_client_list_icons = TRUE;
+ config_menu_manage_desktops = TRUE;
+diff --git a/openbox/event.c b/openbox/event.c
+index 2ebea6b..1c6c043 100644
+--- a/openbox/event.c
++++ b/openbox/event.c
+@@ -652,6 +652,7 @@ static void event_process(const XEvent *ec, gpointer data)
+ /* keyboard layout changes for modifier mapping changes. reload the
+ modifier map, and rebind all the key bindings as appropriate */
+ ob_debug("Keyboard map changed. Reloading keyboard bindings.\n");
++ XRefreshKeyboardMapping(&e->xmapping);
+ ob_set_state(OB_STATE_RECONFIGURING);
+ modkeys_shutdown(TRUE);
+ modkeys_startup(TRUE);
+@@ -1323,11 +1324,23 @@ static void event_handle_client(ObClient *client, XEvent *e)
+ (e->xclient.data.l[0] == 2 ? "user" : "INVALID"))));
+ /* XXX make use of data.l[2] !? */
+ if (e->xclient.data.l[0] == 1 || e->xclient.data.l[0] == 2) {
+- event_curtime = e->xclient.data.l[1];
++ /* we can not trust the timestamp from applications.
++ e.g. chromium passes a very old timestamp. openbox thinks
++ the window will get focus and calls XSetInputFocus with the
++ (old) timestamp, which doesn't end up moving focus at all.
++ but the window is raised, not hilited, etc, as if it was
++ really going to get focus.
++
++ so do not use this timestamp in event_curtime, as this would
++ be used in XSetInputFocus.
++ */
++ /*event_curtime = e->xclient.data.l[1];*/
+ if (e->xclient.data.l[1] == 0)
+ ob_debug_type(OB_DEBUG_APP_BUGS,
+ "_NET_ACTIVE_WINDOW message for window %s is"
+ " missing a timestamp\n", client->title);
++
++ event_curtime = event_get_server_time();
+ } else
+ ob_debug_type(OB_DEBUG_APP_BUGS,
+ "_NET_ACTIVE_WINDOW message for window %s is "
+@@ -1712,7 +1725,9 @@ static gboolean event_handle_menu_keyboard(XEvent *ev)
+
+ else if (ob_keycode_match(keycode, OB_KEY_RIGHT)) {
+ /* Right goes to the selected submenu */
+- if (frame->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) {
++ if (frame->selected &&
++ frame->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
++ {
+ /* make sure it is visible */
+ menu_frame_select(frame, frame->selected, TRUE);
+ menu_frame_select_next(frame->child);
+diff --git a/openbox/focus_cycle_popup.c b/openbox/focus_cycle_popup.c
+index d7ac9f5..c48b8f2 100644
+--- a/openbox/focus_cycle_popup.c
++++ b/openbox/focus_cycle_popup.c
+@@ -317,7 +317,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
+ gint innerw, innerh;
+ gint i;
+ GList *it;
+- const ObFocusCyclePopupTarget *newtarget;
++ const ObFocusCyclePopupTarget *newtarget = NULL;
+ gint newtargetx, newtargety;
+
+ screen_area = screen_physical_area_primary(FALSE);
+diff --git a/openbox/menuframe.c b/openbox/menuframe.c
+index 36fdc5f..fa65c85 100644
+--- a/openbox/menuframe.c
++++ b/openbox/menuframe.c
+@@ -654,7 +654,6 @@ void menu_frame_render(ObMenuFrame *self)
+ if (self->entries) {
+ gint l, t, r, b;
+
+- e = self->entries->data;
+ ob_rr_theme->a_menu_text_normal->texture[0].data.text.string = "";
+ tw = RrMinWidth(ob_rr_theme->a_menu_text_normal);
+ tw += 2*PADDING;
+diff --git a/openbox/modkeys.c b/openbox/modkeys.c
+index e897ccb..a54fdf0 100644
+--- a/openbox/modkeys.c
++++ b/openbox/modkeys.c
+@@ -189,7 +189,7 @@ KeyCode* modkeys_sym_to_code(KeySym sym)
+ for (i = min_keycode; i <= max_keycode; ++i)
+ for (j = 0; j < keysyms_per_keycode; ++j)
+ if (sym == keymap[(i-min_keycode) * keysyms_per_keycode + j]) {
+- ret = g_renew(KeyCode, ret, ++n);
++ ret = g_renew(KeyCode, ret, ++n + 1);
+ ret[n-1] = i;
+ ret[n] = 0;
+ }
+diff --git a/openbox/moveresize.c b/openbox/moveresize.c
+index fd52d89..39ae5b7 100644
+--- a/openbox/moveresize.c
++++ b/openbox/moveresize.c
+@@ -655,7 +655,7 @@ static void move_with_keys(gint keycode, gint state)
+ static void resize_with_keys(gint keycode, gint state)
+ {
+ gint dw = 0, dh = 0, pdx = 0, pdy = 0, opx, opy, px, py;
+- gint dist = 0, resist = 0;
++ gint resist = 0;
+ ObDirection dir;
+
+ /* pick the edge if it needs to move */
+@@ -745,27 +745,27 @@ static void resize_with_keys(gint keycode, gint state)
+
+ if (key_resize_edge == OB_DIRECTION_WEST) {
+ if (dir == OB_DIRECTION_WEST)
+- dw = (dist = distw);
++ dw = distw;
+ else
+- dw = -(dist = distw);
++ dw = -distw;
+ }
+ else if (key_resize_edge == OB_DIRECTION_EAST) {
+ if (dir == OB_DIRECTION_EAST)
+- dw = (dist = distw);
++ dw = distw;
+ else
+- dw = -(dist = distw);
++ dw = -distw;
+ }
+ else if (key_resize_edge == OB_DIRECTION_NORTH) {
+ if (dir == OB_DIRECTION_NORTH)
+- dh = (dist = disth);
++ dh = disth;
+ else
+- dh = -(dist = disth);
++ dh = -disth;
+ }
+ else /*if (key_resize_edge == OB_DIRECTION_SOUTH)*/ {
+ if (dir == OB_DIRECTION_SOUTH)
+- dh = (dist = disth);
++ dh = disth;
+ else
+- dh = -(dist = disth);
++ dh = -disth;
+ }
+ }
+
+diff --git a/openbox/openbox.c b/openbox/openbox.c
+index f19f064..12fb2f6 100644
+--- a/openbox/openbox.c
++++ b/openbox/openbox.c
+@@ -711,7 +711,7 @@ static Cursor load_cursor(const gchar *name, guint fontval)
+
+ void ob_exit_with_error(const gchar *msg)
+ {
+- g_message(msg);
++ g_message("%s", msg);
+ session_shutdown(TRUE);
+ exit(EXIT_FAILURE);
+ }
+diff --git a/openbox/prompt.c b/openbox/prompt.c
+index bef06a7..a97cd1b 100644
+--- a/openbox/prompt.c
++++ b/openbox/prompt.c
+@@ -95,17 +95,17 @@ void prompt_startup(gboolean reconfig)
+ prompt_a_button->texture[0].data.text.color = c_button;
+ prompt_a_focus->texture[0].data.text.color = c_focus;
+ prompt_a_press->texture[0].data.text.color = c_press;
+- prompt_a_pfocus->texture[0].data.text.color = c_press;
++ prompt_a_pfocus->texture[0].data.text.color = c_pfocus;
+
+ prompt_a_focus->texture[1].data.lineart.color = c_focus;
+ prompt_a_focus->texture[2].data.lineart.color = c_focus;
+ prompt_a_focus->texture[3].data.lineart.color = c_focus;
+ prompt_a_focus->texture[4].data.lineart.color = c_focus;
+
+- prompt_a_pfocus->texture[1].data.lineart.color = c_press;
+- prompt_a_pfocus->texture[2].data.lineart.color = c_press;
+- prompt_a_pfocus->texture[3].data.lineart.color = c_press;
+- prompt_a_pfocus->texture[4].data.lineart.color = c_press;
++ prompt_a_pfocus->texture[1].data.lineart.color = c_pfocus;
++ prompt_a_pfocus->texture[2].data.lineart.color = c_pfocus;
++ prompt_a_pfocus->texture[3].data.lineart.color = c_pfocus;
++ prompt_a_pfocus->texture[4].data.lineart.color = c_pfocus;
+
+ prompt_a_msg = RrAppearanceCopy(ob_rr_theme->osd_hilite_label);
+ prompt_a_msg->texture[0].data.text.flow = TRUE;
+diff --git a/openbox/resist.c b/openbox/resist.c
+index 91eabcb..9b785a3 100644
+--- a/openbox/resist.c
++++ b/openbox/resist.c
+@@ -330,7 +330,6 @@ void resist_size_monitors(ObClient *c, gint resist, gint *w, gint *h,
+ Rect *area, *parea;
+ gint al, at, ar, ab; /* screen boundaries */
+ gint pl, pt, pr, pb; /* physical screen boundaries */
+- gint incw, inch;
+ guint i;
+ Rect desired_area;
+
+@@ -341,9 +340,6 @@ void resist_size_monitors(ObClient *c, gint resist, gint *w, gint *h,
+ t = RECT_TOP(c->frame->area);
+ b = RECT_BOTTOM(c->frame->area);
+
+- incw = c->size_inc.width;
+- inch = c->size_inc.height;
+-
+ RECT_SET(desired_area, c->area.x, c->area.y, *w, *h);
+
+ for (i = 0; i < screen_num_monitors; ++i) {
+diff --git a/openbox/screen.c b/openbox/screen.c
+index 55fd58d..d11c0b6 100644
+--- a/openbox/screen.c
++++ b/openbox/screen.c
+@@ -513,7 +513,6 @@ void screen_resize(void)
+
+ void screen_set_num_desktops(guint num)
+ {
+- guint old;
+ gulong *viewport;
+ GList *it, *stacking_copy;
+
+@@ -521,7 +520,6 @@ void screen_set_num_desktops(guint num)
+
+ if (screen_num_desktops == num) return;
+
+- old = screen_num_desktops;
+ screen_num_desktops = num;
+ PROP_SET32(RootWindow(ob_display, ob_screen),
+ net_number_of_desktops, cardinal, num);
+@@ -1462,7 +1460,7 @@ Rect* screen_area(guint desktop, guint head, Rect *search)
+ {
+ Rect *a;
+ GSList *it;
+- gint l, r, t, b, al, ar, at, ab;
++ gint l, r, t, b;
+ guint i, d;
+ gboolean us = search != NULL; /* user provided search */
+
+@@ -1482,36 +1480,32 @@ Rect* screen_area(guint desktop, guint head, Rect *search)
+ }
+ if (head == SCREEN_AREA_ONE_MONITOR) head = screen_find_monitor(search);
+
+- /* al is "all left" meaning the furthest left you can get, l is our
+- "working left" meaning our current strut edge which we're calculating
+- */
+-
+ /* only include monitors which the search area lines up with */
+ if (RECT_INTERSECTS_RECT(monitor_area[screen_num_monitors], *search)) {
+- al = l = RECT_RIGHT(monitor_area[screen_num_monitors]);
+- at = t = RECT_BOTTOM(monitor_area[screen_num_monitors]);
+- ar = r = RECT_LEFT(monitor_area[screen_num_monitors]);
+- ab = b = RECT_TOP(monitor_area[screen_num_monitors]);
++ l = RECT_RIGHT(monitor_area[screen_num_monitors]);
++ t = RECT_BOTTOM(monitor_area[screen_num_monitors]);
++ r = RECT_LEFT(monitor_area[screen_num_monitors]);
++ b = RECT_TOP(monitor_area[screen_num_monitors]);
+ for (i = 0; i < screen_num_monitors; ++i) {
+ /* add the monitor if applicable */
+ if (RANGES_INTERSECT(search->x, search->width,
+ monitor_area[i].x, monitor_area[i].width))
+ {
+- at = t = MIN(t, RECT_TOP(monitor_area[i]));
+- ab = b = MAX(b, RECT_BOTTOM(monitor_area[i]));
++ t = MIN(t, RECT_TOP(monitor_area[i]));
++ b = MAX(b, RECT_BOTTOM(monitor_area[i]));
+ }
+ if (RANGES_INTERSECT(search->y, search->height,
+ monitor_area[i].y, monitor_area[i].height))
+ {
+- al = l = MIN(l, RECT_LEFT(monitor_area[i]));
+- ar = r = MAX(r, RECT_RIGHT(monitor_area[i]));
++ l = MIN(l, RECT_LEFT(monitor_area[i]));
++ r = MAX(r, RECT_RIGHT(monitor_area[i]));
+ }
+ }
+ } else {
+- al = l = RECT_LEFT(monitor_area[screen_num_monitors]);
+- at = t = RECT_TOP(monitor_area[screen_num_monitors]);
+- ar = r = RECT_RIGHT(monitor_area[screen_num_monitors]);
+- ab = b = RECT_BOTTOM(monitor_area[screen_num_monitors]);
++ l = RECT_LEFT(monitor_area[screen_num_monitors]);
++ t = RECT_TOP(monitor_area[screen_num_monitors]);
++ r = RECT_RIGHT(monitor_area[screen_num_monitors]);
++ b = RECT_BOTTOM(monitor_area[screen_num_monitors]);
+ }
+
+ for (d = 0; d < screen_num_desktops; ++d) {
+diff --git a/openbox/translate.c b/openbox/translate.c
+index bd8b88f..71a919c 100644
+--- a/openbox/translate.c
++++ b/openbox/translate.c
+@@ -166,7 +166,11 @@ gchar *translate_keycode(guint keycode)
+
+ if ((sym = XKeycodeToKeysym(ob_display, keycode, 0)) != NoSymbol)
+ ret = XKeysymToString(sym);
+- return g_locale_to_utf8(ret, -1, NULL, NULL, NULL);
++ /* glib crashes in g_locale_to_utf8 if you pass it NULL here */
++ if (ret)
++ return g_locale_to_utf8(ret, -1, NULL, NULL, NULL);
++ else
++ return NULL;
+ }
+
+ gunichar translate_unichar(guint keycode)
+diff --git a/parser/parse.c b/parser/parse.c
+index 7a3c72e..6db7ca7 100644
+--- a/parser/parse.c
++++ b/parser/parse.c
+@@ -219,10 +219,12 @@ void parse_close(xmlDocPtr doc)
+ void parse_tree(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+ {
+ while (node) {
+- struct Callback *c = g_hash_table_lookup(i->callbacks, node->name);
++ if (node->name) {
++ struct Callback *c = g_hash_table_lookup(i->callbacks, node->name);
+
+- if (c)
+- c->func(i, doc, node, c->data);
++ if (c)
++ c->func(i, doc, node, c->data);
++ }
+
+ node = node->next;
+ }
+diff --git a/po/et.po b/po/et.po
+index 9c9c9f3..d4a80d8 100644
+--- a/po/et.po
++++ b/po/et.po
+@@ -1,20 +1,22 @@
++# Openboxi eesti keele tõlge
+ # translation of openbox to Estonian
+ # Copyright (C) 2007 Dana Jansens
+ # This file is distributed under the same license as the Openbox 3 package.
+ #
+ # Andres Järv <andresjarv@gmail.com>, 2007.
++# Mihkel <turakas gmail com>, 2010
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: Openbox 3.4.3\n"
++"Project-Id-Version: Openbox 3.4.11.1\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
+-"PO-Revision-Date: 2007-07-20 16:54+0200\n"
+-"Last-Translator: Andres Järv <andresjarv@gmail.com>\n"
++"POT-Creation-Date: 2010-04-22 15:53+0200\n"
++"PO-Revision-Date: 2010-04-21 21:40+0300\n"
++"Last-Translator: mihkel <turakas@gmail.com>\n"
+ "Language-Team: Estonian <et@li.org>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+ #: openbox/actions.c:149
+ #, c-format
+@@ -23,87 +25,82 @@ msgstr "Taotleti kehtetut käsklust \"%s\". Sellist käsklust pole olemas."
+
+ #: openbox/actions/execute.c:128
+ msgid "No"
+-msgstr ""
++msgstr "Ei"
+
+ #: openbox/actions/execute.c:129
+ msgid "Yes"
+-msgstr ""
++msgstr "Jah"
+
+ #: openbox/actions/execute.c:133
+ msgid "Execute"
+-msgstr ""
++msgstr "Käivita"
+
+ #: openbox/actions/execute.c:142
+ #, c-format
+ msgid "Failed to convert the path \"%s\" from utf8"
+ msgstr "Raja \"%s\" ümberkodeerimine UTF8-st ebaõnnestus"
+
+-#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+-#: openbox/client.c:3465
++#: openbox/actions/exit.c:62 openbox/client.c:3506
+ msgid "Cancel"
+-msgstr ""
++msgstr "Katkesta"
+
+-#: openbox/actions/exit.c:53
++#: openbox/actions/exit.c:63
+ msgid "Exit"
+-msgstr ""
+-
+-#: openbox/actions/exit.c:56
+-msgid "Are you sure you want to exit Openbox?"
+-msgstr ""
+-
+-#: openbox/actions/exit.c:57
+-msgid "Exit Openbox"
+-msgstr ""
++msgstr "Välju"
+
+-#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+-#. name of the action you write in rc.xml
+-#: openbox/actions/session.c:43
+-msgid ""
+-"The SessionLogout action is not available since Openbox was built without "
+-"session management support"
+-msgstr ""
++#: openbox/actions/exit.c:67
++msgid "Are you sure you want to log out?"
++msgstr "Kas oled kindel, et soovid välja logida?"
+
+-#: openbox/actions/session.c:65 openbox/actions/session.c:70
++#: openbox/actions/exit.c:68
+ msgid "Log Out"
+-msgstr ""
++msgstr "Logi välja"
+
+-#: openbox/actions/session.c:69
+-msgid "Are you sure you want to log out?"
+-msgstr ""
++#: openbox/actions/exit.c:71
++msgid "Are you sure you want to exit Openbox?"
++msgstr "Kas oled kindel, et soovid OpenBoxist väljuda?"
++
++#: openbox/actions/exit.c:72
++msgid "Exit Openbox"
++msgstr "Välju Openbox-st"
+
+-#: openbox/client.c:2012
++#: openbox/client.c:2024
+ msgid "Unnamed Window"
+-msgstr ""
++msgstr "Nimetu aken"
+
+-#: openbox/client.c:2026 openbox/client.c:2058
++#: openbox/client.c:2038 openbox/client.c:2070
+ msgid "Killing..."
+-msgstr ""
++msgstr "Tapan..."
+
+-#: openbox/client.c:2028 openbox/client.c:2060
++#: openbox/client.c:2040 openbox/client.c:2072
+ msgid "Not Responding"
+-msgstr ""
++msgstr "Ei vasta"
+
+-#: openbox/client.c:3454
++#: openbox/client.c:3495
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to force it "
+ "to exit by sending the %s signal?"
+ msgstr ""
++"Paistab, et aken \"%s\" ei vasta enam. Kas soovid teda jõuga väljuma sundida "
++"saates %s signaali?"
+
+-#: openbox/client.c:3456
++#: openbox/client.c:3497
+ msgid "End Process"
+-msgstr ""
++msgstr "Lõpeta protsess"
+
+-#: openbox/client.c:3460
++#: openbox/client.c:3501
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to disconnect "
+ "it from the X server?"
+ msgstr ""
++"Paistab, et aken \"%s\" ei vasta enam. Kas soovid ta X serverist lahti "
++"ühendada?"
+
+-#: openbox/client.c:3462
++#: openbox/client.c:3503
+ msgid "Disconnect"
+-msgstr ""
++msgstr "Ühenda lahti"
+
+ #: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
+ msgid "Go there..."
+@@ -189,14 +186,14 @@ msgstr "Äär_ed sisse/välja"
+ msgid "_Close"
+ msgstr "S_ulge"
+
+-#: openbox/config.c:781
++#: openbox/config.c:798
+ #, c-format
+ msgid "Invalid button \"%s\" specified in config file"
+-msgstr "Vigane nupp \"%s\" määratletud konfiguratsioonifailis"
++msgstr "Vigane nupp \"%s\" määratud seadistuste failis"
+
+ #: openbox/keyboard.c:157
+ msgid "Conflict with key binding in config file"
+-msgstr "Konflikt kiirklahviga konfiguratsioonifailis"
++msgstr "Konflikt kiirklahviga seadistuste failis"
+
+ #: openbox/menu.c:102 openbox/menu.c:110
+ #, c-format
+@@ -218,7 +215,7 @@ msgstr "Vigane väljund torumenüüst \"%s\""
+ msgid "Attempted to access menu \"%s\" but it does not exist"
+ msgstr "Üritati ligi pääseda menüüle \"%s\", aga seda pole olemas"
+
+-#: openbox/menu.c:367 openbox/menu.c:368
++#: openbox/menu.c:370 openbox/menu.c:371
+ msgid "More..."
+ msgstr "Rohkem..."
+
+@@ -243,7 +240,7 @@ msgstr "DISPLAY keskkonnamuutujas oleva ekraani avamine ebaõnnestus."
+
+ #: openbox/openbox.c:183
+ msgid "Failed to initialize the obrender library."
+-msgstr "Obrender-damisteegi käivitamine ebaõnnestus."
++msgstr "Obrender-damise teegi käivitamine ebaõnnestus."
+
+ #: openbox/openbox.c:194
+ msgid "X server does not support locale."
+@@ -253,46 +250,49 @@ msgstr "X server ei toeta lokaati."
+ msgid "Cannot set locale modifiers for the X server."
+ msgstr "Ei suudetud sättida lokaadimuutujaid X serveri jaoks."
+
+-#: openbox/openbox.c:263
++#: openbox/openbox.c:265
+ msgid "Unable to find a valid config file, using some simple defaults"
+ msgstr ""
+-"Ei suudetud leida kehtivat konfiguratsioonifaili, kasutatakse lihtsaid "
++"Kehtiva seadistuste faili leidmine ebaõnnestus, kasutatakse lihtsaid "
+ "vaikimisi seadeid"
+
+-#: openbox/openbox.c:297
++#: openbox/openbox.c:299
+ msgid "Unable to load a theme."
+-msgstr "Ei suudetud laadida teemat."
++msgstr "Teema laadimine ebaõnnestus."
+
+-#: openbox/openbox.c:377
++#: openbox/openbox.c:379
+ #, c-format
+ msgid ""
+ "One or more XML syntax errors were found while parsing the Openbox "
+ "configuration files. See stdout for more information. The last error seen "
+ "was in file \"%s\" line %d, with message: %s"
+ msgstr ""
++"Üks või enam XML süntaki viga leiti Openboxi seadistuse faili parsides. "
++"Rohkem infot leiad stdout-st. Viimane viga oli failis \"%s\", real %d ja "
++"sõnum oli: %s"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Openbox Syntax Error"
+-msgstr ""
++msgstr "Openboxi süntaksi viga"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Close"
+ msgstr "Sulge"
+
+-#: openbox/openbox.c:448
++#: openbox/openbox.c:463
+ #, c-format
+ msgid "Restart failed to execute new executable \"%s\": %s"
+ msgstr "Taaskäivitusel ebaõnnestus uue käivitusfaili \"%s\" käivitamine: %s"
+
+-#: openbox/openbox.c:518 openbox/openbox.c:520
++#: openbox/openbox.c:533 openbox/openbox.c:535
+ msgid "Copyright (c)"
+ msgstr "Autoriõigused (c)"
+
+-#: openbox/openbox.c:529
++#: openbox/openbox.c:544
+ msgid "Syntax: openbox [options]\n"
+ msgstr "Süntaks: openbox [seaded]\n"
+
+-#: openbox/openbox.c:530
++#: openbox/openbox.c:545
+ msgid ""
+ "\n"
+ "Options:\n"
+@@ -300,30 +300,30 @@ msgstr ""
+ "\n"
+ "Seaded:\n"
+
+-#: openbox/openbox.c:531
++#: openbox/openbox.c:546
+ msgid " --help Display this help and exit\n"
+ msgstr " --help Selle abi kuvamine ja väljumine\n"
+
+-#: openbox/openbox.c:532
++#: openbox/openbox.c:547
+ msgid " --version Display the version and exit\n"
+ msgstr " --version Versiooni kuvamine ja väljumine\n"
+
+-#: openbox/openbox.c:533
++#: openbox/openbox.c:548
+ msgid " --replace Replace the currently running window manager\n"
+ msgstr " --replace Hetkel töötava aknahalduri asendamine\n"
+
+ #. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+ #. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+ #. fine to leave it as FILE though.
+-#: openbox/openbox.c:537
++#: openbox/openbox.c:552
+ msgid " --config-file FILE Specify the path to the config file to use\n"
+-msgstr ""
++msgstr " --config-file FAIL Määra kasutatava seadistuste faili teekond\n"
+
+-#: openbox/openbox.c:538
++#: openbox/openbox.c:553
+ msgid " --sm-disable Disable connection to the session manager\n"
+ msgstr " --sm-disable Seansihalduriga ühenduse keelamine\n"
+
+-#: openbox/openbox.c:539
++#: openbox/openbox.c:554
+ msgid ""
+ "\n"
+ "Passing messages to a running Openbox instance:\n"
+@@ -331,19 +331,19 @@ msgstr ""
+ "\n"
+ "Jooksvale Openboxi seansile sõnumite edastamine:\n"
+
+-#: openbox/openbox.c:540
++#: openbox/openbox.c:555
+ msgid " --reconfigure Reload Openbox's configuration\n"
+ msgstr " --reconfigure Openboxi konfiguratsioon uuesti laadimine\n"
+
+-#: openbox/openbox.c:541
++#: openbox/openbox.c:556
+ msgid " --restart Restart Openbox\n"
+ msgstr " --restart Openboxi taaskäivitamine\n"
+
+-#: openbox/openbox.c:542
++#: openbox/openbox.c:557
+ msgid " --exit Exit Openbox\n"
+-msgstr ""
++msgstr " --exit Välju Openbox-st\n"
+
+-#: openbox/openbox.c:543
++#: openbox/openbox.c:558
+ msgid ""
+ "\n"
+ "Debugging options:\n"
+@@ -351,23 +351,23 @@ msgstr ""
+ "\n"
+ "Silumise seaded:\n"
+
+-#: openbox/openbox.c:544
++#: openbox/openbox.c:559
+ msgid " --sync Run in synchronous mode\n"
+ msgstr " --sync Sünkroonselt jooksutamine\n"
+
+-#: openbox/openbox.c:545
++#: openbox/openbox.c:560
+ msgid " --debug Display debugging output\n"
+ msgstr " --debug Silumisväljundi kuvamine\n"
+
+-#: openbox/openbox.c:546
++#: openbox/openbox.c:561
+ msgid " --debug-focus Display debugging output for focus handling\n"
+ msgstr " --debug-focus Fookusekäsitluse siluriväljundi kuvamine\n"
+
+-#: openbox/openbox.c:547
++#: openbox/openbox.c:562
+ msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+ msgstr " --debug-xinerama Ekraani võlts-Xinerama ekraanideks jagamine\n"
+
+-#: openbox/openbox.c:548
++#: openbox/openbox.c:563
+ #, c-format
+ msgid ""
+ "\n"
+@@ -376,26 +376,26 @@ msgstr ""
+ "\n"
+ "Palun teata vigadest siia %s\n"
+
+-#: openbox/openbox.c:617
++#: openbox/openbox.c:645
+ msgid "--config-file requires an argument\n"
+-msgstr ""
++msgstr "--config-file nõuab argumenti\n"
+
+-#: openbox/openbox.c:660
++#: openbox/openbox.c:688
+ #, c-format
+ msgid "Invalid command line argument \"%s\"\n"
+ msgstr "Vigane käsurea argument \"%s\"\n"
+
+-#: openbox/screen.c:102 openbox/screen.c:190
++#: openbox/screen.c:103 openbox/screen.c:191
+ #, c-format
+ msgid "A window manager is already running on screen %d"
+ msgstr "Ekraanil %d juba jookseb aknahaldur"
+
+-#: openbox/screen.c:124
++#: openbox/screen.c:125
+ #, c-format
+ msgid "Could not acquire window manager selection on screen %d"
+ msgstr "Ei suuda hankida aknahaldurite loetelu ekraanil %d"
+
+-#: openbox/screen.c:145
++#: openbox/screen.c:146
+ #, c-format
+ msgid "The WM on screen %d is not exiting"
+ msgstr "Aknahaldur ekraanil %d ei sulgu"
+@@ -404,7 +404,7 @@ msgstr "Aknahaldur ekraanil %d ei sulgu"
+ #. arguments, you can use %1$d for the first one and %2$d for the
+ #. second one. For example,
+ #. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+-#: openbox/screen.c:412
++#: openbox/screen.c:421
+ #, c-format
+ msgid ""
+ "Openbox is configured for %d desktop, but the current session has %d. "
+@@ -413,31 +413,35 @@ msgid_plural ""
+ "Openbox is configured for %d desktops, but the current session has %d. "
+ "Overriding the Openbox configuration."
+ msgstr[0] ""
++"Openbox on seadistatud %d töölauale, aga aktiivsel seansil on %d. Tühistan "
++"Openboxi seadistuse."
+ msgstr[1] ""
++"Openbox on seadistatud %d töölauale, aga aktiivsel seansil on %d. Tühistan "
++"Openboxi seadistuse."
+
+-#: openbox/screen.c:1180
++#: openbox/screen.c:1203
+ #, c-format
+ msgid "desktop %i"
+ msgstr "töölaud %i"
+
+-#: openbox/session.c:104
++#: openbox/session.c:105
+ #, c-format
+ msgid "Unable to make directory \"%s\": %s"
+ msgstr "Kausta \"%s\" tegemine ebaõnnestus: %s"
+
+-#: openbox/session.c:466
++#: openbox/session.c:472
+ #, c-format
+ msgid "Unable to save the session to \"%s\": %s"
+ msgstr "Seansi \"%s\" salvestamine ebaõnnestus: %s"
+
+-#: openbox/session.c:605
++#: openbox/session.c:611
+ #, c-format
+ msgid "Error while saving the session to \"%s\": %s"
+ msgstr "Seansi \"%s\" salvestamisel ilmnes viga: %s"
+
+-#: openbox/session.c:842
++#: openbox/session.c:848
+ msgid "Not connected to a session manager"
+-msgstr ""
++msgstr "Pole ühendatud seansihalduriga"
+
+ #: openbox/startupnotify.c:243
+ #, c-format
+@@ -471,7 +475,14 @@ msgstr "X-i viga: %s"
+
+ #: openbox/prompt.c:200
+ msgid "OK"
+-msgstr ""
++msgstr "Sobib"
++
++#~ msgid ""
++#~ "The SessionLogout action is not available since Openbox was built without "
++#~ "session management support"
++#~ msgstr ""
++#~ "SessionLogout tegevust pole saadaval, kuna Openbox on kompileeritud "
++#~ "seansi haldamise toeta"
+
+ #~ msgid "Failed to execute \"%s\": %s"
+ #~ msgstr "\"%s\" käivitamine ebaõnnestus: %s"
+diff --git a/po/fi.po b/po/fi.po
+index 0c5b344..157e13b 100644
+--- a/po/fi.po
++++ b/po/fi.po
+@@ -8,15 +8,16 @@
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: Openbox 3.4.7\n"
++"Project-Id-Version: Openbox 3.4.11\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
+-"PO-Revision-Date: 2008-03-17 21:26+0100\n"
++"POT-Creation-Date: 2010-03-11 14:26+0100\n"
++"PO-Revision-Date: 2010-03-13 21:56+0100\n"
+ "Last-Translator: Lauri Hakko <aperculum@gmail.com>\n"
+ "Language-Team: None\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+ #: openbox/actions.c:149
+ #, c-format
+@@ -40,54 +41,43 @@ msgstr "Suorita"
+ msgid "Failed to convert the path \"%s\" from utf8"
+ msgstr "Polun \"%s\" muuntaminen utf8:sta epäonnistui"
+
+-#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+-#: openbox/client.c:3465
++#: openbox/actions/exit.c:62 openbox/client.c:3506
+ msgid "Cancel"
+ msgstr "Peruuta"
+
+-#: openbox/actions/exit.c:53
++#: openbox/actions/exit.c:63
+ msgid "Exit"
+ msgstr "Sulje"
+
+-#: openbox/actions/exit.c:56
++#: openbox/actions/exit.c:67
++msgid "Are you sure you want to log out?"
++msgstr "Haluatko varmasti kirjautua ulos?"
++
++#: openbox/actions/exit.c:68
++msgid "Log Out"
++msgstr "Kirjaudu ulos"
++
++#: openbox/actions/exit.c:71
+ msgid "Are you sure you want to exit Openbox?"
+ msgstr "Haluatko varmasti sulkea Openboxin"
+
+-#: openbox/actions/exit.c:57
++#: openbox/actions/exit.c:72
+ msgid "Exit Openbox"
+ msgstr "Sulje Openbox"
+
+-#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+-#. name of the action you write in rc.xml
+-#: openbox/actions/session.c:43
+-msgid ""
+-"The SessionLogout action is not available since Openbox was built without "
+-"session management support"
+-msgstr ""
+-"SessionLogout tapahtuma ei ole suoritettavissa, koska Openbox käännettiin "
+-"ilman istunnon hallinnan tukea"
+-
+-#: openbox/actions/session.c:65 openbox/actions/session.c:70
+-msgid "Log Out"
+-msgstr "Kirjaudu ulos"
+-
+-#: openbox/actions/session.c:69
+-msgid "Are you sure you want to log out?"
+-msgstr "Haluatko varmasti kirjautua ulos?"
+-
+-#: openbox/client.c:2012
++#: openbox/client.c:2024
+ msgid "Unnamed Window"
+ msgstr "Nimetön ikkuna"
+
+-#: openbox/client.c:2026 openbox/client.c:2058
++#: openbox/client.c:2038 openbox/client.c:2070
+ msgid "Killing..."
+ msgstr "Tapetaan..."
+
+-#: openbox/client.c:2028 openbox/client.c:2060
++#: openbox/client.c:2040 openbox/client.c:2072
+ msgid "Not Responding"
+ msgstr "Ei vastaa"
+
+-#: openbox/client.c:3454
++#: openbox/client.c:3495
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to force it "
+@@ -96,11 +86,11 @@ msgstr ""
+ "Ikkuna \"%s\" ei näytä vastaavan. Haluatko sulkea sen lähettämällä sille "
+ "singaalin %s?"
+
+-#: openbox/client.c:3456
++#: openbox/client.c:3497
+ msgid "End Process"
+ msgstr "Lopeta prosessi"
+
+-#: openbox/client.c:3460
++#: openbox/client.c:3501
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to disconnect "
+@@ -109,7 +99,7 @@ msgstr ""
+ "Ikkuna \"%s\" ei näytä vastaavan. Haluatko katkaista sen yhteyden X-"
+ "palvelimeen?"
+
+-#: openbox/client.c:3462
++#: openbox/client.c:3503
+ msgid "Disconnect"
+ msgstr "Katkaise yhteys"
+
+@@ -197,7 +187,7 @@ msgstr "(Epä)_reunusta"
+ msgid "_Close"
+ msgstr "_Sulje"
+
+-#: openbox/config.c:781
++#: openbox/config.c:798
+ #, c-format
+ msgid "Invalid button \"%s\" specified in config file"
+ msgstr "Asetustiedostossa määritelty painike \"%s\" on virheellinen"
+@@ -226,7 +216,7 @@ msgstr "Virheellinen tulos putkivalikosta \"%s\""
+ msgid "Attempted to access menu \"%s\" but it does not exist"
+ msgstr "Valikon \"%s\" lukemista yritettiin, mutta sitä ei ole olemassa"
+
+-#: openbox/menu.c:367 openbox/menu.c:368
++#: openbox/menu.c:370 openbox/menu.c:371
+ msgid "More..."
+ msgstr "Lisää..."
+
+@@ -261,17 +251,17 @@ msgstr "X-palvelin ei tue maa-asetusta."
+ msgid "Cannot set locale modifiers for the X server."
+ msgstr "Maa-asetusmuuttujia ei voitu tehdä X-palvelimelle."
+
+-#: openbox/openbox.c:263
++#: openbox/openbox.c:265
+ msgid "Unable to find a valid config file, using some simple defaults"
+ msgstr ""
+ "Kelvollista asetustiedostoa ei löytynyt, käytetään yksinkertaisia "
+ "oletusarvoja"
+
+-#: openbox/openbox.c:297
++#: openbox/openbox.c:299
+ msgid "Unable to load a theme."
+ msgstr "Teeman lataaminen epäonnistui."
+
+-#: openbox/openbox.c:377
++#: openbox/openbox.c:379
+ #, c-format
+ msgid ""
+ "One or more XML syntax errors were found while parsing the Openbox "
+@@ -282,29 +272,29 @@ msgstr ""
+ "stdout saadaksesi lisätietoja. Viimeisin virhe oli tiedostossa \"%s\" "
+ "rivillä %d: %s"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Openbox Syntax Error"
+ msgstr "Openbox syntaksivirhe"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Close"
+ msgstr "Sulje"
+
+-#: openbox/openbox.c:448
++#: openbox/openbox.c:463
+ #, c-format
+ msgid "Restart failed to execute new executable \"%s\": %s"
+ msgstr ""
+ "Uudelleenkäynnistys ei onnistunut käynnistämään uutta ohjelmaa \"%s\": %s"
+
+-#: openbox/openbox.c:518 openbox/openbox.c:520
++#: openbox/openbox.c:533 openbox/openbox.c:535
+ msgid "Copyright (c)"
+ msgstr "Tekijänoikeudet (c)"
+
+-#: openbox/openbox.c:529
++#: openbox/openbox.c:544
+ msgid "Syntax: openbox [options]\n"
+ msgstr "Syntaksi: openbox [valitsin]\n"
+
+-#: openbox/openbox.c:530
++#: openbox/openbox.c:545
+ msgid ""
+ "\n"
+ "Options:\n"
+@@ -312,30 +302,30 @@ msgstr ""
+ "\n"
+ "Käyttö:\n"
+
+-#: openbox/openbox.c:531
++#: openbox/openbox.c:546
+ msgid " --help Display this help and exit\n"
+ msgstr " --help Näytä tämä ohje ja poistu\n"
+
+-#: openbox/openbox.c:532
++#: openbox/openbox.c:547
+ msgid " --version Display the version and exit\n"
+ msgstr " --version Näytä version tiedot ja poistu\n"
+
+-#: openbox/openbox.c:533
++#: openbox/openbox.c:548
+ msgid " --replace Replace the currently running window manager\n"
+ msgstr " --replace Korvaa käynnissä oleva ikkunointiohjelma\n"
+
+ #. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+ #. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+ #. fine to leave it as FILE though.
+-#: openbox/openbox.c:537
++#: openbox/openbox.c:552
+ msgid " --config-file FILE Specify the path to the config file to use\n"
+ msgstr " --config-file FILE Määritä käytettävän asetustiedoston polku\n"
+
+-#: openbox/openbox.c:538
++#: openbox/openbox.c:553
+ msgid " --sm-disable Disable connection to the session manager\n"
+ msgstr " --sm-disable Estä yhteys istuntojen hallintaan\n"
+
+-#: openbox/openbox.c:539
++#: openbox/openbox.c:554
+ msgid ""
+ "\n"
+ "Passing messages to a running Openbox instance:\n"
+@@ -343,19 +333,19 @@ msgstr ""
+ "\n"
+ "Komentojen antaminen käynnissä olevalle Openboxille:\n"
+
+-#: openbox/openbox.c:540
++#: openbox/openbox.c:555
+ msgid " --reconfigure Reload Openbox's configuration\n"
+ msgstr " --reconfigure Lataa Openboxin asetustiedosto uudelleen\n"
+
+-#: openbox/openbox.c:541
++#: openbox/openbox.c:556
+ msgid " --restart Restart Openbox\n"
+ msgstr " --restart Käynnistä Openbox uudelleen\n"
+
+-#: openbox/openbox.c:542
++#: openbox/openbox.c:557
+ msgid " --exit Exit Openbox\n"
+ msgstr " --exit Sulje Openbox\n"
+
+-#: openbox/openbox.c:543
++#: openbox/openbox.c:558
+ msgid ""
+ "\n"
+ "Debugging options:\n"
+@@ -363,23 +353,23 @@ msgstr ""
+ "\n"
+ "Vianjäljityksen asetukset:\n"
+
+-#: openbox/openbox.c:544
++#: openbox/openbox.c:559
+ msgid " --sync Run in synchronous mode\n"
+ msgstr " --sync Aja synkronointi-tilassa\n"
+
+-#: openbox/openbox.c:545
++#: openbox/openbox.c:560
+ msgid " --debug Display debugging output\n"
+ msgstr " --debug Näytä vianjäljitystuloste\n"
+
+-#: openbox/openbox.c:546
++#: openbox/openbox.c:561
+ msgid " --debug-focus Display debugging output for focus handling\n"
+ msgstr " --debug-focus Näytä vianjäljitystuloste ikkunavalitsimelle\n"
+
+-#: openbox/openbox.c:547
++#: openbox/openbox.c:562
+ msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+ msgstr " --debug-xinerama Jaa näyttö kahteen vale-xinerama-ruutuun\n"
+
+-#: openbox/openbox.c:548
++#: openbox/openbox.c:563
+ #, c-format
+ msgid ""
+ "\n"
+@@ -388,26 +378,26 @@ msgstr ""
+ "\n"
+ "Ilmoita virheistä: %s\n"
+
+-#: openbox/openbox.c:617
++#: openbox/openbox.c:645
+ msgid "--config-file requires an argument\n"
+ msgstr "--config-file tarvitsee argumentin\n"
+
+-#: openbox/openbox.c:660
++#: openbox/openbox.c:688
+ #, c-format
+ msgid "Invalid command line argument \"%s\"\n"
+ msgstr "Virheellinen valitsin \"%s\"\n"
+
+-#: openbox/screen.c:102 openbox/screen.c:190
++#: openbox/screen.c:103 openbox/screen.c:191
+ #, c-format
+ msgid "A window manager is already running on screen %d"
+ msgstr "Ikkunointiohjelma on jo käynnissä näytöllä %d"
+
+-#: openbox/screen.c:124
++#: openbox/screen.c:125
+ #, c-format
+ msgid "Could not acquire window manager selection on screen %d"
+ msgstr "Ikkunointiohjelman valinta ruudulla %d ei onnistunut"
+
+-#: openbox/screen.c:145
++#: openbox/screen.c:146
+ #, c-format
+ msgid "The WM on screen %d is not exiting"
+ msgstr "Ikkunointiohjelma ruudulla %d ei sulkeudu"
+@@ -416,8 +406,8 @@ msgstr "Ikkunointiohjelma ruudulla %d ei sulkeudu"
+ #. arguments, you can use %1$d for the first one and %2$d for the
+ #. second one. For example,
+ #. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+-#: openbox/screen.c:412
+-#, fuzzy, c-format
++#: openbox/screen.c:421
++#, c-format
+ msgid ""
+ "Openbox is configured for %d desktop, but the current session has %d. "
+ "Overriding the Openbox configuration."
+@@ -431,27 +421,27 @@ msgstr[1] ""
+ "Openbox on asetettu käyttämään %d työtilaa, mutta nykyisessä istunnossa "
+ "työtiloja on %d. Ohitetaan Openboxin asetus."
+
+-#: openbox/screen.c:1180
++#: openbox/screen.c:1203
+ #, c-format
+ msgid "desktop %i"
+ msgstr "työtila %i"
+
+-#: openbox/session.c:104
++#: openbox/session.c:105
+ #, c-format
+ msgid "Unable to make directory \"%s\": %s"
+ msgstr "Hakemiston \"%s\" luonti epäonnistui: %s"
+
+-#: openbox/session.c:466
++#: openbox/session.c:472
+ #, c-format
+ msgid "Unable to save the session to \"%s\": %s"
+ msgstr "Istuntoa ei voitu tallentaa hakemistoon \"%s\": %s"
+
+-#: openbox/session.c:605
++#: openbox/session.c:611
+ #, c-format
+ msgid "Error while saving the session to \"%s\": %s"
+ msgstr "Virhe tallennettaessa istuntoa hakemistoon \"%s\": %s"
+
+-#: openbox/session.c:842
++#: openbox/session.c:848
+ msgid "Not connected to a session manager"
+ msgstr "Ei yhteyttä istunnon hallintaan"
+
+@@ -489,5 +479,12 @@ msgstr "X-virhe: %s"
+ msgid "OK"
+ msgstr "OK"
+
++#~ msgid ""
++#~ "The SessionLogout action is not available since Openbox was built without "
++#~ "session management support"
++#~ msgstr ""
++#~ "SessionLogout tapahtuma ei ole suoritettavissa, koska Openbox käännettiin "
++#~ "ilman istunnon hallinnan tukea"
++
+ #~ msgid "Failed to execute \"%s\": %s"
+ #~ msgstr "Ohjelman \"%s\" suorittaminen epäonnistui: %s"
+diff --git a/po/pl.po b/po/pl.po
+index b0f5d52..00546d0 100644
+--- a/po/pl.po
++++ b/po/pl.po
+@@ -4,14 +4,15 @@
+ # Madej <madej@afn.no-ip.org>, 2004.
+ # Paweł Rusinek <p.rusinek@gmail.com>, 2007.
+ # Piotr Drąg <raven@pmail.pl>, 2007.
++# Jakub Łojewski <lojewski@ovi.com>, 2010.
+ #
+ msgid ""
+ msgstr ""
+ "Project-Id-Version: Openbox 3.4.3\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
+-"PO-Revision-Date: 2007-07-14 00:43+0200\n"
+-"Last-Translator: Piotr Drąg <raven@pmail.pl>\n"
++"POT-Creation-Date: 2010-03-11 14:26+0100\n"
++"PO-Revision-Date: 2010-03-11 13:55+0100\n"
++"Last-Translator: Jakub Łojewski <lojewski@ovi.com>\n"
+ "Language-Team: Polish <pl@li.org>\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+@@ -20,91 +21,84 @@ msgstr ""
+ #: openbox/actions.c:149
+ #, c-format
+ msgid "Invalid action \"%s\" requested. No such action exists."
+-msgstr ""
++msgstr "Wywołana akcja \"%s\" nie istnieje."
+
+ #: openbox/actions/execute.c:128
+ msgid "No"
+-msgstr ""
++msgstr "Nie"
+
+ #: openbox/actions/execute.c:129
+ msgid "Yes"
+-msgstr ""
++msgstr "Tak"
+
+ #: openbox/actions/execute.c:133
+ msgid "Execute"
+-msgstr ""
++msgstr "Wykonaj"
+
+ #: openbox/actions/execute.c:142
+ #, c-format
+ msgid "Failed to convert the path \"%s\" from utf8"
+ msgstr "Nie można przekonwertować ścieżki \"%s\" z UTF-8"
+
+-#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+-#: openbox/client.c:3465
++#: openbox/actions/exit.c:62 openbox/client.c:3506
+ msgid "Cancel"
+-msgstr ""
++msgstr "Anuluj"
+
+-#: openbox/actions/exit.c:53
++#: openbox/actions/exit.c:63
+ msgid "Exit"
+-msgstr ""
+-
+-#: openbox/actions/exit.c:56
+-msgid "Are you sure you want to exit Openbox?"
+-msgstr ""
+-
+-#: openbox/actions/exit.c:57
+-msgid "Exit Openbox"
+-msgstr ""
++msgstr "Wyjście"
+
+-#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+-#. name of the action you write in rc.xml
+-#: openbox/actions/session.c:43
+-msgid ""
+-"The SessionLogout action is not available since Openbox was built without "
+-"session management support"
+-msgstr ""
++#: openbox/actions/exit.c:67
++msgid "Are you sure you want to log out?"
++msgstr "Czy na pewno chcesz się wylogować?"
+
+-#: openbox/actions/session.c:65 openbox/actions/session.c:70
++#: openbox/actions/exit.c:68
+ msgid "Log Out"
+-msgstr ""
++msgstr "Wyloguj"
+
+-#: openbox/actions/session.c:69
+-msgid "Are you sure you want to log out?"
+-msgstr ""
++#: openbox/actions/exit.c:71
++msgid "Are you sure you want to exit Openbox?"
++msgstr "Czy na pewno chcesz opuścić Openboksa?"
++
++#: openbox/actions/exit.c:72
++msgid "Exit Openbox"
++msgstr "Opuść Openbox"
+
+-#: openbox/client.c:2012
++#: openbox/client.c:2024
+ msgid "Unnamed Window"
+-msgstr ""
++msgstr "Okno bez nazwy"
+
+-#: openbox/client.c:2026 openbox/client.c:2058
++#: openbox/client.c:2038 openbox/client.c:2070
+ msgid "Killing..."
+-msgstr ""
++msgstr "Kończenie..."
+
+-#: openbox/client.c:2028 openbox/client.c:2060
++#: openbox/client.c:2040 openbox/client.c:2072
+ msgid "Not Responding"
+-msgstr ""
++msgstr "Nie odpowiada"
+
+-#: openbox/client.c:3454
++#: openbox/client.c:3495
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to force it "
+ "to exit by sending the %s signal?"
+ msgstr ""
++"Okno \"%s\" nie odpowiada. Czy wymusić zakończenie poprzez wysłanie sygnału %"
++"s?"
+
+-#: openbox/client.c:3456
++#: openbox/client.c:3497
+ msgid "End Process"
+-msgstr ""
++msgstr "Zakończ proces"
+
+-#: openbox/client.c:3460
++#: openbox/client.c:3501
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to disconnect "
+ "it from the X server?"
+-msgstr ""
++msgstr "Okno \"%s\" nie odpowiada. Odłączyć je od serwera X?"
+
+-#: openbox/client.c:3462
++#: openbox/client.c:3503
+ msgid "Disconnect"
+-msgstr ""
++msgstr "Odłącz"
+
+ #: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
+ msgid "Go there..."
+@@ -190,7 +184,7 @@ msgstr "Wyświetl/ukryj _dekoracje"
+ msgid "_Close"
+ msgstr "Z_amknij"
+
+-#: openbox/config.c:781
++#: openbox/config.c:798
+ #, c-format
+ msgid "Invalid button \"%s\" specified in config file"
+ msgstr "Nieprawidłowy klawisz \"%s\" określony w pliku konfiguracyjnym"
+@@ -219,7 +213,7 @@ msgstr "Nieprawidłowe wyjście z pipe-menu \"%s\""
+ msgid "Attempted to access menu \"%s\" but it does not exist"
+ msgstr "Spróbowano uzyskać dostęp do menu \"%s\", ale ono nie istnieje"
+
+-#: openbox/menu.c:367 openbox/menu.c:368
++#: openbox/menu.c:370 openbox/menu.c:371
+ msgid "More..."
+ msgstr "Więcej..."
+
+@@ -254,48 +248,52 @@ msgstr "Serwer X nie obsługuje ustawień lokalnych."
+ msgid "Cannot set locale modifiers for the X server."
+ msgstr "Nie można ustawić modyfikatorów lokalnych dla serwera X."
+
+-#: openbox/openbox.c:263
++#: openbox/openbox.c:265
+ msgid "Unable to find a valid config file, using some simple defaults"
+ msgstr ""
+ "Nie można znaleźć prawidłowego pliku konfiguracyjnego, używanie "
+ "domyślnychwartości"
+
+-#: openbox/openbox.c:297
++#: openbox/openbox.c:299
+ msgid "Unable to load a theme."
+ msgstr "Nie można wczytać motywu."
+
+-#: openbox/openbox.c:377
++#: openbox/openbox.c:379
+ #, c-format
+ msgid ""
+ "One or more XML syntax errors were found while parsing the Openbox "
+ "configuration files. See stdout for more information. The last error seen "
+ "was in file \"%s\" line %d, with message: %s"
+ msgstr ""
++"Jeden lub więcej błędów składniowych XML zostało znalezionych podczas "
++"sprawdzania plików konfiguracyjnych. Zobacz stdout aby uzyskać więcej "
++"informacji. Ostatnio błąd znaleziono w pliku \"%s\" linia %d, z wiadomością: "
++"%s"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Openbox Syntax Error"
+-msgstr ""
++msgstr "Błąd składniowy Openboksa"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Close"
+ msgstr "Zamknij"
+
+-#: openbox/openbox.c:448
++#: openbox/openbox.c:463
+ #, c-format
+ msgid "Restart failed to execute new executable \"%s\": %s"
+ msgstr ""
+ "Wykonanie nowego pliku wykonywalnego \"%s\" podczas ponownego "
+ "uruchomienianie powiodło się: %s"
+
+-#: openbox/openbox.c:518 openbox/openbox.c:520
++#: openbox/openbox.c:533 openbox/openbox.c:535
+ msgid "Copyright (c)"
+ msgstr "Copyright (c)"
+
+-#: openbox/openbox.c:529
++#: openbox/openbox.c:544
+ msgid "Syntax: openbox [options]\n"
+ msgstr "Składnia: openbox [opcje]\n"
+
+-#: openbox/openbox.c:530
++#: openbox/openbox.c:545
+ msgid ""
+ "\n"
+ "Options:\n"
+@@ -303,30 +301,30 @@ msgstr ""
+ "\n"
+ "Opcje:\n"
+
+-#: openbox/openbox.c:531
++#: openbox/openbox.c:546
+ msgid " --help Display this help and exit\n"
+ msgstr " --help Wyświetla tę pomoc i kończy\n"
+
+-#: openbox/openbox.c:532
++#: openbox/openbox.c:547
+ msgid " --version Display the version and exit\n"
+ msgstr " --version Wyświetla wersję i kończy\n"
+
+-#: openbox/openbox.c:533
++#: openbox/openbox.c:548
+ msgid " --replace Replace the currently running window manager\n"
+ msgstr " --replace Zastępuje aktualnie działający menedżer okien\n"
+
+ #. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+ #. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+ #. fine to leave it as FILE though.
+-#: openbox/openbox.c:537
++#: openbox/openbox.c:552
+ msgid " --config-file FILE Specify the path to the config file to use\n"
+-msgstr ""
++msgstr " --config-file FILE Podaj ścieżkę do pliku konfiguracji\n"
+
+-#: openbox/openbox.c:538
++#: openbox/openbox.c:553
+ msgid " --sm-disable Disable connection to the session manager\n"
+ msgstr " --sm-disable Nie tworzy połączenia z menedżerem sesji\n"
+
+-#: openbox/openbox.c:539
++#: openbox/openbox.c:554
+ msgid ""
+ "\n"
+ "Passing messages to a running Openbox instance:\n"
+@@ -334,19 +332,19 @@ msgstr ""
+ "\n"
+ "Przekazywanie komunikatów do działającej instancji Openboksa:\n"
+
+-#: openbox/openbox.c:540
++#: openbox/openbox.c:555
+ msgid " --reconfigure Reload Openbox's configuration\n"
+ msgstr " --reconfigure Ponownie wczytuje pliki konfiguracyjne\n"
+
+-#: openbox/openbox.c:541
++#: openbox/openbox.c:556
+ msgid " --restart Restart Openbox\n"
+ msgstr " --restart Ponownie uruchamia Openboksa\n"
+
+-#: openbox/openbox.c:542
++#: openbox/openbox.c:557
+ msgid " --exit Exit Openbox\n"
+-msgstr ""
++msgstr " --exit Opuść Openbox\n"
+
+-#: openbox/openbox.c:543
++#: openbox/openbox.c:558
+ msgid ""
+ "\n"
+ "Debugging options:\n"
+@@ -354,24 +352,24 @@ msgstr ""
+ "\n"
+ "Opcje debugowania:\n"
+
+-#: openbox/openbox.c:544
++#: openbox/openbox.c:559
+ msgid " --sync Run in synchronous mode\n"
+ msgstr " --sync Uruchamia w trybie synchronicznym\n"
+
+-#: openbox/openbox.c:545
++#: openbox/openbox.c:560
+ msgid " --debug Display debugging output\n"
+ msgstr " --debug Wyświetla informacje o debugowaniu\n"
+
+-#: openbox/openbox.c:546
++#: openbox/openbox.c:561
+ msgid " --debug-focus Display debugging output for focus handling\n"
+ msgstr ""
+ " --debug-focus Wyświetla wyjście debugowania obsługi aktywacji\n"
+
+-#: openbox/openbox.c:547
++#: openbox/openbox.c:562
+ msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+ msgstr " --debug-xinerama Dzieli ekran na sztuczne ekrany xineramy\n"
+
+-#: openbox/openbox.c:548
++#: openbox/openbox.c:563
+ #, c-format
+ msgid ""
+ "\n"
+@@ -380,26 +378,26 @@ msgstr ""
+ "\n"
+ "Proszę zgłaszać błędy (w języku angielskim) pod adresem %s\n"
+
+-#: openbox/openbox.c:617
++#: openbox/openbox.c:645
+ msgid "--config-file requires an argument\n"
+-msgstr ""
++msgstr "--config-file wymaga argumentu\n"
+
+-#: openbox/openbox.c:660
++#: openbox/openbox.c:688
+ #, c-format
+ msgid "Invalid command line argument \"%s\"\n"
+ msgstr "Nieprawidłowy argument wiersza poleceń \"%s\"\n"
+
+-#: openbox/screen.c:102 openbox/screen.c:190
++#: openbox/screen.c:103 openbox/screen.c:191
+ #, c-format
+ msgid "A window manager is already running on screen %d"
+ msgstr "Menedżer okien jest już uruchomiony na ekranie %d"
+
+-#: openbox/screen.c:124
++#: openbox/screen.c:125
+ #, c-format
+ msgid "Could not acquire window manager selection on screen %d"
+ msgstr "Nie można uzyskać wyboru menedżera okien na ekranie %d"
+
+-#: openbox/screen.c:145
++#: openbox/screen.c:146
+ #, c-format
+ msgid "The WM on screen %d is not exiting"
+ msgstr "Menedżer okien na ekranie %d nie kończy działania"
+@@ -408,7 +406,7 @@ msgstr "Menedżer okien na ekranie %d nie kończy działania"
+ #. arguments, you can use %1$d for the first one and %2$d for the
+ #. second one. For example,
+ #. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+-#: openbox/screen.c:412
++#: openbox/screen.c:421
+ #, c-format
+ msgid ""
+ "Openbox is configured for %d desktop, but the current session has %d. "
+@@ -419,29 +417,29 @@ msgid_plural ""
+ msgstr[0] ""
+ msgstr[1] ""
+
+-#: openbox/screen.c:1180
++#: openbox/screen.c:1203
+ #, c-format
+ msgid "desktop %i"
+ msgstr "pulpit %i"
+
+-#: openbox/session.c:104
++#: openbox/session.c:105
+ #, c-format
+ msgid "Unable to make directory \"%s\": %s"
+ msgstr "Nie można utworzyć katalogu \"%s\": %s"
+
+-#: openbox/session.c:466
++#: openbox/session.c:472
+ #, c-format
+ msgid "Unable to save the session to \"%s\": %s"
+ msgstr "Nie można zapisać sesji do \"%s\": %s"
+
+-#: openbox/session.c:605
++#: openbox/session.c:611
+ #, c-format
+ msgid "Error while saving the session to \"%s\": %s"
+ msgstr "Wystąpił błąd podczas zapisywania sesji do \"%s\": %s"
+
+-#: openbox/session.c:842
++#: openbox/session.c:848
+ msgid "Not connected to a session manager"
+-msgstr ""
++msgstr "Nie podłączono do menedżera sesji"
+
+ #: openbox/startupnotify.c:243
+ #, c-format
+@@ -476,7 +474,14 @@ msgstr "Błąd X: %s"
+
+ #: openbox/prompt.c:200
+ msgid "OK"
+-msgstr ""
++msgstr "OK"
++
++#~ msgid ""
++#~ "The SessionLogout action is not available since Openbox was built without "
++#~ "session management support"
++#~ msgstr ""
++#~ "SessionLogout jest niedostępne, ponieważ Openbox został stworzony bez "
++#~ "wsparcia dla zarządzania sesją"
+
+ #~ msgid "Failed to execute \"%s\": %s"
+ #~ msgstr "Wykonanie \"%s\" nie powiodło się: %s"
+diff --git a/po/pt.po b/po/pt.po
+index f962756..e7504e9 100644
+--- a/po/pt.po
++++ b/po/pt.po
+@@ -1,30 +1,30 @@
+ # Portuguese messages for openbox
+-# Copyright (C) 2007 Mikael Magnusson
++# Copyright (C) 2010 Mikael Magnusson
+ # This file is distributed under the same license as the openbox package.
+-# Gonalo Ferreira <gonsas@gmail.com>, 2006.
+-# althaser <althaser@gmail.com>, 2008.
++# Gonçalo Ferreira <gonsas@gmail.com>, 2006.
++# Pedro Beja <althaser@gmail.com>, 2007 2008 2010.
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: Openbox 3.4.7\n"
++"Project-Id-Version: Openbox 3.4.11.2\n"
+ "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
+-"PO-Revision-Date: 2008-03-16 15:46+0100\n"
+-"Last-Translator: althaser <althaser@gmail.com>\n"
++"POT-Creation-Date: 2010-05-14 15:50+0200\n"
++"PO-Revision-Date: 2010-05-14 15:51+0100\n"
++"Last-Translator: Pedro Beja <althaser@gmail.com>\n"
+ "Language-Team: None\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=ISO-8859-1\n"
++"Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+ #: openbox/actions.c:149
+ #, c-format
+ msgid "Invalid action \"%s\" requested. No such action exists."
+-msgstr "Pedido de aco \"%s\" invlido. No existem quaisquer aces."
++msgstr "Pedido de acção \"%s\" inválido. Não existem quaisquer acções."
+
+ #: openbox/actions/execute.c:128
+ msgid "No"
+-msgstr "No"
++msgstr "Não"
+
+ #: openbox/actions/execute.c:129
+ msgid "Yes"
+@@ -39,76 +39,64 @@ msgstr "Executar"
+ msgid "Failed to convert the path \"%s\" from utf8"
+ msgstr "Falha a converter o caminho \"%s\" do utf8"
+
+-#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+-#: openbox/client.c:3465
++#: openbox/actions/exit.c:62 openbox/client.c:3506
+ msgid "Cancel"
+ msgstr "Cancelar"
+
+-#: openbox/actions/exit.c:53
++#: openbox/actions/exit.c:63
+ msgid "Exit"
+ msgstr "Sair"
+
+-#: openbox/actions/exit.c:56
++#: openbox/actions/exit.c:67
++msgid "Are you sure you want to log out?"
++msgstr "Tem a certeza que pretende fazer log out?"
++
++#: openbox/actions/exit.c:68
++msgid "Log Out"
++msgstr "Log Out"
++
++#: openbox/actions/exit.c:71
+ msgid "Are you sure you want to exit Openbox?"
+ msgstr "Tem a certeza que pretende sair do Openbox?"
+
+-#: openbox/actions/exit.c:57
++#: openbox/actions/exit.c:72
+ msgid "Exit Openbox"
+ msgstr "Sair do Openbox"
+
+-#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+-#. name of the action you write in rc.xml
+-#: openbox/actions/session.c:43
+-msgid ""
+-"The SessionLogout action is not available since Openbox was built without "
+-"session management support"
+-msgstr ""
+-"A aco SessoLogout no est disponvel visto que o Openbox foi construdo "
+-"sem suporte a gesto de sesso"
+-
+-#: openbox/actions/session.c:65 openbox/actions/session.c:70
+-msgid "Log Out"
+-msgstr "Log Out"
+-
+-#: openbox/actions/session.c:69
+-msgid "Are you sure you want to log out?"
+-msgstr "Tem a certeza que pretende fazer log out?"
+-
+-#: openbox/client.c:2012
++#: openbox/client.c:2024
+ msgid "Unnamed Window"
+ msgstr "Janela sem nome"
+
+-#: openbox/client.c:2026 openbox/client.c:2058
++#: openbox/client.c:2038 openbox/client.c:2070
+ msgid "Killing..."
+ msgstr "Terminando..."
+
+-#: openbox/client.c:2028 openbox/client.c:2060
++#: openbox/client.c:2040 openbox/client.c:2072
+ msgid "Not Responding"
+-msgstr "No est a responder"
++msgstr "Não está a responder"
+
+-#: openbox/client.c:3454
++#: openbox/client.c:3495
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to force it "
+ "to exit by sending the %s signal?"
+ msgstr ""
+-"A janela \"%s\" parece no estar a responder. Pretende for-la a sair "
+-"enviando o sinal %s?"
++"A janela \"%s\" parece não estar a responder. Quer forçá-la a sair enviando "
++"o sinal %s?"
+
+-#: openbox/client.c:3456
++#: openbox/client.c:3497
+ msgid "End Process"
+ msgstr "Terminar Processo"
+
+-#: openbox/client.c:3460
++#: openbox/client.c:3501
+ #, c-format
+ msgid ""
+ "The window \"%s\" does not seem to be responding. Do you want to disconnect "
+ "it from the X server?"
+ msgstr ""
+-"A janela \"%s\" parece no estar a responder. Pretende deslig-la do "
+-"servidor X?"
++"A janela \"%s\" parece não estar a responder. Quer desligá-la do servidor X?"
+
+-#: openbox/client.c:3462
++#: openbox/client.c:3503
+ msgid "Disconnect"
+ msgstr "Desligar"
+
+@@ -118,15 +106,15 @@ msgstr "Ir para..."
+
+ #: openbox/client_list_combined_menu.c:94
+ msgid "Manage desktops"
+-msgstr "Gerir reas de trabalho"
++msgstr "Gerir áreas de trabalho"
+
+ #: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
+ msgid "_Add new desktop"
+-msgstr "_Adicionar nova rea de trabalho"
++msgstr "_Adicionar nova área de trabalho"
+
+ #: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
+ msgid "_Remove last desktop"
+-msgstr "_Remover a ltima rea de trabalho"
++msgstr "_Remover última área de trabalho"
+
+ #: openbox/client_list_combined_menu.c:149
+ msgid "Windows"
+@@ -134,11 +122,11 @@ msgstr "Janelas"
+
+ #: openbox/client_list_menu.c:203
+ msgid "Desktops"
+-msgstr "reas de trabalho"
++msgstr "Áreas de trabalho"
+
+ #: openbox/client_menu.c:258
+ msgid "All desktops"
+-msgstr "Todas as reas de trabalho"
++msgstr "Todas as áreas de trabalho"
+
+ #: openbox/client_menu.c:370
+ msgid "_Layer"
+@@ -158,11 +146,11 @@ msgstr "Sempre no _fundo"
+
+ #: openbox/client_menu.c:379
+ msgid "_Send to desktop"
+-msgstr "Enviar para rea de _trabalho"
++msgstr "Enviar para área de _trabalho"
+
+ #: openbox/client_menu.c:383
+ msgid "Client menu"
+-msgstr "Menu do cliente"
++msgstr "Menu cliente"
+
+ #: openbox/client_menu.c:393
+ msgid "R_estore"
+@@ -196,57 +184,57 @@ msgstr "Des/_Decorar"
+ msgid "_Close"
+ msgstr "_Fechar"
+
+-#: openbox/config.c:781
++#: openbox/config.c:798
+ #, c-format
+ msgid "Invalid button \"%s\" specified in config file"
+-msgstr "Boto invlido \"%s\" especificado no ficheiro de configurao"
++msgstr "Botão inválido \"%s\" especificado no ficheiro de configuração"
+
+ #: openbox/keyboard.c:157
+ msgid "Conflict with key binding in config file"
+-msgstr "Conflito com tecla de atalho no ficheiro de configurao"
++msgstr "Conflito com tecla de atalho no ficheiro de configuração"
+
+ #: openbox/menu.c:102 openbox/menu.c:110
+ #, c-format
+ msgid "Unable to find a valid menu file \"%s\""
+-msgstr "Incapaz de encontrar um ficheiro de menu \"%s\" vlido"
++msgstr "Incapaz de encontrar um ficheiro de menu válido \"%s\""
+
+ #: openbox/menu.c:170
+ #, c-format
+ msgid "Failed to execute command for pipe-menu \"%s\": %s"
+-msgstr "Falha no comando de execuo para o menu de processamento \"%s\": %s"
++msgstr "Falha a executar comando para o menu de processamento \"%s\": %s"
+
+ #: openbox/menu.c:184
+ #, c-format
+ msgid "Invalid output from pipe-menu \"%s\""
+-msgstr "Resultado invlido do menu de processamento \"%s\""
++msgstr "Resultado inválido do menu de processamento \"%s\""
+
+ #: openbox/menu.c:197
+ #, c-format
+ msgid "Attempted to access menu \"%s\" but it does not exist"
+-msgstr "Tentou aceder ao menu \"%s\" mas ele no existe"
++msgstr "Tentou aceder ao menu \"%s\" mas ele não existe"
+
+-#: openbox/menu.c:367 openbox/menu.c:368
++#: openbox/menu.c:370 openbox/menu.c:371
+ msgid "More..."
+ msgstr "Mais..."
+
+ #: openbox/mouse.c:373
+ #, c-format
+ msgid "Invalid button \"%s\" in mouse binding"
+-msgstr "Boto invlido \"%s\" no atalho do rato"
++msgstr "Botão inválido \"%s\" no atalho do rato"
+
+ #: openbox/mouse.c:379
+ #, c-format
+ msgid "Invalid context \"%s\" in mouse binding"
+-msgstr "Contexto invlido \"%s\" no atalho do rato"
++msgstr "Contexto inválido \"%s\" no atalho do rato"
+
+ #: openbox/openbox.c:133
+ #, c-format
+ msgid "Unable to change to home directory \"%s\": %s"
+-msgstr "Incapaz de mudar para o directrio home \"%s\": %s"
++msgstr "Incapaz de mudar para o directório home \"%s\": %s"
+
+ #: openbox/openbox.c:152
+ msgid "Failed to open the display from the DISPLAY environment variable."
+-msgstr "Falha ao abrir o ecr da varivel de ambiente DISPLAY."
++msgstr "Falha ao abrir o ecrã da variável de ambiente DISPLAY."
+
+ #: openbox/openbox.c:183
+ msgid "Failed to initialize the obrender library."
+@@ -254,23 +242,23 @@ msgstr "Falha ao inicializar a biblioteca obrender"
+
+ #: openbox/openbox.c:194
+ msgid "X server does not support locale."
+-msgstr "O servidor X no suporta o locale."
++msgstr "O servidor X não suporta o locale."
+
+ #: openbox/openbox.c:196
+ msgid "Cannot set locale modifiers for the X server."
+-msgstr "No pode definir locales modificados para o servidor X."
++msgstr "Não é possível configurar modificadores de locale para o servidor X."
+
+-#: openbox/openbox.c:263
++#: openbox/openbox.c:265
+ msgid "Unable to find a valid config file, using some simple defaults"
+ msgstr ""
+-"Incapaz de encontrar um ficheiro de configurao vlido, usando algumas "
+-"configuraes simples de omisso"
++"Incapaz de encontrar um ficheiro de configuração válido, usando alguns "
++"valores simples de omissão"
+
+-#: openbox/openbox.c:297
++#: openbox/openbox.c:299
+ msgid "Unable to load a theme."
+ msgstr "Incapaz de carregar o tema."
+
+-#: openbox/openbox.c:377
++#: openbox/openbox.c:379
+ #, c-format
+ msgid ""
+ "One or more XML syntax errors were found while parsing the Openbox "
+@@ -278,111 +266,111 @@ msgid ""
+ "was in file \"%s\" line %d, with message: %s"
+ msgstr ""
+ "Um ou mais erros de sintaxe do XML foram encontrados enquanto analizava os "
+-"ficheiros de configurao do Openbox. Veja o stdout para mais informaes. "
+-"O ltimo erro visto foi no ficheiro \"%s\" linha %d, com a mensagem: %s"
++"ficheiros de configuração do Openbox. Veja o stdout para mais informações. "
++"O último erro visto foi no ficheiro \"%s\" linha %d, com a mensagem: %s"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Openbox Syntax Error"
+ msgstr "Erro de Sintaxe do Openbox"
+
+-#: openbox/openbox.c:379
++#: openbox/openbox.c:381
+ msgid "Close"
+ msgstr "Fechar"
+
+-#: openbox/openbox.c:448
++#: openbox/openbox.c:463
+ #, c-format
+ msgid "Restart failed to execute new executable \"%s\": %s"
+-msgstr "Falha a reiniciar a execuo de um novo executvel \"%s\": %s"
++msgstr "Falha a reiniciar a execução de um novo executável \"%s\": %s"
+
+-#: openbox/openbox.c:518 openbox/openbox.c:520
++#: openbox/openbox.c:533 openbox/openbox.c:535
+ msgid "Copyright (c)"
+ msgstr "Direitos de autor (c)"
+
+-#: openbox/openbox.c:529
++#: openbox/openbox.c:544
+ msgid "Syntax: openbox [options]\n"
+-msgstr "Sintaxe: openbox [opes]\n"
++msgstr "Sintaxe: openbox [opções]\n"
+
+-#: openbox/openbox.c:530
++#: openbox/openbox.c:545
+ msgid ""
+ "\n"
+ "Options:\n"
+ msgstr ""
+ "\n"
+-"Opes:\n"
++"Opções:\n"
+
+-#: openbox/openbox.c:531
++#: openbox/openbox.c:546
+ msgid " --help Display this help and exit\n"
+ msgstr " --help Mostra esta ajuda e sai\n"
+
+-#: openbox/openbox.c:532
++#: openbox/openbox.c:547
+ msgid " --version Display the version and exit\n"
+-msgstr " --version Mostra a verso e sai\n"
++msgstr " --version Mostra a versão e sai\n"
+
+-#: openbox/openbox.c:533
++#: openbox/openbox.c:548
+ msgid " --replace Replace the currently running window manager\n"
+ msgstr " --replace Substitui o corrente gestor de janelas\n"
+
+ #. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+ #. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+ #. fine to leave it as FILE though.
+-#: openbox/openbox.c:537
++#: openbox/openbox.c:552
+ msgid " --config-file FILE Specify the path to the config file to use\n"
+ msgstr ""
+-" --config-file FICHEIRO\n"
+-" Especifica o caminho do ficheiro de configurao para "
++" --config-file ficheiro\n"
++" Especifica o caminho do ficheiro de configuração a "
+ "usar\n"
+
+-#: openbox/openbox.c:538
++#: openbox/openbox.c:553
+ msgid " --sm-disable Disable connection to the session manager\n"
+-msgstr " --sm-disable Desactiva a ligao com o gestor de sesses\n"
++msgstr " --sm-disable Desactiva a ligação com o gestor de sessões\n"
+
+-#: openbox/openbox.c:539
++#: openbox/openbox.c:554
+ msgid ""
+ "\n"
+ "Passing messages to a running Openbox instance:\n"
+ msgstr ""
+ "\n"
+-"Passando mensagens para uma solicitao do Openbox em execuo\n"
++"Passando mensagens para uma instância do Openbox em execução:\n"
+
+-#: openbox/openbox.c:540
++#: openbox/openbox.c:555
+ msgid " --reconfigure Reload Openbox's configuration\n"
+-msgstr " --reconfigure Recarrega a configurao do Openbox\n"
++msgstr " --reconfigure Recarrega a configuração do Openbox\n"
+
+-#: openbox/openbox.c:541
++#: openbox/openbox.c:556
+ msgid " --restart Restart Openbox\n"
+ msgstr " --restart Reinicia o Openbox\n"
+
+-#: openbox/openbox.c:542
++#: openbox/openbox.c:557
+ msgid " --exit Exit Openbox\n"
+ msgstr " --sair Sai do Openbox\n"
+
+-#: openbox/openbox.c:543
++#: openbox/openbox.c:558
+ msgid ""
+ "\n"
+ "Debugging options:\n"
+ msgstr ""
+ "\n"
+-"Opes de depurao:\n"
++"Opções de depuração:\n"
+
+-#: openbox/openbox.c:544
++#: openbox/openbox.c:559
+ msgid " --sync Run in synchronous mode\n"
+ msgstr " --sync Executa em modo sincronizado\n"
+
+-#: openbox/openbox.c:545
++#: openbox/openbox.c:560
+ msgid " --debug Display debugging output\n"
+-msgstr " --debug Mostra o resultado da depurao\n"
++msgstr " --debug Mostra o resultado da depuração\n"
+
+-#: openbox/openbox.c:546
++#: openbox/openbox.c:561
+ msgid " --debug-focus Display debugging output for focus handling\n"
+ msgstr ""
+-" --debug-focus Mostra o resultado da depurao para manipulao em "
++" --debug-focus Mostra o resultado de depuração para manipulação de "
+ "foco\n"
+
+-#: openbox/openbox.c:547
++#: openbox/openbox.c:562
+ msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+-msgstr " --debug-xinerama Divide o ecr em falsos ecrs xinerama\n"
++msgstr " --debug-xinerama Divide o ecrã em falsos ecrãs xinerama\n"
+
+-#: openbox/openbox.c:548
++#: openbox/openbox.c:563
+ #, c-format
+ msgid ""
+ "\n"
+@@ -391,35 +379,35 @@ msgstr ""
+ "\n"
+ "Por favor reporte os erros em %s\n"
+
+-#: openbox/openbox.c:617
++#: openbox/openbox.c:645
+ msgid "--config-file requires an argument\n"
+ msgstr "--config-file requer um argumento\n"
+
+-#: openbox/openbox.c:660
++#: openbox/openbox.c:688
+ #, c-format
+ msgid "Invalid command line argument \"%s\"\n"
+-msgstr "Argumento invlido na linha de comandos \"%s\"\n"
++msgstr "Argumento inválido na linha de comandos \"%s\"\n"
+
+-#: openbox/screen.c:102 openbox/screen.c:190
++#: openbox/screen.c:103 openbox/screen.c:191
+ #, c-format
+ msgid "A window manager is already running on screen %d"
+-msgstr "Um gestor de janelas j est em execuo no ecr %d"
++msgstr "Um gestor de janelas já está em execução no ecrã %d"
+
+-#: openbox/screen.c:124
++#: openbox/screen.c:125
+ #, c-format
+ msgid "Could not acquire window manager selection on screen %d"
+-msgstr "No consegui adequirir o gestor de janelas selecionado no ecr %d"
++msgstr "Não consegui adequirir o gestor de janelas selecionado no ecrã %d"
+
+-#: openbox/screen.c:145
++#: openbox/screen.c:146
+ #, c-format
+ msgid "The WM on screen %d is not exiting"
+-msgstr "O gestor de janelas no ecr %d no est a fechar"
++msgstr "O gestor de janelas no ecrã %d não está a fechar"
+
+ #. TRANSLATORS: If you need to specify a different order of the
+ #. arguments, you can use %1$d for the first one and %2$d for the
+ #. second one. For example,
+ #. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+-#: openbox/screen.c:412
++#: openbox/screen.c:421
+ #, c-format
+ msgid ""
+ "Openbox is configured for %d desktop, but the current session has %d. "
+@@ -428,35 +416,35 @@ msgid_plural ""
+ "Openbox is configured for %d desktops, but the current session has %d. "
+ "Overriding the Openbox configuration."
+ msgstr[0] ""
+-"O Openbox est configurado para %d rea de trabalho, mas a sesso corrente "
+-"tem %d. Sobrescrevendo a configurao do Openbox."
++"O Openbox está configurado para %d área de trabalho, mas a sessão corrente "
++"tem %d. Sobrescrevendo a configuração do Openbox."
+ msgstr[1] ""
+-"O Openbox est configurado para %d reas de trabalho, mas a sesso corrente "
+-"tem %d. Sobrescrevendo a configurao do Openbox."
++"O Openbox está configurado para %d áreas de trabalho, mas a sessão corrente "
++"tem %d. Sobrescrevendo a configuração do Openbox."
+
+-#: openbox/screen.c:1180
++#: openbox/screen.c:1203
+ #, c-format
+ msgid "desktop %i"
+-msgstr "rea de trabalho %i"
++msgstr "área de trabalho %i"
+
+-#: openbox/session.c:104
++#: openbox/session.c:105
+ #, c-format
+ msgid "Unable to make directory \"%s\": %s"
+-msgstr "Incapaz de criar o directrio \"%s\": %s "
++msgstr "Incapaz de criar o directório \"%s\": %s"
+
+-#: openbox/session.c:466
++#: openbox/session.c:472
+ #, c-format
+ msgid "Unable to save the session to \"%s\": %s"
+-msgstr "Incapaz de guardar a sesso em \"%s\": %s"
++msgstr "Incapaz de guardar a sessão em \"%s\": %s"
+
+-#: openbox/session.c:605
++#: openbox/session.c:611
+ #, c-format
+ msgid "Error while saving the session to \"%s\": %s"
+-msgstr "Erro enquanto guardava a sesso em \"%s\": %s"
++msgstr "Erro enquanto guardo a sessão em \"%s\": %s"
+
+-#: openbox/session.c:842
++#: openbox/session.c:848
+ msgid "Not connected to a session manager"
+-msgstr "Desligado do gestor de sesso"
++msgstr "Não está ligado a um gestor de sessões"
+
+ #: openbox/startupnotify.c:243
+ #, c-format
+@@ -466,22 +454,22 @@ msgstr "Executando %s"
+ #: openbox/translate.c:59
+ #, c-format
+ msgid "Invalid modifier key \"%s\" in key/mouse binding"
+-msgstr "Chave modificadora \"%s\" invlida no atalho de tecla/rato"
++msgstr "Chave modificadora inválida \"%s\" no atalho de tecla/rato"
+
+ #: openbox/translate.c:138
+ #, c-format
+ msgid "Invalid key code \"%s\" in key binding"
+-msgstr "Cdigo chave \"%s\" invlido na tecla de atalho"
++msgstr "Código chave inválido \"%s\" na tecla de atalho"
+
+ #: openbox/translate.c:145
+ #, c-format
+ msgid "Invalid key name \"%s\" in key binding"
+-msgstr "Nome de chave \"%s\" invlido na tecla de atalho"
++msgstr "Nome de chave inválido \"%s\" na tecla de atalho"
+
+ #: openbox/translate.c:151
+ #, c-format
+ msgid "Requested key \"%s\" does not exist on the display"
+-msgstr "Chave requerida \"%s\" no existe no ecr"
++msgstr "Chave requerida \"%s\" não existe no ecrã"
+
+ #: openbox/xerror.c:40
+ #, c-format
+@@ -492,8 +480,15 @@ msgstr "Erro no X: %s"
+ msgid "OK"
+ msgstr "OK"
+
++#~ msgid ""
++#~ "The SessionLogout action is not available since Openbox was built without "
++#~ "session management support"
++#~ msgstr ""
++#~ "A acção SessionLogout não está disponível visto que o Openbox foi "
++#~ "construído sem suporte à gestão de sessões"
++
+ #~ msgid "Failed to execute \"%s\": %s"
+ #~ msgstr "Falha a executar \"%s\": %s"
+
+ #~ msgid "Invalid use of action \"%s\". Action will be ignored."
+-#~ msgstr "Uso invlido da aco \"%s\". A aco ser ignorada."
++#~ msgstr "Uso inválido da acção \"%s\". A acção será ignorada."
+diff --git a/themes/Clearlooks/openbox-3/themerc b/themes/Clearlooks/openbox-3/themerc
+index 1dde5fb..4663999 100644
+--- a/themes/Clearlooks/openbox-3/themerc
++++ b/themes/Clearlooks/openbox-3/themerc
+@@ -1,12 +1,12 @@
+ !# Clearlooks-Evolving
+-!# Clearlooks as it evolves in gnome-svn...
+-!# Last updated 19/01/08
++!# Clearlooks as it evolves in gnome-git...
++!# Last updated 09/03/10
+
+ # Fonts
+ # these are really halos, but who cares?
+
+ *.font: shadow=n
+-window.active.label.text.font:shadow=y:shadowtint=25:shadowoffset=1
++window.active.label.text.font:shadow=y:shadowtint=30:shadowoffset=1
+ window.inactive.label.text.font:shadow=y:shadowtint=00:shadowoffset=0
+ menu.items.font:shadow=y:shadowtint=0:shadowoffset=1
+
+@@ -25,11 +25,11 @@ menu.overlap: 2
+ *.bg.highlight: 50
+ *.bg.shadow: 05
+
+-window.active.title.bg.highlight: 40
+-window.active.title.bg.shadow: 00
++window.active.title.bg.highlight: 35
++window.active.title.bg.shadow: 05
+
+ window.inactive.title.bg.highlight: 30
+-window.inactive.title.bg.shadow: 00
++window.inactive.title.bg.shadow: 05
+
+ window.*.grip.bg.highlight: 50
+ window.*.grip.bg.shadow: 30
+@@ -61,6 +61,11 @@ menu.items.active.bg.colorTo.splitTo: #80a7d6
+ menu.items.active.bg.border.color: #4b6e99
+ menu.items.active.text.color: #ffffff
+
++menu.separator.width: 1
++menu.separator.padding.width: 0
++menu.separator.padding.height: 3
++menu.separator.color: #aaaaaa
++
+ !# set handles here and only the once?
+
+ window.*.handle.bg: Raised solid
+@@ -71,9 +76,6 @@ window.*.grip.bg.color: #eaebec
+
+ !# Active
+
+-!# no handles - kind of closer to the clearlooks border, maybe?
+-!#window.active.border.color: #455d7c
+-
+ window.*.border.color: #585a5d
+
+ window.active.title.separator.color: #4e76a8
+@@ -135,7 +137,7 @@ window.inactive.button.*.image.color: #6D6C6C
+ !# osd (pop ups and what not, dock?)
+
+ osd.border.width: 1
+-osd.border.color: #999
++osd.border.color: #aaaaaa
+
+ osd.bg: flat border gradient splitvertical
+ osd.bg.color: #F0EFEE
diff --git a/meta-oe/recipes-graphics/openbox/openbox_3.4.11.2.bb b/meta-oe/recipes-graphics/openbox/openbox_3.4.11.2.bb
new file mode 100644
index 0000000000..65349a1dfd
--- /dev/null
+++ b/meta-oe/recipes-graphics/openbox/openbox_3.4.11.2.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "openbox Window Manager"
+SECTION = "x11/wm"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://icculus.org/openbox/releases/openbox-${PV}.tar.gz \
+ file://fix-dialog-buttons.patch;patch=1 \
+ file://fix-decorations.patch;patch=1"
+
+SRC_URI[md5sum] = "30e669134fa81df810fe7d1dc59cd931"
+SRC_URI[sha256sum] = "2e7579389c30e6bb08cc721a2c1af512e049fec2670e71715aa1c4e129ec349d"
+
+inherit autotools gettext update-alternatives
+
+ALTERNATIVE_PATH = "${bindir}/openbox"
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PRIORITY = "10"
+
+EXTRA_OECONF += "--with-plugins=none"
+
+PACKAGES =+ "${PN}-core ${PN}-lxde ${PN}-gnome"
+
+PACKAGES_DYNAMIC += "${PN}-theme-*"
+
+python populate_packages_prepend() {
+ theme_dir = bb.data.expand('${datadir}/themes/', d)
+ theme_name = bb.data.expand('${PN}-theme-%s', d)
+ do_split_packages(d, theme_dir, '(.*)', theme_name, '${PN} theme for %s', extra_depends='', allow_dirs=True)
+}
+
+RDEPENDS_${PN} += "${PN}-core"
+FILES_${PN}-core = "${bindir}/openbox ${libdir}/*${SOLIBS}"
+
+FILES_${PN}-lxde += "${datadir}/lxde/ \
+ ${datadir}/lxpanel \
+ ${datadir}/xsessions \
+ ${datadir}/icons"
+
+FILES_${PN}-gnome += "${datadir}/gnome/"