Merge branch 'backport' into work
authorDana Jansens <danakj@orodu.net>
Thu, 31 Jan 2008 17:36:06 +0000 (12:36 -0500)
committerDana Jansens <danakj@orodu.net>
Thu, 31 Jan 2008 17:51:38 +0000 (12:51 -0500)
Conflicts:

openbox/client.c
openbox/config.c
openbox/event.c
openbox/extensions.c
openbox/focus_cycle_indicator.c
openbox/focus_cycle_popup.c
openbox/menuframe.c
openbox/moveresize.c
openbox/openbox.c
openbox/screen.c
openbox/stacking.c
openbox/startupnotify.c

63 files changed:
.gitignore
Makefile.am
data/gnome-wm-properties/openbox.desktop
data/rc.xml
data/rc.xsd
openbox/actions.c
openbox/actions/execute.c
openbox/client.c
openbox/client_list_combined_menu.c
openbox/client_list_menu.c
openbox/client_menu.c
openbox/config.c
openbox/config.h
openbox/dock.c
openbox/event.c
openbox/focus_cycle_indicator.c
openbox/focus_cycle_popup.c
openbox/frame.c
openbox/frame.h
openbox/framerender.c
openbox/menuframe.c
openbox/menuframe.h
openbox/moveresize.c
openbox/openbox.c
openbox/place.c
openbox/place.h
openbox/popup.c
openbox/screen.c
openbox/stacking.c
openbox/startupnotify.c
openbox/startupnotify.h
po/ar.po
po/bn_IN.po
po/ca.po
po/cs.po
po/de.po
po/en@boldquot.po
po/en@quot.po
po/es.po
po/et.po
po/eu.po
po/fi.po
po/fr.po
po/hu.po
po/it.po
po/ja.po
po/nl.po
po/no.po
po/openbox.pot
po/pl.po
po/pt.po
po/pt_BR.po
po/ru.po
po/sk.po
po/sv.po
po/ua.po
po/vi.po
po/zh_CN.po
po/zh_TW.po
render/gradient.c
render/theme.c
themes/Clearlooks-3.4/openbox-3/themerc [new file with mode: 0644]
themes/Clearlooks/openbox-3/themerc

index df5b623..e937405 100644 (file)
@@ -44,6 +44,9 @@ po/insert-header.sin
 po/quot.sed
 po/remove-potcdate.sin
 po/stamp-po
+po/en@boldquot.insert-header
+po/en@quot.insert-header
+po/remove-potcdate.sed
 *.gmo
 render/obrender-4.0.pc
 obt/obt-4.0.pc
@@ -51,3 +54,39 @@ tools/gnome-panel-control/gnome-panel-control
 version.h
 .libs
 .deps
+tests/aspect
+tests/big
+tests/borderchange
+tests/confignotify
+tests/confignotifymax
+tests/duplicatesession
+tests/extentsrequest
+tests/fakeunmap
+tests/fallback
+tests/focusout
+tests/fullscreen
+tests/grav
+tests/groupmodal
+tests/grouptran
+tests/grouptran2
+tests/grouptrancircular
+tests/grouptrancircular2
+tests/icons
+tests/mapiconic
+tests/modal
+tests/modal2
+tests/modal3
+tests/noresize
+tests/override
+tests/positioned
+tests/resize
+tests/restack
+tests/shape
+tests/showhide
+tests/skiptaskbar
+tests/skiptaskbar2
+tests/stacking
+tests/strut
+tests/title
+tests/urgent
+tests/usertimewin
index 3025686..9b3140c 100644 (file)
@@ -301,6 +301,10 @@ clearlooks_themedir = $(themedir)/Clearlooks/openbox-3
 dist_clearlooks_theme_DATA= \
        themes/Clearlooks/openbox-3/themerc
 
+clearlooks34_themedir = $(themedir)/Clearlooks/openbox-3
+dist_clearlooks34_theme_DATA= \
+       themes/Clearlooks-3.4/openbox-3/themerc
+
 clearlooksolive_themedir = $(themedir)/Clearlooks-Olive/openbox-3
 dist_clearlooksolive_theme_DATA= \
        themes/Clearlooks-Olive/openbox-3/themerc
index eee0dd6..23e690e 100644 (file)
@@ -7,3 +7,6 @@ X-GNOME-WMName=Openbox
 
 # our config tool
 ConfigExec=obconf
+
+[Window Manager]
+SessionManaged=true
index 567ca28..86e0d9d 100644 (file)
   <center>yes</center>
   <!-- whether to place windows in the center of the free area found or
        the top left corner -->
-  <active>no</active>
-  <!-- force new windows ont the active monitor on a multi-head system, unless
-       they are part of an application already on another monitor -->
+  <monitor>Any</monitor>
+  <!-- with Smart placement on a multi-monitor system, try to place new windows
+       on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
+       the active window is -->
 </placement>
 
 <theme>
   <name>Clearlooks</name>
   <titleLayout>NLIMC</titleLayout>
   <!--
-      avaible characters are NDSLIMC, each can occur at most once.
+      available characters are NDSLIMC, each can occur at most once.
       N: window icon
       L: window label (AKA title).
       I: iconify
index 0544cfd..bc8a8fe 100644 (file)
@@ -54,7 +54,7 @@
         </xsd:annotation>
         <xsd:element name="policy" type="ob:placementpolicy"/>
         <xsd:element name="center" type="ob:bool"/>
-        <xsd:element name="active" type="ob:bool"/>
+        <xsd:element name="monitor" type="ob:placementmonitor"/>
     </xsd:complexType>
     <xsd:complexType name="margins">
         <xsd:annotation>
             <xsd:enumeration value="UnderMouse"/>
         </xsd:restriction>
     </xsd:simpleType>
+    <xsd:simpleType name="placementmonitor">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="Any"/>
+            <xsd:enumeration value="Mouse"/>
+            <xsd:enumeration value="Active"/>
+        </xsd:restriction>
+    </xsd:simpleType>
     <xsd:simpleType name="popupposition">
         <xsd:restriction base="xsd:string">
             <xsd:enumeration value="Top"/>
index 0db82e0..10bf929 100644 (file)
@@ -337,9 +337,7 @@ void actions_client_move(ObActionsData *data, gboolean start)
     else if (config_focus_follow &&
              data->context != OB_FRAME_CONTEXT_CLIENT)
     {
-        if (!data->button && data->client && !config_focus_under_mouse)
-            event_end_ignore_all_enters(ignore_start);
-        else {
+        if (data->uact == OB_USER_ACTION_MOUSE_PRESS) {
             struct _ObClient *c;
 
             /* usually this is sorta redundant, but with a press action
@@ -354,5 +352,7 @@ void actions_client_move(ObActionsData *data, gboolean start)
                 event_enter_client(c);
             }
         }
+        else if (!data->button && !config_focus_under_mouse)
+            event_end_ignore_all_enters(ignore_start);
     }
 }
index 5a74727..c534ba8 100644 (file)
@@ -5,6 +5,10 @@
 #include "obt/paths.h"
 #include "gettext.h"
 
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#endif
+
 typedef struct {
     gchar   *cmd;
     gboolean sn;
@@ -101,6 +105,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
             program = g_path_get_basename(argv[0]);
             /* sets up the environment */
             sn_setup_spawn_environment(program, o->sn_name, o->sn_icon,
+                                       o->sn_wmclass,
                                        /* launch it on the current desktop */
                                        screen_desktop);
         }
index ffbe73b..4b0aea2 100644 (file)
@@ -200,6 +200,9 @@ void client_manage_all(void)
         }
     }
 
+    /* manage windows in reverse order from how they were originally mapped.
+       this is an attempt to manage children windows before their parents, so
+       that when the parent is mapped, it can find the child */
     for (i = 0; i < nchild; ++i) {
         if (children[i] == None)
             continue;
@@ -288,6 +291,11 @@ void client_manage(Window window)
     ob_debug("Window type: %d\n", self->type);
     ob_debug("Window group: 0x%x\n", self->group?self->group->leader:0);
 
+    /* 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
+       mapping and doesn't go applying things right away */
+    client_setup_decor_and_functions(self, FALSE);
+
     /* specify that if we exit, the window should not be destroyed and
        should be reparented back to root automatically */
     XChangeSaveSet(obt_display, window, SetModeInsert);
@@ -308,11 +316,8 @@ void client_manage(Window window)
     /* the session should get the last say though */
     client_restore_session_state(self);
 
-    /* now we have all of the window's information so we can set this up */
-    client_setup_decor_and_functions(self, FALSE);
-
     /* tell startup notification that this app started */
-    launch_time = sn_app_started(self->startup_id, self->class);
+    launch_time = sn_app_started(self->startup_id, self->class, self->name);
 
     /* do this after we have a frame.. it uses the frame to help determine the
        WM_STATE to apply. */
@@ -797,6 +802,7 @@ void client_unmanage(ObClient *self)
         g_free(self->icons[j].data);
     if (self->nicons > 0)
         g_free(self->icons);
+    g_free(self->startup_id);
     g_free(self->wm_command);
     g_free(self->title);
     g_free(self->icon_title);
@@ -1832,11 +1838,11 @@ static void client_change_allowed_actions(ObClient *self)
 
     OBT_PROP_SETA32(self->window, NET_WM_ALLOWED_ACTIONS, ATOM, actions, num);
 
-   /* make sure the window isn't breaking any rules now
+    /* make sure the window isn't breaking any rules now
 
-   don't check ICONIFY here.  just cuz a window can't iconify doesnt mean
-   it can't be iconified with its parent
-   */
+       don't check ICONIFY here.  just cuz a window can't iconify doesnt mean
+       it can't be iconified with its parent
+    */
 
     if (!(self->functions & OB_CLIENT_FUNC_SHADE) && self->shaded) {
         if (self->frame) client_shade(self, FALSE);
@@ -2069,11 +2075,17 @@ void client_update_strut(ObClient *self)
     }
 }
 
+/* Avoid storing icons above this size if possible */
+#define AVOID_ABOVE 64
+
 void client_update_icons(ObClient *self)
 {
     guint num;
     guint32 *data;
     guint w, h, i, j;
+    guint num_seen;  /* number of icons present */
+    guint num_small_seen;  /* number of icons small enough present */
+    guint smallest, smallest_area;
 
     for (i = 0; i < self->nicons; ++i)
         g_free(self->icons[i].data);
@@ -2084,25 +2096,54 @@ void client_update_icons(ObClient *self)
     if (OBT_PROP_GETA32(self->window, NET_WM_ICON, CARDINAL, &data, &num)) {
         /* figure out how many valid icons are in here */
         i = 0;
-        while (num - i > 2) {
-            w = data[i++];
-            h = data[i++];
-            i += w * h;
-            if (i > num || w*h == 0) break;
-            ++self->nicons;
-        }
+        num_seen = num_small_seen = 0;
+        smallest = smallest_area = 0;
+        if (num > 2)
+            while (i < num) {
+                w = data[i++];
+                h = data[i++];
+                i += w * h;
+                /* watch for it being too small for the specified size, or for
+                   zero sized icons. */
+                if (i > num || w == 0 || h == 0) break;
+
+                if (!smallest_area || w*h < smallest_area) {
+                    smallest = num_seen;
+                    smallest_area = w*h;
+                }
+                ++num_seen;
+                if (w <= AVOID_ABOVE && h <= AVOID_ABOVE)
+                    ++num_small_seen;
+            }
+        if (num_small_seen > 0)
+            self->nicons = num_small_seen;
+        else if (num_seen)
+            self->nicons = 1;
 
         self->icons = g_new(ObClientIcon, self->nicons);
 
         /* store the icons */
         i = 0;
-        for (j = 0; j < self->nicons; ++j) {
+        for (j = 0; j < self->nicons;) {
             guint x, y, t;
 
             w = self->icons[j].width = data[i++];
             h = self->icons[j].height = data[i++];
 
-            if (w*h == 0) continue;
+            /* if there are some icons smaller than the threshold, we're
+               skipping all the ones above */
+            if (num_small_seen > 0) {
+                if (w > AVOID_ABOVE || h > AVOID_ABOVE) {
+                    i += w*h;
+                    continue;
+                }
+            }
+            /* if there were no icons smaller than the threshold, then we are
+               only taking the smallest available one we saw */
+            else if (j != smallest) {
+                i += w*h;
+                continue;
+            }
 
             self->icons[j].data = g_new(RrPixel32, w * h);
             for (x = 0, y = 0, t = 0; t < w * h; ++t, ++x, ++i) {
@@ -2117,6 +2158,8 @@ void client_update_icons(ObClient *self)
                     (((data[i] >> 0) & 0xff) << RrDefaultBlueOffset);
             }
             g_assert(i <= num);
+
+            ++j;
         }
 
         g_free(data);
@@ -2179,11 +2222,13 @@ void client_update_icon_geometry(ObClient *self)
     RECT_SET(self->icon_geometry, 0, 0, 0, 0);
 
     if (OBT_PROP_GETA32(self->window, NET_WM_ICON_GEOMETRY, CARDINAL,
-                        &data, &num) && num == 4)
+                        &data, &num))
     {
-        /* don't let them set it with an area < 0 */
-        RECT_SET(self->icon_geometry, data[0], data[1],
-                 MAX(data[2],0), MAX(data[3],0));
+        if (num == 4)
+            /* don't let them set it with an area < 0 */
+            RECT_SET(self->icon_geometry, data[0], data[1],
+                     MAX(data[2],0), MAX(data[3],0));
+        g_free(data);
     }
 }
 
index f7fc36b..c1572ea 100644 (file)
@@ -22,6 +22,7 @@
 #include "menuframe.h"
 #include "screen.h"
 #include "client.h"
+#include "client_list_combined_menu.h"
 #include "focus.h"
 #include "config.h"
 #include "gettext.h"
index 33f4b6f..0febe2e 100644 (file)
@@ -22,6 +22,7 @@
 #include "menuframe.h"
 #include "screen.h"
 #include "client.h"
+#include "client_list_menu.h"
 #include "focus.h"
 #include "config.h"
 #include "gettext.h"
index 9697035..04f50e8 100644 (file)
@@ -22,6 +22,7 @@
 #include "config.h"
 #include "screen.h"
 #include "client.h"
+#include "client_menu.h"
 #include "openbox.h"
 #include "frame.h"
 #include "moveresize.h"
index ce3649d..eaaab53 100644 (file)
@@ -35,9 +35,9 @@ gboolean config_focus_raise;
 gboolean config_focus_last;
 gboolean config_focus_under_mouse;
 
-ObPlacePolicy config_place_policy;
-gboolean      config_place_center;
-gboolean      config_place_active;
+ObPlacePolicy  config_place_policy;
+gboolean       config_place_center;
+ObPlaceMonitor config_place_monitor;
 
 StrutPartial config_margins;
 
@@ -54,7 +54,7 @@ RrFont *config_font_menuitem;
 RrFont *config_font_menutitle;
 RrFont *config_font_osd;
 
-gint    config_desktops_num;
+guint   config_desktops_num;
 GSList *config_desktops_names;
 guint   config_screen_firstdesk;
 guint   config_desktop_popup_time;
@@ -481,8 +481,12 @@ static void parse_placement(xmlNodePtr node, gpointer d)
             config_place_policy = OB_PLACE_POLICY_MOUSE;
     if ((n = obt_parse_find_node(node, "center")))
         config_place_center = obt_parse_node_bool(n);
-    if ((n = obt_parse_find_node(node, "active")))
-        config_place_active = obt_parse_node_bool(n);
+    if ((n = obt_parse_find_node(node, "monitor"))) {
+        if (obt_parse_node_contains(n, "active"))
+            config_place_monitor = OB_PLACE_MONITOR_ACTIVE;
+        else if (obt_parse_node_contains(n, "mouse"))
+            config_place_monitor = OB_PLACE_MONITOR_MOUSE;
+    }
 }
 
 static void parse_margins(xmlNodePtr node, gpointer d)
@@ -592,7 +596,7 @@ static void parse_desktops(xmlNodePtr node, gpointer d)
     if ((n = obt_parse_find_node(node, "number"))) {
         gint d = obt_parse_node_int(n);
         if (d > 0)
-            config_desktops_num = d;
+            config_desktops_num = (unsigned) d;
     }
     if ((n = obt_parse_find_node(node, "firstdesk"))) {
         gint d = obt_parse_node_int(n);
@@ -870,7 +874,7 @@ void config_startup(ObtParseInst *i)
 
     config_place_policy = OB_PLACE_POLICY_SMART;
     config_place_center = TRUE;
-    config_place_active = FALSE;
+    config_place_monitor = OB_PLACE_MONITOR_ANY;
 
     obt_parse_register(i, "placement", parse_placement, NULL);
 
@@ -966,6 +970,7 @@ void config_shutdown(void)
     RrFontClose(config_font_inactivewindow);
     RrFontClose(config_font_menuitem);
     RrFontClose(config_font_menutitle);
+    RrFontClose(config_font_osd);
 
     for (it = config_desktops_names; it; it = g_slist_next(it))
         g_free(it->data);
index ac188e3..1a60ee0 100644 (file)
@@ -77,7 +77,7 @@ extern ObPlacePolicy config_place_policy;
 extern gboolean config_place_center;
 /*! Place windows on the active monitor (unless they are part of an application
   already on another monitor) */
-extern gboolean config_place_active;
+extern ObPlaceMonitor config_place_monitor;
 
 /*! User-specified margins around the edge of the screen(s) */
 extern StrutPartial config_margins;
@@ -142,7 +142,7 @@ extern RrFont *config_font_menuitem;
 extern RrFont *config_font_osd;
 
 /*! The number of desktops */
-extern gint config_desktops_num;
+extern guint config_desktops_num;
 /*! Desktop to start on, put 5 to start in the center of a 3x3 grid */
 extern guint config_screen_firstdesk;
 /*! Names for the desktops */
index adf61e8..f36fca8 100644 (file)
@@ -243,8 +243,10 @@ void dock_configure(void)
         }
     }
 
-    dock->area.width += l + r;
-    dock->area.height += t + b;
+    if (dock->dock_apps) {
+        dock->area.width += l + r;
+        dock->area.height += t + b;
+    }
 
     hspot = l;
     vspot = t;
@@ -421,11 +423,12 @@ void dock_configure(void)
     if (!dock->dock_apps) {
         STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0);
-    } else if (config_dock_floating || config_dock_nostrut)
-    {
+    }
+    else if (config_dock_floating || config_dock_nostrut) {
         STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0);
-    } else {
+    }
+    else {
         switch (config_dock_pos) {
         case OB_DIRECTION_NORTHWEST:
             switch (config_dock_orient) {
@@ -523,9 +526,12 @@ void dock_configure(void)
     } else
         XUnmapWindow(obt_display, dock->frame);
 
-    /* but they are useful outside of this function! */
-    dock->area.width += ob_rr_theme->obwidth * 2;
-    dock->area.height += ob_rr_theme->obwidth * 2;
+    /* but they are useful outside of this function! but don't add it if the
+       dock is actually not visible */
+    if (dock->dock_apps) {
+        dock->area.width += ob_rr_theme->obwidth * 2;
+        dock->area.height += ob_rr_theme->obwidth * 2;
+    }
 
     screen_update_areas();
 
index 8443e08..9377214 100644 (file)
@@ -269,7 +269,8 @@ static void event_hack_mods(XEvent *e)
            magic.  Our X core protocol stuff won't work, so we use this to
            find what the modifier state is instead. */
         if (XkbGetState(obt_display, XkbUseCoreKbd, &xkb_state) == Success)
-            e->xkey.state = xkb_state.compat_state;
+            e->xkey.state =
+                obt_keyboard_only_modmasks(xkb_state.compat_state);
         else
 #endif
         {
@@ -1929,8 +1930,7 @@ void event_halt_focus_delay(void)
 
 gulong event_start_ignore_all_enters(void)
 {
-    XSync(obt_display, FALSE);
-    return LastKnownRequestProcessed(obt_display);
+    return NextRequest(obt_display);
 }
 
 static void event_ignore_enter_range(gulong start, gulong end)
@@ -1949,13 +1949,18 @@ static void event_ignore_enter_range(gulong start, gulong end)
                   r->start, r->end);
 
     /* increment the serial so we don't ignore events we weren't meant to */
-    XSync(obt_display, FALSE);
+    OBT_PROP_ERASE(screen_support_win, MOTIF_WM_HINTS);
 }
 
 void event_end_ignore_all_enters(gulong start)
 {
-    XSync(obt_display, FALSE);
-    event_ignore_enter_range(start, LastKnownRequestProcessed(obt_display));
+    /* Use (NextRequest-1) so that we ignore up to the current serial only.
+       Inside event_ignore_enter_range, we increment the serial by one, but if
+       we ignore that serial too, then any enter events generated by mouse
+       movement will be ignored until we create some further network traffic.
+       Instead ignore up to NextRequest-1, then when we increment the serial,
+       we will be *past* the range of ignored serials */
+    event_ignore_enter_range(start, NextRequest(obt_display)-1);
 }
 
 static gboolean is_enter_focus_event_ignored(XEvent *e)
index 79c76e2..da5efa5 100644 (file)
@@ -158,6 +158,7 @@ void focus_cycle_draw_indicator(ObClient *c)
         */
         gint x, y, w, h;
         gint wt, wl, wr, wb;
+        gulong ignore_start;
 
         wt = wl = wr = wb = FOCUS_INDICATOR_WIDTH;
 
@@ -166,6 +167,9 @@ void focus_cycle_draw_indicator(ObClient *c)
         w = c->frame->area.width;
         h = wt;
 
+        /* kill enter events cause by this moving */
+        ignore_start = event_start_ignore_all_enters();
+
         XMoveResizeWindow(obt_display, focus_indicator.top.window,
                           x, y, w, h);
         a_focus_indicator->texture[0].data.lineart.x1 = 0;
@@ -270,6 +274,8 @@ void focus_cycle_draw_indicator(ObClient *c)
         XMapWindow(obt_display, focus_indicator.right.window);
         XMapWindow(obt_display, focus_indicator.bottom.window);
 
+        event_end_ignore_all_enters(ignore_start);
+
         visible = TRUE;
     }
 }
index cb1af48..096f5c6 100644 (file)
@@ -480,6 +480,7 @@ void focus_cycle_popup_hide(void)
 
         g_free(t->text);
         XDestroyWindow(obt_display, t->win);
+        g_free(t);
 
         popup.targets = g_list_delete_link(popup.targets, popup.targets);
     }
index 5767351..0975214 100644 (file)
@@ -214,27 +214,10 @@ static void set_theme_statics(ObFrame *self)
                   ob_rr_theme->paddingx + 1, ob_rr_theme->title_height);
     XResizeWindow(obt_display, self->trrresize,
                   ob_rr_theme->paddingx + 1, ob_rr_theme->title_height);
-
-    /* set up the dynamic appearances */
-    self->a_unfocused_title = RrAppearanceCopy(ob_rr_theme->a_unfocused_title);
-    self->a_focused_title = RrAppearanceCopy(ob_rr_theme->a_focused_title);
-    self->a_unfocused_label = RrAppearanceCopy(ob_rr_theme->a_unfocused_label);
-    self->a_focused_label = RrAppearanceCopy(ob_rr_theme->a_focused_label);
-    self->a_unfocused_handle =
-        RrAppearanceCopy(ob_rr_theme->a_unfocused_handle);
-    self->a_focused_handle = RrAppearanceCopy(ob_rr_theme->a_focused_handle);
-    self->a_icon = RrAppearanceCopy(ob_rr_theme->a_icon);
 }
 
 static void free_theme_statics(ObFrame *self)
 {
-    RrAppearanceFree(self->a_unfocused_title);
-    RrAppearanceFree(self->a_focused_title);
-    RrAppearanceFree(self->a_unfocused_label);
-    RrAppearanceFree(self->a_focused_label);
-    RrAppearanceFree(self->a_unfocused_handle);
-    RrAppearanceFree(self->a_focused_handle);
-    RrAppearanceFree(self->a_icon);
 }
 
 void frame_free(ObFrame *self)
index 3e7b2c6..02be17a 100644 (file)
@@ -137,16 +137,6 @@ struct _ObFrame
 
     Colormap  colormap;
 
-    RrAppearance *a_unfocused_title;
-    RrAppearance *a_focused_title;
-    RrAppearance *a_unfocused_label;
-    RrAppearance *a_focused_label;
-    RrAppearance *a_icon;
-    RrAppearance *a_unfocused_handle;
-    RrAppearance *a_focused_handle;
-
-    GSList   *clients;
-
     gint      icon_on;    /* if the window icon button is on */
     gint      label_on;   /* if the window title is on */
     gint      iconify_on; /* if the window iconify button is on */
index 0b2363c..87706b2 100644 (file)
@@ -124,10 +124,8 @@ void framerender_frame(ObFrame *self)
     if (self->decorations & OB_FRAME_DECOR_TITLEBAR) {
         RrAppearance *t, *l, *m, *n, *i, *d, *s, *c, *clear;
         if (self->focused) {
-
-            t = self->a_focused_title;
-            l = self->a_focused_label;
-
+            t = ob_rr_theme->a_focused_title;
+            l = ob_rr_theme->a_focused_label;
             m = (!(self->decorations & OB_FRAME_DECOR_MAXIMIZE) ?
                  ob_rr_theme->a_disabled_focused_max :
                  (self->client->max_vert || self->client->max_horz ?
@@ -141,7 +139,7 @@ void framerender_frame(ObFrame *self)
                    (self->max_hover ?
                     ob_rr_theme->a_hover_focused_max :
                     ob_rr_theme->a_focused_unpressed_max))));
-            n = self->a_icon;
+            n = ob_rr_theme->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
                  ob_rr_theme->a_disabled_focused_iconify :
                  (self->iconify_press ?
@@ -183,8 +181,8 @@ void framerender_frame(ObFrame *self)
                    ob_rr_theme->a_hover_focused_close :
                    ob_rr_theme->a_focused_unpressed_close)));
         } else {
-            t = self->a_unfocused_title;
-            l = self->a_unfocused_label;
+            t = ob_rr_theme->a_unfocused_title;
+            l = ob_rr_theme->a_unfocused_label;
             m = (!(self->decorations & OB_FRAME_DECOR_MAXIMIZE) ?
                  ob_rr_theme->a_disabled_unfocused_max :
                  (self->client->max_vert || self->client->max_horz ?
@@ -198,7 +196,7 @@ void framerender_frame(ObFrame *self)
                    (self->max_hover ?
                     ob_rr_theme->a_hover_unfocused_max :
                     ob_rr_theme->a_unfocused_unpressed_max))));
-            n = self->a_icon;
+            n = ob_rr_theme->a_icon;
             i = (!(self->decorations & OB_FRAME_DECOR_ICONIFY) ?
                  ob_rr_theme->a_disabled_unfocused_iconify :
                  (self->iconify_press ?
@@ -318,7 +316,7 @@ void framerender_frame(ObFrame *self)
         RrAppearance *h, *g;
 
         h = (self->focused ?
-             self->a_focused_handle : self->a_unfocused_handle);
+             ob_rr_theme->a_focused_handle : ob_rr_theme->a_unfocused_handle);
 
         RrPaint(h, self->handle, self->width, ob_rr_theme->handle_height);
 
index 83d0e71..b48b928 100644 (file)
@@ -77,7 +77,7 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, guint show_from, ObClient *client)
     XSetWindowAttributes attr;
 
     self = g_new0(ObMenuFrame, 1);
-    self->type = OB_WINDOW_CLASS_MENUFRAME;
+    self->obwin.type = OB_WINDOW_CLASS_MENUFRAME;
     self->menu = menu;
     self->selected = NULL;
     self->client = client;
@@ -92,7 +92,6 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, guint show_from, ObClient *client)
     XSetWindowBorder(obt_display, self->window,
                      RrColorPixel(ob_rr_theme->menu_border_color));
 
-    self->a_title = RrAppearanceCopy(ob_rr_theme->a_menu_title);
     self->a_items = RrAppearanceCopy(ob_rr_theme->a_menu);
 
     window_add(&self->window, MENUFRAME_AS_WINDOW(self));
@@ -112,10 +111,9 @@ void menu_frame_free(ObMenuFrame *self)
         stacking_remove(MENUFRAME_AS_WINDOW(self));
         window_remove(self->window);
 
-        XDestroyWindow(obt_display, self->window);
-
         RrAppearanceFree(self->a_items);
-        RrAppearanceFree(self->a_title);
+
+        XDestroyWindow(obt_display, self->window);
 
         g_free(self);
     }
@@ -150,37 +148,6 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
     XMapWindow(obt_display, self->window);
     XMapWindow(obt_display, self->text);
 
-    self->a_normal = RrAppearanceCopy(ob_rr_theme->a_menu_normal);
-    self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_selected);
-    self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled);
-    self->a_disabled_selected =
-        RrAppearanceCopy(ob_rr_theme->a_menu_disabled_selected);
-
-    if (entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) {
-        self->a_separator = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
-        self->a_separator->texture[0].type = RR_TEXTURE_LINE_ART;
-    } else {
-        self->a_icon = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
-        self->a_icon->texture[0].type = RR_TEXTURE_RGBA;
-        self->a_mask = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
-        self->a_mask->texture[0].type = RR_TEXTURE_MASK;
-        self->a_bullet_normal =
-            RrAppearanceCopy(ob_rr_theme->a_menu_bullet_normal);
-        self->a_bullet_selected =
-            RrAppearanceCopy(ob_rr_theme->a_menu_bullet_selected);
-    }
-
-    self->a_text_normal =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_normal);
-    self->a_text_selected =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_selected);
-    self->a_text_disabled =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled);
-    self->a_text_disabled_selected =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled_selected);
-    self->a_text_title =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_title);
-
     window_add(&self->window, MENUFRAME_AS_WINDOW(self->frame));
 
     return self;
@@ -206,22 +173,6 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self)
             g_hash_table_remove(menu_frame_map, &self->bullet);
         }
 
-        RrAppearanceFree(self->a_normal);
-        RrAppearanceFree(self->a_selected);
-        RrAppearanceFree(self->a_disabled);
-        RrAppearanceFree(self->a_disabled_selected);
-
-        RrAppearanceFree(self->a_separator);
-        RrAppearanceFree(self->a_icon);
-        RrAppearanceFree(self->a_mask);
-        RrAppearanceFree(self->a_text_normal);
-        RrAppearanceFree(self->a_text_selected);
-        RrAppearanceFree(self->a_text_disabled);
-        RrAppearanceFree(self->a_text_disabled_selected);
-        RrAppearanceFree(self->a_text_title);
-        RrAppearanceFree(self->a_bullet_normal);
-        RrAppearanceFree(self->a_bullet_selected);
-
         g_free(self);
     }
 }
@@ -367,18 +318,20 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                   !self->entry->data.normal.enabled ?
                   /* disabled */
                   (self == self->frame->selected ?
-                   self->a_disabled_selected : self->a_disabled) :
+                   ob_rr_theme->a_menu_disabled_selected :
+                   ob_rr_theme->a_menu_disabled) :
                   /* enabled */
                   (self == self->frame->selected ?
-                   self->a_selected : self->a_normal));
+                   ob_rr_theme->a_menu_selected :
+                   ob_rr_theme->a_menu_normal));
         th = ITEM_HEIGHT;
         break;
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
         if (self->entry->data.separator.label) {
-            item_a = self->frame->a_title;
+            item_a = ob_rr_theme->a_menu_title;
             th = ob_rr_theme->menu_title_height;
         } else {
-            item_a = self->a_normal;
+            item_a = ob_rr_theme->a_menu_normal;
             th = SEPARATOR_HEIGHT + 2*PADDING;
         }
         break;
@@ -399,10 +352,12 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                   !self->entry->data.normal.enabled ?
                   /* disabled */
                   (self == self->frame->selected ?
-                   self->a_text_disabled_selected : self->a_text_disabled) :
+                   ob_rr_theme->a_menu_text_disabled_selected :
+                   ob_rr_theme->a_menu_text_disabled) :
                   /* enabled */
                   (self == self->frame->selected ?
-                   self->a_text_selected : self->a_text_normal));
+                   ob_rr_theme->a_menu_text_selected :
+                   ob_rr_theme->a_menu_text_normal));
         text_a->texture[0].data.text.string = self->entry->data.normal.label;
         if (self->entry->data.normal.shortcut &&
             (self->frame->menu->show_all_shortcuts ||
@@ -417,8 +372,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
         break;
     case OB_MENU_ENTRY_TYPE_SUBMENU:
         text_a = (self == self->frame->selected ?
-                  self->a_text_selected :
-                  self->a_text_normal);
+                  ob_rr_theme->a_menu_text_selected :
+                  ob_rr_theme->a_menu_text_normal);
         sub = self->entry->data.submenu.submenu;
         text_a->texture[0].data.text.string = sub ? sub->title : "";
         if (sub->shortcut && (self->frame->menu->show_all_shortcuts ||
@@ -432,9 +387,9 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
         break;
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
         if (self->entry->data.separator.label != NULL)
-            text_a = self->a_text_title;
+            text_a = ob_rr_theme->a_menu_text_title;
         else
-            text_a = self->a_text_normal;
+            text_a = ob_rr_theme->a_menu_text_normal;
         break;
     }
 
@@ -477,20 +432,24 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                     ob_rr_theme->menu_title_height -
                     2*ob_rr_theme->paddingy);
         } else {
+            RrAppearance *clear;
+
             /* unlabeled separaator */
             XMoveResizeWindow(obt_display, self->text, PADDING, PADDING,
                               self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
-            self->a_separator->surface.parent = item_a;
-            self->a_separator->surface.parentx = PADDING;
-            self->a_separator->surface.parenty = PADDING;
-            self->a_separator->texture[0].data.lineart.color =
+
+            clear = ob_rr_theme->a_clear_tex;
+            clear->texture[0].type = RR_TEXTURE_LINE_ART;
+            clear->surface.parent = item_a;
+            clear->surface.parentx = PADDING;
+            clear->surface.parenty = PADDING;
+            clear->texture[0].data.lineart.color =
                 text_a->texture[0].data.text.color;
-            self->a_separator->texture[0].data.lineart.x1 = 2*PADDING;
-            self->a_separator->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT/2;
-            self->a_separator->texture[0].data.lineart.x2 =
-                self->area.width - 4*PADDING;
-            self->a_separator->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT/2;
-            RrPaint(self->a_separator, self->text,
+            clear->texture[0].data.lineart.x1 = 2*PADDING;
+            clear->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT/2;
+            clear->texture[0].data.lineart.x2 = self->area.width - 4*PADDING;
+            clear->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT/2;
+            RrPaint(clear, self->text,
                     self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
         }
         break;
@@ -499,24 +458,29 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
     if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
         self->entry->data.normal.icon_data)
     {
+        RrAppearance *clear;
+
         XMoveResizeWindow(obt_display, self->icon,
                           PADDING, frame->item_margin.top,
                           ITEM_HEIGHT - frame->item_margin.top
                           - frame->item_margin.bottom,
                           ITEM_HEIGHT - frame->item_margin.top
                           - frame->item_margin.bottom);
-        self->a_icon->texture[0].data.rgba.width =
+
+        clear = ob_rr_theme->a_clear_tex;
+        clear->texture[0].type = RR_TEXTURE_RGBA;
+        clear->texture[0].data.rgba.width =
             self->entry->data.normal.icon_width;
-        self->a_icon->texture[0].data.rgba.height =
+        clear->texture[0].data.rgba.height =
             self->entry->data.normal.icon_height;
-        self->a_icon->texture[0].data.rgba.alpha =
+        clear->texture[0].data.rgba.alpha =
             self->entry->data.normal.icon_alpha;
-        self->a_icon->texture[0].data.rgba.data =
+        clear->texture[0].data.rgba.data =
             self->entry->data.normal.icon_data;
-        self->a_icon->surface.parent = item_a;
-        self->a_icon->surface.parentx = PADDING;
-        self->a_icon->surface.parenty = frame->item_margin.top;
-        RrPaint(self->a_icon, self->icon,
+        clear->surface.parent = item_a;
+        clear->surface.parentx = PADDING;
+        clear->surface.parenty = frame->item_margin.top;
+        RrPaint(clear, self->icon,
                 ITEM_HEIGHT - frame->item_margin.top
                 - frame->item_margin.bottom,
                 ITEM_HEIGHT - frame->item_margin.top
@@ -526,6 +490,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                self->entry->data.normal.mask)
     {
         RrColor *c;
+        RrAppearance *clear;
 
         XMoveResizeWindow(obt_display, self->icon,
                           PADDING, frame->item_margin.top,
@@ -533,7 +498,10 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                           - frame->item_margin.bottom,
                           ITEM_HEIGHT - frame->item_margin.top
                           - frame->item_margin.bottom);
-        self->a_mask->texture[0].data.mask.mask =
+
+        clear = ob_rr_theme->a_clear_tex;
+        clear->texture[0].type = RR_TEXTURE_MASK;
+        clear->texture[0].data.mask.mask =
             self->entry->data.normal.mask;
 
         c = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
@@ -546,12 +514,12 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
              (self == self->frame->selected ?
               self->entry->data.normal.mask_selected_color :
               self->entry->data.normal.mask_normal_color));
-        self->a_mask->texture[0].data.mask.color = c;
+        clear->texture[0].data.mask.color = c;
 
-        self->a_mask->surface.parent = item_a;
-        self->a_mask->surface.parentx = PADDING;
-        self->a_mask->surface.parenty = frame->item_margin.top;
-        RrPaint(self->a_mask, self->icon,
+        clear->surface.parent = item_a;
+        clear->surface.parentx = PADDING;
+        clear->surface.parenty = frame->item_margin.top;
+        RrPaint(clear, self->icon,
                 ITEM_HEIGHT - frame->item_margin.top
                 - frame->item_margin.bottom,
                 ITEM_HEIGHT - frame->item_margin.top
@@ -568,8 +536,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                           ITEM_HEIGHT - 2*PADDING,
                           ITEM_HEIGHT - 2*PADDING);
         bullet_a = (self == self->frame->selected ?
-                    self->a_bullet_selected :
-                    self->a_bullet_normal);
+                    ob_rr_theme->a_menu_bullet_selected :
+                    ob_rr_theme->a_menu_bullet_normal);
         bullet_a->surface.parent = item_a;
         bullet_a->surface.parentx =
             self->frame->text_x + self->frame->text_w - ITEM_HEIGHT + PADDING;
@@ -645,31 +613,31 @@ void menu_frame_render(ObMenuFrame *self)
         gint l, t, r, b;
 
         e = self->entries->data;
-        e->a_text_normal->texture[0].data.text.string = "";
-        tw = RrMinWidth(e->a_text_normal);
+        ob_rr_theme->a_menu_text_normal->texture[0].data.text.string = "";
+        tw = RrMinWidth(ob_rr_theme->a_menu_text_normal);
         tw += 2*PADDING;
 
         th = ITEM_HEIGHT;
 
-        RrMargins(e->a_normal, &l, &t, &r, &b);
+        RrMargins(ob_rr_theme->a_menu_normal, &l, &t, &r, &b);
         STRUT_SET(self->item_margin,
                   MAX(self->item_margin.left, l),
                   MAX(self->item_margin.top, t),
                   MAX(self->item_margin.right, r),
                   MAX(self->item_margin.bottom, b));
-        RrMargins(e->a_selected, &l, &t, &r, &b);
+        RrMargins(ob_rr_theme->a_menu_selected, &l, &t, &r, &b);
         STRUT_SET(self->item_margin,
                   MAX(self->item_margin.left, l),
                   MAX(self->item_margin.top, t),
                   MAX(self->item_margin.right, r),
                   MAX(self->item_margin.bottom, b));
-        RrMargins(e->a_disabled, &l, &t, &r, &b);
+        RrMargins(ob_rr_theme->a_menu_disabled, &l, &t, &r, &b);
         STRUT_SET(self->item_margin,
                   MAX(self->item_margin.left, l),
                   MAX(self->item_margin.top, t),
                   MAX(self->item_margin.right, r),
                   MAX(self->item_margin.bottom, b));
-        RrMargins(e->a_disabled_selected, &l, &t, &r, &b);
+        RrMargins(ob_rr_theme->a_menu_disabled_selected, &l, &t, &r, &b);
         STRUT_SET(self->item_margin,
                   MAX(self->item_margin.left, l),
                   MAX(self->item_margin.top, t),
@@ -710,10 +678,12 @@ void menu_frame_render(ObMenuFrame *self)
                   !e->entry->data.normal.enabled ?
                   /* disabled */
                   (e == self->selected ?
-                   e->a_text_disabled_selected : e->a_text_disabled) :
+                   ob_rr_theme->a_menu_text_disabled_selected :
+                   ob_rr_theme->a_menu_text_disabled) :
                   /* enabled */
                   (e == self->selected ?
-                   e->a_text_selected : e->a_text_normal));
+                   ob_rr_theme->a_menu_text_selected : 
+                   ob_rr_theme->a_menu_text_normal));
         switch (e->entry->type) {
         case OB_MENU_ENTRY_TYPE_NORMAL:
             text_a->texture[0].data.text.string = e->entry->data.normal.label;
@@ -740,9 +710,10 @@ void menu_frame_render(ObMenuFrame *self)
             break;
         case OB_MENU_ENTRY_TYPE_SEPARATOR:
             if (e->entry->data.separator.label != NULL) {
-                e->a_text_title->texture[0].data.text.string =
+                ob_rr_theme->a_menu_text_title->texture[0].data.text.string =
                     e->entry->data.separator.label;
-                tw = RrMinWidth(e->a_text_title) + 2*ob_rr_theme->paddingx;
+                tw = RrMinWidth(ob_rr_theme->a_menu_text_title) +
+                    2*ob_rr_theme->paddingx;
                 tw = MIN(tw, MAX_MENU_WIDTH);
                 th = ob_rr_theme->menu_title_height +
                     (ob_rr_theme->mbwidth - PADDING) *2;
index ea1003d..daac34d 100644 (file)
@@ -38,7 +38,7 @@ extern GList *menu_frame_visible;
 struct _ObMenuFrame
 {
     /* stuff to be an ObWindow */
-    ObWindow type;
+    ObWindow obwin;
     Window window;
 
     struct _ObMenu *menu;
@@ -71,7 +71,9 @@ struct _ObMenuFrame
 
     gint monitor; /* monitor on which to show the menu in xinerama */
 
-    RrAppearance *a_title;
+    /* We make a copy of this for each menu, so that we don't have to re-render
+       the background of the entire menu each time we render an item inside it.
+    */
     RrAppearance *a_items;
 
     gboolean got_press; /* don't allow a KeyRelease event to run things in the
@@ -94,22 +96,6 @@ struct _ObMenuEntryFrame
     Window icon;
     Window text;
     Window bullet;
-
-    RrAppearance *a_normal;
-    RrAppearance *a_selected;
-    RrAppearance *a_disabled;
-    RrAppearance *a_disabled_selected;
-
-    RrAppearance *a_icon;
-    RrAppearance *a_mask;
-    RrAppearance *a_bullet_normal;
-    RrAppearance *a_bullet_selected;
-    RrAppearance *a_separator;
-    RrAppearance *a_text_normal;
-    RrAppearance *a_text_selected;
-    RrAppearance *a_text_disabled;
-    RrAppearance *a_text_disabled_selected;
-    RrAppearance *a_text_title;
 };
 
 extern GHashTable *menu_frame_map;
index 38963df..ddc518a 100644 (file)
@@ -256,7 +256,8 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr)
 
 #ifdef SYNC
     if (config_resize_redraw && !moving && obt_display_extension_sync &&
-        moveresize_client->sync_request && moveresize_client->sync_counter)
+        moveresize_client->sync_request && moveresize_client->sync_counter &&
+        !moveresize_client->not_responding)
     {
         /* Initialize values for the resize syncing, and create an alarm for
            the client's xsync counter */
@@ -371,7 +372,8 @@ static void do_resize(void)
 
 #ifdef SYNC
     if (config_resize_redraw && obt_display_extension_sync &&
-        moveresize_client->sync_request && moveresize_client->sync_counter)
+        moveresize_client->sync_request && moveresize_client->sync_counter &&
+        !moveresize_client->not_responding)
     {
         XEvent ce;
         XSyncValue val;
index 6a58cca..9ec47bc 100644 (file)
@@ -33,6 +33,7 @@
 #include "focus_cycle_popup.h"
 #include "moveresize.h"
 #include "frame.h"
+#include "framerender.h"
 #include "keyboard.h"
 #include "mouse.h"
 #include "menuframe.h"
@@ -177,7 +178,7 @@ gint main(gint argc, gchar **argv)
 
     /* set the DISPLAY environment variable for any lauched children, to the
        display we're using, so they open in the right place. */
-    putenv(g_strdup_printf("DISPLAY=%s", DisplayString(obt_display)));
+    setenv("DISPLAY", DisplayString(obt_display), TRUE);
 
     /* create available cursors */
     cursors[OB_CURSOR_NONE] = None;
@@ -490,9 +491,7 @@ static void remove_args(gint *argc, gchar **argv, gint index, gint num)
 static void parse_env()
 {
     /* unset this so we don't pass it on unknowingly */
-    gchar *s = g_strdup("DESKTOP_STARTUP_ID");
-    putenv(s);
-    g_free(s);
+    unsetenv("DESKTOP_STARTUP_ID");
 }
 
 static void parse_args(gint *argc, gchar **argv)
index 058bbfb..81fb975 100644 (file)
@@ -108,7 +108,10 @@ static Rect **pick_head(ObClient *c)
         }
     }
 
-    if (focus_client && client_normal(focus_client)) {
+    /* skip this if placing by the mouse position */
+    if (focus_client && client_normal(focus_client) &&
+        config_place_monitor != OB_PLACE_MONITOR_MOUSE)
+    {
         add_choice(choice, client_monitor(focus_client));
         ob_debug("placement adding choice %d for normal focused window\n",
                  client_monitor(focus_client));
@@ -146,7 +149,8 @@ static gboolean place_random(ObClient *client, gint *x, gint *y)
     guint i;
 
     areas = pick_head(client);
-    i = config_place_active ? 0 : g_random_int_range(0, screen_num_monitors);
+    i = (config_place_monitor != OB_PLACE_MONITOR_ANY) ?
+        0 : g_random_int_range(0, screen_num_monitors);
 
     l = areas[i]->x;
     t = areas[i]->y;
@@ -255,9 +259,9 @@ static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)
     /* try ignoring different things to find empty space */
     for (ignore = 0; ignore < IGNORE_END && !ret; ignore++) {
         /* try all monitors in order of preference, but only the first one
-           if config_place_active is true */
-        for (i = 0; (i < (config_place_active ? 1 : screen_num_monitors) &&
-                     !ret); ++i)
+           if config_place_monitor is MOUSE or ACTIVE */
+        for (i = 0; (i < (config_place_monitor != OB_PLACE_MONITOR_ANY ?
+                          1 : screen_num_monitors) && !ret); ++i)
         {
             GList *it;
 
index e2f1d4e..6a9add4 100644 (file)
@@ -31,6 +31,13 @@ typedef enum
     OB_PLACE_POLICY_MOUSE
 } ObPlacePolicy;
 
+typedef enum
+{
+    OB_PLACE_MONITOR_ANY,
+    OB_PLACE_MONITOR_ACTIVE,
+    OB_PLACE_MONITOR_MOUSE
+} ObPlaceMonitor;
+
 gboolean place_client(struct _ObClient *client, gint *x, gint *y,
                       struct _ObAppSettings *settings);
 
index 8176b6b..02c8784 100644 (file)
@@ -256,6 +256,8 @@ void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
     x=MAX(MIN(x, area->x+area->width-w),area->x);
     y=MAX(MIN(y, area->y+area->height-h),area->y);
 
+    g_free(area);
+
     if (m == screen_num_monitors) {
         RECT_SET(mon, x, y, w, h);
         m = screen_find_monitor(&mon);
@@ -265,6 +267,8 @@ void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
 
         x=MAX(MIN(x, area->x+area->width-w),area->x);
         y=MAX(MIN(y, area->y+area->height-h),area->y);
+
+        g_free(area);
     }
 
     /* set the windows/appearances up */
@@ -300,8 +304,6 @@ void popup_delay_show(ObPopup *self, gulong usec, gchar *text)
             popup_show_timeout(self);
         }
     }
-
-    g_free(area);
 }
 
 void popup_hide(ObPopup *self)
index dde0443..9a37e68 100644 (file)
@@ -391,7 +391,13 @@ void screen_startup(gboolean reconfig)
     screen_num_desktops = 0;
     if (OBT_PROP_GET32(obt_root(ob_screen),
                        NET_NUMBER_OF_DESKTOPS, CARDINAL, &d))
+    {
+        if (d != config_desktops_num) {
+            g_warning(_("Openbox is configured for %d desktops, but the current session has %d.  Overriding the Openbox configuration."),
+                      config_desktops_num, d);
+        }
         screen_set_num_desktops(d);
+    }
     /* restore from session if possible */
     else if (session_num_desktops)
         screen_set_num_desktops(session_num_desktops);
@@ -1284,7 +1290,6 @@ static void get_xinerama_screens(Rect **xin_areas, guint *nxin)
     gint l, r, t, b;
 
     if (ob_debug_xinerama) {
-        g_print("Using fake xinerama !\n");
         gint w = WidthOfScreen(ScreenOfDisplay(obt_display, ob_screen));
         gint h = HeightOfScreen(ScreenOfDisplay(obt_display, ob_screen));
         *nxin = 2;
index 6b3c955..4d58196 100644 (file)
@@ -24,6 +24,7 @@
 #include "group.h"
 #include "frame.h"
 #include "window.h"
+#include "event.h"
 #include "debug.h"
 #include "obt/prop.h"
 
@@ -114,6 +115,7 @@ void stacking_temp_raise(ObWindow *window)
 {
     Window win[2];
     GList *it;
+    gulong start;
 
     /* don't use this for internal windows..! it would lower them.. */
     g_assert(window_layer(window) < OB_STACKING_LAYER_INTERNAL);
@@ -129,7 +131,9 @@ void stacking_temp_raise(ObWindow *window)
     }
 
     win[1] = window_top(window);
+    start = event_start_ignore_all_enters();
     XRestackWindows(obt_display, win, 2);
+    event_end_ignore_all_enters(start);
 
     pause_changes = TRUE;
 }
@@ -139,12 +143,15 @@ void stacking_restore(void)
     Window *win;
     GList *it;
     gint i;
+    gulong start;
 
     win = g_new(Window, g_list_length(stacking_list) + 1);
     win[0] = screen_support_win;
     for (i = 1, it = stacking_list; it; ++i, it = g_list_next(it))
         win[i] = window_top(it->data);
+    start = event_start_ignore_all_enters();
     XRestackWindows(obt_display, win, i);
+    event_end_ignore_all_enters(start);
     g_free(win);
 
     pause_changes = FALSE;
index 1542be0..3e8799f 100644 (file)
 #include "gettext.h"
 #include "event.h"
 
-#include <stdlib.h>
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#endif
 
 #ifndef USE_LIBSN
 
 void sn_startup(gboolean reconfig) {}
 void sn_shutdown(gboolean reconfig) {}
 gboolean sn_app_starting() { return FALSE; }
-Time sn_app_started(const gchar *id, const gchar *wmclass)
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name)
 {
     return CurrentTime;
 }
 gboolean sn_get_desktop(gchar *id, guint *desktop) { return FALSE; }
-void sn_setup_spawn_environment(gchar *program, gchar *name,
-                                gchar *icon_name, gint desktop) {}
+void sn_setup_spawn_environment(const gchar *program, const gchar *name,
+                                const gchar *icon_name, const gchar *wmclass,
+                                gint desktop) {}
 void sn_spawn_cancel() {}
 
 #else
@@ -57,15 +60,8 @@ static void sn_event_func(SnMonitorEvent *event, gpointer data);
 
 void sn_startup(gboolean reconfig)
 {
-    gchar *s;
-
     if (reconfig) return;
 
-    /* unset this so we don't pass it on unknowingly */
-    s = g_strdup("DESKTOP_STARTUP_ID");
-    putenv(s);
-    g_free(s);
-
     sn_display = sn_display_new(obt_display, NULL, NULL);
     sn_context = sn_monitor_context_new(sn_display, ob_screen,
                                         sn_event_func, NULL, NULL);
@@ -168,7 +164,7 @@ static void sn_event_func(SnMonitorEvent *ev, gpointer data)
         screen_set_root_cursor();
 }
 
-Time sn_app_started(const gchar *id, const gchar *wmclass)
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name)
 {
     GSList *it;
     Time t = CurrentTime;
@@ -179,10 +175,9 @@ Time sn_app_started(const gchar *id, const gchar *wmclass)
     for (it = sn_waits; it; it = g_slist_next(it)) {
         SnStartupSequence *seq = it->data;
         gboolean found = FALSE;
-        const gchar *seqid, *seqclass, *seqname, *seqbin;
+        const gchar *seqid, *seqclass, *seqbin;
         seqid = sn_startup_sequence_get_id(seq);
         seqclass = sn_startup_sequence_get_wmclass(seq);
-        seqname = sn_startup_sequence_get_name(seq);
         seqbin = sn_startup_sequence_get_binary_name(seq);
 
         if (id && seqid) {
@@ -190,15 +185,21 @@ Time sn_app_started(const gchar *id, const gchar *wmclass)
                accuracy */
             if (!strcmp(seqid, id))
                 found = TRUE;
-        } else {
-            seqclass = sn_startup_sequence_get_wmclass(seq);
-            seqname = sn_startup_sequence_get_name(seq);
-            seqbin = sn_startup_sequence_get_binary_name(seq);
-
-            if ((seqname && !g_ascii_strcasecmp(seqname, wmclass)) ||
-                (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) ||
-                (seqclass && !strcmp(seqclass, wmclass)))
-                found = TRUE;
+        }
+        else if (seqclass) {
+            /* seqclass = "a string to match against the "resource name" or
+               "resource class" hints.  These are WM_CLASS[0] and WM_CLASS[1]"
+               - from the startup-notification spec
+            */
+            found = (seqclass && !strcmp(seqclass, wmclass)) ||
+                (seqclass && !strcmp(seqclass, name));
+        }
+        else if (seqbin) {
+            /* Check the binary name against the class and name hints
+               as well, to help apps that don't have the class set
+               correctly */
+            found = (seqbin && !g_ascii_strcasecmp(seqbin, wmclass)) ||
+                (seqbin && !g_ascii_strcasecmp(seqbin, name));
         }
 
         if (found) {
@@ -231,8 +232,9 @@ static gboolean sn_launch_wait_timeout(gpointer data)
     return FALSE; /* don't repeat */
 }
 
-void sn_setup_spawn_environment(gchar *program, gchar *name,
-                                gchar *icon_name, gint desktop)
+void sn_setup_spawn_environment(const gchar *program, const gchar *name,
+                                const gchar *icon_name, const gchar *wmclass,
+                                gint desktop)
 {
     gchar *desc;
     const char *id;
@@ -249,6 +251,7 @@ void sn_setup_spawn_environment(gchar *program, gchar *name,
     sn_launcher_context_set_icon_name(sn_launcher, icon_name ?
                                       icon_name : program);
     sn_launcher_context_set_binary_name(sn_launcher, program);
+    if (wmclass) sn_launcher_context_set_wmclass(sn_launcher, wmclass);
     if (desktop >= 0 && (unsigned) desktop < screen_num_desktops)
         sn_launcher_context_set_workspace(sn_launcher, (signed) desktop);
     sn_launcher_context_initiate(sn_launcher, "openbox", program,
@@ -262,7 +265,7 @@ void sn_setup_spawn_environment(gchar *program, gchar *name,
                               g_direct_equal,
                               (GDestroyNotify)sn_launcher_context_unref);
 
-    putenv(g_strdup_printf("DESKTOP_STARTUP_ID=%s", id));
+    setenv("DESKTOP_STARTUP_ID", id, TRUE);
 
     g_free(desc);
 }
index 7c28fab..758beee 100644 (file)
@@ -27,16 +27,20 @@ void sn_shutdown(gboolean reconfig);
 
 gboolean sn_app_starting();
 
-/*! Notify that an app has started */
-Time sn_app_started(const gchar *id, const gchar *wmclass);
+/*! Notify that an app has started
+  @param wmclass the WM_CLASS[1] hint
+  @param name the WM_CLASS[0] hint
+ */
+Time sn_app_started(const gchar *id, const gchar *wmclass, const gchar *name);
 
 /*! Get the desktop requested via the startup-notiication protocol if one
   was requested */
 gboolean sn_get_desktop(gchar *id, guint *desktop);
 
 /* Get the environment to run the program in, with startup notification */
-void sn_setup_spawn_environment(gchar *program, gchar *name,
-                                gchar *icon_name, gint desktop);
+void sn_setup_spawn_environment(const gchar *program, const gchar *name,
+                                const gchar *icon_name, const gchar *wmclass,
+                                gint desktop);
 
 /* Tell startup notification we're not actually running the program we
    told it we were
index c7af5d6..ca3182f 100644 (file)
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-21 14:43+0300\n"
 "Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
 "Language-Team: Arabic <doc@arabeyes.org>\n"
@@ -28,7 +28,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "فشلت في تحويل المسار '%s' من utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "فشلت في تنفيذ '%s': %s"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "من فضلك أبلغ عن العلل إلى %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "معامل سطر أوامر غير سليم '%s'\n"
@@ -307,7 +307,14 @@ msgstr "تعذّر الحصول على انتقاء مدير النوافذ عل
 msgid "The WM on screen %d is not exiting"
 msgstr "مدير النوافذ على الشاشة %Id لا وجود له"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "سطح المكتب %Ii"
@@ -327,7 +334,7 @@ msgstr "لم أستطِع حفظ الجلسة إلى '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "خطأ أثناء حفظ الجلسة إلى '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "تشغيل %s\n"
index ab834ba..fed7496 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-06-01 19:02+0530\n"
 "Last-Translator: Runa Bhattacharjee <runabh@gmail.com>\n"
 "Language-Team: Bengali (India) <en@li.org>\n"
@@ -28,7 +28,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "'%s' পাথটি utf8 থেকে রূপান্তর করতে ব্যর্থ"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "'%s' সঞ্চালন করতে ব্যর্থ: %s"
@@ -290,7 +290,7 @@ msgstr ""
 "\n"
 "অনুগ্রহ করে %s-এ বাগ সংক্রান্ত সূচনা দায়ের করুন\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "অবৈধ কমান্ড-লাইন আর্গুমেন্ট '%s'\n"
@@ -310,7 +310,14 @@ msgstr "পর্দা %d-এ উইন্ডো পরিচালন ব্
 msgid "The WM on screen %d is not exiting"
 msgstr "পর্দা %d-র উপর চলমান উইন্ডো পরিচালন ব্যবস্থাটি বন্ধ করতে ব্যর্থ"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "desktop %i"
@@ -330,7 +337,7 @@ msgstr "'%s'-র সেশান সংরক্ষণ করতে ব্যর
 msgid "Error while saving the session to '%s': %s"
 msgstr "'%s'-এ সেশান সংরক্ষণকালে সমস্যা: %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "%s সঞ্চালিত হচ্ছে\n"
index 4c556c7..25f9f33 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-05-28 15:54+0200\n"
 "Last-Translator: David Majà Martínez <davidmaja@gmail.com>\n"
 "Language-Team: catalan\n"
@@ -25,7 +25,7 @@ msgstr "L'acció sollicitada '%s' no és vàlida. Aquesta acció no existeix."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "No s'ha pogut convertir el camí '%s' des de utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "No s'ha pogut executar '%s': %s"
@@ -296,7 +296,7 @@ msgstr ""
 "\n"
 "Informeu dels errors a %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Opció '%s' no vàlida a la línia d'ordres\n"
@@ -317,7 +317,14 @@ msgstr ""
 msgid "The WM on screen %d is not exiting"
 msgstr "El gestor de finestres de la pantalla %d no està sortint"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "escriptori %i"
@@ -337,7 +344,7 @@ msgstr "No s'ha pogut desar la sessió a '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "S'ha produït un error mentre es desava la sessió a '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Executant %s\n"
index d6384ba..5228e92 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-21 00:15+0200\n"
 "Last-Translator: tezlo <tezlo@gmx.net>\n"
 "Language-Team: Czech <cs@li.org>\n"
@@ -25,7 +25,7 @@ msgstr "Požadována neplatná akce '%s'. Žádná taková akce neexistuje."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Nepodařilo se převést cestu '%s' z utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Nepodařilo se spustit '%s': %s"
@@ -286,7 +286,7 @@ msgstr ""
 "\n"
 "Prosím hlašte chyby na %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Neplatný argument příkazové řádky '%s'\n"
@@ -306,7 +306,14 @@ msgstr "Nepodařilo se získat výseč pro window manager na obrazovce %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Window manager na obrazovce %d ne a ne skončit"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "plochu %i"
@@ -326,7 +333,7 @@ msgstr "Nepodařilo se uložit session do '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Chyba během ukládání session do '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Spouštím %s\n"
index bd4ef11..63c76cc 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8,9 +8,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-17 22:49+0100\n"
 "Last-Translator: Finn Zirngibl <finn@s23.org>\n"
 "Language-Team:  <de@li.org>\n"
@@ -28,7 +28,7 @@ msgstr "Unzulässige Aktion '%s' angefordert. Diese Aktion existiert nicht."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Konnte Pfad '%s' nicht von utf8 konvertieren"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Konnte '%s' nicht ausführen: %s"
@@ -292,7 +292,7 @@ msgstr ""
 "\n"
 "Bitte melden Sie Bugreports an: %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Ungültiges Kommandozeilen Argument '%s'\n"
@@ -312,7 +312,14 @@ msgstr "Konnte die Fenstermanagerauswahl auf Bildschirm %d nicht reservieren"
 msgid "The WM on screen %d is not exiting"
 msgstr "Der Fenstermanager auf Bildschirm %d beendet sich nicht"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "desktop %i"
@@ -332,7 +339,7 @@ msgstr "Konnte die Sitzung '%s' nicht sichern: %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Fehler beim Speichern der Sitzung nach '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Starte %s\n"
index 2f2f396..c561c28 100644 (file)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: openbox 3.999.0\n"
+"Project-Id-Version: openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-25 03:51+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -51,7 +51,7 @@ msgstr "Invalid action ‘\e[1m%s\e[0m’ requested. No such action exists."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Failed to convert the path ‘\e[1m%s\e[0m’ from utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Failed to execute '%s': %s"
@@ -310,7 +310,7 @@ msgstr ""
 "\n"
 "Please report bugs at %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Invalid command line argument ‘\e[1m%s\e[0m’\n"
@@ -330,7 +330,16 @@ msgstr "Could not acquire window manager selection on screen %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "The WM on screen %d is not exiting"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "desktop %i"
@@ -350,7 +359,7 @@ msgstr "Unable to save the session to '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Error while saving the session to '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Running %s\n"
index ea40adc..d058812 100644 (file)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: openbox 3.999.0\n"
+"Project-Id-Version: openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-25 03:51+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
@@ -48,7 +48,7 @@ msgstr "Invalid action ‘%s’ requested. No such action exists."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Failed to convert the path ‘%s’ from utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Failed to execute '%s': %s"
@@ -307,7 +307,7 @@ msgstr ""
 "\n"
 "Please report bugs at %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Invalid command line argument ‘%s’\n"
@@ -327,7 +327,16 @@ msgstr "Could not acquire window manager selection on screen %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "The WM on screen %d is not exiting"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "desktop %i"
@@ -347,7 +356,7 @@ msgstr "Unable to save the session to '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Error while saving the session to '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Running %s\n"
index ead56fe..6d702bb 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-21 21:26+0200\n"
 "Last-Translator: David Merino <rastiazul at yahoo . com>\n"
 "Language-Team: None\n"
@@ -27,7 +27,7 @@ msgstr "La acción '%s' solicitada es inválida. No existe tal acción."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Falló al convertir el path '%s' desde utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Falló al ejecutar '%s': %s"
@@ -293,7 +293,7 @@ msgstr ""
 "\n"
 "Por favor reportar errores a %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Argumento de linea de comando inválido '%s'\n"
@@ -314,7 +314,14 @@ msgstr ""
 msgid "The WM on screen %d is not exiting"
 msgstr "El WM en la pantalla %d no esta saliendo"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "Escritorio %i"
@@ -334,7 +341,7 @@ msgstr "No se puede salvar la sesión a '%s': '%s'"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Error mientras se salvaba la sesión a '%s': '%s'"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Ejecutando %s\n"
index 6cc82a4..235436a 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-20 16:54+0200\n"
 "Last-Translator: Andres Järv <andresjarv@gmail.com>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -26,7 +26,7 @@ msgstr "Taotleti kehtetut käsklust '%s'. Sellist käsklust pole olemas."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Raja '%s' ümberkodeerimine UTF8-st ebaõnnestus"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "'%s' käivitamine ebaõnnestus: %s"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "Palun teata vigadest siia %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Vigane käsurea argument '%s'\n"
@@ -307,7 +307,14 @@ msgstr "Ei suuda hankida aknahaldurite loetelu ekraanil %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Aknahaldur ekraanil %d ei sulgu"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "töölaud %i"
@@ -327,7 +334,7 @@ msgstr "Seansi '%s' salvestamine ebaõnnestus: %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Seansi '%s' salvestamisel ilmnes viga: %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Jooksev %s\n"
index 0d2b896..a270c56 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-19 14:34+0100\n"
 "Last-Translator: Inko I. A. <inkoia@gmail.com>\n"
 "Language-Team: Inko I. A. <inkoia@gmail.com>\n"
@@ -25,7 +25,7 @@ msgstr "Eskatutako '%s' ekintza baliogabea. Ez da ekintza hori existitzen."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Hutsegitea '%s' helbidea utf8-tik bihurtzean"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Hutsegitea '%s' exekutatzean: %s"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "%s helbidean erroreen berri eman mesedez\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "'%s' komando lerro argumentu baliogabea\n"
@@ -310,7 +310,14 @@ msgstr ""
 msgid "The WM on screen %d is not exiting"
 msgstr "%d bistaratze pantailako leiho-kudeatzailea ez da irteten"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "%i Idazmahaia"
@@ -330,7 +337,7 @@ msgstr "Ezin da saioa '%s'-n gorde: %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Errorea saioa '%s'-n gordetzean: %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Egikaritzen %s\n"
index 335e8d8..f36befe 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -8,9 +8,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-18 14:55+0100\n"
 "Last-Translator: Jarkko Piiroinen <jarkkop@iki.fi>\n"
 "Language-Team: None\n"
@@ -28,7 +28,7 @@ msgstr "Virheellinen tapahtuma '%s' yritetty. Tapahtumaa ei ole."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Polun muuntaminen utf8:sta epäonnistui: '%s'"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Ohjelman suorittaminen epäonnistui '%s': %s"
@@ -202,7 +202,8 @@ msgstr "Teeman lataaminen epäonnistui."
 #: openbox/openbox.c:405
 #, c-format
 msgid "Restart failed to execute new executable '%s': %s"
-msgstr "Uudelleenkäynnistys ei onnistunut käynnistämään uutta ohjelmaa '%s': %s"
+msgstr ""
+"Uudelleenkäynnistys ei onnistunut käynnistämään uutta ohjelmaa '%s': %s"
 
 #: openbox/openbox.c:475 openbox/openbox.c:477
 msgid "Copyright (c)"
@@ -289,7 +290,7 @@ msgstr ""
 "\n"
 "Ilmoita virheistä: %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Virheellinen valitsin '%s'\n"
@@ -309,7 +310,14 @@ msgstr "Ikkunointiohjelman valinta ruudulla %d ei onnistunut"
 msgid "The WM on screen %d is not exiting"
 msgstr "Ikkunointiohjelma ruudulla %d ei sulkeudu"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "työtila %i"
@@ -329,7 +337,7 @@ msgstr "Istuntoa ei voitu tallentaa hakemistoon '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Virhe tallennettaessa istuntoa hakemistoon '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Suoritetaan %s\n"
index fefa21c..f3a3c13 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,9 +9,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-17 22:53+0100\n"
 "Last-Translator: Cyrille Bagard <nocbos@gmail.com>\n"
 "Language-Team: français <fr@li.org>\n"
@@ -29,7 +29,7 @@ msgstr "Action demand
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Échec de la conversion du chemin « %s » depuis l'UTF-8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Échec de l'exécution de « %s » : %s"
@@ -300,7 +300,7 @@ msgstr ""
 "\n"
 "Veuillez soumettre les rapports de bogues à %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Argument de la ligne de commande invalide « %s »\n"
@@ -323,7 +323,14 @@ msgid "The WM on screen %d is not exiting"
 msgstr ""
 "Le gestionnaire de fenêtres sur l'écran %d n'est pas en train de se terminer"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "bureau %i"
@@ -343,7 +350,7 @@ msgstr "Impossible de sauvegarder la session dans 
 msgid "Error while saving the session to '%s': %s"
 msgstr "Erreur lors de la sauvegarde de la session depuis « %s » : %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Exécution de %s\n"
index eba3231..50b5d38 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-12-21 14:33+0100\n"
 "Last-Translator: Robert Kuszinger <hiding@freemail.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -26,7 +26,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Az útvonalat nem sikerült átalakítani utf8-ból: '%s'"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Nem sikerült futtatni ezt a programot '%s': %s"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "Légyszi jelentsd a hibát itt: %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Érvénytelen parancssori opció: '%s'\n"
@@ -307,7 +307,14 @@ msgstr "Nem tudok ablakkezelőt váltani ezen a képernyőn %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Ezen a képernyőn: %d az ablakkezelő nem lép ki"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "%i. munkaasztal"
@@ -327,7 +334,7 @@ msgstr "Nem tudom elmenti ide a futó környezetet '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Hiba a futási környezet mentése közben '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Futtatás %s\n"
index 1fdebe4..d4a8130 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-20 15:18+0200\n"
 "Last-Translator: Davide Truffa <davide@catoblepa.org>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -26,7 +26,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Impossibile convertire il percorso utf8 '%s'"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Impossibile eseguire il comando '%s': %s"
@@ -293,7 +293,7 @@ msgstr ""
 "\n"
 "Segnalate eventuali bug a %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Argomento da linea di comando non valido '%s'\n"
@@ -313,7 +313,14 @@ msgstr "Impossibile acquisire la selezione del window manager sullo schermo %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Il WM sullo schermo %d non è terminato"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "desktop %i"
@@ -333,7 +340,7 @@ msgstr "Impossibile salvare la sessione in '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Errore durante il salvataggio della sessione in '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Sto eseguendo %s\n"
index 57a341e..a72fdd9 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-06-07 14:49+0200\n"
 "Last-Translator: Ryoichiro Suzuki <ryoichiro.suzuki@gmail.com>\n"
 "Language-Team: Japanese <ja@li.org>\n"
@@ -28,7 +28,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "パス'%s'を utf8 から変換するのに失敗しました。"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "'%s'の実行に失敗しました: %s"
@@ -280,7 +280,7 @@ msgid ""
 "Please report bugs at %s\n"
 msgstr ""
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "不正なコマンドライン引数 '%s'\n"
@@ -300,7 +300,14 @@ msgstr "スクリーン%dでウィンドウマネージャの選択を取得で
 msgid "The WM on screen %d is not exiting"
 msgstr "スクリーン%dのWMが終了しません。"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "デスクトップ%i"
@@ -320,7 +327,7 @@ msgstr "セッションを'%s'に保存できません: %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "セッションを'%s'に保存中にエラーが起きました: %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "起動中 %s\n"
index b9e9c59..414cddb 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-12 13:01+0200\n"
 "Last-Translator: Jochem Kossen <jkossen@xs4all.nl>\n"
 "Language-Team: Dutch <nl@li.org>\n"
@@ -26,7 +26,7 @@ msgstr "Ongeldige actie '%s' gevraagd. Deze actie bestaat niet"
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Converteren van het pad '%s' vanuit utf8 mislukt"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Uitvoeren van '%s' mislukt: %s"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "Gelieve bugs te melden bij %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Onbekende optie '%s'\n"
@@ -307,7 +307,14 @@ msgstr "Kon window manager selectie op scherm %d niet verkrijgen"
 msgid "The WM on screen %d is not exiting"
 msgstr "De window manager op scherm %d sluit zichzelf niet af"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "bureaublad %i"
@@ -327,7 +334,7 @@ msgstr "Kan de sessie niet opslaan naar '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Fout tijdens het opslaan van de sessie naar '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Starten %s\n"
index 3c9849e..eca23f5 100644 (file)
--- a/po/no.po
+++ b/po/no.po
@@ -2,14 +2,14 @@
 # Copyright (C) 2007 Dana Jansens
 # This file is distributed under the same license as the openbox package.
 #
-# Michael Kjelbergvik Thung <postlogic@switch-case.org>, 2007.
+# Michael Kjelbergvik Thung <postlogic@gmail.com>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.3\n"
+"Project-Id-Version: Openbox 3.4.6\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2007-05-20 18:41+0200\n"
-"Last-Translator: Michael Kjelbergvik Thung <postlogic@switch-case.org>\n"
+"POT-Creation-Date: 2008-01-29 13:43+0100\n"
+"PO-Revision-Date: 2008-01-29 13:37+0100\n"
+"Last-Translator: Michael Kjelbergvik Thung <postlogic@gmail.com>\n"
 "Language-Team: None\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,109 +20,109 @@ msgstr ""
 msgid "Invalid action '%s' requested. No such action exists."
 msgstr "Ugyldig operasjon '%s' etterspurt. Operasjonen finnes ikke."
 
-#: openbox/actions/execute.c:88
+#: openbox/actions/execute.c:92
 #, c-format
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Feil ved konvertering av '%s' fra utf8 "
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:101 openbox/actions/execute.c:120
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Kunne ikke kjøre '%s': %s"
 
-#: openbox/client.c:1973 openbox/client.c:2005
+#: openbox/client.c:1979 openbox/client.c:2011
 msgid "Killing..."
-msgstr ""
+msgstr "Dreper..."
 
-#: openbox/client.c:1975 openbox/client.c:2007
+#: openbox/client.c:1981 openbox/client.c:2013
 msgid "Not Responding"
-msgstr ""
+msgstr "Svarer Ikke"
 
-#: openbox/client_list_combined_menu.c:90 openbox/client_list_menu.c:93
+#: openbox/client_list_combined_menu.c:91 openbox/client_list_menu.c:94
 msgid "Go there..."
 msgstr "Gå dit..."
 
-#: openbox/client_list_combined_menu.c:96
+#: openbox/client_list_combined_menu.c:97
 msgid "Manage desktops"
 msgstr "Behandle skrivebord"
 
-#: openbox/client_list_combined_menu.c:97 openbox/client_list_menu.c:156
+#: openbox/client_list_combined_menu.c:98 openbox/client_list_menu.c:157
 msgid "_Add new desktop"
 msgstr "_Nytt skrivebord"
 
-#: openbox/client_list_combined_menu.c:98 openbox/client_list_menu.c:157
+#: openbox/client_list_combined_menu.c:99 openbox/client_list_menu.c:158
 msgid "_Remove last desktop"
 msgstr "_Fjern siste skrivebord"
 
-#: openbox/client_list_combined_menu.c:150
+#: openbox/client_list_combined_menu.c:151
 msgid "Windows"
 msgstr "Vinduer"
 
-#: openbox/client_list_menu.c:203
+#: openbox/client_list_menu.c:204
 msgid "Desktops"
 msgstr "Skrivebord"
 
-#: openbox/client_menu.c:256
+#: openbox/client_menu.c:257
 msgid "All desktops"
 msgstr "Alle skrivebord"
 
-#: openbox/client_menu.c:360
+#: openbox/client_menu.c:361
 msgid "_Layer"
 msgstr "La_g"
 
-#: openbox/client_menu.c:365
+#: openbox/client_menu.c:366
 msgid "Always on _top"
 msgstr "Alltid ø_verst"
 
-#: openbox/client_menu.c:366
+#: openbox/client_menu.c:367
 msgid "_Normal"
 msgstr "Nor_mal"
 
-#: openbox/client_menu.c:367
+#: openbox/client_menu.c:368
 msgid "Always on _bottom"
 msgstr "Alltid _nederst"
 
-#: openbox/client_menu.c:370
+#: openbox/client_menu.c:371
 msgid "_Send to desktop"
 msgstr "_Send til"
 
-#: openbox/client_menu.c:374
+#: openbox/client_menu.c:375
 msgid "Client menu"
 msgstr "Klient-meny"
 
-#: openbox/client_menu.c:384
+#: openbox/client_menu.c:385
 msgid "R_estore"
 msgstr "Tilbak_estill"
 
-#: openbox/client_menu.c:392
+#: openbox/client_menu.c:393
 msgid "_Move"
 msgstr "_Flytt"
 
-#: openbox/client_menu.c:394
+#: openbox/client_menu.c:395
 msgid "Resi_ze"
 msgstr "Endre s_tørrelse"
 
-#: openbox/client_menu.c:396
+#: openbox/client_menu.c:397
 msgid "Ico_nify"
 msgstr "_Minimer"
 
-#: openbox/client_menu.c:404
+#: openbox/client_menu.c:405
 msgid "Ma_ximize"
 msgstr "Ma_ximer"
 
-#: openbox/client_menu.c:412
+#: openbox/client_menu.c:413
 msgid "_Roll up/down"
 msgstr "_Rull opp/ned"
 
-#: openbox/client_menu.c:414
+#: openbox/client_menu.c:415
 msgid "Un/_Decorate"
 msgstr "Fjern/Legg til _dekorasjon"
 
-#: openbox/client_menu.c:418
+#: openbox/client_menu.c:419
 msgid "_Close"
 msgstr "_Lukk"
 
-#: openbox/config.c:746
+#: openbox/config.c:750
 #, c-format
 msgid "Invalid button '%s' specified in config file"
 msgstr "Ugyldig tast '%s' spesifisert i konfigurasjonsfilen"
@@ -165,49 +165,49 @@ msgstr "Ugyldig knapp '%s' i binding for mus"
 msgid "Invalid context '%s' in mouse binding"
 msgstr "Ugyldig innhold '%s' i binding for mus"
 
-#: openbox/openbox.c:130
+#: openbox/openbox.c:131
 #, c-format
 msgid "Unable to change to home directory '%s': %s"
 msgstr "Kan ikke endre til hjemmekatalogen '%s': %s"
 
-#: openbox/openbox.c:150
+#: openbox/openbox.c:151
 msgid "Failed to open the display from the DISPLAY environment variable."
 msgstr "Kunne ikke åpne displayet fra DISPLAY-miljøvariabelen"
 
-#: openbox/openbox.c:181
+#: openbox/openbox.c:182
 msgid "Failed to initialize the obrender library."
 msgstr "Kunne ikke starte obrender-biblioteket."
 
-#: openbox/openbox.c:187
+#: openbox/openbox.c:188
 msgid "X server does not support locale."
 msgstr "X-serveren støtter ikke lokalisering."
 
-#: openbox/openbox.c:189
+#: openbox/openbox.c:190
 msgid "Cannot set locale modifiers for the X server."
 msgstr "Kan ikke stille inn lokaliseringsmodifikatorene for X-serveren."
 
-#: openbox/openbox.c:252
+#: openbox/openbox.c:253
 msgid "Unable to find a valid config file, using some simple defaults"
 msgstr "Kunne ikke finne en gyldig konfigurasjonsfil, bruker standardverdier"
 
-#: openbox/openbox.c:278
+#: openbox/openbox.c:279
 msgid "Unable to load a theme."
 msgstr "Kan ikke laste et tema."
 
-#: openbox/openbox.c:405
+#: openbox/openbox.c:406
 #, c-format
 msgid "Restart failed to execute new executable '%s': %s"
 msgstr "Restart kunne ikke starte nytt program '%s': %s"
 
-#: openbox/openbox.c:475 openbox/openbox.c:477
+#: openbox/openbox.c:476 openbox/openbox.c:478
 msgid "Copyright (c)"
-msgstr ""
+msgstr "Copyright (c)"
 
-#: openbox/openbox.c:486
+#: openbox/openbox.c:487
 msgid "Syntax: openbox [options]\n"
 msgstr "Syntax: openbox [alternativer\n"
 
-#: openbox/openbox.c:487
+#: openbox/openbox.c:488
 msgid ""
 "\n"
 "Options:\n"
@@ -215,23 +215,23 @@ msgstr ""
 "\n"
 "Alternativ:\n"
 
-#: openbox/openbox.c:488
+#: openbox/openbox.c:489
 msgid "  --help              Display this help and exit\n"
 msgstr "  --help              Vise denne hjelpeteksten og avslutt\n"
 
-#: openbox/openbox.c:489
+#: openbox/openbox.c:490
 msgid "  --version           Display the version and exit\n"
 msgstr "  --version           Vis versjonsnummeret og avslutt\n"
 
-#: openbox/openbox.c:490
+#: openbox/openbox.c:491
 msgid "  --replace           Replace the currently running window manager\n"
 msgstr "  --replace           Erstatt den kjørende vindusbehandleren\n"
 
-#: openbox/openbox.c:491
+#: openbox/openbox.c:492
 msgid "  --sm-disable        Disable connection to the session manager\n"
 msgstr "  --sm-disable        Deaktiver tilkobling til sesjonsbehandleren\n"
 
-#: openbox/openbox.c:492
+#: openbox/openbox.c:493
 msgid ""
 "\n"
 "Passing messages to a running Openbox instance:\n"
@@ -239,19 +239,19 @@ msgstr ""
 "\n"
 "Sender beskjeder til en kjørende Openbox-instans:\n"
 
-#: openbox/openbox.c:493
+#: openbox/openbox.c:494
 msgid "  --reconfigure       Reload Openbox's configuration\n"
 msgstr "  --reconfigure       Oppdater Openbox' konfigurasjon\n"
 
-#: openbox/openbox.c:494
+#: openbox/openbox.c:495
 msgid "  --restart           Restart Openbox\n"
 msgstr "  --restart           Start Openbox på nytt\n"
 
-#: openbox/openbox.c:495
+#: openbox/openbox.c:496
 msgid "  --exit              Exit Openbox\n"
-msgstr ""
+msgstr "  --exit              Avslutt Openbox\n"
 
-#: openbox/openbox.c:496
+#: openbox/openbox.c:497
 msgid ""
 "\n"
 "Debugging options:\n"
@@ -259,23 +259,23 @@ msgstr ""
 "\n"
 "Debug-alternativ:\n"
 
-#: openbox/openbox.c:497
+#: openbox/openbox.c:498
 msgid "  --sync              Run in synchronous mode\n"
 msgstr "  --sync              Kjør i synkron-modus\n"
 
-#: openbox/openbox.c:498
+#: openbox/openbox.c:499
 msgid "  --debug             Display debugging output\n"
 msgstr "  --debug             Vis debuggingsinformasjon\n"
 
-#: openbox/openbox.c:499
+#: openbox/openbox.c:500
 msgid "  --debug-focus       Display debugging output for focus handling\n"
 msgstr "  --debug-focus       Vis debuggingsinformasjon for fokus-håndtering\n"
 
-#: openbox/openbox.c:500
+#: openbox/openbox.c:501
 msgid "  --debug-xinerama    Split the display into fake xinerama screens\n"
 msgstr "  -debug-xinerama    Splitt displayet for falske xinerama-skjermer\n"
 
-#: openbox/openbox.c:501
+#: openbox/openbox.c:502
 #, c-format
 msgid ""
 "\n"
@@ -284,7 +284,7 @@ msgstr ""
 "\n"
 "Vennligst rapporter bugs til %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:603
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Ugyldig kommandolinje-argument '%s'\n"
@@ -304,7 +304,14 @@ msgstr "Kunne ikke hendte vindusbehandlerens markering på skjerm %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Vindusbehandleren på skjerm %d vil ikke avslutte"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr "Openbox er innstillt til %d skrivebord, men nåværende sesjon har %d.  Benytter sesjonens innstilling."
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "skrivebord %i"
@@ -324,7 +331,7 @@ msgstr "Kan ikke lagre sesjon til '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Feil ved lagring av sesjon til '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:243
 #, c-format
 msgid "Running %s\n"
 msgstr "Kjører %s\n"
index 25b7abb..ed572b0 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,7 +26,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr ""
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr ""
@@ -277,7 +277,7 @@ msgid ""
 "Please report bugs at %s\n"
 msgstr ""
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr ""
@@ -297,7 +297,14 @@ msgstr ""
 msgid "The WM on screen %d is not exiting"
 msgstr ""
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr ""
@@ -317,7 +324,7 @@ msgstr ""
 msgid "Error while saving the session to '%s': %s"
 msgstr ""
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr ""
index 6dfc2a8..3d1003d 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-14 00:43+0200\n"
 "Last-Translator: Piotr Drąg <raven@pmail.pl>\n"
 "Language-Team: Polish <pl@li.org>\n"
@@ -27,7 +27,7 @@ msgstr ""
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Nie można przekonwertować ścieżki '%s' z UTF-8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Wykonanie '%s' nie powiodło się: %s"
@@ -291,7 +291,7 @@ msgstr ""
 "\n"
 "Proszę zgłaszać błędy (w języku angielskim) pod adresem %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Nieprawidłowy argument wiersza poleceń '%s'\n"
@@ -311,7 +311,14 @@ msgstr "Nie można uzyskać wyboru menedżera okien na ekranie %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Menedżer okien na ekranie %d nie kończy działania"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "pulpit %i"
@@ -331,7 +338,7 @@ msgstr "Nie można zapisać sesji do '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Wystąpił błąd podczas zapisywania sesji do '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Uruchamianie %s\n"
index 7005798..afaee84 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -2,14 +2,14 @@
 # Copyright (C) 2007 Mikael Magnusson
 # This file is distributed under the same license as the openbox package.
 # Gonçalo Ferreira <gonsas@gmail.com>, 2006.
-# Althaser <Althaser@gmail.com>, 2007.
+# Althaser <Althaser@gmail.com>, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.3\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2007-07-21 18:03+0200\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-22 22:17+0100\n"
 "Last-Translator: Althaser <Althaser@gmail.com>\n"
 "Language-Team: None\n"
 "MIME-Version: 1.0\n"
@@ -26,18 +26,18 @@ msgstr "Pedido de ac
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Falha a converter o caminho '%s' do utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Falha a executar '%s': %s"
 
 #: openbox/client.c:1973 openbox/client.c:2005
 msgid "Killing..."
-msgstr ""
+msgstr "Terminando..."
 
 #: openbox/client.c:1975 openbox/client.c:2007
 msgid "Not Responding"
-msgstr ""
+msgstr "Não está a responder"
 
 #: openbox/client_list_combined_menu.c:90 openbox/client_list_menu.c:93
 msgid "Go there..."
@@ -113,7 +113,7 @@ msgstr "Ma_ximizar"
 
 #: openbox/client_menu.c:412
 msgid "_Roll up/down"
-msgstr "En/Desen_rolar"
+msgstr "Des/en_rolar"
 
 #: openbox/client_menu.c:414
 msgid "Un/_Decorate"
@@ -252,7 +252,7 @@ msgstr "  --restart           Reinicia o Openbox\n"
 
 #: openbox/openbox.c:495
 msgid "  --exit              Exit Openbox\n"
-msgstr ""
+msgstr " --saida             Sai do Openbox\n"
 
 #: openbox/openbox.c:496
 msgid ""
@@ -289,7 +289,7 @@ msgstr ""
 "\n"
 "Por favor reporte erros em %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Argumento inválido na linha de comandos '%s'\n"
@@ -307,9 +307,16 @@ msgstr "N
 #: openbox/screen.c:145
 #, c-format
 msgid "The WM on screen %d is not exiting"
-msgstr "O gestor de janelas no ecrã %d não está fechando"
+msgstr "O gestor de janelas no ecrã %d não está a fechar"
+
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "área de trabalho %i"
@@ -329,7 +336,7 @@ msgstr "Incapaz de guardar a sess
 msgid "Error while saving the session to '%s': %s"
 msgstr "Erro enquanto guardava a sessão em '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Executando %s\n"
index 9eadd96..9afabaf 100644 (file)
@@ -2,15 +2,15 @@
 # Copyright (C) 2007 Mikael Magnusson
 # This file is distributed under the same license as the openbox package.
 # crimeboy, 2007.
-# Og Maciel <ogmaciel@ubuntu.com>, 2007.
+# Og Maciel <ogmaciel@gnome.org>, 2007, 2008.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.3\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2007-07-20 16:43+0200\n"
-"Last-Translator: Og Maciel <ogmaciel@ubuntu.com>\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-22 21:42+0100\n"
+"Last-Translator: Og Maciel <ogmaciel@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <gnome-l10n-br@listas.cipsga.org.br>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -27,18 +27,18 @@ msgstr "Ação inválida '%s' requisitada. Ação não existe."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Falha ao converter o caminho '%s' do utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Falha ao executar '%s': %s"
 
 #: openbox/client.c:1973 openbox/client.c:2005
 msgid "Killing..."
-msgstr ""
+msgstr "Terminando..."
 
 #: openbox/client.c:1975 openbox/client.c:2007
 msgid "Not Responding"
-msgstr ""
+msgstr "Não Responsivo"
 
 #: openbox/client_list_combined_menu.c:90 openbox/client_list_menu.c:93
 msgid "Go there..."
@@ -255,7 +255,7 @@ msgstr "  --restart           Reinicia o Openbox\n"
 
 #: openbox/openbox.c:495
 msgid "  --exit              Exit Openbox\n"
-msgstr ""
+msgstr "  --exit              Sai do Openbox\n"
 
 #: openbox/openbox.c:496
 msgid ""
@@ -293,7 +293,7 @@ msgstr ""
 "\n"
 "Por favor reporte erros em %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Argumento de linha de comando inválido '%s'\n"
@@ -314,7 +314,14 @@ msgstr ""
 msgid "The WM on screen %d is not exiting"
 msgstr "O gerenciador de janelas na tela %d não está saindo"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "área de trabalho %i"
@@ -334,7 +341,7 @@ msgstr "Não foi possível salvar a sessão em '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Erro enquanto salvando a sessão em '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Executando %s\n"
index 12c6b0c..c0b6a5b 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.3\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2007-08-17 22:36+0200\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-22 07:56+0100\n"
 "Last-Translator: Nikita Bukhvostov <dragon.djanic@gmail.com>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -19,25 +19,25 @@ msgstr ""
 #: openbox/actions.c:149
 #, c-format
 msgid "Invalid action '%s' requested. No such action exists."
-msgstr ""
+msgstr "Запрошенное действие '%s' не найдено."
 
 #: openbox/actions/execute.c:88
 #, c-format
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Не удалось сконвертировать путь '%s' из utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Не удалось запустить '%s': %s"
 
 #: openbox/client.c:1973 openbox/client.c:2005
 msgid "Killing..."
-msgstr ""
+msgstr "Завершение..."
 
 #: openbox/client.c:1975 openbox/client.c:2007
 msgid "Not Responding"
-msgstr ""
+msgstr "Не отвечает"
 
 #: openbox/client_list_combined_menu.c:90 openbox/client_list_menu.c:93
 msgid "Go there..."
@@ -252,7 +252,7 @@ msgstr "  --restart           Перезапустить Openbox\n"
 
 #: openbox/openbox.c:495
 msgid "  --exit              Exit Openbox\n"
-msgstr ""
+msgstr "  --exit              Выход из Openbox\n"
 
 #: openbox/openbox.c:496
 msgid ""
@@ -289,7 +289,7 @@ msgstr ""
 "\n"
 "Пожалуйста, сообщайте об ошибках на %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Некорректный командный параметр '%s'\n"
@@ -309,7 +309,14 @@ msgstr "Не могу получить выбор менеджера окон н
 msgid "The WM on screen %d is not exiting"
 msgstr "Менеджер окон на экране %d не завершается"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "рабочий стол %i"
@@ -329,7 +336,7 @@ msgstr "Не могу сохранить сессию в '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Ошибка при сохранении сессии в '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Запущен %s\n"
index 0cb0823..8e11278 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox-3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-12-7 13:43Central Europe Daylight Time\n"
 "Last-Translator: Jozef Riha <jose1711@gmail.com\n"
 "Language-Team: Slovak <sk@sk.org>\n"
@@ -25,7 +25,7 @@ msgstr "Vyžiadaná neplatná akcia '%s'. Takáto akcia neexistuje."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Nepodarilo sa skonvertovať cestu '%s' z utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Nepodarilo sa spustiť '%s': %s"
@@ -251,9 +251,8 @@ msgid "  --restart           Restart Openbox\n"
 msgstr "  --restart           Restartuje Openbox\n"
 
 #: openbox/openbox.c:495
-#, fuzzy
 msgid "  --exit              Exit Openbox\n"
-msgstr "  --restart           Restartuje Openbox\n"
+msgstr ""
 
 #: openbox/openbox.c:496
 msgid ""
@@ -289,7 +288,7 @@ msgstr ""
 "\n"
 "Prosim hlaste chyby na %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Neplatny parameter prikazoveho riadku '%s'\n"
@@ -309,7 +308,14 @@ msgstr "Nepodarilo sa získať výber okenného manažéra na obrazovke %d"
 msgid "The WM on screen %d is not exiting"
 msgstr "Okenný manažér na obrazovke %d sa neukončuje"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "plocha %i"
@@ -329,7 +335,7 @@ msgstr "Nepodarilo sa uložiť sedenie '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Chyba pri ukladaní sedenia do '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Spúšťam %s\n"
index 6c971e9..d00ba87 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.6\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
-"PO-Revision-Date: 2008-01-17 22:19+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
+"PO-Revision-Date: 2008-01-25 03:52+0100\n"
 "Last-Translator: Mikael Magnusson <mikachu@icculus.org>\n"
 "Language-Team: None\n"
 "MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgstr "Ogiltig action '%s' efterfr
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Lyckades inte konvertera sökvägen '%s' från utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Kunde inte exekvera '%s': %s"
@@ -285,7 +285,7 @@ msgstr ""
 "\n"
 "Rapportera buggar till %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Ogiltigt kommandoradsargument '%s'\n"
@@ -305,7 +305,16 @@ msgstr "Kunde inte erh
 msgid "The WM on screen %d is not exiting"
 msgstr "Fönsterhanteraren på skärm %d avslutar inte"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+"Openbox är inställt på %d skrivbord, men nuvarande session har %d.  Använder "
+"sessionens inställning."
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "skrivbord %i"
@@ -325,7 +334,7 @@ msgstr "Kunde inte spara sessionen till '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Fel inträffade när sessionen skulle sparas till '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Kör %s\n"
index 225e487..798c4fe 100644 (file)
--- a/po/ua.po
+++ b/po/ua.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+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"
@@ -25,7 +25,7 @@ msgstr "Здійснено запит на некоректну дію '%s'. Н
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Не вдалося сконвертувати шлях '%s' з utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Невдалося виконати '%s': %s"
@@ -288,7 +288,7 @@ msgstr ""
 "\n"
 "Будь-ласка, повідомляйте про помилки на %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Некоректний командний аргумент '%s'\n"
@@ -308,7 +308,14 @@ msgstr "Не можу отримати вибір менеджера вікон
 msgid "The WM on screen %d is not exiting"
 msgstr "Менеджео вікон на дисплеї %d не завершується"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "стільниця %i"
@@ -328,7 +335,7 @@ msgstr "Не вдалося зберегти сесію в '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Помилка при збереженні сесії в '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Виконується %s\n"
index fa7b324..43cb060 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-17 23:08+0100\n"
 "Last-Translator: Quan Tran <qeed.quan@gmail.com>\n"
 "Language-Team: None\n"
@@ -25,7 +25,7 @@ msgstr "Hành động '%s' làm không được. Hành động đó không có."
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "Không thể chuyển chỗ '%s' từ utf8"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "Làm không được '%s': %s"
@@ -286,7 +286,7 @@ msgstr ""
 "\n"
 "Làm ơn báo cáo bugs ở chỗ %s\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "Mệnh lệnh viết sai '%s'\n"
@@ -306,7 +306,14 @@ msgstr "Không thể lấy được chương trình quản lý cửa sổ ở tr
 msgid "The WM on screen %d is not exiting"
 msgstr "Chương trình quản lý cửa sổ trên màn hình %d không đi ra"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "chỗ làm việc %i"
@@ -326,7 +333,7 @@ msgstr "Không thể tiết kiệm thời kỳ cho '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "Bĩ trục chật lúc tiết kiệm thời kỳ cho '%s': %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "Đan Chạy %s\n"
index c4e9835..9c9de59 100644 (file)
@@ -6,9 +6,9 @@
 # Shaodong Di <gnuyhlfh@gmail.com>, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: Openbox 3.4.6\n"
+"Project-Id-Version: Openbox 3.4.5\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2008-01-18 15:02+0100\n"
 "Last-Translator: Shaodong Di <gnuyhlfh@gmail.com>\n"
 "Language-Team: 简体中文\n"
@@ -26,7 +26,7 @@ msgstr "请求的动作 '%s' 无效。该动作不存在。"
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "从 utf8 转换路径 '%s' 时失败"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "执行 '%s' 时失败: %s"
@@ -285,7 +285,7 @@ msgstr ""
 "\n"
 "请向 %s 报告错误\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "无效的命令行参数 '%s'\n"
@@ -305,7 +305,14 @@ msgstr "在屏幕 %d 无法被选为窗口管理器"
 msgid "The WM on screen %d is not exiting"
 msgstr "屏幕 %d 的窗口管理器没有退出"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "桌面 %i"
@@ -325,7 +332,7 @@ msgstr "无法保存会话到 '%s': %s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "在保存会话到 '%s' 时出错: %s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "运行 %s\n"
index 8b3cb32..c0217bf 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Openbox 3.4.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2008-01-17 22:13+0100\n"
+"POT-Creation-Date: 2008-01-25 03:51+0100\n"
 "PO-Revision-Date: 2007-07-23 23:22+0200\n"
 "Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -26,7 +26,7 @@ msgstr "要求的動作「%s」無效。無此類動作存在。"
 msgid "Failed to convert the path '%s' from utf8"
 msgstr "轉換路徑「%s」自 utf8 時失敗"
 
-#: openbox/actions/execute.c:97 openbox/actions/execute.c:115
+#: openbox/actions/execute.c:97 openbox/actions/execute.c:116
 #, c-format
 msgid "Failed to execute '%s': %s"
 msgstr "執行「%s」時失敗:%s"
@@ -285,7 +285,7 @@ msgstr ""
 "\n"
 "請向 %s 報告錯誤\n"
 
-#: openbox/openbox.c:604
+#: openbox/openbox.c:602
 #, c-format
 msgid "Invalid command line argument '%s'\n"
 msgstr "無效的命令列引數「%s」\n"
@@ -305,7 +305,14 @@ msgstr "無法於螢幕 %d 獲選為視窗管理員"
 msgid "The WM on screen %d is not exiting"
 msgstr "螢幕 %d 中的視窗管理員並未離開"
 
-#: openbox/screen.c:1162
+#: openbox/screen.c:407
+#, c-format
+msgid ""
+"Openbox is configured for %d desktops, but the current session has %d.  "
+"Overriding the Openbox configuration."
+msgstr ""
+
+#: openbox/screen.c:1168
 #, c-format
 msgid "desktop %i"
 msgstr "桌面 %i"
@@ -325,7 +332,7 @@ msgstr "無法儲存執行階段到「%s」:%s"
 msgid "Error while saving the session to '%s': %s"
 msgstr "當儲存執行階段「%s」時發生錯誤:%s"
 
-#: openbox/startupnotify.c:237
+#: openbox/startupnotify.c:241
 #, c-format
 msgid "Running %s\n"
 msgstr "正在運行 %s\n"
index 63b8e94..6439b30 100644 (file)
@@ -2,7 +2,7 @@
 
    gradient.c for the Openbox window manager
    Copyright (c) 2006        Mikael Magnusson
-   Copyright (c) 2003-2007   Dana Jansens
+   Copyright (c) 2003-2008   Dana Jansens
    Copyright (c) 2003        Derek Foreman
 
    This program is free software; you can redistribute it and/or modify
@@ -22,6 +22,7 @@
 #include "gradient.h"
 #include "color.h"
 #include <glib.h>
+#include <string.h>
 
 static void highlight(RrSurface *s, RrPixel32 *x, RrPixel32 *y,
                       gboolean raised);
@@ -483,64 +484,60 @@ static void gradient_horizontal(RrSurface *sf, gint w, gint h)
 {
     gint x, y;
     RrPixel32 *data = sf->pixel_data, *datav;
-    RrPixel32 current;
 
     VARS(x);
     SETUP(x, sf->primary, sf->secondary, w);
 
-    for (x = w - 1; x > 0; --x) {  /* 0 -> w-1 */
-        current = COLOR(x);
-        datav = data;
-        for (y = h - 1; y >= 0; --y) {  /* 0 -> h */
-            *datav = current;
-            datav += w;
-        }
-        ++data;
-
+    datav = data;
+    for (x = w - 1; x > 0; --x) {  /* 0 -> w - 1 */
+        *datav = COLOR(x);
+        ++datav;
         NEXT(x);
     }
-    current = COLOR(x);
-    for (y = h - 1; y >= 0; --y)  /* 0 -> h */
-        *(data + y * w) = current;
+    *datav = COLOR(x);
+    ++datav;
+
+    for (y = h - 1; y > 0; --y) { /* 1 -> h */
+        memcpy(datav, data, w * sizeof(RrPixel32));
+        datav += w;
+    }
 }
 
 static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h)
 {
-    gint x, y;
+    gint x, y, half1, half2;
     RrPixel32 *data = sf->pixel_data, *datav;
-    RrPixel32 current;
 
     VARS(x);
-    SETUP(x, sf->primary, sf->secondary, w/2);
 
-    if (w > 1) {
-        for (x = w - 1; x > w/2-1; --x) {  /* 0 -> w-1 */
-            current = COLOR(x);
-            datav = data;
-            for (y = h - 1; y >= 0; --y) {  /* 0 -> h */
-                *datav = current;
-                datav += w;
-            }
-            ++data;
+    half1 = (w + 1) / 2;
+    half2 = w / 2;
 
+    SETUP(x, sf->primary, sf->secondary, half1);
+    datav = data;
+    for (x = half1 - 1; x > 0; --x) {  /* 0 -> half1 - 1 */
+        *datav = COLOR(x);
+        ++datav;
+        NEXT(x);
+    }
+    *datav = COLOR(x);
+    ++datav;
+
+    if (half2 > 0) {
+        SETUP(x, sf->secondary, sf->primary, half2);
+        for (x = half2 - 1; x > 0; --x) {  /* 0 -> half2 - 1 */
+            *datav = COLOR(x);
+            ++datav;
             NEXT(x);
         }
-        SETUP(x, sf->secondary, sf->primary, w/2);
-        for (x = w/2 - 1; x > 0; --x) {  /* 0 -> w-1 */
-            current = COLOR(x);
-            datav = data;
-            for (y = h - 1; y >= 0; --y) {  /* 0 -> h */
-                *datav = current;
-                datav += w;
-            }
-            ++data;
+        *datav = COLOR(x);
+        ++datav;
+    }
 
-            NEXT(x);
-        }
+    for (y = h - 1; y > 0; --y) {  /* 1 -> h */
+        memcpy(datav, data, w * sizeof(RrPixel32));
+        datav += w;
     }
-    current = COLOR(x);
-    for (y = h - 1; y >= 0; --y)  /* 0 -> h */
-        *(data + y * w) = current;
 }
 
 static void gradient_vertical(RrSurface *sf, gint w, gint h)
index 87f264d..d644a92 100644 (file)
@@ -1455,6 +1455,7 @@ void RrThemeFree(RrTheme *theme)
         RrFontClose(theme->win_font_unfocused);
         RrFontClose(theme->menu_title_font);
         RrFontClose(theme->menu_font);
+        RrFontClose(theme->osd_font);
 
         RrAppearanceFree(theme->a_disabled_focused_max);
         RrAppearanceFree(theme->a_disabled_unfocused_max);
diff --git a/themes/Clearlooks-3.4/openbox-3/themerc b/themes/Clearlooks-3.4/openbox-3/themerc
new file mode 100644 (file)
index 0000000..05e8922
--- /dev/null
@@ -0,0 +1,126 @@
+# Name: Clearlooks
+# Author: John McKnight <jmcknight@gmail.com>
+# Note: This is a port of the Clearlooks metacity theme to Openbox.
+
+### Menu
+#menu.border.color: #b5aa99
+
+menu.title.bg: Flat Border Gradient Vertical
+menu.title.bg.color: #589bda
+menu.title.bg.colorTo: #3c7cb7
+menu.title.bg.border.color: #7cb6ec
+menu.title.text.color: #ffffff
+menu.title.text.justify: Center
+
+menu.items.bg: Flat Solid
+menu.items.bg.color: #fcfbfa
+menu.items.text.color: #000000
+menu.items.disable.text.color: #b5b3ac
+
+menu.items.active.bg: Flat Gradient Vertical
+menu.items.active.bg.color: #5c9edb
+menu.items.active.bg.colorTo: #4489ca
+menu.items.active.text.color: #ffffff
+
+
+### Window active
+window.active.title.bg: Flat Border Gradient Vertical
+window.active.title.bg.color: #589bda
+window.active.title.bg.colorTo: #3c7cb7
+window.active.title.bg.border.color: #7cb6ec
+window.active.title.separator.color: #334c62
+
+window.active.label.bg: Parentrelative
+window.active.label.text.color: #ffffff
+
+window.active.handle.bg: Flat Border Solid
+window.active.handle.bg.color: #3c7cb7
+window.active.handle.bg.border.color: #7cb6ec
+
+window.active.grip.bg: Flat Border Solid
+window.active.grip.bg.color: #3c7cb7
+window.active.grip.bg.border.color: #7cb6ec
+
+window.active.button.unpressed.bg: Flat Border Gradient Vertical
+window.active.button.unpressed.bg.color: #5ea0dd
+window.active.button.unpressed.bg.colorTo: #3f85c5
+window.active.button.unpressed.bg.border.color: #36536f
+window.active.button.unpressed.image.color: #ffffff
+
+window.active.button.pressed.bg: Flat Border Gradient Vertical
+window.active.button.pressed.bg.color: #3c82c3
+window.active.button.pressed.bg.colorTo: #3c7ab5
+window.active.button.pressed.bg.border.color: #36536f
+window.active.button.pressed.image.color: #ffffff
+
+window.active.button.disabled.bg: Flat Border Gradient Vertical
+window.active.button.disabled.bg.color: #3c82c3
+window.active.button.disabled.bg.colorTo: #3c7ab5
+window.active.button.disabled.bg.border.color: #36536f
+window.active.button.disabled.image.color: #36536f
+
+window.active.button.toggled.bg: Flat Border Gradient Vertical
+window.active.button.toggled.bg.color: #5ea0dd
+window.active.button.toggled.bg.colorTo: #3f85c5
+window.active.button.toggled.bg.border.color: #36536f
+window.active.button.toggled.image.color: #dcd4c9
+
+
+### Window inactive
+window.inactive.border.color: #3d3a37
+
+window.inactive.title.bg: Flat Border Gradient Vertical
+window.inactive.title.bg.color: #efece6
+window.inactive.title.bg.colorTo: #d9d2c7
+window.inactive.title.bg.border.color: #ffffff
+window.inactive.title.separator.color: #9a8e7c
+
+window.inactive.label.bg: Parentrelative
+window.inactive.label.text.color: #000000
+
+window.inactive.handle.bg: Flat Border Solid
+window.inactive.handle.bg.color: #d9d2c7
+window.inactive.handle.bg.border.color: #ffffff
+
+window.inactive.grip.bg: Flat Border Solid
+window.inactive.grip.bg.color: #d9d2c7
+window.inactive.grip.bg.border.color: #ffffff
+
+window.inactive.button.unpressed.bg: Flat Border Gradient Vertical
+window.inactive.button.unpressed.bg.color: #ede9e3
+window.inactive.button.unpressed.bg.colorTo: #dbd5ca
+window.inactive.button.unpressed.bg.border.color: #8f8370
+window.inactive.button.unpressed.image.color: #000000
+
+window.inactive.button.pressed.bg: Flat Border Gradient Vertical
+window.inactive.button.pressed.bg.color: #ede9e3
+window.inactive.button.pressed.bg.colorTo: #dbd5ca
+window.inactive.button.pressed.bg.border.color: #8f8370
+window.inactive.button.pressed.image.color: #000000
+
+window.inactive.button.disabled.bg: Flat Border Gradient Vertical
+window.inactive.button.disabled.bg.color: #ede9e3
+window.inactive.button.disabled.bg.colorTo: #dbd5ca
+window.inactive.button.disabled.bg.border.color: #8f8370
+window.inactive.button.disabled.image.color: #000000
+
+window.inactive.button.toggled.bg: Flat Border Gradient Vertical
+window.inactive.button.toggled.bg.color: #ede9e3
+window.inactive.button.toggled.bg.colorTo: #dbd5ca
+window.inactive.button.toggled.bg.border.color: #8f8370
+window.inactive.button.toggled.image.color: #000000
+
+
+### Everything else
+border.width: 1
+padding.width: 2
+window.handle.width: 4
+window.client.padding.width: 0
+border.color: #1f252b
+menu.overlap: 0
+
+### Fonts
+window.active.label.text.font:
+window.inactive.label.text.font:
+menu.items.font:
+menu.title.text.font:
index 05e8922..21be4e8 100644 (file)
-# Name: Clearlooks
-# Author: John McKnight <jmcknight@gmail.com>
-# Note: This is a port of the Clearlooks metacity theme to Openbox.
+! Clearlooks Evolving
+! Clearlooks as it evolves in gnome-svn...
 
-### Menu
-#menu.border.color: #b5aa99
+# Fonts
+# these are really halos, but who cares?
+
+window.active.label.text.font:shadow=y:shadowtint=45:shadowoffset=1
+window.inactive.label.text.font:shadow=y:shadowtint=00:shadowoffset=0
+menu.title.text.font:shadow=y:shadowtint=20:shadowoffset=1
+menu.items.font:shadow=y:shadowtint=0:shadowoffset=2
+# lettuce set some stuff
+
+border.width: 1
+padding.width: 3
+padding.height: 2
+window.handle.width: 3
+window.client.padding.width: 0
+menu.overlap: 0
+*.justify: center
+*.bg.highlight: 50
+*.bg.shadow:    01
+
+# Menu settings
+
+menu.border.color: #aaaaaa
+menu.border.width: 1
+
+*.title.bg: Raised Gradient splitvertical
+*.title.bg.color: #8fb2de
+*.title.bg.color.splitTo: #9ebde5
+*.title.bg.colorTo: #86abd9
+*.title.bg.colorTo.splitTo: #749dcf
 
-menu.title.bg: Flat Border Gradient Vertical
-menu.title.bg.color: #589bda
-menu.title.bg.colorTo: #3c7cb7
-menu.title.bg.border.color: #7cb6ec
 menu.title.text.color: #ffffff
-menu.title.text.justify: Center
 
 menu.items.bg: Flat Solid
-menu.items.bg.color: #fcfbfa
-menu.items.text.color: #000000
-menu.items.disable.text.color: #b5b3ac
+menu.items.bg.color: #ffffff
+menu.items.text.color: #444444
+menu.items.disabled.text.color: #aaaaaa
+
+menu.items.active.bg: Flat Gradient splitvertical border
+
+menu.items.active.bg.color: #97b8e2
+menu.items.active.bg.color.splitTo: #a8c5e9
 
-menu.items.active.bg: Flat Gradient Vertical
-menu.items.active.bg.color: #5c9edb
-menu.items.active.bg.colorTo: #4489ca
+menu.items.active.bg.colorTo: #91b3de
+menu.items.active.bg.colorTo.splitTo: #80a7d6
+menu.items.active.bg.border.color: #4b6e99
 menu.items.active.text.color: #ffffff
 
+# start with the active
+!# no handles 
+#window.active.border.color: #455d7c
+!# handles
+window.active.border.color: #686a6d
+window.active.title.separator.color: #4e76a8
+!!!
+
+#window.active.title.bg: Raised Gradient splitvertical
+#window.active.title.bg.color: #8db0dd
+#window.active.title.bg.color.splitTo: #9ebde5
+#window.active.title.bg.colorTo: #86abd9
+#window.active.title.bg.colorTo.splitTo: #749dcf
+
+
+window.active.title.bg: Raised Gradient splitvertical
+window.active.title.bg.color: #8fb2de
+window.active.title.bg.color.splitTo: #9ebde5
+window.active.title.bg.colorTo: #86abd9
+window.active.title.bg.colorTo.splitTo: #749dcf
 
-### Window active
-window.active.title.bg: Flat Border Gradient Vertical
-window.active.title.bg.color: #589bda
-window.active.title.bg.colorTo: #3c7cb7
-window.active.title.bg.border.color: #7cb6ec
-window.active.title.separator.color: #334c62
+
+window.active.title.bg.highlight: 35
+window.active.title.bg.shadow:    00
 
 window.active.label.bg: Parentrelative
 window.active.label.text.color: #ffffff
 
-window.active.handle.bg: Flat Border Solid
-window.active.handle.bg.color: #3c7cb7
-window.active.handle.bg.border.color: #7cb6ec
 
-window.active.grip.bg: Flat Border Solid
-window.active.grip.bg.color: #3c7cb7
-window.active.grip.bg.border.color: #7cb6ec
+window.active.button.*.bg: Flat Gradient splitvertical Border
 
-window.active.button.unpressed.bg: Flat Border Gradient Vertical
-window.active.button.unpressed.bg.color: #5ea0dd
-window.active.button.unpressed.bg.colorTo: #3f85c5
-window.active.button.unpressed.bg.border.color: #36536f
-window.active.button.unpressed.image.color: #ffffff
+#window.active.button.*.bg.color: #94B5E0
+window.active.button.*.bg.color: #97b8e1
+window.active.button.*.bg.color.splitTo: #B7D0EF
+window.active.button.*.bg.colorTo: #86ABD9
+window.active.button.*.bg.colorTo.splitTo: #7099CC
+#window.active.button.*.bg.border.color: #4F77A9
+!#this is the real colour, but hey...
+window.active.button.*.bg.border.color: #49678B
+window.active.button.*.image.color: #F4F5F6
 
-window.active.button.pressed.bg: Flat Border Gradient Vertical
-window.active.button.pressed.bg.color: #3c82c3
-window.active.button.pressed.bg.colorTo: #3c7ab5
-window.active.button.pressed.bg.border.color: #36536f
-window.active.button.pressed.image.color: #ffffff
+window.active.button.hover.bg.color: #b5d3ef
+window.active.button.hover.bg.color.splitTo: #b5d3ef
+window.active.button.hover.bg.colorTo: #9cbae7
+window.active.button.hover.bg.colorTo.splitTo: #8caede
+window.active.button.hover.bg.border.color: #4A658C
+window.active.button.hover.image.color: #ffffff
 
-window.active.button.disabled.bg: Flat Border Gradient Vertical
-window.active.button.disabled.bg.color: #3c82c3
-window.active.button.disabled.bg.colorTo: #3c7ab5
-window.active.button.disabled.bg.border.color: #36536f
-window.active.button.disabled.image.color: #36536f
+window.active.button.pressed.bg: Flat solid Border
+window.active.button.pressed.bg.color: #7aa1d2
 
-window.active.button.toggled.bg: Flat Border Gradient Vertical
-window.active.button.toggled.bg.color: #5ea0dd
-window.active.button.toggled.bg.colorTo: #3f85c5
-window.active.button.toggled.bg.border.color: #36536f
-window.active.button.toggled.image.color: #dcd4c9
+window.active.button.hover.bg.border.color: #4A658C
 
+# inactive
 
-### Window inactive
-window.inactive.border.color: #3d3a37
+window.inactive.border.color: #7e8285
+window.inactive.title.separator.color: #96999d
 
-window.inactive.title.bg: Flat Border Gradient Vertical
-window.inactive.title.bg.color: #efece6
-window.inactive.title.bg.colorTo: #d9d2c7
-window.inactive.title.bg.border.color: #ffffff
-window.inactive.title.separator.color: #9a8e7c
+window.inactive.title.bg: Raised Gradient splitvertical
+window.inactive.title.bg.color: #e0e2e3
+window.inactive.title.bg.color.splitTo: #e9eaeb
+window.inactive.title.bg.colorTo: #dadcde
+window.inactive.title.bg.colorTo.splitTo: #d0d2d4
+window.inactive.title.bg.highlight: 30
+window.inactive.title.bg.shadow:    00
 
 window.inactive.label.bg: Parentrelative
-window.inactive.label.text.color: #000000
-
-window.inactive.handle.bg: Flat Border Solid
-window.inactive.handle.bg.color: #d9d2c7
-window.inactive.handle.bg.border.color: #ffffff
-
-window.inactive.grip.bg: Flat Border Solid
-window.inactive.grip.bg.color: #d9d2c7
-window.inactive.grip.bg.border.color: #ffffff
-
-window.inactive.button.unpressed.bg: Flat Border Gradient Vertical
-window.inactive.button.unpressed.bg.color: #ede9e3
-window.inactive.button.unpressed.bg.colorTo: #dbd5ca
-window.inactive.button.unpressed.bg.border.color: #8f8370
-window.inactive.button.unpressed.image.color: #000000
-
-window.inactive.button.pressed.bg: Flat Border Gradient Vertical
-window.inactive.button.pressed.bg.color: #ede9e3
-window.inactive.button.pressed.bg.colorTo: #dbd5ca
-window.inactive.button.pressed.bg.border.color: #8f8370
-window.inactive.button.pressed.image.color: #000000
-
-window.inactive.button.disabled.bg: Flat Border Gradient Vertical
-window.inactive.button.disabled.bg.color: #ede9e3
-window.inactive.button.disabled.bg.colorTo: #dbd5ca
-window.inactive.button.disabled.bg.border.color: #8f8370
-window.inactive.button.disabled.image.color: #000000
-
-window.inactive.button.toggled.bg: Flat Border Gradient Vertical
-window.inactive.button.toggled.bg.color: #ede9e3
-window.inactive.button.toggled.bg.colorTo: #dbd5ca
-window.inactive.button.toggled.bg.border.color: #8f8370
-window.inactive.button.toggled.image.color: #000000
-
-
-### Everything else
-border.width: 1
-padding.width: 2
-window.handle.width: 4
-window.client.padding.width: 0
-border.color: #1f252b
-menu.overlap: 0
+window.inactive.label.text.color: #70747d
+
+window.*.handle.bg: Raised solid
+window.*.handle.bg.color: #eaebec
+
+window.*.grip.bg: Raised solid
+window.*.grip.bg.color: #eaebec
+
+window.inactive.button.*.bg: Flat Gradient splitVertical Border
+window.inactive.button.*.bg.color: #ffffff
+window.inactive.button.*.bg.color.splitto: #f8f8f9
+window.inactive.button.*.bg.colorTo: #f4f4f5
+window.inactive.button.*.bg.colorTo.splitto: #dfe1e2
+window.inactive.button.*.bg.border.color: #8a8e91
+window.inactive.button.*.image.color: #757676
+
+
+!#osd
+
+osd.border.width: 1
+osd.border.color:  #5c5e5c
+
+osd.bg: flat border gradient splitvertical
+osd.bg.color: #EEEFF0
+osd.bg.color.splitto: #EEEFF0
+osd.bg.colorTo: #EAEBEC
+osd.bg.colorTo.splitto: #EAEBEC
+
+osd.bg.border.color: #ffffff
+
+osd.label.bg: parentrelative
+osd.label.bg.color: #efefef
+osd.label.bg.border.color: #9c9e9c
 
-### Fonts
-window.active.label.text.font:
-window.inactive.label.text.font:
-menu.items.font:
-menu.title.text.font:
+osd.label.text.color: #444
+!# yeah whatever, this is fine anyhoo?
+osd.hilight.bg: flat vertical gradient 
+osd.hilight.bg.color: #9ebde5
+osd.hilight.bg.colorTo: #749dcf
+osd.unhilight.bg: flat vertical gradient
+osd.unhilight.bg.color: #BABDB6
+osd.unhilight.bg.colorTo: #efefef