Merge branch 'work' into wip/mikabox
authorMikael Magnusson <mikachu@gmail.com>
Thu, 6 Nov 2014 03:51:26 +0000 (04:51 +0100)
committerMikael Magnusson <mikachu@gmail.com>
Thu, 6 Nov 2014 03:51:26 +0000 (04:51 +0100)
Conflicts:
openbox/config.c

77 files changed:
AUTHORS
CHANGELOG
configure.ac
obrender/button.c
obrender/color.c
obrender/font.c
obrender/image.c
obrender/render.h
obrender/theme.c
obrender/theme.h
obt/keyboard.c
obt/xml.c
openbox/actions/desktop.c
openbox/actions/resize.c
openbox/actions/showmenu.c
openbox/client_menu.c
openbox/config.c
openbox/config.h
openbox/dock.c
openbox/event.c
openbox/frame.c
openbox/frame.h
openbox/framerender.c
openbox/keyboard.c
openbox/menu.c
openbox/menu.h
openbox/menuframe.c
openbox/mouse.c
openbox/openbox.c
openbox/place.c
openbox/stacking.c
openbox/stacking.h
po/LINGUAS
po/af.po
po/ar.po
po/be.po
po/bn_IN.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/en@boldquot.po
po/en@quot.po
po/es.po
po/et.po
po/eu.po
po/fi.po
po/fr.po
po/gl_ES.po [new file with mode: 0644]
po/he.po
po/hr.po
po/hu.po
po/ia.po
po/it.po
po/ja.po
po/lt.po
po/lv.po
po/nl.po
po/no.po
po/openbox.pot
po/pl.po
po/pt.po
po/pt_BR.po
po/ro.po
po/ru.po
po/sk.po
po/sr.po
po/sr@latin.po
po/sv.po
po/tr.po
po/uk.po
po/vi.po
po/zh_CN.po
po/zh_TW.po
release/email
tools/obxprop/obxprop.c

diff --git a/AUTHORS b/AUTHORS
index b00cb38..1a3e3bf 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,6 +1,6 @@
 Openbox authors/contributors:
 
-Mikael Magnusson (mikachu@comhem.se)
+Mikael Magnusson (mikachu@icculus.org)
  - Developer
 Dana Jansens (danakj@orodu.net)
  - Lead developer
index 65be74d..746bb77 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,26 @@
+3.6:
+  * Added various new abilities to If action, including the <query> tag,
+    matching class, name, role and window type.
+  * Added ForEach action.
+  * Restore the <center> option for window placement.
+  * New GrowToFill action.
+  * Updated Portuguese translation.
+  * Added strict option to ToggleShowDesktop action.
+  * Speed optimization in rendering code.
+  * New <position> tag for ShowMenu action allows placing menus other
+    than at the mouse cursor.
+  * Fix some corner cases of relative position to work correctly.
+  * Allow specifying multiple mousebinds in one tag as we already do
+    for keybinds (separated by spaces, as "W-Return M-S-F3" for example).
+  * Added option rebindOnMappingNotify option, on by default, which
+    controls if we update binds when the keyboard layout changes at runtime.
+  * The resize action now only considers the part of the client that is onscreen
+    for purposes of picking an action to perform.
+  * Make desktop actions non-interactive (means you can have more actions bound
+    to a key after them, and the dialog disappears on a timer instead of when
+    releasing the modifier keys).
+  * Various small bugfixes.
+
 3.5.2:
   * Fix crash in theme rendering code, and in theme parsing code.
   * Maximize windows without borders to fill the whole screen, don't leave
index 33fc6d9..9b95158 100644 (file)
@@ -9,14 +9,24 @@ OB_VERSION=$PACKAGE_VERSION
 AC_SUBST(OB_VERSION)
 
 dnl Making releases:
+dnl RR_ is for obrender, OBT_ is for obt, keep major/minor in sync,
+dnl treat the rest separately.
+dnl
+dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match.
+dnl the other variables aren't related to the user visible versions, but are used
+dnl to version the .so files.
+dnl if no backward compat is broken, it's just a preference if you want to bump
+dnl the AC_INIT micro version or minor version. if the AC_INIT micro version is
+dnl 0, don't write it out.
+dnl
+dnl How to process .so versioning,
 dnl   RR_MICRO_VERSION += 1;
 dnl   RR_INTERFACE_AGE += 1;
-dnl   R_BINARY_AGE += 1;
+dnl   RR_BINARY_AGE += 1;
 dnl if any functions have been added, set RR_INTERFACE_AGE to 0.
 dnl if backwards compatibility has been broken,
 dnl set RR_BINARY_AGE and RR_INTERFACE_AGE to 0.
-dnl
-dnl if MAJOR or MINOR version changes, be sure to change AC_INIT above to match
+dnl if you set anything to 0, you should also bump the MINOR version.
 dnl
 RR_MAJOR_VERSION=3
 RR_MINOR_VERSION=5
index 35437af..faf83e0 100644 (file)
@@ -29,49 +29,25 @@ RrButton *RrButtonNew (const RrInstance *inst)
 {
     RrButton *out = NULL;
 
-    out = g_new(RrButton, 1);
+    /* no need to alloc colors and masks, set them null (for freeing later) */
+    out = g_new0(RrButton, 1);
     out->inst = inst;
 
-    /* no need to alloc colors, set them null (for freeing later) */
-    out->focused_unpressed_color = NULL;
-    out->unfocused_unpressed_color = NULL;
-    out->focused_pressed_color = NULL;
-    out->unfocused_pressed_color = NULL;
-    out->disabled_focused_color = NULL;
-    out->disabled_unfocused_color = NULL;
-    out->hover_focused_color = NULL;
-    out->hover_unfocused_color = NULL;
-    out->toggled_hover_focused_color = NULL;
-    out->toggled_hover_unfocused_color = NULL;
-    out->toggled_focused_pressed_color = NULL;
-    out->toggled_unfocused_pressed_color = NULL;
-    out->toggled_focused_unpressed_color = NULL;
-    out->toggled_unfocused_unpressed_color = NULL;
-
-    /* same with masks */
-    out->mask = NULL;
-    out->pressed_mask = NULL;
-    out->disabled_mask = NULL;
-    out->hover_mask = NULL;
-    out->toggled_mask = NULL;
-    out->toggled_hover_mask = NULL;
-    out->toggled_pressed_mask = NULL;
-
     /* allocate appearances */
     out->a_focused_unpressed = RrAppearanceNew(inst, 1);
     out->a_unfocused_unpressed = RrAppearanceNew(inst, 1);
     out->a_focused_pressed = RrAppearanceNew(inst, 1);
     out->a_unfocused_pressed = RrAppearanceNew(inst, 1);
-    out->a_disabled_focused = RrAppearanceNew(inst, 1);
-    out->a_disabled_unfocused = RrAppearanceNew(inst, 1);
-    out->a_hover_focused = RrAppearanceNew(inst, 1);
-    out->a_hover_unfocused = RrAppearanceNew(inst, 1);
-    out->a_toggled_focused_unpressed = RrAppearanceNew(inst, 1);
-    out->a_toggled_unfocused_unpressed = RrAppearanceNew(inst, 1);
-    out->a_toggled_focused_pressed = RrAppearanceNew(inst, 1);
-    out->a_toggled_unfocused_pressed = RrAppearanceNew(inst, 1);
-    out->a_toggled_hover_focused = RrAppearanceNew(inst, 1);
-    out->a_toggled_hover_unfocused = RrAppearanceNew(inst, 1);
+    out->a_focused_disabled = RrAppearanceNew(inst, 1);
+    out->a_unfocused_disabled = RrAppearanceNew(inst, 1);
+    out->a_focused_hover = RrAppearanceNew(inst, 1);
+    out->a_unfocused_hover = RrAppearanceNew(inst, 1);
+    out->a_focused_unpressed_toggled = RrAppearanceNew(inst, 1);
+    out->a_unfocused_unpressed_toggled = RrAppearanceNew(inst, 1);
+    out->a_focused_pressed_toggled = RrAppearanceNew(inst, 1);
+    out->a_unfocused_pressed_toggled = RrAppearanceNew(inst, 1);
+    out->a_focused_hover_toggled = RrAppearanceNew(inst, 1);
+    out->a_unfocused_hover_toggled = RrAppearanceNew(inst, 1);
 
     return out;
 }
@@ -79,57 +55,43 @@ RrButton *RrButtonNew (const RrInstance *inst)
 void RrButtonFree(RrButton *b)
 {
     /* colors */
-    if (b->focused_unpressed_color) 
-        RrColorFree(b->focused_unpressed_color);
-    if (b->unfocused_unpressed_color) 
-        RrColorFree(b->unfocused_unpressed_color);
-    if (b->focused_pressed_color) 
-        RrColorFree(b->focused_pressed_color);
-    if (b->unfocused_pressed_color) 
-        RrColorFree(b->unfocused_pressed_color);
-    if (b->disabled_focused_color) 
-        RrColorFree(b->disabled_focused_color);
-    if (b->disabled_unfocused_color) 
-        RrColorFree(b->disabled_unfocused_color);
-    if (b->hover_focused_color) 
-        RrColorFree(b->hover_focused_color);
-    if (b->hover_unfocused_color) 
-        RrColorFree(b->hover_unfocused_color);
-    if (b->toggled_hover_focused_color) 
-        RrColorFree(b->toggled_hover_focused_color);
-    if (b->toggled_hover_unfocused_color) 
-        RrColorFree(b->toggled_hover_unfocused_color);
-    if (b->toggled_focused_pressed_color) 
-        RrColorFree(b->toggled_focused_pressed_color);
-    if (b->toggled_unfocused_pressed_color) 
-        RrColorFree(b->toggled_unfocused_pressed_color);
-    if (b->toggled_focused_unpressed_color) 
-        RrColorFree(b->toggled_focused_unpressed_color);
-    if (b->toggled_unfocused_unpressed_color) 
-        RrColorFree(b->toggled_unfocused_unpressed_color);
+    RrColorFree(b->focused_unpressed_color);
+    RrColorFree(b->unfocused_unpressed_color);
+    RrColorFree(b->focused_pressed_color);
+    RrColorFree(b->unfocused_pressed_color);
+    RrColorFree(b->focused_disabled_color);
+    RrColorFree(b->unfocused_disabled_color);
+    RrColorFree(b->focused_hover_color);
+    RrColorFree(b->unfocused_hover_color);
+    RrColorFree(b->focused_hover_toggled_color);
+    RrColorFree(b->unfocused_hover_toggled_color);
+    RrColorFree(b->focused_pressed_toggled_color);
+    RrColorFree(b->unfocused_pressed_toggled_color);
+    RrColorFree(b->focused_unpressed_toggled_color);
+    RrColorFree(b->unfocused_unpressed_toggled_color);
 
     /* masks */
-    if (b->mask) RrPixmapMaskFree(b->mask);
-    if (b->pressed_mask) RrPixmapMaskFree(b->pressed_mask);
-    if (b->disabled_mask) RrPixmapMaskFree(b->disabled_mask);
-    if (b->hover_mask) RrPixmapMaskFree(b->hover_mask);
-    if (b->toggled_mask) RrPixmapMaskFree(b->toggled_mask);
-    if (b->toggled_hover_mask) RrPixmapMaskFree(b->toggled_hover_mask);
-    if (b->toggled_pressed_mask) RrPixmapMaskFree(b->toggled_pressed_mask);
+    RrPixmapMaskFree(b->unpressed_mask);
+    RrPixmapMaskFree(b->pressed_mask);
+    RrPixmapMaskFree(b->disabled_mask);
+    RrPixmapMaskFree(b->hover_mask);
+    RrPixmapMaskFree(b->unpressed_toggled_mask);
+    RrPixmapMaskFree(b->hover_toggled_mask);
+    RrPixmapMaskFree(b->pressed_toggled_mask);
 
     /* appearances */
     RrAppearanceFree(b->a_focused_unpressed);
     RrAppearanceFree(b->a_unfocused_unpressed);
     RrAppearanceFree(b->a_focused_pressed);
     RrAppearanceFree(b->a_unfocused_pressed);
-    RrAppearanceFree(b->a_disabled_focused);
-    RrAppearanceFree(b->a_disabled_unfocused);
-    RrAppearanceFree(b->a_hover_focused);
-    RrAppearanceFree(b->a_hover_unfocused);
-    RrAppearanceFree(b->a_toggled_focused_unpressed);
-    RrAppearanceFree(b->a_toggled_unfocused_unpressed);
-    RrAppearanceFree(b->a_toggled_focused_pressed);
-    RrAppearanceFree(b->a_toggled_unfocused_pressed);
-    RrAppearanceFree(b->a_toggled_hover_focused);
-    RrAppearanceFree(b->a_toggled_hover_unfocused);
+    RrAppearanceFree(b->a_focused_disabled);
+    RrAppearanceFree(b->a_unfocused_disabled);
+    RrAppearanceFree(b->a_focused_hover);
+    RrAppearanceFree(b->a_unfocused_hover);
+    RrAppearanceFree(b->a_focused_unpressed_toggled);
+    RrAppearanceFree(b->a_unfocused_unpressed_toggled);
+    RrAppearanceFree(b->a_focused_pressed_toggled);
+    RrAppearanceFree(b->a_unfocused_pressed_toggled);
+    RrAppearanceFree(b->a_focused_hover_toggled);
+    RrAppearanceFree(b->a_unfocused_hover_toggled);
 }
index 86a8b3e..4295367 100644 (file)
@@ -239,7 +239,7 @@ static void swap_byte_order(XImage *im)
 
     di = 0;
     for (y = 0; y < im->height; ++y) {
-        for (x = 0; x < im->height; ++x) {
+        for (x = 0; x < im->width; ++x) {
             gchar *c = &im->data[di + x * im->bits_per_pixel / 8];
             gchar t;
 
index 6f9b38f..72933e0 100644 (file)
@@ -82,7 +82,7 @@ RrFont *RrFontOpen(const RrInstance *inst, const gchar *name, gint size,
     out->ref = 1;
     out->font_desc = pango_font_description_new();
     out->layout = pango_layout_new(inst->pango);
-    out->shortcut_underline = pango_attr_underline_new(PANGO_UNDERLINE_LOW);
+    out->shortcut_underline = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE);
     out->shortcut_underline->start_index = 0;
     out->shortcut_underline->end_index = 0;
 
index 8ff9bf1..fb5f40b 100644 (file)
@@ -243,7 +243,7 @@ RrImageSet* RrImageSetMergeSets(RrImageSet *b, RrImageSet *a)
     gint n_original, n_resized, tmp;
     GSList *it;
 
-    const gint max_resized = a->cache->max_resized_saved;
+    gint max_resized;
 
     if (!a)
         return b;
@@ -251,7 +251,6 @@ RrImageSet* RrImageSetMergeSets(RrImageSet *b, RrImageSet *a)
         return a;
     if (a == b)
         return b;
-
     /* the original and resized picture lists in an RrImageSet are kept ordered
        as newest to oldest.  we don't have timestamps for them, so we cannot
        preserve this in the merged RrImageSet exactly.  a decent approximation,
@@ -264,6 +263,8 @@ RrImageSet* RrImageSetMergeSets(RrImageSet *b, RrImageSet *a)
 
     g_assert(b->cache == a->cache);
 
+    max_resized = a->cache->max_resized_saved;
+
     a_i = b_i = merged_i = 0;
     n_original = a->n_original + b->n_original;
     original = g_new(RrImagePic*, n_original);
index c493778..b75310b 100644 (file)
@@ -295,41 +295,41 @@ struct _RrButton {
     RrColor *unfocused_unpressed_color;
     RrColor *focused_pressed_color;
     RrColor *unfocused_pressed_color;
-    RrColor *disabled_focused_color;
-    RrColor *disabled_unfocused_color;
-    RrColor *hover_focused_color;
-    RrColor *hover_unfocused_color;
-    RrColor *toggled_hover_focused_color;
-    RrColor *toggled_hover_unfocused_color;
-    RrColor *toggled_focused_pressed_color;
-    RrColor *toggled_unfocused_pressed_color;
-    RrColor *toggled_focused_unpressed_color;
-    RrColor *toggled_unfocused_unpressed_color;
+    RrColor *focused_disabled_color;
+    RrColor *unfocused_disabled_color;
+    RrColor *focused_hover_color;
+    RrColor *unfocused_hover_color;
+    RrColor *focused_hover_toggled_color;
+    RrColor *unfocused_hover_toggled_color;
+    RrColor *focused_pressed_toggled_color;
+    RrColor *unfocused_pressed_toggled_color;
+    RrColor *focused_unpressed_toggled_color;
+    RrColor *unfocused_unpressed_toggled_color;
     
     /* masks */
-    RrPixmapMask *mask;
+    RrPixmapMask *unpressed_mask;
     RrPixmapMask *pressed_mask;
     RrPixmapMask *disabled_mask;
     RrPixmapMask *hover_mask;
-    RrPixmapMask *toggled_mask;
-    RrPixmapMask *toggled_hover_mask;
-    RrPixmapMask *toggled_pressed_mask;
+    RrPixmapMask *unpressed_toggled_mask;
+    RrPixmapMask *hover_toggled_mask;
+    RrPixmapMask *pressed_toggled_mask;
    
     /* textures */
     RrAppearance *a_focused_unpressed;
     RrAppearance *a_unfocused_unpressed;
     RrAppearance *a_focused_pressed;
     RrAppearance *a_unfocused_pressed;
-    RrAppearance *a_disabled_focused;
-    RrAppearance *a_disabled_unfocused;
-    RrAppearance *a_hover_focused;
-    RrAppearance *a_hover_unfocused;
-    RrAppearance *a_toggled_focused_unpressed;
-    RrAppearance *a_toggled_unfocused_unpressed;
-    RrAppearance *a_toggled_focused_pressed;
-    RrAppearance *a_toggled_unfocused_pressed;
-    RrAppearance *a_toggled_hover_focused;
-    RrAppearance *a_toggled_hover_unfocused;
+    RrAppearance *a_focused_disabled;
+    RrAppearance *a_unfocused_disabled;
+    RrAppearance *a_focused_hover;
+    RrAppearance *a_unfocused_hover;
+    RrAppearance *a_focused_unpressed_toggled;
+    RrAppearance *a_unfocused_unpressed_toggled;
+    RrAppearance *a_focused_pressed_toggled;
+    RrAppearance *a_unfocused_pressed_toggled;
+    RrAppearance *a_focused_hover_toggled;
+    RrAppearance *a_unfocused_hover_toggled;
 
 };
 
index b168321..248c9f5 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
+struct fallbacks {
+    RrAppearance *focused_disabled;
+    RrAppearance *unfocused_disabled;
+    RrAppearance *focused_hover;
+    RrAppearance *unfocused_hover;
+    RrAppearance *focused_unpressed;
+    RrAppearance *focused_pressed;
+    RrAppearance *unfocused_unpressed;
+    RrAppearance *unfocused_pressed;
+    RrAppearance *focused_hover_toggled;
+    RrAppearance *unfocused_hover_toggled;
+    RrAppearance *focused_unpressed_toggled;
+    RrAppearance *focused_pressed_toggled;
+    RrAppearance *unfocused_unpressed_toggled;
+    RrAppearance *unfocused_pressed_toggled;
+};
+
 static XrmDatabase loaddb(const gchar *name, gchar **path);
 static gboolean read_int(XrmDatabase db, const gchar *rname, gint *value);
 static gboolean read_string(XrmDatabase db, const gchar *rname, gchar **value);
 static gboolean read_color(XrmDatabase db, const RrInstance *inst,
                            const gchar *rname, RrColor **value);
 static gboolean read_mask(const RrInstance *inst, const gchar *path,
-                          RrTheme *theme, const gchar *maskname,
-                          RrPixmapMask **value);
+                          const gchar *maskname, RrPixmapMask **value);
 static gboolean read_appearance(XrmDatabase db, const RrInstance *inst,
                                 const gchar *rname, RrAppearance *value,
                                 gboolean allow_trans);
 static int parse_inline_number(const char *p);
 static RrPixel32* read_c_image(gint width, gint height, const guint8 *data);
 static void set_default_appearance(RrAppearance *a);
-static void read_button_colors(XrmDatabase db, const RrInstance *inst, 
+static void read_button_styles(XrmDatabase db, const RrInstance *inst, 
+                               gchar *path,
                                const RrTheme *theme, RrButton *btn, 
-                               const gchar *btnname);
+                               const gchar *btnname,
+                               struct fallbacks *fbs,
+                               guchar *normal_mask,
+                               guchar *toggled_mask);
 
 static RrFont *get_font(RrFont *target, RrFont **default_font,
                         const RrInstance *inst)
@@ -85,7 +105,7 @@ static RrFont *get_font(RrFont *target, RrFont **default_font,
         x_var = x_def;
 
 #define READ_MASK_COPY(x_file, x_var, x_copysrc) \
-    if (!read_mask(inst, path, theme, x_file, & x_var)) \
+    if (!read_mask(inst, path, x_file, & x_var)) \
         x_var = RrPixmapMaskCopy(x_copysrc);
 
 #define READ_APPEARANCE(x_resstr, x_var, x_parrel) \
@@ -122,22 +142,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     RrTheme *theme;
     RrFont *default_font = NULL;
     gchar *path;
-    gboolean userdef;
     gint menu_overlap = 0;
-    RrAppearance *a_disabled_focused_tmp;
-    RrAppearance *a_disabled_unfocused_tmp;
-    RrAppearance *a_hover_focused_tmp;
-    RrAppearance *a_hover_unfocused_tmp;
-    RrAppearance *a_focused_unpressed_tmp;
-    RrAppearance *a_focused_pressed_tmp;
-    RrAppearance *a_unfocused_unpressed_tmp;
-    RrAppearance *a_unfocused_pressed_tmp;
-    RrAppearance *a_toggled_hover_focused_tmp;
-    RrAppearance *a_toggled_hover_unfocused_tmp;
-    RrAppearance *a_toggled_focused_unpressed_tmp;
-    RrAppearance *a_toggled_focused_pressed_tmp;
-    RrAppearance *a_toggled_unfocused_unpressed_tmp;
-    RrAppearance *a_toggled_unfocused_pressed_tmp;
+    struct fallbacks fbs;
 
     if (name) {
         db = loaddb(name, &path);
@@ -162,20 +168,20 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     }
 
     /* initialize temp reading textures */
-    a_disabled_focused_tmp = RrAppearanceNew(inst, 1);
-    a_disabled_unfocused_tmp = RrAppearanceNew(inst, 1);
-    a_hover_focused_tmp = RrAppearanceNew(inst, 1);
-    a_hover_unfocused_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_focused_unpressed_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_unfocused_unpressed_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_hover_focused_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_hover_unfocused_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_focused_pressed_tmp = RrAppearanceNew(inst, 1);
-    a_toggled_unfocused_pressed_tmp = RrAppearanceNew(inst, 1);
-    a_focused_unpressed_tmp = RrAppearanceNew(inst, 1);
-    a_focused_pressed_tmp = RrAppearanceNew(inst, 1);
-    a_unfocused_unpressed_tmp = RrAppearanceNew(inst, 1);
-    a_unfocused_pressed_tmp = RrAppearanceNew(inst, 1);
+    fbs.focused_disabled = RrAppearanceNew(inst, 1);
+    fbs.unfocused_disabled = RrAppearanceNew(inst, 1);
+    fbs.focused_hover = RrAppearanceNew(inst, 1);
+    fbs.unfocused_hover = RrAppearanceNew(inst, 1);
+    fbs.focused_unpressed_toggled = RrAppearanceNew(inst, 1);
+    fbs.unfocused_unpressed_toggled = RrAppearanceNew(inst, 1);
+    fbs.focused_hover_toggled = RrAppearanceNew(inst, 1);
+    fbs.unfocused_hover_toggled = RrAppearanceNew(inst, 1);
+    fbs.focused_pressed_toggled = RrAppearanceNew(inst, 1);
+    fbs.unfocused_pressed_toggled = RrAppearanceNew(inst, 1);
+    fbs.focused_unpressed = RrAppearanceNew(inst, 1);
+    fbs.focused_pressed = RrAppearanceNew(inst, 1);
+    fbs.unfocused_unpressed = RrAppearanceNew(inst, 1);
+    fbs.unfocused_pressed = RrAppearanceNew(inst, 1);
 
     /* initialize theme */
     theme = g_slice_new0(RrTheme);
@@ -263,74 +269,70 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     READ_INT("border.width", theme->fbwidth, 0, 100, 1);
     READ_INT("menu.border.width", theme->mbwidth, 0, 100, theme->fbwidth);
     READ_INT("osd.border.width", theme->obwidth, 0, 100, theme->fbwidth);
-    READ_INT("undecorated.border.width", theme->ubwidth, 0, 100,
-             theme->fbwidth);
+    READ_INT("undecorated.border.width", theme->ubwidth, 0, 100, theme->fbwidth);
     READ_INT("menu.separator.width", theme->menu_sep_width, 1, 100, 1);
-    READ_INT("menu.separator.padding.width", theme->menu_sep_paddingx,
-             0, 100, 6);
-    READ_INT("menu.separator.padding.height", theme->menu_sep_paddingy,
-             0, 100, 3);
-    READ_INT("window.client.padding.width", theme->cbwidthx, 0, 100,
-             theme->paddingx);
-    READ_INT("window.client.padding.height", theme->cbwidthy, 0, 100,
-             theme->cbwidthx);
+    READ_INT("menu.separator.padding.width", theme->menu_sep_paddingx, 0, 100, 6);
+    READ_INT("menu.separator.padding.height", theme->menu_sep_paddingy, 0, 100, 3);
+    READ_INT("window.client.padding.width", theme->cbwidthx, 0, 100, theme->paddingx);
+    READ_INT("window.client.padding.height", theme->cbwidthy, 0, 100, theme->cbwidthx);
 
     /* load colors */
-    READ_COLOR_("window.active.border.color", "border.color",
-                theme->frame_focused_border_color, RrColorNew(inst, 0, 0, 0));
-    /* undecorated focused border color inherits from frame focused border
-       color */
+    READ_COLOR_("window.active.border.color",
+                "border.color",
+                theme->frame_focused_border_color,
+                RrColorNew(inst, 0, 0, 0));
     READ_COLOR("window.undecorated.active.border.color",
                theme->frame_undecorated_focused_border_color,
                RrColorCopy(theme->frame_focused_border_color));
-    /* title separator focused color inherits from focused border color */
     READ_COLOR("window.active.title.separator.color",
                theme->title_separator_focused_color,
                RrColorCopy(theme->frame_focused_border_color));
 
-    /* unfocused border color inherits from frame focused border color */
     READ_COLOR("window.inactive.border.color",
                theme->frame_unfocused_border_color,
                RrColorCopy(theme->frame_focused_border_color));
 
-    /* undecorated unfocused border color inherits from frame unfocused border
-       color */
     READ_COLOR("window.undecorated.inactive.border.color",
                theme->frame_undecorated_unfocused_border_color,
                RrColorCopy(theme->frame_unfocused_border_color));
 
-    /* title separator unfocused color inherits from unfocused border color */
     READ_COLOR("window.inactive.title.separator.color",
                theme->title_separator_unfocused_color,
                RrColorCopy(theme->frame_unfocused_border_color));
 
-    /* menu border color inherits from frame focused border color */
-    READ_COLOR("menu.border.color", theme->menu_border_color,
+    READ_COLOR("menu.border.color",
+               theme->menu_border_color,
                RrColorCopy(theme->frame_focused_border_color));
 
-    /* osd border color inherits from frame focused border color */
-    READ_COLOR("osd.border.color", theme->osd_border_color,
+    READ_COLOR("osd.border.color", 
+               theme->osd_border_color,
                RrColorCopy(theme->frame_focused_border_color));
 
-    READ_COLOR("window.active.client.color", theme->cb_focused_color,
+    READ_COLOR("window.active.client.color",
+               theme->cb_focused_color,
                RrColorNew(inst, 0xff, 0xff, 0xff));
 
-    READ_COLOR("window.inactive.client.color", theme->cb_unfocused_color,
+    READ_COLOR("window.inactive.client.color",
+               theme->cb_unfocused_color,
                RrColorNew(inst, 0xff, 0xff, 0xff));
 
-    READ_COLOR("window.active.label.text.color", theme->title_focused_color,
+    READ_COLOR("window.active.label.text.color",
+               theme->title_focused_color,
                RrColorNew(inst, 0x0, 0x0, 0x0));
 
-    READ_COLOR("window.inactive.label.text.color", theme->title_unfocused_color,
+    READ_COLOR("window.inactive.label.text.color",
+               theme->title_unfocused_color,
                RrColorNew(inst, 0xff, 0xff, 0xff));
 
     READ_COLOR_("osd.active.label.text.color",
                 "osd.label.text.color",
-                theme->osd_text_active_color, RrColorCopy(theme->title_focused_color));
+                theme->osd_text_active_color,
+                RrColorCopy(theme->title_focused_color));
 
     READ_COLOR_("osd.inactive.label.text.color",
                 "osd.label.text.color",
-                theme->osd_text_inactive_color, RrColorCopy(theme->title_unfocused_color));
+                theme->osd_text_inactive_color,
+                RrColorCopy(theme->title_unfocused_color));
 
     READ_COLOR("window.active.button.unpressed.image.color",
                theme->titlebut_focused_unpressed_color,
@@ -349,189 +351,181 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
                RrColorCopy(theme->titlebut_unfocused_unpressed_color));
 
     READ_COLOR("window.active.button.disabled.image.color",
-               theme->titlebut_disabled_focused_color,
+               theme->titlebut_focused_disabled_color,
                RrColorNew(inst, 0xff, 0xff, 0xff));
 
     READ_COLOR("window.inactive.button.disabled.image.color",
-               theme->titlebut_disabled_unfocused_color,
+               theme->titlebut_unfocused_disabled_color,
                RrColorNew(inst, 0, 0, 0));
 
     READ_COLOR("window.active.button.hover.image.color",
-               theme->titlebut_hover_focused_color,
+               theme->titlebut_focused_hover_color,
                RrColorCopy(theme->titlebut_focused_unpressed_color));
 
     READ_COLOR("window.inactive.button.hover.image.color",
-               theme->titlebut_hover_unfocused_color,
+               theme->titlebut_unfocused_hover_color,
                RrColorCopy(theme->titlebut_unfocused_unpressed_color));
 
     READ_COLOR_("window.active.button.toggled.unpressed.image.color",
                 "window.active.button.toggled.image.color",
-                theme->titlebut_toggled_focused_unpressed_color,
+                theme->titlebut_focused_unpressed_toggled_color,
                 RrColorCopy(theme->titlebut_focused_pressed_color));
 
     READ_COLOR_("window.inactive.button.toggled.unpressed.image.color",
                 "window.inactive.button.toggled.image.color",
-                theme->titlebut_toggled_unfocused_unpressed_color,
+                theme->titlebut_unfocused_unpressed_toggled_color,
                 RrColorCopy(theme->titlebut_unfocused_pressed_color));
 
     READ_COLOR("window.active.button.toggled.hover.image.color",
-               theme->titlebut_toggled_hover_focused_color,
-               RrColorCopy(theme->titlebut_toggled_focused_unpressed_color));
+               theme->titlebut_focused_hover_toggled_color,
+               RrColorCopy(theme->titlebut_focused_unpressed_toggled_color));
 
     READ_COLOR("window.inactive.button.toggled.hover.image.color",
-               theme->titlebut_toggled_hover_unfocused_color,
-               RrColorCopy(theme->titlebut_toggled_unfocused_unpressed_color));
+               theme->titlebut_unfocused_hover_toggled_color,
+               RrColorCopy(theme->titlebut_unfocused_unpressed_toggled_color));
 
     READ_COLOR("window.active.button.toggled.pressed.image.color",
-               theme->titlebut_toggled_focused_pressed_color,
+               theme->titlebut_focused_pressed_toggled_color,
                RrColorCopy(theme->titlebut_focused_pressed_color));
 
     READ_COLOR("window.inactive.button.toggled.pressed.image.color",
-               theme->titlebut_toggled_unfocused_pressed_color,
+               theme->titlebut_unfocused_pressed_toggled_color,
                RrColorCopy(theme->titlebut_unfocused_pressed_color));
 
-    READ_COLOR("menu.title.text.color", theme->menu_title_color,
+    READ_COLOR("menu.title.text.color",
+               theme->menu_title_color,
                RrColorNew(inst, 0, 0, 0));
 
-    READ_COLOR("menu.items.text.color", theme->menu_color,
+    READ_COLOR("menu.items.text.color",
+               theme->menu_color,
                RrColorNew(inst, 0xff, 0xff, 0xff));
 
-    READ_COLOR("menu.bullet.image.color", theme->menu_bullet_color,
+    READ_COLOR("menu.bullet.image.color",
+               theme->menu_bullet_color,
                RrColorCopy(theme->menu_color));
    
-    READ_COLOR("menu.items.disabled.text.color", theme->menu_disabled_color,
+    READ_COLOR("menu.items.disabled.text.color",
+               theme->menu_disabled_color,
                RrColorNew(inst, 0, 0, 0));
 
     READ_COLOR("menu.items.active.disabled.text.color",
                theme->menu_disabled_selected_color,
                RrColorCopy(theme->menu_disabled_color));
 
-    READ_COLOR("menu.items.active.text.color", theme->menu_selected_color,
+    READ_COLOR("menu.items.active.text.color",
+               theme->menu_selected_color,
                RrColorNew(inst, 0, 0, 0));
 
-    READ_COLOR("menu.separator.color", theme->menu_sep_color,
+    READ_COLOR("menu.separator.color",
+               theme->menu_sep_color,
                RrColorCopy(theme->menu_color));
     
     READ_COLOR("menu.bullet.selected.image.color", 
                theme->menu_bullet_selected_color,
                RrColorCopy(theme->menu_selected_color));
 
-    READ_COLOR("osd.button.unpressed.text.color", theme->osd_unpressed_color,
+    READ_COLOR("osd.button.unpressed.text.color",
+               theme->osd_unpressed_color,
                RrColorCopy(theme->osd_text_active_color));
-    READ_COLOR("osd.button.pressed.text.color", theme->osd_pressed_color,
+    READ_COLOR("osd.button.pressed.text.color",
+               theme->osd_pressed_color,
                RrColorCopy(theme->osd_text_active_color));
-    READ_COLOR("osd.button.focused.text.color", theme->osd_focused_color,
+    READ_COLOR("osd.button.focused.text.color",
+               theme->osd_focused_color,
                RrColorCopy(theme->osd_text_active_color));
-    READ_COLOR("osd.button.pressed.box.color", theme->osd_pressed_lineart,
+    READ_COLOR("osd.button.pressed.box.color",
+               theme->osd_pressed_lineart,
                RrColorCopy(theme->titlebut_focused_pressed_color));
-    READ_COLOR("osd.button.focused.box.color", theme->osd_focused_lineart,
-               RrColorCopy(theme->titlebut_hover_focused_color));
+    READ_COLOR("osd.button.focused.box.color",
+               theme->osd_focused_lineart,
+               RrColorCopy(theme->titlebut_focused_hover_color));
  
-    /* load the image masks */
-
-    /* maximize button masks */
-    userdef = TRUE;
-    if (!read_mask(inst, path, theme, "max.xbm", &theme->btn_max->mask)) {
-            guchar data[] = { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
-            theme->btn_max->mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
-            userdef = FALSE;
-    }
-    if (!read_mask(inst, path, theme, "max_toggled.xbm",
-                   &theme->btn_max->toggled_mask))
+    /* load window buttons */
+
+    /* bases: unpressed, pressed, disabled */
+    READ_APPEARANCE("window.active.button.unpressed.bg", fbs.focused_unpressed, TRUE);
+    READ_APPEARANCE("window.inactive.button.unpressed.bg", fbs.unfocused_unpressed, TRUE);
+    READ_APPEARANCE("window.active.button.pressed.bg", fbs.focused_pressed, TRUE);
+    READ_APPEARANCE("window.inactive.button.pressed.bg", fbs.unfocused_pressed, TRUE);
+    READ_APPEARANCE("window.active.button.disabled.bg", fbs.focused_disabled, TRUE);
+    READ_APPEARANCE("window.inactive.button.disabled.bg", fbs.unfocused_disabled, TRUE);
+
+    /* hover */
+    READ_APPEARANCE_COPY("window.active.button.hover.bg",
+                         fbs.focused_hover, TRUE,
+                         fbs.focused_unpressed);
+    READ_APPEARANCE_COPY("window.inactive.button.hover.bg",
+                         fbs.unfocused_hover, TRUE,
+                         fbs.unfocused_unpressed);
+
+    /* toggled unpressed */
+    READ_APPEARANCE_("window.active.button.toggled.unpressed.bg",
+                     "window.active.button.toggled.bg",
+                     fbs.focused_unpressed_toggled, TRUE,
+                     fbs.focused_pressed);
+    READ_APPEARANCE_("window.inactive.button.toggled.unpressed.bg",
+                     "window.inactive.button.toggled.bg",
+                     fbs.unfocused_unpressed_toggled, TRUE,
+                     fbs.unfocused_pressed);
+
+    /* toggled pressed */
+    READ_APPEARANCE_COPY("window.active.button.toggled.pressed.bg",
+                         fbs.focused_pressed_toggled, TRUE,
+                         fbs.focused_pressed);
+    READ_APPEARANCE_COPY("window.inactive.button.toggled.pressed.bg",
+                         fbs.unfocused_pressed_toggled, TRUE,
+                         fbs.unfocused_pressed);
+
+    /* toggled hover */
+    READ_APPEARANCE_COPY("window.active.button.toggled.hover.bg",
+                         fbs.focused_hover_toggled, TRUE,
+                         fbs.focused_unpressed_toggled);
+    READ_APPEARANCE_COPY("window.inactive.button.toggled.hover.bg",
+                         fbs.unfocused_hover_toggled, TRUE,
+                         fbs.unfocused_unpressed_toggled);
+
+
+    /* now do individual buttons, if specified */
+
+    /* max button */
     {
-        if (userdef)
-            theme->btn_max->toggled_mask = RrPixmapMaskCopy(theme->btn_max->mask);
-        else {
-            guchar data[] = { 0x3e, 0x22, 0x2f, 0x29, 0x39, 0x0f };
-            theme->btn_max->toggled_mask = RrPixmapMaskNew(inst, 6, 6,(gchar*)data);
-        }
-    }
-    READ_MASK_COPY("max_pressed.xbm", theme->btn_max->pressed_mask,
-                   theme->btn_max->mask);
-    READ_MASK_COPY("max_disabled.xbm", theme->btn_max->disabled_mask,
-                   theme->btn_max->mask);
-    READ_MASK_COPY("max_hover.xbm", theme->btn_max->hover_mask, 
-                   theme->btn_max->mask);
-    READ_MASK_COPY("max_toggled_pressed.xbm", 
-                   theme->btn_max->toggled_pressed_mask, 
-                   theme->btn_max->toggled_mask);
-    READ_MASK_COPY("max_toggled_hover.xbm", 
-                   theme->btn_max->toggled_hover_mask,
-                   theme->btn_max->toggled_mask);
-
-    /* iconify button masks */
-    if (!read_mask(inst, path, theme, "iconify.xbm", &theme->btn_iconify->mask)) {
-        guchar data[] = { 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f };
-        theme->btn_iconify->mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
+        guchar normal_mask[] =  { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
+        guchar toggled_mask[] = { 0x3e, 0x22, 0x2f, 0x29, 0x39, 0x0f };
+        read_button_styles(db, inst, path, theme, theme->btn_max, "max",
+                           &fbs, normal_mask, toggled_mask);
     }
-    READ_MASK_COPY("iconify_pressed.xbm", theme->btn_iconify->pressed_mask,
-                   theme->btn_iconify->mask);
-    READ_MASK_COPY("iconify_disabled.xbm", theme->btn_iconify->disabled_mask,
-                   theme->btn_iconify->mask);
-    READ_MASK_COPY("iconify_hover.xbm", theme->btn_iconify->hover_mask,
-                   theme->btn_iconify->mask);
-
-    /* all desktops button masks */
-    userdef = TRUE;
-    if (!read_mask(inst, path, theme, "desk.xbm", &theme->btn_desk->mask)) {
-        guchar data[] = { 0x33, 0x33, 0x00, 0x00, 0x33, 0x33 };
-        theme->btn_desk->mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
-        userdef = FALSE;
+
+    /* close button */
+    {
+        guchar normal_mask[] = { 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 };
+        read_button_styles(db, inst, path, theme, theme->btn_close, "close",
+                           &fbs, normal_mask, NULL);
     }
-    if (!read_mask(inst, path, theme, "desk_toggled.xbm",
-                   &theme->btn_desk->toggled_mask)) {
-        if (userdef)
-            theme->btn_desk->toggled_mask = RrPixmapMaskCopy(theme->btn_desk->mask);
-        else {
-            guchar data[] = { 0x00, 0x1e, 0x1a, 0x16, 0x1e, 0x00 };
-            theme->btn_desk->toggled_mask =
-                RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
-        }
+
+    /* all desktops button */
+    {
+        guchar normal_mask[] =  { 0x33, 0x33, 0x00, 0x00, 0x33, 0x33 };
+        guchar toggled_mask[] = { 0x00, 0x1e, 0x1a, 0x16, 0x1e, 0x00 };
+        read_button_styles(db, inst, path, theme, theme->btn_desk, "desk",
+                           &fbs, normal_mask, toggled_mask);
     }
-    READ_MASK_COPY("desk_pressed.xbm", theme->btn_desk->pressed_mask,
-                   theme->btn_desk->mask);
-    READ_MASK_COPY("desk_disabled.xbm", theme->btn_desk->disabled_mask,
-                   theme->btn_desk->mask);
-    READ_MASK_COPY("desk_hover.xbm", theme->btn_desk->hover_mask, theme->btn_desk->mask);
-    READ_MASK_COPY("desk_toggled_pressed.xbm",
-                   theme->btn_desk->toggled_pressed_mask, theme->btn_desk->toggled_mask);
-    READ_MASK_COPY("desk_toggled_hover.xbm", theme->btn_desk->toggled_hover_mask,
-                   theme->btn_desk->toggled_mask);
-
-    /* shade button masks */
-    if (!read_mask(inst, path, theme, "shade.xbm", &theme->btn_shade->mask)) {
-        guchar data[] = { 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };
-        theme->btn_shade->mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
+
+    /* shade button */
+    {
+        guchar normal_mask[] = { 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00 };
+        read_button_styles(db, inst, path, theme, theme->btn_shade, "shade",
+                           &fbs, normal_mask, normal_mask);
     }
-    READ_MASK_COPY("shade_toggled.xbm", theme->btn_shade->toggled_mask,
-                   theme->btn_shade->mask);
-    READ_MASK_COPY("shade_pressed.xbm", theme->btn_shade->pressed_mask,
-                   theme->btn_shade->mask);
-    READ_MASK_COPY("shade_disabled.xbm", theme->btn_shade->disabled_mask,
-                   theme->btn_shade->mask);
-    READ_MASK_COPY("shade_hover.xbm", theme->btn_shade->hover_mask,
-                   theme->btn_shade->mask);
-    READ_MASK_COPY("shade_toggled_pressed.xbm",
-                   theme->btn_shade->toggled_pressed_mask,
-                   theme->btn_shade->toggled_mask);
-    READ_MASK_COPY("shade_toggled_hover.xbm",
-                   theme->btn_shade->toggled_hover_mask, 
-                   theme->btn_shade->toggled_mask);
-
-    /* close button masks */
-    if (!read_mask(inst, path, theme, "close.xbm", &theme->btn_close->mask)) {
-        guchar data[] = { 0x33, 0x3f, 0x1e, 0x1e, 0x3f, 0x33 };
-        theme->btn_close->mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)data);
+
+    /* iconify button */
+    {
+        guchar normal_mask[] = { 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f };
+        read_button_styles(db, inst, path, theme, theme->btn_iconify, "iconify",
+                           &fbs, normal_mask, NULL);
     }
-    READ_MASK_COPY("close_pressed.xbm", theme->btn_close->pressed_mask,
-                   theme->btn_close->mask);
-    READ_MASK_COPY("close_disabled.xbm", theme->btn_close->disabled_mask,
-                   theme->btn_close->mask);
-    READ_MASK_COPY("close_hover.xbm", theme->btn_close->hover_mask,
-                   theme->btn_close->mask);
 
     /* submenu bullet mask */
-    if (!read_mask(inst, path, theme, "bullet.xbm", &theme->menu_bullet_mask))
+    if (!read_mask(inst, path, "bullet.xbm", &theme->menu_bullet_mask))
     {
         guchar data[] = { 0x01, 0x03, 0x07, 0x0f, 0x07, 0x03, 0x01 };
         theme->menu_bullet_mask = RrPixmapMaskNew(inst, 4, 7, (gchar*)data);
@@ -554,31 +548,13 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     theme->def_win_icon_w = OB_DEFAULT_ICON_WIDTH;
     theme->def_win_icon_h = OB_DEFAULT_ICON_HEIGHT;
 
-    /* the toggled hover mask = the toggled unpressed mask (i.e. no change) */
-    theme->btn_max->toggled_hover_mask =
-        RrPixmapMaskCopy(theme->btn_max->toggled_mask);
-    theme->btn_desk->toggled_hover_mask =
-        RrPixmapMaskCopy(theme->btn_desk->toggled_mask);
-    theme->btn_shade->toggled_hover_mask =
-        RrPixmapMaskCopy(theme->btn_shade->toggled_mask);
-    /* the toggled pressed mask = the toggled unpressed mask (i.e. no change)*/
-    theme->btn_max->toggled_pressed_mask =
-        RrPixmapMaskCopy(theme->btn_max->toggled_mask);
-    theme->btn_desk->toggled_pressed_mask =
-        RrPixmapMaskCopy(theme->btn_desk->toggled_mask);
-    theme->btn_shade->toggled_pressed_mask =
-        RrPixmapMaskCopy(theme->btn_shade->toggled_mask);
-
     /* read the decoration textures */
     READ_APPEARANCE("window.active.title.bg", theme->a_focused_title, FALSE);
-    READ_APPEARANCE("window.inactive.title.bg", theme->a_unfocused_title,
-                    FALSE);
+    READ_APPEARANCE("window.inactive.title.bg", theme->a_unfocused_title, FALSE);
     READ_APPEARANCE("window.active.label.bg", theme->a_focused_label, TRUE);
-    READ_APPEARANCE("window.inactive.label.bg", theme->a_unfocused_label,
-                    TRUE);
+    READ_APPEARANCE("window.inactive.label.bg", theme->a_unfocused_label, TRUE);
     READ_APPEARANCE("window.active.handle.bg", theme->a_focused_handle, FALSE);
-    READ_APPEARANCE("window.inactive.handle.bg",theme->a_unfocused_handle,
-                    FALSE);
+    READ_APPEARANCE("window.inactive.handle.bg",theme->a_unfocused_handle, FALSE);
     READ_APPEARANCE("window.active.grip.bg", theme->a_focused_grip, TRUE);
     READ_APPEARANCE("window.inactive.grip.bg", theme->a_unfocused_grip, TRUE);
     READ_APPEARANCE("menu.items.bg", theme->a_menu, FALSE);
@@ -589,25 +565,29 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
         RrAppearanceCopy(theme->a_menu_selected);
 
     /* read appearances for non-decorations (on-screen-display) */
-    if (!read_appearance(db, inst, "osd.bg", theme->osd_bg, FALSE)) {
+    if (!read_appearance(db, inst, "osd.bg", theme->osd_bg, FALSE))
+    {
         RrAppearanceFree(theme->osd_bg);
         theme->osd_bg = RrAppearanceCopy(theme->a_focused_title);
     }
     if (!read_appearance(db, inst, "osd.active.label.bg",
                          theme->osd_hilite_label, TRUE) &&
         !read_appearance(db, inst, "osd.label.bg",
-                         theme->osd_hilite_label, TRUE)) {
+                         theme->osd_hilite_label, TRUE))
+    {
         RrAppearanceFree(theme->osd_hilite_label);
         theme->osd_hilite_label = RrAppearanceCopy(theme->a_focused_label);
     }
     if (!read_appearance(db, inst, "osd.inactive.label.bg",
-                         theme->osd_unhilite_label, TRUE)) {
+                         theme->osd_unhilite_label, TRUE))
+    {
         RrAppearanceFree(theme->osd_unhilite_label);
         theme->osd_unhilite_label = RrAppearanceCopy(theme->a_unfocused_label);
     }
     /* osd_hilite_fg can't be parentrel */
     if (!read_appearance(db, inst, "osd.hilight.bg",
-                         theme->osd_hilite_bg, FALSE)) {
+                         theme->osd_hilite_bg, FALSE))
+    {
         RrAppearanceFree(theme->osd_hilite_bg);
         if (theme->a_focused_label->surface.grad != RR_SURFACE_PARENTREL)
             theme->osd_hilite_bg = RrAppearanceCopy(theme->a_focused_label);
@@ -616,7 +596,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     }
     /* osd_unhilite_fg can't be parentrel either */
     if (!read_appearance(db, inst, "osd.unhilight.bg",
-                         theme->osd_unhilite_bg, FALSE)) {
+                         theme->osd_unhilite_bg, FALSE))
+    {
         RrAppearanceFree(theme->osd_unhilite_bg);
         if (theme->a_unfocused_label->surface.grad != RR_SURFACE_PARENTREL)
             theme->osd_unhilite_bg=RrAppearanceCopy(theme->a_unfocused_label);
@@ -624,290 +605,10 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->osd_unhilite_bg=RrAppearanceCopy(theme->a_unfocused_title);
     }
 
-    /* read buttons textures */
-
-    /* bases: unpressed, pressed, disabled */
-    READ_APPEARANCE("window.active.button.unpressed.bg",
-                    a_focused_unpressed_tmp, TRUE);
-    READ_APPEARANCE("window.inactive.button.unpressed.bg",
-                    a_unfocused_unpressed_tmp, TRUE);
-    READ_APPEARANCE("window.active.button.pressed.bg",
-                    a_focused_pressed_tmp, TRUE);
-    READ_APPEARANCE("window.inactive.button.pressed.bg",
-                    a_unfocused_pressed_tmp, TRUE);
-    READ_APPEARANCE("window.active.button.disabled.bg",
-                    a_disabled_focused_tmp, TRUE);
-    READ_APPEARANCE("window.inactive.button.disabled.bg",
-                    a_disabled_unfocused_tmp, TRUE);
-
-    /* hover */
-    READ_APPEARANCE_COPY("window.active.button.hover.bg",
-                         a_hover_focused_tmp, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.hover.bg",
-                         a_hover_unfocused_tmp, TRUE,
-                         a_unfocused_unpressed_tmp);
-
-    /* toggled unpressed */
-    READ_APPEARANCE_("window.active.button.toggled.unpressed.bg",
-                     "window.active.button.toggled.bg",
-                     a_toggled_focused_unpressed_tmp, TRUE,
-                     a_focused_pressed_tmp);
-    READ_APPEARANCE_("window.inactive.button.toggled.unpressed.bg",
-                     "window.inactive.button.toggled.bg",
-                     a_toggled_unfocused_unpressed_tmp, TRUE,
-                     a_unfocused_pressed_tmp);
-
-    /* toggled pressed */
-    READ_APPEARANCE_COPY("window.active.button.toggled.pressed.bg",
-                         a_toggled_focused_pressed_tmp, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.toggled.pressed.bg",
-                         a_toggled_unfocused_pressed_tmp, TRUE,
-                         a_unfocused_pressed_tmp);
-
-    /* toggled hover */
-    READ_APPEARANCE_COPY("window.active.button.toggled.hover.bg",
-                         a_toggled_hover_focused_tmp, TRUE,
-                         a_toggled_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.toggled.hover.bg",
-                         a_toggled_hover_unfocused_tmp, TRUE,
-                         a_toggled_unfocused_unpressed_tmp);
-
-
-    /* now do individual buttons, if specified */
-
-    /* max button */
-    read_button_colors(db, inst, theme, theme->btn_max, "max");
-
-    /* bases:  unpressed, pressed, disabled */
-    READ_APPEARANCE_COPY("window.active.button.max.unpressed.bg",
-                         theme->btn_max->a_focused_unpressed, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.unpressed.bg",
-                         theme->btn_max->a_unfocused_unpressed, TRUE,
-                         a_unfocused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.max.pressed.bg",
-                         theme->btn_max->a_focused_pressed, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.pressed.bg",
-                         theme->btn_max->a_unfocused_pressed, TRUE,
-                         a_unfocused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.max.disabled.bg",
-                         theme->btn_max->a_disabled_focused, TRUE,
-                         a_disabled_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.disabled.bg",
-                         theme->btn_max->a_disabled_unfocused, TRUE,
-                         a_disabled_unfocused_tmp);
-
-    /* hover */
-    READ_APPEARANCE_COPY("window.active.button.max.hover.bg",
-                         theme->btn_max->a_hover_focused, TRUE,
-                         a_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.hover.bg",
-                         theme->btn_max->a_hover_unfocused, TRUE,
-                         a_hover_unfocused_tmp);
-
-    /* toggled unpressed */
-    READ_APPEARANCE_("window.active.button.max.toggled.unpressed.bg",
-                     "window.active.button.max.toggled.bg",
-                     theme->btn_max->a_toggled_focused_unpressed, TRUE,
-                     a_toggled_focused_unpressed_tmp);
-    READ_APPEARANCE_("window.inactive.button.max.toggled.unpressed.bg",
-                     "window.inactive.button.max.toggled.bg",
-                     theme->btn_max->a_toggled_unfocused_unpressed, TRUE,
-                     a_toggled_unfocused_unpressed_tmp);
-
-    /* toggled pressed */
-    READ_APPEARANCE_COPY("window.active.button.max.toggled.pressed.bg",
-                         theme->btn_max->a_toggled_focused_pressed, TRUE,
-                         a_toggled_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.toggled.pressed.bg",
-                         theme->btn_max->a_toggled_unfocused_pressed, TRUE,
-                         a_toggled_unfocused_pressed_tmp);
-
-    /* toggled hover */
-    READ_APPEARANCE_COPY("window.active.button.max.toggled.hover.bg",
-                         theme->btn_max->a_toggled_hover_focused, TRUE,
-                         a_toggled_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.max.toggled.hover.bg",
-                         theme->btn_max->a_toggled_hover_unfocused, TRUE,
-                         a_toggled_hover_unfocused_tmp);
-
-    /* close button */
-    read_button_colors(db, inst, theme, theme->btn_close, "close");
-
-    READ_APPEARANCE_COPY("window.active.button.close.unpressed.bg",
-                         theme->btn_close->a_focused_unpressed, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.close.unpressed.bg",
-                         theme->btn_close->a_unfocused_unpressed, TRUE,
-                         a_unfocused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.close.pressed.bg",
-                         theme->btn_close->a_focused_pressed, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.close.pressed.bg",
-                         theme->btn_close->a_unfocused_pressed, TRUE,
-                         a_unfocused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.close.disabled.bg",
-                         theme->btn_close->a_disabled_focused, TRUE,
-                         a_disabled_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.close.disabled.bg",
-                         theme->btn_close->a_disabled_unfocused, TRUE,
-                         a_disabled_unfocused_tmp);
-    READ_APPEARANCE_COPY("window.active.button.close.hover.bg",
-                         theme->btn_close->a_hover_focused, TRUE,
-                         a_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.close.hover.bg",
-                         theme->btn_close->a_hover_unfocused, TRUE,
-                         a_hover_unfocused_tmp);
-
-    /* desk button */
-    read_button_colors(db, inst, theme, theme->btn_desk, "desk");
-
-    /* bases:  unpressed, pressed, disabled */
-    READ_APPEARANCE_COPY("window.active.button.desk.unpressed.bg",
-                         theme->btn_desk->a_focused_unpressed, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.unpressed.bg",
-                         theme->btn_desk->a_unfocused_unpressed, TRUE,
-                         a_unfocused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.desk.pressed.bg",
-                         theme->btn_desk->a_focused_pressed, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.pressed.bg",
-                         theme->btn_desk->a_unfocused_pressed, TRUE,
-                         a_unfocused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.desk.disabled.bg",
-                         theme->btn_desk->a_disabled_focused, TRUE,
-                         a_disabled_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.disabled.bg",
-                         theme->btn_desk->a_disabled_unfocused, TRUE,
-                         a_disabled_unfocused_tmp);
-
-    /* hover */
-    READ_APPEARANCE_COPY("window.active.button.desk.hover.bg",
-                         theme->btn_desk->a_hover_focused, TRUE,
-                         a_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.hover.bg",
-                         theme->btn_desk->a_hover_unfocused, TRUE,
-                         a_hover_unfocused_tmp);
-
-    /* toggled unpressed */
-    READ_APPEARANCE_("window.active.button.desk.toggled.unpressed.bg",
-                     "window.active.button.desk.toggled.bg",
-                     theme->btn_desk->a_toggled_focused_unpressed, TRUE,
-                     a_toggled_focused_unpressed_tmp);
-    READ_APPEARANCE_("window.inactive.button.desk.toggled.unpressed.bg",
-                     "window.inactive.button.desk.toggled.bg",
-                     theme->btn_desk->a_toggled_unfocused_unpressed, TRUE,
-                     a_toggled_unfocused_unpressed_tmp);
-
-    /* toggled pressed */
-    READ_APPEARANCE_COPY("window.active.button.desk.toggled.pressed.bg",
-                         theme->btn_desk->a_toggled_focused_pressed, TRUE,
-                         a_toggled_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.toggled.pressed.bg",
-                         theme->btn_desk->a_toggled_unfocused_pressed, TRUE,
-                         a_toggled_unfocused_pressed_tmp);
-
-    /* toggled hover */
-    READ_APPEARANCE_COPY("window.active.button.desk.toggled.hover.bg",
-                         theme->btn_desk->a_toggled_hover_focused, TRUE,
-                         a_toggled_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.desk.toggled.hover.bg",
-                         theme->btn_desk->a_toggled_hover_unfocused, TRUE,
-                         a_toggled_hover_unfocused_tmp);
-
-    /* shade button */
-    read_button_colors(db, inst, theme, theme->btn_shade, "shade");
-
-    /* bases:  unpressed, pressed, disabled */
-    READ_APPEARANCE_COPY("window.active.button.shade.unpressed.bg",
-                         theme->btn_shade->a_focused_unpressed, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.unpressed.bg",
-                         theme->btn_shade->a_unfocused_unpressed, TRUE,
-                         a_unfocused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.shade.pressed.bg",
-                         theme->btn_shade->a_focused_pressed, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.pressed.bg",
-                         theme->btn_shade->a_unfocused_pressed, TRUE,
-                         a_unfocused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.shade.disabled.bg",
-                         theme->btn_shade->a_disabled_focused, TRUE,
-                         a_disabled_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.disabled.bg",
-                         theme->btn_shade->a_disabled_unfocused, TRUE,
-                         a_disabled_unfocused_tmp);
-
-    /* hover */
-    READ_APPEARANCE_COPY("window.active.button.shade.hover.bg",
-                         theme->btn_shade->a_hover_focused, TRUE,
-                         a_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.hover.bg",
-                         theme->btn_shade->a_hover_unfocused, TRUE,
-                         a_hover_unfocused_tmp);
-
-    /* toggled unpressed */
-    READ_APPEARANCE_("window.active.button.shade.toggled.unpressed.bg",
-                     "window.active.button.shade.toggled.bg",
-                     theme->btn_shade->a_toggled_focused_unpressed, TRUE,
-                     a_toggled_focused_unpressed_tmp);
-    READ_APPEARANCE_("window.inactive.button.shade.toggled.unpressed.bg",
-                     "window.inactive.button.shade.toggled.bg",
-                     theme->btn_shade->a_toggled_unfocused_unpressed, TRUE,
-                     a_toggled_unfocused_unpressed_tmp);
-
-    /* toggled pressed */
-    READ_APPEARANCE_COPY("window.active.button.shade.toggled.pressed.bg",
-                         theme->btn_shade->a_toggled_focused_pressed, TRUE,
-                         a_toggled_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.toggled.pressed.bg",
-                         theme->btn_shade->a_toggled_unfocused_pressed, TRUE,
-                         a_toggled_unfocused_pressed_tmp);
-
-    /* toggled hover */
-    READ_APPEARANCE_COPY("window.active.button.shade.toggled.hover.bg",
-                         theme->btn_shade->a_toggled_hover_focused, TRUE,
-                         a_toggled_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.shade.toggled.hover.bg",
-                         theme->btn_shade->a_toggled_hover_unfocused, TRUE,
-                         a_toggled_hover_unfocused_tmp);
-
-    /* iconify button */
-    read_button_colors(db, inst, theme, theme->btn_iconify, "iconify");
-
-    READ_APPEARANCE_COPY("window.active.button.iconify.unpressed.bg",
-                         theme->btn_iconify->a_focused_unpressed, TRUE,
-                         a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.iconify.unpressed.bg",
-                         theme->btn_iconify->a_unfocused_unpressed, TRUE,
-                         a_unfocused_unpressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.iconify.pressed.bg",
-                         theme->btn_iconify->a_focused_pressed, TRUE,
-                         a_focused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.iconify.pressed.bg",
-                         theme->btn_iconify->a_unfocused_pressed, TRUE,
-                         a_unfocused_pressed_tmp);
-    READ_APPEARANCE_COPY("window.active.button.iconify.disabled.bg",
-                         theme->btn_iconify->a_disabled_focused, TRUE,
-                         a_disabled_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.iconify.disabled.bg",
-                         theme->btn_iconify->a_disabled_unfocused, TRUE,
-                         a_disabled_unfocused_tmp);
-    READ_APPEARANCE_COPY("window.active.button.iconify.hover.bg",
-                         theme->btn_iconify->a_hover_focused, TRUE,
-                         a_hover_focused_tmp);
-    READ_APPEARANCE_COPY("window.inactive.button.iconify.hover.bg",
-                         theme->btn_iconify->a_hover_unfocused, TRUE,
-                         a_hover_unfocused_tmp);
-
     /* osd buttons */
-    READ_APPEARANCE_COPY("osd.button.unpressed.bg", theme->osd_unpressed_button, TRUE, a_focused_unpressed_tmp);
-    READ_APPEARANCE_COPY_TEXTURES("osd.button.pressed.bg", theme->osd_pressed_button, TRUE, a_focused_pressed_tmp, 5);
-    READ_APPEARANCE_COPY_TEXTURES("osd.button.focused.bg", theme->osd_focused_button, TRUE, a_focused_unpressed_tmp, 5);
+    READ_APPEARANCE_COPY("osd.button.unpressed.bg", theme->osd_unpressed_button, TRUE, fbs.focused_unpressed);
+    READ_APPEARANCE_COPY_TEXTURES("osd.button.pressed.bg", theme->osd_pressed_button, TRUE, fbs.focused_pressed, 5);
+    READ_APPEARANCE_COPY_TEXTURES("osd.button.focused.bg", theme->osd_focused_button, TRUE, fbs.focused_unpressed, 5);
 
     theme->a_icon->surface.grad =
         theme->a_clear->surface.grad =
@@ -941,8 +642,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->a_focused_label->texture[0].data.text.shadow_offset_x = i;
             theme->a_focused_label->texture[0].data.text.shadow_offset_y = i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
@@ -955,17 +655,13 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
         }
     }
 
-    theme->a_focused_label->texture[0].data.text.shadow_color =
-        theme->title_focused_shadow_color;
-    theme->a_focused_label->texture[0].data.text.shadow_alpha =
-        theme->title_focused_shadow_alpha;
+    theme->a_focused_label->texture[0].data.text.shadow_color = theme->title_focused_shadow_color;
+    theme->a_focused_label->texture[0].data.text.shadow_alpha = theme->title_focused_shadow_alpha;
 
     theme->osd_hilite_label->texture[0].type = RR_TEXTURE_TEXT;
     theme->osd_hilite_label->texture[0].data.text.justify = RR_JUSTIFY_LEFT;
-    theme->osd_hilite_label->texture[0].data.text.font =
-        theme->osd_font_hilite;
-    theme->osd_hilite_label->texture[0].data.text.color =
-        theme->osd_text_active_color;
+    theme->osd_hilite_label->texture[0].data.text.font = theme->osd_font_hilite;
+    theme->osd_hilite_label->texture[0].data.text.color = theme->osd_text_active_color;
 
     if (read_string(db, "osd.active.label.text.font", &str) ||
         read_string(db, "osd.label.text.font", &str))
@@ -981,8 +677,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->osd_hilite_label->texture[0].data.text.shadow_offset_x = i;
             theme->osd_hilite_label->texture[0].data.text.shadow_offset_y = i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
@@ -1049,10 +744,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
 
     theme->a_unfocused_label->texture[0].type = RR_TEXTURE_TEXT;
     theme->a_unfocused_label->texture[0].data.text.justify = winjust;
-    theme->a_unfocused_label->texture[0].data.text.font =
-        theme->win_font_unfocused;
-    theme->a_unfocused_label->texture[0].data.text.color =
-        theme->title_unfocused_color;
+    theme->a_unfocused_label->texture[0].data.text.font = theme->win_font_unfocused;
+    theme->a_unfocused_label->texture[0].data.text.color = theme->title_unfocused_color;
 
     if (read_string(db, "window.inactive.label.text.font", &str)) {
         char *p;
@@ -1066,8 +759,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->a_unfocused_label->texture[0].data.text.shadow_offset_x = i;
             theme->a_unfocused_label->texture[0].data.text.shadow_offset_y = i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
@@ -1092,8 +784,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     theme->osd_unhilite_label->texture[0].data.text.color =
         theme->osd_text_inactive_color;
 
-    if (read_string(db, "osd.inactive.label.text.font", &str))
-    {
+    if (read_string(db, "osd.inactive.label.text.font", &str)) {
         char *p;
         gint i = 0;
         gint j;
@@ -1105,8 +796,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->osd_unhilite_label->texture[0].data.text.shadow_offset_x=i;
             theme->osd_unhilite_label->texture[0].data.text.shadow_offset_y=i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
@@ -1139,10 +829,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
 
     theme->a_menu_text_title->texture[0].type = RR_TEXTURE_TEXT;
     theme->a_menu_text_title->texture[0].data.text.justify = mtitlejust;
-    theme->a_menu_text_title->texture[0].data.text.font =
-        theme->menu_title_font;
-    theme->a_menu_text_title->texture[0].data.text.color =
-        theme->menu_title_color;
+    theme->a_menu_text_title->texture[0].data.text.font = theme->menu_title_font;
+    theme->a_menu_text_title->texture[0].data.text.color = theme->menu_title_color;
 
     if (read_string(db, "menu.title.text.font", &str)) {
         char *p;
@@ -1156,24 +844,22 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->a_menu_text_title->texture[0].data.text.shadow_offset_x = i;
             theme->a_menu_text_title->texture[0].data.text.shadow_offset_y = i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
 
             theme->menu_title_shadow_color = RrColorNew(inst, j, j, j);
-            theme->menu_title_shadow_alpha = i;
         } else {
             theme->menu_title_shadow_color = RrColorNew(inst, 0, 0, 0);
-            theme->menu_title_shadow_alpha = 50;
+            i = 50;
         }
-    }
 
-    theme->a_menu_text_title->texture[0].data.text.shadow_color =
-        theme->menu_title_shadow_color;
-    theme->a_menu_text_title->texture[0].data.text.shadow_alpha =
-        theme->menu_title_shadow_alpha;
+        theme->a_menu_text_title->texture[0].data.text.shadow_color =
+            theme->menu_title_shadow_color;
+        theme->a_menu_text_title->texture[0].data.text.shadow_alpha =
+            i;
+    }
 
     theme->a_menu_text_normal->texture[0].type =
         theme->a_menu_text_selected->texture[0].type =
@@ -1224,313 +910,35 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
             theme->a_menu_text_disabled_selected->
                 texture[0].data.text.shadow_offset_y = i;
         }
-        if ((p = strstr(str, "shadowtint=")))
-        {
+        if ((p = strstr(str, "shadowtint="))) {
             i = parse_inline_number(p + strlen("shadowtint="));
             j = (i > 0 ? 0 : 255);
             i = ABS(i*255/100);
 
-            theme->menu_text_normal_shadow_color = RrColorNew(inst, j, j, j);
-            theme->menu_text_selected_shadow_color = RrColorNew(inst, j, j, j);
-            theme->menu_text_disabled_shadow_color = RrColorNew(inst, j, j, j);
-            theme->menu_text_normal_shadow_alpha = i;
-            theme->menu_text_selected_shadow_alpha = i;
-            theme->menu_text_disabled_shadow_alpha = i;
-            theme->menu_text_disabled_selected_shadow_alpha = i;
+            theme->menu_text_shadow_color = RrColorNew(inst, j, j, j);
         } else {
-            theme->menu_text_normal_shadow_color = RrColorNew(inst, 0, 0, 0);
-            theme->menu_text_selected_shadow_color = RrColorNew(inst, 0, 0, 0);
-            theme->menu_text_disabled_shadow_color = RrColorNew(inst, 0, 0, 0);
-            theme->menu_text_normal_shadow_alpha = 50;
-            theme->menu_text_selected_shadow_alpha = 50;
-            theme->menu_text_disabled_selected_shadow_alpha = 50;
+            theme->menu_text_shadow_color = RrColorNew(inst, 0, 0, 0);
+            i = 50;
         }
+
+        theme->a_menu_text_normal->texture[0].data.text.shadow_color =
+            theme->a_menu_text_selected->texture[0].data.text.shadow_color =
+            theme->a_menu_text_disabled->texture[0].data.text.shadow_color =
+            theme->a_menu_text_disabled_selected->texture[0].data.text.shadow_color =
+            theme->menu_text_shadow_color;
+
+        theme->a_menu_text_normal->texture[0].data.text.shadow_alpha =
+            theme->a_menu_text_selected->texture[0].data.text.shadow_alpha =
+            theme->a_menu_text_disabled->texture[0].data.text.shadow_alpha =
+            theme->a_menu_text_disabled_selected->texture[0].data.text.shadow_alpha =
+            i;
     }
 
-    theme->a_menu_text_normal->texture[0].data.text.shadow_color =
-        theme->menu_text_normal_shadow_color;
-    theme->a_menu_text_normal->texture[0].data.text.shadow_alpha =
-        theme->menu_text_normal_shadow_alpha;
-    theme->a_menu_text_selected->texture[0].data.text.shadow_color =
-        theme->menu_text_selected_shadow_color;
-    theme->a_menu_text_selected->texture[0].data.text.shadow_alpha =
-        theme->menu_text_selected_shadow_alpha;
-    theme->a_menu_text_disabled->texture[0].data.text.shadow_color =
-        theme->menu_text_disabled_shadow_color;
-    theme->a_menu_text_disabled->texture[0].data.text.shadow_alpha =
-        theme->menu_text_disabled_shadow_alpha;
-    theme->a_menu_text_disabled_selected->texture[0].data.text.shadow_color =
-        theme->menu_text_disabled_shadow_color;
-    theme->a_menu_text_disabled_selected->texture[0].data.text.shadow_alpha =
-        theme->menu_text_disabled_shadow_alpha;
-
-    theme->btn_max->a_disabled_focused->texture[0].type =
-        theme->btn_max->a_disabled_unfocused->texture[0].type =
-        theme->btn_max->a_hover_focused->texture[0].type =
-        theme->btn_max->a_hover_unfocused->texture[0].type =
-        theme->btn_max->a_toggled_hover_focused->texture[0].type =
-        theme->btn_max->a_toggled_hover_unfocused->texture[0].type =
-        theme->btn_max->a_toggled_focused_unpressed->texture[0].type =
-        theme->btn_max->a_toggled_unfocused_unpressed->texture[0].type =
-        theme->btn_max->a_toggled_focused_pressed->texture[0].type =
-        theme->btn_max->a_toggled_unfocused_pressed->texture[0].type =
-        theme->btn_max->a_focused_unpressed->texture[0].type =
-        theme->btn_max->a_focused_pressed->texture[0].type =
-        theme->btn_max->a_unfocused_unpressed->texture[0].type =
-        theme->btn_max->a_unfocused_pressed->texture[0].type =
-        theme->btn_close->a_disabled_focused->texture[0].type =
-        theme->btn_close->a_disabled_unfocused->texture[0].type =
-        theme->btn_close->a_hover_focused->texture[0].type =
-        theme->btn_close->a_hover_unfocused->texture[0].type =
-        theme->btn_close->a_focused_unpressed->texture[0].type =
-        theme->btn_close->a_focused_pressed->texture[0].type =
-        theme->btn_close->a_unfocused_unpressed->texture[0].type =
-        theme->btn_close->a_unfocused_pressed->texture[0].type =
-        theme->btn_desk->a_disabled_focused->texture[0].type =
-        theme->btn_desk->a_disabled_unfocused->texture[0].type =
-        theme->btn_desk->a_hover_focused->texture[0].type =
-        theme->btn_desk->a_hover_unfocused->texture[0].type =
-        theme->btn_desk->a_toggled_hover_focused->texture[0].type =
-        theme->btn_desk->a_toggled_hover_unfocused->texture[0].type =
-        theme->btn_desk->a_toggled_focused_unpressed->texture[0].type =
-        theme->btn_desk->a_toggled_unfocused_unpressed->texture[0].type =
-        theme->btn_desk->a_toggled_focused_pressed->texture[0].type =
-        theme->btn_desk->a_toggled_unfocused_pressed->texture[0].type =
-        theme->btn_desk->a_focused_unpressed->texture[0].type =
-        theme->btn_desk->a_focused_pressed->texture[0].type =
-        theme->btn_desk->a_unfocused_unpressed->texture[0].type =
-        theme->btn_desk->a_unfocused_pressed->texture[0].type =
-        theme->btn_shade->a_disabled_focused->texture[0].type =
-        theme->btn_shade->a_disabled_unfocused->texture[0].type =
-        theme->btn_shade->a_hover_focused->texture[0].type =
-        theme->btn_shade->a_hover_unfocused->texture[0].type =
-        theme->btn_shade->a_toggled_hover_focused->texture[0].type =
-        theme->btn_shade->a_toggled_hover_unfocused->texture[0].type =
-        theme->btn_shade->a_toggled_focused_unpressed->texture[0].type =
-        theme->btn_shade->a_toggled_unfocused_unpressed->texture[0].type =
-        theme->btn_shade->a_toggled_focused_pressed->texture[0].type =
-        theme->btn_shade->a_toggled_unfocused_pressed->texture[0].type =
-        theme->btn_shade->a_focused_unpressed->texture[0].type =
-        theme->btn_shade->a_focused_pressed->texture[0].type =
-        theme->btn_shade->a_unfocused_unpressed->texture[0].type =
-        theme->btn_shade->a_unfocused_pressed->texture[0].type =
-        theme->btn_iconify->a_disabled_focused->texture[0].type =
-        theme->btn_iconify->a_disabled_unfocused->texture[0].type =
-        theme->btn_iconify->a_hover_focused->texture[0].type =
-        theme->btn_iconify->a_hover_unfocused->texture[0].type =
-        theme->btn_iconify->a_focused_unpressed->texture[0].type =
-        theme->btn_iconify->a_focused_pressed->texture[0].type =
-        theme->btn_iconify->a_unfocused_unpressed->texture[0].type =
-        theme->btn_iconify->a_unfocused_pressed->texture[0].type =
-        theme->a_menu_bullet_normal->texture[0].type =
+    theme->a_menu_bullet_normal->texture[0].type =
         theme->a_menu_bullet_selected->texture[0].type = RR_TEXTURE_MASK;
-
-    theme->btn_max->a_disabled_focused->texture[0].data.mask.mask =
-        theme->btn_max->a_disabled_unfocused->texture[0].data.mask.mask =
-        theme->btn_max->disabled_mask;
-    theme->btn_max->a_hover_focused->texture[0].data.mask.mask =
-        theme->btn_max->a_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_max->hover_mask;
-    theme->btn_max->a_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_max->a_unfocused_pressed->texture[0].data.mask.mask =
-        theme->btn_max->pressed_mask;
-    theme->btn_max->a_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_max->a_unfocused_unpressed->texture[0].data.mask.mask =
-        theme->btn_max->mask;
-    theme->btn_max->a_toggled_hover_focused->texture[0].data.mask.mask =
-        theme->btn_max->a_toggled_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_max->toggled_hover_mask;
-    theme->btn_max->a_toggled_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_max->a_toggled_unfocused_unpressed->
-        texture[0].data.mask.mask = theme->btn_max->toggled_mask;
-    theme->btn_max->a_toggled_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_max->a_toggled_unfocused_pressed->texture[0].data.mask.mask
-        = theme->btn_max->toggled_pressed_mask;
-    theme->btn_close->a_disabled_focused->texture[0].data.mask.mask =
-        theme->btn_close->a_disabled_unfocused->texture[0].data.mask.mask =
-        theme->btn_close->disabled_mask;
-    theme->btn_close->a_hover_focused->texture[0].data.mask.mask =
-        theme->btn_close->a_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_close->hover_mask;
-    theme->btn_close->a_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_close->a_unfocused_pressed->texture[0].data.mask.mask =
-        theme->btn_close->pressed_mask;
-    theme->btn_close->a_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_close->a_unfocused_unpressed->texture[0].data.mask.mask =
-        theme->btn_close->mask;
-    theme->btn_desk->a_disabled_focused->texture[0].data.mask.mask =
-        theme->btn_desk->a_disabled_unfocused->texture[0].data.mask.mask =
-        theme->btn_desk->disabled_mask;
-    theme->btn_desk->a_hover_focused->texture[0].data.mask.mask =
-        theme->btn_desk->a_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_desk->hover_mask;
-    theme->btn_desk->a_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_desk->a_unfocused_pressed->texture[0].data.mask.mask =
-        theme->btn_desk->pressed_mask;
-    theme->btn_desk->a_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_desk->a_unfocused_unpressed->texture[0].data.mask.mask =
-        theme->btn_desk->mask;
-    theme->btn_desk->a_toggled_hover_focused->texture[0].data.mask.mask =
-        theme->btn_desk->a_toggled_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_desk->toggled_hover_mask;
-    theme->btn_desk->a_toggled_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_desk->a_toggled_unfocused_unpressed->
-        texture[0].data.mask.mask = theme->btn_desk->toggled_mask;
-    theme->btn_desk->a_toggled_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_desk->a_toggled_unfocused_pressed->texture[0].data.mask.mask
-        = theme->btn_desk->toggled_pressed_mask;
-    theme->btn_shade->a_disabled_focused->texture[0].data.mask.mask =
-        theme->btn_shade->a_disabled_unfocused->texture[0].data.mask.mask =
-        theme->btn_shade->disabled_mask;
-    theme->btn_shade->a_hover_focused->texture[0].data.mask.mask =
-        theme->btn_shade->a_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_shade->hover_mask;
-    theme->btn_shade->a_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_shade->a_unfocused_pressed->texture[0].data.mask.mask =
-        theme->btn_shade->pressed_mask;
-    theme->btn_shade->a_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_shade->a_unfocused_unpressed->texture[0].data.mask.mask =
-        theme->btn_shade->mask;
-    theme->btn_shade->a_toggled_hover_focused->texture[0].data.mask.mask =
-        theme->btn_shade->a_toggled_hover_unfocused->texture[0].data.mask.mask
-        = theme->btn_shade->toggled_hover_mask;
-    theme->btn_shade->a_toggled_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_shade->a_toggled_unfocused_unpressed->
-        texture[0].data.mask.mask = theme->btn_shade->toggled_mask;
-    theme->btn_shade->a_toggled_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_shade->a_toggled_unfocused_pressed->
-        texture[0].data.mask.mask = theme->btn_shade->toggled_pressed_mask;
-    theme->btn_iconify->a_disabled_focused->texture[0].data.mask.mask =
-        theme->btn_iconify->a_disabled_unfocused->texture[0].data.mask.mask =
-        theme->btn_iconify->disabled_mask;
-    theme->btn_iconify->a_hover_focused->texture[0].data.mask.mask =
-        theme->btn_iconify->a_hover_unfocused->texture[0].data.mask.mask =
-        theme->btn_iconify->hover_mask;
-    theme->btn_iconify->a_focused_pressed->texture[0].data.mask.mask =
-        theme->btn_iconify->a_unfocused_pressed->texture[0].data.mask.mask =
-        theme->btn_iconify->pressed_mask;
-    theme->btn_iconify->a_focused_unpressed->texture[0].data.mask.mask =
-        theme->btn_iconify->a_unfocused_unpressed->texture[0].data.mask.mask =
-        theme->btn_iconify->mask;
     theme->a_menu_bullet_normal->texture[0].data.mask.mask =
     theme->a_menu_bullet_selected->texture[0].data.mask.mask =
         theme->menu_bullet_mask;
-    theme->btn_max->a_disabled_focused->texture[0].data.mask.color = 
-        theme->btn_max->disabled_focused_color;
-    theme->btn_close->a_disabled_focused->texture[0].data.mask.color = 
-        theme->btn_close->disabled_focused_color;
-    theme->btn_desk->a_disabled_focused->texture[0].data.mask.color = 
-        theme->btn_desk->disabled_focused_color;
-    theme->btn_shade->a_disabled_focused->texture[0].data.mask.color = 
-        theme->btn_shade->disabled_focused_color;
-    theme->btn_iconify->a_disabled_focused->texture[0].data.mask.color = 
-        theme->btn_iconify->disabled_focused_color;
-    theme->btn_max->a_disabled_unfocused->texture[0].data.mask.color = 
-        theme->btn_max->disabled_unfocused_color;
-    theme->btn_close->a_disabled_unfocused->texture[0].data.mask.color = 
-        theme->btn_close->disabled_unfocused_color;
-    theme->btn_desk->a_disabled_unfocused->texture[0].data.mask.color = 
-        theme->btn_desk->disabled_unfocused_color;
-    theme->btn_shade->a_disabled_unfocused->texture[0].data.mask.color = 
-        theme->btn_shade->disabled_unfocused_color;
-    theme->btn_iconify->a_disabled_unfocused->texture[0].data.mask.color = 
-        theme->btn_iconify->disabled_unfocused_color;
-    theme->btn_max->a_hover_focused->texture[0].data.mask.color = 
-        theme->btn_max->hover_focused_color;
-    theme->btn_close->a_hover_focused->texture[0].data.mask.color = 
-        theme->btn_close->hover_focused_color;
-    theme->btn_desk->a_hover_focused->texture[0].data.mask.color = 
-        theme->btn_desk->hover_focused_color;
-    theme->btn_shade->a_hover_focused->texture[0].data.mask.color = 
-        theme->btn_shade->hover_focused_color;
-    theme->btn_iconify->a_hover_focused->texture[0].data.mask.color = 
-        theme->btn_iconify->hover_focused_color;
-    theme->btn_max->a_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_max->hover_unfocused_color;
-    theme->btn_close->a_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_close->hover_unfocused_color;
-    theme->btn_desk->a_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_desk->hover_unfocused_color;
-    theme->btn_shade->a_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_shade->hover_unfocused_color;
-    theme->btn_iconify->a_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_iconify->hover_unfocused_color;
-    theme->btn_max->a_toggled_hover_focused->texture[0].data.mask.color = 
-        theme->btn_max->toggled_hover_focused_color;
-    theme->btn_desk->a_toggled_hover_focused->texture[0].data.mask.color = 
-        theme->btn_desk->toggled_hover_focused_color;
-    theme->btn_shade->a_toggled_hover_focused->texture[0].data.mask.color = 
-        theme->btn_shade->toggled_hover_focused_color;
-    theme->btn_max->a_toggled_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_max->toggled_hover_unfocused_color;
-    theme->btn_desk->a_toggled_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_desk->toggled_hover_unfocused_color;
-    theme->btn_shade->a_toggled_hover_unfocused->texture[0].data.mask.color = 
-        theme->btn_shade->toggled_hover_unfocused_color;
-    theme->btn_max->a_toggled_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_max->toggled_focused_unpressed_color;
-    theme->btn_desk->a_toggled_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_desk->toggled_focused_unpressed_color;
-    theme->btn_shade->a_toggled_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_shade->toggled_focused_unpressed_color;
-    theme->btn_max->a_toggled_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_max->toggled_unfocused_unpressed_color;
-    theme->btn_desk->a_toggled_unfocused_unpressed->texture[0].data.mask.color
-        = theme->btn_desk->toggled_unfocused_unpressed_color;
-    theme->btn_shade->a_toggled_unfocused_unpressed->texture[0].data.mask.color
-        = theme->btn_shade->toggled_unfocused_unpressed_color;
-    theme->btn_max->a_toggled_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_max->toggled_focused_pressed_color;
-    theme->btn_desk->a_toggled_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_desk->toggled_focused_pressed_color;
-    theme->btn_shade->a_toggled_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_shade->toggled_focused_pressed_color;
-    theme->btn_max->a_toggled_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_max->toggled_unfocused_pressed_color;
-    theme->btn_desk->a_toggled_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_desk->toggled_unfocused_pressed_color;
-    theme->btn_shade->a_toggled_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_shade->toggled_unfocused_pressed_color;
-    theme->btn_max->a_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_max->focused_unpressed_color;
-    theme->btn_close->a_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_close->focused_unpressed_color;
-    theme->btn_desk->a_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_desk->focused_unpressed_color;
-    theme->btn_shade->a_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_shade->focused_unpressed_color;
-    theme->btn_iconify->a_focused_unpressed->texture[0].data.mask.color = 
-        theme->btn_iconify->focused_unpressed_color;
-    theme->btn_max->a_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_max->focused_pressed_color;
-    theme->btn_close->a_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_close->focused_pressed_color;
-    theme->btn_desk->a_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_desk->focused_pressed_color;
-    theme->btn_shade->a_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_shade->focused_pressed_color;
-    theme->btn_iconify->a_focused_pressed->texture[0].data.mask.color = 
-        theme->btn_iconify->focused_pressed_color;
-    theme->btn_max->a_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_max->unfocused_unpressed_color;
-    theme->btn_close->a_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_close->unfocused_unpressed_color;
-    theme->btn_desk->a_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_desk->unfocused_unpressed_color;
-    theme->btn_shade->a_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_shade->unfocused_unpressed_color;
-    theme->btn_iconify->a_unfocused_unpressed->texture[0].data.mask.color = 
-        theme->btn_iconify->unfocused_unpressed_color;
-    theme->btn_max->a_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_max->unfocused_pressed_color;
-    theme->btn_close->a_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_close->unfocused_pressed_color;
-    theme->btn_desk->a_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_desk->unfocused_pressed_color;
-    theme->btn_shade->a_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_shade->unfocused_pressed_color;
-    theme->btn_iconify->a_unfocused_pressed->texture[0].data.mask.color = 
-        theme->btn_iconify->unfocused_pressed_color;
     theme->a_menu_bullet_normal->texture[0].data.mask.color =
         theme->menu_bullet_color;
     theme->a_menu_bullet_selected->texture[0].data.mask.color =
@@ -1540,20 +948,16 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     XrmDestroyDatabase(db);
 
     /* set the font heights */
-    theme->win_font_height = RrFontHeight
-        (theme->win_font_focused,
-         theme->a_focused_label->texture[0].data.text.shadow_offset_y);
+    theme->win_font_height = RrFontHeight(theme->win_font_focused,
+        theme->a_focused_label->texture[0].data.text.shadow_offset_y);
     theme->win_font_height =
         MAX(theme->win_font_height,
-            RrFontHeight
-            (theme->win_font_focused,
-             theme->a_unfocused_label->texture[0].data.text.shadow_offset_y));
-    theme->menu_title_font_height = RrFontHeight
-        (theme->menu_title_font,
-         theme->a_menu_text_title->texture[0].data.text.shadow_offset_y);
-    theme->menu_font_height = RrFontHeight
-        (theme->menu_font,
-         theme->a_menu_text_normal->texture[0].data.text.shadow_offset_y);
+            RrFontHeight(theme->win_font_focused,
+                theme->a_unfocused_label->texture[0].data.text.shadow_offset_y));
+    theme->menu_title_font_height = RrFontHeight(theme->menu_title_font,
+        theme->a_menu_text_title->texture[0].data.text.shadow_offset_y);
+    theme->menu_font_height = RrFontHeight(theme->menu_font,
+        theme->a_menu_text_normal->texture[0].data.text.shadow_offset_y);
 
     /* calculate some last extents */
     {
@@ -1584,20 +988,20 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     theme->button_size = theme->label_height - 2;
     theme->grip_width = 25;
 
-    RrAppearanceFree(a_disabled_focused_tmp);
-    RrAppearanceFree(a_disabled_unfocused_tmp);
-    RrAppearanceFree(a_hover_focused_tmp);
-    RrAppearanceFree(a_hover_unfocused_tmp);
-    RrAppearanceFree(a_focused_unpressed_tmp);
-    RrAppearanceFree(a_focused_pressed_tmp);
-    RrAppearanceFree(a_unfocused_unpressed_tmp);
-    RrAppearanceFree(a_unfocused_pressed_tmp);
-    RrAppearanceFree(a_toggled_hover_focused_tmp);
-    RrAppearanceFree(a_toggled_hover_unfocused_tmp);
-    RrAppearanceFree(a_toggled_focused_unpressed_tmp);
-    RrAppearanceFree(a_toggled_focused_pressed_tmp);
-    RrAppearanceFree(a_toggled_unfocused_unpressed_tmp);
-    RrAppearanceFree(a_toggled_unfocused_pressed_tmp);
+    RrAppearanceFree(fbs.focused_disabled);
+    RrAppearanceFree(fbs.unfocused_disabled);
+    RrAppearanceFree(fbs.focused_hover);
+    RrAppearanceFree(fbs.unfocused_hover);
+    RrAppearanceFree(fbs.focused_unpressed);
+    RrAppearanceFree(fbs.focused_pressed);
+    RrAppearanceFree(fbs.unfocused_unpressed);
+    RrAppearanceFree(fbs.unfocused_pressed);
+    RrAppearanceFree(fbs.focused_hover_toggled);
+    RrAppearanceFree(fbs.unfocused_hover_toggled);
+    RrAppearanceFree(fbs.focused_unpressed_toggled);
+    RrAppearanceFree(fbs.focused_pressed_toggled);
+    RrAppearanceFree(fbs.unfocused_unpressed_toggled);
+    RrAppearanceFree(fbs.unfocused_pressed_toggled);
 
     return theme;
 }
@@ -1625,16 +1029,16 @@ void RrThemeFree(RrTheme *theme)
         RrColorFree(theme->cb_focused_color);
         RrColorFree(theme->title_focused_color);
         RrColorFree(theme->title_unfocused_color);
-        RrColorFree(theme->titlebut_disabled_focused_color);
-        RrColorFree(theme->titlebut_disabled_unfocused_color);
-        RrColorFree(theme->titlebut_hover_focused_color);
-        RrColorFree(theme->titlebut_hover_unfocused_color);
-        RrColorFree(theme->titlebut_toggled_hover_focused_color);
-        RrColorFree(theme->titlebut_toggled_hover_unfocused_color);
-        RrColorFree(theme->titlebut_toggled_focused_pressed_color);
-        RrColorFree(theme->titlebut_toggled_unfocused_pressed_color);
-        RrColorFree(theme->titlebut_toggled_focused_unpressed_color);
-        RrColorFree(theme->titlebut_toggled_unfocused_unpressed_color);
+        RrColorFree(theme->titlebut_focused_disabled_color);
+        RrColorFree(theme->titlebut_unfocused_disabled_color);
+        RrColorFree(theme->titlebut_focused_hover_color);
+        RrColorFree(theme->titlebut_unfocused_hover_color);
+        RrColorFree(theme->titlebut_focused_hover_toggled_color);
+        RrColorFree(theme->titlebut_unfocused_hover_toggled_color);
+        RrColorFree(theme->titlebut_focused_pressed_toggled_color);
+        RrColorFree(theme->titlebut_unfocused_pressed_toggled_color);
+        RrColorFree(theme->titlebut_focused_unpressed_toggled_color);
+        RrColorFree(theme->titlebut_unfocused_unpressed_toggled_color);
         RrColorFree(theme->titlebut_focused_pressed_color);
         RrColorFree(theme->titlebut_unfocused_pressed_color);
         RrColorFree(theme->titlebut_focused_unpressed_color);
@@ -1659,10 +1063,7 @@ void RrThemeFree(RrTheme *theme)
         RrColorFree(theme->osd_pressed_lineart);
         RrColorFree(theme->osd_focused_lineart);
         RrColorFree(theme->menu_title_shadow_color);
-        RrColorFree(theme->menu_text_normal_shadow_color);
-        RrColorFree(theme->menu_text_selected_shadow_color);
-        RrColorFree(theme->menu_text_disabled_shadow_color);
-        RrColorFree(theme->menu_text_disabled_selected_shadow_color);
+        RrColorFree(theme->menu_text_shadow_color);
 
         g_free(theme->def_win_icon);
         
@@ -1837,8 +1238,7 @@ static gboolean read_color(XrmDatabase db, const RrInstance *inst,
 }
 
 static gboolean read_mask(const RrInstance *inst, const gchar *path,
-                          RrTheme *theme, const gchar *maskname,
-                          RrPixmapMask **value)
+                          const gchar *maskname, RrPixmapMask **value)
 {
     gboolean ret = FALSE;
     gchar *s;
@@ -2064,110 +1464,79 @@ static RrPixel32* read_c_image(gint width, gint height, const guint8 *data)
     return im;
 }
 
-static void read_button_colors(XrmDatabase db, const RrInstance *inst, 
+static void read_button_styles(XrmDatabase db, const RrInstance *inst, 
+                               gchar *path,
                                const RrTheme *theme, RrButton *btn, 
-                               const gchar *btnname)
+                               const gchar *btnname,
+                               struct fallbacks *fbs,
+                               guchar *normal_mask,
+                               guchar *toggled_mask)
 {
-    gchar *name;
-
-    /* active unpressed */
-    name = g_strdup_printf("window.active.button.%s.unpressed.image.color",
-                           btnname);
-    READ_COLOR(name, btn->focused_unpressed_color,
-               RrColorCopy(theme->titlebut_focused_unpressed_color));
-    g_free(name);
-
-    /* inactive unpressed */
-    name = g_strdup_printf("window.inactive.button.%s.unpressed.image.color",
-                           btnname);
-    READ_COLOR(name, btn->unfocused_unpressed_color,
-               RrColorCopy(theme->titlebut_unfocused_unpressed_color));
-    g_free(name);
+    gchar name[128], name2[128];
+    gboolean userdef = TRUE;
 
-    /* active pressed */
-    name = g_strdup_printf("window.active.button.%s.pressed.image.color",
-                           btnname);
-    READ_COLOR(name, btn->focused_pressed_color,
-               RrColorCopy(theme->titlebut_focused_pressed_color));
-    g_free(name);
+    g_snprintf(name, 128, "%s.xbm", btnname);
+    if (!read_mask(inst, path, name, &btn->unpressed_mask) && normal_mask)
+    {
+        btn->unpressed_mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)normal_mask);
+        userdef = FALSE;
+    }
+    g_snprintf(name, 128, "%s_toggled.xbm", btnname);
+    if (toggled_mask && !read_mask(inst, path, name, &btn->unpressed_toggled_mask))
+    {
+        if (userdef)
+            btn->unpressed_toggled_mask = RrPixmapMaskCopy(btn->unpressed_mask);
+        else
+            btn->unpressed_toggled_mask = RrPixmapMaskNew(inst, 6, 6, (gchar*)toggled_mask);
+    }
+#define READ_BUTTON_MASK_COPY(type, fallback) \
+    g_snprintf(name, 128, "%s_" #type ".xbm", btnname); \
+    READ_MASK_COPY(name, btn->type##_mask, fallback);
+
+    READ_BUTTON_MASK_COPY(pressed, btn->unpressed_mask);
+    READ_BUTTON_MASK_COPY(disabled, btn->unpressed_mask);
+    READ_BUTTON_MASK_COPY(hover, btn->unpressed_mask);
+    if (toggled_mask) {
+        READ_BUTTON_MASK_COPY(pressed_toggled, btn->unpressed_toggled_mask);
+        READ_BUTTON_MASK_COPY(hover_toggled, btn->unpressed_toggled_mask);
+    }
 
-    /* inactive pressed */
-    name = g_strdup_printf("window.inactive.button.%s.pressed.image.color",
-                          btnname);
-    READ_COLOR(name, btn->unfocused_pressed_color,
-               RrColorCopy(theme->titlebut_unfocused_pressed_color));
-    g_free(name);
-
-    /* active disabled */
-    name = g_strdup_printf("window.active.button.%s.disabled.image.color",
-                           btnname);
-    READ_COLOR(name, btn->disabled_focused_color,
-               RrColorCopy(theme->titlebut_disabled_focused_color));
-    g_free(name);
-
-    /* inactive disabled */
-    name = g_strdup_printf("window.inactive.button.%s.disabled.image.color",
-                           btnname);
-    READ_COLOR(name, btn->disabled_unfocused_color,
-               RrColorCopy(theme->titlebut_disabled_unfocused_color));
-    g_free(name);
-
-    /* active hover */
-    name = g_strdup_printf("window.active.button.%s.hover.image.color",
-                           btnname);
-    READ_COLOR(name, btn->hover_focused_color, 
-               RrColorCopy(theme->titlebut_hover_focused_color));
-    g_free(name);
-
-    /* inactive hover */
-    name = g_strdup_printf("window.inactive.button.%s.hover.image.color",
-                           btnname);
-    READ_COLOR(name, btn->hover_unfocused_color,
-               RrColorCopy(theme->titlebut_hover_unfocused_color));
-    g_free(name);
-
-    /* active toggled unpressed */
-    name = g_strdup_printf("window.active.button.%s.toggled."
-                          "unpressed.image.color", btnname);
-    READ_COLOR(name, btn->toggled_focused_unpressed_color,
-               RrColorCopy(theme->titlebut_toggled_focused_unpressed_color));
-    g_free(name);
-
-    /* inactive toggled unpressed */
-    name = g_strdup_printf("window.inactive.button.%s.toggled."
-                           "unpressed.image.color", btnname);
-    READ_COLOR(name, btn->toggled_unfocused_unpressed_color,
-               RrColorCopy(theme->titlebut_toggled_unfocused_unpressed_color));
-    g_free(name);
-
-    /* active toggled hover */
-    name = g_strdup_printf("window.active.button.%s.toggled.hover.image.color",
-                           btnname);
-    READ_COLOR(name, btn->toggled_hover_focused_color,
-               RrColorCopy(theme->titlebut_toggled_hover_focused_color));
-
-    g_free(name);
-
-    /* inactive toggled hover */
-    name = g_strdup_printf("window.inactive.button.%s.toggled.hover."
-                           "image.color", btnname);
-    READ_COLOR(name, btn->toggled_hover_unfocused_color,
-               RrColorCopy(theme->titlebut_toggled_hover_unfocused_color));
-    g_free(name);
-
-    /* active toggled pressed */
-    name = g_strdup_printf("window.active.button.%s.toggled.pressed."
-                           "image.color", btnname);
-    READ_COLOR(name, btn->toggled_focused_pressed_color, 
-               RrColorCopy(theme->titlebut_toggled_focused_pressed_color));
-    g_free(name);
-   
-    /* inactive toggled pressed */
-    name = g_strdup_printf("window.inactive.button.%s.toggled.pressed."
-                           "image.color", btnname);
-    READ_COLOR(name, btn->toggled_unfocused_pressed_color,
-               RrColorCopy(theme->titlebut_toggled_unfocused_pressed_color));
-    g_free(name);
+#define READ_BUTTON_APPEARANCE(typedots, type, fallback) \
+    g_snprintf(name, 128, "window.active.button.%s." typedots ".image.color", btnname); \
+    READ_COLOR(name, btn->focused_##type##_color, RrColorCopy(theme->titlebut_focused_##type##_color)); \
+    g_snprintf(name, 128, "window.inactive.button.%s." typedots ".image.color", btnname); \
+    READ_COLOR(name, btn->unfocused_##type##_color, RrColorCopy(theme->titlebut_unfocused_##type##_color)); \
+    if (fallback) { \
+        g_snprintf(name, 128, "window.active.button.%s." typedots ".bg", btnname); \
+        g_snprintf(name2, 128, "window.active.button.%s.toggled.bg", btnname); \
+        READ_APPEARANCE_(name, name2, btn->a_focused_##type, TRUE, fbs->focused_##type); \
+        g_snprintf(name, 128, "window.inactive.button.%s." typedots ".bg", btnname); \
+        g_snprintf(name2, 128, "window.inactive.button.%s.toggled.bg", btnname); \
+        READ_APPEARANCE_(name, name2, btn->a_unfocused_##type, TRUE, fbs->unfocused_##type); \
+    } else { \
+        g_snprintf(name, 128, "window.active.button.%s." typedots ".bg", btnname); \
+        READ_APPEARANCE_COPY(name, btn->a_focused_##type, TRUE, fbs->focused_##type); \
+        g_snprintf(name, 128, "window.inactive.button.%s." typedots ".bg", btnname); \
+        READ_APPEARANCE_COPY(name, btn->a_unfocused_##type, TRUE, fbs->unfocused_##type); \
+    } \
+    btn->a_unfocused_##type->texture[0].typ##e = \
+      btn->a_focused_##type->texture[0].typ##e = \
+        RR_TEXTURE_MASK; \
+    btn->a_unfocused_##type->texture[0].data.mask.mask = \
+      btn->a_focused_##type->texture[0].data.mask.mask = \
+        btn->type##_mask; \
+    btn->a_unfocused_##type->texture[0].data.mask.color = \
+        btn->unfocused_##type##_color; \
+    btn->a_focused_##type->texture[0].data.mask.color = \
+        btn->focused_##type##_color;
+
+    READ_BUTTON_APPEARANCE("unpressed", unpressed, 0);
+    READ_BUTTON_APPEARANCE("pressed", pressed, 0);
+    READ_BUTTON_APPEARANCE("disabled", disabled, 0);
+    READ_BUTTON_APPEARANCE("hover", hover, 0);
+    if (toggled_mask) {
+        READ_BUTTON_APPEARANCE("unpressed.toggled", unpressed_toggled, 1);
+        READ_BUTTON_APPEARANCE("pressed.toggled", pressed_toggled, 0);
+        READ_BUTTON_APPEARANCE("hover.toggled", hover_toggled, 0);
+    }
 }
-
-
index eb9ac3f..8797f0b 100644 (file)
@@ -76,16 +76,16 @@ struct _RrTheme {
     RrColor *cb_unfocused_color;
     RrColor *title_focused_color;
     RrColor *title_unfocused_color;
-    RrColor *titlebut_disabled_focused_color;
-    RrColor *titlebut_disabled_unfocused_color;
-    RrColor *titlebut_hover_focused_color;
-    RrColor *titlebut_hover_unfocused_color;
-    RrColor *titlebut_toggled_hover_focused_color;
-    RrColor *titlebut_toggled_hover_unfocused_color;
-    RrColor *titlebut_toggled_focused_pressed_color;
-    RrColor *titlebut_toggled_unfocused_pressed_color;
-    RrColor *titlebut_toggled_focused_unpressed_color;
-    RrColor *titlebut_toggled_unfocused_unpressed_color;
+    RrColor *titlebut_focused_disabled_color;
+    RrColor *titlebut_unfocused_disabled_color;
+    RrColor *titlebut_focused_hover_color;
+    RrColor *titlebut_unfocused_hover_color;
+    RrColor *titlebut_focused_hover_toggled_color;
+    RrColor *titlebut_unfocused_hover_toggled_color;
+    RrColor *titlebut_focused_pressed_toggled_color;
+    RrColor *titlebut_unfocused_pressed_toggled_color;
+    RrColor *titlebut_focused_unpressed_toggled_color;
+    RrColor *titlebut_unfocused_unpressed_toggled_color;
     RrColor *titlebut_focused_pressed_color;
     RrColor *titlebut_unfocused_pressed_color;
     RrColor *titlebut_focused_unpressed_color;
@@ -114,15 +114,7 @@ struct _RrTheme {
     RrColor *osd_pressed_lineart;
     RrColor *osd_focused_lineart;
     RrColor *menu_title_shadow_color;
-    gchar    menu_title_shadow_alpha;
-    RrColor *menu_text_normal_shadow_color;
-    gchar    menu_text_normal_shadow_alpha;
-    RrColor *menu_text_selected_shadow_color;
-    gchar    menu_text_selected_shadow_alpha;
-    RrColor *menu_text_disabled_shadow_color;
-    gchar    menu_text_disabled_shadow_alpha;
-    RrColor *menu_text_disabled_selected_shadow_color;
-    gchar    menu_text_disabled_selected_shadow_alpha;
+    RrColor *menu_text_shadow_color;
 
     /* style settings - pics */
     RrPixel32 *def_win_icon; /* RGBA */
index 4e84f48..60caf0e 100644 (file)
@@ -329,7 +329,7 @@ gunichar obt_keyboard_keypress_to_unichar(ObtIC *ic, XEvent *ev)
 #ifndef X_HAVE_UTF8_STRING
                 /* convert to utf8 */
                 gchar *buf2 = buf;
-                buf = g_locale_to_utf8(buf2, r, NULL, NULL, NULL);
+                buf = g_locale_to_utf8(buf2, len, NULL, NULL, NULL);
                 g_free(buf2);
 #endif
 
index 223ad02..f200ae7 100644 (file)
--- a/obt/xml.c
+++ b/obt/xml.c
@@ -281,7 +281,7 @@ gboolean obt_xml_load_mem(ObtXmlInst *i,
     xmlResetLastError();
 
     i->doc = xmlParseMemory(data, len);
-    if (i) {
+    if (i->doc) {
         i->root = xmlDocGetRootElement(i->doc);
         if (!i->root) {
             xmlFreeDoc(i->doc);
index 4c3eb86..6f6391a 100644 (file)
@@ -26,131 +26,62 @@ typedef struct {
     } u;
     gboolean send;
     gboolean follow;
-    gboolean interactive;
 } Options;
 
-static gpointer setup_go_func(xmlNodePtr node,
-                              ObActionsIPreFunc *pre,
-                              ObActionsIInputFunc *input,
-                              ObActionsICancelFunc *cancel,
-                              ObActionsIPostFunc *post);
-static gpointer setup_send_func(xmlNodePtr node,
-                                ObActionsIPreFunc *pre,
-                                ObActionsIInputFunc *input,
-                                ObActionsICancelFunc *cancel,
-                                ObActionsIPostFunc *post);
+static gpointer setup_func(xmlNodePtr node);
+static gpointer setup_send_func(xmlNodePtr node);
 static void free_func(gpointer o);
 static gboolean run_func(ObActionsData *data, gpointer options);
 
-static gboolean i_pre_func(guint state, gpointer options);
-static gboolean i_input_func(guint initial_state,
-                             XEvent *e,
-                             ObtIC *ic,
-                             gpointer options,
-                             gboolean *used);
-static void i_post_func(gpointer options);
-
 /* 3.4-compatibility */
 static gpointer setup_go_last_func(xmlNodePtr node);
 static gpointer setup_send_last_func(xmlNodePtr node);
 static gpointer setup_go_abs_func(xmlNodePtr node);
-static gpointer setup_go_next_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post);
-static gpointer setup_send_next_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post);
-static gpointer setup_go_prev_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post);
-static gpointer setup_send_prev_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post);
-static gpointer setup_go_left_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post);
-static gpointer setup_send_left_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post);
-static gpointer setup_go_right_func(xmlNodePtr node,
-                                    ObActionsIPreFunc *pre,
-                                    ObActionsIInputFunc *input,
-                                    ObActionsICancelFunc *cancel,
-                                    ObActionsIPostFunc *post);
-static gpointer setup_send_right_func(xmlNodePtr node,
-                                      ObActionsIPreFunc *pre,
-                                      ObActionsIInputFunc *input,
-                                      ObActionsICancelFunc *cancel,
-                                      ObActionsIPostFunc *post);
-static gpointer setup_go_up_func(xmlNodePtr node,
-                                 ObActionsIPreFunc *pre,
-                                 ObActionsIInputFunc *input,
-                                 ObActionsICancelFunc *cancel,
-                                 ObActionsIPostFunc *post);
-static gpointer setup_send_up_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post);
-static gpointer setup_go_down_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post);
-static gpointer setup_send_down_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post);
+static gpointer setup_go_next_func(xmlNodePtr node);
+static gpointer setup_send_next_func(xmlNodePtr node);
+static gpointer setup_go_prev_func(xmlNodePtr node);
+static gpointer setup_send_prev_func(xmlNodePtr node);
+static gpointer setup_go_left_func(xmlNodePtr node);
+static gpointer setup_send_left_func(xmlNodePtr node);
+static gpointer setup_go_right_func(xmlNodePtr node);
+static gpointer setup_send_right_func(xmlNodePtr node);
+static gpointer setup_go_up_func(xmlNodePtr node);
+static gpointer setup_send_up_func(xmlNodePtr node);
+static gpointer setup_go_down_func(xmlNodePtr node);
+static gpointer setup_send_down_func(xmlNodePtr node);
 
 void action_desktop_startup(void)
 {
-    actions_register_i("GoToDesktop", setup_go_func, free_func, run_func);
-    actions_register_i("SendToDesktop", setup_send_func, free_func, run_func);
+    actions_register("GoToDesktop", setup_func, free_func, run_func);
+    actions_register("SendToDesktop", setup_send_func, free_func, run_func);
     /* 3.4-compatibility */
     actions_register("DesktopLast", setup_go_last_func, free_func, run_func);
     actions_register("SendToDesktopLast", setup_send_last_func,
                      free_func, run_func);
     actions_register("Desktop", setup_go_abs_func, free_func, run_func);
-    actions_register_i("DesktopNext", setup_go_next_func, free_func, run_func);
-    actions_register_i("SendToDesktopNext", setup_send_next_func,
-                       free_func, run_func);
-    actions_register_i("DesktopPrevious", setup_go_prev_func,
-                       free_func, run_func);
-    actions_register_i("SendToDesktopPrevious", setup_send_prev_func,
-                       free_func, run_func);
-    actions_register_i("DesktopLeft", setup_go_left_func, free_func, run_func);
-    actions_register_i("SendToDesktopLeft", setup_send_left_func,
-                       free_func, run_func);
-    actions_register_i("DesktopRight", setup_go_right_func,
-                       free_func, run_func);
-    actions_register_i("SendToDesktopRight", setup_send_right_func,
-                       free_func, run_func);
-    actions_register_i("DesktopUp", setup_go_up_func, free_func, run_func);
-    actions_register_i("SendToDesktopUp", setup_send_up_func,
-                       free_func, run_func);
-    actions_register_i("DesktopDown", setup_go_down_func, free_func, run_func);
-    actions_register_i("SendToDesktopDown", setup_send_down_func,
-                       free_func, run_func);
+    actions_register("DesktopNext", setup_go_next_func, free_func, run_func);
+    actions_register("SendToDesktopNext", setup_send_next_func,
+                     free_func, run_func);
+    actions_register("DesktopPrevious", setup_go_prev_func,
+                     free_func, run_func);
+    actions_register("SendToDesktopPrevious", setup_send_prev_func,
+                     free_func, run_func);
+    actions_register("DesktopLeft", setup_go_left_func, free_func, run_func);
+    actions_register("SendToDesktopLeft", setup_send_left_func,
+                     free_func, run_func);
+    actions_register("DesktopRight", setup_go_right_func,
+                     free_func, run_func);
+    actions_register("SendToDesktopRight", setup_send_right_func,
+                     free_func, run_func);
+    actions_register("DesktopUp", setup_go_up_func, free_func, run_func);
+    actions_register("SendToDesktopUp", setup_send_up_func,
+                     free_func, run_func);
+    actions_register("DesktopDown", setup_go_down_func, free_func, run_func);
+    actions_register("SendToDesktopDown", setup_send_down_func,
+                     free_func, run_func);
 }
 
-static gpointer setup_func(xmlNodePtr node,
-                           ObActionsIPreFunc *pre,
-                           ObActionsIInputFunc *input,
-                           ObActionsICancelFunc *cancel,
-                           ObActionsIPostFunc *post)
+static gpointer setup_func(xmlNodePtr node)
 {
     xmlNodePtr n;
     Options *o;
@@ -211,36 +142,12 @@ static gpointer setup_func(xmlNodePtr node,
     return o;
 }
 
-
-static gpointer setup_go_func(xmlNodePtr node,
-                              ObActionsIPreFunc *pre,
-                              ObActionsIInputFunc *input,
-                              ObActionsICancelFunc *cancel,
-                              ObActionsIPostFunc *post)
-{
-    Options *o;
-
-    o = setup_func(node, pre, input, cancel, post);
-    if (o->type == RELATIVE) {
-        o->interactive = TRUE;
-        *pre = i_pre_func;
-        *input = i_input_func;
-        *post = i_post_func;
-    }
-
-    return o;
-}
-
-static gpointer setup_send_func(xmlNodePtr node,
-                                ObActionsIPreFunc *pre,
-                                ObActionsIInputFunc *input,
-                                ObActionsICancelFunc *cancel,
-                                ObActionsIPostFunc *post)
+static gpointer setup_send_func(xmlNodePtr node)
 {
     xmlNodePtr n;
     Options *o;
 
-    o = setup_func(node, pre, input, cancel, post);
+    o = setup_func(node);
     if ((n = obt_xml_find_node(node, "desktop"))) {
         /* 3.4 compatibility */
         o->u.abs.desktop = obt_xml_node_int(n) - 1;
@@ -252,13 +159,6 @@ static gpointer setup_send_func(xmlNodePtr node,
     if ((n = obt_xml_find_node(node, "follow")))
         o->follow = obt_xml_node_bool(n);
 
-    if (o->type == RELATIVE && o->follow) {
-        o->interactive = TRUE;
-        *pre = i_pre_func;
-        *input = i_input_func;
-        *post = i_post_func;
-    }
-
     return o;
 }
 
@@ -312,62 +212,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
         actions_client_move(data, FALSE);
     }
 
-    return o->interactive;
-}
-
-static gboolean i_input_func(guint initial_state,
-                             XEvent *e,
-                             ObtIC *ic,
-                             gpointer options,
-                             gboolean *used)
-{
-    guint mods, initial_mods;
-
-    initial_mods = obt_keyboard_only_modmasks(initial_state);
-    mods = obt_keyboard_only_modmasks(e->xkey.state);
-    if (e->type == KeyRelease) {
-        /* remove from the state the mask of the modifier key being
-           released, if it is a modifier key being released that is */
-        mods &= ~obt_keyboard_keyevent_to_modmask(e);
-    }
-
-    if (e->type == KeyPress) {
-        KeySym sym = obt_keyboard_keypress_to_keysym(e);
-
-        /* Escape cancels no matter what */
-        if (sym == XK_Escape)
-            return FALSE;
-
-        /* There were no modifiers and they pressed enter */
-        else if ((sym == XK_Return || sym == XK_KP_Enter) && !initial_mods)
-            return FALSE;
-    }
-    /* They released the modifiers */
-    else if (e->type == KeyRelease && initial_mods && !(mods & initial_mods))
-    {
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-static gboolean i_pre_func(guint initial_state, gpointer options)
-{
-    guint initial_mods = obt_keyboard_only_modmasks(initial_state);
-    if (!initial_mods) {
-        Options *o = options;
-        o->interactive = FALSE;
-        return FALSE;
-    }
-    else {
-        screen_show_desktop_popup(screen_desktop, TRUE);
-        return TRUE;
-    }
-}
-
-static void i_post_func(gpointer options)
-{
-    screen_hide_desktop_popup();
+    return FALSE;
 }
 
 /* 3.4-compatilibity */
@@ -409,10 +254,7 @@ static gpointer setup_go_abs_func(xmlNodePtr node)
 }
 
 static void setup_rel(Options *o, xmlNodePtr node, gboolean lin,
-                      ObDirection dir,
-                      ObActionsIPreFunc *pre,
-                      ObActionsIInputFunc *input,
-                      ObActionsIPostFunc *post)
+                      ObDirection dir)
 {
     xmlNodePtr n;
 
@@ -423,149 +265,88 @@ static void setup_rel(Options *o, xmlNodePtr node, gboolean lin,
 
     if ((n = obt_xml_find_node(node, "wrap")))
         o->u.rel.wrap = obt_xml_node_bool(n);
-
-    if (input) {
-        o->interactive = TRUE;
-        *pre = i_pre_func;
-        *input = i_input_func;
-        *post = i_post_func;
-    }
 }
 
-static gpointer setup_go_next_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post)
+static gpointer setup_go_next_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, TRUE, OB_DIRECTION_EAST, pre, input, post);
+    setup_rel(o, node, TRUE, OB_DIRECTION_EAST);
     return o;
 }
 
-static gpointer setup_send_next_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post)
+static gpointer setup_send_next_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, TRUE, OB_DIRECTION_EAST,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, TRUE, OB_DIRECTION_EAST);
     return o;
 }
 
-static gpointer setup_go_prev_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post)
+static gpointer setup_go_prev_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, TRUE, OB_DIRECTION_WEST, pre, input, post);
+    setup_rel(o, node, TRUE, OB_DIRECTION_WEST);
     return o;
 }
 
-static gpointer setup_send_prev_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post)
+static gpointer setup_send_prev_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, TRUE, OB_DIRECTION_WEST,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, TRUE, OB_DIRECTION_WEST);
     return o;
 }
 
-static gpointer setup_go_left_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post)
+static gpointer setup_go_left_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, FALSE, OB_DIRECTION_WEST, pre, input, post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_WEST);
     return o;
 }
 
-static gpointer setup_send_left_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post)
+static gpointer setup_send_left_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, FALSE, OB_DIRECTION_WEST,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_WEST);
     return o;
 }
 
-static gpointer setup_go_right_func(xmlNodePtr node,
-                                    ObActionsIPreFunc *pre,
-                                    ObActionsIInputFunc *input,
-                                    ObActionsICancelFunc *cancel,
-                                    ObActionsIPostFunc *post)
+static gpointer setup_go_right_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, FALSE, OB_DIRECTION_EAST, pre, input, post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_EAST);
     return o;
 }
 
-static gpointer setup_send_right_func(xmlNodePtr node,
-                                      ObActionsIPreFunc *pre,
-                                      ObActionsIInputFunc *input,
-                                      ObActionsICancelFunc *cancel,
-                                      ObActionsIPostFunc *post)
+static gpointer setup_send_right_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, FALSE, OB_DIRECTION_EAST,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_EAST);
     return o;
 }
 
-static gpointer setup_go_up_func(xmlNodePtr node,
-                                 ObActionsIPreFunc *pre,
-                                 ObActionsIInputFunc *input,
-                                 ObActionsICancelFunc *cancel,
-                                 ObActionsIPostFunc *post)
+static gpointer setup_go_up_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, FALSE, OB_DIRECTION_NORTH, pre, input, post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_NORTH);
     return o;
 }
 
-static gpointer setup_send_up_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post)
+static gpointer setup_send_up_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, FALSE, OB_DIRECTION_NORTH,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_NORTH);
     return o;
 }
 
-static gpointer setup_go_down_func(xmlNodePtr node,
-                                   ObActionsIPreFunc *pre,
-                                   ObActionsIInputFunc *input,
-                                   ObActionsICancelFunc *cancel,
-                                   ObActionsIPostFunc *post)
+static gpointer setup_go_down_func(xmlNodePtr node)
 {
     Options *o = g_slice_new0(Options);
-    setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH, pre, input, post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH);
     return o;
 }
 
-static gpointer setup_send_down_func(xmlNodePtr node,
-                                     ObActionsIPreFunc *pre,
-                                     ObActionsIInputFunc *input,
-                                     ObActionsICancelFunc *cancel,
-                                     ObActionsIPostFunc *post)
+static gpointer setup_send_down_func(xmlNodePtr node)
 {
     Options *o = setup_follow(node);
-    setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH,
-              pre, (o->follow ? input : NULL), post);
+    setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH);
     return o;
 }
index 260a422..3c128d2 100644 (file)
@@ -2,6 +2,7 @@
 #include "openbox/moveresize.h"
 #include "openbox/client.h"
 #include "openbox/frame.h"
+#include "openbox/screen.h"
 #include "obt/prop.h"
 
 typedef struct {
@@ -95,6 +96,12 @@ static gboolean run_func(ObActionsData *data, gpointer options)
 static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch,
                            gboolean shaded)
 {
+    const Rect *full = screen_physical_area_all_monitors();
+    if (cx < full->x) { cw = cw + cx - full->x; cx = full->x; }
+    if (cy < full->y) { ch = ch + cy - full->y; cy = full->y; }
+    if (cx + cw > full->x + full->width) cw = full->x + full->width - cx;
+    if (cy + ch > full->y + full->height) ch = full->y + full->height - cy;
+
     /* let's make x and y client relative instead of screen relative */
     x = x - cx;
     y = ch - (y - cy); /* y is inverted, 0 is at the bottom of the window */
index 8151db5..0fdd8be 100644 (file)
@@ -3,6 +3,7 @@
 #include "openbox/place.h"
 #include "openbox/geom.h"
 #include "openbox/screen.h"
+#include "openbox/config.h"
 #include <glib.h>
 
 typedef struct {
@@ -82,7 +83,7 @@ static void free_func(gpointer options)
 static gboolean run_func(ObActionsData *data, gpointer options)
 {
     Options *o = options;
-    GravityPoint position = { 0, };
+    GravityPoint position = { { 0, }, };
     gint monitor = -1;
 
     if (o->use_position) {
index ded84eb..de19e33 100644 (file)
@@ -280,7 +280,7 @@ static gboolean send_to_menu_update(ObMenuFrame *frame, gpointer data)
         if ((desk == DESKTOP_ALL && c->desktop != DESKTOP_ALL) ||
             (c->desktop == DESKTOP_ALL && desk == screen_desktop))
         {
-            e->data.normal.mask = ob_rr_theme->btn_desk->mask;
+            e->data.normal.mask = ob_rr_theme->btn_desk->unpressed_mask;
             set_icon_color(e);
         } else
             e->data.normal.mask = NULL;
@@ -396,7 +396,7 @@ void client_menu_startup(void)
     menu_add_submenu(menu, CLIENT_LAYER, LAYER_MENU_NAME);
 
     e = menu_add_normal(menu, CLIENT_RESTORE, _("R_estore"), NULL, TRUE);
-    e->data.normal.mask = ob_rr_theme->btn_max->toggled_mask;
+    e->data.normal.mask = ob_rr_theme->btn_max->unpressed_toggled_mask;
     set_icon_color(e);
 
     menu_add_normal(menu, CLIENT_MOVE, _("_Move"), NULL, TRUE);
@@ -404,15 +404,15 @@ void client_menu_startup(void)
     menu_add_normal(menu, CLIENT_RESIZE, _("Resi_ze"), NULL, TRUE);
 
     e = menu_add_normal(menu, CLIENT_ICONIFY, _("Ico_nify"), NULL, TRUE);
-    e->data.normal.mask = ob_rr_theme->btn_iconify->mask;
+    e->data.normal.mask = ob_rr_theme->btn_iconify->unpressed_mask;
     set_icon_color(e);
 
     e = menu_add_normal(menu, CLIENT_MAXIMIZE, _("Ma_ximize"), NULL, TRUE);
-    e->data.normal.mask = ob_rr_theme->btn_max->mask;
+    e->data.normal.mask = ob_rr_theme->btn_max->unpressed_mask;
     set_icon_color(e);
 
     e = menu_add_normal(menu, CLIENT_SHADE, _("_Roll up/down"), NULL, TRUE);
-    e->data.normal.mask = ob_rr_theme->btn_shade->mask;
+    e->data.normal.mask = ob_rr_theme->btn_shade->unpressed_mask;
     set_icon_color(e);
 
     menu_add_normal(menu, CLIENT_DECORATE, _("Un/_Decorate"), NULL, TRUE);
@@ -422,6 +422,6 @@ void client_menu_startup(void)
     menu_add_separator(menu, -1, NULL);
 
     e = menu_add_normal(menu, CLIENT_CLOSE, _("_Close"), NULL, TRUE);
-    e->data.normal.mask = ob_rr_theme->btn_close->mask;
+    e->data.normal.mask = ob_rr_theme->btn_close->unpressed_mask;
     set_icon_color(e);
 }
index e5e9269..8fd2dc0 100644 (file)
@@ -84,8 +84,9 @@ guint           config_dock_show_delay;
 guint           config_dock_app_move_button;
 guint           config_dock_app_move_modifiers;
 
-guint config_keyboard_reset_keycode;
-guint config_keyboard_reset_state;
+guint    config_keyboard_reset_keycode;
+guint    config_keyboard_reset_state;
+gboolean config_keyboard_rebind_on_mapping_notify;
 
 gint     config_mouse_threshold;
 gint     config_mouse_dclicktime;
@@ -506,6 +507,9 @@ static void parse_keyboard(xmlNodePtr node, gpointer d)
             parse_key(n, NULL);
             n = obt_xml_find_node(n->next, "keybind");
         }
+
+    if ((n = obt_xml_find_node(node->children, "rebindOnMappingNotify")))
+        config_keyboard_rebind_on_mapping_notify = obt_xml_node_bool(n);
 }
 
 /*
@@ -543,13 +547,15 @@ static void parse_mouse(xmlNodePtr node, gpointer d)
     if ((n = obt_xml_find_node(node, "screenEdgeWarpMouse")))
         config_mouse_screenedgewarp = obt_xml_node_bool(n);
 
-    n = obt_xml_find_node(node, "context");
-    while (n) {
+    for (n = obt_xml_find_node(node, "context");
+         n;
+         n = obt_xml_find_node(n->next, "context"))
+    {
         gchar *modcxstr;
         ObFrameContext cx;
 
         if (!obt_xml_attr_string(n, "name", &cxstr))
-            goto next_n;
+            continue;
 
         modcxstr = g_strdup(cxstr); /* make a copy to mutilate */
         while (frame_next_context_from_string(modcxstr, &cx)) {
@@ -564,10 +570,15 @@ static void parse_mouse(xmlNodePtr node, gpointer d)
                 continue;
             }
 
-            nbut = obt_xml_find_node(n->children, "mousebind");
-            while (nbut) {
+            for (nbut = obt_xml_find_node(n->children, "mousebind");
+                 nbut;
+                 nbut = obt_xml_find_node(nbut->next, "mousebind"))
+            {
+
+                gchar **button, **buttons;
+
                 if (!obt_xml_attr_string(nbut, "button", &buttonstr))
-                    goto next_nbut;
+                    continue;
                 if (obt_xml_attr_contains(nbut, "action", "press"))
                     mact = OB_MOUSE_ACTION_PRESS;
                 else if (obt_xml_attr_contains(nbut, "action", "release"))
@@ -579,40 +590,31 @@ static void parse_mouse(xmlNodePtr node, gpointer d)
                 else if (obt_xml_attr_contains(nbut, "action", "drag"))
                     mact = OB_MOUSE_ACTION_MOTION;
                 else
-                    goto next_nbut;
+                    continue;
 
-                nact = obt_xml_find_node(nbut->children, "action");
-                while (nact) {
+                buttons = g_strsplit(buttonstr, " ", 0);
+                for (nact = obt_xml_find_node(nbut->children, "action");
+                     nact;
+                     nact = obt_xml_find_node(nact->next, "action"))
+                {
                     ObActionsAct *action;
 
+                    /* actions_parse() creates one ref to the action, but we need
+                     * exactly one ref per binding we use it for. */
                     if ((action = actions_parse(nact))) {
-                        gchar *p = buttonstr;
-                        while (*p) {
-                            gchar *s = strchr(p, ' ');
-                            if (s) {
-                                *s = '\0';
-                            } else {
-                                s = p;
-                                while (*++s);
-                                s--;
-                            }
-                            mouse_bind(p, cx, mact, action);
-                            actions_act_ref(action); /* ref the action for each binding */
-                            p = s+1;
+                        for (button = buttons; *button; ++button) {
+                            actions_act_ref(action);
+                            mouse_bind(*button, cx, mact, action);
                         }
-                        actions_act_unref(action); /* remove the extra ref */
+                        actions_act_unref(action);
                     }
-                    nact = obt_xml_find_node(nact->next, "action");
                 }
-            g_free(buttonstr);
-            next_nbut:
-            nbut = obt_xml_find_node(nbut->next, "mousebind");
+                g_strfreev(buttons);
+                g_free(buttonstr);
             }
         }
         g_free(modcxstr);
         g_free(cxstr);
-    next_n:
-        n = obt_xml_find_node(n->next, "context");
     }
 }
 
@@ -723,8 +725,10 @@ static void parse_theme(xmlNodePtr node, gpointer d)
             config_theme_window_list_icon_size = 96;
     }
 
-    n = obt_xml_find_node(node, "font");
-    while (n) {
+    for (n = obt_xml_find_node(node, "font");
+         n;
+         n = obt_xml_find_node(n->next, "font"))
+    {
         xmlNodePtr   fnode;
         RrFont     **font;
         gchar       *name = g_strdup(RrDefaultFontFamily);
@@ -747,7 +751,7 @@ static void parse_theme(xmlNodePtr node, gpointer d)
         else if (obt_xml_attr_contains(n, "place","InactiveOnScreenDisplay"))
             font = &config_font_inactiveosd;
         else
-            goto next_font;
+            continue;
 
         if ((fnode = obt_xml_find_node(n->children, "name"))) {
             g_free(name);
@@ -780,9 +784,6 @@ static void parse_theme(xmlNodePtr node, gpointer d)
             RrFontDescriptionFromString(*font, s);
             g_free(s);
         }
-
-    next_font:
-        n = obt_xml_find_node(n->next, "font");
     }
 }
 
@@ -813,12 +814,13 @@ static void parse_desktops(xmlNodePtr node, gpointer d)
         g_slist_free(config_desktops_names);
         config_desktops_names = NULL;
 
-        nname = obt_xml_find_node(n->children, "name");
-        while (nname) {
+        for (nname = obt_xml_find_node(n->children, "name");
+             nname;
+             nname = obt_xml_find_node(nname->next, "name"))
+        {
             config_desktops_names =
                 g_slist_append(config_desktops_names,
                                obt_xml_node_string(nname));
-            nname = obt_xml_find_node(nname->next, "name");
         }
     }
     if ((n = obt_xml_find_node(node, "popupTime")))
@@ -934,7 +936,7 @@ static void parse_dock(xmlNodePtr node, gpointer d)
         config_dock_show_delay = obt_xml_node_int(n);
     if ((n = obt_xml_find_node(node, "moveButton"))) {
         gchar *str = obt_xml_node_string(n);
-        guint b, s;
+        guint b = 0, s = 0;
         if (translate_button(str, &s, &b)) {
             config_dock_app_move_button = b;
             config_dock_app_move_modifiers = s;
@@ -968,12 +970,14 @@ static void parse_menu(xmlNodePtr node, gpointer d)
 #endif
     }
 
-    while ((node = obt_xml_find_node(node, "file"))) {
+    for (node = obt_xml_find_node(node, "file");
+         node;
+         node = obt_xml_find_node(node->next, "file"))
+    {
             gchar *c = obt_xml_node_string(node);
             config_menu_files = g_slist_append(config_menu_files,
                                                obt_paths_expand_tilde(c));
             g_free(c);
-            node = node->next;
     }
 }
 
@@ -1150,6 +1154,7 @@ void config_startup(ObtXmlInst *i)
 
     translate_key("C-g", &config_keyboard_reset_state,
                   &config_keyboard_reset_keycode);
+    config_keyboard_rebind_on_mapping_notify = TRUE;
 
     bind_default_keyboard();
 
index 786d236..32509cb 100644 (file)
@@ -181,6 +181,8 @@ extern guint config_desktop_popup_time;
 extern guint config_keyboard_reset_keycode;
 /*! The modifiers of the key combo which resets the keybaord chains */
 extern guint config_keyboard_reset_state;
+/*! Reload the keyboard bindings when the mapping changes */
+extern gboolean config_keyboard_rebind_on_mapping_notify;
 
 /*! Number of pixels a drag must go before being considered a drag */
 extern gint config_mouse_threshold;
index f18683d..ea9b7f4 100644 (file)
@@ -632,8 +632,6 @@ static gboolean hide_timeout(gpointer data)
     dock->hidden = TRUE;
     dock_configure();
 
-    hide_timeout_id = 0;
-
     return FALSE; /* don't repeat */
 }
 
@@ -643,30 +641,32 @@ static gboolean show_timeout(gpointer data)
     dock->hidden = FALSE;
     dock_configure();
 
-    show_timeout_id = 0;
-
     return FALSE; /* don't repeat */
 }
 
+static void destroy_timeout(gpointer data)
+{
+    gint *id = data;
+    *id = 0;
+}
+
 void dock_hide(gboolean hide)
 {
     if (!hide) {
         if (dock->hidden && config_dock_hide) {
             show_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT,
                                                  config_dock_show_delay,
-                                                 show_timeout, NULL, NULL);
+                                                 show_timeout, &show_timeout_id, destroy_timeout);
         } else if (!dock->hidden && config_dock_hide && hide_timeout_id) {
             if (hide_timeout_id) g_source_remove(hide_timeout_id);
-            hide_timeout_id = 0;
         }
     } else {
         if (!dock->hidden && config_dock_hide) {
             hide_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT,
                                                  config_dock_hide_delay,
-                                                 hide_timeout, NULL, NULL);
+                                                 hide_timeout, &hide_timeout_id, destroy_timeout);
         } else if (dock->hidden && config_dock_hide && show_timeout_id) {
             if (show_timeout_id) g_source_remove(show_timeout_id);
-            show_timeout_id = 0;
         }
     }
 }
index fcbe8cd..d48d32b 100644 (file)
@@ -639,11 +639,13 @@ static void event_process(const XEvent *ec, gpointer data)
     else if (e->type == MappingNotify) {
         /* 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.");
-        ob_set_state(OB_STATE_RECONFIGURING);
-        obt_keyboard_reload();
-        keyboard_rebind();
-        ob_set_state(OB_STATE_RUNNING);
+        if (config_keyboard_rebind_on_mapping_notify) {
+            ob_debug("Keyboard map changed. Reloading keyboard bindings.");
+            ob_set_state(OB_STATE_RECONFIGURING);
+            obt_keyboard_reload();
+            keyboard_rebind();
+            ob_set_state(OB_STATE_RUNNING);
+        }
     }
     else if (e->type == ClientMessage) {
         /* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
@@ -1207,7 +1209,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
             }
 
         if (e->xconfigurerequest.value_mask & CWStackMode) {
-            ObClient *sibling = NULL;
+            ObWindow *sibling = NULL;
             gulong ignore_start;
             gboolean ok = TRUE;
 
@@ -1218,7 +1220,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
                 if (win && WINDOW_IS_CLIENT(win) &&
                     WINDOW_AS_CLIENT(win) != client)
                 {
-                    sibling = WINDOW_AS_CLIENT(win);
+                    sibling = win;
+                }
+                else if (win && WINDOW_IS_DOCK(win))
+                {
+                    sibling = win;
                 }
                 else
                     /* an invalid sibling was specified so don't restack at
@@ -1579,13 +1585,17 @@ static void event_handle_client(ObClient *client, XEvent *e)
                               "invalid source indication %ld",
                               client->title, e->xclient.data.l[0]);
             } else {
-                ObClient *sibling = NULL;
+                ObWindow *sibling = NULL;
                 if (e->xclient.data.l[1]) {
                     ObWindow *win = window_find(e->xclient.data.l[1]);
                     if (WINDOW_IS_CLIENT(win) &&
                         WINDOW_AS_CLIENT(win) != client)
                     {
-                        sibling = WINDOW_AS_CLIENT(win);
+                        sibling = win;
+                    }
+                    if (WINDOW_IS_DOCK(win))
+                    {
+                        sibling = win;
                     }
                     if (sibling == NULL)
                         ob_debug_type(OB_DEBUG_APP_BUGS,
@@ -1847,8 +1857,14 @@ static gboolean event_handle_menu_input(XEvent *ev)
             if ((e = menu_entry_frame_under(ev->xbutton.x_root,
                                             ev->xbutton.y_root)))
             {
-                if (ev->type == ButtonPress && e->frame->child)
-                    menu_frame_select(e->frame->child, NULL, TRUE);
+                if (ev->type == ButtonPress) {
+                    /* We know this is a new press, so we don't have to
+                     * block release events anymore */
+                    menu_hide_delay_reset();
+
+                    if (e->frame->child)
+                        menu_frame_select(e->frame->child, NULL, TRUE);
+                }
                 menu_frame_select(e->frame, e, TRUE);
                 if (ev->type == ButtonRelease)
                     menu_entry_frame_execute(e, ev->xbutton.state);
@@ -2133,6 +2149,7 @@ static gboolean focus_delay_func(gpointer data)
     if (client_focus(d->client) && config_focus_raise)
         stacking_raise(CLIENT_AS_WINDOW(d->client));
     event_curtime = old;
+
     return FALSE; /* no repeat */
 }
 
@@ -2145,6 +2162,7 @@ static gboolean unfocus_delay_func(gpointer data)
     event_curserial = d->serial;
     focus_nothing();
     event_curtime = old;
+
     return FALSE; /* no repeat */
 }
 
index 2e36dd6..22249a5 100644 (file)
@@ -1683,8 +1683,7 @@ static void flash_done(gpointer data)
 {
     ObFrame *self = data;
 
-    if (self->focused != self->flash_on)
-        frame_adjust_focus(self, self->focused);
+    self->flash_timer = 0;
 }
 
 static gboolean flash_timeout(gpointer data)
@@ -1698,8 +1697,12 @@ static gboolean flash_timeout(gpointer data)
          now.tv_usec >= self->flash_end.tv_usec))
         self->flashing = FALSE;
 
-    if (!self->flashing)
+    if (!self->flashing) {
+        if (self->focused != self->flash_on)
+            frame_adjust_focus(self, self->focused);
+
         return FALSE; /* we are done */
+    }
 
     self->flash_on = !self->flash_on;
     if (!self->focused) {
@@ -1806,14 +1809,12 @@ static gboolean frame_animate_iconify(gpointer p)
     XMoveResizeWindow(obt_display, self->window, x, y, w, h);
     XFlush(obt_display);
 
-    if (time == 0)
-        frame_end_iconify_animation(self);
-
     return time > 0; /* repeat until we're out of time */
 }
 
-void frame_end_iconify_animation(ObFrame *self)
+void frame_end_iconify_animation(gpointer data)
 {
+    ObFrame *self = data;
     /* see if there is an animation going */
     if (self->iconify_animation_going == 0) return;
 
@@ -1830,6 +1831,7 @@ void frame_end_iconify_animation(ObFrame *self)
 
     /* we're not animating any more ! */
     self->iconify_animation_going = 0;
+    self->iconify_animation_timer = 0;
 
     XMoveResizeWindow(obt_display, self->window,
                       self->area.x, self->area.y,
@@ -1880,7 +1882,8 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying)
         self->iconify_animation_timer =
             g_timeout_add_full(G_PRIORITY_DEFAULT,
                                FRAME_ANIMATE_ICONIFY_STEP_TIME,
-                               frame_animate_iconify, self, NULL);
+                               frame_animate_iconify, self,
+                               frame_end_iconify_animation);
                                
 
         /* do the first step */
index 275faa7..a72227b 100644 (file)
@@ -273,7 +273,7 @@ void frame_flash_stop(ObFrame *self);
   will be called when the animation finishes. But if another animation is
   started in the meantime, the callback will never get called. */
 void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying);
-void frame_end_iconify_animation(ObFrame *self);
+void frame_end_iconify_animation(gpointer data);
 
 #define frame_iconify_animating(f) (f->iconify_animation_going != 0)
 
index 041e6d1..094d596 100644 (file)
@@ -131,115 +131,115 @@ void framerender_frame(ObFrame *self)
             t = ob_rr_theme->a_focused_title;
             l = ob_rr_theme->a_focused_label;
             m = (!(self->decorations & OB_FRAME_DECOR_MAXIMIZE) ?
-                 ob_rr_theme->btn_max->a_disabled_focused :
+                 ob_rr_theme->btn_max->a_focused_disabled :
                  (self->client->max_vert || self->client->max_horz ?
                   (self->max_press ?
-                   ob_rr_theme->btn_max->a_toggled_focused_pressed :
+                   ob_rr_theme->btn_max->a_focused_pressed_toggled :
                    (self->max_hover ?
-                    ob_rr_theme->btn_max->a_toggled_hover_focused :
-                    ob_rr_theme->btn_max->a_toggled_focused_unpressed)) :
+                    ob_rr_theme->btn_max->a_focused_hover_toggled :
+                    ob_rr_theme->btn_max->a_focused_unpressed_toggled)) :
                   (self->max_press ?
                    ob_rr_theme->btn_max->a_focused_pressed :
                    (self->max_hover ?
-                    ob_rr_theme->btn_max->a_hover_focused :
+                    ob_rr_theme->btn_max->a_focused_hover :
                     ob_rr_theme->btn_max->a_focused_unpressed))));
             n = ob_rr_theme->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
-                 ob_rr_theme->btn_iconify->a_disabled_focused :
+                 ob_rr_theme->btn_iconify->a_focused_disabled :
                  (self->iconify_press ?
                   ob_rr_theme->btn_iconify->a_focused_pressed :
                   (self->iconify_hover ?
-                   ob_rr_theme->btn_iconify->a_hover_focused :
+                   ob_rr_theme->btn_iconify->a_focused_hover :
                    ob_rr_theme->btn_iconify->a_focused_unpressed)));
             d = (!(self->decorations & OB_FRAME_DECOR_ALLDESKTOPS) ?
-                 ob_rr_theme->btn_desk->a_disabled_focused :
+                 ob_rr_theme->btn_desk->a_focused_disabled :
                  (self->client->desktop == DESKTOP_ALL ?
                   (self->desk_press ?
-                   ob_rr_theme->btn_desk->a_toggled_focused_pressed :
+                   ob_rr_theme->btn_desk->a_focused_pressed_toggled :
                    (self->desk_hover ?
-                    ob_rr_theme->btn_desk->a_toggled_hover_focused :
-                    ob_rr_theme->btn_desk->a_toggled_focused_unpressed)) :
+                    ob_rr_theme->btn_desk->a_focused_hover_toggled :
+                    ob_rr_theme->btn_desk->a_focused_unpressed_toggled)) :
                   (self->desk_press ?
                    ob_rr_theme->btn_desk->a_focused_pressed :
                    (self->desk_hover ?
-                    ob_rr_theme->btn_desk->a_hover_focused :
+                    ob_rr_theme->btn_desk->a_focused_hover :
                     ob_rr_theme->btn_desk->a_focused_unpressed))));
             s = (!(self->decorations & OB_FRAME_DECOR_SHADE) ?
-                 ob_rr_theme->btn_shade->a_disabled_focused :
+                 ob_rr_theme->btn_shade->a_focused_disabled :
                  (self->client->shaded ?
                   (self->shade_press ?
-                   ob_rr_theme->btn_shade->a_toggled_focused_pressed :
+                   ob_rr_theme->btn_shade->a_focused_pressed_toggled :
                    (self->shade_hover ?
-                    ob_rr_theme->btn_shade->a_toggled_hover_focused :
-                    ob_rr_theme->btn_shade->a_toggled_focused_unpressed)) :
+                    ob_rr_theme->btn_shade->a_focused_hover_toggled :
+                    ob_rr_theme->btn_shade->a_focused_unpressed_toggled)) :
                   (self->shade_press ?
                    ob_rr_theme->btn_shade->a_focused_pressed :
                    (self->shade_hover ?
-                    ob_rr_theme->btn_shade->a_hover_focused :
+                    ob_rr_theme->btn_shade->a_focused_hover :
                     ob_rr_theme->btn_shade->a_focused_unpressed))));
             c = (!(self->decorations & OB_FRAME_DECOR_CLOSE) ?
-                 ob_rr_theme->btn_close->a_disabled_focused :
+                 ob_rr_theme->btn_close->a_focused_disabled :
                  (self->close_press ?
                   ob_rr_theme->btn_close->a_focused_pressed :
                   (self->close_hover ?
-                   ob_rr_theme->btn_close->a_hover_focused :
+                   ob_rr_theme->btn_close->a_focused_hover :
                    ob_rr_theme->btn_close->a_focused_unpressed)));
         } else {
             t = ob_rr_theme->a_unfocused_title;
             l = ob_rr_theme->a_unfocused_label;
             m = (!(self->decorations & OB_FRAME_DECOR_MAXIMIZE) ?
-                 ob_rr_theme->btn_max->a_disabled_unfocused :
+                 ob_rr_theme->btn_max->a_unfocused_disabled :
                  (self->client->max_vert || self->client->max_horz ?
                   (self->max_press ?
-                   ob_rr_theme->btn_max->a_toggled_unfocused_pressed :
+                   ob_rr_theme->btn_max->a_unfocused_pressed_toggled :
                    (self->max_hover ?
-                    ob_rr_theme->btn_max->a_toggled_hover_unfocused :
-                    ob_rr_theme->btn_max->a_toggled_unfocused_unpressed)) :
+                    ob_rr_theme->btn_max->a_unfocused_hover_toggled :
+                    ob_rr_theme->btn_max->a_unfocused_unpressed_toggled)) :
                   (self->max_press ?
                    ob_rr_theme->btn_max->a_unfocused_pressed :
                    (self->max_hover ?
-                    ob_rr_theme->btn_max->a_hover_unfocused :
+                    ob_rr_theme->btn_max->a_unfocused_hover :
                     ob_rr_theme->btn_max->a_unfocused_unpressed))));
             n = ob_rr_theme->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
-                 ob_rr_theme->btn_iconify->a_disabled_unfocused :
+                 ob_rr_theme->btn_iconify->a_unfocused_disabled :
                  (self->iconify_press ?
                   ob_rr_theme->btn_iconify->a_unfocused_pressed :
                   (self->iconify_hover ?
-                   ob_rr_theme->btn_iconify->a_hover_unfocused :
+                   ob_rr_theme->btn_iconify->a_unfocused_hover :
                    ob_rr_theme->btn_iconify->a_unfocused_unpressed)));
             d = (!(self->decorations & OB_FRAME_DECOR_ALLDESKTOPS) ?
-                 ob_rr_theme->btn_desk->a_disabled_unfocused :
+                 ob_rr_theme->btn_desk->a_unfocused_disabled :
                  (self->client->desktop == DESKTOP_ALL ?
                   (self->desk_press ?
-                   ob_rr_theme->btn_desk->a_toggled_unfocused_pressed :
+                   ob_rr_theme->btn_desk->a_unfocused_pressed_toggled :
                    (self->desk_hover ?
-                    ob_rr_theme->btn_desk->a_toggled_hover_unfocused :
-                    ob_rr_theme->btn_desk->a_toggled_unfocused_unpressed)) :
+                    ob_rr_theme->btn_desk->a_unfocused_hover_toggled :
+                    ob_rr_theme->btn_desk->a_unfocused_unpressed_toggled)) :
                   (self->desk_press ?
                    ob_rr_theme->btn_desk->a_unfocused_pressed :
                    (self->desk_hover ?
-                    ob_rr_theme->btn_desk->a_hover_unfocused :
+                    ob_rr_theme->btn_desk->a_unfocused_hover :
                     ob_rr_theme->btn_desk->a_unfocused_unpressed))));
             s = (!(self->decorations & OB_FRAME_DECOR_SHADE) ?
-                 ob_rr_theme->btn_shade->a_disabled_unfocused :
+                 ob_rr_theme->btn_shade->a_unfocused_disabled :
                  (self->client->shaded ?
                   (self->shade_press ?
-                   ob_rr_theme->btn_shade->a_toggled_unfocused_pressed :
+                   ob_rr_theme->btn_shade->a_unfocused_pressed_toggled :
                    (self->shade_hover ?
-                    ob_rr_theme->btn_shade->a_toggled_hover_unfocused :
-                    ob_rr_theme->btn_shade->a_toggled_unfocused_unpressed)) :
+                    ob_rr_theme->btn_shade->a_unfocused_hover_toggled :
+                    ob_rr_theme->btn_shade->a_unfocused_unpressed_toggled)) :
                   (self->shade_press ?
                    ob_rr_theme->btn_shade->a_unfocused_pressed :
                    (self->shade_hover ?
-                    ob_rr_theme->btn_shade->a_hover_unfocused :
+                    ob_rr_theme->btn_shade->a_unfocused_hover :
                     ob_rr_theme->btn_shade->a_unfocused_unpressed))));
             c = (!(self->decorations & OB_FRAME_DECOR_CLOSE) ?
-                 ob_rr_theme->btn_close->a_disabled_unfocused :
+                 ob_rr_theme->btn_close->a_unfocused_disabled :
                  (self->close_press ?
                   ob_rr_theme->btn_close->a_unfocused_pressed :
                   (self->close_hover ?
-                   ob_rr_theme->btn_close->a_hover_unfocused :
+                   ob_rr_theme->btn_close->a_unfocused_hover :
                    ob_rr_theme->btn_close->a_unfocused_unpressed)));
         }
         clear = ob_rr_theme->a_clear;
index dd552a2..2ce664a 100644 (file)
@@ -270,8 +270,8 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
                                  e->xkey.state, e->xkey.x_root, e->xkey.y_root,
                                  0, OB_FRAME_CONTEXT_NONE, client);
             }
-            break;
             used = TRUE;
+            break;
         }
         p = p->next_sibling;
     }
index ae69acb..8804e12 100644 (file)
@@ -454,6 +454,7 @@ static gboolean menu_hide_delay_func(gpointer data)
 {
     menu_can_hide = TRUE;
     menu_timeout_id = 0;
+
     return FALSE; /* no repeat */
 }
 
@@ -518,6 +519,12 @@ gboolean menu_hide_delay_reached(void)
     return menu_can_hide;
 }
 
+void menu_hide_delay_reset(void)
+{
+    if (menu_timeout_id) g_source_remove(menu_timeout_id);
+    menu_hide_delay_func(NULL);
+}
+
 static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id)
 {
     ObMenuEntry *self;
index 50a301e..f036473 100644 (file)
@@ -187,6 +187,7 @@ void menu_show(gchar *name, const GravityPoint *pos, gint monitor,
                gboolean mouse, gboolean user_positioned,
                struct _ObClient *client);
 gboolean menu_hide_delay_reached(void);
+void menu_hide_delay_reset(void);
 
 /*! The show function is called right after a menu is shown */
 void menu_set_show_func(ObMenu *menu, ObMenuShowFunc func);
index 713ed59..2d50a3f 100644 (file)
@@ -203,8 +203,6 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
 static void menu_entry_frame_free(ObMenuEntryFrame *self)
 {
     if (self) {
-        menu_entry_unref(self->entry);
-
         window_remove(self->window);
 
         XDestroyWindow(obt_display, self->text);
@@ -221,6 +219,7 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self)
             g_hash_table_remove(menu_frame_map, &self->bullet);
         }
 
+        menu_entry_unref(self->entry);
         g_slice_free(ObMenuEntryFrame, self);
     }
 }
@@ -1034,7 +1033,6 @@ gboolean menu_frame_show_topmenu(ObMenuFrame *self, const GravityPoint *pos,
 static void remove_submenu_hide_timeout(ObMenuFrame *child)
 {
     if (submenu_hide_timer) g_source_remove(submenu_hide_timer);
-    submenu_hide_timer = 0;
 }
 
 gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
@@ -1135,11 +1133,9 @@ void menu_frame_hide_all(void)
 {
     GList *it;
 
-    if (config_submenu_show_delay) {
+    if (config_submenu_show_delay && submenu_show_timer)
         /* remove any submenu open requests */
-        if (submenu_show_timer) g_source_remove(submenu_show_timer);
-        submenu_show_timer = 0;
-    }
+        g_source_remove(submenu_show_timer);
     if ((it = g_list_last(menu_frame_visible)))
         menu_frame_hide(it->data);
 }
@@ -1189,6 +1185,11 @@ static gboolean submenu_show_timeout(gpointer data)
     return FALSE;
 }
 
+static void submenu_show_dest(gpointer data)
+{
+    submenu_show_timer = 0;
+}
+
 static gboolean submenu_hide_timeout(gpointer data)
 {
     g_assert(menu_frame_visible);
@@ -1196,6 +1197,11 @@ static gboolean submenu_hide_timeout(gpointer data)
     return FALSE;
 }
 
+static void submenu_hide_dest(gpointer data)
+{
+    submenu_hide_timer = 0;
+}
+
 void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
                        gboolean immediate)
 {
@@ -1217,11 +1223,9 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
     if (!entry && oldchild_entry)
         entry = oldchild_entry;
 
-    if (config_submenu_show_delay) {
+    if (config_submenu_show_delay && submenu_show_timer)
         /* remove any submenu open requests */
-        if (submenu_show_timer) g_source_remove(submenu_show_timer);
-        submenu_show_timer = 0;
-    }
+        g_source_remove(submenu_show_timer);
 
     self->selected = entry;
 
@@ -1245,7 +1249,7 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
                 submenu_hide_timer =
                     g_timeout_add_full(G_PRIORITY_DEFAULT,
                                        config_submenu_hide_delay,
-                                       submenu_hide_timeout, oldchild, NULL);
+                                       submenu_hide_timeout, oldchild, submenu_hide_dest);
             }
         }
     }
@@ -1265,7 +1269,7 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
                         g_timeout_add_full(G_PRIORITY_DEFAULT,
                                            config_submenu_show_delay,
                                            submenu_show_timeout,
-                                           self->selected, NULL);
+                                           self->selected, submenu_show_dest);
                 }
             }
             /* hide the grandchildren of this menu. and move the cursor to
index 37bf302..759fba3 100644 (file)
@@ -365,7 +365,7 @@ gboolean mouse_event(ObClient *client, XEvent *e)
 gboolean mouse_bind(const gchar *buttonstr, ObFrameContext context,
                     ObMouseAction mact, ObActionsAct *action)
 {
-    guint state, button;
+    guint state = 0, button = 0;
     ObMouseBinding *b;
     GSList *it;
 
index 06a13b4..7b0c60f 100644 (file)
@@ -367,11 +367,11 @@ gint main(gint argc, gchar **argv)
             edges_startup(reconfigure);
             prompt_startup(reconfigure);
 
-            /* do this after everything is started so no events will get
-               missed */
-            xqueue_listen();
-
             if (!reconfigure) {
+                /* do this after everything is started so no events will get
+                   missed */
+                xqueue_listen();
+
                 guint32 xid;
                 ObWindow *w;
 
index aa3ff63..de2c7dc 100644 (file)
@@ -360,11 +360,11 @@ static gboolean place_transient_splash(ObClient *client, Rect *area,
                     b = MAX(b, RECT_BOTTOM(m->frame->area));
                 }
             }
-            if (!first) {
-                *x = ((r + 1 - l) - frame_size.width) / 2 + l;
-                *y = ((b + 1 - t) - frame_size.height) / 2 + t;
-                return TRUE;
-            }
+        }
+        if (!first) {
+            *x = ((r + 1 - l) - frame_size.width) / 2 + l;
+            *y = ((b + 1 - t) - frame_size.height) / 2 + t;
+            return TRUE;
         }
     }
 
index 58551b5..0ef900a 100644 (file)
@@ -26,6 +26,8 @@
 #include "window.h"
 #include "event.h"
 #include "debug.h"
+#include "dock.h"
+#include "config.h"
 #include "obt/prop.h"
 
 GList  *stacking_list = NULL;
@@ -567,14 +569,18 @@ void stacking_add_nonintrusive(ObWindow *win)
 /*! Returns TRUE if client is occluded by the sibling. If sibling is NULL it
   tries against all other clients.
 */
-static gboolean stacking_occluded(ObClient *client, ObClient *sibling)
+static gboolean stacking_occluded(ObClient *client, ObWindow *sibling_win)
 {
     GList *it;
     gboolean occluded = FALSE;
+    ObClient *sibling = NULL;
+
+    if (sibling_win && WINDOW_IS_CLIENT(sibling_win))
+        sibling = WINDOW_AS_CLIENT(sibling_win);
 
     /* no need for any looping in this case */
     if (sibling && client->layer != sibling->layer)
-        return occluded;
+        return FALSE;
 
     for (it = g_list_previous(g_list_find(stacking_list, client)); it;
          it = g_list_previous(it))
@@ -601,6 +607,21 @@ static gboolean stacking_occluded(ObClient *client, ObClient *sibling)
                         break; /* we past its layer */
                 }
             }
+        } else if (WINDOW_IS_DOCK(it->data)) {
+            ObDock *dock = it->data;
+            if (RECT_INTERSECTS_RECT(dock->area, client->frame->area))
+            {
+                if (sibling_win != NULL) {
+                    if (DOCK_AS_WINDOW(dock) == sibling_win) {
+                        occluded = TRUE;
+                        break;
+                    }
+                }
+                else if (config_dock_layer == client->layer) {
+                    occluded = TRUE;
+                    break;
+                }
+            }
         }
     return occluded;
 }
@@ -608,14 +629,18 @@ static gboolean stacking_occluded(ObClient *client, ObClient *sibling)
 /*! Returns TRUE if client occludes the sibling. If sibling is NULL it tries
   against all other clients.
 */
-static gboolean stacking_occludes(ObClient *client, ObClient *sibling)
+static gboolean stacking_occludes(ObClient *client, ObWindow *sibling_win)
 {
     GList *it;
     gboolean occludes = FALSE;
+    ObClient *sibling = NULL;
+
+    if (sibling_win && WINDOW_IS_CLIENT(sibling_win))
+        sibling = WINDOW_AS_CLIENT(sibling_win);
 
     /* no need for any looping in this case */
     if (sibling && client->layer != sibling->layer)
-        return occludes;
+        return FALSE;
 
     for (it = g_list_next(g_list_find(stacking_list, client));
          it; it = g_list_next(it))
@@ -643,14 +668,35 @@ static gboolean stacking_occludes(ObClient *client, ObClient *sibling)
                 }
             }
         }
+        else if (WINDOW_IS_DOCK(it->data)) {
+            ObDock *dock = it->data;
+            if (RECT_INTERSECTS_RECT(dock->area, client->frame->area))
+            {
+                if (sibling_win != NULL) {
+                    if (DOCK_AS_WINDOW(dock) == sibling_win) {
+                        occludes = TRUE;
+                        break;
+                    }
+                }
+                else if (config_dock_layer == client->layer) {
+                    occludes = TRUE;
+                    break;
+                }
+            }
+        }
     return occludes;
 }
 
-gboolean stacking_restack_request(ObClient *client, ObClient *sibling,
+gboolean stacking_restack_request(ObClient *client, ObWindow *sibling_win,
                                   gint detail)
 {
     gboolean ret = FALSE;
 
+    ObClient *sibling = NULL;
+
+    if (sibling_win && WINDOW_IS_CLIENT(sibling_win))
+        sibling = WINDOW_AS_CLIENT(sibling_win);
+
     if (sibling && ((client->desktop != sibling->desktop &&
                      client->desktop != DESKTOP_ALL &&
                      sibling->desktop != DESKTOP_ALL) ||
@@ -674,7 +720,7 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling,
                  client->title, sibling ? sibling->title : "(all)");
         /* if this client occludes sibling (or anything if NULL), then
            lower it to the bottom */
-        if (stacking_occludes(client, sibling)) {
+        if (stacking_occludes(client, sibling_win)) {
             stacking_lower(CLIENT_AS_WINDOW(client));
             ret = TRUE;
         }
@@ -688,7 +734,7 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling,
     case TopIf:
         ob_debug("Restack request TopIf for client %s sibling %s",
                  client->title, sibling ? sibling->title : "(all)");
-        if (stacking_occluded(client, sibling)) {
+        if (stacking_occluded(client, sibling_win)) {
             stacking_raise(CLIENT_AS_WINDOW(client));
             ret = TRUE;
         }
@@ -696,11 +742,11 @@ gboolean stacking_restack_request(ObClient *client, ObClient *sibling,
     case Opposite:
         ob_debug("Restack request Opposite for client %s sibling %s",
                  client->title, sibling ? sibling->title : "(all)");
-        if (stacking_occluded(client, sibling)) {
+        if (stacking_occluded(client, sibling_win)) {
             stacking_raise(CLIENT_AS_WINDOW(client));
             ret = TRUE;
         }
-        else if (stacking_occludes(client, sibling)) {
+        else if (stacking_occludes(client, sibling_win)) {
             stacking_lower(CLIENT_AS_WINDOW(client));
             ret = TRUE;
         }
index c14aa2e..ebfa175 100644 (file)
@@ -71,7 +71,7 @@ void stacking_below(struct _ObWindow *window, struct _ObWindow *below);
 
 /*! Restack a window based upon a sibling (or all windows) in various ways.
   @param client The client to be restacked
-  @param sibling Another client to compare to, or NULL to compare to all
+  @param sibling A window to compare to, or NULL to compare to all
                  windows
   @param detail One of Above, Below, TopIf, BottomIf, Opposite
   @return TRUE if the client was restacked
@@ -79,7 +79,7 @@ void stacking_below(struct _ObWindow *window, struct _ObWindow *below);
   how each detail works with and without a sibling.
 */
 gboolean stacking_restack_request(struct _ObClient *client,
-                                  struct _ObClient *sibling,
+                                  struct _ObWindow *sibling_win,
                                   gint detail);
 
 #endif
index 1ba991d..789fa2d 100644 (file)
@@ -10,6 +10,7 @@ en@quot en@boldquot
 es
 et
 eu
+gl_ES
 fi
 fr
 he
index c7dc1cf..c61b780 100644 (file)
--- a/po/af.po
+++ b/po/af.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 3.5.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2012-02-20 11:26+0700\n"
 "Last-Translator: aspersieman <aspersieman@gmail.com>\n"
 "Language-Team: Afrikaans\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ongeldige aksie \"%s\" versoek. Daar is geen sodanige aksie nie."
@@ -40,7 +40,7 @@ msgstr "Voer uit"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Versuim om die pad \"%s\" vanaf utf8 te omskep."
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Kanselleer"
 
@@ -76,7 +76,7 @@ msgstr "Beëindig..."
 msgid "Not Responding"
 msgstr "Reageer Nie"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,11 +85,11 @@ msgstr ""
 "Die venster \"%s\" lyk nie asof dit reageer nie. Wil jy dit vorseer om te "
 "eindig deur dit die %s sein te stuur?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Beëindig Proses"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -98,7 +98,7 @@ msgstr ""
 "Die venster \"%s\" lyk nie asof dit reageer nie. Wil jy dit afsluitvan die X-"
 "bediener?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Sluit Af"
 
@@ -186,17 +186,17 @@ msgstr "Ve_rsier/Nie-versier"
 msgid "_Close"
 msgstr "_Sluit"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Ongeldige konteks \"%s\" in die muis binding"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ongeldige knoppie \"%s\" is gespesifiseer in die konfigurasielêer"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 77cc272..8bfef89 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2012-01-18 22:41-0000\n"
 "Last-Translator: كريم اولاد الشلحة <herr.linux88@gmail.com>\n"
 "Language-Team: Arabic <herr.linux88@gmail.com>\n"
@@ -21,7 +21,7 @@ msgstr ""
 "X-Poedit-Language: Arabic\n"
 "X-Poedit-Country: Morocco\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr ""
@@ -43,7 +43,7 @@ msgstr "تنفيذ"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "فشلت في تحويل المسار \"%s\" من utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "إلغاء"
 
@@ -79,25 +79,25 @@ msgstr "إنهاء..."
 msgid "Not Responding"
 msgstr "لا يستجيب"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 ""
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "إنهاء العملية"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr ""
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "قطع الإتصال"
 
@@ -185,17 +185,17 @@ msgstr "ضع/أزل الحواف (_D)"
 msgid "_Close"
 msgstr "أغلق (_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "سياق غير صحيح \"%s\" في ارتباط الفأرة"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "زر غير صحيح \"%s\" محدد في ملف الإعدادات"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index f4b8a1d..739cfd7 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox 3.4.11\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2012-07-16 20:55+0300\n"
 "Last-Translator: Mikalai Udodau <crom-a@tut.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Запытана недапушчальнае дзеянне \"%s\". Няма такога дзеяння."
@@ -41,7 +41,7 @@ msgstr "Выканаць"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Не ўдалося пераўтварыць шлях \"%s\" з utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Скасаваць"
 
@@ -77,7 +77,7 @@ msgstr "Прыбіццё..."
 msgid "Not Responding"
 msgstr "Не адказвае"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,11 +86,11 @@ msgstr ""
 "Акно \"%s\" не адказвае, здаецца. Ці хочаце прымусіць яго закрыцца, даслаўшы "
 "яму сігнал %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Скончыць працэс"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -98,7 +98,7 @@ msgid ""
 msgstr ""
 "Вакно \"%s\" не адказвае, здаецца.  Вы хочаце адлучыць яго ад X-сервера?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Адлучыць"
 
@@ -186,17 +186,17 @@ msgstr "Раз/Абрамленне (_D)"
 msgid "_Close"
 msgstr "Закрыць (_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Недапушчальны кантэкст \"%s\" у спалучэнні мышы"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Недапушчальная клавіша \"%s\" пазначана ў файле канфігурацыі"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 67712e9..c153324 100644 (file)
@@ -7,18 +7,18 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2007-06-01 19:02+0530\n"
 "Last-Translator: Runa Bhattacharjee <runabh@gmail.com>\n"
 "Language-Team: Bengali (India) <en@li.org>\n"
-"Language: \n"
+"Language: bn_IN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr ""
@@ -41,7 +41,7 @@ msgstr ""
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "\"%s\" পাথটি utf8 থেকে রূপান্তর করতে ব্যর্থ"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr ""
 
@@ -77,25 +77,25 @@ msgstr ""
 msgid "Not Responding"
 msgstr ""
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 ""
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr ""
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr ""
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr ""
 
@@ -183,17 +183,17 @@ msgstr "বিন্যাস পরিবর্তন (_D)"
 msgid "_Close"
 msgstr "বন্ধ করুন (_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "মাউস বাইন্ডিং সংক্রান্ত অবৈধ কনটেক্সট \"%s\""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "কনফিগ ফাইলে অবৈধ বাটন \"%s\" উল্লিখিত হয়েছে"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 22755e9..7f9f40b 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-05-25 19:23+0200\n"
 "Last-Translator: David Majà Martínez <davidmaja@gmail.com>\n"
 "Language-Team: catalan\n"
-"Language: \n"
+"Language: ca\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "L'acció sollicitada \"%s\" no és vàlida. Aquesta acció no existeix."
@@ -39,7 +39,7 @@ msgstr "Executa"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "No s'ha pogut convertir el camí \"%s\" des de utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancel·la"
 
@@ -75,7 +75,7 @@ msgstr "S'està finalitzant..."
 msgid "Not Responding"
 msgstr "No està responent"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,11 +84,11 @@ msgstr ""
 "Sembla que la finestra \"%s\" no està responent. Voleu forçar-la a "
 "finalitzar enviant el senyal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Finalitza el procés"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -97,7 +97,7 @@ msgstr ""
 "Sembla que la finestra \"%s\" no està responent.  Voleu desconnectar-la del "
 "servidor d'X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Desconnecta"
 
@@ -185,17 +185,17 @@ msgstr "Sense/Amb _decoració"
 msgid "_Close"
 msgstr "_Tanca"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "El context \"%s\" no és vàlid en la vinculació del ratolí"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "El botó especificat al fitxer de configuració \"%s\" no és vàlid."
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 91d0e9c..48742d3 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2011-06-03 17:49+0200\n"
 "Last-Translator: David Kolibac <david@kolibac.cz>\n"
 "Language-Team: Czech <cs@li.org>\n"
@@ -19,7 +19,7 @@ msgstr ""
 "X-Generator: Lokalize 1.2\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Požadována neplatná činnost \"%s\". Žádná taková činnost neexistuje."
@@ -41,7 +41,7 @@ msgstr "Spustit"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Nepodařilo se převést cestu \"%s\" z UTF-8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Zrušit"
 
@@ -77,25 +77,25 @@ msgstr "Ukončuje se..."
 msgid "Not Responding"
 msgstr "Neodpovídá"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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\" neodpovídá. Chcete jej ukončit signálem %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Ukončit proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Okno \"%s\" neodpovídá. Chcete jej odpojit od X serveru?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Odpojit"
 
@@ -183,17 +183,17 @@ msgstr "O_ddekorovat/Dekorovat"
 msgid "_Close"
 msgstr "_Zavřít"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Neplatný kontext \"%s\" v nastavení myši"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Neplatné tlačítko \"%s\" v konfiguračním souboru"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 4bcbcf0..9f949fe 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-08-19 16:50+0100\n"
 "Last-Translator: Jesper Sander <sander.contrib@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: da\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ugyldig operation \"%s\" anmodet. Operationen findes ikke."
@@ -39,7 +39,7 @@ msgstr "Udfør"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Fejl ved konvertering af stien \"%s\" fra utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Afbryd"
 
@@ -75,7 +75,7 @@ msgstr "Dræber..."
 msgid "Not Responding"
 msgstr "Svarer Ikke"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,18 +84,18 @@ msgstr ""
 "Vinduet \"%s\" svarer ikke. Vil du udføre tvunget afslutning ved at sende %s "
 "signalet?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Afslut proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Vinduet \"%s\" svarer ikke. Vil du frakoble vinduet fra X-serveren?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Frakoble"
 
@@ -183,17 +183,17 @@ msgstr "Fjern/tilføj _dekoration"
 msgid "_Close"
 msgstr "_Luk"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Ugyldig indhold \"%s\" i muse-kombination"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ugyldig tast \"%s\" specificeret i konfigurationsfilen"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index e820cb5..2db570f 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -11,17 +11,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2012-09-18 21:51+0100\n"
 "Last-Translator: Volker Ribbert <volker.nospam@netcologne.de>\n"
 "Language-Team:  <de@li.org>\n"
-"Language: \n"
+"Language: de\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ungültige Aktion \"%s\" angefordert. Es gibt keine solche."
@@ -43,7 +43,7 @@ msgstr "Ausführen"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Konnte Pfad \"%s\" nicht von UTF-8 konvertieren"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Abbrechen"
 
@@ -79,7 +79,7 @@ msgstr "Wird gelöscht..."
 msgid "Not Responding"
 msgstr "Reagiert nicht"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,11 +88,11 @@ msgstr ""
 "Das Fenster \"%s\" reagiert anscheinend nicht. Möchten Sie es durch Senden "
 "des %s-Signals trotzdem beenden?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Prozess beenden"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -101,7 +101,7 @@ msgstr ""
 "Das Fenster \"%s\" reagiert anscheinend nicht. Möchten Sie es vom X-Server "
 "trennen?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Trennen"
 
@@ -189,17 +189,17 @@ msgstr "_Titelleiste ein/aus"
 msgid "_Close"
 msgstr "_Schließen"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Maus-Einbindung mit ungültigem Kontext \"%s\""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ungültige Taste \"%s\" in Konfigurationsdatei"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 277f4e0..1e3ffea 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -1,6 +1,6 @@
-# Greek translations for PACKAGE package.
+# Greek translations for openbox
 # Copyright (C) 2012 Dana Jansens
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the openbox package.
 # Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
 #
 msgid ""
@@ -11,11 +11,11 @@ msgstr ""
 "PO-Revision-Date: 2012-04-28 23:21+0300\n"
 "Last-Translator: Efstathios Iosifidis <iosifidis@opensuse.org>\n"
 "Language-Team: Ελληνικά, Σύγχρονα <opensuse-translation-el@opensuse.org>\n"
+"Language: el\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"
-"Language: el\n"
 
 #: openbox/actions.c:149
 #, c-format
index 664a9ef..3d0d6fd 100644 (file)
@@ -1,7 +1,7 @@
 # English translations for openbox package.
-# Copyright (C) 2013 Dana Jansens
+# Copyright (C) 2014 Dana Jansens
 # This file is distributed under the same license as the openbox package.
-# Automatically generated, 2013.
+# Automatically generated, 2014.
 #
 # All this catalog "translates" are quotation characters.
 # The msgids must be ASCII and therefore cannot contain real quotation
@@ -32,8 +32,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox 3.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
-"PO-Revision-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
+"PO-Revision-Date: 2014-11-05 16:51+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: en\n"
@@ -42,7 +42,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Invalid action “\e[1m%s\e[0m” requested. No such action exists."
@@ -64,7 +64,7 @@ msgstr "Execute"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Failed to convert the path “\e[1m%s\e[0m” from utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancel"
 
@@ -100,7 +100,7 @@ msgstr "Killing..."
 msgid "Not Responding"
 msgstr "Not Responding"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -109,11 +109,11 @@ msgstr ""
 "The window “\e[1m%s\e[0m” does not seem to be responding.  Do you want to force "
 "it to exit by sending the %s signal?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "End Process"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -122,7 +122,7 @@ msgstr ""
 "The window “\e[1m%s\e[0m” does not seem to be responding.  Do you want to "
 "disconnect it from the X server?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Disconnect"
 
@@ -210,17 +210,17 @@ msgstr "Un/_Decorate"
 msgid "_Close"
 msgstr "_Close"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Invalid context “\e[1m%s\e[0m” in mouse binding"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Invalid button “\e[1m%s\e[0m” specified in config file"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 1b5994d..fc614cf 100644 (file)
@@ -1,7 +1,7 @@
 # English translations for openbox package.
-# Copyright (C) 2013 Dana Jansens
+# Copyright (C) 2014 Dana Jansens
 # This file is distributed under the same license as the openbox package.
-# Automatically generated, 2013.
+# Automatically generated, 2014.
 #
 # All this catalog "translates" are quotation characters.
 # The msgids must be ASCII and therefore cannot contain real quotation
@@ -29,8 +29,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox 3.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
-"PO-Revision-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
+"PO-Revision-Date: 2014-11-05 16:51+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: en\n"
@@ -39,7 +39,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Invalid action “%s” requested. No such action exists."
@@ -61,7 +61,7 @@ msgstr "Execute"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Failed to convert the path “%s” from utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancel"
 
@@ -97,7 +97,7 @@ msgstr "Killing..."
 msgid "Not Responding"
 msgstr "Not Responding"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -106,11 +106,11 @@ msgstr ""
 "The window “%s” does not seem to be responding.  Do you want to force it to "
 "exit by sending the %s signal?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "End Process"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -119,7 +119,7 @@ msgstr ""
 "The window “%s” does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Disconnect"
 
@@ -207,17 +207,17 @@ msgstr "Un/_Decorate"
 msgid "_Close"
 msgstr "_Close"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Invalid context “%s” in mouse binding"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Invalid button “%s” specified in config file"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 68aec7e..23bf77e 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -11,17 +11,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-05-04 16:39-0300\n"
 "Last-Translator: Nicolás de la Torre <ndelatorre@gmail.com>\n"
 "Language-Team: español <es@li.org>\n"
-"Language: \n"
+"Language: es\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "La acción \"%s\" solicitada es inválida. No existe tal acción."
@@ -43,7 +43,7 @@ msgstr "Ejecutar"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "No se pudo convertir la ruta \"%s\" desde utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancelar"
 
@@ -79,7 +79,7 @@ msgstr "Terminando..."
 msgid "Not Responding"
 msgstr "No está respondiendo"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,11 +88,11 @@ msgstr ""
 "La ventana \"%s\" parce que no responde.  ¿Desea forzar el cierre enviándole "
 "la señal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Finalizar proceso"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -101,7 +101,7 @@ msgstr ""
 "La ventana \"%s\" no parece estar respondiendo. ¿Desea desconectarla del "
 "servidor X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Desconectar"
 
@@ -189,17 +189,17 @@ msgstr "_Decorar"
 msgid "_Close"
 msgstr "_Cerrar"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Contexto inválido \"%s\" asociado al ratón"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Botón inválido \"%s\" especificado en el archivo de configuración"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index f18fa24..16abe80 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.11.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-04-21 21:40+0300\n"
 "Last-Translator: mihkel <turakas@gmail.com>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Taotleti kehtetut käsklust \"%s\". Sellist käsklust pole olemas."
@@ -41,7 +41,7 @@ msgstr "Käivita"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Raja \"%s\" ümberkodeerimine UTF8-st ebaõnnestus"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Katkesta"
 
@@ -77,7 +77,7 @@ msgstr "Tapan..."
 msgid "Not Responding"
 msgstr "Ei vasta"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,11 +86,11 @@ msgstr ""
 "Paistab, et aken \"%s\" ei vasta enam. Kas soovid teda jõuga väljuma sundida "
 "saates %s signaali?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Lõpeta protsess"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -99,7 +99,7 @@ msgstr ""
 "Paistab, et aken \"%s\" ei vasta enam. Kas soovid ta X serverist lahti "
 "ühendada?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Ühenda lahti"
 
@@ -187,17 +187,17 @@ msgstr "Äär_ed sisse/välja"
 msgid "_Close"
 msgstr "S_ulge"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Vigane kontekst \"%s\" hiire kiirklahvides"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Vigane nupp \"%s\" määratud seadistuste failis"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index e7282d1..17fe980 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-10-22 18:06+0100\n"
 "Last-Translator: Inko I. A. <inkoia@gmail.com>\n"
 "Language-Team: Inko I. A. <inkoia@gmail.com>\n"
-"Language: \n"
+"Language: eu\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Eskatutako \"%s\" ekintza baliogabea. Ez da ekintza hori existitzen."
@@ -39,7 +39,7 @@ msgstr "Exekutatu"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Hutsegitea \"%s\" helbidea utf8-tik bihurtzean"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Ezeztatu"
 
@@ -75,7 +75,7 @@ msgstr "Akabatzen..."
 msgid "Not Responding"
 msgstr "Erantzunik Ez"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,11 +84,11 @@ msgstr ""
 "Badirudi \"%s\" leihoak ez duela erantzuten. Nahi al duzu istea behartu %s "
 "seinalea bidaliz?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Prozesua Amaitu"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -97,7 +97,7 @@ msgstr ""
 "Badirudi \"%s\" leihoak ez duela erantzuten. Nahi al duzu leihoa X "
 "zerbitzaritik deskonektatu?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Deskonektatu"
 
@@ -185,17 +185,17 @@ msgstr "Des/_Dekoratu"
 msgid "_Close"
 msgstr "_Itxi"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Baliogabeko \"%s\" testuingurua sagu elkarketan"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Konfigurazio fitxategian zehaztutako \"%s\" botoia baliogabea"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 1981fd7..b256c77 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -10,17 +10,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.11\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-03-13 21:56+0100\n"
 "Last-Translator: Lauri Hakko <aperculum@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: fi\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Pyydettiin virheellinen toiminto \"%s\". Toimintoa ei ole olemassa."
@@ -42,7 +42,7 @@ msgstr "Suorita"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Polun \"%s\" muuntaminen utf8:sta epäonnistui"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Peruuta"
 
@@ -78,7 +78,7 @@ msgstr "Tapetaan..."
 msgid "Not Responding"
 msgstr "Ei vastaa"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -87,11 +87,11 @@ msgstr ""
 "Ikkuna \"%s\" ei näytä vastaavan.  Haluatko sulkea sen lähettämällä sille "
 "singaalin %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Lopeta prosessi"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -100,7 +100,7 @@ msgstr ""
 "Ikkuna \"%s\" ei näytä vastaavan.  Haluatko katkaista sen yhteyden X-"
 "palvelimeen?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Katkaise yhteys"
 
@@ -188,17 +188,17 @@ msgstr "(Epä)_reunusta"
 msgid "_Close"
 msgstr "_Sulje"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Virheellinen asiayhteys \"%s\" hiirisidonnoissa"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Asetustiedostossa määritelty painike \"%s\" on virheellinen"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 7745dcc..13a4c6b 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -11,17 +11,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-02 02:06+0100\n"
 "Last-Translator: Cyrille Bagard <nocbos@gmail.com>\n"
 "Language-Team: français <fr@li.org>\n"
-"Language: \n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Action demandée invalide \"%s\". Une telle action n'existe pas."
@@ -43,7 +43,7 @@ msgstr "Ex
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Échec de la conversion du chemin « %s » depuis l'UTF-8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Annuler"
 
@@ -79,7 +79,7 @@ msgstr "Tue..."
 msgid "Not Responding"
 msgstr "Ne répond pas"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,11 +88,11 @@ msgstr ""
 "La fenêtre \"%s\" semble ne pas répondre. Voulez-vous la forcer à se "
 "terminer en envoyant un signal %s ?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Fin de processus"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -101,7 +101,7 @@ msgstr ""
 "La fenêtre \"%s\" semble ne pas répondre. Voulez-vous la déconnecter du "
 "serveur X ?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Déconnexion"
 
@@ -189,17 +189,17 @@ msgstr "Ne pas/D
 msgid "_Close"
 msgstr "_Fermer"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Contexte « %s » invalide dans le paramétrage de la souris"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Bouton « %s » indiqué dans le fichier de configuration invalide"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
diff --git a/po/gl_ES.po b/po/gl_ES.po
new file mode 100644 (file)
index 0000000..003893b
--- /dev/null
@@ -0,0 +1,489 @@
+# Galician messages for openbox
+# Copyright (C) 2013 Dana Jansens
+# This file is distributed under the same license as the openbox package.
+# Javier Mancebo <palleiros@yahoo.es>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Openbox 3.5.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
+"PO-Revision-Date: 2013-10-29 18:52+0100\n"
+"Last-Translator: Javier Mancebo <palleiros@yahoo.es>\n"
+"Language-Team: Galician\n"
+"Language: gl_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openbox/actions.c:234
+#, c-format
+msgid "Invalid action \"%s\" requested. No such action exists."
+msgstr "Acción non válida \"%s\" solicitada. A acción non existe."
+
+#: openbox/actions/execute.c:245
+msgid "No"
+msgstr "Non"
+
+#: openbox/actions/execute.c:246
+msgid "Yes"
+msgstr "Si"
+
+#: openbox/actions/execute.c:250
+msgid "Execute"
+msgstr "Executar"
+
+#: openbox/actions/execute.c:259
+#, c-format
+msgid "Failed to convert the path \"%s\" from utf8"
+msgstr "Erro convertendo a ruta \"%s\" dende utf8"
+
+#: openbox/actions/exit.c:69 openbox/client.c:3665
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: openbox/actions/exit.c:70
+msgid "Exit"
+msgstr "Saír"
+
+#: openbox/actions/exit.c:74
+msgid "Are you sure you want to log out?"
+msgstr "Estas seguro de querer saír da sesión?"
+
+#: openbox/actions/exit.c:75
+msgid "Log Out"
+msgstr "Saír da sesión"
+
+#: openbox/actions/exit.c:78
+msgid "Are you sure you want to exit Openbox?"
+msgstr "Estas seguro de querer saír de Openbox?"
+
+#: openbox/actions/exit.c:79
+msgid "Exit Openbox"
+msgstr "Saír do Openbox"
+
+#: openbox/client.c:2115
+msgid "Unnamed Window"
+msgstr "Fiestra sen nome"
+
+#: openbox/client.c:2129 openbox/client.c:2160
+msgid "Killing..."
+msgstr "Abortando..."
+
+#: openbox/client.c:2131 openbox/client.c:2162
+msgid "Not Responding"
+msgstr "Sen resposta"
+
+#: openbox/client.c:3654
+#, 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 fiestra \"%s\" non semella estar a respostar. Queres forzala a saír "
+"enviándolle un sinal %s?"
+
+#: openbox/client.c:3656
+msgid "End Process"
+msgstr "Proceso de finalización"
+
+#: openbox/client.c:3660
+#, c-format
+msgid ""
+"The window \"%s\" does not seem to be responding.  Do you want to disconnect "
+"it from the X server?"
+msgstr ""
+"A fiestra \"%s\" non semella estar a respostar. Queres desconectala do "
+"Servidor X?"
+
+#: openbox/client.c:3662
+msgid "Disconnect"
+msgstr "Desconectar"
+
+#: openbox/client_list_combined_menu.c:93 openbox/client_list_menu.c:90
+msgid "Go there..."
+msgstr "Ir ali..."
+
+#: openbox/client_list_combined_menu.c:100
+msgid "Manage desktops"
+msgstr "Xestionar escritorios"
+
+#: openbox/client_list_combined_menu.c:101 openbox/client_list_menu.c:166
+msgid "_Add new desktop"
+msgstr "Engadir _novo escritorio"
+
+#: openbox/client_list_combined_menu.c:102 openbox/client_list_menu.c:167
+msgid "_Remove last desktop"
+msgstr "_Eliminar último escritorio"
+
+#: openbox/client_list_combined_menu.c:157
+msgid "Windows"
+msgstr "Fiestras"
+
+#: openbox/client_list_menu.c:214
+msgid "Desktops"
+msgstr "Escritorios"
+
+#: openbox/client_menu.c:259
+msgid "All desktops"
+msgstr "Tódolos escritorios"
+
+#: openbox/client_menu.c:371
+msgid "_Layer"
+msgstr "_Capa"
+
+#: openbox/client_menu.c:376
+msgid "Always on _top"
+msgstr "Sempre en_riba"
+
+#: openbox/client_menu.c:377
+msgid "_Normal"
+msgstr "_Normal"
+
+#: openbox/client_menu.c:378
+msgid "Always on _bottom"
+msgstr "Sempre em_baixo"
+
+#: openbox/client_menu.c:380
+msgid "_Send to desktop"
+msgstr "_Enviar ó escritorio"
+
+#: openbox/client_menu.c:384
+msgid "Client menu"
+msgstr "Menú do cliente"
+
+#: openbox/client_menu.c:394
+msgid "R_estore"
+msgstr "Re_staurar"
+
+#: openbox/client_menu.c:398
+msgid "_Move"
+msgstr "_Mover"
+
+#: openbox/client_menu.c:400
+msgid "Resi_ze"
+msgstr "_Redimensionar"
+
+#: openbox/client_menu.c:402
+msgid "Ico_nify"
+msgstr "Ico_nificar"
+
+#: openbox/client_menu.c:406
+msgid "Ma_ximize"
+msgstr "Ma_ximizar"
+
+#: openbox/client_menu.c:410
+msgid "_Roll up/down"
+msgstr "_Enrolar cara abaixo"
+
+#: openbox/client_menu.c:414
+msgid "Un/_Decorate"
+msgstr "Eliminar _decoración"
+
+#: openbox/client_menu.c:418
+msgid "_Close"
+msgstr "_Pechar"
+
+#: openbox/config.c:563
+#, c-format
+msgid "Invalid context \"%s\" in mouse binding"
+msgstr "Contexto non válido \"%s\" en atallo de rato"
+
+#: openbox/config.c:931
+#, c-format
+msgid "Invalid button \"%s\" specified in config file"
+msgstr "Botón \"%s\" non válido especificado en arquivo de configuración"
+
+#: openbox/config.c:956
+msgid ""
+"Openbox was compiled without image loading support. Icons in menus will not "
+"be loaded."
+msgstr ""
+
+#: openbox/debug.c:57
+#, c-format
+msgid "Unable to make directory '%s': %s"
+msgstr "Imposible crea-lo directorio \"%s\": %s"
+
+#: openbox/debug.c:195 openbox/openbox.c:377
+msgid "Close"
+msgstr "Pechar"
+
+#: openbox/keyboard.c:161
+msgid "Conflict with key binding in config file"
+msgstr "Conflito con atallo de teclado en arquivo de configuración"
+
+#: openbox/menu.c:103 openbox/menu.c:115
+#, c-format
+msgid "Unable to find a valid menu file \"%s\""
+msgstr "Imposible atopar un arquivo válido de menú \"%s\""
+
+#: openbox/menu.c:168
+#, c-format
+msgid "Failed to execute command for pipe-menu \"%s\": %s"
+msgstr "Erro ó executa-lo comando para \"pipe-menu\" \"%s\": %s"
+
+#: openbox/menu.c:182
+#, c-format
+msgid "Invalid output from pipe-menu \"%s\""
+msgstr "Saída non válida para \"pipe-menu\" \"%s\""
+
+#: openbox/menu.c:195
+#, c-format
+msgid "Attempted to access menu \"%s\" but it does not exist"
+msgstr "Tento de acceder a menú \"%s\" mais non existe"
+
+#: openbox/menu.c:411 openbox/menu.c:412
+msgid "More..."
+msgstr "Máis..."
+
+#: openbox/mouse.c:382
+#, c-format
+msgid "Invalid button \"%s\" in mouse binding"
+msgstr "Botón no válido \"%s\" en atallo de rato"
+
+#: openbox/openbox.c:137
+#, c-format
+msgid "Unable to change to home directory \"%s\": %s"
+msgstr "Imposible cambiar a directorio persoal \"%s\": %s"
+
+#: openbox/openbox.c:152
+msgid "Failed to open the display from the DISPLAY environment variable."
+msgstr "Erro abrindo \"display\" dende a variable de entorno DISPLAY"
+
+#: openbox/openbox.c:182
+msgid "Failed to initialize the obrender library."
+msgstr "Erro iniciando a biblioteca obrender"
+
+#: openbox/openbox.c:193
+msgid "X server does not support locale."
+msgstr "O Servidor X non soporta a locale."
+
+#: openbox/openbox.c:195
+msgid "Cannot set locale modifiers for the X server."
+msgstr "Non se poden fixar modificadores de locale para o servidor X."
+
+#: openbox/openbox.c:254
+msgid "Unable to find a valid config file, using some simple defaults"
+msgstr ""
+"Imposible atopar un arquivo válido de configuración, usando un por defecto."
+
+#: openbox/openbox.c:270
+#, 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 ""
+"Un ou mais erros de sintaxe XML foron atopados mentras se analizaban os "
+"arquivos de configuración de Openbox. Olla stdout para máis información. O "
+"último erro visto foi no arquivo \"%s\" liña %d, coa mensaxe: %s"
+
+#: openbox/openbox.c:295
+msgid "Unable to load a theme."
+msgstr "Imposible cargar un Tema."
+
+#: openbox/openbox.c:376
+msgid "Openbox Syntax Error"
+msgstr "Erro de sintaxe de Openbox."
+
+#: openbox/openbox.c:442
+#, c-format
+msgid "Restart failed to execute new executable \"%s\": %s"
+msgstr "Reinicio fallou ó executar novo executable \"%s\": %s"
+
+#: openbox/openbox.c:521 openbox/openbox.c:523
+msgid "Copyright (c)"
+msgstr "Copyright (c)"
+
+#: openbox/openbox.c:532
+msgid "Syntax: openbox [options]\n"
+msgstr "Sintaxe: openbox [opcións]\n"
+
+#: openbox/openbox.c:533
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcións:\n"
+
+#: openbox/openbox.c:534
+msgid "  --help              Display this help and exit\n"
+msgstr "  --help              Amosa esta axuda e sae\n"
+
+#: openbox/openbox.c:535
+msgid "  --version           Display the version and exit\n"
+msgstr "  --version           Amosa a versión e sae\n"
+
+#: openbox/openbox.c:536
+msgid "  --replace           Replace the currently running window manager\n"
+msgstr "  --replace           Reempraza o xestor de fiestras que está activo\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:540
+msgid "  --config-file FILE  Specify the path to the config file to use\n"
+msgstr ""
+"  --config-file FILE  Especifica a ruta ó arquivo de configuración en uso\n"
+
+#: openbox/openbox.c:541
+msgid "  --sm-disable        Disable connection to the session manager\n"
+msgstr "  --sm-disable        Inhabilita conexión ó xestor de sesión\n"
+
+#: openbox/openbox.c:542
+msgid ""
+"\n"
+"Passing messages to a running Openbox instance:\n"
+msgstr ""
+"\n"
+"Pasar mensaxes a unha instancia de Openbox correndo:\n"
+
+#: openbox/openbox.c:543
+msgid "  --reconfigure       Reload Openbox's configuration\n"
+msgstr "  --reconfigure       Recarga-la configuración de Openbox\n"
+
+#: openbox/openbox.c:544
+msgid "  --restart           Restart Openbox\n"
+msgstr "  --restart           Reiniciar Openbox\n"
+
+#: openbox/openbox.c:545
+msgid "  --exit              Exit Openbox\n"
+msgstr "  --exit              Saír de Openbox\n"
+
+#: openbox/openbox.c:546
+msgid ""
+"\n"
+"Debugging options:\n"
+msgstr ""
+"\n"
+"Opcións de depuración:\n"
+
+#: openbox/openbox.c:547
+msgid "  --sync              Run in synchronous mode\n"
+msgstr "  --sync              Executar en modo síncrono\n"
+
+#: openbox/openbox.c:548
+msgid "  --startup CMD       Run CMD after starting\n"
+msgstr ""
+
+#: openbox/openbox.c:549
+msgid "  --debug             Display debugging output\n"
+msgstr "  --debug             Amosa-la saída de depuración\n"
+
+#: openbox/openbox.c:550
+msgid "  --debug-focus       Display debugging output for focus handling\n"
+msgstr "  --debug-focus       Amosa-la saída de depuración manualmente\n"
+
+#: openbox/openbox.c:551
+msgid "  --debug-session     Display debugging output for session management\n"
+msgstr ""
+
+#: openbox/openbox.c:552
+msgid "  --debug-xinerama    Split the display into fake xinerama screens\n"
+msgstr ""
+"  --debug-xinerama    Divide a presentación en varias falsas pantallas "
+"xinerama\n"
+
+#: openbox/openbox.c:553
+#, c-format
+msgid ""
+"\n"
+"Please report bugs at %s\n"
+msgstr ""
+"\n"
+"Faga o favor de notificar bugs a %s\n"
+
+#: openbox/openbox.c:636 openbox/openbox.c:670
+#, c-format
+msgid "%s requires an argument\n"
+msgstr "%s require un argumento\n"
+
+#: openbox/openbox.c:713
+#, c-format
+msgid "Invalid command line argument \"%s\"\n"
+msgstr "Argumento de liña de comandos \"%s\" non válido\n"
+
+#: openbox/screen.c:106 openbox/screen.c:191
+#, c-format
+msgid "A window manager is already running on screen %d"
+msgstr "Un xestor de fiestras está xa correndo na pantalla %d"
+
+#: openbox/screen.c:127
+#, c-format
+msgid "Could not acquire window manager selection on screen %d"
+msgstr "Non se pode adquirir selección de xestor de fiestras na pantalla %d"
+
+#: openbox/screen.c:150
+#, c-format
+msgid "The WM on screen %d is not exiting"
+msgstr "O WM na pantalla %d non está a sair."
+
+#. 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:421
+#, c-format
+msgid ""
+"Openbox is configured for %d desktop, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgid_plural ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr[0] ""
+msgstr[1] ""
+
+#: openbox/screen.c:1204
+#, c-format
+msgid "desktop %i"
+msgstr "escritorio %i"
+
+#: openbox/startupnotify.c:241
+#, c-format
+msgid "Running %s"
+msgstr "Executando %s"
+
+#: openbox/translate.c:59
+#, c-format
+msgid "Invalid modifier key \"%s\" in key/mouse binding"
+msgstr "Tecla modificadora \"%s\" non válida en atallo de teclado/rato"
+
+#: openbox/translate.c:138
+#, c-format
+msgid "Invalid key code \"%s\" in key binding"
+msgstr "Chave \"%s\" inválida en atallo de teclado"
+
+#: openbox/translate.c:145
+#, c-format
+msgid "Invalid key name \"%s\" in key binding"
+msgstr "Nome de tecla \"%s\" non válido en atallo de teclado"
+
+#: openbox/translate.c:151
+#, c-format
+msgid "Requested key \"%s\" does not exist on the display"
+msgstr "A tecla \"%s\" solicitada non existe na visualización"
+
+#: openbox/prompt.c:154
+msgid "OK"
+msgstr "Feito"
+
+#~ msgid ""
+#~ "The SessionLogout action is not available since Openbox was built without "
+#~ "session management support"
+#~ msgstr ""
+#~ "A acción de Abandono de Sesión non está dispoñible xa que Openbox foi "
+#~ "construido sen soporte para o manexo de sesión"
+
+#~ msgid "Unable to save the session to \"%s\": %s"
+#~ msgstr "Imposible garda-la sesión a \"%s\": %s"
+
+#~ msgid "Error while saving the session to \"%s\": %s"
+#~ msgstr "Erro mentras se gardaba a sesión a \"%s\": %s"
+
+#~ msgid "Not connected to a session manager"
+#~ msgstr "Non conectado a un xestor de sesións"
+
+#~ msgid "X Error: %s"
+#~ msgstr "Erro de X: %s"
index bea0f01..ec3efae 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox git\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2013-01-01 20:23+0200\n"
 "Last-Translator: Eli Zaretskii <eliz@gnu.org>\n"
 "Language-Team: Rahut <genghiskhan@gmx.ca>\n"
@@ -21,7 +21,7 @@ msgstr ""
 "X-Generator: Poedit 1.5.4\n"
 
 # אין פעולה כזו קיימת
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "התבקשה פעולה שגויה ‫\"%s\". פעולה שכזו לא קיימת."
@@ -43,7 +43,7 @@ msgstr "הרצה"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "כשל בהמרת הנתיב ‫\"%s\" מן ‫utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "ביטול"
 
@@ -80,7 +80,7 @@ msgstr "הורג כעת..."
 msgid "Not Responding"
 msgstr "לא מגיב"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,18 +88,18 @@ msgid ""
 msgstr ""
 "נראה שהחלון ‫\"%s\" לא מגיב.  האם ברצונך לכפות אותו לצאת על ידי שליחת האות ‫%s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "סיום תהליך"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "נראה שהחלון ‫\"%s\" לא מגיב.  האם ברצונך לנתקו מן השרת ‫X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "ניתוק"
 
@@ -188,17 +188,17 @@ msgstr "אי/עיטור (_D)"
 msgid "_Close"
 msgstr "סגור (_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "הקשר שגוי ‫\"%s\" בכריכת עכבר"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "לחצן שגוי ‫\"%s\" צוין בקובץ תצורה"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 0b72236..13d0080 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,17 +6,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2009-04-05 16:53+0200\n"
 "Last-Translator: boljsa <asjlob AT vip.hr>\n"
 "Language-Team:  <asjlob AT vip.hr>\n"
-"Language: \n"
+"Language: hr\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Nevažeća akcija \"%s\" zatražena. Takva akcija ne postoji."
@@ -38,7 +38,7 @@ msgstr "Izvrši"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Neuspio pokušaj pretvorbe putanje \"%s\" iz utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Odustani"
 
@@ -74,7 +74,7 @@ msgstr "Ubijanje..."
 msgid "Not Responding"
 msgstr "Ne Odgovara"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -82,11 +82,11 @@ msgid ""
 msgstr ""
 "Prozor \"%s\" ne reagira. Želite li forsirati izlaženje šaljući %s signal?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Završetak Procesa"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -94,7 +94,7 @@ msgid ""
 msgstr ""
 "Prozor \"%s\" ne reagira. Želite li prekinuti njegovu vezu sa X serverom?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Prekid veze"
 
@@ -182,17 +182,17 @@ msgstr "Ne/_Dekoriranje"
 msgid "_Close"
 msgstr "_Zatvori"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Nevažeći kontekst \"%s\" u povezivanju miša"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Nevažeće dugme \"%s\" specificirano u konfiguracijskoj datoteci"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 75135ea..e55fb9b 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2011-09-03 16:09+0200\n"
 "Last-Translator: Laszlo Dvornik <rezuri@zoho.com>\n"
 "Language-Team: Hungarian\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Érvénytelen művelet \"%s\". Nem létezik ilyen művelet."
@@ -40,7 +40,7 @@ msgstr "Végrehajtás"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Az útvonalat nem sikerült átalakítani utf8-ból: \"%s\""
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Mégsem"
 
@@ -76,7 +76,7 @@ msgstr "Kilövés..."
 msgid "Not Responding"
 msgstr "Nem válaszol"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,18 +84,18 @@ msgid ""
 msgstr ""
 "A(z) \"%s\" ablak nem válaszol. Erőltessük a kilépést a %s jelzés küldésével?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Folyamat vége"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "A(z) \"%s\" ablak nem válaszol. Lekapcsoljuk az X kiszolgálóról?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Lekapcsolódás"
 
@@ -183,17 +183,17 @@ msgstr "_Dekoráció eltávolítása"
 msgid "_Close"
 msgstr "_Bezárás"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Érvénytelen környezet az egér hozzárendeléseknél: \"%s\""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Érvénytelen gomb a konfigurációs fájlban \"%s\""
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 93f9667..135eb5e 100644 (file)
--- a/po/ia.po
+++ b/po/ia.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: openbox 3.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2012-12-11 18:47+0400\n"
 "Last-Translator: Nik Kalach <nikka@fedoraproject.org>\n"
 "Language-Team: Interlingua (International Auxiliary Language Association) "
@@ -18,7 +18,7 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Gtranslator 2.91.5\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Le action requestate \"%s\" es invalide. Nulle tal action existe."
@@ -40,7 +40,7 @@ msgstr "Exequer"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Insuccesso al converter le percurso \"%s\" desde utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Annullar"
 
@@ -76,7 +76,7 @@ msgstr "Termination..."
 msgid "Not Responding"
 msgstr "Non es respondente"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,11 +85,11 @@ msgstr ""
 "Le fenestra \"%s\" non sembla esser respondente. Vole tu fortiar lo a sortir "
 "per inviar le signal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Finir processo"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -98,7 +98,7 @@ msgstr ""
 "Le fenestra \"%s\" non sembla esser respondente. Vole tu disconnecter lo del "
 "servitor X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Disconnecter"
 
@@ -186,17 +186,17 @@ msgstr "_Decorar/Indecorar"
 msgid "_Close"
 msgstr "_Clauder"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Contexto \"%s\" incorrecte in le parametros del mouse"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Button invalide \"%s\" es specificate in le file de configuration"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index f0b2694..22530a4 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.11.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-08-22 21:33+0200\n"
 "Last-Translator: Davide Truffa <davide@catoblepa.org>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,7 +20,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "L'azione \"%s\" richiesta non è valida e non esiste."
@@ -42,7 +42,7 @@ msgstr "Esegui"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Impossibile convertire il percorso utf8 \"%s\""
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Annulla"
 
@@ -78,7 +78,7 @@ msgstr "Termino..."
 msgid "Not Responding"
 msgstr "Non Risponde"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -87,11 +87,11 @@ msgstr ""
 "La finestra \"%s\" sembra non rispondere. Vuoi forzarne l'uscita inviando il "
 "segnale %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Termina Processo"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -99,7 +99,7 @@ msgid ""
 msgstr ""
 "La finestra \"%s\" non sembra rispondere. Vuoi disconnetterla dal server X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Disconnesso"
 
@@ -187,17 +187,17 @@ msgstr "Si/No _Decorazioni"
 msgid "_Close"
 msgstr "_Chiudi"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Il contesto \"%s\" indicato nelle associazioni mouse non è valido"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Il pulsante \"%s\" indicato nel file di configurazione non è valido"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index b311257..6c25b09 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-04 16:32+0100\n"
 "Last-Translator: Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>\n"
 "Language-Team: Japanese <ja@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr ""
@@ -41,7 +41,7 @@ msgstr "実行する"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "パス\"%s\"を utf8 から変換するのに失敗しました。"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "キャンセル"
 
@@ -77,7 +77,7 @@ msgstr "強制終了中..."
 msgid "Not Responding"
 msgstr "応答なし"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,18 +85,18 @@ msgid ""
 msgstr ""
 "ウィンドウ \"%s\" は応答していないようです。%s 信号を送り強制終了しますか?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "プロセスを終了する"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "ウィンドウ \"%s\" は応答していないようです。Xサーバから切断しますか?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "切断する"
 
@@ -184,17 +184,17 @@ msgstr "非/装飾(_D)"
 msgid "_Close"
 msgstr "閉じる(_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "マウス割り当てに於いて不正なコンテクスト \"%s\""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "不正なボタン\"%s\"が設定ファイルで指定されています。"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index d038b4a..d04541e 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.5.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2013-01-09 13:17+0200\n"
 "Last-Translator: Algimantas Margevičius <margevicius.algimantas@gmail.com>\n"
 "Language-Team: Lietuvių <>\n"
@@ -21,7 +21,7 @@ msgstr ""
 "%100<10 || n%100>=20) ? 1 : 2)\n"
 "X-Generator: Gtranslator 2.91.5\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Pareikalauta netinkamo veiksmo „%s“. Toks veiksmas neegzistuoja."
@@ -43,7 +43,7 @@ msgstr "Vykdyti"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Nepavyko išversti kelio „%s“ iš utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Atšaukti"
 
@@ -79,7 +79,7 @@ msgstr "Nutraukiama..."
 msgid "Not Responding"
 msgstr "Neatsako"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,18 +88,18 @@ msgstr ""
 "Langas „%s“ neatsako.  Ar norite priverstinai nutraukti vykdymą nusiųsdami "
 "%s signalą?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Baigti procesą"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Langas „%s“ neatsako.  Ar norite atjungti jį nuo X serverio?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Atjungti"
 
@@ -187,17 +187,17 @@ msgstr "Ne/d_ekoruoti"
 msgid "_Close"
 msgstr "_Užverti"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Netinkamas kontekstas „%s“ pelės susiejime"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Nustatymų faile nurodytas netinkamas pelės klavišas „%s“"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 99d8c22..39d05d3 100644 (file)
--- a/po/lv.po
+++ b/po/lv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 3.4.10\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-01-08 21:11+0200\n"
 "Last-Translator: Einars Sprugis <einars8@gmail.com>\n"
 "Language-Team: Latvian <locale@laka.lv>\n"
@@ -19,7 +19,7 @@ msgstr ""
 "2);\n"
 "X-Generator: Lokalize 1.0\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Prasīta neatļauta darbība \"%s\". Šāda darbība neeksistē."
@@ -41,7 +41,7 @@ msgstr "Izpildīt"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Neizdevās pārveidot ceļu \"%s\" no utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Atcelt"
 
@@ -77,7 +77,7 @@ msgstr "Nogalina..."
 msgid "Not Responding"
 msgstr "Neatbild"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,18 +86,18 @@ msgstr ""
 "Logs \"%s\" neatbild. Vai vēlieties to aizvērt piespiedu kārtā, nosūtot "
 "signālu %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Nobeigt procesu"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Logs \"%s\" neatbild. Vai vēlaties to atvienot no X servera?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Atvienot"
 
@@ -185,17 +185,17 @@ msgstr "Bez/Ar _dekorācijām"
 msgid "_Close"
 msgstr "Ai_zvērt"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Neatļauts konteksts \"%s\" peles saīsnē"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Konfigurācijas failā \"%s\" norādīts neatļauts taustiņš"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 8cb5a9c..3a5081b 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-18 23:30+0100\n"
 "Last-Translator: Pjotr <pjotrvertaalt@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -21,7 +21,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Er werd gevraagd om ongeldige actie '%s'. Deze actie bestaat niet."
@@ -43,7 +43,7 @@ msgstr "Uitvoeren"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Converteren van het pad '%s' vanuit UTF-8 is mislukt"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Annuleren"
 
@@ -79,7 +79,7 @@ msgstr "Bezig met termineren..."
 msgid "Not Responding"
 msgstr "Reageert niet"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -88,11 +88,11 @@ msgstr ""
 "Het venster '%s' reageert niet.  Wilt u het afsluiten forceren door het "
 "signaal %s te sturen?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Beëindig proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -101,7 +101,7 @@ msgstr ""
 "Het venster '%s' reageert niet.  Wilt u de verbinding van het venster met de "
 "X-server verbreken?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Verbreek verbinding"
 
@@ -189,17 +189,17 @@ msgstr "_Vensterrand weghalen/toevoegen"
 msgid "_Close"
 msgstr "_Sluiten"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Ongeldige context '%s' in muisbinding"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ongeldige knop '%s' opgegeven in het instellingenbestand"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index f6f83ee..1aa13a4 100644 (file)
--- a/po/no.po
+++ b/po/no.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-13 13:37+0100\n"
 "Last-Translator: Michael Kjelbergvik Thung <postlogic@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: no\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ugyldig operasjon \"%s\" etterspurt. Operasjonen finnes ikke."
@@ -39,7 +39,7 @@ msgstr "Utfør"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Feil ved konvertering av \"%s\" fra utf8 "
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Avbryt"
 
@@ -75,7 +75,7 @@ msgstr "Dreper..."
 msgid "Not Responding"
 msgstr "Svarer Ikke"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,11 +84,11 @@ msgstr ""
 "Vinduet \"%s\" svarer ikke. Vil du utføre tvunget avslutning ved å sende "
 "signalet %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Avslutt Prosess"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -97,7 +97,7 @@ msgstr ""
 "Vinduet \"%s\" svarer ikke. Vil du fjerne tilknytning av vinduet til X-"
 "serveren?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Fjern tilknytning"
 
@@ -185,17 +185,17 @@ msgstr "Fjern/Legg til _dekorasjon"
 msgid "_Close"
 msgstr "_Lukk"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Ugyldig innhold \"%s\" i binding for mus"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ugyldig tast \"%s\" spesifisert i konfigurasjonsfilen"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 70adc50..3e5a5a9 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr ""
@@ -40,7 +40,7 @@ msgstr ""
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr ""
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr ""
 
@@ -76,25 +76,25 @@ msgstr ""
 msgid "Not Responding"
 msgstr ""
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 ""
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr ""
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr ""
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr ""
 
@@ -182,17 +182,17 @@ msgstr ""
 msgid "_Close"
 msgstr ""
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr ""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr ""
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 271b1b5..437566e 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,28 +5,27 @@
 # Paweł Rusinek <p.rusinek@gmail.com>, 2007.
 # Piotr Drąg <raven@pmail.pl>, 2007.
 # Jakub Łojewski <lojewski@ovi.com>, 2010.
+# Jakub Błażejczyk <kuboslawik@gmail.com>, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
-"PO-Revision-Date: 2013-06-13 20:37+0100\n"
-"Last-Translator: Piotr Strębski <strebski@o2.pl>\n"
-"Language-Team: Polish <pl@li.org>\n"
-"Language: Polish\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
+"PO-Revision-Date: 2013-10-06 15:08+0200\n"
+"Last-Translator: Jakub Błażejczyk\n"
+"Language-Team: polski <kuboslawik@gmail.com>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 1.5.4\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr ""
-"Zażądano niepoprawnego polecenia \"%s\". Takowe polecenie nie istnieje."
+msgstr "Wywołana akcja \"%s\" nie istnieje."
 
 #: openbox/actions/execute.c:245
 msgid "No"
@@ -45,7 +44,7 @@ msgstr "Wykonaj"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Nie można przekonwertować ścieżki \"%s\" z UTF-8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Anuluj"
 
@@ -81,7 +80,7 @@ msgstr "Kończenie..."
 msgid "Not Responding"
 msgstr "Nie odpowiada"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -90,18 +89,18 @@ msgstr ""
 "Okno \"%s\" nie odpowiada. Czy wymusić zakończenie poprzez wysłanie sygnału "
 "%s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Zakończ proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Okno \"%s\" nie odpowiada. Odłączyć je od serwera X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Odłącz"
 
@@ -189,17 +188,17 @@ msgstr "Wyświetl/ukryj _dekoracje"
 msgid "_Close"
 msgstr "Z_amknij"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Nieprawidłowy kontekst \"%s\" w skrócie myszy"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
-msgstr "Nieprawidłowy przycisk \"%s\" określony w pliku konfiguracyjnym"
+msgstr "Nieprawidłowy klawisz \"%s\" określony w pliku konfiguracyjnym"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
@@ -208,7 +207,7 @@ msgstr ""
 #: openbox/debug.c:57
 #, c-format
 msgid "Unable to make directory '%s': %s"
-msgstr ""
+msgstr "Nie można utworzyć katalogu \"%s\": %s"
 
 #: openbox/debug.c:195 openbox/openbox.c:377
 msgid "Close"
@@ -271,8 +270,8 @@ msgstr "Nie można ustawić modyfikatorów lokalnych dla serwera X."
 #: openbox/openbox.c:254
 msgid "Unable to find a valid config file, using some simple defaults"
 msgstr ""
-"Nie można znaleźć prawidłowego pliku konfiguracyjnego, używanie domyślnych "
-"wartości."
+"Nie można znaleźć prawidłowego pliku konfiguracyjnego, używanie "
+"domyślnychwartości"
 
 #: openbox/openbox.c:270
 #, c-format
@@ -281,10 +280,10 @@ msgid ""
 "configuration files.  See stdout for more information.  The last error seen "
 "was in file \"%s\" line %d, with message: %s"
 msgstr ""
-"Podczas sprawdzania plików konfiguracyjnych Openboksa zostało znalezionych "
-"jeden lub więcej błędów składniowych XML.  Zobacz stdout, aby uzyskać więcej "
-"informacji.  Ostatnio błąd znaleziono w pliku \"%s\", linia %d, z "
-"wiadomością: %s"
+"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:295
 msgid "Unable to load a theme."
@@ -298,12 +297,12 @@ msgstr "Błąd składniowy Openboksa"
 #, c-format
 msgid "Restart failed to execute new executable \"%s\": %s"
 msgstr ""
-"Wykonanie nowego pliku wykonywalnego \"%s\" podczas ponownego uruchomienia "
-"nie powiodło się: %s"
+"Wykonanie nowego pliku wykonywalnego \"%s\" podczas ponownego "
+"uruchomienianie powiodło się: %s"
 
 #: openbox/openbox.c:521 openbox/openbox.c:523
 msgid "Copyright (c)"
-msgstr "Prawa autorskie (c)"
+msgstr "Copyright (c)"
 
 #: openbox/openbox.c:532
 msgid "Syntax: openbox [options]\n"
@@ -334,11 +333,11 @@ msgstr "  --replace           Zastępuje aktualnie działający menedżer okien\
 #. fine to leave it as FILE though.
 #: openbox/openbox.c:540
 msgid "  --config-file FILE  Specify the path to the config file to use\n"
-msgstr "  --config-file PLIK  Podaj ścieżkę do pliku konfiguracji\n"
+msgstr "  --config-file FILE  Podaj ścieżkę do pliku konfiguracji\n"
 
 #: openbox/openbox.c:541
 msgid "  --sm-disable        Disable connection to the session manager\n"
-msgstr "  --sm-disable        Wyłączenie połączenia z menedżerem sesji\n"
+msgstr "  --sm-disable        Nie tworzy połączenia z menedżerem sesji\n"
 
 #: openbox/openbox.c:542
 msgid ""
@@ -358,7 +357,7 @@ msgstr "  --restart           Ponownie uruchamia Openboksa\n"
 
 #: openbox/openbox.c:545
 msgid "  --exit              Exit Openbox\n"
-msgstr "  --exit              Zakończa Openbox\n"
+msgstr "  --exit              Opuść Openbox\n"
 
 #: openbox/openbox.c:546
 msgid ""
@@ -366,7 +365,7 @@ msgid ""
 "Debugging options:\n"
 msgstr ""
 "\n"
-"Opcje odnajdywania błędów:\n"
+"Opcje debugowania:\n"
 
 #: openbox/openbox.c:547
 msgid "  --sync              Run in synchronous mode\n"
@@ -378,13 +377,12 @@ msgstr ""
 
 #: openbox/openbox.c:549
 msgid "  --debug             Display debugging output\n"
-msgstr "  --debug             Wyświetla informacje o odnajdywaniu błędów\n"
+msgstr "  --debug             Wyświetla informacje o debugowaniu\n"
 
 #: openbox/openbox.c:550
 msgid "  --debug-focus       Display debugging output for focus handling\n"
 msgstr ""
-"  --debug-focus       Wyświetla wyjście odnajdywania błędów dla obsługi "
-"aktywacji\n"
+"  --debug-focus       Wyświetla wyjście debugowania obsługi aktywacji\n"
 
 #: openbox/openbox.c:551
 msgid "  --debug-session     Display debugging output for session management\n"
@@ -406,7 +404,7 @@ msgstr ""
 #: openbox/openbox.c:636 openbox/openbox.c:670
 #, c-format
 msgid "%s requires an argument\n"
-msgstr "%s wymaga argumentu\n"
+msgstr ""
 
 #: openbox/openbox.c:713
 #, c-format
@@ -441,14 +439,14 @@ msgid_plural ""
 "Openbox is configured for %d desktops, but the current session has %d.  "
 "Overriding the Openbox configuration."
 msgstr[0] ""
-"Openbox jest skonfigurowany dla %d pulpitu, ale obecna sesja posiada ich "
-"%d.  Odrzucenie konfigurcji Openboksa."
+"Openbox jest skonfigurowany dla %d pulpitu, ale bieżąca sesja ma %d. "
+"Nadpisywanie konfiguracji Openboksa."
 msgstr[1] ""
-"Openbox jest skonfigurowany dla %d pulpitów, ale obecna sesja posiada ich "
-"%d.  Odrzucenie konfigurcji Openboksa."
+"Openbox jest skonfigurowany dla %d pulpitu, ale bieżąca sesja ma %d. "
+"Nadpisywanie konfiguracji Openboksa."
 msgstr[2] ""
-"Openbox jest skonfigurowany dla %d pulpitów, ale obecna sesja posiada ich "
-"%d.  Odrzucenie konfigurcji Openboksa."
+"Openbox jest skonfigurowany dla %d pulpitu, ale bieżąca sesja ma %d. "
+"Nadpisywanie konfiguracji Openboksa."
 
 #: openbox/screen.c:1204
 #, c-format
@@ -464,7 +462,7 @@ msgstr "Uruchamianie %s"
 #, c-format
 msgid "Invalid modifier key \"%s\" in key/mouse binding"
 msgstr ""
-"Nieprawidłowy przycisk modyfikatora \"%s\" w skrócie klawiszowym lub myszy"
+"Nieprawidłowy klawisz modyfikatora \"%s\" w skrócie klawiszowym lub myszy"
 
 #: openbox/translate.c:138
 #, c-format
@@ -479,8 +477,30 @@ msgstr "Nieprawidłowa nazwa \"%s\" w skrócie klawiszowym"
 #: openbox/translate.c:151
 #, c-format
 msgid "Requested key \"%s\" does not exist on the display"
-msgstr "Żądany przycisk \"%s\" nie istnieje na ekranie"
+msgstr "Żądany klawisz \"%s\" nie istnieje na ekranie"
 
 #: openbox/prompt.c:154
 msgid "OK"
 msgstr "OK"
+
+#~ msgid "Unable to save the session to \"%s\": %s"
+#~ msgstr "Nie można zapisać sesji do \"%s\": %s"
+
+#~ msgid "Error while saving the session to \"%s\": %s"
+#~ msgstr "Wystąpił błąd podczas zapisywania sesji do \"%s\": %s"
+
+#~ msgid "Not connected to a session manager"
+#~ msgstr "Nie podłączono do menedżera sesji"
+
+#~ msgid "X Error: %s"
+#~ msgstr "Błąd X: %s"
+
+#~ 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"
index e7aaccb..14fc686 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -9,17 +9,18 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2013-09-05 10:10-0000\n"
 "Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
 "Language-Team: \n"
+"Language: pt\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"
 "X-Generator: Poedit 1.5.7\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Pedido de ação \"%s\" inválido. A ação não existe."
@@ -41,7 +42,7 @@ msgstr "Executar"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Falha a converter o caminho \"%s\" do utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancelar"
 
@@ -77,7 +78,7 @@ msgstr "Terminando..."
 msgid "Not Responding"
 msgstr "Não está a responder"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,11 +87,11 @@ msgstr ""
 "Parece que a janela \"%s\" não está a responder. Quer fechar a janela "
 "enviando o sinal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Terminar processo"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -99,7 +100,7 @@ msgstr ""
 "Parece que a janela \"%s\" não está a responder. Quer fechar a janela "
 "desligando o servidor X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Desligar"
 
@@ -187,17 +188,17 @@ msgstr "_Decorar/não decorar"
 msgid "_Close"
 msgstr "Fe_char"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Contexto inválido \"%s\" no atalho do rato"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Botão inválido \"%s\" no ficheiro de configuração"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 0965088..6ed66d8 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.5.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2011-08-01 15:26-0400\n"
 "Last-Translator: Og Maciel <ogmaciel@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <gnome-l10n-br@listas.cipsga.org.br>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ação inválida \"%s\" requisitada. Ação não existe."
@@ -40,7 +40,7 @@ msgstr "Executar"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Falha ao converter o caminho \"%s\" do utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Cancelar"
 
@@ -76,7 +76,7 @@ msgstr "Terminando..."
 msgid "Not Responding"
 msgstr "Não Responsivo"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,11 +85,11 @@ msgstr ""
 "A janela \"%s\" não está responsiva. Você deseja forçá-la a sair enviando o "
 "sinal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Terminar Processo"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -97,7 +97,7 @@ msgid ""
 msgstr ""
 "A janela \"%s\" não está responsiva. Você deseja desconectá-la do servidor X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Desconectar"
 
@@ -185,17 +185,17 @@ msgstr "(Não) _Decorar"
 msgid "_Close"
 msgstr "_Fechar"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Contexto \"%s\" inválido na associação do mouse"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Botão inválido \"%s\" especificado no arquivo de configuração"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 7243afd..80a2531 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -3,43 +3,21 @@
 # This file is distributed under the same license as the openbox package.
 # Radu Feflea <rfeflea@googlemail.com>, 2010.
 #
-# All this catalog "translates" are quotation characters.
-# The msgids must be ASCII and therefore cannot contain real quotation
-# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
-# and double quote (0x22). These substitutes look strange; see
-# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
-#
-# This catalog translates grave accent (0x60) and apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019).
-# It also translates pairs of apostrophe (0x27) to
-# left single quotation mark (U+2018) and right single quotation mark (U+2019)
-# and pairs of quotation mark (0x22) to
-# left double quotation mark (U+201C) and right double quotation mark (U+201D).
-#
-# When output to an UTF-8 terminal, the quotation characters appear perfectly.
-# When output to an ISO-8859-1 terminal, the single quotation marks are
-# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
-# grave/acute accent (by libiconv), and the double quotation marks are
-# transliterated to 0x22.
-# When output to an ASCII terminal, the single quotation marks are
-# transliterated to apostrophes, and the double quotation marks are
-# transliterated to 0x22.
-#
 msgid ""
 msgstr ""
 "Project-Id-Version: openbox 3.5.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-10-26 23:51+0100\n"
 "Last-Translator: Radu Feflea <rfeflea@googlemail.com>\n"
 "Language-Team: none\n"
-"Language: \n"
+"Language: ro\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:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Comanda internă “%s” invalidă. Nu există o astfel de comandă internă."
@@ -61,7 +39,7 @@ msgstr "Execută"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Calea “%s” nu a putut fi convertită din cod UTF-8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Anulare"
 
@@ -97,7 +75,7 @@ msgstr "Terminare forțată..."
 msgid "Not Responding"
 msgstr "Nu răspunde"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -106,11 +84,11 @@ msgstr ""
 "Fereastra “%s” nu pare să răspundă.  Doriți închiderea forțată printr-un "
 "semnal %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Terminare proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -118,7 +96,7 @@ msgid ""
 msgstr ""
 "Fereastra “%s” nu pare să răspundă.  Doriți deconectarea ei de la serverul X?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Deconectare"
 
@@ -206,17 +184,17 @@ msgstr "_Ascunde/afișează bara de titlu"
 msgid "_Close"
 msgstr "În_chide"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Context invalid “%s” în configurarea mouse-ului"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Buton invalid “%s” specificat în fișierul de configurare"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 41a70d7..62424a3 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,17 +9,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-05-02 10:25+0200\n"
 "Last-Translator: Moroz Sergey L. <se.seam@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: ru\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Запрошено неверное действие \"%s\". Такого действия нет."
@@ -41,7 +41,7 @@ msgstr "Запустить"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Неудачная конвертация пути \"%s\" из utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Отменить"
 
@@ -77,7 +77,7 @@ msgstr "Завершение..."
 msgid "Not Responding"
 msgstr "Нет ответа"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,18 +86,18 @@ msgstr ""
 "Похоже, окно \"%s\" не отвечает.  Хотите принудительно послать сигнал выхода "
 "%s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Закончить процесс"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Похоже, окно \"%s\" не отвечает.  Хотите отключить его от Х-сервера?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Отключить"
 
@@ -185,17 +185,17 @@ msgstr "Рас/Декорировать(_D)"
 msgid "_Close"
 msgstr "Закрыть(_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Неверная связь  \"%s\" в комбинации мыши"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "В файле конфигурации определена неверная кнопка \"%s\""
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 9a1bb29..249cb32 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox-3.4.8\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2009-07-16 17:30+0200\n"
 "Last-Translator: Frantisek Elias <elias.frantisek@gmail.com>\n"
 "Language-Team: Slovak <sk@sk.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Vyžiadaná neplatná akcia \"%s\". Takáto akcia neexistuje."
@@ -40,7 +40,7 @@ msgstr "Spustiť"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Nepodarilo sa skonvertovať cestu \"%s\" z utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Zrušiť"
 
@@ -76,25 +76,25 @@ msgstr "Ukončujem proces..."
 msgid "Not Responding"
 msgstr "Neodpovedá"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 ""
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Ukončiť proces"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Zdá sa, že okno \"%s\" neodpovedá. Chcete ho odpojiť z X serveru?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Odpojiť"
 
@@ -182,17 +182,17 @@ msgstr "(Ne)_Dekorovať"
 msgid "_Close"
 msgstr "Z_avrieť"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Neplatný kontext \"%s\" v priradení myši"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Neplatné tlačidlo \"%s\" špecifikované v konfiguračnom súbore"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index e3b8234..f4f961e 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -8,18 +8,18 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-05-18 15:43+0100\n"
 "Last-Translator: Jay Alexander Fleming <tito.nehru.naser@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: sr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Захтевана је непостојећа акција „%s“."
@@ -41,7 +41,7 @@ msgstr "Изврши"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Претварање путање „%s“ из УТФ-8 није успело"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Поништи"
 
@@ -77,7 +77,7 @@ msgstr "Убијање..."
 msgid "Not Responding"
 msgstr "Програм не одговара"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,11 +86,11 @@ msgstr ""
 "Изгледа да се прозор „%s“ не одазива. Желите ли да га приморате на излаз "
 "слањем сигнала %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Завршетак процеса"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -99,7 +99,7 @@ msgstr ""
 "Изгледа да се прозор „%s“ не одазива. Желите ли да га одспојите од графичког "
 "сервера?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Прекид везе"
 
@@ -187,17 +187,17 @@ msgstr "Не/Украси"
 msgid "_Close"
 msgstr "Затвори"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Погрешан садржај „%s“ у спајању миша"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Погрешно дугме „%s“ наведено у датотеци за подешавање"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index e42aae7..664e0dd 100644 (file)
@@ -8,18 +8,18 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2010-05-18 15:43+0100\n"
 "Last-Translator: Jay Alexander Fleming <tito.nehru.naser@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: sr@latin\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Zahtevana je nepostojeća akcija „%s“."
@@ -41,7 +41,7 @@ msgstr "Izvrši"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Pretvaranje putanje „%s“ iz UTF-8 nije uspelo"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Poništi"
 
@@ -77,7 +77,7 @@ msgstr "Ubijanje..."
 msgid "Not Responding"
 msgstr "Program ne odgovara"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -86,11 +86,11 @@ msgstr ""
 "Izgleda da se prozor „%s“ ne odaziva. Želite li da ga primorate na izlaz "
 "slanjem signala %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Završetak procesa"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -99,7 +99,7 @@ msgstr ""
 "Izgleda da se prozor „%s“ ne odaziva. Želite li da ga odspojite od grafičkog "
 "servera?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Prekid veze"
 
@@ -187,17 +187,17 @@ msgstr "Ne/Ukrasi"
 msgid "_Close"
 msgstr "Zatvori"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Pogrešan sadržaj „%s“ u spajanju miša"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Pogrešno dugme „%s“ navedeno u datoteci za podešavanje"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 6581cad..5e37759 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.5.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2011-08-01 18:11+0100\n"
 "Last-Translator: Mikael Magnusson <mikachu@icculus.org>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: sv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Ogiltig action \"%s\" efterfrågades, men den finns inte."
@@ -39,7 +39,7 @@ msgstr "K
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Lyckades inte konvertera sökvägen \"%s\" från utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Avbryt"
 
@@ -75,7 +75,7 @@ msgstr "D
 msgid "Not Responding"
 msgstr "Svarar inte"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,11 +84,11 @@ msgstr ""
 "Fönstret \"%s\" verkar inte svara.  Vill du tvinga det att avslutas genom "
 "att skicka signalen %s?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Avsluta process"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -97,7 +97,7 @@ msgstr ""
 "Fönstret \"%s\" verkar inte svara.  Vill du stänga dess anslutning till X-"
 "servern?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Stäng anslutning"
 
@@ -185,17 +185,17 @@ msgstr "_Dekorationer"
 msgid "_Close"
 msgstr "Stän_g"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Ogiltig kontext \"%s\" i musbindning"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Ogiltig knapp \"%s\" angiven i konfigurationsfilen"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index e7f88f9..1effe26 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2011-04-28 00:23+0300\n"
 "Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n"
 "Language-Team: Turkish <gnome-turk@gnome.org>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "\"%s\" geçersiz eylem isteği. Böyle bir eylem yok."
@@ -40,7 +40,7 @@ msgstr "Çalıştır"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "\"%s\" yolu utf8'e çevrilmesi başarısız oldu"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "İptal"
 
@@ -76,7 +76,7 @@ msgstr "Sonlandırılıyor..."
 msgid "Not Responding"
 msgstr "Cevap Vermiyor"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,11 +85,11 @@ msgstr ""
 "\"%s\" penceresi cevap veriyor gibi görünmüyor. %s sinyali göndererek zorla "
 "sonlandırmak ister misiniz?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Süreci Sonlandır"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -98,7 +98,7 @@ msgstr ""
 "\"%s\" penceresi cevap veriyor gibi görünmüyor. X sunucusu ile bağlantısını "
 "sonlandırmak ister misiniz?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Bağlantıyı Kes"
 
@@ -186,17 +186,17 @@ msgstr "Geri Al/Kapla"
 msgid "_Close"
 msgstr "_Kapat"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Fare bağında geçersinz \"%s\" içeriği"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Yapılandırılma dosyasında belirtilmiş geçersiz \"%s\" düğmesi"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 9ae517a..9d300ef 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-12-09 20:12+0200\n"
 "Last-Translator: Serhiy Lysovenko <lisovenko.s[at]gmail[dot]com>\n"
 "Language-Team: Ukrainian <linux.org.ua>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Здійснено запит на неіснуючу дію \"%s\"."
@@ -40,7 +40,7 @@ msgstr "Виконати"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Не вдалося конвертувати шлях \"%s\" з utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Скасувати"
 
@@ -76,7 +76,7 @@ msgstr "Знищення..."
 msgid "Not Responding"
 msgstr "Не відповідає"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -85,18 +85,18 @@ msgstr ""
 "Схоже, вікно \"%s\" не відповідає. Чи бажаєте примусово завершити програму, "
 "пославши сигнал \"%s\"?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Примусове завершення"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "Вікно \"%s\" не відповідає. Чи бажаєте його від'єднати від X сервера?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Від'єднати"
 
@@ -184,17 +184,17 @@ msgstr "Перемкнути декорацію (_D)"
 msgid "_Close"
 msgstr "Закрити (_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Некоректний контекст \"%s\" в прив'язці клавіш мишки"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Некоректна кнопка \"%s\" вказана у файлі конфігурації"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index be64a99..b81f7e9 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,17 +7,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-11 02:07+0100\n"
 "Last-Translator: Quan Tran <qeed.quan@gmail.com>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: vi\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "Hành động \"%s\" làm không được. Hành động đó không có."
@@ -39,7 +39,7 @@ msgstr "Hành động"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "Không thể chuyển chỗ \"%s\" từ utf8"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "Bãi bỏ"
 
@@ -75,7 +75,7 @@ msgstr "Đang giết..."
 msgid "Not Responding"
 msgstr "Không phản ứng"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to force it "
@@ -84,11 +84,11 @@ msgstr ""
 "Cái cửa sổ \"%s\" không phản ứng được. Có muốn bắt nó đi ra bằng gửi đi %s "
 "tính hiệu?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "Giết Process"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
@@ -96,7 +96,7 @@ msgid ""
 msgstr ""
 "Cái cửa sổ \"%s\" không phản ứng được. Có muốn rời nó ra X server không"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "Rời ra"
 
@@ -184,17 +184,17 @@ msgstr "_Trang/Không Trang trí"
 msgid "_Close"
 msgstr "Đón_g"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "Vô hiệu văn cảnh \"%s\" ở trong chuột đặt"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "Sai nút \"%s\" ở trong hình thể"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index dd3fc2a..4ef36dd 100644 (file)
@@ -9,17 +9,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-11 22:07+0800\n"
 "Last-Translator: zhou sf <sxzzsf@gmail.com>\n"
 "Language-Team: Simplified Chinese\n"
-"Language: \n"
+"Language: zh_CN\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 ? 0 : 1;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "请求的动作 \"%s\" 无效。该动作不存在。"
@@ -41,7 +41,7 @@ msgstr "执行"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "从 utf8 转换路径 \"%s\" 时失败"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "取消"
 
@@ -77,25 +77,25 @@ msgstr "杀死中..."
 msgid "Not Responding"
 msgstr "无响应"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 "窗口 \"%s\" 似乎失去了响应. 发送信号 %s 以强制退出吗?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "结束进程"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "窗口 \"%s\" 似乎失去了响应. 断开其与 X 服务器的连接?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "断开连接"
 
@@ -183,17 +183,17 @@ msgstr "去除装饰(_D)"
 msgid "_Close"
 msgstr "关闭(_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "鼠标绑定中无效的上下文 \"%s\""
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "配置文件中指定的按钮 \"%s\" 无效"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 3a27f11..029c3e9 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.7\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2013-08-11 13:47-0400\n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
 "PO-Revision-Date: 2008-03-06 01:01+0800\n"
 "Last-Translator: 洪任諭 <pcman.tw@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -18,7 +18,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: openbox/actions.c:216
+#: openbox/actions.c:234
 #, c-format
 msgid "Invalid action \"%s\" requested. No such action exists."
 msgstr "要求的動作「%s」無效。無此類動作存在。"
@@ -40,7 +40,7 @@ msgstr "執行"
 msgid "Failed to convert the path \"%s\" from utf8"
 msgstr "轉換路徑「%s」自 utf8 時失敗"
 
-#: openbox/actions/exit.c:69 openbox/client.c:3659
+#: openbox/actions/exit.c:69 openbox/client.c:3665
 msgid "Cancel"
 msgstr "取消"
 
@@ -76,25 +76,25 @@ msgstr "正在中止..."
 msgid "Not Responding"
 msgstr "沒有回應"
 
-#: openbox/client.c:3648
+#: openbox/client.c:3654
 #, 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 "視窗「%s」似乎已經停止回應。  你想送出 \"%s\" 訊息強制結束程式嗎?"
 
-#: openbox/client.c:3650
+#: openbox/client.c:3656
 msgid "End Process"
 msgstr "結束 Process"
 
-#: openbox/client.c:3654
+#: openbox/client.c:3660
 #, c-format
 msgid ""
 "The window \"%s\" does not seem to be responding.  Do you want to disconnect "
 "it from the X server?"
 msgstr "視窗「%s」似乎已經停止回應。  你想從 X 伺服器將它斷線嗎?"
 
-#: openbox/client.c:3656
+#: openbox/client.c:3662
 msgid "Disconnect"
 msgstr "斷線"
 
@@ -182,17 +182,17 @@ msgstr "開/關視窗裝飾(_D)"
 msgid "_Close"
 msgstr "關閉(_C)"
 
-#: openbox/config.c:556
+#: openbox/config.c:563
 #, c-format
 msgid "Invalid context \"%s\" in mouse binding"
 msgstr "與滑鼠組合的上下文「%s」無效"
 
-#: openbox/config.c:908
+#: openbox/config.c:931
 #, c-format
 msgid "Invalid button \"%s\" specified in config file"
 msgstr "在配置檔中指定的按鈕「%s」無效"
 
-#: openbox/config.c:933
+#: openbox/config.c:956
 msgid ""
 "Openbox was compiled without image loading support. Icons in menus will not "
 "be loaded."
index 7fa9e57..b8dc881 100755 (executable)
@@ -20,7 +20,6 @@ LAST="$3"
 
 SUBJECT="[RELEASE] Openbox $VERSION"
 MAILINGLIST=openbox@icculus.org
-MIKACHU=mikachu@icculus.org
 
 cat <<EOF > $WORKDIR/.email
 Hello,
@@ -53,11 +52,5 @@ test -e $WORKDIR/.email || error "email file disappeared"
 cat $WORKDIR/.email | mail -s "$SUBJECT" "$MAILINGLIST" || \
     error "mail to $MAILINGLIST failed"
 
-echo "Hi Mikachu,
-
-Please update the freshmeat.net Openbox stuff for $VERSION. Thanks!" | \
-mail -s "Freshmeat.net for Openbox $VERSION" "$MIKACHU" || \
-    error "mail to $MIKACHU failed"
-
 clean
 exit 0
index 83ff54a..1f6e353 100644 (file)
@@ -106,33 +106,30 @@ static gboolean get_all(Display *d, Window win, Atom prop,
     return ret;
 }
 
-gchar *append_string(gchar *before, gchar *after, gboolean quote)
+GString *append_string(GString *before, gchar *after, gboolean quote)
 {
-    gchar *tmp;
     const gchar *q = quote ? "\"" : "";
     if (before)
-        tmp = g_strdup_printf("%s, %s%s%s", before, q, after, q);
+        g_string_append_printf(before, ", %s%s%s", q, after, q);
     else
-        tmp = g_strdup_printf("%s%s%s", q, after, q);
-    g_free(before);
-    return tmp;
+        g_string_append_printf(before = g_string_new(NULL), "%s%s%s", q, after, q);
+    return before;
 }
 
-gchar *append_int(gchar *before, guint after)
+GString *append_int(GString *before, guint after)
 {
-    gchar *tmp;
     if (before)
-        tmp = g_strdup_printf("%s, %u", before, after);
+        g_string_append_printf(before, ", %u", after);
     else
-        tmp = g_strdup_printf("%u", after);
-    g_free(before);
-    return tmp;
+        g_string_append_printf(before = g_string_new(NULL), "%u", after);
+    return before;
 }
 
 gchar* read_strings(gchar *val, guint n, gboolean utf8)
 {
     GSList *strs = NULL, *it;
-    gchar *ret, *p;
+    GString *ret;
+    gchar *p;
     guint i;
 
     p = val;
@@ -162,23 +159,27 @@ gchar* read_strings(gchar *val, guint n, gboolean utf8)
         g_free(strs->data);
         strs = g_slist_delete_link(strs, strs);
     }
-    return ret;
+    if (ret)
+        return g_string_free(ret, FALSE);
+    return NULL;
 }
 
 gchar* read_atoms(Display *d, guchar *val, guint n)
 {
-    gchar *ret;
+    GString *ret;
     guint i;
 
     ret = NULL;
     for (i = 0; i < n; ++i)
         ret = append_string(ret, XGetAtomName(d, ((guint32*)val)[i]), FALSE);
-    return ret;
+    if (ret)
+        return g_string_free(ret, FALSE);
+    return NULL;
 }
 
 gchar* read_numbers(guchar *val, guint n, guint size)
 {
-    gchar *ret;
+    GString *ret;
     guint i;
 
     ret = NULL;
@@ -197,7 +198,9 @@ gchar* read_numbers(guchar *val, guint n, guint size)
             g_assert_not_reached(); /* unhandled size */
         }
 
-    return ret;
+    if (ret)
+        return g_string_free(ret, FALSE);
+    return NULL;
 }
 
 gboolean read_prop(Display *d, Window w, Atom prop, const gchar **type, gchar **val)