Compare commits

..

11 Commits

Author SHA1 Message Date
Matthias Clasen
675214574c css: Break the selector tree into many
Since we can only match one name, doing a hash
by matcher name lets us quickly discard most
initial selectors, and having much smaller trees.

We can apply the same idea for style classes,
as well, by looking up a tree for each class.

Comparing the number of gtk_css_selector_match() calls
while moving the pointer outside the window, I see:

Before:
65773 selector matches (12863 positive)

After:
32704 selector matches (12278 positive)

So this cuts the numer of selectors we need to check
roughly in half, at the cost of a handful of hash table
lookups.
2020-01-19 19:00:00 -05:00
Matthias Clasen
31b15bf5e0 css: Add getters for a matchers name and classes
These will be used in the selector tree in the future.

The classes getter annoyingly has to allow returning
allocated memory, due to widget paths. This can be
removed when widget paths go away.
2020-01-19 19:00:00 -05:00
Matthias Clasen
7e2e92a87e cssselector: Inline a few things 2020-01-19 15:56:54 -05:00
Matthias Clasen
be4d42507c style cascade: Remove some pointless casts
The casts and checks in gtkstylecascade.c are leftovers
from when we had GtkStyleProviderPrivate, and no longer
serve any purpose.
2020-01-19 15:56:54 -05:00
Matthias Clasen
6e88ccf7fb pick: Take advantage of transform categories
Transform categories let us easily avoid doing matrix math
when we can just do a simple translation.
2020-01-19 15:56:54 -05:00
Matthias Clasen
cec4c15f05 Refactor gtk_widget_pick
Split this into a recursive part and a public
entry point. This lets us avoid some duplicate
checks.
2020-01-19 15:56:54 -05:00
Piotr Drąg
ce1f1f7dec Update Polish translation 2020-01-19 13:04:34 +01:00
Matthias Clasen
95f00c6071 css: Redo the pseudoclass selectors
There is no need to duplicate the classes, we can make
do with a single class for all the states.
2020-01-18 23:06:25 -05:00
Matthias Clasen
55cfeccfd2 css: Go back to clearing out selectors
Now that we use the selector tree for change computation
again, we don't need the ruleset selectors anymore.
Bring back the code that cleans them out.
2020-01-18 23:06:25 -05:00
Goran Vidović
2301916fa4 Update Croatian translation 2020-01-19 00:33:57 +00:00
Goran Vidović
bb4efe18b7 Update Croatian translation 2020-01-19 00:13:42 +00:00
17 changed files with 2952 additions and 2619 deletions

View File

@@ -72,6 +72,80 @@ gtk_css_matcher_widget_path_get_previous (GtkCssMatcher *matcher,
return TRUE;
}
static const char *
gtk_css_matcher_widget_path_get_name (const GtkCssMatcher *matcher)
{
const GtkWidgetPath *siblings;
siblings = gtk_widget_path_iter_get_siblings (matcher->path.path, matcher->path.index);
if (siblings && matcher->path.sibling_index != gtk_widget_path_iter_get_sibling_index (matcher->path.path, matcher->path.index))
{
const char *path_name = gtk_widget_path_iter_get_object_name (siblings, matcher->path.sibling_index);
if (path_name == NULL)
path_name = g_type_name (gtk_widget_path_iter_get_object_type (siblings, matcher->path.sibling_index));
return path_name;
}
else
{
const char *path_name = gtk_widget_path_iter_get_object_name (matcher->path.path, matcher->path.index);
if (path_name == NULL)
path_name = g_type_name (gtk_widget_path_iter_get_object_type (matcher->path.path, matcher->path.index));
return path_name;
}
return NULL;
}
static GQuark *
gtk_css_matcher_widget_path_get_classes (const GtkCssMatcher *matcher,
guint *n_classes,
gboolean *allocated)
{
int num;
const GtkWidgetPath *siblings;
GSList *list, *l;
GQuark *classes;
const GQuark *decl_classes = NULL;
guint n_decl_classes = 0;
int i;
if (matcher->path.decl)
decl_classes = gtk_css_node_declaration_get_classes (matcher->path.decl, &n_decl_classes);
siblings = gtk_widget_path_iter_get_siblings (matcher->path.path, matcher->path.index);
if (siblings && matcher->path.sibling_index != gtk_widget_path_iter_get_sibling_index (matcher->path.path, matcher->path.index))
list = gtk_widget_path_iter_list_classes (siblings, matcher->path.sibling_index);
else
list = gtk_widget_path_iter_list_classes (matcher->path.path, matcher->path.index);
num = n_decl_classes + g_slist_length (list);
classes = g_new (GQuark, num);
i = 0;
if (matcher->path.decl)
{
for (; i < n_decl_classes; i++)
classes[i] = decl_classes[i];
}
for (l = list; l; l = l->next)
{
const char *name = l->data;
classes[i++] = g_quark_from_string (name);
}
*n_classes = num;
*allocated = TRUE;
return classes;
}
static gboolean
gtk_css_matcher_widget_path_has_state (const GtkCssMatcher *matcher,
GtkStateFlags state)
@@ -193,6 +267,8 @@ static const GtkCssMatcherClass GTK_CSS_MATCHER_WIDGET_PATH = {
GTK_CSS_MATCHER_TYPE_WIDGET_PATH,
gtk_css_matcher_widget_path_get_parent,
gtk_css_matcher_widget_path_get_previous,
gtk_css_matcher_widget_path_get_name,
gtk_css_matcher_widget_path_get_classes,
gtk_css_matcher_widget_path_has_state,
gtk_css_matcher_widget_path_has_name,
gtk_css_matcher_widget_path_has_class,
@@ -266,6 +342,22 @@ gtk_css_matcher_node_get_previous (GtkCssMatcher *matcher,
return gtk_css_node_init_matcher (node, matcher);
}
static const char *
gtk_css_matcher_node_get_name (const GtkCssMatcher *matcher)
{
return matcher->node.node_name;
}
static GQuark *
gtk_css_matcher_node_get_classes (const GtkCssMatcher *matcher,
guint *n_classes,
gboolean *allocated)
{
*n_classes = matcher->node.n_classes;
*allocated = FALSE;
return (GQuark *)matcher->node.classes;
}
static gboolean
gtk_css_matcher_node_has_state (const GtkCssMatcher *matcher,
GtkStateFlags state)
@@ -378,6 +470,8 @@ static const GtkCssMatcherClass GTK_CSS_MATCHER_NODE = {
GTK_CSS_MATCHER_TYPE_NODE,
gtk_css_matcher_node_get_parent,
gtk_css_matcher_node_get_previous,
gtk_css_matcher_node_get_name,
gtk_css_matcher_node_get_classes,
gtk_css_matcher_node_has_state,
gtk_css_matcher_node_has_name,
gtk_css_matcher_node_has_class,

View File

@@ -41,6 +41,11 @@ struct _GtkCssMatcherClass {
gboolean (* get_previous) (GtkCssMatcher *matcher,
const GtkCssMatcher *next);
const char * (* get_name) (const GtkCssMatcher *matcher);
GQuark * (* get_classes) (const GtkCssMatcher *matcher,
guint *n_classes,
gboolean *allocated);
gboolean (* has_state) (const GtkCssMatcher *matcher,
GtkStateFlags state);
gboolean (* has_name) (const GtkCssMatcher *matcher,
@@ -106,6 +111,20 @@ _gtk_css_matcher_get_previous (GtkCssMatcher *matcher,
return next->klass->get_previous (matcher, next);
}
static inline const char *
_gtk_css_matcher_get_name (const GtkCssMatcher *matcher)
{
return matcher->klass->get_name (matcher);
}
static inline GQuark *
_gtk_css_matcher_get_classes (const GtkCssMatcher *matcher,
guint *n_classes,
gboolean *allocated)
{
return matcher->klass->get_classes (matcher, n_classes, allocated);
}
static inline gboolean
_gtk_css_matcher_has_state (const GtkCssMatcher *matcher,
GtkStateFlags state)

View File

@@ -86,14 +86,7 @@
/* When these change we do a full restyling. Otherwise we try to figure out
* if we need to change things. */
#define GTK_CSS_RADICAL_CHANGE (GTK_CSS_CHANGE_ID | \
GTK_CSS_CHANGE_NAME | \
GTK_CSS_CHANGE_CLASS | \
GTK_CSS_CHANGE_PARENT_ID | \
GTK_CSS_CHANGE_PARENT_NAME | \
GTK_CSS_CHANGE_PARENT_CLASS | \
GTK_CSS_CHANGE_SOURCE | \
GTK_CSS_CHANGE_PARENT_STYLE)
#define GTK_CSS_RADICAL_CHANGE (GTK_CSS_CHANGE_ID | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_SOURCE | GTK_CSS_CHANGE_PARENT_STYLE)
/* When these change, we need to recompute the change flags for the new style
* since they may have changed.

View File

@@ -118,7 +118,7 @@ struct _GtkCssProviderPrivate
GHashTable *keyframes;
GArray *rulesets;
GtkCssSelectorTree *tree;
GtkCssSelectorTrees *tree;
GResource *resource;
gchar *path;
};
@@ -984,6 +984,18 @@ gtk_css_provider_postprocess (GtkCssProvider *css_provider)
priv->tree = _gtk_css_selector_tree_builder_build (builder);
_gtk_css_selector_tree_builder_free (builder);
#ifndef VERIFY_TREE
for (i = 0; i < priv->rulesets->len; i++)
{
GtkCssRuleset *ruleset;
ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
_gtk_css_selector_free (ruleset->selector);
ruleset->selector = NULL;
}
#endif
}
static void

View File

@@ -111,6 +111,12 @@ struct _GtkCssSelectorTree
gint32 matches_offset; /* pointers that we return as matches if selector matches */
};
struct _GtkCssSelectorTrees {
GHashTable *by_name;
GHashTable *by_class;
GtkCssSelectorTree *remaining;
};
static gboolean
gtk_css_selector_equal (const GtkCssSelector *a,
const GtkCssSelector *b)
@@ -126,7 +132,7 @@ gtk_css_selector_hash_one (const GtkCssSelector *selector)
return GPOINTER_TO_UINT (selector->class) ^ selector->class->hash_one (selector);
}
static gpointer *
static inline gpointer *
gtk_css_selector_tree_get_matches (const GtkCssSelectorTree *tree)
{
if (tree->matches_offset == GTK_CSS_SELECTOR_TREE_EMPTY_OFFSET)
@@ -171,14 +177,14 @@ gtk_css_selector_tree_found_match (const GtkCssSelectorTree *tree,
}
}
static gboolean
static inline gboolean
gtk_css_selector_match (const GtkCssSelector *selector,
const GtkCssMatcher *matcher)
{
return selector->class->match_one (selector, matcher);
}
static gboolean
static inline gboolean
gtk_css_selector_foreach (const GtkCssSelector *selector,
const GtkCssMatcher *matcher,
GtkCssSelectorForeachFunc func,
@@ -204,7 +210,7 @@ gtk_css_selector_previous (const GtkCssSelector *selector)
return selector->class ? selector : NULL;
}
static const GtkCssSelectorTree *
static inline const GtkCssSelectorTree *
gtk_css_selector_tree_at_offset (const GtkCssSelectorTree *tree,
gint32 offset)
{
@@ -214,19 +220,19 @@ gtk_css_selector_tree_at_offset (const GtkCssSelectorTree *tree,
return (GtkCssSelectorTree *) ((guint8 *)tree + offset);
}
static const GtkCssSelectorTree *
static inline const GtkCssSelectorTree *
gtk_css_selector_tree_get_parent (const GtkCssSelectorTree *tree)
{
return gtk_css_selector_tree_at_offset (tree, tree->parent_offset);
}
static const GtkCssSelectorTree *
static inline const GtkCssSelectorTree *
gtk_css_selector_tree_get_previous (const GtkCssSelectorTree *tree)
{
return gtk_css_selector_tree_at_offset (tree, tree->previous_offset);
}
static const GtkCssSelectorTree *
static inline const GtkCssSelectorTree *
gtk_css_selector_tree_get_sibling (const GtkCssSelectorTree *tree)
{
return gtk_css_selector_tree_at_offset (tree, tree->sibling_offset);
@@ -316,7 +322,7 @@ static const GtkCssSelectorClass GTK_CSS_SELECTOR_DESCENDANT = {
gtk_css_selector_default_hash_one,
gtk_css_selector_default_compare_one,
FALSE,
FALSE
TRUE
};
/* CHILD */
@@ -358,7 +364,7 @@ static const GtkCssSelectorClass GTK_CSS_SELECTOR_CHILD = {
gtk_css_selector_default_hash_one,
gtk_css_selector_default_compare_one,
FALSE,
FALSE
TRUE
};
/* SIBLING */
@@ -405,7 +411,7 @@ static const GtkCssSelectorClass GTK_CSS_SELECTOR_SIBLING = {
gtk_css_selector_default_hash_one,
gtk_css_selector_default_compare_one,
FALSE,
FALSE,
TRUE
};
/* ADJACENT */
@@ -447,7 +453,7 @@ static const GtkCssSelectorClass GTK_CSS_SELECTOR_ADJACENT = {
gtk_css_selector_default_hash_one,
gtk_css_selector_default_compare_one,
FALSE,
FALSE,
TRUE
};
/* SIMPLE SELECTOR DEFINE */
@@ -726,31 +732,30 @@ comp_pseudoclass_state (const GtkCssSelector *a,
return a->state.state - b->state.state;
}
#define GTK_CSS_CHANGE_PSEUDOCLASS_HOVER GTK_CSS_CHANGE_HOVER
DEFINE_SIMPLE_SELECTOR(pseudoclass_hover, PSEUDOCLASS_HOVER, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_HOVER
static GtkCssChange
change_pseudoclass_state (const GtkCssSelector *selector)
{
GtkStateFlags states = selector->state.state;
GtkCssChange change = 0;
#define GTK_CSS_CHANGE_PSEUDOCLASS_DISABLED GTK_CSS_CHANGE_DISABLED
DEFINE_SIMPLE_SELECTOR(pseudoclass_disabled, PSEUDOCLASS_DISABLED, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_DISABLED
if (states & GTK_STATE_FLAG_PRELIGHT)
change |= GTK_CSS_CHANGE_HOVER;
if (states & GTK_STATE_FLAG_INSENSITIVE)
change |= GTK_CSS_CHANGE_DISABLED;
if (states & GTK_STATE_FLAG_BACKDROP)
change |= GTK_CSS_CHANGE_BACKDROP;
if (states & GTK_STATE_FLAG_SELECTED)
change |= GTK_CSS_CHANGE_SELECTED;
if (states & ~(GTK_STATE_FLAG_PRELIGHT |
GTK_STATE_FLAG_INSENSITIVE |
GTK_STATE_FLAG_BACKDROP |
GTK_STATE_FLAG_SELECTED))
change |= GTK_CSS_CHANGE_STATE;
#define GTK_CSS_CHANGE_PSEUDOCLASS_BACKDROP GTK_CSS_CHANGE_BACKDROP
DEFINE_SIMPLE_SELECTOR(pseudoclass_backdrop, PSEUDOCLASS_BACKDROP, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_BACKDROP
return change;
}
#define GTK_CSS_CHANGE_PSEUDOCLASS_SELECTED GTK_CSS_CHANGE_SELECTED
DEFINE_SIMPLE_SELECTOR(pseudoclass_selected, PSEUDOCLASS_SELECTED, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_SELECTED
#define GTK_CSS_CHANGE_PSEUDOCLASS_STATE GTK_CSS_CHANGE_STATE
#define GTK_CSS_CHANGE_PSEUDOCLASS_STATE change_pseudoclass_state (selector)
DEFINE_SIMPLE_SELECTOR(pseudoclass_state, PSEUDOCLASS_STATE, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
@@ -1310,26 +1315,9 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
{
if (pseudo_classes[i].state_flag)
{
if (pseudo_classes[i].state_flag == GTK_STATE_FLAG_PRELIGHT)
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_HOVER
: &GTK_CSS_SELECTOR_PSEUDOCLASS_HOVER,
selector);
else if (pseudo_classes[i].state_flag == GTK_STATE_FLAG_INSENSITIVE)
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_DISABLED
: &GTK_CSS_SELECTOR_PSEUDOCLASS_DISABLED,
selector);
else if (pseudo_classes[i].state_flag == GTK_STATE_FLAG_BACKDROP)
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_BACKDROP
: &GTK_CSS_SELECTOR_PSEUDOCLASS_BACKDROP,
selector);
else if (pseudo_classes[i].state_flag == GTK_STATE_FLAG_SELECTED)
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_SELECTED
: &GTK_CSS_SELECTOR_PSEUDOCLASS_SELECTED,
selector);
else
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_STATE
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_STATE
: &GTK_CSS_SELECTOR_PSEUDOCLASS_STATE,
selector);
selector);
selector->state.state = pseudo_classes[i].state_flag;
}
else
@@ -1862,15 +1850,43 @@ gtk_css_selector_tree_match_foreach (const GtkCssSelector *selector,
return FALSE;
}
static void
gtk_css_selector_tree_match_one (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher,
gpointer res)
{
for (; tree != NULL;
tree = gtk_css_selector_tree_get_sibling (tree))
gtk_css_selector_foreach (&tree->selector, matcher, gtk_css_selector_tree_match_foreach, res);
}
GPtrArray *
_gtk_css_selector_tree_match_all (const GtkCssSelectorTree *tree,
_gtk_css_selector_tree_match_all (const GtkCssSelectorTrees *trees,
const GtkCssMatcher *matcher)
{
GPtrArray *array = NULL;
const char *name;
GQuark *classes;
guint n_classes;
gboolean allocated;
const GtkCssSelectorTree *tree;
int i;
for (; tree != NULL;
tree = gtk_css_selector_tree_get_sibling (tree))
gtk_css_selector_foreach (&tree->selector, matcher, gtk_css_selector_tree_match_foreach, &array);
name = _gtk_css_matcher_get_name (matcher);
tree = (const GtkCssSelectorTree *)g_hash_table_lookup (trees->by_name, (gpointer)name);
gtk_css_selector_tree_match_one (tree, matcher, &array);
classes = _gtk_css_matcher_get_classes (matcher, &n_classes, &allocated);
for (i = 0; i < n_classes; i++)
{
tree = (const GtkCssSelectorTree *)g_hash_table_lookup (trees->by_class, GUINT_TO_POINTER (classes[i]));
gtk_css_selector_tree_match_one (tree, matcher, &array);
}
if (allocated)
g_free (classes);
gtk_css_selector_tree_match_one (trees->remaining, matcher, &array);
return array;
}
@@ -1901,104 +1917,103 @@ gtk_css_selector_match_for_change (const GtkCssSelector *selector,
that change != 0 on any match. */
#define GTK_CSS_CHANGE_GOT_MATCH GTK_CSS_CHANGE_RESERVED_BIT
static void
print_sel (const char *format, const GtkCssSelector *selector)
{
GString *s = g_string_new ("");
selector->class->print (selector, s);
g_print (format, s->str);
g_string_free (s, TRUE);
}
static gboolean gtk_css_selector_tree_change_foreach (const GtkCssSelector *selector,
const GtkCssMatcher *matcher,
gpointer res);
/* Handle the case that a new sibling with just the right properties might appear.
* This is done by collecting the sibling selector and all following simple selectors,
* before resuming matching.
*/
static GtkCssChange
gtk_css_selector_tree_change_for_sibling (const GtkCssSelector *selector,
const GtkCssMatcher *matcher,
gboolean skip_first)
gtk_css_selector_tree_collect_change (const GtkCssSelectorTree *tree)
{
const GtkCssSelectorTree *tree = (const GtkCssSelectorTree *) selector;
GtkCssChange change = 0;
if (skip_first || tree->selector.class->is_simple)
{
const GtkCssSelectorTree *prev;
for (prev = gtk_css_selector_tree_get_previous (tree);
prev;
prev = gtk_css_selector_tree_get_sibling (prev))
change |= gtk_css_selector_tree_change_for_sibling (prev, matcher, FALSE);
change = selector->class->get_change (selector, change);
}
else
{
gtk_css_selector_tree_change_foreach (selector, matcher, &change);
}
return change;
}
static gboolean
gtk_css_selector_tree_change_foreach (const GtkCssSelector *selector,
const GtkCssMatcher *matcher,
gpointer res)
{
const GtkCssSelectorTree *tree = (const GtkCssSelectorTree *) selector;
const GtkCssSelectorTree *prev;
GtkCssChange *ret = res;
GtkCssChange change = 0;
if (!gtk_css_selector_match_for_change (&tree->selector, matcher))
return FALSE;
// print_sel ("match at %s\n", selector);
for (prev = gtk_css_selector_tree_get_previous (tree);
prev != NULL;
prev = gtk_css_selector_tree_get_sibling (prev))
{
GtkCssChange change2 = 0;
change |= gtk_css_selector_tree_collect_change (prev);
if (prev->selector.class == &GTK_CSS_SELECTOR_SIBLING ||
prev->selector.class == &GTK_CSS_SELECTOR_ADJACENT)
change2 = gtk_css_selector_tree_change_for_sibling (&prev->selector, matcher, TRUE);
else
gtk_css_selector_foreach (&prev->selector, matcher, gtk_css_selector_tree_change_foreach, &change2);
change = tree->selector.class->get_change (&tree->selector, change);
change |= change2;
}
if (change || gtk_css_selector_tree_get_matches (tree))
{
*ret |= tree->selector.class->get_change (&tree->selector, change & ~GTK_CSS_CHANGE_GOT_MATCH) | GTK_CSS_CHANGE_GOT_MATCH;
}
return FALSE;
return change;
}
GtkCssChange
_gtk_css_selector_tree_get_change_all (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher)
static GtkCssChange
gtk_css_selector_tree_get_change (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher)
{
GtkCssChange change = 0;
const GtkCssSelectorTree *prev;
for (; tree != NULL;
tree = gtk_css_selector_tree_get_sibling (tree))
gtk_css_selector_foreach (&tree->selector, matcher, gtk_css_selector_tree_change_foreach, &change);
if (!gtk_css_selector_match_for_change (&tree->selector, matcher))
return 0;
/* Never return reserved bit set */
return change & ~GTK_CSS_CHANGE_GOT_MATCH;
if (!tree->selector.class->is_simple)
return gtk_css_selector_tree_collect_change (tree) | GTK_CSS_CHANGE_GOT_MATCH;
for (prev = gtk_css_selector_tree_get_previous (tree);
prev != NULL;
prev = gtk_css_selector_tree_get_sibling (prev))
change |= gtk_css_selector_tree_get_change (prev, matcher);
if (change || gtk_css_selector_tree_get_matches (tree))
change = tree->selector.class->get_change (&tree->selector, change & ~GTK_CSS_CHANGE_GOT_MATCH) | GTK_CSS_CHANGE_GOT_MATCH;
return change;
}
gboolean
_gtk_css_selector_tree_is_empty (const GtkCssSelectorTree *tree)
_gtk_css_selector_tree_is_empty (const GtkCssSelectorTrees *tree)
{
return tree == NULL;
if (!tree)
return TRUE;
return g_hash_table_size (tree->by_name) == 0 &&
g_hash_table_size (tree->by_class) == 0 &&
tree->remaining == NULL;
}
static GtkCssChange
gtk_css_selector_tree_get_change_for_one (const GtkCssSelectorTree *tree,
const GtkCssMatcher *matcher)
{
GtkCssChange change;
change = 0;
/* no need to foreach here because we abort for non-simple selectors */
for (; tree != NULL;
tree = gtk_css_selector_tree_get_sibling (tree))
change |= gtk_css_selector_tree_get_change (tree, matcher);
/* Never return reserved bit set */
return change & ~GTK_CSS_CHANGE_RESERVED_BIT;
}
GtkCssChange
_gtk_css_selector_tree_get_change_all (const GtkCssSelectorTrees *trees,
const GtkCssMatcher *matcher)
{
GtkCssChange change = 0;
const char *name;
GQuark *classes;
guint n_classes;
gboolean allocated;
const GtkCssSelectorTree *tree;
int i;
name = _gtk_css_matcher_get_name (matcher);
tree = (const GtkCssSelectorTree *)g_hash_table_lookup (trees->by_name, (gpointer)name);
change |= gtk_css_selector_tree_get_change_for_one (tree, matcher);
classes = _gtk_css_matcher_get_classes (matcher, &n_classes, &allocated);
for (i = 0; i < n_classes; i++)
{
tree = (const GtkCssSelectorTree *)g_hash_table_lookup (trees->by_class, GUINT_TO_POINTER (classes[i]));
change |= gtk_css_selector_tree_get_change_for_one (tree, matcher);
}
if (allocated)
g_free (classes);
change |= gtk_css_selector_tree_get_change_for_one (trees->remaining, matcher);
return change;
}
#ifdef PRINT_TREE
@@ -2105,12 +2120,24 @@ _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
}
void
_gtk_css_selector_tree_free (GtkCssSelectorTree *tree)
_gtk_css_selector_tree_free (GtkCssSelectorTrees *trees)
{
if (tree == NULL)
GHashTableIter iter;
gpointer key;
gpointer tree;
if (trees == NULL)
return;
g_free (tree);
g_hash_table_iter_init (&iter, trees->by_name);
while (g_hash_table_iter_next (&iter, &key, (gpointer *)&tree))
g_free (tree);
g_hash_table_unref (trees->by_name);
g_free (trees->remaining);
g_free (trees);
}
@@ -2118,6 +2145,8 @@ typedef struct {
gpointer match;
GtkCssSelector *current_selector;
GtkCssSelectorTree **selector_match;
const char *name;
GQuark class;
} GtkCssSelectorRuleSetInfo;
static GtkCssSelectorTree *
@@ -2241,22 +2270,73 @@ subdivide_infos (GByteArray *array, GList *infos, gint32 parent_offset)
}
struct _GtkCssSelectorTreeBuilder {
GList *infos;
GHashTable *by_name;
GHashTable *by_class;
GList *remaining;
};
GtkCssSelectorTreeBuilder *
_gtk_css_selector_tree_builder_new (void)
{
return g_new0 (GtkCssSelectorTreeBuilder, 1);
GtkCssSelectorTreeBuilder *builder;
builder = g_new0 (GtkCssSelectorTreeBuilder, 1);
builder->by_name = g_hash_table_new (NULL, NULL);
builder->by_class = g_hash_table_new (NULL, NULL);
return builder;
}
void
_gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder)
_gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder)
{
g_list_free_full (builder->infos, g_free);
GHashTableIter iter;
gpointer key;
GList *infos;
g_hash_table_iter_init (&iter, builder->by_name);
while (g_hash_table_iter_next (&iter, &key, (gpointer *)&infos))
g_list_free_full (infos, g_free);
g_hash_table_unref (builder->by_name);
g_hash_table_iter_init (&iter, builder->by_class);
while (g_hash_table_iter_next (&iter, &key, (gpointer *)&infos))
g_list_free_full (infos, g_free);
g_hash_table_unref (builder->by_class);
g_list_free_full (builder->remaining, g_free);
g_free (builder);
}
static const char *
find_name (const GtkCssSelector *selector)
{
for (;
selector && selector->class->is_simple;
selector = gtk_css_selector_previous (selector))
{
if (selector->class == &GTK_CSS_SELECTOR_NAME)
return selector->name.name;
}
return NULL;
}
static GQuark
find_class (const GtkCssSelector *selector)
{
for (;
selector && selector->class->is_simple;
selector = gtk_css_selector_previous (selector))
{
if (selector->class == &GTK_CSS_SELECTOR_CLASS)
return selector->style_class.style_class;
}
return 0;
}
void
_gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,
GtkCssSelector *selectors,
@@ -2268,7 +2348,27 @@ _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder,
info->match = match;
info->current_selector = selectors;
info->selector_match = selector_match;
builder->infos = g_list_prepend (builder->infos, info);
info->name = find_name (selectors);
if (info->name)
{
GList *infos = g_hash_table_lookup (builder->by_name, (gpointer)info->name);
infos = g_list_prepend (infos, info);
g_hash_table_replace (builder->by_name, (gpointer)info->name, infos);
return;
}
info->class = find_class (selectors);
if (info->class)
{
GList *infos = g_hash_table_lookup (builder->by_class, GUINT_TO_POINTER (info->class));
infos = g_list_prepend (infos, info);
g_hash_table_replace (builder->by_class, GUINT_TO_POINTER (info->class), infos);
return;
}
builder->remaining = g_list_prepend (builder->remaining, info);
}
/* Convert all offsets to node-relative */
@@ -2295,8 +2395,8 @@ fixup_offsets (GtkCssSelectorTree *tree, guint8 *data)
}
}
GtkCssSelectorTree *
_gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
static GtkCssSelectorTree *
_gtk_css_selector_tree_builder_build_one (GList *infos)
{
GtkCssSelectorTree *tree;
GByteArray *array;
@@ -2306,7 +2406,7 @@ _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
GtkCssSelectorRuleSetInfo *info;
array = g_byte_array_new ();
subdivide_infos (array, builder->infos, GTK_CSS_SELECTOR_TREE_EMPTY_OFFSET);
subdivide_infos (array, infos, GTK_CSS_SELECTOR_TREE_EMPTY_OFFSET);
len = array->len;
data = g_byte_array_free (array, FALSE);
@@ -2319,7 +2419,7 @@ _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
fixup_offsets (tree, data);
/* Convert offsets to final pointers */
for (l = builder->infos; l != NULL; l = l->next)
for (l = infos; l != NULL; l = l->next)
{
info = l->data;
if (info->selector_match)
@@ -2337,3 +2437,36 @@ _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
return tree;
}
GtkCssSelectorTrees *
_gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder)
{
GtkCssSelectorTrees *trees;
GHashTableIter iter;
const char *name;
GList *infos;
gpointer key;
trees = g_new0 (GtkCssSelectorTrees, 1);
trees->by_name = g_hash_table_new (NULL, NULL);
trees->by_class = g_hash_table_new (NULL, NULL);
g_hash_table_iter_init (&iter, builder->by_name);
while (g_hash_table_iter_next (&iter, (gpointer *)&name, (gpointer *)&infos))
{
GtkCssSelectorTree *tree = _gtk_css_selector_tree_builder_build_one (infos);
g_hash_table_insert (trees->by_name, (gpointer)name, tree);
}
g_hash_table_iter_init (&iter, builder->by_class);
while (g_hash_table_iter_next (&iter, &key, (gpointer *)&infos))
{
GtkCssSelectorTree *tree = _gtk_css_selector_tree_builder_build_one (infos);
g_hash_table_insert (trees->by_class, key, tree);
}
if (builder->remaining)
trees->remaining = _gtk_css_selector_tree_builder_build_one (builder->remaining);
return trees;
}

View File

@@ -25,6 +25,7 @@ G_BEGIN_DECLS
typedef union _GtkCssSelector GtkCssSelector;
typedef struct _GtkCssSelectorTree GtkCssSelectorTree;
typedef struct _GtkCssSelectorTrees GtkCssSelectorTrees;
typedef struct _GtkCssSelectorTreeBuilder GtkCssSelectorTreeBuilder;
GtkCssSelector * _gtk_css_selector_parse (GtkCssParser *parser);
@@ -40,14 +41,14 @@ GtkCssChange _gtk_css_selector_get_change (const GtkCssSelector *sel
int _gtk_css_selector_compare (const GtkCssSelector *a,
const GtkCssSelector *b);
void _gtk_css_selector_tree_free (GtkCssSelectorTree *tree);
GPtrArray * _gtk_css_selector_tree_match_all (const GtkCssSelectorTree *tree,
void _gtk_css_selector_tree_free (GtkCssSelectorTrees *tree);
GPtrArray * _gtk_css_selector_tree_match_all (const GtkCssSelectorTrees *tree,
const GtkCssMatcher *matcher);
GtkCssChange _gtk_css_selector_tree_get_change_all (const GtkCssSelectorTree *tree,
GtkCssChange _gtk_css_selector_tree_get_change_all (const GtkCssSelectorTrees *tree,
const GtkCssMatcher *matcher);
void _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree,
GString *str);
gboolean _gtk_css_selector_tree_is_empty (const GtkCssSelectorTree *tree) G_GNUC_CONST;
gboolean _gtk_css_selector_tree_is_empty (const GtkCssSelectorTrees *tree) G_GNUC_CONST;
@@ -56,7 +57,7 @@ void _gtk_css_selector_tree_builder_add (GtkCssSelectorT
GtkCssSelector *selectors,
GtkCssSelectorTree **selector_match,
gpointer match);
GtkCssSelectorTree * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
GtkCssSelectorTrees * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder);
void _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder);
const char *gtk_css_pseudoclass_name (GtkStateFlags flags);

View File

@@ -108,10 +108,7 @@ gtk_style_cascade_get_settings (GtkStyleProvider *provider)
item;
item = gtk_style_cascade_iter_next (cascade, &iter))
{
if (!GTK_IS_STYLE_PROVIDER (item))
continue;
settings = gtk_style_provider_get_settings (GTK_STYLE_PROVIDER (item));
settings = gtk_style_provider_get_settings (item);
if (settings)
{
gtk_style_cascade_iter_clear (&iter);
@@ -136,18 +133,11 @@ gtk_style_cascade_get_color (GtkStyleProvider *provider,
item;
item = gtk_style_cascade_iter_next (cascade, &iter))
{
if (GTK_IS_STYLE_PROVIDER (item))
color = gtk_style_provider_get_color (item, name);
if (color)
{
color = gtk_style_provider_get_color (GTK_STYLE_PROVIDER (item), name);
if (color)
{
gtk_style_cascade_iter_clear (&iter);
return color;
}
}
else
{
/* If somebody hits this code path, shout at them */
gtk_style_cascade_iter_clear (&iter);
return color;
}
}
@@ -176,10 +166,7 @@ gtk_style_cascade_get_keyframes (GtkStyleProvider *provider,
item;
item = gtk_style_cascade_iter_next (cascade, &iter))
{
if (!GTK_IS_STYLE_PROVIDER (item))
continue;
keyframes = gtk_style_provider_get_keyframes (GTK_STYLE_PROVIDER (item), name);
keyframes = gtk_style_provider_get_keyframes (item, name);
if (keyframes)
{
gtk_style_cascade_iter_clear (&iter);
@@ -206,19 +193,10 @@ gtk_style_cascade_lookup (GtkStyleProvider *provider,
item;
item = gtk_style_cascade_iter_next (cascade, &iter))
{
GtkStyleProvider *sp = (GtkStyleProvider *) item;
if (GTK_IS_STYLE_PROVIDER (sp))
{
gtk_style_provider_lookup (sp, matcher, lookup,
change ? &iter_change : NULL);
if (change)
*change |= iter_change;
}
else
{
/* you lose */
g_warn_if_reached ();
}
gtk_style_provider_lookup (item, matcher, lookup,
change ? &iter_change : NULL);
if (change)
*change |= iter_change;
}
gtk_style_cascade_iter_clear (&iter);
}

View File

@@ -10481,6 +10481,86 @@ gtk_widget_can_be_picked (GtkWidget *widget,
return TRUE;
}
static GtkWidget *
gtk_widget_do_pick (GtkWidget *widget,
gdouble x,
gdouble y,
GtkPickFlags flags)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
GtkWidget *child;
if (priv->overflow == GTK_OVERFLOW_HIDDEN)
{
GtkCssBoxes boxes;
gtk_css_boxes_init (&boxes, widget);
if (!gsk_rounded_rect_contains_point (gtk_css_boxes_get_padding_box (&boxes),
&GRAPHENE_POINT_INIT (x, y)))
return NULL;
}
for (child = _gtk_widget_get_last_child (widget);
child;
child = _gtk_widget_get_prev_sibling (child))
{
GtkWidgetPrivate *child_priv = gtk_widget_get_instance_private (child);
GskTransform *transform;
GtkWidget *picked;
graphene_point3d_t res;
if (!gtk_widget_can_be_picked (child, flags))
continue;
if (GTK_IS_NATIVE (child))
continue;
if (child_priv->transform)
{
transform = gsk_transform_invert (gsk_transform_ref (child_priv->transform));
if (transform == NULL)
continue;
}
else
{
transform = NULL;
}
if (gsk_transform_get_category (transform) >= GSK_TRANSFORM_CATEGORY_2D_TRANSLATE)
{
float dx, dy;
gsk_transform_to_translate (transform, &dx, &dy);
graphene_point3d_init (&res, x + dx, y + dy, 0.);
}
else
{
graphene_matrix_t inv;
graphene_point3d_t p0, p1;
gsk_transform_to_matrix (transform, &inv);
gsk_transform_unref (transform);
graphene_point3d_init (&p0, x, y, 0);
graphene_point3d_init (&p1, x, y, 1);
graphene_matrix_transform_point3d (&inv, &p0, &p0);
graphene_matrix_transform_point3d (&inv, &p1, &p1);
if (fabs (p0.z - p1.z) < 1.f / 4096)
continue;
graphene_point3d_interpolate (&p0, &p1, p0.z / (p0.z - p1.z), &res);
}
picked = gtk_widget_do_pick (child, res.x, res.y, flags);
if (picked)
return picked;
}
if (!GTK_WIDGET_GET_CLASS (widget)->contains (widget, x, y))
return NULL;
return widget;
}
/**
* gtk_widget_pick:
* @widget: the widget to query
@@ -10510,22 +10590,11 @@ gtk_widget_pick (GtkWidget *widget,
gdouble y,
GtkPickFlags flags)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
GtkWidget *child;
GtkCssBoxes boxes;
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
if (!gtk_widget_can_be_picked (widget, flags))
return NULL;
if (priv->overflow == GTK_OVERFLOW_HIDDEN)
{
gtk_css_boxes_init (&boxes, widget);
if (!gsk_rounded_rect_contains_point (gtk_css_boxes_get_padding_box (&boxes),
&GRAPHENE_POINT_INIT (x, y)))
return NULL;
}
if (GTK_IS_WINDOW (widget))
{
GtkWidget *picked;
@@ -10535,52 +10604,7 @@ gtk_widget_pick (GtkWidget *widget,
return picked;
}
for (child = _gtk_widget_get_last_child (widget);
child;
child = _gtk_widget_get_prev_sibling (child))
{
GtkWidgetPrivate *child_priv = gtk_widget_get_instance_private (child);
GskTransform *transform;
graphene_matrix_t inv;
GtkWidget *picked;
graphene_point3d_t p0, p1, res;
if (!gtk_widget_can_be_picked (child, flags))
continue;
if (GTK_IS_NATIVE (child))
continue;
if (child_priv->transform)
{
transform = gsk_transform_invert (gsk_transform_ref (child_priv->transform));
if (transform == NULL)
continue;
}
else
{
transform = NULL;
}
gsk_transform_to_matrix (transform, &inv);
gsk_transform_unref (transform);
graphene_point3d_init (&p0, x, y, 0);
graphene_point3d_init (&p1, x, y, 1);
graphene_matrix_transform_point3d (&inv, &p0, &p0);
graphene_matrix_transform_point3d (&inv, &p1, &p1);
if (fabs (p0.z - p1.z) < 1.f / 4096)
continue;
graphene_point3d_interpolate (&p0, &p1, p0.z / (p0.z - p1.z), &res);
picked = gtk_widget_pick (child, res.x, res.y, flags);
if (picked)
return picked;
}
if (!gtk_widget_contains (widget, x, y))
return NULL;
return widget;
return gtk_widget_do_pick (widget, x, y, flags);
}
/**

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1018
po/hr.po

File diff suppressed because it is too large Load Diff

335
po/pl.po
View File

@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-04 17:51+0000\n"
"PO-Revision-Date: 2020-01-05 17:25+0100\n"
"POT-Creation-Date: 2020-01-18 16:40+0000\n"
"PO-Revision-Date: 2020-01-19 12:58+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <community-poland@mozilla.org>\n"
"Language: pl\n"
@@ -40,12 +40,12 @@ msgstr "Ten schowek nie może przechowywać danych."
msgid "Cannot read from empty clipboard."
msgstr "Nie można odczytać z pustego schowka."
#: gdk/gdkclipboard.c:325 gdk/gdkclipboard.c:1137 gdk/gdkdrag.c:592
#: gdk/gdkclipboard.c:325 gdk/gdkclipboard.c:1137 gdk/gdkdrag.c:602
msgid "No compatible formats to transfer clipboard contents."
msgstr "Brak zgodnych formatów do przesłania zawartości schowka."
#: gdk/gdkcontentprovider.c:108 gdk/gdkcontentproviderimpl.c:215
#: gtk/gtkdnd.c:817
#: gdk/gdkcontentprovider.c:108 gdk/gdkcontentproviderimpl.c:216
#: gdk/gdkcontentproviderimpl.c:439
#, c-format
msgid "Cannot provide contents as “%s”"
msgstr "Nie można dostarczyć zawartości jako „%s”"
@@ -55,6 +55,11 @@ msgstr "Nie można dostarczyć zawartości jako „%s”"
msgid "Cannot provide contents as %s"
msgstr "Nie można dostarczyć zawartości jako %s"
#: gdk/gdkcontentproviderimpl.c:448
#, c-format
msgid "Failed to get contents as “%s”"
msgstr "Pobranie zawartości jako „%s” się nie powiodło"
#: gdk/gdkdrop.c:110
msgid "Dragndrop from other applications is not supported."
msgstr "Przeciąganie z innych programów nie jest obsługiwane."
@@ -456,7 +461,7 @@ msgstr "Uśpienie"
msgid "Not implemented on OS X"
msgstr "Niezaimplementowane w systemie OS X"
#: gdk/wayland/gdkclipboard-wayland.c:231 gdk/wayland/gdkdrop-wayland.c:202
#: gdk/wayland/gdkclipboard-wayland.c:231 gdk/wayland/gdkdrop-wayland.c:204
#: gdk/wayland/gdkprimary-wayland.c:312 gdk/win32/gdkdrop-win32.c:1278
#: gdk/win32/gdkdrop-win32.c:1323 gdk/x11/gdkclipboard-x11.c:760
#: gdk/x11/gdkdrop-x11.c:196
@@ -1568,7 +1573,7 @@ msgstr "Tekst nie może pojawiać się wewnątrz <%s>"
#. * text direction of RTL and specify "calendar:YM", then the year
#. * will appear to the right of the month.
#.
#: gtk/gtkcalendar.c:812
#: gtk/gtkcalendar.c:811
msgid "calendar:MY"
msgstr "calendar:MY"
@@ -1576,7 +1581,7 @@ msgstr "calendar:MY"
#. * first day of the week to calendar:week_start:1 if you want Monday
#. * to be the first day of the week, and so on.
#.
#: gtk/gtkcalendar.c:850
#: gtk/gtkcalendar.c:849
msgid "calendar:week_start:0"
msgstr "calendar:week_start:1"
@@ -1585,7 +1590,7 @@ msgstr "calendar:week_start:1"
#. *
#. * If you don't understand this, leave it as "2000"
#.
#: gtk/gtkcalendar.c:1656
#: gtk/gtkcalendar.c:1655
msgctxt "year measurement template"
msgid "2000"
msgstr "8888"
@@ -1600,7 +1605,7 @@ msgstr "8888"
#. * digits. That needs support from your system and locale definition
#. * too.
#.
#: gtk/gtkcalendar.c:1687 gtk/gtkcalendar.c:2295
#: gtk/gtkcalendar.c:1686 gtk/gtkcalendar.c:2294
#, c-format
msgctxt "calendar:day:digits"
msgid "%d"
@@ -1616,7 +1621,7 @@ msgstr "%d"
#. * digits. That needs support from your system and locale definition
#. * too.
#.
#: gtk/gtkcalendar.c:1719 gtk/gtkcalendar.c:2187
#: gtk/gtkcalendar.c:1718 gtk/gtkcalendar.c:2186
#, c-format
msgctxt "calendar:week:digits"
msgid "%d"
@@ -1632,7 +1637,7 @@ msgstr "%d"
#. *
#. * "%Y" is appropriate for most locales.
#.
#: gtk/gtkcalendar.c:1962
#: gtk/gtkcalendar.c:1961
msgctxt "calendar year format"
msgid "%Y"
msgstr "%Y"
@@ -1667,7 +1672,7 @@ msgctxt "progress bar label"
msgid "%d%%"
msgstr "%d%%"
#: gtk/gtkcolorbutton.c:190 gtk/gtkcolorbutton.c:357
#: gtk/gtkcolorbutton.c:177 gtk/gtkcolorbutton.c:320
msgid "Pick a Color"
msgstr "Wybór koloru"
@@ -1867,19 +1872,19 @@ msgid "White"
msgstr "Biały"
#. translators: label for the custom section in the color chooser
#: gtk/gtkcolorchooserwidget.c:548
#: gtk/gtkcolorchooserwidget.c:549
msgid "Custom"
msgstr "Niestandardowy"
#: gtk/gtkcolorchooserwidget.c:559
#: gtk/gtkcolorchooserwidget.c:560
msgid "Custom color"
msgstr "Niestandardowy kolor"
#: gtk/gtkcolorchooserwidget.c:560
#: gtk/gtkcolorchooserwidget.c:561
msgid "Create a custom color"
msgstr "Tworzy niestandardowy kolor"
#: gtk/gtkcolorchooserwidget.c:579
#: gtk/gtkcolorchooserwidget.c:586
#, c-format
msgid "Custom color %d: %s"
msgstr "%d. niestandardowy kolor: %s"
@@ -1898,7 +1903,7 @@ msgctxt "Color channel"
msgid "Alpha"
msgstr "Alfa"
#: gtk/gtkcolorswatch.c:262
#: gtk/gtkcolorswatch.c:234
msgid "Customize"
msgstr "Dostosuj"
@@ -1966,7 +1971,7 @@ msgstr "_Prawy:"
msgid "Paper Margins"
msgstr "Marginesy papieru"
#: gtk/gtkentry.c:3518
#: gtk/gtkentry.c:3521
msgid "Insert Emoji"
msgstr "Wstawia emoji"
@@ -1974,7 +1979,7 @@ msgstr "Wstawia emoji"
msgid "Select a File"
msgstr "Wybór pliku"
#: gtk/gtkfilechooserbutton.c:113 gtk/gtkplacessidebar.c:1093
#: gtk/gtkfilechooserbutton.c:113 gtk/gtkplacessidebar.c:1086
msgid "Desktop"
msgstr "Pulpit"
@@ -1982,7 +1987,7 @@ msgstr "Pulpit"
msgid "(None)"
msgstr "(Brak)"
#: gtk/gtkfilechooserbutton.c:2068
#: gtk/gtkfilechooserbutton.c:2100
msgid "Other…"
msgstr "Inne…"
@@ -2047,7 +2052,7 @@ msgid "A file with that name already exists"
msgstr "Plik o tej nazwie już istnieje"
#: gtk/gtkfilechoosernative.c:525 gtk/gtkfilechoosernative.c:603
#: gtk/gtkfilechooserwidget.c:1508 gtk/gtkfilechooserwidget.c:6392
#: gtk/gtkfilechooserwidget.c:1508 gtk/gtkfilechooserwidget.c:6367
#: gtk/gtkmessagedialog.c:777 gtk/gtkmessagedialog.c:786
#: gtk/gtkmountoperation.c:596 gtk/gtkpagesetupunixdialog.c:210
#: gtk/gtkprintbackend.c:657 gtk/gtkprinteroptionwidget.c:545
@@ -2060,7 +2065,7 @@ msgid "_Cancel"
msgstr "_Anuluj"
#: gtk/gtkfilechoosernative.c:526 gtk/gtkfilechoosernative.c:597
#: gtk/gtkplacessidebar.c:3558 gtk/gtkplacessidebar.c:3627
#: gtk/gtkplacessidebar.c:3524 gtk/gtkplacessidebar.c:3593
#: gtk/gtkplacesview.c:1667
msgid "_Open"
msgstr "_Otwórz"
@@ -2070,7 +2075,7 @@ msgstr "_Otwórz"
msgid "_Save"
msgstr "_Zapisz"
#: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:362
#: gtk/gtkfilechoosernativequartz.c:331 gtk/ui/gtkfilechooserwidget.ui:357
msgid "Select which types of files are shown"
msgstr "Wybór typów wyświetlanych plików"
@@ -2151,8 +2156,8 @@ msgstr "Na pewno trwale usunąć „%s”?"
msgid "If you delete an item, it will be permanently lost."
msgstr "Jeśli element zostanie usunięty, to zostanie on bezpowrotnie utracony."
#: gtk/gtkfilechooserwidget.c:1509 gtk/gtkfilechooserwidget.c:2251
#: gtk/gtklabel.c:6064 gtk/gtktext.c:5862 gtk/gtktextview.c:8728
#: gtk/gtkfilechooserwidget.c:1509 gtk/gtkfilechooserwidget.c:2226
#: gtk/gtklabel.c:6004 gtk/gtktext.c:5897 gtk/gtktextview.c:8599
msgid "_Delete"
msgstr "_Usuń"
@@ -2164,189 +2169,189 @@ msgstr "Nie można zmienić nazwy pliku"
msgid "Could not select file"
msgstr "Nie można wybrać pliku"
#: gtk/gtkfilechooserwidget.c:2246
#: gtk/gtkfilechooserwidget.c:2221
msgid "_Visit File"
msgstr "Od_wiedź plik"
#: gtk/gtkfilechooserwidget.c:2247
#: gtk/gtkfilechooserwidget.c:2222
msgid "_Open With File Manager"
msgstr "_Otwórz w menedżerze plików"
#: gtk/gtkfilechooserwidget.c:2248
#: gtk/gtkfilechooserwidget.c:2223
msgid "_Copy Location"
msgstr "S_kopiuj położenie"
#: gtk/gtkfilechooserwidget.c:2249
#: gtk/gtkfilechooserwidget.c:2224
msgid "_Add to Bookmarks"
msgstr "_Dodaj zakładkę"
#: gtk/gtkfilechooserwidget.c:2250 gtk/gtkplacessidebar.c:2681
#: gtk/ui/gtkfilechooserwidget.ui:481
#: gtk/gtkfilechooserwidget.c:2225 gtk/gtkplacessidebar.c:2647
#: gtk/ui/gtkfilechooserwidget.ui:476
msgid "_Rename"
msgstr "Z_mień nazwę"
#: gtk/gtkfilechooserwidget.c:2252
#: gtk/gtkfilechooserwidget.c:2227
msgid "_Move to Trash"
msgstr "_Przenieś do kosza"
#: gtk/gtkfilechooserwidget.c:2256
#: gtk/gtkfilechooserwidget.c:2231
msgid "Show _Hidden Files"
msgstr "_Ukryte pliki"
#: gtk/gtkfilechooserwidget.c:2257
#: gtk/gtkfilechooserwidget.c:2232
msgid "Show _Size Column"
msgstr "_Rozmiar"
#: gtk/gtkfilechooserwidget.c:2258
#: gtk/gtkfilechooserwidget.c:2233
msgid "Show T_ype Column"
msgstr "_Typ"
#: gtk/gtkfilechooserwidget.c:2259
#: gtk/gtkfilechooserwidget.c:2234
msgid "Show _Time"
msgstr "_Czas"
#: gtk/gtkfilechooserwidget.c:2260
#: gtk/gtkfilechooserwidget.c:2235
msgid "Sort _Folders before Files"
msgstr "K_atalogi przed plikami"
#. this is the header for the location column in the print dialog
#: gtk/gtkfilechooserwidget.c:2557 gtk/inspector/css-node-tree.ui:133
#: gtk/ui/gtkfilechooserwidget.ui:194 gtk/ui/gtkprintunixdialog.ui:108
#: gtk/gtkfilechooserwidget.c:2532 gtk/inspector/css-node-tree.ui:133
#: gtk/ui/gtkfilechooserwidget.ui:189 gtk/ui/gtkprintunixdialog.ui:108
msgid "Location"
msgstr "Położenie"
#. Label
#: gtk/gtkfilechooserwidget.c:2650
#: gtk/gtkfilechooserwidget.c:2625
msgid "_Name:"
msgstr "_Nazwa:"
#: gtk/gtkfilechooserwidget.c:3270 gtk/gtkfilechooserwidget.c:3284
#: gtk/gtkfilechooserwidget.c:3245 gtk/gtkfilechooserwidget.c:3259
#, c-format
msgid "Searching in %s"
msgstr "Wyszukiwanie w „%s”"
#: gtk/gtkfilechooserwidget.c:3290
#: gtk/gtkfilechooserwidget.c:3265
msgid "Searching"
msgstr "Wyszukiwanie"
#: gtk/gtkfilechooserwidget.c:3297
#: gtk/gtkfilechooserwidget.c:3272
msgid "Enter location"
msgstr "Proszę wprowadzić położenie"
#: gtk/gtkfilechooserwidget.c:3299
#: gtk/gtkfilechooserwidget.c:3274
msgid "Enter location or URL"
msgstr "Proszę wprowadzić położenie lub adres URL"
#: gtk/gtkfilechooserwidget.c:4301 gtk/gtkfilechooserwidget.c:7306
#: gtk/ui/gtkfilechooserwidget.ui:234
#: gtk/gtkfilechooserwidget.c:4276 gtk/gtkfilechooserwidget.c:7281
#: gtk/ui/gtkfilechooserwidget.ui:229
msgid "Modified"
msgstr "Modyfikacja"
#: gtk/gtkfilechooserwidget.c:4579
#: gtk/gtkfilechooserwidget.c:4554
#, c-format
msgid "Could not read the contents of %s"
msgstr "Nie można odczytać zawartości „%s”"
#: gtk/gtkfilechooserwidget.c:4583
#: gtk/gtkfilechooserwidget.c:4558
msgid "Could not read the contents of the folder"
msgstr "Nie można odczytać zawartości katalogu"
#. Translators: see g_date_time_format() for details on the format
#: gtk/gtkfilechooserwidget.c:4737 gtk/gtkfilechooserwidget.c:4781
#: gtk/gtkfilechooserwidget.c:4712 gtk/gtkfilechooserwidget.c:4756
msgid "%H:%M"
msgstr "%H%M"
#: gtk/gtkfilechooserwidget.c:4739 gtk/gtkfilechooserwidget.c:4783
#: gtk/gtkfilechooserwidget.c:4714 gtk/gtkfilechooserwidget.c:4758
msgid "%l:%M %p"
msgstr "%-l%M%p"
#: gtk/gtkfilechooserwidget.c:4743
#: gtk/gtkfilechooserwidget.c:4718
msgid "Yesterday"
msgstr "Wczoraj"
#: gtk/gtkfilechooserwidget.c:4751
#: gtk/gtkfilechooserwidget.c:4726
msgid "%-e %b"
msgstr "%-d %b"
#: gtk/gtkfilechooserwidget.c:4755
#: gtk/gtkfilechooserwidget.c:4730
msgid "%-e %b %Y"
msgstr "%-d %b %Y"
#: gtk/gtkfilechooserwidget.c:4845 gtk/gtkfilechooserwidget.c:4853
#: gtk/gtkfilechooserwidget.c:4820 gtk/gtkfilechooserwidget.c:4828
msgid "Program"
msgstr "Program"
#: gtk/gtkfilechooserwidget.c:4846
#: gtk/gtkfilechooserwidget.c:4821
msgid "Audio"
msgstr "Dźwięk"
#: gtk/gtkfilechooserwidget.c:4847 gtk/gtkfontbutton.c:564
#: gtk/gtkfilechooserwidget.c:4822 gtk/gtkfontbutton.c:564
#: gtk/inspector/visual.ui:187
msgid "Font"
msgstr "Czcionka"
#: gtk/gtkfilechooserwidget.c:4848
#: gtk/gtkfilechooserwidget.c:4823
msgid "Image"
msgstr "Obraz"
#: gtk/gtkfilechooserwidget.c:4849
#: gtk/gtkfilechooserwidget.c:4824
msgid "Archive"
msgstr "Archiwum"
#: gtk/gtkfilechooserwidget.c:4850
#: gtk/gtkfilechooserwidget.c:4825
msgid "Markup"
msgstr "Hipertekst"
#: gtk/gtkfilechooserwidget.c:4851 gtk/gtkfilechooserwidget.c:4852
#: gtk/gtkfilechooserwidget.c:4826 gtk/gtkfilechooserwidget.c:4827
msgid "Text"
msgstr "Tekst"
#: gtk/gtkfilechooserwidget.c:4854
#: gtk/gtkfilechooserwidget.c:4829
msgid "Video"
msgstr "Wideo"
#: gtk/gtkfilechooserwidget.c:4855
#: gtk/gtkfilechooserwidget.c:4830
msgid "Contacts"
msgstr "Kontakty"
#: gtk/gtkfilechooserwidget.c:4856
#: gtk/gtkfilechooserwidget.c:4831
msgid "Calendar"
msgstr "Kalendarz"
#: gtk/gtkfilechooserwidget.c:4857
#: gtk/gtkfilechooserwidget.c:4832
msgid "Document"
msgstr "Dokument"
#: gtk/gtkfilechooserwidget.c:4858
#: gtk/gtkfilechooserwidget.c:4833
msgid "Presentation"
msgstr "Prezentacja"
#: gtk/gtkfilechooserwidget.c:4859
#: gtk/gtkfilechooserwidget.c:4834
msgid "Spreadsheet"
msgstr "Arkusz kalkulacyjny"
#. Translators: We don't know whether this printer is
#. * available to print to.
#: gtk/gtkfilechooserwidget.c:4890 gtk/gtkfilechooserwidget.c:5074
#: gtk/gtkfilechooserwidget.c:4865 gtk/gtkfilechooserwidget.c:5049
#: gtk/inspector/prop-editor.c:1498
#: modules/printbackends/gtkprintbackendcloudprint.c:731
msgid "Unknown"
msgstr "Nieznane"
#: gtk/gtkfilechooserwidget.c:5113 gtk/gtkplacessidebar.c:1078
#: gtk/gtkfilechooserwidget.c:5088 gtk/gtkplacessidebar.c:1071
msgid "Home"
msgstr "Katalog domowy"
#: gtk/gtkfilechooserwidget.c:5610
#: gtk/gtkfilechooserwidget.c:5585
msgid "Cannot change to folder because it is not local"
msgstr "Nie można przejść do katalogu, ponieważ nie jest on lokalny"
#: gtk/gtkfilechooserwidget.c:6385 gtk/gtkprintunixdialog.c:671
#: gtk/gtkfilechooserwidget.c:6360 gtk/gtkprintunixdialog.c:671
#, c-format
msgid "A file named “%s” already exists. Do you want to replace it?"
msgstr "Plik o nazwie „%s” już istnieje. Zastąpić go?"
#: gtk/gtkfilechooserwidget.c:6388 gtk/gtkprintunixdialog.c:675
#: gtk/gtkfilechooserwidget.c:6363 gtk/gtkprintunixdialog.c:675
#, c-format
msgid ""
"The file already exists in “%s”. Replacing it will overwrite its contents."
@@ -2354,19 +2359,19 @@ msgstr ""
"Plik już istnieje w „%s”. Zastąpienie go spowoduje nadpisanie jego "
"zawartości."
#: gtk/gtkfilechooserwidget.c:6393 gtk/gtkprintunixdialog.c:683
#: gtk/gtkfilechooserwidget.c:6368 gtk/gtkprintunixdialog.c:683
msgid "_Replace"
msgstr "_Zastąp"
#: gtk/gtkfilechooserwidget.c:6601
#: gtk/gtkfilechooserwidget.c:6576
msgid "You do not have access to the specified folder."
msgstr "Brak dostępu do podanego katalogu."
#: gtk/gtkfilechooserwidget.c:7229
#: gtk/gtkfilechooserwidget.c:7204
msgid "Could not send the search request"
msgstr "Nie można wysłać żądania wyszukiwania"
#: gtk/gtkfilechooserwidget.c:7555
#: gtk/gtkfilechooserwidget.c:7530
msgid "Accessed"
msgstr "Dostęp"
@@ -2392,51 +2397,51 @@ msgctxt "font"
msgid "None"
msgstr "Brak"
#: gtk/gtkfontchooserwidget.c:1541
#: gtk/gtkfontchooserwidget.c:1543
msgid "Width"
msgstr "Szerokość"
#: gtk/gtkfontchooserwidget.c:1542
#: gtk/gtkfontchooserwidget.c:1544
msgid "Weight"
msgstr "Waga"
#: gtk/gtkfontchooserwidget.c:1543
#: gtk/gtkfontchooserwidget.c:1545
msgid "Italic"
msgstr "Pochylenie"
#: gtk/gtkfontchooserwidget.c:1544
#: gtk/gtkfontchooserwidget.c:1546
msgid "Slant"
msgstr "Nachylenie"
#: gtk/gtkfontchooserwidget.c:1545
#: gtk/gtkfontchooserwidget.c:1547
msgid "Optical Size"
msgstr "Rozmiar wizualny"
#: gtk/gtkfontchooserwidget.c:2088 gtk/inspector/prop-editor.c:1485
#: gtk/gtkfontchooserwidget.c:2090 gtk/inspector/prop-editor.c:1485
msgid "Default"
msgstr "Domyślne"
#: gtk/gtkfontchooserwidget.c:2132
#: gtk/gtkfontchooserwidget.c:2134
msgid "Ligatures"
msgstr "Ligatury"
#: gtk/gtkfontchooserwidget.c:2133
#: gtk/gtkfontchooserwidget.c:2135
msgid "Letter Case"
msgstr "Wielkość liter"
#: gtk/gtkfontchooserwidget.c:2134
#: gtk/gtkfontchooserwidget.c:2136
msgid "Number Case"
msgstr "Wielkość cyfr"
#: gtk/gtkfontchooserwidget.c:2135
#: gtk/gtkfontchooserwidget.c:2137
msgid "Number Spacing"
msgstr "Odstępy cyfr"
#: gtk/gtkfontchooserwidget.c:2136
#: gtk/gtkfontchooserwidget.c:2138
msgid "Number Formatting"
msgstr "Formatowanie cyfr"
#: gtk/gtkfontchooserwidget.c:2137
#: gtk/gtkfontchooserwidget.c:2139
msgid "Character Variants"
msgstr "Warianty znaku"
@@ -2461,51 +2466,51 @@ msgstr "Brak ikony „%s” w motywie %s"
msgid "Failed to load icon"
msgstr "Wczytanie ikony się nie powiodło"
#: gtk/gtkinfobar.c:1124 gtk/gtkmessagedialog.c:297 gtk/inspector/window.ui:465
#: gtk/gtkinfobar.c:1169 gtk/gtkmessagedialog.c:297 gtk/inspector/window.ui:465
msgid "Information"
msgstr "Informacja"
#: gtk/gtkinfobar.c:1128 gtk/gtkmessagedialog.c:301
#: gtk/gtkinfobar.c:1173 gtk/gtkmessagedialog.c:301
msgid "Question"
msgstr "Pytanie"
#: gtk/gtkinfobar.c:1132 gtk/gtkmessagedialog.c:305
#: gtk/gtkinfobar.c:1177 gtk/gtkmessagedialog.c:305
msgid "Warning"
msgstr "Ostrzeżenie"
#: gtk/gtkinfobar.c:1136 gtk/gtkmessagedialog.c:309
#: gtk/gtkinfobar.c:1181 gtk/gtkmessagedialog.c:309
msgid "Error"
msgstr "Błąd"
#: gtk/gtklabel.c:6061 gtk/gtktext.c:5850 gtk/gtktextview.c:8716
#: gtk/gtklabel.c:6001 gtk/gtktext.c:5885 gtk/gtktextview.c:8587
msgid "Cu_t"
msgstr "_Wytnij"
#: gtk/gtklabel.c:6062 gtk/gtktext.c:5854 gtk/gtktextview.c:8720
#: gtk/gtklabel.c:6002 gtk/gtktext.c:5889 gtk/gtktextview.c:8591
msgid "_Copy"
msgstr "S_kopiuj"
#: gtk/gtklabel.c:6063 gtk/gtktext.c:5858 gtk/gtktextview.c:8724
#: gtk/gtklabel.c:6003 gtk/gtktext.c:5893 gtk/gtktextview.c:8595
msgid "_Paste"
msgstr "Wk_lej"
#: gtk/gtklabel.c:6069 gtk/gtktext.c:5871 gtk/gtktextview.c:8737
#: gtk/gtklabel.c:6009 gtk/gtktext.c:5906 gtk/gtktextview.c:8620
msgid "Select _All"
msgstr "Z_aznacz wszystko"
#: gtk/gtklabel.c:6074
#: gtk/gtklabel.c:6014
msgid "_Open Link"
msgstr "_Otwórz odnośnik"
#: gtk/gtklabel.c:6078
#: gtk/gtklabel.c:6018
msgid "Copy _Link Address"
msgstr "S_kopiuj adres odnośnika"
#: gtk/gtklinkbutton.c:247
#: gtk/gtklinkbutton.c:243
msgid "_Copy URL"
msgstr "Skopiuj adres _URL"
#: gtk/gtklinkbutton.c:505
#: gtk/gtklinkbutton.c:547
msgid "Invalid URI"
msgstr "Nieprawidłowy adres URI"
@@ -2719,7 +2724,7 @@ msgstr ""
"Biblioteka GTK nie może odnaleźć modułu multimediów. Proszę sprawdzić "
"poprawność instalacji."
#: gtk/gtknotebook.c:4341 gtk/gtknotebook.c:6625
#: gtk/gtknotebook.c:4326 gtk/gtknotebook.c:6610
#, c-format
msgid "Page %u"
msgstr "%u. strona"
@@ -2784,126 +2789,126 @@ msgstr "Hasło"
msgid "_Show Text"
msgstr "_Wyświetlanie tekstu"
#: gtk/gtkpathbar.c:1359
#: gtk/gtkpathbar.c:1336
msgid "File System Root"
msgstr "System plików"
#. translators: %s is the name of a cloud provider for files
#: gtk/gtkplacessidebar.c:968
#: gtk/gtkplacessidebar.c:961
#, c-format
msgid "Open %s"
msgstr "Otwiera serwis %s"
#: gtk/gtkplacessidebar.c:1056
#: gtk/gtkplacessidebar.c:1049
msgid "Recent"
msgstr "Ostatnio używane"
#: gtk/gtkplacessidebar.c:1058
#: gtk/gtkplacessidebar.c:1051
msgid "Recent files"
msgstr "Ostatnio używane pliki"
#: gtk/gtkplacessidebar.c:1067
#: gtk/gtkplacessidebar.c:1060
msgid "Starred"
msgstr "Ulubione"
#: gtk/gtkplacessidebar.c:1069
#: gtk/gtkplacessidebar.c:1062
msgid "Starred files"
msgstr "Ulubione pliki"
#: gtk/gtkplacessidebar.c:1080
#: gtk/gtkplacessidebar.c:1073
msgid "Open your personal folder"
msgstr "Otwiera katalog osobisty"
#: gtk/gtkplacessidebar.c:1095
#: gtk/gtkplacessidebar.c:1088
msgid "Open the contents of your desktop in a folder"
msgstr "Otwiera zawartość pulpitu jako katalog"
#: gtk/gtkplacessidebar.c:1109
#: gtk/gtkplacessidebar.c:1102
msgid "Enter Location"
msgstr "Wprowadź położenie"
#: gtk/gtkplacessidebar.c:1111
#: gtk/gtkplacessidebar.c:1104
msgid "Manually enter a location"
msgstr "Ręczne wprowadzanie położenia"
#: gtk/gtkplacessidebar.c:1121
#: gtk/gtkplacessidebar.c:1114
msgid "Trash"
msgstr "Kosz"
#: gtk/gtkplacessidebar.c:1123
#: gtk/gtkplacessidebar.c:1116
msgid "Open the trash"
msgstr "Otwiera kosz"
#: gtk/gtkplacessidebar.c:1234 gtk/gtkplacessidebar.c:1262
#: gtk/gtkplacessidebar.c:1468
#: gtk/gtkplacessidebar.c:1227 gtk/gtkplacessidebar.c:1255
#: gtk/gtkplacessidebar.c:1461
#, c-format
msgid "Mount and open “%s”"
msgstr "Montuje i otwiera „%s”"
#: gtk/gtkplacessidebar.c:1357
#: gtk/gtkplacessidebar.c:1350
msgid "Open the contents of the file system"
msgstr "Otwiera zawartość systemu plików"
#: gtk/gtkplacessidebar.c:1443
#: gtk/gtkplacessidebar.c:1436
msgid "New bookmark"
msgstr "Nowa zakładka"
#: gtk/gtkplacessidebar.c:1445
#: gtk/gtkplacessidebar.c:1438
msgid "Add a new bookmark"
msgstr "Dodaje nową zakładkę"
#: gtk/gtkplacessidebar.c:1513
#: gtk/gtkplacessidebar.c:1506
msgid "Other Locations"
msgstr "Inne położenia"
#: gtk/gtkplacessidebar.c:1514
#: gtk/gtkplacessidebar.c:1507
msgid "Show other locations"
msgstr "Wyświetla inne położenia"
#. Adjust start/stop items to reflect the type of the drive
#: gtk/gtkplacessidebar.c:2276 gtk/gtkplacessidebar.c:3647
#: gtk/gtkplacessidebar.c:2242 gtk/gtkplacessidebar.c:3613
msgid "_Start"
msgstr "_Uruchom"
#: gtk/gtkplacessidebar.c:2277 gtk/gtkplacessidebar.c:3648
#: gtk/gtkplacessidebar.c:2243 gtk/gtkplacessidebar.c:3614
msgid "_Stop"
msgstr "Z_atrzymaj"
#. start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used
#: gtk/gtkplacessidebar.c:2284
#: gtk/gtkplacessidebar.c:2250
msgid "_Power On"
msgstr "_Włącz"
#: gtk/gtkplacessidebar.c:2285
#: gtk/gtkplacessidebar.c:2251
msgid "_Safely Remove Drive"
msgstr "Bezpiecznie u_suń napęd"
#: gtk/gtkplacessidebar.c:2289
#: gtk/gtkplacessidebar.c:2255
msgid "_Connect Drive"
msgstr "Podłą_cz napęd"
#: gtk/gtkplacessidebar.c:2290
#: gtk/gtkplacessidebar.c:2256
msgid "_Disconnect Drive"
msgstr "O_dłącz napęd"
#: gtk/gtkplacessidebar.c:2294
#: gtk/gtkplacessidebar.c:2260
msgid "_Start Multi-disk Device"
msgstr "Uruchom napęd wielody_skowy"
#: gtk/gtkplacessidebar.c:2295
#: gtk/gtkplacessidebar.c:2261
msgid "_Stop Multi-disk Device"
msgstr "Zatrzymaj napęd wielody_skowy"
#. stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used
#: gtk/gtkplacessidebar.c:2300
#: gtk/gtkplacessidebar.c:2266
msgid "_Unlock Device"
msgstr "Odblok_uj urządzenie"
#: gtk/gtkplacessidebar.c:2301
#: gtk/gtkplacessidebar.c:2267
msgid "_Lock Device"
msgstr "_Zablokuj urządzenie"
#: gtk/gtkplacessidebar.c:2339 gtk/gtkplacessidebar.c:3332
#: gtk/gtkplacessidebar.c:2305 gtk/gtkplacessidebar.c:3298
#, c-format
msgid "Unable to start “%s”"
msgstr "Nie można uruchomić „%s”"
@@ -2911,90 +2916,90 @@ msgstr "Nie można uruchomić „%s”"
#. Translators: This means that unlocking an encrypted storage
#. * device failed. %s is the name of the device.
#.
#: gtk/gtkplacessidebar.c:2375
#: gtk/gtkplacessidebar.c:2341
#, c-format
msgid "Error unlocking “%s”"
msgstr "Błąd podczas odblokowywania urządzenia „%s”"
#: gtk/gtkplacessidebar.c:2377
#: gtk/gtkplacessidebar.c:2343
#, c-format
msgid "Unable to access “%s”"
msgstr "Nie można uzyskać dostępu do „%s”"
#: gtk/gtkplacessidebar.c:2606
#: gtk/gtkplacessidebar.c:2572
msgid "This name is already taken"
msgstr "Ta nazwa jest już zajęta"
#: gtk/gtkplacessidebar.c:2675 gtk/inspector/actions.ui:25
#: gtk/inspector/css-node-tree.ui:34 gtk/ui/gtkfilechooserwidget.ui:176
#: gtk/ui/gtkfilechooserwidget.ui:456
#: gtk/gtkplacessidebar.c:2641 gtk/inspector/actions.ui:25
#: gtk/inspector/css-node-tree.ui:34 gtk/ui/gtkfilechooserwidget.ui:171
#: gtk/ui/gtkfilechooserwidget.ui:451
msgid "Name"
msgstr "Nazwa"
#: gtk/gtkplacessidebar.c:2873
#: gtk/gtkplacessidebar.c:2839
#, c-format
msgid "Unable to unmount “%s”"
msgstr "Nie można odmontować „%s”"
#: gtk/gtkplacessidebar.c:3049
#: gtk/gtkplacessidebar.c:3015
#, c-format
msgid "Unable to stop “%s”"
msgstr "Nie można zatrzymać „%s”"
#: gtk/gtkplacessidebar.c:3078
#: gtk/gtkplacessidebar.c:3044
#, c-format
msgid "Unable to eject “%s”"
msgstr "Nie można wysunąć „%s”"
#: gtk/gtkplacessidebar.c:3107 gtk/gtkplacessidebar.c:3136
#: gtk/gtkplacessidebar.c:3073 gtk/gtkplacessidebar.c:3102
#, c-format
msgid "Unable to eject %s"
msgstr "Nie można wysunąć %s"
#: gtk/gtkplacessidebar.c:3284
#: gtk/gtkplacessidebar.c:3250
#, c-format
msgid "Unable to poll “%s” for media changes"
msgstr "Nie można odpytać „%s” o zmiany nośnika"
#: gtk/gtkplacessidebar.c:3564 gtk/gtkplacessidebar.c:3630
#: gtk/gtkplacessidebar.c:3530 gtk/gtkplacessidebar.c:3596
#: gtk/gtkplacesview.c:1671
msgid "Open in New _Tab"
msgstr "O_twórz w nowej karcie"
#: gtk/gtkplacessidebar.c:3570 gtk/gtkplacessidebar.c:3633
#: gtk/gtkplacessidebar.c:3536 gtk/gtkplacessidebar.c:3599
#: gtk/gtkplacesview.c:1676
msgid "Open in New _Window"
msgstr "Otwórz w nowy_m oknie"
#: gtk/gtkplacessidebar.c:3637
#: gtk/gtkplacessidebar.c:3603
msgid "_Add Bookmark"
msgstr "_Dodaj zakładkę"
#: gtk/gtkplacessidebar.c:3638
#: gtk/gtkplacessidebar.c:3604
msgid "_Remove"
msgstr "_Usuń"
#: gtk/gtkplacessidebar.c:3639
#: gtk/gtkplacessidebar.c:3605
msgid "Rename…"
msgstr "Zmień nazwę…"
#: gtk/gtkplacessidebar.c:3643 gtk/gtkplacesview.c:1701
#: gtk/gtkplacessidebar.c:3609 gtk/gtkplacesview.c:1701
msgid "_Mount"
msgstr "Za_montuj"
#: gtk/gtkplacessidebar.c:3644 gtk/gtkplacesview.c:1690
#: gtk/gtkplacessidebar.c:3610 gtk/gtkplacesview.c:1690
msgid "_Unmount"
msgstr "O_dmontuj"
#: gtk/gtkplacessidebar.c:3645
#: gtk/gtkplacessidebar.c:3611
msgid "_Eject"
msgstr "Wy_suń"
#: gtk/gtkplacessidebar.c:3646
#: gtk/gtkplacessidebar.c:3612
msgid "_Detect Media"
msgstr "Wy_kryj nośnik"
#: gtk/gtkplacessidebar.c:4114 gtk/gtkplacesview.c:1124
#: gtk/gtkplacessidebar.c:4105 gtk/gtkplacesview.c:1124
msgid "Computer"
msgstr "Komputer"
@@ -3349,7 +3354,7 @@ msgstr "Z góry do dołu"
msgid "Bottom to top"
msgstr "Z dołu do góry"
#: gtk/gtkprogressbar.c:613
#: gtk/gtkprogressbar.c:601
#, c-format
msgctxt "progress bar label"
msgid "%.0f%%"
@@ -3454,19 +3459,27 @@ msgid "Search Shortcuts"
msgstr "Wyszukiwanie skrótów"
#: gtk/gtkshortcutswindow.c:1011 gtk/ui/gtkemojichooser.ui:322
#: gtk/ui/gtkfilechooserwidget.ui:306
#: gtk/ui/gtkfilechooserwidget.ui:301
msgid "No Results Found"
msgstr "Brak wyników"
#: gtk/gtkshortcutswindow.c:1017 gtk/ui/gtkemojichooser.ui:335
#: gtk/ui/gtkfilechooserwidget.ui:319 gtk/ui/gtkplacesview.ui:236
#: gtk/ui/gtkfilechooserwidget.ui:314 gtk/ui/gtkplacesview.ui:236
msgid "Try a different search"
msgstr "Proszę spróbować innych słów"
#: gtk/gtktext.c:5876 gtk/gtktextview.c:8742
#: gtk/gtktext.c:5911 gtk/gtktextview.c:8625
msgid "Insert _Emoji"
msgstr "Wstaw _emoji"
#: gtk/gtktextview.c:8607
msgid "_Undo"
msgstr "Cof_nij"
#: gtk/gtktextview.c:8611
msgid "_Redo"
msgstr "P_onów"
#: gtk/gtkvolumebutton.c:195
msgid "Adjusts the volume"
msgstr "Reguluje głośność"
@@ -3710,7 +3723,7 @@ msgid "Address"
msgstr "Adres"
#: gtk/inspector/misc-info.ui:56 gtk/inspector/statistics.ui:45
#: gtk/ui/gtkfilechooserwidget.ui:222
#: gtk/ui/gtkfilechooserwidget.ui:217
msgid "Type"
msgstr "Typ"
@@ -3886,7 +3899,7 @@ msgstr "Ścieżka"
msgid "Count"
msgstr "Liczba"
#: gtk/inspector/resource-list.ui:98 gtk/ui/gtkfilechooserwidget.ui:210
#: gtk/inspector/resource-list.ui:98 gtk/ui/gtkfilechooserwidget.ui:205
#: gtk/ui/gtkfontchooserwidget.ui:124 gtk/ui/gtkfontchooserwidget.ui:262
msgid "Size"
msgstr "Rozmiar"
@@ -6904,15 +6917,15 @@ msgstr "Tworzy katalog"
msgid "Files"
msgstr "Pliki"
#: gtk/ui/gtkfilechooserwidget.ui:257
#: gtk/ui/gtkfilechooserwidget.ui:252
msgid "Remote location — only searching the current folder"
msgstr "Zdalne położenie — przeszukiwanie tylko bieżącego katalogu"
#: gtk/ui/gtkfilechooserwidget.ui:397
#: gtk/ui/gtkfilechooserwidget.ui:392
msgid "Folder Name"
msgstr "Nazwa katalogu"
#: gtk/ui/gtkfilechooserwidget.ui:423
#: gtk/ui/gtkfilechooserwidget.ui:418
msgid "_Create"
msgstr "_Utwórz"

View File

@@ -25,7 +25,6 @@ test_data = [
'test3.css', 'test3.ui', 'test3.nodes',
'test4.css', 'test4.ui', 'test4.nodes',
'test5.css', 'test5.ui', 'test5.nodes',
'test6.css', 'test6.ui', 'test6.nodes',
]
if get_option('install-tests')

View File

@@ -1,9 +1,9 @@
window.background:dir(ltr)
decoration:dir(ltr)
grid.horizontal:dir(ltr)
label:dir(ltr) name|sibling-name
label:dir(ltr) name|sibling-name|parent-name|parent-sibling-name
box.horizontal:dir(ltr)
label:dir(ltr) name|sibling-name
label:dir(ltr) name|sibling-name|parent-name|parent-sibling-name
button:dir(ltr)
box.horizontal:dir(ltr)
checkbutton:dir(ltr)

View File

@@ -1,19 +0,0 @@
/* a simplified version of some of the things we do for linked buttons and entries */
box:not(.vertical).linked > button:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
box:not(.vertical).linked > button:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
box:not(.vetical).linked > *:disabled ~ entry:disabled {
border-left-color: red;
}
box:not(.vetical).linked > entry:focus + button {
border-left-color: blue;
}

View File

@@ -1,12 +0,0 @@
window.background:dir(ltr)
decoration:dir(ltr)
box.horizontal.linked:dir(ltr)
button:dir(ltr) name|first-child|last-child|parent-class|parent-name
button:dir(ltr) name|first-child|last-child|sibling-name|sibling-state|parent-class|parent-name
button:dir(ltr) name|first-child|last-child|sibling-name|sibling-state|parent-class|parent-name
box.horizontal.linked:dir(ltr)
entry:dir(ltr)
text:dir(ltr)
undershoot.left:dir(ltr)
undershoot.right:dir(ltr)
button:dir(ltr) name|first-child|last-child|sibling-name|sibling-state|parent-class|parent-name

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="type">popup</property>
<child>
<object class="GtkBox">
<style><class name="linked"/></style>
<child>
<object class="GtkButton"/>
</child>
<child>
<object class="GtkButton"/>
</child>
<child>
<object class="GtkButton"/>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<style><class name="linked"/></style>
<child>
<object class="GtkEntry"/>
</child>
<child>
<object class="GtkButton"/>
</child>
</object>
</child>
</object>
</interface>