[oe] [PATCH][meta-oe 7/7] openbox: add 3.4.11.2

Otavio Salvador otavio at ossystems.com.br
Fri Feb 17 17:42:35 UTC 2012


This version inclues O.S. Systems' internal tree fixes and a sync
against 3.4-working branch.

Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
---
 .../openbox/openbox/fix-decorations.patch          |   73 +
 .../openbox/openbox/fix-dialog-buttons.patch       |   38 +
 .../openbox/openbox/sync-with-3.4-working.patch    | 2739 ++++++++++++++++++++
 .../recipes-graphics/openbox/openbox_3.4.11.2.bb   |   40 +
 4 files changed, 2890 insertions(+), 0 deletions(-)
 create mode 100644 meta-oe/recipes-graphics/openbox/openbox/fix-decorations.patch
 create mode 100644 meta-oe/recipes-graphics/openbox/openbox/fix-dialog-buttons.patch
 create mode 100644 meta-oe/recipes-graphics/openbox/openbox/sync-with-3.4-working.patch
 create mode 100644 meta-oe/recipes-graphics/openbox/openbox_3.4.11.2.bb

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 0000000..e3489b7
--- /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 0000000..02486ee
--- /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 0000000..6cd91b9
--- /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 at 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 at 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 at gmail.com>\n"
+ "Language-Team: Estonian <et at 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 at 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 at afn.no-ip.org>, 2004.
+ # Paweł Rusinek <p.rusinek at gmail.com>, 2007.
+ # Piotr DrÄ…g <raven at pmail.pl>, 2007.
++# Jakub Łojewski <lojewski at 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 at 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 at ovi.com>\n"
+ "Language-Team: Polish <pl at 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.
+-# Gonçalo Ferreira <gonsas at gmail.com>, 2006.
+-# althaser <althaser at gmail.com>, 2008.
++# Gonçalo Ferreira <gonsas at gmail.com>, 2006.
++# Pedro Beja <althaser at 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 at 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 at 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 acção \"%s\" inválido. Não existem quaisquer acções."
++msgstr "Pedido de acção \"%s\" inválido. Não existem quaisquer acções."
+ 
+ #: openbox/actions/execute.c:128
+ msgid "No"
+-msgstr "Não"
++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 acção SessãoLogout não está disponível visto que o Openbox foi construído "
+-"sem suporte a gestão de sessão"
+-
+-#: 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 "Não 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 não 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 não 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 "Botão inválido \"%s\" especificado no ficheiro de configuração"
++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 configuração"
++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\" válido"
++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 execução 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 inválido 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 não 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 "Botão inválido \"%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 inválido \"%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 directório 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 variável 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 não 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 "Não 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 configuração válido, usando algumas "
+-"configurações simples de omissão"
++"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 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"
++"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 execução de um novo executável \"%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 [opções]\n"
++msgstr "Sintaxe: openbox [opções]\n"
+ 
+-#: openbox/openbox.c:530
++#: openbox/openbox.c:545
+ msgid ""
+ "\n"
+ "Options:\n"
+ msgstr ""
+ "\n"
+-"Opções:\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 versão 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 configuração 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 ligação com o gestor de sessões\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 solicitação do Openbox em execução\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 configuração 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"
+-"Opções de depuração:\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 depuração\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 depuração para manipulação 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 ecrãs 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 inválido 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 execução 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 "Não 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 não 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 sessão corrente "
+-"tem %d.  Sobrescrevendo a configuração 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 sessão corrente "
+-"tem %d.  Sobrescrevendo a configuração 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 directório \"%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 sessão 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 sessão 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 sessão"
++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\" inválida 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 "Código chave \"%s\" inválido 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\" inválido 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\" não 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 inválido da acção \"%s\". A acção 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 0000000..65349a1
--- /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/"
-- 
1.7.2.5





More information about the Openembedded-devel mailing list