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 @@ - + client-menu @@ -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");