summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@gmail.com>2009-07-05 22:27:25 +0200
committerMikael Magnusson <mikachu@gmail.com>2009-09-19 15:03:12 +0200
commit308478e4a5f4dc76d69395dda8a9bc42cb69eec4 (patch)
tree54ec31d91428b2a7d3e4c7bdf902fe182abfc25d
parent3f72b9d67f21781e513a9c058e8624b8b86b92ea (diff)
parentba1ac214dfdbc0539c922e84c2318c1bf2566c0c (diff)
Merge branch 'backport' into work
Conflicts: openbox/actions/desktop.c openbox/client.c openbox/event.c openbox/extensions.c openbox/popup.c openbox/screen.c parser/parse.c
-rw-r--r--configure.ac2
-rw-r--r--data/menu.xsd246
-rw-r--r--data/rc.xsd446
-rw-r--r--obt/paths.c10
-rw-r--r--openbox/actions/desktop.c30
-rw-r--r--openbox/actions/moveresizeto.c11
-rw-r--r--openbox/client.c36
-rw-r--r--openbox/event.c2
-rw-r--r--openbox/frame.c3
-rw-r--r--openbox/menu.c11
-rw-r--r--openbox/popup.c2
-rw-r--r--openbox/screen.c135
-rw-r--r--openbox/startupnotify.c2
-rw-r--r--po/LINGUAS6
-rw-r--r--po/ar.po4
-rw-r--r--po/bn_IN.po4
-rw-r--r--po/ca.po4
-rw-r--r--po/cs.po4
-rw-r--r--po/da.po4
-rw-r--r--po/de.po4
-rw-r--r--po/en@boldquot.po4
-rw-r--r--po/en@quot.po4
-rw-r--r--po/es.po4
-rw-r--r--po/et.po4
-rw-r--r--po/eu.po4
-rw-r--r--po/fi.po4
-rw-r--r--po/fr.po4
-rw-r--r--po/hr.po317
-rw-r--r--po/hu.po4
-rw-r--r--po/it.po31
-rw-r--r--po/ja.po4
-rw-r--r--po/lt.po4
-rw-r--r--po/lv.po488
-rw-r--r--po/nl.po4
-rw-r--r--po/no.po4
-rw-r--r--po/openbox.pot2
-rw-r--r--po/pl.po4
-rw-r--r--po/pt.po4
-rw-r--r--po/pt_BR.po4
-rw-r--r--po/ru.po4
-rw-r--r--po/sk.po4
-rw-r--r--po/sr.po4
-rw-r--r--po/sr@latin.po4
-rw-r--r--po/sv.po4
-rw-r--r--po/tr.po4
-rw-r--r--po/uk.po (renamed from po/ua.po)165
-rw-r--r--po/vi.po4
-rw-r--r--po/zh_CN.po4
-rw-r--r--po/zh_TW.po4
-rw-r--r--render/gradient.c14
-rw-r--r--render/theme.c50
51 files changed, 1494 insertions, 635 deletions
diff --git a/configure.ac b/configure.ac
index 9f8f26f6..78d0753e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -94,7 +94,7 @@ if test "$SED" = "no"; then
AC_MSG_ERROR([The program "sed" is not available. This program is required to build Openbox.])
fi
-PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.6.0])
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.14.0])
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
diff --git a/data/menu.xsd b/data/menu.xsd
index e3e1e17b..2ff76b72 100644
--- a/data/menu.xsd
+++ b/data/menu.xsd
@@ -2,60 +2,214 @@
<!-- XML Schema for the Openbox window manager menu file -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN"
+ "http://www.w3.org/2001/XMLSchema.dtd" [
+<!ATTLIST schema xmlns:ob CDATA #IMPLIED>
+<!ENTITY % p "xsd:">
+<!ENTITY % s ":xsd">
+]>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://openbox.org/3.4/menu"
xmlns:ob="http://openbox.org/3.4/menu"
- elementFormDefault="qualified">
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
<!--
root node
-->
- <xs:element name="openbox_menu">
- <xs:complexType mixed="false">
- <xs:sequence maxOccurs="unbounded" minOccurs="1">
- <xs:element name="menu" type="ob:menu"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
+ <xsd:element name="openbox_menu">
+ <xsd:complexType mixed="false">
+ <xsd:sequence maxOccurs="unbounded" minOccurs="1">
+ <xsd:element name="menu" type="ob:menu"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
<!--
complex types
-->
- <xs:complexType name="menu">
- <xs:choice maxOccurs="unbounded" minOccurs="0">
- <xs:element maxOccurs="unbounded" minOccurs="0" name="menu" type="ob:menu"/>
- <xs:element maxOccurs="unbounded" minOccurs="0" name="item" type="ob:item"/>
- <xs:element maxOccurs="unbounded" minOccurs="0" name="separator" type="ob:empty"/>
- </xs:choice>
- <xs:attribute name="label" type="xs:string" use="optional"/>
- <xs:attribute name="execute" type="xs:string" use="optional"/>
- <xs:attribute name="id" type="xs:string" use="required"/>
- </xs:complexType>
- <xs:complexType name="empty">
- <xs:complexContent>
- <xs:restriction base="xs:anyType"/>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="item">
- <xs:sequence>
- <xs:element minOccurs="0" name="action">
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs="0" name="execute" type="xs:string"/>
- </xs:sequence>
- <xs:attribute name="name" type="ob:actionname" use="required"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="label" type="xs:string" use="required"/>
- </xs:complexType>
+ <!-- menu -->
+ <xsd:complexType name="menu">
+ <xsd:choice maxOccurs="unbounded" minOccurs="0">
+ <xsd:element name="menu" type="ob:menu"/>
+ <xsd:element name="item" type="ob:item"/>
+ <xsd:element name="separator" type="ob:separator"/>
+ </xsd:choice>
+ <xsd:attribute name="label" type="xsd:string" use="optional"/>
+ <xsd:attribute name="execute" type="xsd:string" use="optional"/>
+ <xsd:attribute name="id" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <!-- separator -->
+ <xsd:complexType name="separator">
+ <xsd:attribute name="label" type="xsd:string" use="optional"/>
+ </xsd:complexType>
+
+ <!-- empty -->
+ <xsd:complexType name="empty">
+ <xsd:complexContent>
+ <xsd:restriction base="xsd:anyType"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+
+ <!-- item -->
+ <xsd:complexType name="item">
+ <xsd:sequence>
+ <xsd:element name="action">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="execute" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="startupnotify" type="ob:notify"/>
+ <xsd:element minOccurs="0" name="command" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="allDesktops" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="menu" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="delta" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="x" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="y" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="up" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="down" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="desktop">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:integer ob:bool"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="edge" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wrap" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="follow" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="dialog" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="panels" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="here" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="linear" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="group" type="ob:bool"/>
+ </xsd:all>
+ <xsd:attribute name="name" type="ob:actionname" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="label" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
+ <!-- startupnotify -->
+ <xsd:complexType name="startupnotify">
+ <xsd:all>
+ <xsd:element minOccurs="1" name="enabled" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wmclass" type="xsd:string"/>
+ </xsd:all>
+ </xsd:complexType>
+ <xsd:simpleType name="bool">
+ <!-- this is copied to maximization. Keep that in sync. -->
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="yes"/>
+ <xsd:enumeration value="no"/>
+ <xsd:enumeration value="true"/>
+ <xsd:enumeration value="false"/>
+ <xsd:enumeration value="on"/>
+ <xsd:enumeration value="off"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:complexType name="notify">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="enabled" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ </xsd:all>
+ </xsd:complexType>
<!--
simple types / restrictions
-->
- <xs:simpleType name="actionname">
- <xs:restriction base="xs:string">
- <xs:enumeration value="Execute"/>
- <xs:enumeration value="Restart"/>
- <xs:enumeration value="Reconfigure"/>
- <xs:enumeration value="Exit"/>
- </xs:restriction>
- </xs:simpleType>
-</xs:schema>
+ <xsd:simpleType name="actionname">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[Aa][Cc][Tt][Ii][Vv][Aa][Tt][Ee]"/>
+ <xsd:pattern value="[Bb][Rr][Ee][Aa][Kk][Cc][Hh][Rr][Oo][Oo][Tt]"/>
+ <xsd:pattern value="[Cc][Ll][Oo][Ss][Ee]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ee][Xx][Ee][Cc][Uu][Tt][Ee]"/>
+ <xsd:pattern value="[Ee][Xx][Ii][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Ss][Ss][Ii][Oo][Nn][Ll][Oo][Gg][Oo][Uu][Tt]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ii][Cc][Oo][Nn][Ii][Ff][Yy]"/>
+ <xsd:pattern value="[Kk][Ii][Ll][Ll]"/>
+ <xsd:pattern value="[Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Cc][Ee][Nn][Tt][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Nn][Ee][Xx][Tt][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Rr][Ee][Cc][Oo][Nn][Ff][Ii][Gg][Uu][Rr][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Tt][Aa][Rr][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Nn][Oo][Rr][Mm][Aa][Ll][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Tt][Oo][Pp][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Mm][Ee][Nn][Uu]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Ee][Cc][Oo][Rr][Aa][Tt][Ii][Oo][Nn][Ss]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Oo][Cc][Kk][Aa][Uu][Tt][Oo][Hh][Ii][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ff][Uu][Ll][Ll][Ss][Cc][Rr][Ee][Ee][Nn]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Oo][Mm][Nn][Ii][Pp][Rr][Ee][Ss][Ee][Nn][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Uu][Nn][Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee][Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+</xsd:schema>
diff --git a/data/rc.xsd b/data/rc.xsd
index de227ea1..499b81c9 100644
--- a/data/rc.xsd
+++ b/data/rc.xsd
@@ -2,10 +2,18 @@
<!-- XML Schema for the Openbox window manager configuration file -->
+<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN"
+ "http://www.w3.org/2001/XMLSchema.dtd" [
+<!ATTLIST schema xmlns:ob CDATA #IMPLIED>
+<!ENTITY % p "xsd:">
+<!ENTITY % s ":xsd">
+]>
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://openbox.org/4.0/rc"
xmlns:ob="http://openbox.org/4.0/rc"
- elementFormDefault="qualified">
+ elementFormDefault="qualified"
+ attributeFormDefault="unqualified">
<!--
root node
-->
@@ -14,17 +22,20 @@
<xsd:documentation>all these elements are expected in a openbox config file</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
- <xsd:element name="resistance" type="ob:resistance"/>
- <xsd:element name="focus" type="ob:focus"/>
- <xsd:element name="placement" type="ob:placement"/>
- <xsd:element name="theme" type="ob:theme"/>
- <xsd:element name="desktops" type="ob:desktops"/>
- <xsd:element name="resize" type="ob:resize"/>
- <xsd:element name="dock" type="ob:dock"/>
- <xsd:element name="keyboard" type="ob:keyboard"/>
- <xsd:element name="mouse" type="ob:mouse"/>
- <xsd:element name="menu" type="ob:menu"/>
- <xsd:element name="applications" type="ob:applications"/>
+ <xsd:all>
+ <xsd:element name="resistance" type="ob:resistance"/>
+ <xsd:element name="focus" type="ob:focus"/>
+ <xsd:element name="placement" type="ob:placement"/>
+ <xsd:element name="theme" type="ob:theme"/>
+ <xsd:element name="desktops" type="ob:desktops"/>
+ <xsd:element name="resize" type="ob:resize"/>
+ <xsd:element minOccurs="0" name="margins" type="ob:margins"/>
+ <xsd:element name="dock" type="ob:dock"/>
+ <xsd:element name="keyboard" type="ob:keyboard"/>
+ <xsd:element name="mouse" type="ob:mouse"/>
+ <xsd:element name="menu" type="ob:menu"/>
+ <xsd:element name="applications" type="ob:applications"/>
+ </xsd:all>
</xsd:complexType>
</xsd:element>
<!--
@@ -34,105 +45,136 @@
<xsd:annotation>
<xsd:documentation>defines behaviour of windows when close to each other or the screen edge</xsd:documentation>
</xsd:annotation>
- <xsd:element minOccurs="0" name="strength" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="screen_edge_strength" type="xsd:integer"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="strength" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="screen_edge_strength" type="xsd:integer"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="focus">
<xsd:annotation>
<xsd:documentation>defines aspects of window focus</xsd:documentation>
</xsd:annotation>
- <xsd:element minOccurs="0" name="focusNew" type="ob:bool"/>
- <xsd:element minOccurs="0" name="focusLast" type="ob:bool"/>
- <xsd:element minOccurs="0" name="followMouse" type="ob:bool"/>
- <xsd:element minOccurs="0" name="underMouse" type="ob:bool"/>
- <xsd:element minOccurs="0" name="focusDelay" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="raiseOnFocus" type="ob:bool"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="focusNew" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="focusLast" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="followMouse" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="underMouse" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="focusDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="raiseOnFocus" type="ob:bool"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="placement">
<xsd:annotation>
<xsd:documentation>defines how new windows are placed</xsd:documentation>
</xsd:annotation>
- <xsd:element name="policy" type="ob:placementpolicy"/>
- <xsd:element name="center" type="ob:bool"/>
- <xsd:element name="monitor" type="ob:placementmonitor"/>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="policy" type="ob:placementpolicy"/>
+ <xsd:element minOccurs="0" name="center" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="monitor" type="ob:placementmonitor"/>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="margins">
<xsd:annotation>
<xsd:documentation>defines desktop margins</xsd:documentation>
</xsd:annotation>
- <xsd:element minOccurs="0" name="top" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="bottom" type="xsd:integer"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="top" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="bottom" type="xsd:integer"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="theme">
- <xsd:element minOccurs="0" name="name" type="xsd:string"/>
- <xsd:element minOccurs="0" name="titleLayout" type="xsd:string"/>
- <xsd:element minOccurs="0" name="keepBorder" type="ob:bool"/>
- <xsd:element minOccurs="0" name="animateIconify" type="ob:bool"/>
- <xsd:element minOccurs="0" name="font" type="ob:font"/>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="titleLayout" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="keepBorder" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="animateIconify" type="ob:bool"/>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="font" type="ob:font"/>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="font">
- <xsd:element minOccurs="0" name="name" type="xsd:string"/>
- <xsd:element minOccurs="0" name="size" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="weight" type="ob:fontweight"/>
- <xsd:element minOccurs="0" name="slant" type="ob:fontslant"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="size" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="weight" type="ob:fontweight"/>
+ <xsd:element minOccurs="0" name="slant" type="ob:fontslant"/>
+ </xsd:all>
<xsd:attribute name="place" type="ob:fontplace" use="required"/>
</xsd:complexType>
<xsd:complexType name="desktops">
<xsd:annotation>
<xsd:documentation>defines the number and names of desktops</xsd:documentation>
</xsd:annotation>
- <xsd:element minOccurs="0" name="number" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="firstdesk" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="names">
- <xsd:complexType>
- <xsd:element maxOccurs="unbounded" name="name" type="xsd:string"/>
- </xsd:complexType>
- </xsd:element>
- <xsd:element minOccurs="0" name="popupTime" type="xsd:integer"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="number" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="firstdesk" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="names">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="name" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="popupTime" type="xsd:integer"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="resize">
- <xsd:element minOccurs="0" name="drawContents" type="ob:bool"/>
- <xsd:element minOccurs="0" name="popupShow" type="ob:popupshow"/>
- <xsd:element minOccurs="0" name="popupPosition" type="ob:popupposition"/>
- <xsd:element minOccurs="0" name="popupPosition" type="ob:popupfixedposition"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="drawContents" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="popupShow" type="ob:popupshow"/>
+ <xsd:element minOccurs="0" name="popupPosition" type="ob:popupposition"/>
+ <xsd:element minOccurs="0" name="popupFixedPosition" type="ob:popupfixedposition"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="popupfixedposition">
- <xsd:element minOccurs="0" name="x" type="ob:center_or_int"/>
- <xsd:element minOccurs="0" name="y" type="ob:center_or_int"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="x" type="ob:center_or_int"/>
+ <xsd:element minOccurs="0" name="y" type="ob:center_or_int"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="dock">
- <xsd:element minOccurs="0" name="position" type="ob:dock_position"/>
- <xsd:element minOccurs="0" name="floatingX" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="floatingY" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="noStrut" type="ob:bool"/>
- <xsd:element minOccurs="0" name="stacking" type="ob:layer"/>
- <xsd:element minOccurs="0" name="direction" type="ob:direction"/>
- <xsd:element minOccurs="0" name="autoHide" type="ob:bool"/>
- <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="showDelay" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="moveButton" type="ob:button"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="position" type="ob:dock_position"/>
+ <xsd:element minOccurs="0" name="floatingX" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="floatingY" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="noStrut" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="stacking" type="ob:layer"/>
+ <xsd:element minOccurs="0" name="direction" type="ob:direction"/>
+ <xsd:element minOccurs="0" name="autoHide" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="showDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="moveButton" type="ob:button"/>
+ </xsd:all>
</xsd:complexType>
<xsd:complexType name="action">
- <xsd:element minOccurs="0" name="execute" type="xsd:string"/>
- <xsd:element minOccurs="0" name="command" type="xsd:string"/>
- <xsd:element minOccurs="0" name="menu" type="xsd:string"/>
- <xsd:element minOccurs="0" name="delta" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="x" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="y" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="up" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="down" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="desktop" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="wrap" type="ob:bool"/>
- <xsd:element minOccurs="0" name="follow" type="ob:bool"/>
- <xsd:element minOccurs="0" name="dialog" type="ob:bool"/>
- <xsd:element minOccurs="0" name="panels" type="ob:bool"/>
- <xsd:element minOccurs="0" name="here" type="ob:bool"/>
- <xsd:element minOccurs="0" name="linear" type="ob:bool"/>
- <xsd:element minOccurs="0" name="group" type="ob:bool"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="execute" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="startupnotify" type="ob:notify"/>
+ <xsd:element minOccurs="0" name="command" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="allDesktops" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="menu" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="delta" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="x" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="y" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="left" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="right" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="up" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="down" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="desktop">
+ <xsd:simpleType>
+ <xsd:union memberTypes="xsd:integer ob:bool"/>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element minOccurs="0" name="edge" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="wrap" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="follow" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="dialog" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="panels" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="here" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="linear" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="group" type="ob:bool"/>
+ </xsd:all>
<xsd:attribute name="name" type="ob:actionname" use="required"/>
</xsd:complexType>
<xsd:complexType name="keybind">
@@ -144,51 +186,65 @@
<xsd:attribute name="key" type="ob:keyname" use="required"/>
</xsd:complexType>
<xsd:complexType name="keyboard">
- <xsd:element minOccurs="0" name="chainQuitKey" type="ob:keyname"/>
- <xsd:element maxOccurs="unbounded" name="keybind" type="ob:keybind"/>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="chainQuitKey" type="ob:keyname"/>
+ <xsd:element maxOccurs="unbounded" name="keybind" type="ob:keybind"/>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="mousebind">
- <xsd:element maxOccurs="unbounded" name="action" type="ob:action"/>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="action" type="ob:action"/>
+ </xsd:sequence>
<xsd:attribute name="action" type="ob:mouseaction" use="required"/>
<xsd:attribute name="button" type="ob:button" use="required"/>
</xsd:complexType>
<xsd:complexType name="context">
- <xsd:element maxOccurs="unbounded" name="mousebind" type="ob:mousebind"/>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="mousebind" type="ob:mousebind"/>
+ </xsd:sequence>
<xsd:attribute name="name" type="ob:contextname" use="required"/>
</xsd:complexType>
<xsd:complexType name="mouse">
- <xsd:element minOccurs="0" name="dragThreshold" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="doubleClickTime" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="screenEdgeWarpTime" type="xsd:integer"/>
- <xsd:element maxOccurs="unbounded" name="context" type="ob:context"/>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" name="dragThreshold" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="doubleClickTime" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="screenEdgeWarpTime" type="xsd:integer"/>
+ <xsd:element maxOccurs="unbounded" name="context" type="ob:context"/>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="menu">
- <xsd:element maxOccurs="unbounded" name="file" type="xsd:string"/>
- <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="middle" type="ob:bool"/>
- <xsd:element minOccurs="0" name="submenuShowDelay" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="applicationIcons" type="ob:bool"/>
- <xsd:element minOccurs="0" name="manageDesktops" type="ob:bool"/>
+ <xsd:sequence>
+ <xsd:element maxOccurs="unbounded" name="file" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="hideDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="middle" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="submenuShowDelay" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="applicationIcons" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="manageDesktops" type="ob:bool"/>
+ </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="window_position">
- <xsd:element name="x" type="ob:center_or_int"/>
- <xsd:element name="y" type="ob:center_or_int"/>
- <xsd:element name="monitor" type="ob:mouse_or_int"/>
- <xsd:element minOccurs="0" name="head" type="xsd:string"/>
+ <xsd:all>
+ <xsd:element name="x" type="ob:center_or_int"/>
+ <xsd:element name="y" type="ob:center_or_int"/>
+ <xsd:element minOccurs="0" name="monitor" type="ob:mouse_or_int"/>
+ <xsd:element minOccurs="0" name="head" type="xsd:string"/>
+ </xsd:all>
<xsd:attribute name="force" type="ob:bool"/>
</xsd:complexType>
<xsd:complexType name="application">
- <xsd:element minOccurs="0" name="decor" type="xsd:bool"/>
- <xsd:element minOccurs="0" name="shade" type="ob:bool"/>
- <xsd:element minOccurs="0" name="position" type="ob:window_position"/>
- <xsd:element minOccurs="0" name="focus" type="xsd:string"/>
- <xsd:element minOccurs="0" name="desktop" type="xsd:integer"/>
- <xsd:element minOccurs="0" name="layer" type="ob:layer"/>
- <xsd:element minOccurs="0" name="iconic" type="ob:bool"/>
- <xsd:element minOccurs="0" name="skip_pager" type="ob:bool"/>
- <xsd:element minOccurs="0" name="skip_taskbar" type="ob:bool"/>
- <xsd:element minOccurs="0" name="fullscreen" type="ob:bool"/>
- <xsd:element minOccurs="0" name="maximized" type="ob:maximization"/>
+ <xsd:all>
+ <xsd:element minOccurs="0" name="decor" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="shade" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="position" type="ob:window_position"/>
+ <xsd:element minOccurs="0" name="focus" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="desktop" type="xsd:integer"/>
+ <xsd:element minOccurs="0" name="layer" type="ob:layer"/>
+ <xsd:element minOccurs="0" name="iconic" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="skip_pager" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="skip_taskbar" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="fullscreen" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="maximized" type="ob:maximization"/>
+ </xsd:all>
<xsd:attribute name="role" type="xsd:string"/>
<xsd:attribute name="type" type="ob:clienttype"/>
<!-- at least one of these must be present -->
@@ -196,61 +252,112 @@
<xsd:attribute name="class" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="applications">
- <xsd:element minOccurs="0" maxOccurs="unbounded" name="application" type="ob:application"/>
+ <xsd:sequence>
+ <xsd:element minOccurs="0" maxOccurs="unbounded" name="application" type="ob:application"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="notify">
+ <xsd:all>
+ <xsd:element minOccurs="0" name="enabled" type="ob:bool"/>
+ <xsd:element minOccurs="0" name="name" type="xsd:string"/>
+ <xsd:element minOccurs="0" name="icon" type="xsd:string"/>
+ </xsd:all>
</xsd:complexType>
<!--
simple types / restrictions
-->
<xsd:simpleType name="actionname">
<xsd:restriction base="xsd:string">
- <xsd:enumeration value="AddDesktop"/>
- <xsd:enumeration value="BreakChroot"/>
- <xsd:enumeration value="Close"/>
- <xsd:enumeration value="Debug"/>
- <xsd:enumeration value="Decorate"/>
- <xsd:enumeration value="DirectionalCycleWindows"/>
- <xsd:enumeration value="DirectionalTargetWindow"/>
- <xsd:enumeration value="Execute"/>
- <xsd:enumeration value="Exit"/>
- <xsd:enumeration value="Focus"/>
- <xsd:enumeration value="FocusToBottom"/>
- <xsd:enumeration value="GoToDesktop"/>
- <xsd:enumeration value="GrowToEdge"/>
- <xsd:enumeration value="Iconify"/>
- <xsd:enumeration value="If"/>
- <xsd:enumeration value="Kill"/>
- <xsd:enumeration value="Lower"/>
- <xsd:enumeration value="Maximize"/>
- <xsd:enumeration value="Move"/>
- <xsd:enumeration value="MoveRelative"/>
- <xsd:enumeration value="MoveResizeTo"/>
- <xsd:enumeration value="MoveToEdge"/>
- <xsd:enumeration value="NextWindow"/>
- <xsd:enumeration value="PreviousWindow"/>
- <xsd:enumeration value="Raise"/>
- <xsd:enumeration value="RaiseLower"/>
- <xsd:enumeration value="Reconfigure"/>
- <xsd:enumeration value="RemoveDesktop"/>
- <xsd:enumeration value="Resize"/>
- <xsd:enumeration value="ResizeRelative"/>
- <xsd:enumeration value="Restart"/>
- <xsd:enumeration value="SendToDesktop"/>
- <xsd:enumeration value="SendToLayer"/>
- <xsd:enumeration value="Shade"/>
- <xsd:enumeration value="ShowMenu"/>
- <xsd:enumeration value="ToggleAlwaysOnBottom"/>
- <xsd:enumeration value="ToggleAlwaysOnTop"/>
- <xsd:enumeration value="ToggleDecorations"/>
- <xsd:enumeration value="ToggleDockAutoHide"/>
- <xsd:enumeration value="ToggleFullscreen"/>
- <xsd:enumeration value="ToggleMaximize"/>
- <xsd:enumeration value="ToggleOmnipresent"/>
- <xsd:enumeration value="ToggleShade"/>
- <xsd:enumeration value="ToggleShowDesktop"/>
- <xsd:enumeration value="Undecorate"/>
- <xsd:enumeration value="Unfocus"/>
- <xsd:enumeration value="Unmaximize"/>
- <xsd:enumeration value="Unshade"/>
+ <xsd:pattern value="[Ii][Ff]"/>
+ <xsd:pattern value="[Aa][Cc][Tt][Ii][Vv][Aa][Tt][Ee]"/>
+ <xsd:pattern value="[Bb][Rr][Ee][Aa][Kk][Cc][Hh][Rr][Oo][Oo][Tt]"/>
+ <xsd:pattern value="[Cc][Ll][Oo][Ss][Ee]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Nn][Oo][Rr][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ss][Oo][Uu][Tt][Hh][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Dd][Ii][Rr][Ee][Cc][Tt][Ii][Oo][Nn][Aa][Ll][Ff][Oo][Cc][Uu][Ss][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ee][Xx][Ee][Cc][Uu][Tt][Ee]"/>
+ <xsd:pattern value="[Ee][Xx][Ii][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Ss][Ss][Ii][Oo][Nn][Ll][Oo][Gg][Oo][Uu][Tt]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Ff][Oo][Cc][Uu][Ss][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Gg][Rr][Oo][Ww][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Ii][Cc][Oo][Nn][Ii][Ff][Yy]"/>
+ <xsd:pattern value="[Kk][Ii][Ll][Ll]"/>
+ <xsd:pattern value="[Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Cc][Ee][Nn][Tt][Ee][Rr]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Ff][Rr][Oo][Mm][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ee][Aa][Ss][Tt]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Nn][Oo][Rr][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ss][Oo][Uu][Tt][Hh]"/>
+ <xsd:pattern value="[Mm][Oo][Vv][Ee][Tt][Oo][Ee][Dd][Gg][Ee][Ww][Ee][Ss][Tt]"/>
+ <xsd:pattern value="[Nn][Ee][Xx][Tt][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss][Ww][Ii][Nn][Dd][Oo][Ww]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Rr][Aa][Ii][Ss][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Rr][Ee][Cc][Oo][Nn][Ff][Ii][Gg][Uu][Rr][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Ii][Zz][Ee][Rr][Ee][Ll][Aa][Tt][Ii][Vv][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Rr][Ee][Ss][Tt][Aa][Rr][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Bb][Oo][Tt][Tt][Oo][Mm][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Dd][Oo][Ww][Nn]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Ll][Ee][Ff][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Nn][Ee][Xx][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Pp][Rr][Ee][Vv][Ii][Oo][Uu][Ss]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Rr][Ii][Gg][Hh][Tt]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Dd][Ee][Ss][Kk][Tt][Oo][Pp][Uu][Pp]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Nn][Oo][Rr][Mm][Aa][Ll][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Ee][Nn][Dd][Tt][Oo][Tt][Oo][Pp][Ll][Aa][Yy][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Ss][Hh][Aa][Dd][Ee][Ll][Oo][Ww][Ee][Rr]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Ss][Hh][Oo][Ww][Mm][Ee][Nn][Uu]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Bb][Oo][Tt][Tt][Oo][Mm]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Aa][Ll][Ww][Aa][Yy][Ss][Oo][Nn][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Ee][Cc][Oo][Rr][Aa][Tt][Ii][Oo][Nn][Ss]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Dd][Oo][Cc][Kk][Aa][Uu][Tt][Oo][Hh][Ii][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ff][Uu][Ll][Ll][Ss][Cc][Rr][Ee][Ee][Nn]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Oo][Mm][Nn][Ii][Pp][Rr][Ee][Ss][Ee][Nn][Tt]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Tt][Oo][Gg][Gg][Ll][Ee][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
+ <xsd:pattern value="[Uu][Nn][Ff][Oo][Cc][Uu][Ss]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Ff][Uu][Ll][Ll]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Hh][Oo][Rr][Zz]"/>
+ <xsd:pattern value="[Uu][Nn][Mm][Aa][Xx][Ii][Mm][Ii][Zz][Ee][Vv][Ee][Rr][Tt]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Aa][Dd][Ee][Rr][Aa][Ii][Ss][Ee]"/>
+ <xsd:pattern value="[Uu][Nn][Ss][Hh][Oo][Ww][Dd][Ee][Ss][Kk][Tt][Oo][Pp]"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="clienttype">
@@ -300,29 +407,14 @@
</xsd:simpleType>
<xsd:simpleType name="button">
<xsd:restriction base="xsd:string">
- <!-- FIXME what??? -->
- <xsd:enumeration value="Left"/>
- <xsd:enumeration value="Middle"/>
- <xsd:enumeration value="Right"/>
- <xsd:enumeration value="Up"/>
- <xsd:enumeration value="Down"/>
- <xsd:enumeration value="A-Left"/>
- <xsd:enumeration value="A-Middle"/>
- <xsd:enumeration value="A-Right"/>
- <xsd:enumeration value="A-Up"/>
- <xsd:enumeration value="A-Down"/>
- <xsd:enumeration value="C-A-Left"/>
- <xsd:enumeration value="C-A-Middle"/>
- <xsd:enumeration value="C-A-Right"/>
- <xsd:enumeration value="C-A-Up"/>
- <xsd:enumeration value="C-A-Down"/>
+ <xsd:pattern value="(([ACMSW]|Mod[1-5])-){,5}(Left|Middle|Right|Up|Down|Button[0-9]+)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="center_or_int">
<xsd:restriction base="xsd:string">
<!-- ob: atoi($_) unless $_ eq 'center'; -->
<!-- I think the regexp DTRT WRT atoi. -->
- <xsd:pattern value="center|0|[1-9][0-9]*"/>
+ <xsd:pattern value="center|-?(0|[1-9][0-9]*)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="mouse_or_int">
@@ -379,14 +471,14 @@
<xsd:restriction base="xsd:string">
<!-- FIXME: M, Mod2, Mod5 in addition to S, A, C -->
<!-- how do we do all substrings and permutations? -->
- <xsd:pattern value="(A-)?(S-)?(A-)?(C-)?(A-)?(S-)?(A-)?[a-zA-Z0-9]*"/>
+ <xsd:pattern value="(([ACMSW]|Mod[1-5])-){,5}[a-zA-Z0-9]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="layer">
<xsd:restriction base="xsd:string">
- <xsd:enumeration value="Above"/>
- <xsd:enumeration value="Normal"/>
- <xsd:enumeration value="Below"/>
+ <xsd:pattern value="[Aa][Bb][Oo][Vv][Ee]"/>
+ <xsd:pattern value="[Nn][Oo][Rr][Mm][Aa][Ll]"/>
+ <xsd:pattern value="[Bb][Ee][Ll][Oo][Ww]"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="maximization">
diff --git a/obt/paths.c b/obt/paths.c
index 61004998..68615433 100644
--- a/obt/paths.c
+++ b/obt/paths.c
@@ -169,14 +169,16 @@ void obt_paths_unref(ObtPaths *p)
gchar *obt_paths_expand_tilde(const gchar *f)
{
- gchar **spl;
gchar *ret;
+ GRegex *regex;
if (!f)
return NULL;
- spl = g_strsplit(f, "~", 0);
- ret = g_strjoinv(g_get_home_dir(), spl);
- g_strfreev(spl);
+
+ regex = g_regex_new("(?:^|(?<=[ \\t]))~(?=[/ \\t$])", G_REGEX_MULTILINE | G_REGEX_RAW, 0, NULL);
+ ret = g_regex_replace_literal(regex, f, -1, 0, g_get_home_dir(), 0, NULL);
+ g_regex_unref(regex);
+
return ret;
}
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index e352aa2e..edd22aa2 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -21,7 +21,7 @@ typedef struct {
gboolean wrap;
ObDirection dir;
} rel;
- };
+ } u;
gboolean send;
gboolean follow;
} Options;
@@ -46,9 +46,9 @@ static gpointer setup_go_func(xmlNodePtr node)
o = g_new0(Options, 1);
/* don't go anywhere if theres no options given */
o->type = ABSOLUTE;
- o->abs.desktop = screen_desktop;
+ o->u.abs.desktop = screen_desktop;
/* wrap by default - it's handy! */
- o->rel.wrap = TRUE;
+ o->u.rel.wrap = TRUE;
if ((n = obt_parse_find_node(node, "to"))) {
gchar *s = obt_parse_node_string(n);
@@ -56,43 +56,43 @@ static gpointer setup_go_func(xmlNodePtr node)
o->type = LAST;
else if (!g_ascii_strcasecmp(s, "next")) {
o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_EAST;
+ o->u.rel.linear = TRUE;
+ o->u.rel.dir = OB_DIRECTION_EAST;
}
else if (!g_ascii_strcasecmp(s, "previous")) {
o->type = RELATIVE;
- o->rel.linear = TRUE;
- o->rel.dir = OB_DIRECTION_WEST;
+ o->u.rel.linear = TRUE;
+ o->u.rel.dir = OB_DIRECTION_WEST;
}
else if (!g_ascii_strcasecmp(s, "north") ||
!g_ascii_strcasecmp(s, "up")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_NORTH;
+ o->u.rel.dir = OB_DIRECTION_NORTH;
}
else if (!g_ascii_strcasecmp(s, "south") ||
!g_ascii_strcasecmp(s, "down")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_SOUTH;
+ o->u.rel.dir = OB_DIRECTION_SOUTH;
}
else if (!g_ascii_strcasecmp(s, "west") ||
!g_ascii_strcasecmp(s, "left")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_WEST;
+ o->u.rel.dir = OB_DIRECTION_WEST;
}
else if (!g_ascii_strcasecmp(s, "east") ||
!g_ascii_strcasecmp(s, "right")) {
o->type = RELATIVE;
- o->rel.dir = OB_DIRECTION_EAST;
+ o->u.rel.dir = OB_DIRECTION_EAST;
}
else {
o->type = ABSOLUTE;
- o->abs.desktop = atoi(s) - 1;
+ o->u.abs.desktop = atoi(s) - 1;
}
g_free(s);
}
if ((n = obt_parse_find_node(node, "wrap")))
- o->rel.wrap = obt_parse_node_bool(n);
+ o->u.rel.wrap = obt_parse_node_bool(n);
return o;
}
@@ -123,11 +123,11 @@ static gboolean run_func(ObActionsData *data, gpointer options)
d = screen_last_desktop;
break;
case ABSOLUTE:
- d = o->abs.desktop;
+ d = o->u.abs.desktop;
break;
case RELATIVE:
d = screen_find_desktop(screen_desktop,
- o->rel.dir, o->rel.wrap, o->rel.linear);
+ o->u.rel.dir, o->u.rel.wrap, o->u.rel.linear);
break;
}
diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c
index 357c7315..3ee3498a 100644
--- a/openbox/actions/moveresizeto.c
+++ b/openbox/actions/moveresizeto.c
@@ -6,7 +6,9 @@
enum {
CURRENT_MONITOR = -1,
- ALL_MONITORS = -2
+ ALL_MONITORS = -2,
+ NEXT_MONITOR = -3,
+ PREV_MONITOR = -4
};
typedef struct {
@@ -84,6 +86,10 @@ static gpointer setup_func(xmlNodePtr node)
if (g_ascii_strcasecmp(s, "current") != 0) {
if (!g_ascii_strcasecmp(s, "all"))
o->monitor = ALL_MONITORS;
+ else if(!g_ascii_strcasecmp(s, "next"))
+ o->monitor = NEXT_MONITOR;
+ else if(!g_ascii_strcasecmp(s, "prev"))
+ o->monitor = PREV_MONITOR;
else
o->monitor = obt_parse_node_int(n) - 1;
}
@@ -109,6 +115,9 @@ static gboolean run_func(ObActionsData *data, gpointer options)
cmon = client_monitor(c);
if (mon == CURRENT_MONITOR) mon = cmon;
else if (mon == ALL_MONITORS) mon = SCREEN_AREA_ALL_MONITORS;
+ else if (mon == NEXT_MONITOR) mon = (cmon + 1 > screen_num_monitors - 1) ? 0 : (cmon + 1);
+ else if (mon == PREV_MONITOR) mon = (cmon == 0) ? (screen_num_monitors - 1) : (cmon - 1);
+
area = screen_area(c->desktop, mon, NULL);
carea = screen_area(c->desktop, cmon, NULL);
diff --git a/openbox/client.c b/openbox/client.c
index d98ce642..38dc7c1a 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -233,7 +233,12 @@ void client_manage(Window window, ObPrompt *prompt)
ob_debug("Window type: %d", self->type);
ob_debug("Window group: 0x%x", self->group?self->group->leader:0);
- ob_debug("Window name: %s class: %s", self->name, self->class);
+ ob_debug("Window name: %s class: %s role: %s", self->name, self->class, self->role);
+
+ /* per-app settings override stuff from client_get_all, and return the
+ settings for other uses too. the returned settings is a shallow copy,
+ that needs to be freed with g_free(). */
+ settings = client_get_settings_state(self);
/* now we have all of the window's information so we can set this up.
do this before creating the frame, so it can tell that we are still
@@ -255,10 +260,6 @@ void client_manage(Window window, ObPrompt *prompt)
time now */
grab_server(FALSE);
- /* per-app settings override stuff from client_get_all, and return the
- settings for other uses too. the returned settings is a shallow copy,
- that needs to be freed with g_free(). */
- settings = client_get_settings_state(self);
/* the session should get the last say though */
client_restore_session_state(self);
@@ -3538,19 +3539,38 @@ ObClient *client_search_modal_child(ObClient *self)
return NULL;
}
+static gboolean client_validate_unmap(ObClient *self, int n)
+{
+ XEvent e;
+ gboolean ret = TRUE;
+
+ if (XCheckTypedWindowEvent(obt_display, self->window, UnmapNotify, &e)) {
+ if (n < self->ignore_unmaps) // ignore this one, but look for more
+ ret = client_validate_unmap(self, n+1);
+ else
+ ret = FALSE; // the window is going to become unmanaged
+
+ /* put them back on the event stack so they end up in the same order */
+ XPutBackEvent(obt_display, &e);
+ }
+
+ return ret;
+}
+
gboolean client_validate(ObClient *self)
{
XEvent e;
XSync(obt_display, FALSE); /* get all events on the server */
- if (XCheckTypedWindowEvent(obt_display, self->window, DestroyNotify, &e) ||
- XCheckTypedWindowEvent(obt_display, self->window, UnmapNotify, &e))
- {
+ if (XCheckTypedWindowEvent(obt_display, self->window, DestroyNotify, &e)) {
XPutBackEvent(obt_display, &e);
return FALSE;
}
+ if (!client_validate_unmap(self, 0))
+ return FALSE;
+
return TRUE;
}
diff --git a/openbox/event.c b/openbox/event.c
index f69267db..e2fd411f 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -656,7 +656,7 @@ 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("Kepboard map changed. Reloading keyboard bindings.");
+ ob_debug("Keyboard map changed. Reloading keyboard bindings.");
ob_set_state(OB_STATE_RECONFIGURING);
obt_keyboard_reload();
keyboard_rebind();
diff --git a/openbox/frame.c b/openbox/frame.c
index c633fa6d..ab5a14a8 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -339,7 +339,8 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
self->shaded = self->client->shaded;
if (self->decorations & OB_FRAME_DECOR_BORDER ||
- (self->client->undecorated && config_theme_keepborder))
+ (self->client->undecorated && config_theme_keepborder
+ && !self->client->fullscreen))
self->bwidth = ob_rr_theme->fbwidth;
else
self->bwidth = 0;
diff --git a/openbox/menu.c b/openbox/menu.c
index f7d50e39..3e45fb93 100644
--- a/openbox/menu.c
+++ b/openbox/menu.c
@@ -232,10 +232,13 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
/* you have to use a printable ascii character for shortcuts
don't allow space either, so you can have like "a _ b"
*/
- if (VALID_SHORTCUT(*(i+1))) {
- shortcut = g_unichar_tolower(g_utf8_get_char(i+1));
- *position = i - *strippedlabel;
- *always_show = TRUE;
+ if (VALID_SHORTCUT(*(i+1)) || *(i+1) == '_') {
+ /* Allow you to escape the first _ by putting __ */
+ if (*(i+1) != '_') {
+ shortcut = g_unichar_tolower(g_utf8_get_char(i+1));
+ *position = i - *strippedlabel;
+ *always_show = TRUE;
+ }
/* remove the '_' from the string */
for (; *i != '\0'; ++i)
diff --git a/openbox/popup.c b/openbox/popup.c
index fd31846e..bddf137d 100644
--- a/openbox/popup.c
+++ b/openbox/popup.c
@@ -319,7 +319,7 @@ void popup_hide(ObPopup *self)
event_end_ignore_all_enters(ignore_start);
} else if (self->delay_mapped) {
- obt_main_loop_timeout_remove(ob_main_loop, popup_show_timeout);
+ obt_main_loop_timeout_remove_data(ob_main_loop, popup_show_timeout, self, FALSE);
self->delay_mapped = FALSE;
}
}
diff --git a/openbox/screen.c b/openbox/screen.c
index 74d073c4..09d5003c 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -77,7 +77,7 @@ static GSList *struts_left = NULL;
static GSList *struts_right = NULL;
static GSList *struts_bottom = NULL;
-static ObPagerPopup *desktop_popup;
+static ObPagerPopup **desktop_popup;
/*! The number of microseconds that you need to be on a desktop before it will
replace the remembered "last desktop" */
@@ -344,15 +344,22 @@ void screen_startup(gboolean reconfig)
guint32 d;
gboolean namesexist = FALSE;
- desktop_popup = pager_popup_new();
- pager_popup_height(desktop_popup, POPUP_HEIGHT);
-
if (reconfig) {
- /* update the pager popup's width */
- pager_popup_text_width_to_strings(desktop_popup,
- screen_desktop_names,
- screen_num_desktops);
+ guint i;
+ desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
+ for (i = 0; i < screen_num_monitors; i++) {
+ desktop_popup[i] = pager_popup_new();
+ pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
+
+ /* update the pager popup's width */
+ pager_popup_text_width_to_strings(desktop_popup[i],
+ screen_desktop_names,
+ screen_num_desktops);
+ }
+
return;
+ } else {
+ desktop_popup = NULL;
}
/* get the initial size */
@@ -441,7 +448,12 @@ void screen_startup(gboolean reconfig)
void screen_shutdown(gboolean reconfig)
{
- pager_popup_free(desktop_popup);
+ guint i;
+
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_free(desktop_popup[i]);
+ }
+ g_free(desktop_popup);
if (reconfig)
return;
@@ -911,39 +923,52 @@ static guint translate_row_col(guint r, guint c)
static gboolean hide_desktop_popup_func(gpointer data)
{
- pager_popup_hide(desktop_popup);
+ guint i;
+
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_hide(desktop_popup[i]);
+ }
return FALSE; /* don't repeat */
}
void screen_show_desktop_popup(guint d)
{
Rect *a;
+ guint i;
/* 0 means don't show the popup */
if (!config_desktop_popup_time) return;
- a = screen_physical_area_active();
- pager_popup_position(desktop_popup, CenterGravity,
- a->x + a->width / 2, a->y + a->height / 2);
- pager_popup_icon_size_multiplier(desktop_popup,
- (screen_desktop_layout.columns /
- screen_desktop_layout.rows) / 2,
- (screen_desktop_layout.rows/
- screen_desktop_layout.columns) / 2);
- pager_popup_max_width(desktop_popup,
- MAX(a->width/3, POPUP_WIDTH));
- pager_popup_show(desktop_popup, screen_desktop_names[d], d);
-
- obt_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func);
- obt_main_loop_timeout_add(ob_main_loop, config_desktop_popup_time * 1000,
- hide_desktop_popup_func, NULL, NULL, NULL);
- g_free(a);
+ for (i = 0; i < screen_num_monitors; i++) {
+ a = screen_physical_area_monitor(i);
+ pager_popup_position(desktop_popup[i], CenterGravity,
+ a->x + a->width / 2, a->y + a->height / 2);
+ pager_popup_icon_size_multiplier(desktop_popup[i],
+ (screen_desktop_layout.columns /
+ screen_desktop_layout.rows) / 2,
+ (screen_desktop_layout.rows/
+ screen_desktop_layout.columns) / 2);
+ pager_popup_max_width(desktop_popup[i],
+ MAX(a->width/3, POPUP_WIDTH));
+ pager_popup_show(desktop_popup[i], screen_desktop_names[d], d);
+
+ obt_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func);
+ obt_main_loop_timeout_add(ob_main_loop, config_desktop_popup_time * 1000,
+ hide_desktop_popup_func, desktop_popup[i],
+ g_direct_equal, NULL);
+ g_free(a);
+ }
}
void screen_hide_desktop_popup(void)
{
- obt_main_loop_timeout_remove(ob_main_loop, hide_desktop_popup_func);
- pager_popup_hide(desktop_popup);
+ guint i;
+
+ for (i = 0; i < screen_num_monitors; i++) {
+ obt_main_loop_timeout_remove_data(ob_main_loop, hide_desktop_popup_func,
+ desktop_popup[i], FALSE);
+ pager_popup_hide(desktop_popup[i]);
+ }
}
guint screen_find_desktop(guint from, ObDirection dir,
@@ -1178,9 +1203,11 @@ void screen_update_desktop_names(void)
}
/* resize the pager for these names */
- pager_popup_text_width_to_strings(desktop_popup,
- screen_desktop_names,
- screen_num_desktops);
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_text_width_to_strings(desktop_popup[i],
+ screen_desktop_names,
+ screen_num_desktops);
+ }
}
void screen_show_desktop(gboolean show, ObClient *show_only)
@@ -1302,7 +1329,10 @@ typedef struct {
static void get_xinerama_screens(Rect **xin_areas, guint *nxin)
{
guint i;
- gint l, r, t, b;
+ gint n, l, r, t, b;
+#ifdef XINERAMA
+ XineramaScreenInfo *info;
+#endif
if (ob_debug_xinerama) {
gint w = WidthOfScreen(ScreenOfDisplay(obt_display, ob_screen));
@@ -1313,10 +1343,8 @@ static void get_xinerama_screens(Rect **xin_areas, guint *nxin)
RECT_SET((*xin_areas)[1], w/2, 0, w-(w/2), h);
}
#ifdef XINERAMA
- else if (obt_display_extension_xinerama) {
- guint i;
- gint n;
- XineramaScreenInfo *info = XineramaQueryScreens(obt_display, &n);
+ else if (obt_display_extension_xinerama &&
+ (info = XineramaQueryScreens(obt_display, &n))) {
*nxin = n;
*xin_areas = g_new(Rect, *nxin + 1);
for (i = 0; i < *nxin; ++i)
@@ -1357,6 +1385,20 @@ void screen_update_areas(void)
g_free(monitor_area);
get_xinerama_screens(&monitor_area, &screen_num_monitors);
+ if (!desktop_popup) {
+ desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
+ for (i = 0; i < screen_num_monitors; i++) {
+ desktop_popup[i] = pager_popup_new();
+ pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
+
+ if (screen_desktop_names)
+ /* update the pager popup's width */
+ pager_popup_text_width_to_strings(desktop_popup[i],
+ screen_desktop_names,
+ screen_num_desktops);
+ }
+ }
+
/* set up the user-specified margins */
config_margins.top_start = RECT_LEFT(monitor_area[screen_num_monitors]);
config_margins.top_end = RECT_RIGHT(monitor_area[screen_num_monitors]);
@@ -1454,6 +1496,15 @@ void screen_update_areas(void)
b = MAX(b, s->strut->bottom);
}
+ if (l) l += RECT_LEFT (monitor_area[screen_num_monitors])
+ - RECT_LEFT (monitor_area[i]);
+ if (t) t += RECT_TOP (monitor_area[screen_num_monitors])
+ - RECT_TOP (monitor_area[i]);
+ if (r) r -= RECT_RIGHT (monitor_area[screen_num_monitors])
+ - RECT_RIGHT (monitor_area[i]);
+ if (b) b -= RECT_BOTTOM(monitor_area[screen_num_monitors])
+ - RECT_BOTTOM(monitor_area[i]);
+
/* based on these margins, set the work area for the
monitor/desktop */
dims[(i * screen_num_desktops + j) * 4 + 0] += l;
@@ -1594,28 +1645,32 @@ Rect* screen_area(guint desktop, guint head, Rect *search)
if ((s->desktop == d || s->desktop == DESKTOP_ALL) &&
STRUT_LEFT_IN_SEARCH(s->strut, search) &&
!STRUT_LEFT_IGNORE(s->strut, us, search))
- l = MAX(l, al + s->strut->left);
+ l = MAX(l, RECT_LEFT(monitor_area[screen_num_monitors])
+ + s->strut->left);
}
for (it = struts_top; it; it = g_slist_next(it)) {
ObScreenStrut *s = it->data;
if ((s->desktop == d || s->desktop == DESKTOP_ALL) &&
STRUT_TOP_IN_SEARCH(s->strut, search) &&
!STRUT_TOP_IGNORE(s->strut, us, search))
- t = MAX(t, at + s->strut->top);
+ t = MAX(t, RECT_TOP(monitor_area[screen_num_monitors])
+ + s->strut->top);
}
for (it = struts_right; it; it = g_slist_next(it)) {
ObScreenStrut *s = it->data;
if ((s->desktop == d || s->desktop == DESKTOP_ALL) &&
STRUT_RIGHT_IN_SEARCH(s->strut, search) &&
!STRUT_RIGHT_IGNORE(s->strut, us, search))
- r = MIN(r, ar - s->strut->right);
+ r = MIN(r, RECT_RIGHT(monitor_area[screen_num_monitors])
+ - s->strut->right);
}
for (it = struts_bottom; it; it = g_slist_next(it)) {
ObScreenStrut *s = it->data;
if ((s->desktop == d || s->desktop == DESKTOP_ALL) &&
STRUT_BOTTOM_IN_SEARCH(s->strut, search) &&
!STRUT_BOTTOM_IGNORE(s->strut, us, search))
- b = MIN(b, ab - s->strut->bottom);
+ b = MIN(b, RECT_BOTTOM(monitor_area[screen_num_monitors])
+ - s->strut->bottom);
}
/* limit to this monitor */
diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c
index 3e8799f8..aa6db7e6 100644
--- a/openbox/startupnotify.c
+++ b/openbox/startupnotify.c
@@ -239,7 +239,7 @@ void sn_setup_spawn_environment(const gchar *program, const gchar *name,
gchar *desc;
const char *id;
- desc = g_strdup_printf(_("Running %s\n"), program);
+ desc = g_strdup_printf(_("Running %s"), program);
if (sn_launcher_context_get_initiated(sn_launcher)) {
sn_launcher_context_unref(sn_launcher);
diff --git a/po/LINGUAS b/po/LINGUAS
index 149afe40..0db7a857 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -23,10 +23,10 @@ bn_IN
it
vi
ja
-ua
+uk
hu
lt
+lv
tr
da
-
-#hr
+hr
diff --git a/po/ar.po b/po/ar.po
index bb8af255..6ecf08e8 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -443,8 +443,8 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "تشغيل %s\n"
+msgid "Running %s"
+msgstr "تشغيل %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/bn_IN.po b/po/bn_IN.po
index c89217b8..b7c898c2 100644
--- a/po/bn_IN.po
+++ b/po/bn_IN.po
@@ -444,8 +444,8 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "%s সঞ্চালিত হচ্ছে\n"
+msgid "Running %s"
+msgstr "%s সঞ্চালিত হচ্ছে"
#: openbox/translate.c:59
#, c-format
diff --git a/po/ca.po b/po/ca.po
index 50d5a240..287af4f0 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -468,8 +468,8 @@ msgstr "No esteu connectats al gestor de sessions"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Executant %s\n"
+msgid "Running %s"
+msgstr "Executant %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/cs.po b/po/cs.po
index 6c195cc2..49ad300e 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -450,8 +450,8 @@ msgstr "Nepřipojen k session manageru"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Spouštím %s\n"
+msgid "Running %s"
+msgstr "Spouštím %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/da.po b/po/da.po
index 351e1c4f..3fa8ed9d 100644
--- a/po/da.po
+++ b/po/da.po
@@ -458,8 +458,8 @@ msgstr "Ikke forbundet til en sessionsbehandler"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Kører %s\n"
+msgid "Running %s"
+msgstr "Kører %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/de.po b/po/de.po
index 758a06c1..9a78c710 100644
--- a/po/de.po
+++ b/po/de.po
@@ -463,8 +463,8 @@ msgstr "Nicht mit einem Sitzungsmanager verbunden"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Starte %s\n"
+msgid "Running %s"
+msgstr "Starte %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/en@boldquot.po b/po/en@boldquot.po
index 33856fdb..cdd30d29 100644
--- a/po/en@boldquot.po
+++ b/po/en@boldquot.po
@@ -477,8 +477,8 @@ msgstr "Not connected to a session manager"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Running %s\n"
+msgid "Running %s"
+msgstr "Running %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/en@quot.po b/po/en@quot.po
index adfbd9e6..ab181820 100644
--- a/po/en@quot.po
+++ b/po/en@quot.po
@@ -474,8 +474,8 @@ msgstr "Not connected to a session manager"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Running %s\n"
+msgid "Running %s"
+msgstr "Running %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/es.po b/po/es.po
index 8dfe06a6..d4d9f947 100644
--- a/po/es.po
+++ b/po/es.po
@@ -468,8 +468,8 @@ msgstr "Sin conexión a un manejador de sesiones"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Ejecutando %s\n"
+msgid "Running %s"
+msgstr "Ejecutando %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/et.po b/po/et.po
index 209f378f..9c9c9f34 100644
--- a/po/et.po
+++ b/po/et.po
@@ -441,8 +441,8 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Jooksev %s\n"
+msgid "Running %s"
+msgstr "Jooksev %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/eu.po b/po/eu.po
index 7257436b..8b3a52f8 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -458,8 +458,8 @@ msgstr "Saio kudeatzaile batera ez konektatua"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Egikaritzen %s\n"
+msgid "Running %s"
+msgstr "Egikaritzen %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/fi.po b/po/fi.po
index fc2d4bec..0c5b344c 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -457,8 +457,8 @@ msgstr "Ei yhteyttä istunnon hallintaan"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Suoritetaan %s\n"
+msgid "Running %s"
+msgstr "Suoritetaan %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/fr.po b/po/fr.po
index a32e61cd..036d78e5 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -474,8 +474,8 @@ msgstr "Non connect un gestionnaire de session"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Excution de %s\n"
+msgid "Running %s"
+msgstr "Excution de %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/hr.po b/po/hr.po
index 3c943efd..13af7ef3 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -1,133 +1,135 @@
# Croatian messages for openbox.
-# Copyright (C) 2006 Mikael Magnusson
+# Copyright (C) 2009 Mikael Magnusson
# This file is distributed under the same license as the openbox package.
-# Daniel Radetic <drade@boobah.info>, 2006.
#
msgid ""
msgstr ""
-"Project-Id-Version: Openbox 3.3\n"
+"Project-Id-Version: Openbox 3.4.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-03-03 02:10+0100\n"
-"PO-Revision-Date: 2006-09-05 16:45+0100\n"
-"Last-Translator: Daniel Radetic <drade@boobah.info>\n"
-"Language-Team: None\n"
+"POT-Creation-Date: 2009-03-31 19:16+0200\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: openbox/actions.c:150
+#: openbox/actions.c:149
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr ""
+msgstr "Nevažeća akcija \"%s\" zatražena. Takva akcija ne postoji."
#: openbox/actions/execute.c:128
msgid "No"
-msgstr ""
+msgstr "Ne"
#: openbox/actions/execute.c:129
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: openbox/actions/execute.c:133
msgid "Execute"
-msgstr ""
+msgstr "Izvrši"
#: openbox/actions/execute.c:142
#, c-format
msgid "Failed to convert the path \"%s\" from utf8"
-msgstr ""
+msgstr "Neuspio pokušaj pretvorbe putanje \"%s\" iz utf8"
-#: openbox/actions/exit.c:52 openbox/actions/session.c:62
-#: openbox/client.c:3460
+#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+#: openbox/client.c:3465
msgid "Cancel"
-msgstr ""
+msgstr "Odustani"
#: openbox/actions/exit.c:53
msgid "Exit"
-msgstr ""
+msgstr "Izađi"
#: openbox/actions/exit.c:56
msgid "Are you sure you want to exit Openbox?"
-msgstr ""
+msgstr "Jeste li sigurni da želite zatvoriti Openbox?"
#: openbox/actions/exit.c:57
msgid "Exit Openbox"
-msgstr ""
+msgstr "Zatvori Openbox"
-#: openbox/actions/session.c:41
+#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+#. name of the action you write in rc.xml
+#: openbox/actions/session.c:43
msgid ""
"The SessionLogout action is not available since Openbox was built without "
"session management support"
msgstr ""
+"Akcija SessionLogout nije dostupna otkad je Openbox izgrađen bez podrške "
+"upravljanja sesijama"
-#: openbox/actions/session.c:63 openbox/actions/session.c:68
+#: openbox/actions/session.c:65 openbox/actions/session.c:70
msgid "Log Out"
-msgstr ""
+msgstr "Odjava"
-#: openbox/actions/session.c:67
+#: openbox/actions/session.c:69
msgid "Are you sure you want to log out?"
-msgstr ""
+msgstr "Jeste li sigurni da se želite odjaviti?"
-#: openbox/client.c:2004
+#: openbox/client.c:2012
msgid "Unnamed Window"
-msgstr ""
+msgstr "Neimenovan Prozor"
-#: openbox/client.c:2018 openbox/client.c:2050
+#: openbox/client.c:2026 openbox/client.c:2058
msgid "Killing..."
-msgstr ""
+msgstr "Ubijanje..."
-#: openbox/client.c:2020 openbox/client.c:2052
+#: openbox/client.c:2028 openbox/client.c:2060
msgid "Not Responding"
-msgstr ""
+msgstr "Ne Odgovara"
-#: openbox/client.c:3449
+#: openbox/client.c:3454
#, 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 ""
+"Prozor \"%s\" ne reagira. Želite li forsirati izlaženje šaljući %s signal?"
-#: openbox/client.c:3451
+#: openbox/client.c:3456
msgid "End Process"
-msgstr ""
+msgstr "Završetak Procesa"
-#: openbox/client.c:3455
+#: openbox/client.c:3460
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
"it from the X server?"
msgstr ""
+"Prozor \"%s\" ne reagira. Želite li prekinuti njegovu vezu sa X serverom?"
-#: openbox/client.c:3457
+#: openbox/client.c:3462
msgid "Disconnect"
-msgstr ""
+msgstr "Prekid veze"
#: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
msgid "Go there..."
-msgstr "Odi na..."
+msgstr "Idi tamo..."
#: openbox/client_list_combined_menu.c:94
-#, fuzzy
msgid "Manage desktops"
-msgstr "Sve radne površine"
+msgstr "Upravljanje radnim površinama"
#: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
-#, fuzzy
msgid "_Add new desktop"
-msgstr "_Pošalji na radnu površinu"
+msgstr "_Dodaj novu radnu površinu"
#: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
-#, fuzzy
msgid "_Remove last desktop"
-msgstr "_Pošalji na radnu površinu"
+msgstr "_Ukloni zadnju radnu površinu"
#: openbox/client_list_combined_menu.c:149
msgid "Windows"
-msgstr ""
+msgstr "Prozori"
#: openbox/client_list_menu.c:203
msgid "Desktops"
-msgstr "Radne površine"
+msgstr "Radne Površine"
#: openbox/client_menu.c:258
msgid "All desktops"
@@ -135,7 +137,7 @@ msgstr "Sve radne površine"
#: openbox/client_menu.c:370
msgid "_Layer"
-msgstr ""
+msgstr "_Sloj"
#: openbox/client_menu.c:375
msgid "Always on _top"
@@ -151,311 +153,336 @@ msgstr "Uvijek na _dnu"
#: openbox/client_menu.c:379
msgid "_Send to desktop"
-msgstr "_Pošalji na radnu površinu"
+msgstr "Pošalji na _radnu površinu"
#: openbox/client_menu.c:383
msgid "Client menu"
-msgstr "Meni klijenta"
+msgstr "Izbornik klijenta"
#: openbox/client_menu.c:393
msgid "R_estore"
-msgstr "Ponovno uspostav_i"
+msgstr "O_bnovi"
#: openbox/client_menu.c:397
msgid "_Move"
-msgstr "Po_makni"
+msgstr "_Pomicanje"
#: openbox/client_menu.c:399
msgid "Resi_ze"
-msgstr "Prom_jeni veličinu"
+msgstr "Prom_jena veličine"
#: openbox/client_menu.c:401
msgid "Ico_nify"
-msgstr "Iko_nificiraj"
+msgstr "Mi_nimizacija"
#: openbox/client_menu.c:405
msgid "Ma_ximize"
-msgstr "M_aksimiziraj"
+msgstr "M_aksimizacija"
#: openbox/client_menu.c:409
msgid "_Roll up/down"
-msgstr ""
+msgstr "_Okretanje gore/dolje"
#: openbox/client_menu.c:411
msgid "Un/_Decorate"
-msgstr ""
+msgstr "Ne/_Dekoriranje"
#: openbox/client_menu.c:415
msgid "_Close"
msgstr "_Zatvori"
-#: openbox/config.c:781
+#: openbox/config.c:782
#, c-format
msgid "Invalid button \"%s\" specified in config file"
-msgstr ""
+msgstr "Nevažeće dugme \"%s\" specificirano u konfiguracijskoj datoteci"
#: openbox/keyboard.c:157
msgid "Conflict with key binding in config file"
-msgstr ""
+msgstr "Konflikt sa povezivanjem tipki u konfiguracijskoj datoteci"
-#: openbox/menu.c:103 openbox/menu.c:111
+#: openbox/menu.c:102 openbox/menu.c:110
#, c-format
msgid "Unable to find a valid menu file \"%s\""
-msgstr ""
+msgstr "Ne mogu pronaći važeću datoteku izbornika \"%s\""
-#: openbox/menu.c:171
+#: openbox/menu.c:170
#, c-format
msgid "Failed to execute command for pipe-menu \"%s\": %s"
-msgstr ""
+msgstr "Neuspio pokušaj izvršavanja naredbe za cijev-izbornik \"%s\": %s"
-#: openbox/menu.c:185
+#: openbox/menu.c:184
#, c-format
msgid "Invalid output from pipe-menu \"%s\""
-msgstr ""
+msgstr "Nevažeći izlaz za cijev-izbornik \"%s\""
-#: openbox/menu.c:198
+#: openbox/menu.c:197
#, c-format
msgid "Attempted to access menu \"%s\" but it does not exist"
-msgstr ""
+msgstr "Pokušavam pristupiti izborniku \"%s\" ali on ne postoji"
-#: openbox/menu.c:368 openbox/menu.c:369
+#: openbox/menu.c:367 openbox/menu.c:368
msgid "More..."
-msgstr ""
+msgstr "Više..."
#: openbox/mouse.c:373
#, c-format
msgid "Invalid button \"%s\" in mouse binding"
-msgstr ""
+msgstr "Nevažeće dugme \"%s\" u povezivanju miša"
#: openbox/mouse.c:379
#, c-format
msgid "Invalid context \"%s\" in mouse binding"
-msgstr ""
+msgstr "Nevažeći kontekst \"%s\" u povezivanju miša"
-#: openbox/openbox.c:134
+#: openbox/openbox.c:133
#, c-format
msgid "Unable to change to home directory \"%s\": %s"
-msgstr ""
+msgstr "Ne mogu doći u home direktorij \"%s\": %s"
-#: openbox/openbox.c:154
+#: openbox/openbox.c:152
msgid "Failed to open the display from the DISPLAY environment variable."
-msgstr ""
+msgstr "Neuspio pokušaj otvaranja zaslona iz DISPLAY varijable okruženja."
-#: openbox/openbox.c:185
+#: openbox/openbox.c:183
msgid "Failed to initialize the obrender library."
-msgstr ""
+msgstr "Neuspio pokušaj inicijalizacije obrender biblioteke."
-#: openbox/openbox.c:196
+#: openbox/openbox.c:194
msgid "X server does not support locale."
-msgstr ""
+msgstr "X server ne podržava lokalno."
-#: openbox/openbox.c:198
+#: openbox/openbox.c:196
msgid "Cannot set locale modifiers for the X server."
-msgstr ""
+msgstr "Ne mogu postaviti lokalne modifikatore za X server."
-#: openbox/openbox.c:266
+#: openbox/openbox.c:263
msgid "Unable to find a valid config file, using some simple defaults"
msgstr ""
+"Ne mogu pronaći važeću konfiguracijsku datoteku, koriteći neke jednostavne "
+"standarde"
-#: openbox/openbox.c:300
+#: openbox/openbox.c:297
msgid "Unable to load a theme."
-msgstr ""
+msgstr "Ne mogu pokrenuti temu."
-#: openbox/openbox.c:380
+#: openbox/openbox.c:377
#, 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 ""
+"Jedna ili više XML pogreški u sintaksi su pronađene prilikom analize Openbox "
+"konfiguracijskih datoteka. Pogledajte stdout za više informacija. Zadnja "
+"pogreška je u datoteci \"%s\" u liniji %d, sa porukom: %s"
-#: openbox/openbox.c:382
+#: openbox/openbox.c:379
msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "Openbox Pogreška u Sintaksi"
-#: openbox/openbox.c:382
-#, fuzzy
+#: openbox/openbox.c:379
msgid "Close"
-msgstr "_Zatvori"
+msgstr "Zatvori"
-#: openbox/openbox.c:451
+#: openbox/openbox.c:448
#, c-format
msgid "Restart failed to execute new executable \"%s\": %s"
-msgstr ""
+msgstr "Restart je bio neusješan za izvršenje novog izvršnog \"%s\": %s"
-#: openbox/openbox.c:521 openbox/openbox.c:523
+#: openbox/openbox.c:518 openbox/openbox.c:520
msgid "Copyright (c)"
-msgstr ""
+msgstr "Copyright (c)"
-#: openbox/openbox.c:532
+#: openbox/openbox.c:529
msgid "Syntax: openbox [options]\n"
-msgstr ""
+msgstr "Sintaksa: openbox [opcije]\n"
-#: openbox/openbox.c:533
+#: openbox/openbox.c:530
msgid ""
"\n"
"Options:\n"
msgstr ""
+"\n"
+"Opcije:\n"
-#: openbox/openbox.c:534
+#: openbox/openbox.c:531
msgid " --help Display this help and exit\n"
-msgstr ""
+msgstr " --help Prikazuje ovu pomoć i izlazi\n"
-#: openbox/openbox.c:535
+#: openbox/openbox.c:532
msgid " --version Display the version and exit\n"
-msgstr ""
+msgstr " --version Prikazuje verziju i izlazi\n"
-#: openbox/openbox.c:536
+#: openbox/openbox.c:533
msgid " --replace Replace the currently running window manager\n"
msgstr ""
+" --replace Zamjenjuje trenutno pokrenut upravitelj prozora\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
+#: openbox/openbox.c:537
msgid " --config-file FILE Specify the path to the config file to use\n"
msgstr ""
+" --config-file FILE Specificira putanju do konfiguracijske datoteke koja "
+"se koristi\n"
-#: openbox/openbox.c:541
+#: openbox/openbox.c:538
msgid " --sm-disable Disable connection to the session manager\n"
-msgstr ""
+msgstr " --sm-disable Onemogućuje vezu sa upraviteljom sesija\n"
-#: openbox/openbox.c:542
+#: openbox/openbox.c:539
msgid ""
"\n"
"Passing messages to a running Openbox instance:\n"
msgstr ""
+"\n"
+"Prosljeđuje poruke pokrenutoj Openbox instanci:\n"
-#: openbox/openbox.c:543
+#: openbox/openbox.c:540
msgid " --reconfigure Reload Openbox's configuration\n"
-msgstr ""
+msgstr " --reconfigure Osvježava Openbox konfiguraciju\n"
-#: openbox/openbox.c:544
+#: openbox/openbox.c:541
msgid " --restart Restart Openbox\n"
-msgstr ""
+msgstr " --restart Restartira Openbox\n"
-#: openbox/openbox.c:545
+#: openbox/openbox.c:542
msgid " --exit Exit Openbox\n"
-msgstr ""
+msgstr " --exit Izlazi iz Openbox-a\n"
-#: openbox/openbox.c:546
+#: openbox/openbox.c:543
msgid ""
"\n"
"Debugging options:\n"
msgstr ""
+"\n"
+"Opcije traženja pogrešaka:\n"
-#: openbox/openbox.c:547
+#: openbox/openbox.c:544
msgid " --sync Run in synchronous mode\n"
-msgstr ""
+msgstr " --sync Pokretanje u sinkronizacijskom modu\n"
-#: openbox/openbox.c:548
+#: openbox/openbox.c:545
msgid " --debug Display debugging output\n"
-msgstr ""
+msgstr " --debug Prikazuje izlaz traženja pogrešaka\n"
-#: openbox/openbox.c:549
+#: openbox/openbox.c:546
msgid " --debug-focus Display debugging output for focus handling\n"
msgstr ""
+" --debug-focus Prikazuje izlaz traženja pogrešaka za rukovanje "
+"fokusom\n"
-#: openbox/openbox.c:550
+#: openbox/openbox.c:547
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
-msgstr ""
+msgstr " --debug-xinerama Podijeli zaslon u lažne xinerama zaslone\n"
-#: openbox/openbox.c:551
+#: openbox/openbox.c:548
#, c-format
msgid ""
"\n"
"Please report bugs at %s\n"
msgstr ""
+"\n"
+"Molimo prijavite pogrešku na %s\n"
-#: openbox/openbox.c:620
+#: openbox/openbox.c:617
msgid "--config-file requires an argument\n"
-msgstr ""
+msgstr "--config-file zahtjeva argument\n"
-#: openbox/openbox.c:663
+#: openbox/openbox.c:660
#, c-format
msgid "Invalid command line argument \"%s\"\n"
-msgstr ""
+msgstr "Nevažeći argument komandne linije \"%s\"\n"
#: openbox/screen.c:102 openbox/screen.c:190
#, c-format
msgid "A window manager is already running on screen %d"
-msgstr ""
+msgstr "Upravitelj prozora je već pokrenut na zaslonu %d"
#: openbox/screen.c:124
#, c-format
msgid "Could not acquire window manager selection on screen %d"
-msgstr ""
+msgstr "Ne mogu ostvariti odabir upravitelja prozora na zaslonu %d"
#: openbox/screen.c:145
#, c-format
msgid "The WM on screen %d is not exiting"
-msgstr ""
+msgstr "Upravitelj prozora na zaslonu %d ne izlazi"
#. TRANSLATORS: If you need to specify a different order of the
#. arguments, you can use %1$d for the first one and %2$d for the
#. second one. For example,
#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
#: openbox/screen.c:412
-#, c-format
+#, fuzzy, 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 ""
+msgstr[0] ""
+"Openbox je konfiguriran za %d radnu površinu, ali trenutna sesija ima %d. "
+"Prepisujem preko Openbox konfiguracije."
+msgstr[1] ""
+"Openbox je konfiguriran za %d radnu površinu, ali trenutna sesija ima %d. "
+"Prepisujem preko Openbox konfiguracije."
#: openbox/screen.c:1180
#, c-format
msgid "desktop %i"
-msgstr ""
+msgstr "radna površina %i"
#: openbox/session.c:104
#, c-format
msgid "Unable to make directory \"%s\": %s"
-msgstr "Nemogu napraviti direktorij \"%s\": %s"
+msgstr "Ne mogu stvoriti direktorij \"%s\": %s"
-#: openbox/session.c:452
+#: openbox/session.c:466
#, c-format
msgid "Unable to save the session to \"%s\": %s"
-msgstr ""
+msgstr "Ne mogu spremiti sesiju u \"%s\": %s"
-#: openbox/session.c:584
+#: openbox/session.c:605
#, c-format
msgid "Error while saving the session to \"%s\": %s"
-msgstr ""
+msgstr "Pogreška prilokom spremanja sesije u \"%s\": %s"
-#: openbox/session.c:821
+#: openbox/session.c:842
msgid "Not connected to a session manager"
-msgstr ""
+msgstr "Nije povezan sa upraviteljem sesija"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr ""
+msgid "Running %s"
+msgstr "Pokrenuto %s"
#: openbox/translate.c:59
#, c-format
msgid "Invalid modifier key \"%s\" in key/mouse binding"
-msgstr ""
+msgstr "Nevažeći modifikacijski ključ \"%s\" u povezivanju tipke/miš"
#: openbox/translate.c:138
#, c-format
msgid "Invalid key code \"%s\" in key binding"
-msgstr ""
+msgstr "Nevažeći kod ključa \"%s\" u povezivanju tipki"
#: openbox/translate.c:145
#, c-format
msgid "Invalid key name \"%s\" in key binding"
-msgstr ""
+msgstr "Nevažeće ime tipke \"%s\" u povezivanju tipki"
#: openbox/translate.c:151
#, c-format
msgid "Requested key \"%s\" does not exist on the display"
-msgstr ""
+msgstr "Traženi ključ \"%s\" ne postoji na zaslonu"
#: openbox/xerror.c:40
#, c-format
msgid "X Error: %s"
-msgstr ""
+msgstr "X Pogreška: %s"
#: openbox/prompt.c:200
msgid "OK"
-msgstr ""
+msgstr "OK"
diff --git a/po/hu.po b/po/hu.po
index 3aba08e5..ffa5201c 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -452,8 +452,8 @@ msgstr "Nem kapcsolódunk a szekciókezelőhöz"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Futtatás %s\n"
+msgid "Running %s"
+msgstr "Futtatás %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/it.po b/po/it.po
index 263e6ae0..27d3d81f 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,8 +1,8 @@
# Italian translation for Openbox
-# Copyright (C) 2007 Davide Truffa
+# Copyright (C) 2007-2009 Davide Truffa
# Copyright (C) 2008 Andrea Scarpino
# This file is distributed under the same license as the openbox package.
-# Davide Truffa <davide@catoblepa.org>, 2007.
+# Davide Truffa <davide@catoblepa.org>, 2007-2009.
# Andrea Scarpino <bash.lnx@gmail.com>, 2008.
#
#
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Openbox 3.4.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
-"PO-Revision-Date: 2008-05-15 13:09+0200\n"
-"Last-Translator: Andrea Scarpino <bash.lnx@gmail.com>\n"
+"POT-Creation-Date: 2009-02-25 23:51+0100\n"
+"PO-Revision-Date: 2009-02-25 11:29+0100\n"
+"Last-Translator: Davide Truffa <davide@catoblepa.org>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -65,7 +65,7 @@ msgid ""
"The SessionLogout action is not available since Openbox was built without "
"session management support"
msgstr ""
-"L'azione SessionLogout non è disponibile se Openbox è compilato senzail "
+"L'azione SessionLogout non è disponibile se Openbox è compilato senza il "
"supporto del gestore delle sessioni."
#: openbox/actions/session.c:65 openbox/actions/session.c:70
@@ -95,7 +95,7 @@ msgid ""
"to exit by sending the %s signal?"
msgstr ""
"La finestra \"%s\" sembra non rispondere. Vuoi terminarne l'esecuzione "
-"inviando un segnale %s?"
+"inviando il segnale %s?"
#: openbox/client.c:3456
msgid "End Process"
@@ -107,8 +107,8 @@ msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
"it from the X server?"
msgstr ""
-"La finestra \"%s\" non sembra rispondere. Vuoi terminarne l'esecuzione dal "
-"server X?"
+"La finestra \"%s\" non sembra rispondere. Vuoi terminarne l'esecuzione "
+"tramite il server X?"
#: openbox/client.c:3462
msgid "Disconnect"
@@ -198,7 +198,7 @@ msgstr "Si/No _Decorazioni"
msgid "_Close"
msgstr "_Chiudi"
-#: openbox/config.c:781
+#: openbox/config.c:782
#, c-format
msgid "Invalid button \"%s\" specified in config file"
msgstr "Il pulsante \"%s\" specificato nel file di configurazione non è valido"
@@ -263,8 +263,7 @@ msgstr "Il server X non ha il supporto per la localizzazione."
#: openbox/openbox.c:196
msgid "Cannot set locale modifiers for the X server."
msgstr ""
-"Impossibile impostare la localizzazione dei tasti modificatori per il server "
-"X."
+"Impossibile impostare i tasti modificatori localizzati per il server X."
#: openbox/openbox.c:263
msgid "Unable to find a valid config file, using some simple defaults"
@@ -284,7 +283,7 @@ msgid ""
"was in file \"%s\" line %d, with message: %s"
msgstr ""
"Sono stati trovati uno o più errori nel file di configurazione di Openbox. "
-"Vedi stdout per ulteriori informazioni. L'ultimo errore era in \"%s\" alla "
+"Vedi stdout per ulteriori informazioni. L'ultimo errore era in \"%s\" alla "
"linea %d, con il messaggio: %s"
#: openbox/openbox.c:379
@@ -460,12 +459,12 @@ msgstr "Errore durante il salvataggio della sessione in \"%s\": %s"
#: openbox/session.c:842
msgid "Not connected to a session manager"
-msgstr "Non sei connesso al gestore di sessioni"
+msgstr "Non connesso al gestore di sessioni"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Sto eseguendo %s\n"
+msgid "Running %s"
+msgstr "Sto eseguendo %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/ja.po b/po/ja.po
index 7b30619c..4af2e9b5 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -449,8 +449,8 @@ msgstr "セッションマネージャに接続されていません。"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "起動中 %s\n"
+msgid "Running %s"
+msgstr "起動中 %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/lt.po b/po/lt.po
index 5b2aaf88..854c4c3b 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -450,8 +450,8 @@ msgstr "Neprisijungta prie sesijų sesijos tvarkyklė"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Veikia %s\n"
+msgid "Running %s"
+msgstr "Veikia %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 00000000..f1a3ae1b
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,488 @@
+# Latvian translations for openbox.
+# Copyright (C) 2009 Dana Jansens
+# This file is distributed under the same license as the openbox package.
+# Einars Sprugis <einars8@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Openbox 3.4.7\n"
+"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+"POT-Creation-Date: 2009-03-31 19:16+0200\n"
+"PO-Revision-Date: 2009-03-30 19:14+0300\n"
+"Last-Translator: Einars Sprugis <einars8@gmail.com>\n"
+"Language-Team: Latvian <lv@li.org>\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 != 0 ? 1 : "
+"2);\n"
+
+#: openbox/actions.c:149
+#, c-format
+msgid "Invalid action \"%s\" requested. No such action exists."
+msgstr "Neatļauta darbība \"%s\". Šāda darbība neeksistē."
+
+#: openbox/actions/execute.c:128
+msgid "No"
+msgstr "Nē"
+
+#: openbox/actions/execute.c:129
+msgid "Yes"
+msgstr "Jā"
+
+#: openbox/actions/execute.c:133
+msgid "Execute"
+msgstr "Izpildīt"
+
+#: openbox/actions/execute.c:142
+#, c-format
+msgid "Failed to convert the path \"%s\" from utf8"
+msgstr "Neizdevās pārveidot ceļu \"%s\" no utf8"
+
+#: openbox/actions/exit.c:52 openbox/actions/session.c:64
+#: openbox/client.c:3465
+msgid "Cancel"
+msgstr "Atcelt"
+
+#: openbox/actions/exit.c:53
+msgid "Exit"
+msgstr "Iziet"
+
+#: openbox/actions/exit.c:56
+msgid "Are you sure you want to exit Openbox?"
+msgstr "Vai tiešām vēlaties iziet no Openbox?"
+
+#: openbox/actions/exit.c:57
+msgid "Exit Openbox"
+msgstr "Iziet no Openbox"
+
+#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+#. name of the action you write in rc.xml
+#: openbox/actions/session.c:43
+msgid ""
+"The SessionLogout action is not available since Openbox was built without "
+"session management support"
+msgstr ""
+"SessionLogout darbība nav pieejama, jo Openbox tika kompilēts bez sesijas "
+"pārvaldes atbalsta"
+
+#: openbox/actions/session.c:65 openbox/actions/session.c:70
+msgid "Log Out"
+msgstr "Atteikties"
+
+#: openbox/actions/session.c:69
+msgid "Are you sure you want to log out?"
+msgstr "Vai tiešām vēlaties atteikties?"
+
+#: openbox/client.c:2012
+msgid "Unnamed Window"
+msgstr "Logs bez nosaukuma"
+
+#: openbox/client.c:2026 openbox/client.c:2058
+msgid "Killing..."
+msgstr "Nogalina..."
+
+#: openbox/client.c:2028 openbox/client.c:2060
+msgid "Not Responding"
+msgstr "Neatbild"
+
+#: openbox/client.c:3454
+#, 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 "Logs \"%s\" neatbild. Vai vēlieties to piespiest, nosūtot signālu %s?"
+
+#: openbox/client.c:3456
+msgid "End Process"
+msgstr "Nobeigt procesu"
+
+#: openbox/client.c:3460
+#, 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:3462
+msgid "Disconnect"
+msgstr "Atvienot"
+
+#: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
+msgid "Go there..."
+msgstr "Iet uz turieni..."
+
+#: openbox/client_list_combined_menu.c:94
+msgid "Manage desktops"
+msgstr "Pārvaldīt darbvirsmas"
+
+#: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
+msgid "_Add new desktop"
+msgstr "Pievienot j_aunu darbvirsmu"
+
+#: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
+msgid "_Remove last desktop"
+msgstr "Aizvākt pēdējo da_rbvirsmu"
+
+#: openbox/client_list_combined_menu.c:149
+msgid "Windows"
+msgstr "Logi"
+
+#: openbox/client_list_menu.c:203
+msgid "Desktops"
+msgstr "Darbvirsmas"
+
+#: openbox/client_menu.c:258
+msgid "All desktops"
+msgstr "Visas darbvirsmas"
+
+#: openbox/client_menu.c:370
+msgid "_Layer"
+msgstr "S_lānis"
+
+#: openbox/client_menu.c:375
+msgid "Always on _top"
+msgstr "Vienmēr augšā"
+
+#: openbox/client_menu.c:376
+msgid "_Normal"
+msgstr "_Normāli"
+
+#: openbox/client_menu.c:377
+msgid "Always on _bottom"
+msgstr "Vienmēr a_pakšā"
+
+#: openbox/client_menu.c:379
+msgid "_Send to desktop"
+msgstr "No_sūtīt uz darbvirsmu"
+
+#: openbox/client_menu.c:383
+msgid "Client menu"
+msgstr "Klientizvēlne"
+
+#: openbox/client_menu.c:393
+msgid "R_estore"
+msgstr "Atja_unot"
+
+#: openbox/client_menu.c:397
+msgid "_Move"
+msgstr "Pārviet_ot"
+
+#: openbox/client_menu.c:399
+msgid "Resi_ze"
+msgstr "Mainīt i_zmēru"
+
+#: openbox/client_menu.c:401
+msgid "Ico_nify"
+msgstr "Mi_nimizēt"
+
+#: openbox/client_menu.c:405
+msgid "Ma_ximize"
+msgstr "Maksimizē_t"
+
+#: openbox/client_menu.c:409
+msgid "_Roll up/down"
+msgstr "Sa_ritināt/Atritināt"
+
+#: openbox/client_menu.c:411
+msgid "Un/_Decorate"
+msgstr "Bez/Ar _dekorācijām"
+
+#: openbox/client_menu.c:415
+msgid "_Close"
+msgstr "Ai_zvērt"
+
+#: openbox/config.c:782
+#, c-format
+msgid "Invalid button \"%s\" specified in config file"
+msgstr "Konfigurācijas failā \"%s\" norādīts neatļauts taustiņš"
+
+#: openbox/keyboard.c:157
+msgid "Conflict with key binding in config file"
+msgstr "Konfliktē ar tastatūras saīsnēm konfigurācijas failā"
+
+#: openbox/menu.c:102 openbox/menu.c:110
+#, c-format
+msgid "Unable to find a valid menu file \"%s\""
+msgstr "Nav atrasts atļauts izvēlnes fails \"%s\""
+
+#: openbox/menu.c:170
+#, c-format
+msgid "Failed to execute command for pipe-menu \"%s\": %s"
+msgstr "Nevarēja izpildīt skriptētās izvēlnes komandu \"%s\": %s"
+
+#: openbox/menu.c:184
+#, c-format
+msgid "Invalid output from pipe-menu \"%s\""
+msgstr "Neatļauta izvade no skriptētās izvēlnes \"%s\""
+
+#: openbox/menu.c:197
+#, c-format
+msgid "Attempted to access menu \"%s\" but it does not exist"
+msgstr "Mēģināja piekļūt izvēlnei \"%s\", bet tā neeksistē"
+
+#: openbox/menu.c:367 openbox/menu.c:368
+msgid "More..."
+msgstr "Vairāk..."
+
+#: openbox/mouse.c:373
+#, c-format
+msgid "Invalid button \"%s\" in mouse binding"
+msgstr "Neatļauts taustiņš \"%s\" peles saīsnē"
+
+#: openbox/mouse.c:379
+#, c-format
+msgid "Invalid context \"%s\" in mouse binding"
+msgstr "Neatļauts konteksts \"%s\" peles saīsnē"
+
+#: openbox/openbox.c:133
+#, c-format
+msgid "Unable to change to home directory \"%s\": %s"
+msgstr "Nevarēja pāriet uz mājas mapi \"%s\": %s"
+
+#: openbox/openbox.c:152
+msgid "Failed to open the display from the DISPLAY environment variable."
+msgstr "Neizdevās atvēŗt displeju no DISPLAY vides mainīgā."
+
+#: openbox/openbox.c:183
+msgid "Failed to initialize the obrender library."
+msgstr "Neizdevās inicializēt obrender bibliotēku."
+
+#: openbox/openbox.c:194
+msgid "X server does not support locale."
+msgstr "X serveris neatbalsta lokāli."
+
+#: openbox/openbox.c:196
+msgid "Cannot set locale modifiers for the X server."
+msgstr "Nevar uzstādīt lokāles modificētājus X serverim."
+
+#: openbox/openbox.c:263
+msgid "Unable to find a valid config file, using some simple defaults"
+msgstr ""
+"Nevarēja atrast atļautu konfigurācijas failu, tiek izmantoti noklusējumi"
+
+#: openbox/openbox.c:297
+msgid "Unable to load a theme."
+msgstr "Nebija iespējams ielādēt tēmu."
+
+#: openbox/openbox.c:377
+#, 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 ""
+"Analizējot Openbox konfigurācijas datnes, tika atrastas viena vai vairākas "
+"XML sintakses kļūdas. Aplūkojiet standarta izvadi, lai noskaidrotu vairāk. "
+"Pēdējā kļūda bija failā \"%s\" - %d rinda, kļūdas ziņojums: %s"
+
+#: openbox/openbox.c:379
+msgid "Openbox Syntax Error"
+msgstr "Openbox sintakses kļūda"
+
+#: openbox/openbox.c:379
+msgid "Close"
+msgstr "Aizvērt"
+
+#: openbox/openbox.c:448
+#, c-format
+msgid "Restart failed to execute new executable \"%s\": %s"
+msgstr ""
+
+#: openbox/openbox.c:518 openbox/openbox.c:520
+msgid "Copyright (c)"
+msgstr "Copyright (c)"
+
+#: openbox/openbox.c:529
+msgid "Syntax: openbox [options]\n"
+msgstr "Sintakse: openbox [iespējas]\n"
+
+#: openbox/openbox.c:530
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Iespējas:\n"
+
+#: openbox/openbox.c:531
+msgid " --help Display this help and exit\n"
+msgstr " --help Parāda šo palīdzības tekstu un iziet\n"
+
+#: openbox/openbox.c:532
+msgid " --version Display the version and exit\n"
+msgstr " --version Parāda versiju un iziet\n"
+
+#: openbox/openbox.c:533
+msgid " --replace Replace the currently running window manager\n"
+msgstr " --replace Aizvieto pašreiz palaisto logu pārvaldnieku\n"
+
+#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+#. fine to leave it as FILE though.
+#: openbox/openbox.c:537
+msgid " --config-file FILE Specify the path to the config file to use\n"
+msgstr ""
+" --config-file FAILS Norāda ceļu uz izmantojamo konfigurācijas failu\n"
+
+#: openbox/openbox.c:538
+msgid " --sm-disable Disable connection to the session manager\n"
+msgstr " --sm-disable Atspējo savienojumu ar sesiju pārvaldnieku\n"
+
+#: openbox/openbox.c:539
+msgid ""
+"\n"
+"Passing messages to a running Openbox instance:\n"
+msgstr ""
+"\n"
+"Nodod ziņojumus esošai Openbox instancei:\n"
+
+#: openbox/openbox.c:540
+msgid " --reconfigure Reload Openbox's configuration\n"
+msgstr " --reconfigure Pārlādē Openbox konfigurācijas failus\n"
+
+#: openbox/openbox.c:541
+msgid " --restart Restart Openbox\n"
+msgstr " --restart Pārstartē Openbox\n"
+
+#: openbox/openbox.c:542
+msgid " --exit Exit Openbox\n"
+msgstr " --exit Iziet no Openbox\n"
+
+#: openbox/openbox.c:543
+msgid ""
+"\n"
+"Debugging options:\n"
+msgstr ""
+"\n"
+"Atkļūdošanas iespējas:\n"
+
+#: openbox/openbox.c:544
+msgid " --sync Run in synchronous mode\n"
+msgstr " --sync Palaist sinhronajā režīmā\n"
+
+#: openbox/openbox.c:545
+msgid " --debug Display debugging output\n"
+msgstr " --debug Rādīt atkļūdošanas izvadi\n"
+
+#: openbox/openbox.c:546
+msgid " --debug-focus Display debugging output for focus handling\n"
+msgstr " --debug-focus Rādīt atkļūdošanas izvadi fokusēšanas darbībām\n"
+
+#: openbox/openbox.c:547
+msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+msgstr ""
+" --debug-xinerama Sadalīt displeju vairākos viltus xinerama ekrānos\n"
+
+#: openbox/openbox.c:548
+#, c-format
+msgid ""
+"\n"
+"Please report bugs at %s\n"
+msgstr ""
+"\n"
+"Lūdzu, ziņojiet kļūdas %s\n"
+
+#: openbox/openbox.c:617
+msgid "--config-file requires an argument\n"
+msgstr "--config-file vajadzīgs arguments\n"
+
+#: openbox/openbox.c:660
+#, c-format
+msgid "Invalid command line argument \"%s\"\n"
+msgstr "Neatļauts komandrindas arguments \"%s\"\n"
+
+#: openbox/screen.c:102 openbox/screen.c:190
+#, c-format
+msgid "A window manager is already running on screen %d"
+msgstr "Logu pārvaldnieks jau eksistē uz %d. ekrāna"
+
+#: openbox/screen.c:124
+#, c-format
+msgid "Could not acquire window manager selection on screen %d"
+msgstr "Nevarēja iegūt logu pārvaldnieka izvēli uz %d. ekrāna"
+
+#: openbox/screen.c:145
+#, c-format
+msgid "The WM on screen %d is not exiting"
+msgstr "Logu pārvaldnieks uz %d. ekrāna nebeidz darbību"
+
+#. TRANSLATORS: If you need to specify a different order of the
+#. arguments, you can use %1$d for the first one and %2$d for the
+#. second one. For example,
+#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+#: openbox/screen.c:412
+#, 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] ""
+"Openbox ir konfigurēts %d darbvirsmai, bet pašreizējai sesijai tādu ir %d. "
+"Šī Openbox konfigurācijas opcija tiks ignorēta."
+msgstr[1] ""
+"Openbox ir konfigurēts %d darbvirsmām, bet pašreizējai sesijai tādu ir %d. "
+"Šī Openbox konfigurācijas opcija tiks ignorēta."
+msgstr[2] ""
+"Openbox ir konfigurēts %d darbvirsmām, bet pašreizējai sesijai tādu ir %d. "
+"Šī Openbox konfigurācijas opcija tiks ignorēta."
+
+#: openbox/screen.c:1180
+#, c-format
+msgid "desktop %i"
+msgstr "darbvirsma %i"
+
+#: openbox/session.c:104
+#, c-format
+msgid "Unable to make directory \"%s\": %s"
+msgstr "Nav iespējams izveidot mapi \"%s\": %s"
+
+#: openbox/session.c:466
+#, c-format
+msgid "Unable to save the session to \"%s\": %s"
+msgstr "Nav iespējams saglabāt sesiju \"%s\": %s"
+
+#: openbox/session.c:605
+#, c-format
+msgid "Error while saving the session to \"%s\": %s"
+msgstr "Kļūda saglabājot sesiju \"%s\": %s"
+
+#: openbox/session.c:842
+msgid "Not connected to a session manager"
+msgstr "Nav savienots ar sesiju pārvaldnieku"
+
+#: openbox/startupnotify.c:243
+#, c-format
+msgid "Running %s"
+msgstr "Palaiž %s"
+
+#: openbox/translate.c:59
+#, c-format
+msgid "Invalid modifier key \"%s\" in key/mouse binding"
+msgstr "Neatļauts modificētājtaustiņš \"%s\" tastatūras/peles saīsnē"
+
+#: openbox/translate.c:138
+#, c-format
+msgid "Invalid key code \"%s\" in key binding"
+msgstr "Neatļauts taustiņa kods \"%s\" tastatūras saīsnē"
+
+#: openbox/translate.c:145
+#, c-format
+msgid "Invalid key name \"%s\" in key binding"
+msgstr "Neatļauts taustiņa nosaukums \"%s\" tastatūras saīsnē"
+
+#: openbox/translate.c:151
+#, c-format
+msgid "Requested key \"%s\" does not exist on the display"
+msgstr "Pieprasītais taustiņš \"%s\" uz displeja neeksistē"
+
+#: openbox/xerror.c:40
+#, c-format
+msgid "X Error: %s"
+msgstr "X kļūda: %s"
+
+#: openbox/prompt.c:200
+msgid "OK"
+msgstr "Labi"
diff --git a/po/nl.po b/po/nl.po
index e2e5efaf..b635c23d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -459,8 +459,8 @@ msgstr "Niet met een sessiebeheerder verbonden"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Starten van %s\n"
+msgid "Running %s"
+msgstr "Starten van %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/no.po b/po/no.po
index 5fe220d7..a702caa4 100644
--- a/po/no.po
+++ b/po/no.po
@@ -453,8 +453,8 @@ msgstr "Ikke tilknyttet en sesjonsbehandler"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Kjører %s\n"
+msgid "Running %s"
+msgstr "Kjører %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/openbox.pot b/po/openbox.pot
index 02a9ad5c..04503945 100644
--- a/po/openbox.pot
+++ b/po/openbox.pot
@@ -432,7 +432,7 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
+msgid "Running %s"
msgstr ""
#: openbox/translate.c:59
diff --git a/po/pl.po b/po/pl.po
index 5e92036b..b0f5d52c 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -445,8 +445,8 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Uruchamianie %s\n"
+msgid "Running %s"
+msgstr "Uruchamianie %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/pt.po b/po/pt.po
index 0a98580f..f9627560 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -460,8 +460,8 @@ msgstr "Desligado do gestor de sesso"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Executando %s\n"
+msgid "Running %s"
+msgstr "Executando %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 39852f6c..fe44888e 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -463,8 +463,8 @@ msgstr "Não está conectado à um gerente de sessões"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Executando %s\n"
+msgid "Running %s"
+msgstr "Executando %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/ru.po b/po/ru.po
index 74369801..dfbb425f 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -453,8 +453,8 @@ msgstr "Не подключен к менеджеру сессии"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Запуск %s\n"
+msgid "Running %s"
+msgstr "Запуск %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/sk.po b/po/sk.po
index 8ad1e60d..6f16c94c 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -442,8 +442,8 @@ msgstr ""
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Spúšťam %s\n"
+msgid "Running %s"
+msgstr "Spúšťam %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/sr.po b/po/sr.po
index a590d4d2..5702c789 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -463,8 +463,8 @@ msgstr "Није повезан са управником сесија"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Извршавам %s\n"
+msgid "Running %s"
+msgstr "Извршавам %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/sr@latin.po b/po/sr@latin.po
index 0a6fff2c..bf5fcdcd 100644
--- a/po/sr@latin.po
+++ b/po/sr@latin.po
@@ -463,8 +463,8 @@ msgstr "Nije povezan sa upravnikom sesija"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Izvršavam %s\n"
+msgid "Running %s"
+msgstr "Izvršavam %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/sv.po b/po/sv.po
index 5040d2f2..96be7349 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -454,8 +454,8 @@ msgstr "Inte ansluten till en sessionshanterare"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Kr %s\n"
+msgid "Running %s"
+msgstr "Kr %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/tr.po b/po/tr.po
index a0d9aea2..122e3bd0 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -458,8 +458,8 @@ msgstr "Oturum yöneticisine bağlı değil"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "%s çalışıyor\n"
+msgid "Running %s"
+msgstr "%s çalışıyor"
#: openbox/translate.c:59
#, c-format
diff --git a/po/ua.po b/po/uk.po
index b051694d..602f9fe4 100644
--- a/po/ua.po
+++ b/po/uk.po
@@ -1,5 +1,6 @@
# Ukrainian translation for Openbox.
# Copyright (C) 2007 Dmitriy Moroz
+# Copyright (C) 2008 Serhiy Lysovenko
# This file is distributed under the same license as the openbox package.
# Dmitriy Moroz <zux@dimaka.org.ua>, 2007.
#
@@ -7,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Openbox 3.4.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-11-15 22:28+0100\n"
-"PO-Revision-Date: 2007-06-16 13:02+0200\n"
-"Last-Translator: Dmitriy Moroz <zux@dimaka.org.ua>\n"
-"Language-Team: Ukrainian <root@archlinux.org.ua>\n"
+"POT-Creation-Date: 2009-07-05 13:50+0200\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,41 +19,41 @@ msgstr ""
#: openbox/actions.c:149
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr "Здійснено запит на некоректну дію \"%s\". Нема такої дії."
+msgstr "Здійснено запит на неіснуючу дію \"%s\"."
#: openbox/actions/execute.c:128
msgid "No"
-msgstr ""
+msgstr "Ні"
#: openbox/actions/execute.c:129
msgid "Yes"
-msgstr ""
+msgstr "Так"
#: openbox/actions/execute.c:133
msgid "Execute"
-msgstr ""
+msgstr "Виконати"
#: openbox/actions/execute.c:142
#, c-format
msgid "Failed to convert the path \"%s\" from utf8"
-msgstr "Не вдалося сконвертувати шлях \"%s\" з utf8"
+msgstr "Не вдалося конвертувати шлях \"%s\" з utf8"
#: openbox/actions/exit.c:52 openbox/actions/session.c:64
-#: openbox/client.c:3465
+#: openbox/client.c:3466
msgid "Cancel"
-msgstr ""
+msgstr "Скасувати"
#: openbox/actions/exit.c:53
msgid "Exit"
-msgstr ""
+msgstr "Вихід"
#: openbox/actions/exit.c:56
msgid "Are you sure you want to exit Openbox?"
-msgstr ""
+msgstr "Ви дійсно хочете вийти з Openbox?"
#: openbox/actions/exit.c:57
msgid "Exit Openbox"
-msgstr ""
+msgstr "Вийти з Openbox"
#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
#. name of the action you write in rc.xml
@@ -64,61 +65,63 @@ msgstr ""
#: openbox/actions/session.c:65 openbox/actions/session.c:70
msgid "Log Out"
-msgstr ""
+msgstr "Вийти"
#: openbox/actions/session.c:69
msgid "Are you sure you want to log out?"
-msgstr ""
+msgstr "Ви дійсно бажаєте завершити сеанс?"
-#: openbox/client.c:2012
+#: openbox/client.c:2013
msgid "Unnamed Window"
-msgstr ""
+msgstr "Неназване вікно"
-#: openbox/client.c:2026 openbox/client.c:2058
+#: openbox/client.c:2027 openbox/client.c:2059
msgid "Killing..."
-msgstr ""
+msgstr "Знищення..."
-#: openbox/client.c:2028 openbox/client.c:2060
+#: openbox/client.c:2029 openbox/client.c:2061
msgid "Not Responding"
-msgstr ""
+msgstr "Не відповідає"
-#: openbox/client.c:3454
+#: openbox/client.c:3455
#, 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:3456
+#: openbox/client.c:3457
msgid "End Process"
-msgstr ""
+msgstr "Примусове завершення"
-#: openbox/client.c:3460
+#: openbox/client.c:3461
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
"it from the X server?"
-msgstr ""
+msgstr "Вікно \"%s\" не відповідає. Чи бажаєте його від'єднати від X сервера?"
-#: openbox/client.c:3462
+#: openbox/client.c:3463
msgid "Disconnect"
-msgstr ""
+msgstr "Від'єднати"
#: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
msgid "Go there..."
-msgstr "Перейти...."
+msgstr "Перейти..."
#: openbox/client_list_combined_menu.c:94
msgid "Manage desktops"
-msgstr ""
+msgstr "Керування стільницями"
#: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
msgid "_Add new desktop"
-msgstr ""
+msgstr "Додати нову стільницю (_A)"
#: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
msgid "_Remove last desktop"
-msgstr ""
+msgstr "Видалити останню стільницю (_R)"
#: openbox/client_list_combined_menu.c:149
msgid "Windows"
@@ -130,68 +133,68 @@ msgstr "Стільниці"
#: openbox/client_menu.c:258
msgid "All desktops"
-msgstr "Всі стільниці"
+msgstr "На всіх стільницях"
#: openbox/client_menu.c:370
msgid "_Layer"
-msgstr "Шар(_L)"
+msgstr "Шар (_L)"
#: openbox/client_menu.c:375
msgid "Always on _top"
-msgstr "Зверху всіх вікон(_T)"
+msgstr "Над усіма вікнами (_T)"
#: openbox/client_menu.c:376
msgid "_Normal"
-msgstr "Звичайне положення(_N)"
+msgstr "Звичайне положення (_N)"
#: openbox/client_menu.c:377
msgid "Always on _bottom"
-msgstr "Знизу всіх вікон(_B)"
+msgstr "Під вікнами (_B)"
#: openbox/client_menu.c:379
msgid "_Send to desktop"
-msgstr "Відправити на стільницю(_S)"
+msgstr "Відправити на стільницю (_S)"
#: openbox/client_menu.c:383
msgid "Client menu"
-msgstr "Меню клієнтів"
+msgstr "Меню клієнта"
#: openbox/client_menu.c:393
msgid "R_estore"
-msgstr "Відновити(_E)"
+msgstr "Відновити (_E)"
#: openbox/client_menu.c:397
msgid "_Move"
-msgstr "Перемістити(_M)"
+msgstr "Перемістити (_M)"
#: openbox/client_menu.c:399
msgid "Resi_ze"
-msgstr "Змінити розмір(_Z)"
+msgstr "Змінити розмір (_Z)"
#: openbox/client_menu.c:401
msgid "Ico_nify"
-msgstr "Згорнути(_N)"
+msgstr "Згорнути (_N)"
#: openbox/client_menu.c:405
msgid "Ma_ximize"
-msgstr "Розгорнути(_X)"
+msgstr "Розгорнути (_X)"
#: openbox/client_menu.c:409
msgid "_Roll up/down"
-msgstr "Скрутити/Розкрутити(_R)"
+msgstr "Скрутити/Розкрутити (_R)"
#: openbox/client_menu.c:411
msgid "Un/_Decorate"
-msgstr "(Від)декорувати(_D)"
+msgstr "Перемкнути декорацію (_D)"
#: openbox/client_menu.c:415
msgid "_Close"
-msgstr "Закрити(_C)"
+msgstr "Закрити (_C)"
-#: openbox/config.c:781
+#: openbox/config.c:782
#, c-format
msgid "Invalid button \"%s\" specified in config file"
-msgstr "Некоректна клавіша \"%s\" вказана у файлі конфігурації"
+msgstr "Некоректна кнопка \"%s\" вказана у файлі конфігурації"
#: openbox/keyboard.c:157
msgid "Conflict with key binding in config file"
@@ -215,7 +218,7 @@ msgstr "Некоректний вивід з pipe-меню \"%s\""
#: openbox/menu.c:197
#, c-format
msgid "Attempted to access menu \"%s\" but it does not exist"
-msgstr "Спроба доступа до меню \"%s\" якого не існує"
+msgstr "Спроба доступу до неіснуючого меню \"%s\""
#: openbox/menu.c:367 openbox/menu.c:368
msgid "More..."
@@ -229,12 +232,12 @@ msgstr "Некоректна клавіша \"%s\" в прив'язці клав
#: openbox/mouse.c:379
#, c-format
msgid "Invalid context \"%s\" in mouse binding"
-msgstr "Некоректний контекст \"%s\" в прив'зці клавіш мишки"
+msgstr "Некоректний контекст \"%s\" в прив'язці клавіш мишки"
#: openbox/openbox.c:133
#, c-format
msgid "Unable to change to home directory \"%s\": %s"
-msgstr "Не вдалося перейти в домашню директорію \"%s\": %s"
+msgstr "Не вдалося перейти до домашнього каталогу \"%s\": %s"
#: openbox/openbox.c:152
msgid "Failed to open the display from the DISPLAY environment variable."
@@ -260,7 +263,7 @@ msgstr ""
#: openbox/openbox.c:297
msgid "Unable to load a theme."
-msgstr "Не вдалося загрузити стиль"
+msgstr "Не вдалося завантажити тему"
#: openbox/openbox.c:377
#, c-format
@@ -269,10 +272,13 @@ msgid ""
"configuration files. See stdout for more information. The last error seen "
"was in file \"%s\" line %d, with message: %s"
msgstr ""
+"Виявлено одну або більше синтаксичних помилок XML під час сканування "
+"конфігураційних файлів Openbox. Щоб дізнатись більше - перегляньте stdout. "
+"Остання помічена помилка була в файлі \"%s\", стрічка %d, повідомлення: %s"
#: openbox/openbox.c:379
msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "синтаксична помилка Openbox"
#: openbox/openbox.c:379
msgid "Close"
@@ -302,7 +308,7 @@ msgstr ""
#: openbox/openbox.c:531
msgid " --help Display this help and exit\n"
-msgstr " --help Показати цю справку і вийти\n"
+msgstr " --help Показати цю довідку і вийти\n"
#: openbox/openbox.c:532
msgid " --version Display the version and exit\n"
@@ -310,18 +316,18 @@ msgstr " --vesrion Показати версію і вийти\n"
#: openbox/openbox.c:533
msgid " --replace Replace the currently running window manager\n"
-msgstr " --replace Замінити поточний менеджер вікон\n"
+msgstr " --replace Замінити запущений менеджер вікон\n"
#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
#. fine to leave it as FILE though.
#: openbox/openbox.c:537
msgid " --config-file FILE Specify the path to the config file to use\n"
-msgstr ""
+msgstr " --config-file ФАЙЛ Вказати шлях до конфігураційного файлу\n"
#: openbox/openbox.c:538
msgid " --sm-disable Disable connection to the session manager\n"
-msgstr " --sm-disable Не з'єднуватися з сесійним менеджером\n"
+msgstr " --sm-disable Вимкнути з'єднання з менеджером сеансу\n"
#: openbox/openbox.c:539
msgid ""
@@ -329,7 +335,7 @@ msgid ""
"Passing messages to a running Openbox instance:\n"
msgstr ""
"\n"
-"Передаю повідомлення процесу Openbox що виконується\n"
+"Передача повідомлень процесу Openbox, що виконується\n"
#: openbox/openbox.c:540
msgid " --reconfigure Reload Openbox's configuration\n"
@@ -341,7 +347,7 @@ msgstr " --restart Перезапустити Openbox\n"
#: openbox/openbox.c:542
msgid " --exit Exit Openbox\n"
-msgstr ""
+msgstr " --exit Вийти з Openbox\n"
#: openbox/openbox.c:543
msgid ""
@@ -362,7 +368,8 @@ msgstr " --debug Показувати інформацію нала
#: openbox/openbox.c:546
msgid " --debug-focus Display debugging output for focus handling\n"
msgstr ""
-" --debug-focus Показувати інформацію налагоджування для уравління\n"
+" --debug-focus Показувати відлагоджувальний вивід для керування "
+"фокусом\n"
#: openbox/openbox.c:547
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
@@ -379,12 +386,12 @@ msgstr ""
#: openbox/openbox.c:617
msgid "--config-file requires an argument\n"
-msgstr ""
+msgstr "--config-file потребує аргументу\n"
#: openbox/openbox.c:660
#, c-format
msgid "Invalid command line argument \"%s\"\n"
-msgstr "Некоректний командний аргумент \"%s\"\n"
+msgstr "Некоректний аргумент \"%s\"\n"
#: openbox/screen.c:102 openbox/screen.c:190
#, c-format
@@ -394,19 +401,19 @@ msgstr "На дисплеї %d вже запущений менеджер вік
#: openbox/screen.c:124
#, c-format
msgid "Could not acquire window manager selection on screen %d"
-msgstr "Не можу отримати вибір менеджера вікон на дисплеї %d"
+msgstr "Не можу запустити менеджера вікон на дисплеї %d"
#: openbox/screen.c:145
#, c-format
msgid "The WM on screen %d is not exiting"
-msgstr "Менеджео вікон на дисплеї %d не завершується"
+msgstr "Менеджер вікон на дисплеї %d не завершається"
#. TRANSLATORS: If you need to specify a different order of the
#. arguments, you can use %1$d for the first one and %2$d for the
#. second one. For example,
#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
-#: openbox/screen.c:412
-#, c-format
+#: openbox/screen.c:419
+#, fuzzy, c-format
msgid ""
"Openbox is configured for %d desktop, but the current session has %d. "
"Overriding the Openbox configuration."
@@ -414,9 +421,13 @@ msgid_plural ""
"Openbox is configured for %d desktops, but the current session has %d. "
"Overriding the Openbox configuration."
msgstr[0] ""
+"Openbox сконфігуровано на %d дисплеїв, але в поточній сесії використовується "
+"%d. Перевищення конфігурації Openbox."
msgstr[1] ""
+"Openbox сконфігуровано на %d дисплеїв, але в поточній сесії використовується "
+"%d. Перевищення конфігурації Openbox."
-#: openbox/screen.c:1180
+#: openbox/screen.c:1205
#, c-format
msgid "desktop %i"
msgstr "стільниця %i"
@@ -424,7 +435,7 @@ msgstr "стільниця %i"
#: openbox/session.c:104
#, c-format
msgid "Unable to make directory \"%s\": %s"
-msgstr "Не вдалося створити директорію \"%s\": %s"
+msgstr "Не вдалося створити каталог \"%s\": %s"
#: openbox/session.c:466
#, c-format
@@ -438,12 +449,12 @@ msgstr "Помилка при збереженні сесії в \"%s\": %s"
#: openbox/session.c:842
msgid "Not connected to a session manager"
-msgstr ""
+msgstr "Не під'єднано до керівника сесіями"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Виконується %s\n"
+msgid "Running %s"
+msgstr "Виконується %s"
#: openbox/translate.c:59
#, c-format
@@ -454,17 +465,17 @@ msgstr ""
#: openbox/translate.c:138
#, c-format
msgid "Invalid key code \"%s\" in key binding"
-msgstr "Некоректний код клавіши \"%s\" у прив'зці клавіш"
+msgstr "Некоректний код клавіші \"%s\" у прив'язці клавіш"
#: openbox/translate.c:145
#, c-format
msgid "Invalid key name \"%s\" in key binding"
-msgstr "Некоректна назва клавіши \"%s\" у прив'язці клавіш"
+msgstr "Некоректна назва клавіші \"%s\" у прив'язці клавіш"
#: openbox/translate.c:151
#, c-format
msgid "Requested key \"%s\" does not exist on the display"
-msgstr "Клавіша \"%s\" на яку здійснено запит - не існує на дисплеї"
+msgstr "Потрібної кнопки \"%s\" нема на екрані"
#: openbox/xerror.c:40
#, c-format
@@ -473,7 +484,7 @@ msgstr "Помилка X-серверу: %s"
#: openbox/prompt.c:200
msgid "OK"
-msgstr ""
+msgstr "Гаразд"
#~ msgid "Failed to execute \"%s\": %s"
#~ msgstr "Невдалося виконати \"%s\": %s"
diff --git a/po/vi.po b/po/vi.po
index 83414869..49dd347b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -452,8 +452,8 @@ msgstr "Không hàng với session quản lý"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "Đan Chạy %s\n"
+msgid "Running %s"
+msgstr "Đan Chạy %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 89a65854..61058af0 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -444,8 +444,8 @@ msgstr "未连接到会话管理器"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "运行 %s\n"
+msgid "Running %s"
+msgstr "运行 %s"
#: openbox/translate.c:59
#, c-format
diff --git a/po/zh_TW.po b/po/zh_TW.po
index ccaa229a..72e6285e 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -444,8 +444,8 @@ msgstr "沒有連接到作業階段管理員"
#: openbox/startupnotify.c:243
#, c-format
-msgid "Running %s\n"
-msgstr "正在運行 %s\n"
+msgid "Running %s"
+msgstr "正在運行 %s"
#: openbox/translate.c:59
#, c-format
diff --git a/render/gradient.c b/render/gradient.c
index 8b6850f0..60a0a555 100644
--- a/render/gradient.c
+++ b/render/gradient.c
@@ -507,11 +507,11 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h)
*/
if (h <= 5) {
y1sz = MAX(h/2, 0);
- y2sz = (h < 3 ? 0 : h % 2);
+ y2sz = (h < 3) ? 0 : (h & 1);
y3sz = MAX(h/2, 1);
}
else {
- y1sz = h/2 - (1 - (h % 2));
+ y1sz = h/2 - (1 - (h & 1));
y2sz = 1;
y3sz = h/2;
}
@@ -534,13 +534,15 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h)
}
*data = COLOR(y1);
data += w;
- for (y2 = y2sz-1; y2 > 0; --y2) {
+ if (y2sz) {
+ for (y2 = y2sz-1; y2 > 0; --y2) {
+ *data = COLOR(y2);
+ data += w;
+ NEXT(y2);
+ }
*data = COLOR(y2);
data += w;
- NEXT(y2);
}
- *data = COLOR(y2);
- data += w;
for (y3 = y3sz-1; y3 > 0; --y3) {
*data = COLOR(y3);
data += w;
diff --git a/render/theme.c b/render/theme.c
index 47c8a9c9..8ead9673 100644
--- a/render/theme.c
+++ b/render/theme.c
@@ -46,6 +46,22 @@ 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 RrFont *get_font(RrFont *target, RrFont **default_font, const RrInstance *inst)
+{
+ if (target) {
+ RrFontRef(target);
+ return target;
+ } else {
+ /* Only load the default font once */
+ if (*default_font) {
+ RrFontRef(*default_font);
+ } else {
+ *default_font = RrFontOpenDefault(inst);
+ }
+ return *default_font;
+ }
+}
+
RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
gboolean allow_fallback,
RrFont *active_window_font, RrFont *inactive_window_font,
@@ -56,6 +72,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
RrJustify winjust, mtitlejust;
gchar *str;
RrTheme *theme;
+ RrFont *default_font = NULL;
gchar *path;
gboolean userdef;
@@ -130,17 +147,8 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
theme->osd_unhilite_fg = RrAppearanceNew(inst, 0);
/* load the font stuff */
- if (active_window_font) {
- theme->win_font_focused = active_window_font;
- RrFontRef(active_window_font);
- } else
- theme->win_font_focused = RrFontOpenDefault(inst);
-
- if (inactive_window_font) {
- theme->win_font_unfocused = inactive_window_font;
- RrFontRef(inactive_window_font);
- } else
- theme->win_font_unfocused = RrFontOpenDefault(inst);
+ theme->win_font_focused = get_font(active_window_font, &default_font, inst);
+ theme->win_font_unfocused = get_font(inactive_window_font, &default_font, inst);
winjust = RR_JUSTIFY_LEFT;
if (read_string(db, "window.label.text.justify", &str)) {
@@ -150,11 +158,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
winjust = RR_JUSTIFY_CENTER;
}
- if (menu_title_font) {
- theme->menu_title_font = menu_title_font;
- RrFontRef(menu_title_font);
- } else
- theme->menu_title_font = RrFontOpenDefault(inst);
+ theme->menu_title_font = get_font(menu_title_font, &default_font, inst);
mtitlejust = RR_JUSTIFY_LEFT;
if (read_string(db, "menu.title.text.justify", &str)) {
@@ -164,17 +168,9 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
mtitlejust = RR_JUSTIFY_CENTER;
}
- if (menu_item_font) {
- theme->menu_font = menu_item_font;
- RrFontRef(menu_item_font);
- } else
- theme->menu_font = RrFontOpenDefault(inst);
-
- if (osd_font) {
- theme->osd_font = osd_font;
- RrFontRef(osd_font);
- } else
- theme->osd_font = RrFontOpenDefault(inst);
+ theme->menu_font = get_font(menu_item_font, &default_font, inst);
+
+ theme->osd_font = get_font(osd_font, &default_font, inst);
/* load direct dimensions */
if ((!read_int(db, "menu.overlap.x", &theme->menu_overlap_x) &&