diff --git a/Makefile.am b/Makefile.am
index f25bf8e73..ada8ce977 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -210,6 +210,7 @@ openbox_openbox_SOURCES = \
openbox/actions/execute.c \
openbox/actions/exit.c \
openbox/actions/focus.c \
+ openbox/actions/focusfallback.c \
openbox/actions/focustobottom.c \
openbox/actions/fullscreen.c \
openbox/actions/growtoedge.c \
@@ -226,6 +227,7 @@ openbox_openbox_SOURCES = \
openbox/actions/omnipresent.c \
openbox/actions/raise.c \
openbox/actions/raiselower.c \
+ openbox/actions/raisetemp.c \
openbox/actions/reconfigure.c \
openbox/actions/resize.c \
openbox/actions/resizerelative.c \
diff --git a/data/rc.xml b/data/rc.xml
index 3e5554bad..e25b6007b 100644
--- a/data/rc.xml
+++ b/data/rc.xml
@@ -240,7 +240,7 @@
-
+
@@ -347,7 +347,7 @@
-
+
@@ -384,7 +384,7 @@
-
+
@@ -410,7 +410,7 @@
-
+
diff --git a/obrender/font.c b/obrender/font.c
index 47606aee2..3c6279267 100644
--- a/obrender/font.c
+++ b/obrender/font.c
@@ -113,7 +113,10 @@ RrFont *RrFontOpen(const RrInstance *inst, const gchar *name, gint size,
pango_font_description_set_family(out->font_desc, name);
pango_font_description_set_weight(out->font_desc, pweight);
pango_font_description_set_style(out->font_desc, pstyle);
- pango_font_description_set_size(out->font_desc, size * PANGO_SCALE);
+ if (size < 0)
+ pango_font_description_set_absolute_size(out->font_desc, -size * PANGO_SCALE);
+ else
+ pango_font_description_set_size(out->font_desc, size * PANGO_SCALE);
/* setup the layout */
pango_layout_set_font_description(out->layout, out->font_desc);
diff --git a/obrender/image.c b/obrender/image.c
index cffbaf381..ec626a9a0 100644
--- a/obrender/image.c
+++ b/obrender/image.c
@@ -73,7 +73,7 @@ static RrImagePic* RrImagePicNew(gint w, gint h, RrPixel32 *data)
RrImagePic *pic;
pic = g_slice_new(RrImagePic);
- RrImagePicInit(pic, w, h, g_memdup(data, w*h*sizeof(RrPixel32)));
+ RrImagePicInit(pic, w, h, g_memdup2(data, (gsize)(w*h*sizeof(RrPixel32))));
return pic;
}
@@ -540,32 +540,36 @@ RsvgLoader* LoadWithRsvg(gchar *path,
{
RsvgLoader *loader = g_slice_new0(RsvgLoader);
- if (!(loader->handle = rsvg_handle_new_from_file(path, NULL))) {
- DestroyRsvgLoader(loader);
+ GFile *rsvg_handle_file = g_file_new_for_path( (const char*)path );
+ if ( rsvg_handle_new_from_gfile_sync(rsvg_handle_file, RSVG_HANDLE_FLAG_KEEP_IMAGE_DATA, NULL, NULL) == NULL ){
+ DestroyRsvgLoader( loader );
+ g_object_unref( rsvg_handle_file );
return NULL;
}
+ g_object_unref( rsvg_handle_file );
- if (!rsvg_handle_close(loader->handle, NULL)) {
- DestroyRsvgLoader(loader);
+ if ( rsvg_handle_get_intrinsic_size_in_pixels(loader->handle, (gdouble*)width, (gdouble*)height) == FALSE ){
+ DestroyRsvgLoader( loader );
return NULL;
}
- RsvgDimensionData dimension_data;
- rsvg_handle_get_dimensions(loader->handle, &dimension_data);
- *width = dimension_data.width;
- *height = dimension_data.height;
-
loader->surface = cairo_image_surface_create(
CAIRO_FORMAT_ARGB32, *width, *height);
cairo_t* context = cairo_create(loader->surface);
- gboolean success = rsvg_handle_render_cairo(loader->handle, context);
- cairo_destroy(context);
-
- if (!success) {
- DestroyRsvgLoader(loader);
+ RsvgRectangle *rsvg_rect = g_slice_new0( RsvgRectangle );
+ rsvg_rect->x = 0;
+ rsvg_rect->y = 0;
+ rsvg_rect->width = *(gdouble*)width;
+ rsvg_rect->height = *(gdouble*)height;
+ if ( rsvg_handle_render_document(loader->handle, context, (const RsvgRectangle*)rsvg_rect, NULL) == FALSE ){
+ g_slice_free( RsvgRectangle, rsvg_rect );
+ cairo_destroy( context );
+ DestroyRsvgLoader( loader );
return NULL;
}
+ g_slice_free( RsvgRectangle, rsvg_rect );
+ cairo_destroy(context);
loader->pixel_data = g_new(guint32, *width * *height);
diff --git a/obrender/instance.c b/obrender/instance.c
index e1049388f..08bde9e55 100644
--- a/obrender/instance.c
+++ b/obrender/instance.c
@@ -64,7 +64,7 @@ RrInstance* RrInstanceNew (Display *display, gint screen)
definst->depth = DefaultDepth(display, screen);
definst->visual = DefaultVisual(display, screen);
definst->colormap = DefaultColormap(display, screen);
- definst->pango = pango_xft_get_context(display, screen);
+ definst->pango = pango_font_map_create_context( pango_xft_get_font_map(display, (int)screen) );
definst->pseudo_colors = NULL;
diff --git a/obrender/mask.c b/obrender/mask.c
index 506d5b28a..b4f5e31e5 100644
--- a/obrender/mask.c
+++ b/obrender/mask.c
@@ -29,7 +29,7 @@ RrPixmapMask *RrPixmapMaskNew(const RrInstance *inst,
m->width = w;
m->height = h;
/* round up to nearest byte */
- m->data = g_memdup(data, (w + 7) / 8 * h);
+ m->data = g_memdup2(data, (gsize)((w + 7) / 8 * h));
m->mask = XCreateBitmapFromData(RrDisplay(inst), RrRootWindow(inst),
data, w, h);
return m;
@@ -75,7 +75,7 @@ RrPixmapMask *RrPixmapMaskCopy(const RrPixmapMask *src)
m->width = src->width;
m->height = src->height;
/* round up to nearest byte */
- m->data = g_memdup(src->data, (src->width + 7) / 8 * src->height);
+ m->data = g_memdup2(src->data, (gsize)((src->width + 7) / 8 * src->height));
m->mask = XCreateBitmapFromData(RrDisplay(m->inst), RrRootWindow(m->inst),
m->data, m->width, m->height);
return m;
diff --git a/obrender/render.c b/obrender/render.c
index fe9a2a80d..fa56b6666 100644
--- a/obrender/render.c
+++ b/obrender/render.c
@@ -310,8 +310,8 @@ RrAppearance *RrAppearanceCopy(RrAppearance *orig)
spc->pixel_data = NULL;
copy->textures = orig->textures;
- copy->texture = g_memdup(orig->texture,
- orig->textures * sizeof(RrTexture));
+ copy->texture = g_memdup2(orig->texture,
+ (gsize)(orig->textures * sizeof(RrTexture)));
copy->pixmap = None;
copy->xftdraw = NULL;
copy->w = copy->h = 0;
diff --git a/obrender/theme.c b/obrender/theme.c
index 2a4f6e105..29f1f4b71 100644
--- a/obrender/theme.c
+++ b/obrender/theme.c
@@ -1443,7 +1443,7 @@ static RrPixel32* read_c_image(gint width, gint height, const guint8 *data)
RrPixel32 *im, *p;
gint i;
- p = im = g_memdup(data, width * height * sizeof(RrPixel32));
+ p = im = g_memdup2(data, (gsize)(width * height * sizeof(RrPixel32)));
for (i = 0; i < width * height; ++i) {
guchar a = ((*p >> 24) & 0xff);
diff --git a/obt/paths.c b/obt/paths.c
index 25cb6b0eb..992727f0d 100644
--- a/obt/paths.c
+++ b/obt/paths.c
@@ -108,25 +108,33 @@ static void find_uid_gid(uid_t *u, gid_t **g, guint *n)
const gchar *name;
struct group *gr;
+ gid_t gmain;
+ gboolean maininc;
+ int i;
+
*u = getuid();
pw = getpwuid(*u);
name = pw->pw_name;
- *g = g_new(gid_t, *n=1);
- (*g)[0] = getgid();
-
- while ((gr = getgrent())) {
- if (gr->gr_gid != (*g)[0]) { /* skip the main group */
- gchar **c;
- for (c = gr->gr_mem; *c; ++c)
- if (strcmp(*c, name) == 0) {
- *g = g_renew(gid_t, *g, ++(*n)); /* save the group */
- (*g)[*n-1] = gr->gr_gid;
- break;
- }
+ gmain = getgid();
+
+ *n = getgroups(0, *g);
+ *g = g_new(gid_t, *n);
+ *n = getgroups(*n, *g);
+
+ /* Check if the effective group ID of the calling process is already
+ included in the returned list. Add it otherwise. */
+ maininc = FALSE;
+ for (i = 0; i < *n; i++) {
+ if ( (*g)[i] == gmain ) {
+ maininc = TRUE;
+ break;
}
}
- endgrent();
+ if (!maininc) {
+ *g = g_renew(gid_t, *g, ++(*n));
+ (*g)[*n-1] = gmain;
+ }
qsort(*g, *n, sizeof(gid_t), gid_cmp);
}
diff --git a/obt/prop.c b/obt/prop.c
index 0cecccf4d..4991179e1 100644
--- a/obt/prop.c
+++ b/obt/prop.c
@@ -191,6 +191,7 @@ void obt_prop_startup(void)
CREATE_(OB_CONFIG_FILE);
CREATE_(OB_WM_ACTION_UNDECORATE);
CREATE_(OB_WM_STATE_UNDECORATED);
+ CREATE_(OB_LAST_DESKTOP);
CREATE_(OB_CONTROL);
CREATE_(OB_VERSION);
CREATE_(OB_APP_ROLE);
@@ -407,7 +408,7 @@ static void* convert_text_property(XTextProperty *tprop,
const gchar *end; /* the first byte past the valid data */
g_utf8_validate(retlist[i], -1, &end);
- retlist[i] = g_strndup(retlist[i], end-retlist[i]);
+ retlist[i] = g_utf8_normalize(retlist[i], end-retlist[i], G_NORMALIZE_NFC);
}
else if (encoding == LOCALE) {
gsize nvalid; /* the number of valid bytes at the front of the
diff --git a/obt/prop.h b/obt/prop.h
index acb5c956e..06ed9067d 100644
--- a/obt/prop.h
+++ b/obt/prop.h
@@ -213,6 +213,7 @@ typedef enum {
OBT_PROP_OPENBOX_PID, /* this is depreecated in favour of ob_control */
OBT_PROP_OB_THEME,
OBT_PROP_OB_CONFIG_FILE,
+ OBT_PROP_OB_LAST_DESKTOP,
OBT_PROP_OB_CONTROL,
OBT_PROP_OB_VERSION,
OBT_PROP_OB_APP_ROLE,
diff --git a/openbox/actions/all.c b/openbox/actions/all.c
index 332e79ca6..1a4e7086a 100644
--- a/openbox/actions/all.c
+++ b/openbox/actions/all.c
@@ -15,9 +15,11 @@ void action_all_startup(void)
action_move_startup();
action_focus_startup();
action_raise_startup();
+ action_raisetemp_startup();
action_lower_startup();
action_raiselower_startup();
action_unfocus_startup();
+ action_focusfallback_startup();
action_iconify_startup();
action_fullscreen_startup();
action_maximize_startup();
diff --git a/openbox/actions/all.h b/openbox/actions/all.h
index 54d63195d..f50160d51 100644
--- a/openbox/actions/all.h
+++ b/openbox/actions/all.h
@@ -16,9 +16,11 @@ void action_close_startup(void);
void action_move_startup(void);
void action_focus_startup(void);
void action_raise_startup(void);
+void action_raisetemp_startup(void);
void action_lower_startup(void);
void action_raiselower_startup(void);
void action_unfocus_startup(void);
+void action_focusfallback_startup(void);
void action_iconify_startup(void);
void action_fullscreen_startup(void);
void action_maximize_startup(void);
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
index c2f73c6b3..ddb888e2a 100644
--- a/openbox/actions/desktop.c
+++ b/openbox/actions/desktop.c
@@ -190,9 +190,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
g_assert_not_reached();
}
- if (d < screen_num_desktops &&
- (d != screen_desktop ||
- (data->client && data->client->desktop != screen_desktop))) {
+ if (d < screen_num_desktops) {
gboolean go = TRUE;
actions_client_move(data, TRUE);
diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c
index 2f76c45d1..1e9dae768 100644
--- a/openbox/actions/execute.c
+++ b/openbox/actions/execute.c
@@ -264,7 +264,8 @@ static gboolean run_func(ObActionsData *data, gpointer options)
/* If there is a keyboard grab going on then we need to cancel
it so the application can grab things */
- if (data->uact != OB_USER_ACTION_MENU_SELECTION)
+ if (data->uact != OB_USER_ACTION_MENU_SELECTION &&
+ data->uact != OB_USER_ACTION_KEYBOARD_KEY_NO_REPEAT)
event_cancel_all_key_grabs();
e = NULL;
diff --git a/openbox/actions/focusfallback.c b/openbox/actions/focusfallback.c
new file mode 100644
index 000000000..fd8ab227f
--- /dev/null
+++ b/openbox/actions/focusfallback.c
@@ -0,0 +1,17 @@
+#include "openbox/actions.h"
+#include "openbox/focus.h"
+
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_focusfallback_startup(void)
+{
+ actions_register("FocusFallback", NULL, NULL, run_func);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+ if (data->client && data->client == focus_client)
+ focus_fallback(FALSE, FALSE, TRUE, FALSE);
+ return FALSE;
+}
diff --git a/openbox/actions/iconify.c b/openbox/actions/iconify.c
index e6bdbb7b2..536fd3652 100644
--- a/openbox/actions/iconify.c
+++ b/openbox/actions/iconify.c
@@ -2,20 +2,32 @@
#include "openbox/client.h"
static gboolean run_func(ObActionsData *data, gpointer options);
+static gpointer setup_func(xmlNodePtr node);
void action_iconify_startup(void)
{
actions_register("Iconify",
- NULL, NULL,
+ setup_func,
+ NULL,
run_func);
}
+static gpointer setup_func(xmlNodePtr node)
+{
+ xmlNodePtr n;
+
+ if ((n = obt_xml_find_node(node, "de")))
+ return GINT_TO_POINTER(obt_xml_node_bool(n));
+
+ return GINT_TO_POINTER(0);
+}
+
/* Always return FALSE because its not interactive */
static gboolean run_func(ObActionsData *data, gpointer options)
{
if (data->client) {
actions_client_move(data, TRUE);
- client_iconify(data->client, TRUE, TRUE, FALSE);
+ client_iconify(data->client, !options, TRUE, FALSE);
actions_client_move(data, FALSE);
}
diff --git a/openbox/actions/if.c b/openbox/actions/if.c
index 8ae1010ae..c7ad07317 100644
--- a/openbox/actions/if.c
+++ b/openbox/actions/if.c
@@ -62,6 +62,8 @@ typedef struct {
gboolean fullscreen_off;
gboolean focused;
gboolean unfocused;
+ gboolean focusable;
+ gboolean nonfocusable;
gboolean urgent_on;
gboolean urgent_off;
gboolean decor_off;
@@ -162,7 +164,7 @@ static gboolean check_typed_match(TypedMatch *tm, const gchar *s)
{
switch (tm->type) {
case MATCH_TYPE_PATTERN:
- return g_pattern_match_string(tm->m.pattern, s);
+ return g_pattern_spec_match_string((GPatternSpec*)tm->m.pattern, s);
case MATCH_TYPE_REGEX:
return g_regex_match(tm->m.regex, s, 0, NULL);
case MATCH_TYPE_EXACT:
@@ -186,6 +188,7 @@ static void setup_query(Options* o, xmlNodePtr node, QueryTarget target) {
set_bool(node, "iconified", &q->iconic_on, &q->iconic_off);
set_bool(node, "fullscreen", &q->fullscreen_on, &q->fullscreen_off);
set_bool(node, "focused", &q->focused, &q->unfocused);
+ set_bool(node, "focusable", &q->focusable, &q->nonfocusable);
set_bool(node, "urgent", &q->urgent_on, &q->urgent_off);
set_bool(node, "undecorated", &q->decor_off, &q->decor_on);
set_bool(node, "omnipresent", &q->omnipresent_on, &q->omnipresent_off);
@@ -376,6 +379,11 @@ static gboolean run_func_if(ObActionsData *data, gpointer options)
if (q->unfocused)
is_true &= query_target != focus_client;
+ if (q->focusable)
+ is_true &= query_target->can_focus;
+ if (q->nonfocusable)
+ is_true &= !query_target->can_focus;
+
gboolean is_urgent =
query_target->urgent || query_target->demands_attention;
if (q->urgent_on)
diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c
index 95de0e98a..8a8ac4c36 100644
--- a/openbox/actions/moveresizeto.c
+++ b/openbox/actions/moveresizeto.c
@@ -118,7 +118,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
case PREV_MONITOR:
mon = (cmon == 0) ? (screen_num_monitors - 1) : (cmon - 1); break;
default:
- g_assert_not_reached();
+ /* desktop specified by number */
}
area = screen_area(c->desktop, mon, NULL);
diff --git a/openbox/actions/raisetemp.c b/openbox/actions/raisetemp.c
new file mode 100644
index 000000000..a862f14e8
--- /dev/null
+++ b/openbox/actions/raisetemp.c
@@ -0,0 +1,25 @@
+#include "openbox/actions.h"
+#include "openbox/stacking.h"
+#include "openbox/window.h"
+#include "openbox/focus_cycle.h"
+
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_raisetemp_startup(void)
+{
+ actions_register("RaiseTemp",
+ NULL, NULL,
+ run_func);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+ if (focus_cycle_target) {
+ actions_client_move(data, TRUE);
+ stacking_temp_raise(CLIENT_AS_WINDOW(data->client));
+ actions_client_move(data, FALSE);
+ }
+
+ return FALSE;
+}
diff --git a/openbox/actions/resize.c b/openbox/actions/resize.c
index fc85c0b72..fc5c142c2 100644
--- a/openbox/actions/resize.c
+++ b/openbox/actions/resize.c
@@ -75,7 +75,7 @@ static gboolean run_func(ObActionsData *data, gpointer options)
corner = OBT_PROP_ATOM(NET_WM_MOVERESIZE_SIZE_KEYBOARD);
else if (o->corner_specified)
corner = o->corner; /* it was specified in the binding */
- else
+ else if (c->functions & OB_CLIENT_FUNC_RESIZE)
corner = pick_corner(data->x, data->y,
c->frame->area.x, c->frame->area.y,
/* use the client size because the frame
@@ -86,6 +86,10 @@ static gboolean run_func(ObActionsData *data, gpointer options)
c->frame->size.right,
c->area.height + c->frame->size.top +
c->frame->size.bottom, c->shaded);
+ else if (c->functions & OB_CLIENT_FUNC_MOVE)
+ corner = OBT_PROP_ATOM(NET_WM_MOVERESIZE_MOVE);
+ else
+ return FALSE;
moveresize_start(c, data->x, data->y, data->button, corner);
}
diff --git a/openbox/actions/unfocus.c b/openbox/actions/unfocus.c
index 3db00ca36..63863e534 100644
--- a/openbox/actions/unfocus.c
+++ b/openbox/actions/unfocus.c
@@ -11,7 +11,7 @@ void action_unfocus_startup(void)
/* Always return FALSE because its not interactive */
static gboolean run_func(ObActionsData *data, gpointer options)
{
- if (data->client && data->client == focus_client)
- focus_fallback(FALSE, FALSE, TRUE, FALSE);
+ actions_interactive_cancel_act();
+ focus_nothing();
return FALSE;
}
diff --git a/openbox/client.c b/openbox/client.c
index 584e029c0..047b38663 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -922,28 +922,28 @@ static ObAppSettings *client_get_settings_state(ObClient *self)
(signed)app->type >= 0);
if (app->name &&
- !g_pattern_match(app->name, strlen(self->name), self->name, NULL))
+ !g_pattern_spec_match((GPatternSpec*)app->name, (gsize)strlen(self->name), self->name, NULL))
match = FALSE;
else if (app->group_name &&
- !g_pattern_match(app->group_name,
- strlen(self->group_name), self->group_name, NULL))
+ !g_pattern_spec_match((GPatternSpec*)app->group_name,
+ (gsize)strlen(self->group_name), self->group_name, NULL))
match = FALSE;
else if (app->class &&
- !g_pattern_match(app->class,
- strlen(self->class), self->class, NULL))
+ !g_pattern_spec_match((GPatternSpec*)app->class,
+ (gsize)strlen(self->class), self->class, NULL))
match = FALSE;
else if (app->group_class &&
- !g_pattern_match(app->group_class,
- strlen(self->group_class), self->group_class,
+ !g_pattern_spec_match((GPatternSpec*)app->group_class,
+ (gsize)strlen(self->group_class), self->group_class,
NULL))
match = FALSE;
else if (app->role &&
- !g_pattern_match(app->role,
- strlen(self->role), self->role, NULL))
+ !g_pattern_spec_match((GPatternSpec*)app->role,
+ (gsize)strlen(self->role), self->role, NULL))
match = FALSE;
else if (app->title &&
- !g_pattern_match(app->title,
- strlen(self->title), self->title, NULL))
+ !g_pattern_spec_match((GPatternSpec*)app->title,
+ (gsize)strlen(self->title), self->title, NULL))
match = FALSE;
else if ((signed)app->type >= 0 && app->type != self->type) {
match = FALSE;
@@ -1715,18 +1715,21 @@ void client_update_opacity(ObClient *self)
OBT_PROP_ERASE(self->frame->window, NET_WM_WINDOW_OPACITY);
}
-void client_update_normal_hints(ObClient *self)
+void client_update_normal_hints(ObClient *realself)
{
- XSizeHints size;
+ XSizeHints size = {0};
glong ret;
+ ObClient *self = g_new(ObClient, 1);
/* defaults */
- self->min_ratio = 0.0f;
- self->max_ratio = 0.0f;
- SIZE_SET(self->size_inc, 1, 1);
- SIZE_SET(self->base_size, -1, -1);
- SIZE_SET(self->min_size, 0, 0);
- SIZE_SET(self->max_size, G_MAXINT, G_MAXINT);
+ realself->min_ratio = 0.0f;
+ realself->max_ratio = 0.0f;
+ SIZE_SET(realself->size_inc, 1, 1);
+ SIZE_SET(realself->base_size, -1, -1);
+ SIZE_SET(realself->min_size, 0, 0);
+ SIZE_SET(realself->max_size, G_MAXINT, G_MAXINT);
+
+ memcpy(self, realself, sizeof(ObClient));
/* get the hints from the window */
if (XGetWMNormalHints(obt_display, self->window, &size, &ret)) {
@@ -1740,6 +1743,9 @@ void client_update_normal_hints(ObClient *self)
self->gravity = size.win_gravity;
if (size.flags & PAspect) {
+ if ((unsigned int)size.min_aspect.x > 4096 ||
+ (unsigned int)size.min_aspect.y > 4096)
+ goto invalid_hints;
if (size.min_aspect.y)
self->min_ratio =
(gfloat) size.min_aspect.x / size.min_aspect.y;
@@ -1748,17 +1754,33 @@ void client_update_normal_hints(ObClient *self)
(gfloat) size.max_aspect.x / size.max_aspect.y;
}
- if (size.flags & PMinSize)
+ if (size.flags & PMinSize) {
+ if ((unsigned int)size.min_width > 4096 ||
+ (unsigned int)size.min_height > 4096)
+ goto invalid_hints;
SIZE_SET(self->min_size, size.min_width, size.min_height);
+ }
- if (size.flags & PMaxSize)
+ if (size.flags & PMaxSize) {
+ if ((unsigned int)size.max_width > 4096 ||
+ (unsigned int)size.max_height > 4096)
+ goto invalid_hints;
SIZE_SET(self->max_size, size.max_width, size.max_height);
+ }
- if (size.flags & PBaseSize)
+ if (size.flags & PBaseSize) {
+ if ((unsigned int)size.base_width > 4096 ||
+ (unsigned int)size.base_height > 4096)
+ goto invalid_hints;
SIZE_SET(self->base_size, size.base_width, size.base_height);
+ }
- if (size.flags & PResizeInc && size.width_inc && size.height_inc)
+ if (size.flags & PResizeInc && size.width_inc && size.height_inc) {
+ if ((unsigned int)size.width_inc > 4096 ||
+ (unsigned int)size.width_inc > 4096)
+ goto invalid_hints;
SIZE_SET(self->size_inc, size.width_inc, size.height_inc);
+ }
ob_debug("Normal hints: min size (%d %d) max size (%d %d)",
self->min_size.width, self->min_size.height,
@@ -1769,6 +1791,11 @@ void client_update_normal_hints(ObClient *self)
}
else
ob_debug("Normal hints: not set");
+ memcpy(realself, self, sizeof(ObClient));
+ g_free(self);
+ return;
+invalid_hints:
+ ob_debug("Normal hints: corruption detected, not setting anything");
}
static void client_setup_default_decor_and_functions(ObClient *self)
@@ -2715,9 +2742,12 @@ static void client_calc_layer_internal(ObClient *self)
void client_calc_layer(ObClient *self)
{
GList *it;
+ /* the client_calc_layer_internal calls below modify stacking_list,
+ so we have to make a copy to iterate over */
+ GList *list = g_list_copy(stacking_list);
/* skip over stuff above fullscreen layer */
- for (it = stacking_list; it; it = g_list_next(it))
+ for (it = list; it; it = g_list_next(it))
if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break;
/* find the windows in the fullscreen layer, and mark them not-visited */
@@ -2730,7 +2760,7 @@ void client_calc_layer(ObClient *self)
client_calc_layer_internal(self);
/* skip over stuff above fullscreen layer */
- for (it = stacking_list; it; it = g_list_next(it))
+ for (it = list; it; it = g_list_next(it))
if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break;
/* now recalc any windows in the fullscreen layer which have not
@@ -2741,6 +2771,8 @@ void client_calc_layer(ObClient *self)
!WINDOW_AS_CLIENT(it->data)->visited)
client_calc_layer_internal(it->data);
}
+
+ g_list_free(list);
}
gboolean client_should_show(ObClient *self)
diff --git a/openbox/client_list_combined_menu.c b/openbox/client_list_combined_menu.c
index c26b6fa03..8aeb6058d 100644
--- a/openbox/client_list_combined_menu.c
+++ b/openbox/client_list_combined_menu.c
@@ -54,6 +54,7 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data)
for (desktop = 0; desktop < screen_num_desktops; desktop++) {
gboolean empty = TRUE;
gboolean onlyiconic = TRUE;
+ gboolean noicons = TRUE;
menu_add_separator(menu, SEPARATOR, screen_desktop_names[desktop]);
for (it = focus_order; it; it = g_list_next(it)) {
@@ -65,9 +66,17 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data)
empty = FALSE;
if (c->iconic) {
- gchar *title = g_strdup_printf("(%s)", c->icon_title);
- e = menu_add_normal(menu, desktop, title, NULL, FALSE);
- g_free(title);
+ if (config_menu_separate_iconic) {
+ if (noicons) {
+ menu_add_separator(menu, -1, NULL);
+ noicons = FALSE;
+ }
+ e = menu_add_normal(menu, desktop, c->icon_title, NULL, FALSE);
+ } else {
+ gchar *title = g_strdup_printf("(%s)", c->icon_title);
+ e = menu_add_normal(menu, desktop, title, NULL, FALSE);
+ g_free(title);
+ }
} else {
onlyiconic = FALSE;
e = menu_add_normal(menu, desktop, c->title, NULL, FALSE);
diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c
index f3df2a5ae..1fab80cb5 100644
--- a/openbox/client_list_menu.c
+++ b/openbox/client_list_menu.c
@@ -49,6 +49,7 @@ static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data)
GList *it;
gboolean empty = TRUE;
gboolean onlyiconic = TRUE;
+ gboolean noicons = TRUE;
menu_clear_entries(menu);
@@ -61,9 +62,17 @@ static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data)
empty = FALSE;
if (c->iconic) {
- gchar *title = g_strdup_printf("(%s)", c->icon_title);
- e = menu_add_normal(menu, d->desktop, title, NULL, FALSE);
- g_free(title);
+ if (config_menu_separate_iconic) {
+ if (noicons) {
+ menu_add_separator(menu, -1, NULL);
+ noicons = FALSE;
+ }
+ e = menu_add_normal(menu, d->desktop, c->icon_title, NULL, FALSE);
+ } else {
+ gchar *title = g_strdup_printf("(%s)", c->icon_title);
+ e = menu_add_normal(menu, d->desktop, title, NULL, FALSE);
+ g_free(title);
+ }
} else {
onlyiconic = FALSE;
e = menu_add_normal(menu, d->desktop, c->title, NULL, FALSE);
diff --git a/openbox/config.c b/openbox/config.c
index 6fd03966d..24abd5c1d 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -100,6 +100,7 @@ guint config_submenu_show_delay;
guint config_submenu_hide_delay;
gboolean config_menu_manage_desktops;
gboolean config_menu_show_icons;
+gboolean config_menu_separate_iconic;
GSList *config_menu_files;
@@ -451,12 +452,14 @@ static void parse_key(xmlNodePtr node, GList *keylist)
xmlNodePtr n;
gboolean is_chroot = FALSE;
gboolean grab = TRUE;
+ gboolean repeat = FALSE;
if (!obt_xml_attr_string(node, "key", &keystring))
return;
obt_xml_attr_bool(node, "chroot", &is_chroot);
obt_xml_attr_bool(node, "grab", &grab);
+ obt_xml_attr_bool(node, "repeat", &repeat);
keys = g_strsplit(keystring, " ", 0);
for (key = keys; *key; ++key) {
@@ -474,7 +477,7 @@ static void parse_key(xmlNodePtr node, GList *keylist)
action = actions_parse(n);
if (action)
- keyboard_bind(keylist, action, grab);
+ keyboard_bind(keylist, action, grab, !repeat);
n = obt_xml_find_node(n->next, "action");
}
}
@@ -768,7 +771,11 @@ static void parse_theme(xmlNodePtr node, gpointer d)
}
if ((fnode = obt_xml_find_node(n->children, "size"))) {
int s = obt_xml_node_int(fnode);
- if (s > 0) size = s;
+ if (s > 0) {
+ size = s;
+ if (obt_xml_attr_contains(fnode, "type", "absolute"))
+ size = -size;
+ }
}
if ((fnode = obt_xml_find_node(n->children, "weight"))) {
gchar *w = obt_xml_node_string(fnode);
@@ -976,6 +983,8 @@ static void parse_menu(xmlNodePtr node, gpointer d)
g_message(_("Openbox was compiled without image loading support. Icons in menus will not be loaded."));
#endif
}
+ if ((n = obt_xml_find_node(node, "separateIconic")))
+ config_menu_separate_iconic = obt_xml_node_bool(n);
for (node = obt_xml_find_node(node, "file");
node;
@@ -1016,7 +1025,7 @@ static void bind_default_keyboard(void)
};
for (it = binds; it->key; ++it) {
GList *l = g_list_append(NULL, g_strdup(it->key));
- keyboard_bind(l, actions_parse_string(it->actname), TRUE);
+ keyboard_bind(l, actions_parse_string(it->actname), TRUE, TRUE);
}
}
@@ -1187,6 +1196,7 @@ void config_startup(ObtXmlInst *i)
config_menu_manage_desktops = TRUE;
config_menu_files = NULL;
config_menu_show_icons = TRUE;
+ config_menu_separate_iconic = FALSE;
obt_xml_register(i, "menu", parse_menu, NULL);
diff --git a/openbox/config.h b/openbox/config.h
index 51944b374..277d8b476 100644
--- a/openbox/config.h
+++ b/openbox/config.h
@@ -215,6 +215,8 @@ extern guint config_submenu_hide_delay;
extern gboolean config_menu_manage_desktops;
/*! Load & show icons in user-defined menus */
extern gboolean config_menu_show_icons;
+/*! Separate iconic windows instead of bracketing */
+extern gboolean config_menu_separate_iconic;
/*! User-specified menu files */
extern GSList *config_menu_files;
/*! Per app settings */
diff --git a/openbox/event.c b/openbox/event.c
index 5774f67d7..baac68bbf 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -117,6 +117,8 @@ static ObClient *focus_delay_timeout_client = NULL;
static guint unfocus_delay_timeout_id = 0;
static ObClient *unfocus_delay_timeout_client = NULL;
+extern guint button;
+
#ifdef USE_SM
static gboolean ice_handler(GIOChannel *source, GIOCondition cond,
gpointer conn)
@@ -154,6 +156,10 @@ void event_startup(gboolean reconfig)
IceAddConnectionWatch(ice_watch, NULL);
#endif
+#ifdef XKB
+ XkbSetDetectableAutoRepeat(obt_display, True, NULL);
+#endif
+
client_add_destroy_notify(focus_delay_client_dest, NULL);
}
@@ -723,6 +729,10 @@ static void event_process(const XEvent *ec, gpointer data)
if (e->type == ButtonPress)
pressed = e->xbutton.button;
+ /* We ignored the release event so make sure we don't think
+ the button is still pressed */
+ else if (e->type == ButtonRelease)
+ button = 0;
}
}
else if (e->type == KeyPress || e->type == KeyRelease ||
diff --git a/openbox/frame.c b/openbox/frame.c
index fecac586a..35fa6346b 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -1670,12 +1670,12 @@ static void flash_done(gpointer data)
static gboolean flash_timeout(gpointer data)
{
ObFrame *self = data;
- GTimeVal now;
- g_get_current_time(&now);
- if (now.tv_sec > self->flash_end.tv_sec ||
- (now.tv_sec == self->flash_end.tv_sec &&
- now.tv_usec >= self->flash_end.tv_usec))
+ gint64 now_ms = g_get_real_time();
+ gint64 now = (gint64)(g_get_real_time() / G_USEC_PER_SEC);
+ if (now > self->flash_end ||
+ (now == self->flash_end &&
+ now_ms >= self->flash_end_ms))
self->flashing = FALSE;
if (!self->flashing) {
@@ -1702,8 +1702,8 @@ void frame_flash_start(ObFrame *self)
self->flash_timer = g_timeout_add_full(G_PRIORITY_DEFAULT,
600, flash_timeout, self,
flash_done);
- g_get_current_time(&self->flash_end);
- g_time_val_add(&self->flash_end, G_USEC_PER_SEC * 5);
+ self->flash_end += 5;
+ self->flash_end_ms += (gint64)(G_USEC_PER_SEC * 5);
self->flashing = TRUE;
}
@@ -1714,13 +1714,13 @@ void frame_flash_stop(ObFrame *self)
}
static gulong frame_animate_iconify_time_left(ObFrame *self,
- const GTimeVal *now)
+ const GDateTime *now)
{
- glong sec, usec;
- sec = self->iconify_animation_end.tv_sec - now->tv_sec;
- usec = self->iconify_animation_end.tv_usec - now->tv_usec;
+ gint64 sec, usec;
+ sec = (gint64)(self->iconify_animation_end - (gint64)g_date_time_get_second((GDateTime*)now));
+ usec = (gint64)(self->iconify_animation_end_ms - (gint64)g_date_time_get_microsecond((GDateTime*)now));
if (usec < 0) {
- usec += G_USEC_PER_SEC;
+ usec += (gint64)G_USEC_PER_SEC;
sec--;
}
/* no negative values */
@@ -1732,7 +1732,9 @@ static gboolean frame_animate_iconify(gpointer p)
ObFrame *self = p;
gint x, y, w, h;
gint iconx, icony, iconw;
- GTimeVal now;
+ GDateTime *now = g_date_time_new_now_local();
+ if ( now == NULL )
+ return TRUE;
gulong time;
gboolean iconifying;
@@ -1753,8 +1755,7 @@ static gboolean frame_animate_iconify(gpointer p)
iconifying = self->iconify_animation_going > 0;
/* how far do we have left to go ? */
- g_get_current_time(&now);
- time = frame_animate_iconify_time_left(self, &now);
+ time = frame_animate_iconify_time_left(self, (const GDateTime*)now);
if ((time > 0 && iconifying) || (time == 0 && !iconifying)) {
/* start where the frame is supposed to be */
@@ -1790,6 +1791,8 @@ static gboolean frame_animate_iconify(gpointer p)
XMoveResizeWindow(obt_display, self->window, x, y, w, h);
XFlush(obt_display);
+ g_date_time_unref( now );
+
return time > 0; /* repeat until we're out of time */
}
@@ -1827,22 +1830,23 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying)
gulong time;
gboolean new_anim = FALSE;
gboolean set_end = TRUE;
- GTimeVal now;
+ GDateTime *now = g_date_time_new_now_local();
+ if ( now == NULL )
+ return;
/* if there is no titlebar, just don't animate for now
XXX it would be nice tho.. */
- if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR))
+ if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR)){
+ g_date_time_unref( now );
return;
-
- /* get the current time */
- g_get_current_time(&now);
+ }
/* get how long until the end */
time = FRAME_ANIMATE_ICONIFY_TIME;
if (self->iconify_animation_going) {
if (!!iconifying != (self->iconify_animation_going > 0)) {
/* animation was already going on in the opposite direction */
- time = time - frame_animate_iconify_time_left(self, &now);
+ time = time - frame_animate_iconify_time_left(self, (const GDateTime*)now);
} else
/* animation was already going in the same direction */
set_end = FALSE;
@@ -1852,9 +1856,10 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying)
/* set the ending time */
if (set_end) {
- self->iconify_animation_end.tv_sec = now.tv_sec;
- self->iconify_animation_end.tv_usec = now.tv_usec;
- g_time_val_add(&self->iconify_animation_end, time);
+ self->iconify_animation_end = (gint64)g_date_time_get_second( now );
+ self->iconify_animation_end_ms = (gint64)g_date_time_get_microsecond( now );
+ self->iconify_animation_end += (gint64)(time / G_USEC_PER_SEC);
+ self->iconify_animation_end_ms += (gint64)time;
}
if (new_anim) {
@@ -1874,4 +1879,7 @@ void frame_begin_iconify_animation(ObFrame *self, gboolean iconifying)
if (!self->visible)
XMapWindow(obt_display, self->window);
}
+
+ g_date_time_unref( now );
+ return;
}
diff --git a/openbox/frame.h b/openbox/frame.h
index ae29c3b1e..9349a23cb 100644
--- a/openbox/frame.h
+++ b/openbox/frame.h
@@ -191,7 +191,8 @@ struct _ObFrame
gboolean flashing;
gboolean flash_on;
- GTimeVal flash_end;
+ gint64 flash_end;
+ gint64 flash_end_ms;
guint flash_timer;
/*! Is the frame currently in an animation for iconify or restore.
@@ -200,7 +201,8 @@ struct _ObFrame
*/
gint iconify_animation_going;
guint iconify_animation_timer;
- GTimeVal iconify_animation_end;
+ gint64 iconify_animation_end;
+ gint64 iconify_animation_end_ms;
};
ObFrame *frame_new(struct _ObClient *c);
diff --git a/openbox/keyboard.c b/openbox/keyboard.c
index 2ce664a79..0212c5d11 100644
--- a/openbox/keyboard.c
+++ b/openbox/keyboard.c
@@ -17,6 +17,9 @@
See the COPYING file for a copy of the GNU General Public License.
*/
+#ifdef DEBUG
+#include "debug.h"
+#endif
#include "focus.h"
#include "screen.h"
#include "frame.h"
@@ -41,6 +44,7 @@ KeyBindingTree *keyboard_firstnode = NULL;
static ObPopup *popup = NULL;
static KeyBindingTree *curpos;
static guint chain_timer = 0;
+static guint repeat_key = 0;
static void grab_keys(gboolean grab)
{
@@ -132,14 +136,14 @@ void keyboard_chroot(GList *keylist)
chroot binding. so add it to the tree then. */
if (!tree_chroot(keyboard_firstnode, keylist)) {
KeyBindingTree *tree;
- if (!(tree = tree_build(keylist, TRUE)))
+ if (!(tree = tree_build(keylist, TRUE, TRUE)))
return;
tree_chroot(tree, keylist);
tree_assimilate(tree);
}
}
-gboolean keyboard_bind(GList *keylist, ObActionsAct *action, gboolean grab)
+gboolean keyboard_bind(GList *keylist, ObActionsAct *action, gboolean grab, gboolean no_repeat)
{
KeyBindingTree *tree, *t;
gboolean conflict;
@@ -147,7 +151,7 @@ gboolean keyboard_bind(GList *keylist, ObActionsAct *action, gboolean grab)
g_assert(keylist != NULL);
g_assert(action != NULL);
- if (!(tree = tree_build(keylist, grab)))
+ if (!(tree = tree_build(keylist, grab, no_repeat)))
return FALSE;
if ((t = tree_find(tree, &conflict)) != NULL) {
@@ -218,15 +222,26 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
KeyBindingTree *p;
gboolean used;
guint mods;
+ gboolean repeating = FALSE;
+
+#ifdef DEBUG
+ ob_debug("Saved key: %d, %sed key: %d", repeat_key, e->type == KeyPress ? "press" : "releas", e->xkey.keycode);
+#endif
if (e->type == KeyRelease) {
grab_key_passive_count(-1);
+ repeat_key = 0;
return FALSE;
}
g_assert(e->type == KeyPress);
grab_key_passive_count(1);
+ if (repeat_key == e->xkey.keycode)
+ repeating = TRUE;
+ else
+ repeat_key = e->xkey.keycode;
+
mods = obt_keyboard_only_modmasks(e->xkey.state);
if (e->xkey.keycode == config_keyboard_reset_keycode &&
@@ -243,7 +258,7 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
else
p = curpos->first_child;
while (p) {
- if (p->key == e->xkey.keycode && p->state == mods) {
+ if (p->key == e->xkey.keycode && p->state == mods && !(p->no_repeat && repeating)) {
/* if we hit a key binding, then close any open menus and run it */
if (menu_frame_visible)
menu_frame_hide_all();
@@ -266,7 +281,9 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
if (it == NULL) /* reset if the actions are not interactive */
keyboard_reset_chains(0);
- actions_run_acts(p->actions, OB_USER_ACTION_KEYBOARD_KEY,
+ actions_run_acts(p->actions,
+ p->no_repeat ? OB_USER_ACTION_KEYBOARD_KEY_NO_REPEAT
+ : OB_USER_ACTION_KEYBOARD_KEY,
e->xkey.state, e->xkey.x_root, e->xkey.y_root,
0, OB_FRAME_CONTEXT_NONE, client);
}
@@ -295,7 +312,7 @@ static void node_rebind(KeyBindingTree *node)
while (node->actions) {
/* add each action, and remove them from the original tree so
they don't get free'd on us */
- keyboard_bind(node->keylist, node->actions->data, node->grab);
+ keyboard_bind(node->keylist, node->actions->data, node->grab, node->no_repeat);
node->actions = g_slist_delete_link(node->actions, node->actions);
}
@@ -326,6 +343,7 @@ void keyboard_startup(gboolean reconfig)
grab_keys(TRUE);
popup = popup_new();
popup_set_text_align(popup, RR_JUSTIFY_CENTER);
+ repeat_key = 0;
}
void keyboard_shutdown(gboolean reconfig)
diff --git a/openbox/keyboard.h b/openbox/keyboard.h
index 8569b9736..f26581283 100644
--- a/openbox/keyboard.h
+++ b/openbox/keyboard.h
@@ -37,7 +37,7 @@ void keyboard_shutdown(gboolean reconfig);
void keyboard_rebind(void);
void keyboard_chroot(GList *keylist);
-gboolean keyboard_bind(GList *keylist, struct _ObActionsAct *action, gboolean grab);
+gboolean keyboard_bind(GList *keylist, struct _ObActionsAct *action, gboolean grab, gboolean no_repeat);
void keyboard_unbind_all(void);
gboolean keyboard_event(struct _ObClient *client, const XEvent *e);
diff --git a/openbox/keytree.c b/openbox/keytree.c
index 87003a035..4747c265b 100644
--- a/openbox/keytree.c
+++ b/openbox/keytree.c
@@ -44,7 +44,7 @@ void tree_destroy(KeyBindingTree *tree)
}
}
-KeyBindingTree *tree_build(GList *keylist, gboolean grab)
+KeyBindingTree *tree_build(GList *keylist, gboolean grab, gboolean no_repeat)
{
GList *it;
KeyBindingTree *ret = NULL, *p;
@@ -63,6 +63,7 @@ KeyBindingTree *tree_build(GList *keylist, gboolean grab)
g_strdup(kit->data)); /* deep copy */
ret->first_child = p;
ret->grab = grab;
+ ret->no_repeat = no_repeat;
if (p != NULL) p->parent = ret;
translate_key(it->data, &ret->state, &ret->key);
}
diff --git a/openbox/keytree.h b/openbox/keytree.h
index 6b3760666..e15872dfb 100644
--- a/openbox/keytree.h
+++ b/openbox/keytree.h
@@ -24,6 +24,7 @@
typedef struct KeyBindingTree {
guint state;
guint key;
+ gboolean no_repeat;
gboolean grab;
GList *keylist;
GSList *actions; /* list of Action pointers */
@@ -38,7 +39,7 @@ typedef struct KeyBindingTree {
} KeyBindingTree;
void tree_destroy(KeyBindingTree *tree);
-KeyBindingTree *tree_build(GList *keylist, gboolean grab);
+KeyBindingTree *tree_build(GList *keylist, gboolean grab, gboolean no_repeat);
void tree_assimilate(KeyBindingTree *node);
KeyBindingTree *tree_find(KeyBindingTree *search, gboolean *conflict);
gboolean tree_chroot(KeyBindingTree *tree, GList *keylist);
diff --git a/openbox/menu.c b/openbox/menu.c
index 8804e1287..9001c8cba 100644
--- a/openbox/menu.c
+++ b/openbox/menu.c
@@ -166,7 +166,7 @@ void menu_pipe_execute(ObMenu *self)
if (!g_spawn_command_line_sync(self->execute, &output, NULL, NULL, &err)) {
g_message(_("Failed to execute command for pipe-menu \"%s\": %s"),
- self->execute, err->message);
+ self->name, err->message);
g_error_free(err);
return;
}
diff --git a/openbox/misc.h b/openbox/misc.h
index 750dddd7a..becb9ee74 100644
--- a/openbox/misc.h
+++ b/openbox/misc.h
@@ -89,6 +89,7 @@ typedef enum {
typedef enum {
OB_USER_ACTION_NONE, /* being fired from inside another action and such */
OB_USER_ACTION_KEYBOARD_KEY,
+ OB_USER_ACTION_KEYBOARD_KEY_NO_REPEAT,
OB_USER_ACTION_MOUSE_PRESS,
OB_USER_ACTION_MOUSE_RELEASE,
OB_USER_ACTION_MOUSE_CLICK,
diff --git a/openbox/mouse.c b/openbox/mouse.c
index 4da22f3c3..5cc165c5b 100644
--- a/openbox/mouse.c
+++ b/openbox/mouse.c
@@ -43,6 +43,9 @@ static GSList *bound_contexts[OB_FRAME_NUM_CONTEXTS];
to send it to other applications */
static gboolean replay_pointer_needed;
+/* this is the static button from mouse_event, moved here so that event.c can clear it */
+guint button;
+
ObFrameContext mouse_button_frame_context(ObFrameContext context,
guint button,
guint state)
@@ -209,7 +212,7 @@ void mouse_replay_pointer(void)
gboolean mouse_event(ObClient *client, XEvent *e)
{
static Time ltime;
- static guint button = 0, state = 0, lbutton = 0;
+ static guint state = 0, lbutton = 0;
static Window lwindow = None;
static gint px, py, pwx = -1, pwy = -1, lx = -10, ly = -10;
gboolean used = FALSE;
diff --git a/openbox/screen.c b/openbox/screen.c
index 31cb8ded9..2f25c4a0d 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -54,7 +54,6 @@
static gboolean screen_validate_layout(ObDesktopLayout *l);
static gboolean replace_wm(void);
-static void screen_tell_ksplash(void);
static void screen_fallback_focus(void);
guint screen_num_desktops;
@@ -79,7 +78,7 @@ static GSList *struts_left = NULL;
static GSList *struts_right = NULL;
static GSList *struts_bottom = NULL;
-static ObPagerPopup *desktop_popup;
+static ObPagerPopup **desktop_popup;
static guint desktop_popup_timer = 0;
static gboolean desktop_popup_perm;
@@ -299,6 +298,7 @@ gboolean screen_annex(void)
supported[i++] = OBT_PROP_ATOM(OPENBOX_PID);
supported[i++] = OBT_PROP_ATOM(OB_THEME);
supported[i++] = OBT_PROP_ATOM(OB_CONFIG_FILE);
+ supported[i++] = OBT_PROP_ATOM(OB_LAST_DESKTOP);
supported[i++] = OBT_PROP_ATOM(OB_CONTROL);
supported[i++] = OBT_PROP_ATOM(OB_VERSION);
supported[i++] = OBT_PROP_ATOM(OB_APP_ROLE);
@@ -317,43 +317,25 @@ gboolean screen_annex(void)
OBT_PROP_SETS(RootWindow(obt_display, ob_screen), OB_VERSION,
OPENBOX_VERSION);
- screen_tell_ksplash();
-
return TRUE;
}
-static void screen_tell_ksplash(void)
+static void desktop_popup_new()
{
- XEvent e;
- char **argv;
-
- argv = g_new(gchar*, 6);
- argv[0] = g_strdup("dcop");
- argv[1] = g_strdup("ksplash");
- argv[2] = g_strdup("ksplash");
- argv[3] = g_strdup("upAndRunning(QString)");
- argv[4] = g_strdup("wm started");
- argv[5] = NULL;
-
- /* tell ksplash through the dcop server command line interface */
- g_spawn_async(NULL, argv, NULL,
- G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD |
- G_SPAWN_STDERR_TO_DEV_NULL | G_SPAWN_STDOUT_TO_DEV_NULL,
- NULL, NULL, NULL, NULL);
- g_strfreev(argv);
-
- /* i'm not sure why we do this, kwin does it, but ksplash doesn't seem to
- hear it anyways. perhaps it is for old ksplash. or new ksplash. or
- something. oh well. */
- e.xclient.type = ClientMessage;
- e.xclient.display = obt_display;
- e.xclient.window = obt_root(ob_screen);
- e.xclient.message_type =
- XInternAtom(obt_display, "_KDE_SPLASH_PROGRESS", False);
- e.xclient.format = 8;
- strcpy(e.xclient.data.b, "wm started");
- XSendEvent(obt_display, obt_root(ob_screen),
- False, SubstructureNotifyMask, &e);
+ guint i;
+ desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
+ for (i = 0; i < screen_num_monitors; i++) {
+ desktop_popup[i] = pager_popup_new();
+ desktop_popup[i]->popup->a_text->texture[0].data.text.font = ob_rr_theme->menu_title_font;
+ pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
+
+ /* update the pager popup's width */
+ if (screen_desktop_names)
+ pager_popup_text_width_to_strings(desktop_popup[i],
+ screen_desktop_names,
+ screen_num_desktops);
+ }
+
}
void screen_startup(gboolean reconfig)
@@ -362,16 +344,16 @@ void screen_startup(gboolean reconfig)
guint32 d;
gboolean namesexist = FALSE;
- desktop_popup = pager_popup_new();
desktop_popup_perm = FALSE;
- pager_popup_height(desktop_popup, POPUP_HEIGHT);
if (reconfig) {
- /* update the pager popup's width */
- pager_popup_text_width_to_strings(desktop_popup,
- screen_desktop_names,
- screen_num_desktops);
+ desktop_popup_new();
+ screen_update_layout();
return;
+ } else {
+ if (desktop_popup)
+ ob_debug("desktop_popup wasn't NULL when expected %x", desktop_popup);
+ desktop_popup = NULL;
}
/* get the initial size */
@@ -442,7 +424,11 @@ void screen_startup(gboolean reconfig)
else
screen_set_desktop(MIN(config_screen_firstdesk,
screen_num_desktops) - 1, FALSE);
- screen_last_desktop = screen_desktop;
+ OBT_PROP_GET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, &screen_last_desktop);
+ if (screen_last_desktop < 0 || screen_last_desktop >= screen_num_desktops) {
+ screen_last_desktop = screen_desktop;
+ OBT_PROP_SET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, screen_last_desktop);
+ }
/* don't start in showing-desktop mode */
screen_show_desktop_mode = SCREEN_SHOW_DESKTOP_NO;
@@ -458,9 +444,19 @@ void screen_startup(gboolean reconfig)
screen_update_layout();
}
+static void desktop_popup_free(guint n)
+{
+ guint i;
+ for (i = 0; i < n; i++) {
+ pager_popup_free(desktop_popup[i]);
+ }
+ g_free(desktop_popup);
+ desktop_popup = NULL;
+}
+
void screen_shutdown(gboolean reconfig)
{
- pager_popup_free(desktop_popup);
+ desktop_popup_free(screen_num_monitors);
if (reconfig)
return;
@@ -602,6 +598,7 @@ static void screen_fallback_focus(void)
static gboolean last_desktop_func(gpointer data)
{
screen_desktop_timeout = TRUE;
+ OBT_PROP_SET32(obt_root(ob_screen), OB_LAST_DESKTOP, CARDINAL, screen_last_desktop);
screen_desktop_timer = 0;
return FALSE; /* don't repeat */
}
@@ -617,6 +614,9 @@ void screen_set_desktop(guint num, gboolean dofocus)
previous = screen_desktop;
screen_desktop = num;
+ if (ob_state() == OB_STATE_RUNNING)
+ screen_show_desktop_popup(screen_desktop, FALSE);
+
if (previous == num) return;
OBT_PROP_SET32(obt_root(ob_screen), NET_CURRENT_DESKTOP, CARDINAL, num);
@@ -691,9 +691,6 @@ void screen_set_desktop(guint num, gboolean dofocus)
ob_debug("Moving to desktop %d", num+1);
- if (ob_state() == OB_STATE_RUNNING)
- screen_show_desktop_popup(screen_desktop, FALSE);
-
/* ignore enter events caused by the move */
ignore_start = event_start_ignore_all_enters();
@@ -938,30 +935,37 @@ static guint translate_row_col(guint r, guint c)
static gboolean hide_desktop_popup_func(gpointer data)
{
- pager_popup_hide(desktop_popup);
+ guint i;
+
desktop_popup_timer = 0;
+
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_hide(desktop_popup[i]);
+ }
return FALSE; /* don't repeat */
}
void screen_show_desktop_popup(guint d, gboolean perm)
{
const Rect *a;
+ guint i;
/* 0 means don't show the popup */
if (!config_desktop_popup_time) return;
- a = screen_physical_area_primary(FALSE);
- pager_popup_position(desktop_popup, CenterGravity,
- a->x + a->width / 2, a->y + a->height / 2);
- pager_popup_icon_size_multiplier(desktop_popup,
- (screen_desktop_layout.columns /
- screen_desktop_layout.rows) / 2,
- (screen_desktop_layout.rows/
- screen_desktop_layout.columns) / 2);
- pager_popup_max_width(desktop_popup,
- MAX(a->width/3, POPUP_WIDTH));
- pager_popup_show(desktop_popup, screen_desktop_names[d], d);
-
+ for (i = 0; i < screen_num_monitors; i++) {
+ a = screen_physical_area_monitor(i);
+ pager_popup_position(desktop_popup[i], CenterGravity,
+ a->x + a->width / 2, a->y + a->height / 2);
+ pager_popup_icon_size_multiplier(desktop_popup[i],
+ (screen_desktop_layout.columns /
+ screen_desktop_layout.rows) / 2,
+ (screen_desktop_layout.rows/
+ screen_desktop_layout.columns) / 2);
+ pager_popup_max_width(desktop_popup[i],
+ MAX(a->width/3, POPUP_WIDTH));
+ pager_popup_show(desktop_popup[i], screen_desktop_names[d], d);
+ }
if (desktop_popup_timer) g_source_remove(desktop_popup_timer);
desktop_popup_timer = 0;
if (!perm && !desktop_popup_perm)
@@ -977,8 +981,12 @@ void screen_hide_desktop_popup(void)
{
if (desktop_popup_timer) g_source_remove(desktop_popup_timer);
desktop_popup_timer = 0;
- pager_popup_hide(desktop_popup);
desktop_popup_perm = FALSE;
+ guint i;
+
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_hide(desktop_popup[i]);
+ }
}
guint screen_find_desktop(guint from, ObDirection dir,
@@ -1213,9 +1221,11 @@ void screen_update_desktop_names(void)
}
/* resize the pager for these names */
- pager_popup_text_width_to_strings(desktop_popup,
- screen_desktop_names,
- screen_num_desktops);
+ for (i = 0; i < screen_num_monitors; i++) {
+ pager_popup_text_width_to_strings(desktop_popup[i],
+ screen_desktop_names,
+ screen_num_desktops);
+ }
}
void screen_show_desktop(ObScreenShowDestopMode show_mode, ObClient *show_only)
@@ -1417,7 +1427,7 @@ static void get_xinerama_screens(Rect **xin_areas, guint *nxin)
void screen_update_areas(void)
{
- guint i;
+ guint i, old_num_monitors = screen_num_monitors;
gulong *dims;
GList *it, *onscreen;
@@ -1430,6 +1440,11 @@ void screen_update_areas(void)
g_free(monitor_area);
get_xinerama_screens(&monitor_area, &screen_num_monitors);
+ if (screen_num_monitors != old_num_monitors) {
+ if (desktop_popup)
+ desktop_popup_free(old_num_monitors);
+ desktop_popup_new();
+ }
/* set up the user-specified margins */
config_margins.top_start = RECT_LEFT(monitor_area[screen_num_monitors]);
diff --git a/po/LINGUAS b/po/LINGUAS
index c37bc284d..2bc915381 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,6 +1,7 @@
af
ar
be
+bg_BG
bn_IN
ca
cs
diff --git a/po/bg_BG.po b/po/bg_BG.po
new file mode 100644
index 000000000..a5c9ceecc
--- /dev/null
+++ b/po/bg_BG.po
@@ -0,0 +1,495 @@
+# bulgarian messages for openbox
+# Copyright (C) 2023 Dana Jansens
+# This file is distributed under the same license as the openbox package.
+# "M. Kondarev" , 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Bulgarian_translation.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
+"POT-Creation-Date: 2020-12-18 10:43+0100\n"
+"PO-Revision-Date: 2020-12-18 10:55+0100\n"
+"Language-Team: M. Kondarev\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.1\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: ..\n"
+"Last-Translator: mkkDr2010 \n"
+"Language: bg_BG\n"
+"X-Poedit-SearchPath-0: openbox.po\n"
+
+#: openbox/actions.c:149
+#, c-format
+msgid "Invalid action \"%s\" requested. No such action exists."
+msgstr "Невалидно действие \"%s\". Такова действие не съществува."
+
+#: openbox/actions/execute.c:128
+msgid "No"
+msgstr "Не"
+
+#: openbox/actions/execute.c:129
+msgid "Yes"
+msgstr "Да"
+
+#: openbox/actions/execute.c:133
+msgid "Execute"
+msgstr "Изпълняване"
+
+#: openbox/actions/execute.c:142
+#, c-format
+msgid "Failed to convert the path \"%s\" from utf8"
+msgstr "Неуспешно конвертиране на пътя \"%s\" от utf8"
+
+#: openbox/actions/exit.c:52 openbox/actions/session.c:64 openbox/client.c:3465
+msgid "Cancel"
+msgstr "Отказ"
+
+#: openbox/actions/exit.c:53
+msgid "Exit"
+msgstr "Изход"
+
+#: openbox/actions/exit.c:56
+msgid "Are you sure you want to exit Openbox?"
+msgstr "Наистина ли искате да излезете от Openbox?"
+
+#: openbox/actions/exit.c:57
+msgid "Exit Openbox"
+msgstr "Изход от Openbox"
+
+#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+#. name of the action you write in rc.xml
+#: openbox/actions/session.c:43
+msgid ""
+"The SessionLogout action is not available since Openbox was built without "
+"session management support"
+msgstr ""
+"Действието SessionLogout не е налично, тъй като Openbox е изграден без "
+"поддръжка на управление на сесии"
+
+#: openbox/actions/session.c:65 openbox/actions/session.c:70
+msgid "Log Out"
+msgstr "Напускане"
+
+#: openbox/actions/session.c:69
+msgid "Are you sure you want to log out?"
+msgstr "Наистина ли искате да напуснете сесията ?"
+
+#: openbox/client.c:2012
+msgid "Unnamed Window"
+msgstr "Прозорец без име"
+
+#: openbox/client.c:2026 openbox/client.c:2058
+msgid "Killing..."
+msgstr "Прекратяване..."
+
+#: openbox/client.c:2028 openbox/client.c:2060
+msgid "Not Responding"
+msgstr "Няма обратен отговор"
+
+#: openbox/client.c:3454
+#, c-format
+msgid ""
+"The window \"%s\" does not seem to be responding. Do you want to force it "
+"to exit by sending the %s signal?"
+msgstr ""
+"Прозорец \"%s\" не отговаря. Искате ли принудително да бъде прекратен с "
+"изпращане на сигнал %s?"
+
+#: openbox/client.c:3456
+msgid "End Process"
+msgstr "Завършване на процес"
+
+#: openbox/client.c:3460
+#, c-format
+msgid ""
+"The window \"%s\" does not seem to be responding. Do you want to disconnect "
+"it from the X server?"
+msgstr "Прозорец \"%s\" не отговаря. Искате ли да го изключите от Х-сървъра?"
+
+#: openbox/client.c:3462
+msgid "Disconnect"
+msgstr "Прекъсване"
+
+#: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
+msgid "Go there..."
+msgstr "Отиване към..."
+
+#: openbox/client_list_combined_menu.c:94
+msgid "Manage desktops"
+msgstr "Управление на работните плотове"
+
+#: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
+msgid "_Add new desktop"
+msgstr "Добавяне на нов работен плот(_A)"
+
+#: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
+msgid "_Remove last desktop"
+msgstr "Премахване на последния работен плот(_R)"
+
+#: openbox/client_list_combined_menu.c:149
+msgid "Windows"
+msgstr "Прозорци"
+
+#: openbox/client_list_menu.c:203
+msgid "Desktops"
+msgstr "Работен плот"
+
+#: openbox/client_menu.c:258
+msgid "All desktops"
+msgstr "Всички работни плотове"
+
+#: openbox/client_menu.c:370
+msgid "_Layer"
+msgstr "Ниво(_L)"
+
+#: openbox/client_menu.c:375
+msgid "Always on _top"
+msgstr "Винаги отгоре(_T)"
+
+#: openbox/client_menu.c:376
+msgid "_Normal"
+msgstr "Нормално(_N)"
+
+#: openbox/client_menu.c:377
+msgid "Always on _bottom"
+msgstr "Винаги отдолу(_B)"
+
+#: openbox/client_menu.c:379
+msgid "_Send to desktop"
+msgstr "Преместване в работен плот(_S)"
+
+#: openbox/client_menu.c:383
+msgid "Client menu"
+msgstr "Потребителско меню"
+
+#: openbox/client_menu.c:393
+msgid "R_estore"
+msgstr "Възстановяване(_E)"
+
+#: openbox/client_menu.c:397
+msgid "_Move"
+msgstr "Преместване(_M)"
+
+#: openbox/client_menu.c:399
+msgid "Resi_ze"
+msgstr "Преоразмеряване(_Z)"
+
+#: openbox/client_menu.c:401
+msgid "Ico_nify"
+msgstr "Свиване в икона(_N)"
+
+#: openbox/client_menu.c:405
+msgid "Ma_ximize"
+msgstr "Максимизиране(_X)"
+
+#: openbox/client_menu.c:409
+msgid "_Roll up/down"
+msgstr "Разгъване нагоре/надолу(_R)"
+
+#: openbox/client_menu.c:411
+msgid "Un/_Decorate"
+msgstr "Скриване/Показване на заглавна лента(_D)"
+
+#: openbox/client_menu.c:415
+msgid "_Close"
+msgstr "Затваряне(_C)"
+
+#: openbox/config.c:781
+#, c-format
+msgid "Invalid button \"%s\" specified in config file"
+msgstr "Невалиден бутон в конфигурационния файл \"%s\""
+
+#: openbox/keyboard.c:157
+msgid "Conflict with key binding in config file"
+msgstr "Конфликт с клавишна комбинация в конфигурационния файл"
+
+#: openbox/menu.c:102 openbox/menu.c:110
+#, c-format
+msgid "Unable to find a valid menu file \"%s\""
+msgstr "Невъзможно намирането на валиден файл на меню \"%s\""
+
+#: openbox/menu.c:170
+#, c-format
+msgid "Failed to execute command for pipe-menu \"%s\": %s"
+msgstr "Неуспешно изпълнение на команда за меню–канала \"%s\": %s"
+
+#: openbox/menu.c:184
+#, c-format
+msgid "Invalid output from pipe-menu \"%s\""
+msgstr "Невалиден изход от меню-канала \"%s\""
+
+#: openbox/menu.c:197
+#, c-format
+msgid "Attempted to access menu \"%s\" but it does not exist"
+msgstr "Опит за достъп на меню \"%s\", което не съществува"
+
+#: openbox/menu.c:367 openbox/menu.c:368
+msgid "More..."
+msgstr "Подробно..."
+
+#: openbox/mouse.c:373
+#, c-format
+msgid "Invalid button \"%s\" in mouse binding"
+msgstr "Невалиден бутон \"%s\" в комбинация на мишка"
+
+#: openbox/mouse.c:379
+#, c-format
+msgid "Invalid context \"%s\" in mouse binding"
+msgstr "Невалиден контекст \"%s\" в комбинация на мишка"
+
+#: openbox/openbox.c:133
+#, c-format
+msgid "Unable to change to home directory \"%s\": %s"
+msgstr "Невъзможно преминаването в домашната директория \"%s\": %s"
+
+#: openbox/openbox.c:152
+msgid "Failed to open the display from the DISPLAY environment variable."
+msgstr "Неуспешно отваряне на дисплея от променливата на средата DISPLAY."
+
+#: openbox/openbox.c:183
+msgid "Failed to initialize the obrender library."
+msgstr "Неуспешно инициализиране на библиотека obrender."
+
+#: openbox/openbox.c:194
+msgid "X server does not support locale."
+msgstr "X сървърът не поддържа локала."
+
+#: openbox/openbox.c:196
+msgid "Cannot set locale modifiers for the X server."
+msgstr "Невъзможно установяването на модификаторите на локала за X сървъра."
+
+#: openbox/openbox.c:263
+msgid "Unable to find a valid config file, using some simple defaults"
+msgstr ""
+"Невъзможно намирането на валиден конфигурационен файл, използват се някои "
+"стандартни настройки"
+
+#: openbox/openbox.c:297
+msgid "Unable to load a theme."
+msgstr "Невъзможно зареждането на темата."
+
+#: openbox/openbox.c:377
+#, c-format
+msgid ""
+"One or more XML syntax errors were found while parsing the Openbox "
+"configuration files. See stdout for more information. The last error seen "
+"was in file \"%s\" line %d, with message: %s"
+msgstr ""
+"При обработката на конфигурационния файл на Openbox са намерени една или "
+"повече XML синтактични грешки. За подробна информация вижте stdout. "
+"Последната грешка открита във файл \"%s\" ред %d, с съобщение: %s"
+
+#: openbox/openbox.c:379
+msgid "Openbox Syntax Error"
+msgstr "Openbox Синтактична грешка"
+
+#: openbox/openbox.c:379
+msgid "Close"
+msgstr "Затваряне"
+
+#: openbox/openbox.c:448
+#, c-format
+msgid "Restart failed to execute new executable \"%s\": %s"
+msgstr "При рестартирането не успя да се изпълни нов изпълним файл \"%s\": %s"
+
+#: openbox/openbox.c:518 openbox/openbox.c:520
+msgid "Copyright (c)"
+msgstr "Copyright (c)"
+
+#: openbox/openbox.c:529
+msgid "Syntax: openbox [options]\n"
+msgstr "Синтаксис: openbox [options]\n"
+
+#: openbox/openbox.c:530
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Опции:\n"
+
+#: openbox/openbox.c:531
+msgid " --help Display this help and exit\n"
+msgstr " --help Показване на тази помощ и изход\n"
+
+#: openbox/openbox.c:532
+msgid " --version Display the version and exit\n"
+msgstr " --version Показване на версията и изход\n"
+
+#: openbox/openbox.c:533
+msgid " --replace Replace the currently running window manager\n"
+msgstr " --replace Заменяне на текущия мениджър на прозорци\n"
+
+#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
+#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
+#. fine to leave it as FILE though.
+#: openbox/openbox.c:537
+msgid " --config-file FILE Specify the path to the config file to use\n"
+msgstr ""
+" --config-file FILE Указване на пътя към конфигурационния файл, който да "
+"се използва\n"
+
+#: openbox/openbox.c:538
+msgid " --sm-disable Disable connection to the session manager\n"
+msgstr " --sm-disable Прекъсване на връзката с мениджъра на сесията\n"
+
+#: openbox/openbox.c:539
+msgid ""
+"\n"
+"Passing messages to a running Openbox instance:\n"
+msgstr ""
+"\n"
+"Насочване на съобщенията към Openbox:\n"
+
+#: openbox/openbox.c:540
+msgid " --reconfigure Reload Openbox's configuration\n"
+msgstr ""
+" --reconfigure Презареждане на конфигурационния файл на Openbox\n"
+
+#: openbox/openbox.c:541
+msgid " --restart Restart Openbox\n"
+msgstr " --restart Рестартиране на Openbox\n"
+
+#: openbox/openbox.c:542
+msgid " --exit Exit Openbox\n"
+msgstr " --exit Изход от Openbox\n"
+
+#: openbox/openbox.c:543
+msgid ""
+"\n"
+"Debugging options:\n"
+msgstr ""
+"\n"
+"Опции за отстраняване на грешки:\n"
+
+#: openbox/openbox.c:544
+msgid " --sync Run in synchronous mode\n"
+msgstr " --sync Изпълнение в синхронен режим\n"
+
+#: openbox/openbox.c:545
+msgid " --debug Display debugging output\n"
+msgstr " --debug Показване на изход за отстраняване на грешки\n"
+
+#: openbox/openbox.c:546
+msgid " --debug-focus Display debugging output for focus handling\n"
+msgstr ""
+" --debug-focus Показване на изход за отстраняване на грешки за "
+"обработка на фокуса\n"
+
+#: openbox/openbox.c:547
+msgid " --debug-xinerama Split the display into fake xinerama screens\n"
+msgstr ""
+" --debug-xinerama Разделяне на дисплея на фалшиви екрани xinerama\n"
+
+#: openbox/openbox.c:548
+#, c-format
+msgid ""
+"\n"
+"Please report bugs at %s\n"
+msgstr ""
+"\n"
+"Моля, съобщавайте за грешки на %s\n"
+
+#: openbox/openbox.c:617
+msgid "--config-file requires an argument\n"
+msgstr "--config-file изисква аргумент\n"
+
+#: openbox/openbox.c:660
+#, c-format
+msgid "Invalid command line argument \"%s\"\n"
+msgstr "Невалиден аргумент на командния ред \"%s\"\n"
+
+#: openbox/screen.c:102 openbox/screen.c:190
+#, c-format
+msgid "A window manager is already running on screen %d"
+msgstr "Мениджър на прозорци вече е активен на екран %d"
+
+#: openbox/screen.c:124
+#, c-format
+msgid "Could not acquire window manager selection on screen %d"
+msgstr "Невъзможно прилагането на избрания мениджър на прозорци на екран %d"
+
+#: openbox/screen.c:145
+#, c-format
+msgid "The WM on screen %d is not exiting"
+msgstr "Мениджърът на прозорци на екран %d не се прекратява"
+
+#. TRANSLATORS: If you need to specify a different order of the
+#. arguments, you can use %1$d for the first one and %2$d for the
+#. second one. For example,
+#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
+#: openbox/screen.c:412
+#, c-format
+msgid ""
+"Openbox is configured for %d desktop, but the current session has %d. "
+"Overriding the Openbox configuration."
+msgid_plural ""
+"Openbox is configured for %d desktops, but the current session has %d. "
+"Overriding the Openbox configuration."
+msgstr[0] ""
+"Openbox е конфигуриран за %d работен плот, а в текущата сесия има %d. "
+"Променяне на настройките на Openbox."
+msgstr[1] ""
+"Openbox е конфигуриран за %d работни плота, а в текущата сесия има %d. "
+"Променяне на настройките на Openbox."
+
+#: openbox/screen.c:1180
+#, c-format
+msgid "desktop %i"
+msgstr "работен плот %i"
+
+#: openbox/session.c:104
+#, c-format
+msgid "Unable to make directory \"%s\": %s"
+msgstr "Невъзможно създаването на директория '%s': %s"
+
+#: openbox/session.c:466
+#, c-format
+msgid "Unable to save the session to \"%s\": %s"
+msgstr "Невъзможно запазването на сесията '%s': %s"
+
+#: openbox/session.c:605
+#, c-format
+msgid "Error while saving the session to \"%s\": %s"
+msgstr "Грешка при запазването на сесията в \"%s\": %s"
+
+#: openbox/session.c:842
+msgid "Not connected to a session manager"
+msgstr "Не е свързан към мениджър на сесия"
+
+#: openbox/startupnotify.c:243
+#, c-format
+msgid "Running %s"
+msgstr "Изпълняване %s"
+
+#: openbox/translate.c:59
+#, c-format
+msgid "Invalid modifier key \"%s\" in key/mouse binding"
+msgstr "Невалиден модификатор \"%s\" в комбинация на клавиши/мишка"
+
+#: openbox/translate.c:138
+#, c-format
+msgid "Invalid key code \"%s\" in key binding"
+msgstr "Невалиден код на ключа \"%s\" в клавишна комбинация"
+
+#: openbox/translate.c:145
+#, c-format
+msgid "Invalid key name \"%s\" in key binding"
+msgstr "Невалидно име на ключа \"%s\" в клавишна комбинация"
+
+#: openbox/translate.c:151
+#, c-format
+msgid "Requested key \"%s\" does not exist on the display"
+msgstr "Изискваният ключ \"%s\" не съществува на дисплея"
+
+#: openbox/xerror.c:40
+#, c-format
+msgid "X Error: %s"
+msgstr "X грешка: %s"
+
+#: openbox/prompt.c:200
+msgid "OK"
+msgstr "Добре"
diff --git a/po/de.po b/po/de.po
index 2db570fb6..ca463a241 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,25 +6,27 @@
# Peter Schwindt
# Finn Zirngibl , 2008
# Florian Walch , 2008
-#
+# Volker Ribbert , Sep 2012
msgid ""
msgstr ""
"Project-Id-Version: Openbox 3.4.7\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2014-11-05 16:51+0100\n"
-"PO-Revision-Date: 2012-09-18 21:51+0100\n"
-"Last-Translator: Volker Ribbert \n"
+"POT-Creation-Date: 2015-07-01 11:26+0200\n"
+"PO-Revision-Date: 2018-02-16 19:25+0100\n"
+"Last-Translator: Michael Siegel \n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.6.10\n"
+# Second part copied from PO-Revision-Date: 2008-03-13 13:38+0100
#: openbox/actions.c:234
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr "Ungültige Aktion \"%s\" angefordert. Es gibt keine solche."
+msgstr "Ungültige Aktion \"%s\" angefordert. Diese Aktion existiert nicht."
#: openbox/actions/execute.c:245
msgid "No"
@@ -43,7 +45,7 @@ msgstr "Ausführen"
msgid "Failed to convert the path \"%s\" from utf8"
msgstr "Konnte Pfad \"%s\" nicht von UTF-8 konvertieren"
-#: openbox/actions/exit.c:69 openbox/client.c:3665
+#: openbox/actions/exit.c:69 openbox/client.c:3669
msgid "Cancel"
msgstr "Abbrechen"
@@ -61,7 +63,7 @@ msgstr "Abmelden"
#: openbox/actions/exit.c:78
msgid "Are you sure you want to exit Openbox?"
-msgstr "Möchten Sie Openbox wirklich beenden?"
+msgstr "Möchten Sie Openbox wirklich beenden?"
#: openbox/actions/exit.c:79
msgid "Exit Openbox"
@@ -71,28 +73,29 @@ msgstr "Openbox beenden"
msgid "Unnamed Window"
msgstr "Unbenanntes Fenster"
+# This will be displayed in a window's titlebar.
#: openbox/client.c:2129 openbox/client.c:2160
msgid "Killing..."
-msgstr "Wird gelöscht..."
+msgstr "Wird geschlossen..."
#: openbox/client.c:2131 openbox/client.c:2162
msgid "Not Responding"
msgstr "Reagiert nicht"
-#: openbox/client.c:3654
+#: openbox/client.c:3658
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to force it "
"to exit by sending the %s signal?"
msgstr ""
-"Das Fenster \"%s\" reagiert anscheinend nicht. Möchten Sie es durch Senden "
-"des %s-Signals trotzdem beenden?"
+"Das Fenster \"%s\" reagiert anscheinend nicht. Wollen Sie es durch Senden "
+"des %s-Signals trotzdem schließen?"
-#: openbox/client.c:3656
+#: openbox/client.c:3660
msgid "End Process"
-msgstr "Prozess beenden"
+msgstr "Fenster schließen"
-#: openbox/client.c:3660
+#: openbox/client.c:3664
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
@@ -101,7 +104,7 @@ msgstr ""
"Das Fenster \"%s\" reagiert anscheinend nicht. Möchten Sie es vom X-Server "
"trennen?"
-#: openbox/client.c:3662
+#: openbox/client.c:3666
msgid "Disconnect"
msgstr "Trennen"
@@ -111,15 +114,15 @@ msgstr "Dorthin wechseln..."
#: openbox/client_list_combined_menu.c:100
msgid "Manage desktops"
-msgstr "Desktops verwalten"
+msgstr "Arbeitsflächen verwalten"
#: openbox/client_list_combined_menu.c:101 openbox/client_list_menu.c:166
msgid "_Add new desktop"
-msgstr "_Neuen Desktop hinzufügen"
+msgstr "_Neue Arbeitsfläche hinzufügen"
#: openbox/client_list_combined_menu.c:102 openbox/client_list_menu.c:167
msgid "_Remove last desktop"
-msgstr "_Letzten Desktop entfernen"
+msgstr "_Letzte Arbeitsfläche entfernen"
#: openbox/client_list_combined_menu.c:157
msgid "Windows"
@@ -127,15 +130,15 @@ msgstr "Fenster"
#: openbox/client_list_menu.c:214
msgid "Desktops"
-msgstr "Desktops"
+msgstr "Arbeitsflächen"
#: openbox/client_menu.c:259
msgid "All desktops"
-msgstr "Alle Desktops"
+msgstr "Alle Arbeitsflächen"
#: openbox/client_menu.c:371
msgid "_Layer"
-msgstr "_Layer"
+msgstr "_Ebene"
#: openbox/client_menu.c:376
msgid "Always on _top"
@@ -155,7 +158,7 @@ msgstr "_Verschieben nach"
#: openbox/client_menu.c:384
msgid "Client menu"
-msgstr "Anwendungsmenü"
+msgstr "Fenstermenü"
#: openbox/client_menu.c:394
msgid "R_estore"
@@ -192,23 +195,25 @@ msgstr "_Schließen"
#: openbox/config.c:563
#, c-format
msgid "Invalid context \"%s\" in mouse binding"
-msgstr "Maus-Einbindung mit ungültigem Kontext \"%s\""
+msgstr "Maustastenbelegung mit ungültigem Kontext \"%s\""
#: openbox/config.c:931
#, c-format
msgid "Invalid button \"%s\" specified in config file"
-msgstr "Ungültige Taste \"%s\" in Konfigurationsdatei"
+msgstr "Ungültige Tastenangabe \"%s\" in Konfigurationsdatei"
#: openbox/config.c:956
msgid ""
"Openbox was compiled without image loading support. Icons in menus will not "
"be loaded."
msgstr ""
+"Openbox wurde ohne Unterstützung für das Laden von Bildern kompiliert. Icons "
+"in Menüs werden nicht geladen."
#: openbox/debug.c:57
#, c-format
msgid "Unable to make directory '%s': %s"
-msgstr ""
+msgstr "Kann Verzeichnis '%s' nicht anlegen: %s"
#: openbox/debug.c:195 openbox/openbox.c:377
msgid "Close"
@@ -216,7 +221,7 @@ msgstr "Schließen"
#: openbox/keyboard.c:161
msgid "Conflict with key binding in config file"
-msgstr "Störende Tastenkombination in Konfigurationsdatei"
+msgstr "Konflikt mit Tastenbelegung in Konfigurationsdatei"
#: openbox/menu.c:103 openbox/menu.c:115
#, c-format
@@ -233,10 +238,12 @@ msgstr "Befehl \"%s\" für Pipe-Menü nicht ausführbar: %s"
msgid "Invalid output from pipe-menu \"%s\""
msgstr "Ungültige Ausgabe vom Pipe-Menü \"%s\""
+# Copied from PO-Revision-Date: 2008-03-13 13:38+0100
#: openbox/menu.c:195
#, c-format
msgid "Attempted to access menu \"%s\" but it does not exist"
-msgstr "Versuchter Zugriff auf Menü \"%s\", doch es existiert nicht"
+msgstr ""
+"Auf das Menü \"%s\" konnte nicht zugegriffen werden, da es nicht existiert"
#: openbox/menu.c:411 openbox/menu.c:412
msgid "More..."
@@ -245,7 +252,7 @@ msgstr "Mehr..."
#: openbox/mouse.c:382
#, c-format
msgid "Invalid button \"%s\" in mouse binding"
-msgstr "Maus-Einbindung mit ungültiger Taste \"%s\""
+msgstr "Maustastenbelegung mit ungültiger Taste \"%s\""
#: openbox/openbox.c:137
#, c-format
@@ -260,9 +267,12 @@ msgstr "Konnte das Display aus der Umgebungsvariable DISPLAY nicht öffnen."
msgid "Failed to initialize the obrender library."
msgstr "Konnte die Bibliothek 'obrender' nicht initialisieren."
+# See Openbox source file given below as well as
+# https://www.x.org/archive//X11R7.5/doc/man/man3/XSetLocaleModifiers.3.html
+# for why this is the correct translation.
#: openbox/openbox.c:193
msgid "X server does not support locale."
-msgstr "'locale' wird vom X-Server nicht unterstützt."
+msgstr "Gebietsschema wird vom X-Server nicht unterstützt."
#: openbox/openbox.c:195
msgid "Cannot set locale modifiers for the X server."
@@ -271,7 +281,7 @@ msgstr "Kann die Lokalisierungsmodifizierer für den X-Server nicht setzen."
#: openbox/openbox.c:254
msgid "Unable to find a valid config file, using some simple defaults"
msgstr ""
-"Keine gültige Konfigurationsdatei vorhanden, benutze einfache Standardwerte"
+"Keine gültige Konfigurationsdatei vorhanden. Benutze einfache Standardwerte."
#: openbox/openbox.c:270
#, c-format
@@ -284,9 +294,10 @@ msgstr ""
"Syntaxfehler gefunden. Die Standardausgabe enthält weitere Informationen. "
"Der letzte Fehler wurde in der Datei \"%s\" in Zeile %d festgestellt: %s"
+# Simply translating theme as "Thema" just isn't right.
#: openbox/openbox.c:295
msgid "Unable to load a theme."
-msgstr "Kann kein Thema laden."
+msgstr "Kann kein Stilschema laden."
#: openbox/openbox.c:376
msgid "Openbox Syntax Error"
@@ -303,7 +314,7 @@ msgstr "Copyright (c)"
#: openbox/openbox.c:532
msgid "Syntax: openbox [options]\n"
-msgstr "Eingabe: openbox [Optionen]\n"
+msgstr "Aufruf: openbox [Optionen]\n"
#: openbox/openbox.c:533
msgid ""
@@ -370,7 +381,7 @@ msgstr " --sync im Synchronmodus starten\n"
#: openbox/openbox.c:548
msgid " --startup CMD Run CMD after starting\n"
-msgstr ""
+msgstr " --startup BEFEHL Nach dem Starten BEFEHL ausführen\n"
#: openbox/openbox.c:549
msgid " --debug Display debugging output\n"
@@ -384,11 +395,12 @@ msgstr ""
#: openbox/openbox.c:551
msgid " --debug-session Display debugging output for session management\n"
msgstr ""
+" --debug-session Fehlersuche-Ergebnis für Sitzungsverwaltung anzeigen\n"
#: openbox/openbox.c:552
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
msgstr ""
-" --debug-xinerama Anzeige in imitierte Xinerama-Bildschirme teilen\n"
+" --debug-xinerama Anzeige in virtuelle Xinerama-Bildschirme aufteilen\n"
#: openbox/openbox.c:553
#, c-format
@@ -419,6 +431,7 @@ msgstr "Ein Fenstermanager läuft bereits auf Bildschirm %d"
msgid "Could not acquire window manager selection on screen %d"
msgstr "Auswahl des Fenstermanagers auf Bildschirm %d nicht verfügbar"
+# ...beendet sich nicht
#: openbox/screen.c:150
#, c-format
msgid "The WM on screen %d is not exiting"
@@ -446,18 +459,20 @@ msgstr[1] ""
#: openbox/screen.c:1204
#, c-format
msgid "desktop %i"
-msgstr "Desktop %i"
+msgstr "Arbeitsfläche %i"
#: openbox/startupnotify.c:241
#, c-format
msgid "Running %s"
msgstr "Starte %s"
+# "Modifier-Taste"...
#: openbox/translate.c:59
#, c-format
msgid "Invalid modifier key \"%s\" in key/mouse binding"
-msgstr "Ungültige Modifier-Taste \"%s\" in Tasten/Maus-Einbindung"
+msgstr "Ungültige Modifier-Taste \"%s\" in (Maus-)Tastenbelegung"
+# "Tastencode..." – look for better term.
#: openbox/translate.c:138
#, c-format
msgid "Invalid key code \"%s\" in key binding"
diff --git a/po/eo.po b/po/eo.po
index a48c1a387..3a18db5a5 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1,17 +1,17 @@
-# Esperanto translation of Openbox
-# Copyright (C) 2012 Dana Jenses
+# Esperanto translations for Openbox package.
+# Copyright (C) 2020 Dana Jansens
# This file is distributed under the same license as the Openbox package.
-# Richard Penman 2014
+# Keith , 2020.
#
msgid ""
msgstr ""
-"Project-Id-Version: 3.5.0\n"
+"Project-Id-Version: Openbox 3.6.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2018-03-12 14:46+0100\n"
-"PO-Revision-Date: 2014-11-18 22:28+0100\n"
-"Last-Translator: Richard Penman \n"
+"POT-Creation-Date: 2014-11-05 16:51+0100\n"
+"PO-Revision-Date: 2020-02-24 21:39-0500\n"
+"Last-Translator: Keith \n"
"Language-Team: Esperanto\n"
-"Language: Eo\n"
+"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -20,7 +20,7 @@ msgstr ""
#: openbox/actions.c:234
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr "Nevalida ago \"%s\" petita. Tiu ago ne ekzistas."
+msgstr "Nevalida ago \"%s\" petita. Ne ekzistas tia ago."
#: openbox/actions/execute.c:245
msgid "No"
@@ -32,24 +32,24 @@ msgstr "Jes"
#: openbox/actions/execute.c:250
msgid "Execute"
-msgstr "Effektivigi"
+msgstr "Plenumigi"
#: openbox/actions/execute.c:259
#, c-format
msgid "Failed to convert the path \"%s\" from utf8"
-msgstr "Malsukcesis konverti la vojon \"%s\" el utf8"
+msgstr "Malsukcesis konverti la vojon \"%s\" el UTF-8"
-#: openbox/actions/exit.c:69 openbox/client.c:3675
+#: openbox/actions/exit.c:69 openbox/client.c:3665
msgid "Cancel"
msgstr "Nuligi"
#: openbox/actions/exit.c:70
msgid "Exit"
-msgstr "Eliri"
+msgstr "Fini"
#: openbox/actions/exit.c:74
msgid "Are you sure you want to log out?"
-msgstr "Ĉu vi certas ke vi volas elsaluti?"
+msgstr "Ĉu vi certas ke vi volas elsaluti"
#: openbox/actions/exit.c:75
msgid "Log Out"
@@ -57,53 +57,53 @@ msgstr "Elsaluti"
#: openbox/actions/exit.c:78
msgid "Are you sure you want to exit Openbox?"
-msgstr "Ĉu vi certas ke vi volas eliri Openbox?"
+msgstr "Ĉu vi certas ke vi volas fini el Openbox?"
#: openbox/actions/exit.c:79
msgid "Exit Openbox"
-msgstr "Eliri Openbox"
+msgstr "Fini el Openbox"
-#: openbox/client.c:2120
+#: openbox/client.c:2115
msgid "Unnamed Window"
-msgstr "Sennoma Fenestro"
+msgstr "Sennoma fenestro"
-#: openbox/client.c:2135 openbox/client.c:2166
+#: openbox/client.c:2129 openbox/client.c:2160
msgid "Killing..."
-msgstr "Mortiganta ..."
+msgstr "Haltigas..."
-#: openbox/client.c:2137 openbox/client.c:2168
+#: openbox/client.c:2131 openbox/client.c:2162
msgid "Not Responding"
-msgstr "Ne Respondante"
+msgstr "Ne respondas"
-#: openbox/client.c:3664
+#: openbox/client.c:3654
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to force it "
"to exit by sending the %s signal?"
msgstr ""
-"Ŝajne la fenestro \"%s\" ne respondas. Ĉu vi volas devigi ĝin eliri per "
-"sendi la %s signalo?"
+"La fenestro \"%s\" ŝajne ne respondas. Ĉu vi volas eldevigi, ke ĝi finiĝi "
+"per sendo de la signalo %s?"
-#: openbox/client.c:3666
+#: openbox/client.c:3656
msgid "End Process"
-msgstr "Fina Procezo"
+msgstr "Fini procezon"
-#: openbox/client.c:3670
+#: openbox/client.c:3660
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
"it from the X server?"
msgstr ""
-"Ŝajne la fenestro \"%s\" ne respondas. Ĉu vi volas malkonekti ĝin de la X-"
+"La fenestro \"%s\" ŝajne ne respondas. Ĉu vi volas malkonekti ĝin de la X-"
"servilo?"
-#: openbox/client.c:3672
+#: openbox/client.c:3662
msgid "Disconnect"
msgstr "Malkonekti"
#: openbox/client_list_combined_menu.c:93 openbox/client_list_menu.c:90
msgid "Go there..."
-msgstr "Iru tien ..."
+msgstr "Iri tien..."
#: openbox/client_list_combined_menu.c:100
msgid "Manage desktops"
@@ -115,15 +115,15 @@ msgstr "_Aldoni novan labortablon"
#: openbox/client_list_combined_menu.c:102 openbox/client_list_menu.c:167
msgid "_Remove last desktop"
-msgstr "_Forigi lastan labortablon"
+msgstr "_Forigi antaŭan labortablon"
#: openbox/client_list_combined_menu.c:157
msgid "Windows"
-msgstr "Vindozo"
+msgstr "Fenestro"
#: openbox/client_list_menu.c:214
msgid "Desktops"
-msgstr "Labortabloj"
+msgstr "Labortablo"
#: openbox/client_menu.c:259
msgid "All desktops"
@@ -135,19 +135,19 @@ msgstr "_Tavolo"
#: openbox/client_menu.c:376
msgid "Always on _top"
-msgstr "Ĉiam _supre"
+msgstr "Ĉiam ĉe _supro"
#: openbox/client_menu.c:377
msgid "_Normal"
-msgstr "_Kutima"
+msgstr "_Normala"
#: openbox/client_menu.c:378
msgid "Always on _bottom"
-msgstr "Ĉiam _sube"
+msgstr "Ĉiam ĉe _malsupro"
#: openbox/client_menu.c:380
msgid "_Send to desktop"
-msgstr "_Sendi al labortablo"
+msgstr "Sendi al _labortablo"
#: openbox/client_menu.c:384
msgid "Client menu"
@@ -159,15 +159,15 @@ msgstr "R_estarigi"
#: openbox/client_menu.c:398
msgid "_Move"
-msgstr "_Movi"
+msgstr "M_ovi"
#: openbox/client_menu.c:400
msgid "Resi_ze"
-msgstr "Regrandi_gi"
+msgstr "Ali_grandigi"
#: openbox/client_menu.c:402
msgid "Ico_nify"
-msgstr "Iko_nigi"
+msgstr "Minim&umigi"
#: openbox/client_menu.c:406
msgid "Ma_ximize"
@@ -175,36 +175,38 @@ msgstr "Ma_ksimumigi"
#: openbox/client_menu.c:410
msgid "_Roll up/down"
-msgstr "_Rulimi supren / malsupren"
+msgstr "_Ruli (mal)supren/supren"
#: openbox/client_menu.c:414
msgid "Un/_Decorate"
-msgstr "Mal/_Ornami"
+msgstr "(Mal)ornam_i"
#: openbox/client_menu.c:418
msgid "_Close"
-msgstr "_Fermi"
+msgstr "F_ermi"
-#: openbox/config.c:567
+#: openbox/config.c:563
#, c-format
msgid "Invalid context \"%s\" in mouse binding"
-msgstr "Nevalida kunteksto \"%s\" en musa ligilo"
+msgstr "Nevalida kunteksto \"%s\" en butonkombino"
-#: openbox/config.c:949
+#: openbox/config.c:931
#, c-format
msgid "Invalid button \"%s\" specified in config file"
-msgstr "Nevalida butono \"%s\" specifita en agorda dosiero"
+msgstr "Nevalida butono \"%s\" specifita en la agorda dosiero"
-#: openbox/config.c:974
+#: openbox/config.c:956
msgid ""
"Openbox was compiled without image loading support. Icons in menus will not "
"be loaded."
msgstr ""
+"Openbox kompilumiĝis sen regado por bilda ŝargado. Piktogramoj en menuoj ne "
+"ŝargiĝos."
#: openbox/debug.c:57
#, c-format
msgid "Unable to make directory '%s': %s"
-msgstr ""
+msgstr "Ne eblas fari dosierujon '%s': %s"
#: openbox/debug.c:195 openbox/openbox.c:377
msgid "Close"
@@ -212,61 +214,62 @@ msgstr "Fermi"
#: openbox/keyboard.c:161
msgid "Conflict with key binding in config file"
-msgstr "Konflikto kun ŝlosila ligilo en agorda dosiero"
+msgstr "Konflikto kun klavkombino en la agorda dosiero"
#: openbox/menu.c:103 openbox/menu.c:115
#, c-format
msgid "Unable to find a valid menu file \"%s\""
-msgstr "Nesukcesis trovi validan menuan dosieron \"%s\""
+msgstr "Ne eblas trovi validan menuo-dosieron \"%s\""
#: openbox/menu.c:168
#, c-format
msgid "Failed to execute command for pipe-menu \"%s\": %s"
-msgstr "Malsukcesis plenumi komandon por pipo-menuon \"%s\": %s"
+msgstr "Malsukcesis plenumigi komandon por dukto-menuo \"%s\": %s"
#: openbox/menu.c:182
#, c-format
msgid "Invalid output from pipe-menu \"%s\""
-msgstr "Nevalida respondo el tuba menuo \"%s\""
+msgstr "Nevalida eligo de dukto-menuo \"%s\""
#: openbox/menu.c:195
#, c-format
msgid "Attempted to access menu \"%s\" but it does not exist"
-msgstr "Provis aliri menuon \"%s\" sed ĝi ne ekzistas"
+msgstr "Provis atingi menuon \"%s\" sed ĝi ne ekzista"
#: openbox/menu.c:411 openbox/menu.c:412
msgid "More..."
-msgstr "Pli ..."
+msgstr "Pliaj..."
#: openbox/mouse.c:382
#, c-format
msgid "Invalid button \"%s\" in mouse binding"
-msgstr "Nevalida butono \"%s\" en musa ligilo"
+msgstr "Nevalida butono \"%s\" en butonkombino"
#: openbox/openbox.c:137
#, c-format
msgid "Unable to change to home directory \"%s\": %s"
-msgstr "Nekapablas ŝanĝi hejman dosierujon \"%s\": %s"
+msgstr "Ne eblas ŝanĝiĝi al hejmdosierujo \"%s\": %s"
#: openbox/openbox.c:152
msgid "Failed to open the display from the DISPLAY environment variable."
-msgstr "Malsukcesis malfermi la vidigilon el la DISPLAY media vario."
+msgstr "Malsukcesis malfermi la ekranprezenton laŭ la medivariablo DISPLAY."
#: openbox/openbox.c:182
msgid "Failed to initialize the obrender library."
-msgstr "Malsukcesis pravalorizi la obrender biblioteko."
+msgstr "Malsukcesis startigi la bibliotekon obrender."
#: openbox/openbox.c:193
msgid "X server does not support locale."
-msgstr "X-servilo ne subtenas lokaĵaron."
+msgstr "X-servilo ne havas tiun lokaĵaron."
#: openbox/openbox.c:195
msgid "Cannot set locale modifiers for the X server."
-msgstr "Ne povas agordi lokaĵarajn modifilojn por la X-servilo."
+msgstr "Ne eblas agordi lokaĵarajn modifilojn por la X-servilo."
#: openbox/openbox.c:254
msgid "Unable to find a valid config file, using some simple defaults"
-msgstr "Nekapablas trovi validan agordan dosieron, uzante implicitaj valoroj"
+msgstr ""
+"Ne eblas trovi validan agordan dosieron. Uzas iujn simplajn aprioraĵojn"
#: openbox/openbox.c:270
#, c-format
@@ -275,9 +278,9 @@ msgid ""
"configuration files. See stdout for more information. The last error seen "
"was in file \"%s\" line %d, with message: %s"
msgstr ""
-"Unu aŭ pli da XML sintaksaj eraroj estis trovitaj dum sintaksa analizo de la "
-"Openbox agordaj dosieroj. Vidu stdout por pli da informo. La lasta eraro "
-"vidita en dosiero \"%s\" linio %d , kun mesaĝo: %s"
+"Unu aŭ pli sintaksaj eraroj de XML estis trovitaj dum analizo de la agordaj "
+"dosieroj de Openbox. Legu la eneligilon por pliaj inforomoj. La lasta eraro "
+"vidita estis en dosiero \"%s\", linio %d, kun mesaĝo: %s"
#: openbox/openbox.c:295
msgid "Unable to load a theme."
@@ -285,12 +288,12 @@ msgstr "Ne eblas ŝargi etoson."
#: openbox/openbox.c:376
msgid "Openbox Syntax Error"
-msgstr "Openbox Sintakseraro"
+msgstr "Sintaksa eraro en Openbox"
#: openbox/openbox.c:442
#, c-format
msgid "Restart failed to execute new executable \"%s\": %s"
-msgstr "Relanĉu fiaskis plenumi novan plenumon \"%s\": %s"
+msgstr "Restarto malsukcesis plenumigi novan plenumigeblaĵon \"%s\": %s"
#: openbox/openbox.c:521 openbox/openbox.c:523
msgid "Copyright (c)"
@@ -298,7 +301,7 @@ msgstr "Kopirajto (c)"
#: openbox/openbox.c:532
msgid "Syntax: openbox [options]\n"
-msgstr "Sintakso: Openbox [opcioj]\n"
+msgstr "Sintakso: openbox [elektebloj]\n"
#: openbox/openbox.c:533
msgid ""
@@ -306,30 +309,34 @@ msgid ""
"Options:\n"
msgstr ""
"\n"
-"Opcioj:\n"
+"Elektebloj:\n"
#: openbox/openbox.c:534
msgid " --help Display this help and exit\n"
-msgstr " --help Montri ĉi tiun helpon kaj eliri \n"
+msgstr " --help Montri ĉi tiun helpilon kaj finiĝi\n"
#: openbox/openbox.c:535
msgid " --version Display the version and exit\n"
-msgstr " --version Montri la version kaj eliri\n"
+msgstr " --version Montri la eldonon kaj finigi\n"
#: openbox/openbox.c:536
msgid " --replace Replace the currently running window manager\n"
-msgstr " --replace Anstataŭigi la nunan fenestroadministrilon\n"
+msgstr ""
+" --replace Anstataŭigi la nune plenumiĝantan "
+"fenestradministrilon\n"
#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
#. fine to leave it as FILE though.
#: openbox/openbox.c:540
msgid " --config-file FILE Specify the path to the config file to use\n"
-msgstr " --config-file DOSIERO Specifi la vojon al la agorda dosiero\n"
+msgstr ""
+"--config-file DOSIERO\n"
+" Specifi la vojon de la uzota agorda dosiero\n"
#: openbox/openbox.c:541
msgid " --sm-disable Disable connection to the session manager\n"
-msgstr " --sm-disable Malebligi konekton al la seancadministrilo\n"
+msgstr " --sm-disable Malebligi konektiĝon al la seancadministrilo\n"
#: openbox/openbox.c:542
msgid ""
@@ -337,19 +344,19 @@ msgid ""
"Passing messages to a running Openbox instance:\n"
msgstr ""
"\n"
-"Sendantaj mesaĝoj al plenuma Openbox ekzemplo:\n"
+"Donado de mesaĝoj al plenumiĝanta okazo de Openbox:\n"
#: openbox/openbox.c:543
msgid " --reconfigure Reload Openbox's configuration\n"
-msgstr " --reconfigure Reŝarĝi agordojn de Openbox\n"
+msgstr " --reconfigure Reŝargi la agordon de Openbox\n"
#: openbox/openbox.c:544
msgid " --restart Restart Openbox\n"
-msgstr " --restart Relanĉi Openbox\n"
+msgstr " --restart Restartigo de Openbox\n"
#: openbox/openbox.c:545
msgid " --exit Exit Openbox\n"
-msgstr " --exit Eliri Openbox\n"
+msgstr " --exit Fini de Openbox\n"
#: openbox/openbox.c:546
msgid ""
@@ -357,31 +364,33 @@ msgid ""
"Debugging options:\n"
msgstr ""
"\n"
-"Sencimigo opciojn:\n"
+"Senerarigaj elektebloj:\n"
#: openbox/openbox.c:547
msgid " --sync Run in synchronous mode\n"
-msgstr " --sync Plenumi en sinkronigita reĝimo\n"
+msgstr " --sync Plenumigi laŭ sinkrona reĝimo\n"
#: openbox/openbox.c:548
msgid " --startup CMD Run CMD after starting\n"
-msgstr ""
+msgstr " --startup KOMANDO Plenumigi KOMANDOn post starto\n"
#: openbox/openbox.c:549
msgid " --debug Display debugging output\n"
-msgstr " --debug Vidi sencimigan eligon\n"
+msgstr " --debug Montri senerarigajn eligojn\n"
#: openbox/openbox.c:550
msgid " --debug-focus Display debugging output for focus handling\n"
-msgstr " --debug-focus Vidi sencimigan eligon por fokusi uzado\n"
+msgstr " --debug-focus Montri senerarigajn eligojn por fokus-traktado\n"
#: openbox/openbox.c:551
msgid " --debug-session Display debugging output for session management\n"
msgstr ""
+" --debug-session Montri senerarigajn eligojn por seancadminstrado\n"
#: openbox/openbox.c:552
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
-msgstr " --debug-Xinerama Apartigi la ekranon en malvera xinerama ekranoj\n"
+msgstr ""
+" --debug-xinerama Dividi la ekranprezenton en falsajn xinerama-ekranojn\n"
#: openbox/openbox.c:553
#, c-format
@@ -390,32 +399,32 @@ msgid ""
"Please report bugs at %s\n"
msgstr ""
"\n"
-"Bonvolu raporti cimojn ĉe %s\n"
+"Bonvolu sendi programerarojn al %s\n"
#: openbox/openbox.c:636 openbox/openbox.c:670
#, c-format
msgid "%s requires an argument\n"
-msgstr ""
+msgstr "%s postulas argumenton\n"
#: openbox/openbox.c:713
#, c-format
msgid "Invalid command line argument \"%s\"\n"
-msgstr "Nevalida komanda linia argumento \"%s\"\n"
+msgstr "Nevalida komandlinia argumento \"%s\"\n"
#: openbox/screen.c:106 openbox/screen.c:191
#, c-format
msgid "A window manager is already running on screen %d"
-msgstr "Fenestroadministrilo jam plenumas sur ekrano %d"
+msgstr "Fenestradministrilo jam plenumiĝas ĉe ekrano %d"
#: openbox/screen.c:127
#, c-format
msgid "Could not acquire window manager selection on screen %d"
-msgstr "Ne povis akiri fenestroadministrilan selektadon sur ekrano %d"
+msgstr "Ne eblas akiri fenestradministrila elekto ĉe ekrano %d"
#: openbox/screen.c:150
#, c-format
msgid "The WM on screen %d is not exiting"
-msgstr "La WM sur ekrano %d ne eliris"
+msgstr "La FA ĉe ekrano %d ne finiĝas"
#. TRANSLATORS: If you need to specify a different order of the
#. arguments, you can use %1$d for the first one and %2$d for the
@@ -430,11 +439,11 @@ msgid_plural ""
"Openbox is configured for %d desktops, but the current session has %d. "
"Overriding the Openbox configuration."
msgstr[0] ""
-"Openbox estas agordita por %d labortablo, sed la nuna seancon havas %d. "
-"Superrega la Openbox agordon."
+"Openbox estas agordata por %d labortablo, sed la nuna seanco havas %d. "
+"Superregas la Openbox-agordon."
msgstr[1] ""
-"Openbox estas agordita por %d labortablo, sed la nuna seancon havas %d. "
-"Superrega la Openbox agordon."
+"Openbox estas agordata por %d labortabloj, sed la nuna seanco havas %d. "
+"Superregas la Openbox-agordon."
#: openbox/screen.c:1204
#, c-format
@@ -444,47 +453,69 @@ msgstr "labortablo %i"
#: openbox/startupnotify.c:241
#, c-format
msgid "Running %s"
-msgstr "Plenumanta %s"
+msgstr "Plenumas je %s"
#: openbox/translate.c:59
#, c-format
msgid "Invalid modifier key \"%s\" in key/mouse binding"
-msgstr "Ne valida modifa klavo \"%s\" en ŝlosila / muso ligilo"
+msgstr "Nevalida modifila klavo \"%s\" en klava/butona kombino"
#: openbox/translate.c:138
#, c-format
msgid "Invalid key code \"%s\" in key binding"
-msgstr "Ne valida virtualklava kodero \"%s\" en klava ligilo"
+msgstr "Nevalida klavkodo \"%s\" en klavkombino"
#: openbox/translate.c:145
#, c-format
msgid "Invalid key name \"%s\" in key binding"
-msgstr "Ne valida klava nomo \"%s\" en klava ligilo"
+msgstr "Nevalida klavnomo \"%s\" en klavkombino"
#: openbox/translate.c:151
#, c-format
msgid "Requested key \"%s\" does not exist on the display"
-msgstr "Petita klavo \"%s\" ne ekzistas sur la ekrano"
+msgstr "Petita klavo \"%s\" ne ekzistas ĉe la ekranprezento"
#: openbox/prompt.c:154
msgid "OK"
-msgstr "Bone"
+msgstr "OK"
+
+#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+#. name of the action you write in rc.xml
+#: openbox/actions/session.c:43
+msgid ""
+"The SessionLogout action is not available since Openbox was built without "
+"session management support"
+msgstr ""
+"La ago SessionLogout ne estas disponebla, ĉar Openbox estis muntita sen "
+"seancadministrado"
+
+#: openbox/openbox.c:617
+msgid "--config-file requires an argument\n"
+msgstr "--config-file postulas argumenton\n"
+
+#: openbox/session.c:104
+#, c-format
+msgid "Unable to make directory \"%s\": %s"
+msgstr "Ne eblas fari dosierujon \"%s\": %s"
-#~ msgid ""
-#~ "The SessionLogout action is not available since Openbox was built without "
-#~ "session management support"
-#~ msgstr ""
-#~ "La SessionLogout ago ne estas disponebla ekde Openbox estis konstruita "
-#~ "sen subteno por seancadministran "
+#: openbox/session.c:466
+#, c-format
+msgid "Unable to save the session to \"%s\": %s"
+msgstr "Ne eblas konservi la seancon al \"%s\": %s"
-#~ msgid "Unable to save the session to \"%s\": %s"
-#~ msgstr "Ne eblis konservi la seancon al \"%s\": %s"
+#: openbox/session.c:605
+#, c-format
+msgid "Error while saving the session to \"%s\": %s"
+msgstr "Eraro dum konservi la seancon al \"%s\": %s"
-#~ msgid "Error while saving the session to \"%s\": %s"
-#~ msgstr "Eraro dum konservi la seanco al \"%s\": %s"
+#: openbox/session.c:842
+msgid "Not connected to a session manager"
+msgstr "Ne konektiĝinta al seancadministrilo"
-#~ msgid "Not connected to a session manager"
-#~ msgstr "Ne konektita al seancadministrilo"
+#: openbox/xerror.c:40
+#, c-format
+msgid "X Error: %s"
+msgstr "X-eraro: %s"
-#~ msgid "X Error: %s"
-#~ msgstr "X Eraro: %s"
+msgid "ĉe"
+msgstr "at"
diff --git a/po/ru.po b/po/ru.po
index 62424a33b..ec74d8950 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -4,80 +4,93 @@
# Alexey Remizov , 2004.
# Nikita Bukhvostov , 2007.
# Moroz Sergey L. , 2008.
+# Alexey Loginov , 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Openbox 3.4.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
-"POT-Creation-Date: 2014-11-05 16:51+0100\n"
-"PO-Revision-Date: 2008-05-02 10:25+0200\n"
-"Last-Translator: Moroz Sergey L. \n"
-"Language-Team: None\n"
-"Language: ru\n"
+"POT-Creation-Date: 2008-11-15 22:28+0100\n"
+"PO-Revision-Date: 2019-01-25 09:21+0300\n"
+"Last-Translator: Alexey Loginov \n"
+"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Language: ru\n"
+"X-Generator: Poedit 2.0.9\n"
-#: openbox/actions.c:234
+#: openbox/actions.c:149
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
msgstr "Запрошено неверное действие \"%s\". Такого действия нет."
-#: openbox/actions/execute.c:245
+#: openbox/actions/execute.c:128
msgid "No"
msgstr "Нет"
-#: openbox/actions/execute.c:246
+#: openbox/actions/execute.c:129
msgid "Yes"
msgstr "Да"
-#: openbox/actions/execute.c:250
+#: openbox/actions/execute.c:133
msgid "Execute"
msgstr "Запустить"
-#: openbox/actions/execute.c:259
+#: openbox/actions/execute.c:142
#, c-format
msgid "Failed to convert the path \"%s\" from utf8"
msgstr "Неудачная конвертация пути \"%s\" из utf8"
-#: openbox/actions/exit.c:69 openbox/client.c:3665
+#: openbox/actions/exit.c:52 openbox/actions/session.c:64 openbox/client.c:3465
msgid "Cancel"
msgstr "Отменить"
-#: openbox/actions/exit.c:70
+#: openbox/actions/exit.c:53
msgid "Exit"
msgstr "Выйти"
-#: openbox/actions/exit.c:74
-msgid "Are you sure you want to log out?"
-msgstr "Вы действительно хотите выйти?"
-
-#: openbox/actions/exit.c:75
-msgid "Log Out"
-msgstr "Выход"
-
-#: openbox/actions/exit.c:78
+#: openbox/actions/exit.c:56
msgid "Are you sure you want to exit Openbox?"
msgstr "Вы действительно хотите выйти из Openbox?"
-#: openbox/actions/exit.c:79
+#: openbox/actions/exit.c:57
msgid "Exit Openbox"
msgstr "Выйти из Openbox"
-#: openbox/client.c:2115
+#. TRANSLATORS: Don't translate the word "SessionLogout" as it's the
+#. name of the action you write in rc.xml
+#: openbox/actions/session.c:43
+msgid ""
+"The SessionLogout action is not available since Openbox was built without "
+"session management support"
+msgstr ""
+"Действие 'SessionLogout' недоступно так как Openbox был собран без поддержки "
+"управления сессиями"
+
+#: openbox/actions/session.c:65 openbox/actions/session.c:70
+msgid "Log Out"
+msgstr "Выход"
+
+#: openbox/actions/session.c:69
+msgid "Are you sure you want to log out?"
+msgstr "Вы действительно хотите выйти?"
+
+#: openbox/client.c:2012
msgid "Unnamed Window"
msgstr "Безымянное окно"
-#: openbox/client.c:2129 openbox/client.c:2160
+#: openbox/client.c:2026 openbox/client.c:2058
msgid "Killing..."
msgstr "Завершение..."
-#: openbox/client.c:2131 openbox/client.c:2162
+#: openbox/client.c:2028 openbox/client.c:2060
msgid "Not Responding"
msgstr "Нет ответа"
-#: openbox/client.c:3654
+#: openbox/client.c:3454
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to force it "
@@ -86,164 +99,149 @@ msgstr ""
"Похоже, окно \"%s\" не отвечает. Хотите принудительно послать сигнал выхода "
"%s?"
-#: openbox/client.c:3656
+#: openbox/client.c:3456
msgid "End Process"
msgstr "Закончить процесс"
-#: openbox/client.c:3660
+#: openbox/client.c:3460
#, c-format
msgid ""
"The window \"%s\" does not seem to be responding. Do you want to disconnect "
"it from the X server?"
msgstr "Похоже, окно \"%s\" не отвечает. Хотите отключить его от Х-сервера?"
-#: openbox/client.c:3662
+#: openbox/client.c:3462
msgid "Disconnect"
msgstr "Отключить"
-#: openbox/client_list_combined_menu.c:93 openbox/client_list_menu.c:90
+#: openbox/client_list_combined_menu.c:87 openbox/client_list_menu.c:91
msgid "Go there..."
msgstr "Перейти..."
-#: openbox/client_list_combined_menu.c:100
+#: openbox/client_list_combined_menu.c:94
msgid "Manage desktops"
msgstr "Управление рабочими столами"
-#: openbox/client_list_combined_menu.c:101 openbox/client_list_menu.c:166
+#: openbox/client_list_combined_menu.c:95 openbox/client_list_menu.c:155
msgid "_Add new desktop"
msgstr "Добавить новый рабочий стол(_A)"
-#: openbox/client_list_combined_menu.c:102 openbox/client_list_menu.c:167
+#: openbox/client_list_combined_menu.c:96 openbox/client_list_menu.c:156
msgid "_Remove last desktop"
msgstr "Удалить последний рабочий стол(_R)"
-#: openbox/client_list_combined_menu.c:157
+#: openbox/client_list_combined_menu.c:149
msgid "Windows"
msgstr "Окна"
-#: openbox/client_list_menu.c:214
+#: openbox/client_list_menu.c:203
msgid "Desktops"
msgstr "Рабочие столы"
-#: openbox/client_menu.c:259
+#: openbox/client_menu.c:258
msgid "All desktops"
msgstr "Все рабочие столы"
-#: openbox/client_menu.c:371
+#: openbox/client_menu.c:370
msgid "_Layer"
msgstr "Положение(_L)"
-#: openbox/client_menu.c:376
+#: openbox/client_menu.c:375
msgid "Always on _top"
msgstr "Всегда наверху(_T)"
-#: openbox/client_menu.c:377
+#: openbox/client_menu.c:376
msgid "_Normal"
msgstr "Обычное(_N)"
-#: openbox/client_menu.c:378
+#: openbox/client_menu.c:377
msgid "Always on _bottom"
msgstr "Всегда внизу(_B)"
-#: openbox/client_menu.c:380
+#: openbox/client_menu.c:379
msgid "_Send to desktop"
msgstr "Отправить на рабочий стол(_S)"
-#: openbox/client_menu.c:384
+#: openbox/client_menu.c:383
msgid "Client menu"
msgstr "Клиентское меню"
-#: openbox/client_menu.c:394
+#: openbox/client_menu.c:393
msgid "R_estore"
msgstr "Восстановить(_E)"
-#: openbox/client_menu.c:398
+#: openbox/client_menu.c:397
msgid "_Move"
msgstr "Переместить(_M)"
-#: openbox/client_menu.c:400
+#: openbox/client_menu.c:399
msgid "Resi_ze"
msgstr "Изменить размер(_Z)"
-#: openbox/client_menu.c:402
+#: openbox/client_menu.c:401
msgid "Ico_nify"
msgstr "Свернуть в значок(_N)"
-#: openbox/client_menu.c:406
+#: openbox/client_menu.c:405
msgid "Ma_ximize"
msgstr "Распахнуть(_X)"
-#: openbox/client_menu.c:410
+#: openbox/client_menu.c:409
msgid "_Roll up/down"
msgstr "Рас/скрутить(_R)"
-#: openbox/client_menu.c:414
+#: openbox/client_menu.c:411
msgid "Un/_Decorate"
-msgstr "Рас/Декорировать(_D)"
+msgstr "Рас/декорировать(_D)"
-#: openbox/client_menu.c:418
+#: openbox/client_menu.c:415
msgid "_Close"
msgstr "Закрыть(_C)"
-#: openbox/config.c:563
-#, c-format
-msgid "Invalid context \"%s\" in mouse binding"
-msgstr "Неверная связь \"%s\" в комбинации мыши"
-
-#: openbox/config.c:931
+#: openbox/config.c:781
#, c-format
msgid "Invalid button \"%s\" specified in config file"
msgstr "В файле конфигурации определена неверная кнопка \"%s\""
-#: openbox/config.c:956
-msgid ""
-"Openbox was compiled without image loading support. Icons in menus will not "
-"be loaded."
-msgstr ""
-
-#: openbox/debug.c:57
-#, c-format
-msgid "Unable to make directory '%s': %s"
-msgstr "Невозможно создать директорию '%s': %s"
-
-#: openbox/debug.c:195 openbox/openbox.c:377
-msgid "Close"
-msgstr "Закрыть"
-
-#: openbox/keyboard.c:161
+#: openbox/keyboard.c:157
msgid "Conflict with key binding in config file"
msgstr "Конфликтует с комбинацией клавиш из файла конфигурации"
-#: openbox/menu.c:103 openbox/menu.c:115
+#: openbox/menu.c:102 openbox/menu.c:110
#, c-format
msgid "Unable to find a valid menu file \"%s\""
msgstr "Невозможно найти соответствующий файл меню \"%s\""
-#: openbox/menu.c:168
+#: openbox/menu.c:170
#, c-format
msgid "Failed to execute command for pipe-menu \"%s\": %s"
msgstr "Неудачное выполнение команды для меню канала \"%s\": %s"
-#: openbox/menu.c:182
+#: openbox/menu.c:184
#, c-format
msgid "Invalid output from pipe-menu \"%s\""
msgstr "Неверный выход меню канала \"%s\""
-#: openbox/menu.c:195
+#: openbox/menu.c:197
#, c-format
msgid "Attempted to access menu \"%s\" but it does not exist"
msgstr "Попытка доступа к меню \"%s\", которого не существует"
-#: openbox/menu.c:411 openbox/menu.c:412
+#: openbox/menu.c:367 openbox/menu.c:368
msgid "More..."
-msgstr "Еще..."
+msgstr "Ещё..."
-#: openbox/mouse.c:382
+#: openbox/mouse.c:373
#, c-format
msgid "Invalid button \"%s\" in mouse binding"
msgstr "Неверная кнопка \"%s\" в комбинации мыши"
-#: openbox/openbox.c:137
+#: openbox/mouse.c:379
+#, c-format
+msgid "Invalid context \"%s\" in mouse binding"
+msgstr "Неверная связь \"%s\" в комбинации мыши"
+
+#: openbox/openbox.c:133
#, c-format
msgid "Unable to change to home directory \"%s\": %s"
msgstr "Невозможно изменить на домашнюю директорию \"%s\": %s"
@@ -252,25 +250,29 @@ msgstr "Невозможно изменить на домашнюю директ
msgid "Failed to open the display from the DISPLAY environment variable."
msgstr "Невозможно открыть экран из переменной окружения DISPLAY."
-#: openbox/openbox.c:182
+#: openbox/openbox.c:183
msgid "Failed to initialize the obrender library."
msgstr "Невозможно запустить библиотеку obrender."
-#: openbox/openbox.c:193
+#: openbox/openbox.c:194
msgid "X server does not support locale."
msgstr "X сервер не поддерживает локаль."
-#: openbox/openbox.c:195
+#: openbox/openbox.c:196
msgid "Cannot set locale modifiers for the X server."
msgstr "Невозможно установить модификаторы локали для X сервера."
-#: openbox/openbox.c:254
+#: openbox/openbox.c:263
msgid "Unable to find a valid config file, using some simple defaults"
msgstr ""
"Невозможно найти правильный файл настройки, используется простой по "
"умолчанию."
-#: openbox/openbox.c:270
+#: openbox/openbox.c:297
+msgid "Unable to load a theme."
+msgstr "Невозможно загрузить тему."
+
+#: openbox/openbox.c:377
#, c-format
msgid ""
"One or more XML syntax errors were found while parsing the Openbox "
@@ -281,28 +283,28 @@ msgstr ""
"синтаксических ошибок XML. Подробную информацию просмотрите в выводе "
"stdout. Последняя ошибка замечена в файле \"%s\" строке %d, с сообщением: %s"
-#: openbox/openbox.c:295
-msgid "Unable to load a theme."
-msgstr "Невозможно загрузить тему."
-
-#: openbox/openbox.c:376
+#: openbox/openbox.c:379
msgid "Openbox Syntax Error"
msgstr "Ошибка синтаксиса Openbox"
-#: openbox/openbox.c:442
+#: openbox/openbox.c:379
+msgid "Close"
+msgstr "Закрыть"
+
+#: openbox/openbox.c:448
#, c-format
msgid "Restart failed to execute new executable \"%s\": %s"
msgstr "При перезапуске не удалось выполнить новую команду \"%s\": %s"
-#: openbox/openbox.c:521 openbox/openbox.c:523
+#: openbox/openbox.c:518 openbox/openbox.c:520
msgid "Copyright (c)"
msgstr "Copyright (c)"
-#: openbox/openbox.c:532
+#: openbox/openbox.c:529
msgid "Syntax: openbox [options]\n"
-msgstr "Синтаксис: openbox [options]\n"
+msgstr "Синтаксис: openbox [опции]\n"
-#: openbox/openbox.c:533
+#: openbox/openbox.c:530
msgid ""
"\n"
"Options:\n"
@@ -310,30 +312,30 @@ msgstr ""
"\n"
"Опции:\n"
-#: openbox/openbox.c:534
+#: openbox/openbox.c:531
msgid " --help Display this help and exit\n"
msgstr " --help Показать эту справку и выйти\n"
-#: openbox/openbox.c:535
+#: openbox/openbox.c:532
msgid " --version Display the version and exit\n"
msgstr " --version Показать версию и выйти\n"
-#: openbox/openbox.c:536
+#: openbox/openbox.c:533
msgid " --replace Replace the currently running window manager\n"
msgstr " --replace Заменить текущий запущенный менеджер окон\n"
#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
#. fine to leave it as FILE though.
-#: openbox/openbox.c:540
+#: openbox/openbox.c:537
msgid " --config-file FILE Specify the path to the config file to use\n"
-msgstr " --config-file FILE Указать путь к используемому файлу настройки\n"
+msgstr " --config-file ФАЙЛ Указать путь к используемому файлу настройки\n"
-#: openbox/openbox.c:541
+#: openbox/openbox.c:538
msgid " --sm-disable Disable connection to the session manager\n"
msgstr " --sm-disable Разорвать соединение с менеджером сессии\n"
-#: openbox/openbox.c:542
+#: openbox/openbox.c:539
msgid ""
"\n"
"Passing messages to a running Openbox instance:\n"
@@ -341,19 +343,19 @@ msgstr ""
"\n"
"Отправка сообщений запущенному экземпляру Openbox:\n"
-#: openbox/openbox.c:543
+#: openbox/openbox.c:540
msgid " --reconfigure Reload Openbox's configuration\n"
msgstr " --reconfigure Перезагрузить конфигурацию Openbox\n"
-#: openbox/openbox.c:544
+#: openbox/openbox.c:541
msgid " --restart Restart Openbox\n"
msgstr " --restart Перезапустить Openbox\n"
-#: openbox/openbox.c:545
+#: openbox/openbox.c:542
msgid " --exit Exit Openbox\n"
msgstr " --exit Выйти из Openbox\n"
-#: openbox/openbox.c:546
+#: openbox/openbox.c:543
msgid ""
"\n"
"Debugging options:\n"
@@ -361,31 +363,23 @@ msgstr ""
"\n"
"Настройки отладки:\n"
-#: openbox/openbox.c:547
+#: openbox/openbox.c:544
msgid " --sync Run in synchronous mode\n"
msgstr " --sync Запустить в режиме синхронизации\n"
-#: openbox/openbox.c:548
-msgid " --startup CMD Run CMD after starting\n"
-msgstr ""
-
-#: openbox/openbox.c:549
+#: openbox/openbox.c:545
msgid " --debug Display debugging output\n"
msgstr " --debug Показать вывод отладки\n"
-#: openbox/openbox.c:550
+#: openbox/openbox.c:546
msgid " --debug-focus Display debugging output for focus handling\n"
msgstr " --debug-focus Показать вывод отладки для выделенного фокусом\n"
-#: openbox/openbox.c:551
-msgid " --debug-session Display debugging output for session management\n"
-msgstr ""
-
-#: openbox/openbox.c:552
+#: openbox/openbox.c:547
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
msgstr " --debug-xinerama Разделить дисплей на фальшивые экраны xinerama\n"
-#: openbox/openbox.c:553
+#: openbox/openbox.c:548
#, c-format
msgid ""
"\n"
@@ -394,36 +388,35 @@ msgstr ""
"\n"
"Пожалуйста, сообщайте об ошибках на %s\n"
-#: openbox/openbox.c:636 openbox/openbox.c:670
-#, c-format
-msgid "%s requires an argument\n"
-msgstr "%s требует указания аргумента\n"
+#: openbox/openbox.c:617
+msgid "--config-file requires an argument\n"
+msgstr "--config-file требует указания аргумента\n"
-#: openbox/openbox.c:713
+#: openbox/openbox.c:660
#, c-format
msgid "Invalid command line argument \"%s\"\n"
msgstr "Неверный аргумент командной строки \"%s\"\n"
-#: openbox/screen.c:106 openbox/screen.c:191
+#: openbox/screen.c:102 openbox/screen.c:190
#, c-format
msgid "A window manager is already running on screen %d"
msgstr "Оконный менеджер уже запущен на экране %d"
-#: openbox/screen.c:127
+#: openbox/screen.c:124
#, c-format
msgid "Could not acquire window manager selection on screen %d"
msgstr "Невозможно получить выбранный менеджер окон на экране %d"
-#: openbox/screen.c:150
+#: openbox/screen.c:145
#, c-format
msgid "The WM on screen %d is not exiting"
-msgstr "Менеджер окон на экране %d еще запущен"
+msgstr "Менеджер окон на экране %d ещё запущен"
#. TRANSLATORS: If you need to specify a different order of the
#. arguments, you can use %1$d for the first one and %2$d for the
#. second one. For example,
#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
-#: openbox/screen.c:421
+#: openbox/screen.c:412
#, c-format
msgid ""
"Openbox is configured for %d desktop, but the current session has %d. "
@@ -432,18 +425,40 @@ msgid_plural ""
"Openbox is configured for %d desktops, but the current session has %d. "
"Overriding the Openbox configuration."
msgstr[0] ""
-"Openbox сконфигурирован для %d рабочих столов, а в текущей сессии имеется "
+"Openbox сконфигурирован для %d рабочего стола, а в текущей сессии имеется "
"%d. Изменены настройки Openbox."
msgstr[1] ""
"Openbox сконфигурирован для %d рабочих столов, а в текущей сессии имеется "
"%d. Изменены настройки Openbox."
+msgstr[2] ""
+"Openbox сконфигурирован для %d рабочих столов, а в текущей сессии имеется "
+"%d. Изменены настройки Openbox."
-#: openbox/screen.c:1204
+#: openbox/screen.c:1180
#, c-format
msgid "desktop %i"
msgstr "рабочий стол %i"
-#: openbox/startupnotify.c:241
+#: openbox/session.c:104
+#, c-format
+msgid "Unable to make directory \"%s\": %s"
+msgstr "Невозможно создать директорию \"%s\": %s"
+
+#: openbox/session.c:466
+#, c-format
+msgid "Unable to save the session to \"%s\": %s"
+msgstr "Невозможно сохранить сессию в \"%s\": %s"
+
+#: openbox/session.c:605
+#, c-format
+msgid "Error while saving the session to \"%s\": %s"
+msgstr "Ошибка при сохранении сессии в \"%s\": %s"
+
+#: openbox/session.c:842
+msgid "Not connected to a session manager"
+msgstr "Не подключен к менеджеру сессии"
+
+#: openbox/startupnotify.c:243
#, c-format
msgid "Running %s"
msgstr "Запуск %s"
@@ -468,6 +483,14 @@ msgstr "Неверное имя ключа \"%s\" в комбинации кла
msgid "Requested key \"%s\" does not exist on the display"
msgstr "Запрошенного ключа \"%s\" на экране не существует"
-#: openbox/prompt.c:154
+#: openbox/xerror.c:40
+#, c-format
+msgid "X Error: %s"
+msgstr "Ошибка X: %s"
+
+#: openbox/prompt.c:200
msgid "OK"
msgstr "OK"
+
+#~ msgid "Failed to execute \"%s\": %s"
+#~ msgstr "Не удалось запустить \"%s\": %s"
diff --git a/po/sk.po b/po/sk.po
index 249cb325e..ae075eca4 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1,7 +1,7 @@
# Translation of openbox.pot to Slovak.
# Copyright (C) 2006 Mikael Magnusson
# This file is distributed under the same license as the Openbox 3 package.
-# Jozef Říha , 2006, 2007.
+# Jozef Říha , 2006, 2007, 2020.
# František Eliáš , 2009.
#
msgid ""
@@ -9,19 +9,20 @@ msgstr ""
"Project-Id-Version: Openbox-3.4.8\n"
"Report-Msgid-Bugs-To: http://bugzilla.icculus.org\n"
"POT-Creation-Date: 2014-11-05 16:51+0100\n"
-"PO-Revision-Date: 2009-07-16 17:30+0200\n"
-"Last-Translator: Frantisek Elias \n"
+"PO-Revision-Date: 2020-12-18 23:40+0100\n"
+"Last-Translator: Jose Riha \n"
"Language-Team: Slovak \n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+"X-Generator: Poedit 2.4.1\n"
#: openbox/actions.c:234
#, c-format
msgid "Invalid action \"%s\" requested. No such action exists."
-msgstr "Vyžiadaná neplatná akcia \"%s\". Takáto akcia neexistuje."
+msgstr "Vyžiadaná neplatná akcia \"%s\". Táto akcia neexistuje."
#: openbox/actions/execute.c:245
msgid "No"
@@ -58,7 +59,7 @@ msgstr "Odhlásiť sa"
#: openbox/actions/exit.c:78
msgid "Are you sure you want to exit Openbox?"
-msgstr "Určite chcete ukončiť Openbox?"
+msgstr "Naozaj chcete ukončiť Openbox?"
#: openbox/actions/exit.c:79
msgid "Exit Openbox"
@@ -78,10 +79,8 @@ msgstr "Neodpovedá"
#: openbox/client.c:3654
#, c-format
-msgid ""
-"The window \"%s\" does not seem to be responding. Do you want to force it "
-"to exit by sending the %s signal?"
-msgstr ""
+msgid "The window \"%s\" does not seem to be responding. Do you want to force it to exit by sending the %s signal?"
+msgstr "Zdá sa, že okno \"%s\" neodpovedá. Chcete ho ukončiť signálom %s?"
#: openbox/client.c:3656
msgid "End Process"
@@ -89,10 +88,8 @@ msgstr "Ukončiť proces"
#: openbox/client.c:3660
#, c-format
-msgid ""
-"The window \"%s\" does not seem to be responding. Do you want to disconnect "
-"it from the X server?"
-msgstr "Zdá sa, že okno \"%s\" neodpovedá. Chcete ho odpojiť z X serveru?"
+msgid "The window \"%s\" does not seem to be responding. Do you want to disconnect it from the X server?"
+msgstr "Zdá sa, že okno \"%s\" neodpovedá. Chcete ho odpojiť od X servera?"
#: openbox/client.c:3662
msgid "Disconnect"
@@ -100,7 +97,7 @@ msgstr "Odpojiť"
#: openbox/client_list_combined_menu.c:93 openbox/client_list_menu.c:90
msgid "Go there..."
-msgstr "Prejsť na..."
+msgstr "Ísť tam..."
#: openbox/client_list_combined_menu.c:100
msgid "Manage desktops"
@@ -148,7 +145,7 @@ msgstr "_Poslať na plochu"
#: openbox/client_menu.c:384
msgid "Client menu"
-msgstr "Menu klienta"
+msgstr "Ponuka klienta"
#: openbox/client_menu.c:394
msgid "R_estore"
@@ -164,7 +161,7 @@ msgstr "Z_mena veľkosti"
#: openbox/client_menu.c:402
msgid "Ico_nify"
-msgstr "Do iko_ny"
+msgstr "Mi_nimalizovať"
#: openbox/client_menu.c:406
msgid "Ma_ximize"
@@ -185,18 +182,16 @@ msgstr "Z_avrieť"
#: openbox/config.c:563
#, c-format
msgid "Invalid context \"%s\" in mouse binding"
-msgstr "Neplatný kontext \"%s\" v priradení myši"
+msgstr "Neplatný kontext \"%s\" v nastavení myši"
#: openbox/config.c:931
#, c-format
msgid "Invalid button \"%s\" specified in config file"
-msgstr "Neplatné tlačidlo \"%s\" špecifikované v konfiguračnom súbore"
+msgstr "Neplatné tlačidlo \"%s\" uvedené v konfiguračnom súbore"
#: openbox/config.c:956
-msgid ""
-"Openbox was compiled without image loading support. Icons in menus will not "
-"be loaded."
-msgstr ""
+msgid "Openbox was compiled without image loading support. Icons in menus will not be loaded."
+msgstr "Openbox bol skompilovaný bez podpory načítania obrázkov. Ikony v ponukách nebudú načítané."
#: openbox/debug.c:57
#, c-format
@@ -209,12 +204,12 @@ msgstr "Zavrieť"
#: openbox/keyboard.c:161
msgid "Conflict with key binding in config file"
-msgstr "Konflikt priradenie klávesov v konfiguračnom súbore"
+msgstr "Konflikt priradenia klávesov v konfiguračnom súbore"
#: openbox/menu.c:103 openbox/menu.c:115
#, c-format
msgid "Unable to find a valid menu file \"%s\""
-msgstr "Nepodarilo sa nájsť platný súbor menu \"%s\""
+msgstr "Nepodarilo sa nájsť platný súbor ponuky \"%s\""
#: openbox/menu.c:168
#, c-format
@@ -238,7 +233,7 @@ msgstr "Viac..."
#: openbox/mouse.c:382
#, c-format
msgid "Invalid button \"%s\" in mouse binding"
-msgstr "Neplatné tlačidlo \"%s\" v priradení myši"
+msgstr "Neplatné tlačidlo \"%s\" v nastavení myši"
#: openbox/openbox.c:137
#, c-format
@@ -247,7 +242,7 @@ msgstr "Nepodarilo sa prejsť do domovského adresára \"%s\": %s"
#: openbox/openbox.c:152
msgid "Failed to open the display from the DISPLAY environment variable."
-msgstr "Nepodarilo sa otvoriť displej z premennej prostredia DISPLAY"
+msgstr "Nepodarilo sa otvoriť displej z premennej prostredia DISPLAY."
#: openbox/openbox.c:182
msgid "Failed to initialize the obrender library."
@@ -255,46 +250,44 @@ msgstr "Nepodarilo sa inicializovať knižnicu obrender."
#: openbox/openbox.c:193
msgid "X server does not support locale."
-msgstr "X server nepodporuje locale."
+msgstr "X server nepodporuje lokalizáciu."
#: openbox/openbox.c:195
msgid "Cannot set locale modifiers for the X server."
-msgstr "Nemôžem nastaviť locale pre X server."
+msgstr "Nemôžem nastaviť modifikátory lokalizácie pre X server."
#: openbox/openbox.c:254
msgid "Unable to find a valid config file, using some simple defaults"
-msgstr ""
-"Nepodarilo sa nájsť platný konfiguračný súbor, použijem jednoduché "
-"implicitné nastavenia"
+msgstr "Nepodarilo sa nájsť platný konfiguračný súbor, použijem jednoduché predvolené nastavenia"
#: openbox/openbox.c:270
#, c-format
msgid ""
-"One or more XML syntax errors were found while parsing the Openbox "
-"configuration files. See stdout for more information. The last error seen "
-"was in file \"%s\" line %d, with message: %s"
+"One or more XML syntax errors were found while parsing the Openbox configuration files. See stdout for more information. The last error seen was in "
+"file \"%s\" line %d, with message: %s"
msgstr ""
+"Pri čítaní konfiguračných súborov Openboxu sa vyskytla jedna alebo viacero chýb. Posledná zaznamenaná chyba je v súbore \"%s\" na riadku %d so správou: %s"
#: openbox/openbox.c:295
msgid "Unable to load a theme."
-msgstr "Nepodarilo sa nahrať tému."
+msgstr "Nepodarilo sa nahrať motív."
#: openbox/openbox.c:376
msgid "Openbox Syntax Error"
-msgstr ""
+msgstr "Chyba syntaxe Openboxu"
#: openbox/openbox.c:442
#, c-format
msgid "Restart failed to execute new executable \"%s\": %s"
-msgstr "Reštart zlyhal pri spúšťaní novej binárky \"%s\": %s"
+msgstr "Pri reštarte sa nepodarilo spustiť nový program \"%s\": %s"
#: openbox/openbox.c:521 openbox/openbox.c:523
msgid "Copyright (c)"
-msgstr "Copyright (c)"
+msgstr "Autorské práva (c)"
#: openbox/openbox.c:532
msgid "Syntax: openbox [options]\n"
-msgstr "Syntax: openbox [volby]\n"
+msgstr "Syntax: openbox [možnosti]\n"
#: openbox/openbox.c:533
msgid ""
@@ -302,31 +295,30 @@ msgid ""
"Options:\n"
msgstr ""
"\n"
-"Volby:\n"
+"Možnosti:\n"
#: openbox/openbox.c:534
msgid " --help Display this help and exit\n"
-msgstr " --help Zobrazi tuto napovedu a skonci\n"
+msgstr " --help Zobraziť tohto pomocníka a skončiť\n"
#: openbox/openbox.c:535
msgid " --version Display the version and exit\n"
-msgstr " --version Zobrazi cislo verzie a skonci\n"
+msgstr " --version Zobraziť verziu a skončiť\n"
#: openbox/openbox.c:536
msgid " --replace Replace the currently running window manager\n"
-msgstr ""
-" --replace Nahradi momentalne beziace sedenie window manazera\n"
+msgstr " --replace Nahradiť bežiaceho správcu okien\n"
#. TRANSLATORS: if you translate "FILE" here, make sure to keep the "Specify..."
#. aligned still, if you have to, make a new line with \n and 22 spaces. It's
#. fine to leave it as FILE though.
#: openbox/openbox.c:540
msgid " --config-file FILE Specify the path to the config file to use\n"
-msgstr ""
+msgstr " --config-file SÚBOR Cesta ku konfiguračnému súboru\n"
#: openbox/openbox.c:541
msgid " --sm-disable Disable connection to the session manager\n"
-msgstr " --sm-disable Vypne spojenie k manazerovi sedenia\n"
+msgstr " --sm-disable Nepripájať sa ku správcovi sedenia\n"
#: openbox/openbox.c:542
msgid ""
@@ -334,19 +326,19 @@ msgid ""
"Passing messages to a running Openbox instance:\n"
msgstr ""
"\n"
-"Predavanie sprav beziacej instancii Openboxu:\n"
+"Zasielanie správ bežiacej inštancii Openboxu:\n"
#: openbox/openbox.c:543
msgid " --reconfigure Reload Openbox's configuration\n"
-msgstr " --reconfigure Opatovne nacita konfiguraciu Openboxu\n"
+msgstr " --reconfigure Znovu načítať konfiguráciu Openboxu\n"
#: openbox/openbox.c:544
msgid " --restart Restart Openbox\n"
-msgstr " --restart Restartuje Openbox\n"
+msgstr " --restart Reštartovať Openbox\n"
#: openbox/openbox.c:545
msgid " --exit Exit Openbox\n"
-msgstr ""
+msgstr " --exit Ukončiť Openbox\n"
#: openbox/openbox.c:546
msgid ""
@@ -354,32 +346,31 @@ msgid ""
"Debugging options:\n"
msgstr ""
"\n"
-"Volby ladenia:\n"
+"Možnosti ladenia:\n"
#: openbox/openbox.c:547
msgid " --sync Run in synchronous mode\n"
-msgstr " --sync Spustit v synchronnom mode\n"
+msgstr " --sync Spustiť v synchrónnom režime\n"
#: openbox/openbox.c:548
msgid " --startup CMD Run CMD after starting\n"
-msgstr ""
+msgstr " --startup PRÍKAZ Po naštartovaní spustiť PRÍKAZ\n"
#: openbox/openbox.c:549
msgid " --debug Display debugging output\n"
-msgstr " --debug Zobrazit ladiaci vystup\n"
+msgstr " --debug Zobraziť výstup ladenia\n"
#: openbox/openbox.c:550
msgid " --debug-focus Display debugging output for focus handling\n"
-msgstr ""
-" --debug-focus Zobrazit ladiaci vystup pre manipulaciu s fokusom\n"
+msgstr " --debug-focus Zobraziť výstup ladenia pre aktiváciu okien\n"
#: openbox/openbox.c:551
msgid " --debug-session Display debugging output for session management\n"
-msgstr ""
+msgstr " --debug-session Zobraziť výstup ladenia pre správu sedenia\n"
#: openbox/openbox.c:552
msgid " --debug-xinerama Split the display into fake xinerama screens\n"
-msgstr " --debug-xinerama Rozdelit displej na neprave obrazovky xineramy\n"
+msgstr " --debug-xinerama Rozdeliť displej na falošné obrazovky xineramy\n"
#: openbox/openbox.c:553
#, c-format
@@ -388,32 +379,32 @@ msgid ""
"Please report bugs at %s\n"
msgstr ""
"\n"
-"Prosim hlaste chyby na %s\n"
+"Chyby, prosím, nahláste na %s\n"
#: openbox/openbox.c:636 openbox/openbox.c:670
#, c-format
msgid "%s requires an argument\n"
-msgstr "%s vyzaduje parameter\n"
+msgstr "%s vyžaduje parameter\n"
#: openbox/openbox.c:713
#, c-format
msgid "Invalid command line argument \"%s\"\n"
-msgstr "Neplatny parameter prikazoveho riadku \"%s\"\n"
+msgstr "Neplatný parameter príkazového riadka \"%s\"\n"
#: openbox/screen.c:106 openbox/screen.c:191
#, c-format
msgid "A window manager is already running on screen %d"
-msgstr "Okenny manazer uz bezi na obrazovke %d"
+msgstr "Na obrazovke %d už beží správca"
#: openbox/screen.c:127
#, c-format
msgid "Could not acquire window manager selection on screen %d"
-msgstr "Nepodarilo sa získať výber okenného manažéra na obrazovke %d"
+msgstr "Nepodarilo sa prevziať správcu okien na obrazovke %d"
#: openbox/screen.c:150
#, c-format
msgid "The WM on screen %d is not exiting"
-msgstr "Okenný manažér na obrazovke %d sa neukončuje"
+msgstr "Správca okien na obrazovke %d sa odmieta ukončiť"
#. TRANSLATORS: If you need to specify a different order of the
#. arguments, you can use %1$d for the first one and %2$d for the
@@ -421,14 +412,11 @@ msgstr "Okenný manažér na obrazovke %d sa neukončuje"
#. "The current session has %2$d desktops, but Openbox is configured for %1$d ..."
#: openbox/screen.c:421
#, c-format
-msgid ""
-"Openbox is configured for %d desktop, but the current session has %d. "
-"Overriding the Openbox configuration."
-msgid_plural ""
-"Openbox is configured for %d desktops, but the current session has %d. "
-"Overriding the Openbox configuration."
-msgstr[0] ""
-msgstr[1] ""
+msgid "Openbox is configured for %d desktop, but the current session has %d. Overriding the Openbox configuration."
+msgid_plural "Openbox is configured for %d desktops, but the current session has %d. Overriding the Openbox configuration."
+msgstr[0] "Openbox je nakonfigurovaný pre %d plôch, ale aktuálne sedenia ich má %d. Konfigurácia Openboxu bude zmenená."
+msgstr[1] "Openbox je nakonfigurovaný pre %d plochu, ale aktuálne sedenia ich má %d. Konfigurácia Openboxu bude zmenená."
+msgstr[2] "Openbox je nakonfigurovaný pre %d plochy, ale aktuálne sedenia ich má %d. Konfigurácia Openboxu bude zmenená."
#: openbox/screen.c:1204
#, c-format
@@ -443,17 +431,17 @@ msgstr "Spúšťam %s"
#: openbox/translate.c:59
#, c-format
msgid "Invalid modifier key \"%s\" in key/mouse binding"
-msgstr "Neplatný kláves pre modifikátor \"%s\" v priradení klávesov/myši"
+msgstr "Neplatný modifikátor \"%s\" v nastaveni klávesnice/myši"
#: openbox/translate.c:138
#, c-format
msgid "Invalid key code \"%s\" in key binding"
-msgstr "Neplatný kód klávesu \"%s\" v priradení klávesov"
+msgstr "Neplatný kód klávesu \"%s\" v nastavení"
#: openbox/translate.c:145
#, c-format
msgid "Invalid key name \"%s\" in key binding"
-msgstr "Neplatný názov klávesu \"%s\" v priradení klávesov"
+msgstr "Neplatný názov klávesu \"%s\" v nastavení"
#: openbox/translate.c:151
#, c-format
diff --git a/tools/gdm-control/gdm-control.c b/tools/gdm-control/gdm-control.c
index db28841d7..25fbc509a 100644
--- a/tools/gdm-control/gdm-control.c
+++ b/tools/gdm-control/gdm-control.c
@@ -190,7 +190,7 @@ static gboolean gdm_connect()
}
response = gdm_send_protocol_msg(GDM_PROTOCOL_MSG_VERSION);
- if (!response || strncmp(response, "GDM ", strlen("GDM ") != 0)) {
+ if (!response || strncmp(response, "GDM ", strlen("GDM ")) != 0) {
g_free(response);
g_warning("Failed to get protocol version from GDM");