Compare commits

...

58 Commits

Author SHA1 Message Date
Matthias Clasen c45199e388 gsk: Fix a profiler mark
I messed this up in f26efd9adf.
2024-04-27 10:23:45 -04:00
Matthias Clasen 27fb9917d8 Merge branch 'matthiasc/for-main' into 'main'
atcontext: Add a few missing values

Closes #6575

See merge request GNOME/gtk!7190
2024-04-26 23:16:31 +00:00
Matthias Clasen b5d6613a3f atcontext: Add a few missing values
Add a missing value to the naming array, and sort the recent additions
alphabetically.

Fixes: #6575
2024-04-26 18:46:00 -04:00
Matthias Clasen 5dc77edbe3 Merge branch 'matthiasc/for-main' into 'main'
linkbutton: Report errors

Closes #6446

See merge request GNOME/gtk!7189
2024-04-26 22:26:14 +00:00
Matthias Clasen a3d63b3579 label: Report errors
Print a warning when launching a handler fails.
2024-04-26 17:25:27 -04:00
Matthias Clasen 57c12a8661 linkbutton: Report errors
Print a warning when launching a handler fails.

Fixes: #6446
2024-04-26 17:25:13 -04:00
Matthias Clasen f1ccb9b81a Merge branch 'vulkan-gl-texture-warning' into 'main'
vulkan: Add a warning about GL textures

See merge request GNOME/gtk!7184
2024-04-26 20:16:27 +00:00
Matthias Clasen 2711cb8dcd Merge branch 'wip/xdg-activation-token' into 'main'
Improve xdg-activation-token handling for non-dbus activation

See merge request GNOME/gtk!7118
2024-04-26 18:32:08 +00:00
Matthias Clasen c79925bd4a Merge branch 'listview-oversights' into 'main'
listview: Fix some oversights

See merge request GNOME/gtk!7187
2024-04-26 18:27:49 +00:00
Matthias Clasen 05d5860dc0 listview: Fix some oversights
The list factory widget was notifying the wrong properties.
2024-04-26 11:19:59 -04:00
Matthias Clasen a1fdf06d80 gsk: Add a warning for inefficient texture import
With GSK_DEBUG=fallback, warn if a non-memory texture has to be
downloaded for importing it into Vulkan or GL.
2024-04-26 11:04:47 -04:00
Matthias Clasen 36d7ca058e Cosmetics 2024-04-26 10:59:21 -04:00
Matthias Clasen 2e08db91ca Merge branch 'offload-snapshot-no-child' into 'main'
Don't crash if snapshotting a GtkGraphicsOffload without child

See merge request GNOME/gtk!7183
2024-04-25 20:46:31 +00:00
Sebastian Dröge 2c9b47ff3c Don't crash if snapshotting a GtkGraphicsOffload without child 2024-04-25 22:46:35 +03:00
Matthias Clasen 62ad1a61dc Merge branch 'matthiasc/for-main' into 'main'
offload: Make logging more compact

See merge request GNOME/gtk!7181
2024-04-25 03:01:44 +00:00
Matthias Clasen 3fc9de7539 offload: Make logging more compact
Use a format of

[XXX] SYMBOL DETAILS

where SYMBOL indicates the offloading status:
 🗙 - no offload
 ▲ - offload above, with background
 △ - offload above, no background
 ▼ - offload below, with background
 ▽ - offload below, no background
2024-04-24 22:01:56 -04:00
Matthias Clasen 1c9a55d185 Merge branch 'vulkan-msvc' into 'main'
gskvulkandescriptors.c: Don't return value from void-rettype function

See merge request GNOME/gtk!7175
2024-04-25 01:37:49 +00:00
Matthias Clasen 492940205e Merge branch 'amolenaar/macos-fix-nsapp-shortcuts' into 'main'
macos: fix in-app native shortcuts (regression)

See merge request GNOME/gtk!7178
2024-04-25 01:35:59 +00:00
Arjan Molenaar 985e4906c8 macos: Add some docs for the different NSEvent getters 2024-04-24 23:49:37 +02:00
Benjamin Otte e9dcf8167c Merge branch 'gbsneto/vulkan-dmabuf-general' into 'main'
vulkan/image: Use GENERAL for initial layout of DMA-BUF textures

See merge request GNOME/gtk!7179
2024-04-24 20:55:51 +00:00
Georges Basile Stavracas Neto 3aa6c27c26 vulkan/image: Use GENERAL for initial layout of DMA-BUF textures
The VK_IMAGE_LAYOUT_UNDEFINED layout means that the data hold by the
texture can be discarded, and we don't want to discard it. Because the
Vulkan spec is unclear (see [1] for a discussion), err on the side of
caution and use VK_IMAGE_LAYOUT_GENERAL.

Fixes import failures with WebKit.

[1] https://github.com/ValveSoftware/gamescope/issues/356
2024-04-24 17:21:51 -03:00
Emmanuele Bassi 7075e6be89 Merge branch 'gst-backend-msvc' into 'main'
GStreamer media backend: Fix building on Visual Studio

See merge request GNOME/gtk!7174
2024-04-24 10:04:11 +00:00
Chun-wei Fan 016354b6dd gskvulkandescriptors.c: Don't return value from void-rettype function
Fixes builds on Visual Studio with Vulkan enabled, as later GLib releases
consider this as an error on Visual Studio builds.
2024-04-24 16:19:43 +08:00
Chun-wei Fan 1dfc6d65df GStreamer media backend: Fix building and running on Windows
Visual Studio (and possibly other non-GCC compilers) do not like
uses of #-preprocessor directives in macro usage (warning C5101: use of
preprocessor directive in function-like macro argument list is undefined
behavior is also shown), so fix the build by defining another macro
accordingly.
2024-04-24 16:15:32 +08:00
Matthias Clasen b7d0295481 Merge branch 'macos-default-settings' into 'main'
macos: Respect the default-settings debug key

See merge request GNOME/gtk!7173
2024-04-23 16:38:00 +00:00
Matthias Clasen a2854af325 macos: Respect the default-settings debug key
This makes our behavior more consistent across platforms.
The suggestion came up in discussion in #6545.
2024-04-23 07:52:25 -04:00
Changwoo Ryu 320496b039 Update Korean translation
(cherry picked from commit e1dafd7a5d)
2024-04-23 11:33:48 +00:00
Arjan Molenaar f004f14b89 macos: fix in-app native shortcuts (again)
Popping an event of the queue in the IMContext handler
prevents it from being forwarded to the NSApp, in case the
(key) event was not handled by IMContext.

So I reverted to a mix of the original (4.13) and new (4.14.1) behavior
for fetching events: NSEvent lookup for IMContext uses loose matching,
so it can work with rewritten events. When sending events to NSApp, only
we're checking for an exact match.

Now in-app keyboard shortcuts (e.g. Ctrl-F2) work from within text
fields again.
2024-04-23 08:57:09 +02:00
Matthias Clasen 8f15f6959c Merge branch 'vulkan-profiler-mark' into 'main'
gsk: Add a profiler mark for pipeline creation

See merge request GNOME/gtk!7172
2024-04-23 01:19:20 +00:00
Matthias Clasen f26efd9adf gsk: Add a profiler mark for pipeline creation
This is the Vulkan equivalent of shader compilation, it could be
expensive, so lets add a mark around it.
2024-04-22 20:47:25 -04:00
Matthias Clasen 3f342d75b2 Merge branch 'wip/alice/root-test' into 'main'
testsuite: Add css/style/root test

See merge request GNOME/gtk!7171
2024-04-22 20:26:46 +00:00
Alice Mikhaylenko 3ab189404e testsuite: Add css/style/root test
Should have been a part of 76421847a5
but I forgot to commit it.
2024-04-22 21:34:50 +04:00
Matthias Clasen 48fc8d6606 Merge branch 'wip/alice/root' into 'main'
cssselector: Support :root

See merge request GNOME/gtk!7170
2024-04-22 16:26:18 +00:00
Matthias Clasen 2e0f411de9 Merge branch 'amolenaar/macos-fix-delayed-rendering' into 'main'
macos: Avoid repeatedly sending events back to macOS

See merge request GNOME/gtk!7158
2024-04-22 16:25:57 +00:00
Matthias Clasen f08e36e225 Merge branch 'wip/alice/bugfix' into 'main'
csstokenizer: Fix an out of bounds when reading an ident followed by EOF

See merge request GNOME/gtk!7169
2024-04-22 16:25:17 +00:00
Matthias Clasen 9f358ac655 Merge branch 'matthiasc/for-main' into 'main'
roaring: Fix some ubsan warnings

See merge request GNOME/gtk!7165
2024-04-22 15:52:04 +00:00
Matthias Clasen 33d1349e53 Merge branch 'wip/alice/wayland-crash' into 'main'
wayland: Consistently handle enum type

Closes #6649

See merge request GNOME/gtk!7168
2024-04-22 15:25:31 +00:00
Sebastian Wick 6b2b6ceb74 gdk: Consider XDG_ACTIVATION_TOKEN for the startup notification id
We prefer it over the old DESKTOP_STARTUP_ID environment variable if we
have it and it is valid.

We have to stash and unset XDG_ACTIVATION_TOKEN in addition to
DESKTOP_STARTUP_ID now as well. This makes sure that we don't call any
library functions which might rely on some environment variables. This
way unsetting the environment variables is safe and we can then
afterwards validate and print warnings.
2024-04-22 17:13:21 +02:00
Alice Mikhaylenko 76421847a5 cssselector: Support :root
This will be useful for defining global variables.
2024-04-22 18:55:35 +04:00
Alice Mikhaylenko 840cd6e44c csstokenizer: Fix an out of bounds when reading an ident followed by EOF 2024-04-22 17:59:29 +04:00
Arjan Molenaar f81038e99a macos: Avoid repeatedly sending events back to macOS
in the old approach it was possible that one NSEvent was
sent to the underlying NSApp multiple times. This resulted in
those events being forwarded to our (glib) event queue again.

The visual result was that no screen updates were done. Under the hood
the application was very busy with passing events around.

By popping the events off of our event queue, we make sure they're sent
only once.
2024-04-22 15:51:12 +02:00
Alice Mikhaylenko 007e7c68dc wayland: Consistently handle enum type
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/6649
2024-04-22 17:18:11 +04:00
Emmanuele Bassi e5e147ad53 Merge branch 'wip/alice/flatpak-fix' into 'main'
Fix flatpak build

See merge request GNOME/gtk!7166
2024-04-22 13:04:33 +00:00
Alice Mikhaylenko 58e00040e0 Fix flatpak build
Regressed in 70cd0e28ab
2024-04-22 16:18:58 +04:00
Matthias Clasen 5d1b8399fb testsuite: Fix another ubsan warning
The expression here was a bit too dense for ubsan to figure out
what branches aren't hit.
2024-04-21 22:24:02 -04:00
Matthias Clasen deec2b6c6c lsan: Don't suppress glib and gio leaks
These are useful to see and not all that common.
2024-04-21 22:02:44 -04:00
Matthias Clasen 246eb8ea25 gtk: Fix more ubsan warnings
Most of these are calling a get_instance_private() function before
checking that the object isn't NULL.
2024-04-21 22:01:06 -04:00
Matthias Clasen 815df9a76a wayland: Fix an ubsan warning
dev_t requires 8-byte alignment, so we need to use memcpy.
2024-04-21 21:32:41 -04:00
Matthias Clasen f896dddadc inspector: Fix an ubsan warning
These values are too big for int, so cast them to double.
2024-04-21 21:21:11 -04:00
Matthias Clasen d733e94a8b roaring: Fix some ubsan warnings
Avoid warnings about memcpy (NULL, NULL, 0).
2024-04-21 21:20:16 -04:00
Matthias Clasen 59db0ca328 Merge branch 'matthiasc/for-main' into 'main'
wayland: Use wl_compositor version 6

See merge request GNOME/gtk!7164
2024-04-22 01:00:22 +00:00
Matthias Clasen 3bd97590a1 wayland: Tweak a debug message
We aren't drawing to subsurfaces.
2024-04-21 20:37:45 -04:00
Matthias Clasen 722a0fa36d wayland: Check subsurface backgrounds better
Do the same checks for background coordinates that we do for the
subsurface coordinates themselves: they must be integral in both
application and device pixels.
2024-04-21 20:33:29 -04:00
Matthias Clasen b21708c5e4 offload: Consolidate logging a bit
Spew a bit less per-frame. Unfortunately, we still spew for
every frame, and fixing that would require more extensive
refactoring to centralize all logging in gskoffload.c
2024-04-21 20:18:38 -04:00
Matthias Clasen b5fb584316 wayland: Use gdk_debug_message consistently
For debug messages, we should always use gdk_debug_message.
2024-04-21 19:41:49 -04:00
Matthias Clasen fd1e1b9b7c Cosmetics 2024-04-21 19:35:52 -04:00
Matthias Clasen c0caae0ff0 wayland: Use wl_compositor version 6
This gives us events for preferred_buffer_scale (which we ignore)
and preferred_buffer_transform (which we also currently ignore).
2024-04-21 19:27:58 -04:00
Matthias Clasen 5c972e4786 Post-release version bump 2024-04-21 12:27:05 -04:00
47 changed files with 616 additions and 313 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ flatpak build ${builddir} meson \
-Dbuild-examples=false \
-Dintrospection=disabled \
-Dbuild-demos=true \
-Ddemo-profile=devel \
-Dprofile=devel \
_flatpak_build
flatpak build --env=CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA ${builddir} ninja -C _flatpak_build install
+3
View File
@@ -1,3 +1,6 @@
Overview of Changes in 4.15.1, xx-xx-xxxx
=========================================
Overview of Changes in 4.15.0, 21-04-2024
=========================================
+1 -1
View File
@@ -186,7 +186,7 @@
"config-opts" : [
"--libdir=/app/lib",
"-Dbuildtype=debugoptimized",
"-Ddemo-profile=devel"
"-Dprofile=devel"
],
"sources" : [
{
+1 -1
View File
@@ -115,7 +115,7 @@
"config-opts" : [
"--libdir=/app/lib",
"-Dbuildtype=debugoptimized",
"-Ddemo-profile=devel"
"-Dprofile=devel"
],
"sources" : [
{
@@ -115,7 +115,7 @@
"config-opts" : [
"--libdir=/app/lib",
"-Dbuildtype=debugoptimized",
"-Ddemo-profile=devel"
"-Dprofile=devel"
],
"sources" : [
{
@@ -115,7 +115,7 @@
"config-opts" : [
"--libdir=/app/lib",
"-Dbuildtype=debugoptimized",
"-Ddemo-profile=devel"
"-Dprofile=devel"
],
"sources" : [
{
+1
View File
@@ -74,6 +74,7 @@ in a selector, widget names must be prefixed with a # character.
| E:not(selector) | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#negation) | |
| E:dir(ltr), E:dir(rtl) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#the-dir-pseudo) | |
| E:drop(active) | [CSS Selector Level 4](https://drafts.csswg.org/selectors/#drag-pseudos) | |
| E:root | [CSS Selector Level 3](https://www.w3.org/TR/selectors-3/#root-pseudo) | |
| E F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#descendent-combinators) | |
| E > F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#child-combinators) | |
| E ~ F | [CSS Selector Level 3](https://www.w3.org/TR/css3-selectors/#general-sibling-combinators) | |
+44 -20
View File
@@ -143,31 +143,50 @@ static const GdkDebugKey gdk_debug_keys[] = {
#ifdef G_HAS_CONSTRUCTORS
#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(stash_desktop_startup_notification_id)
#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(stash_and_unset_environment)
#endif
G_DEFINE_CONSTRUCTOR(stash_desktop_startup_notification_id)
G_DEFINE_CONSTRUCTOR(stash_and_unset_environment)
#endif
static char *startup_notification_id = NULL;
static char *xdg_activation_token = NULL;
static void
stash_desktop_startup_notification_id (void)
stash_and_unset_environment (void)
{
const char *desktop_startup_id;
desktop_startup_id = g_getenv ("DESKTOP_STARTUP_ID");
if (desktop_startup_id && *desktop_startup_id != '\0')
{
if (!g_utf8_validate (desktop_startup_id, -1, NULL))
g_warning ("DESKTOP_STARTUP_ID contains invalid UTF-8");
else
startup_notification_id = g_strdup (desktop_startup_id);
}
/* Clear the environment variable so it won't be inherited by
/* Copies environment variables and unsets them so they won't be inherited by
* child processes and confuse things.
*
* Changing environment variables can be racy so we try to do this as early as
* possible in the program flow and before any printing that might involve
* environment variables.
*/
g_unsetenv ("DESKTOP_STARTUP_ID");
struct {
const char *key;
char **dst;
} vars[] = {
{ "DESKTOP_STARTUP_ID", &startup_notification_id },
{ "XDG_ACTIVATION_TOKEN", &xdg_activation_token },
};
size_t i;
for (i = 0; i < G_N_ELEMENTS (vars); i++)
*vars[i].dst = g_strdup (g_getenv (vars[i].key));
for (i = 0; i < G_N_ELEMENTS (vars); i++)
g_unsetenv (vars[i].key);
for (i = 0; i < G_N_ELEMENTS (vars); i++)
{
if (*vars[i].dst == NULL)
continue;
if (!g_utf8_validate (*vars[i].dst, -1, NULL))
{
g_warning ("%s contains invalid UTF-8", vars[i].key);
g_clear_pointer (vars[i].dst, g_free);
}
}
}
static gpointer
@@ -292,7 +311,7 @@ gdk_pre_parse (void)
gdk_gl_backend_use (GDK_GL_WGL);
#ifndef G_HAS_CONSTRUCTORS
stash_desktop_startup_notification_id ();
stash_and_unset_environment ();
#endif
}
@@ -326,15 +345,20 @@ gdk_display_open_default (void)
/*< private >
* gdk_get_startup_notification_id:
*
* Returns the original value of the DESKTOP_STARTUP_ID environment
* variable if it was defined and valid, or %NULL otherwise.
* Returns the original value of the XDG_ACTIVATION_TOKEN environment
* variable if it was defined and valid, otherwise it returns the original
* value of the DESKTOP_STARTUP_ID environment variable if it was defined
* and valid, or %NULL if neither of them were defined and valid.
*
* Returns: (nullable) (transfer none): the original value of the
* DESKTOP_STARTUP_ID environment variable
* XDG_ACTIVATION_TOKEN or DESKTOP_STARTUP_ID environment variable
*/
const char *
gdk_get_startup_notification_id (void)
{
if (xdg_activation_token)
return xdg_activation_token;
return startup_notification_id;
}
+2 -1
View File
@@ -161,7 +161,8 @@ void _gdk_macos_display_send_event (GdkMacosDisp
void _gdk_macos_display_warp_pointer (GdkMacosDisplay *self,
int x,
int y);
NSEvent *_gdk_macos_display_get_nsevent (GdkEvent *event);
NSEvent *_gdk_macos_display_get_matching_nsevent (GdkEvent *event);
NSEvent *_gdk_macos_display_get_exact_nsevent (GdkEvent *event);
NSEvent *_gdk_macos_display_get_last_nsevent (void);
GdkDrag *_gdk_macos_display_find_drag (GdkMacosDisplay *self,
NSInteger sequence_number);
+31 -4
View File
@@ -77,6 +77,9 @@ gdk_macos_display_get_setting (GdkDisplay *display,
const char *setting,
GValue *value)
{
if (gdk_display_get_debug_flags (display) & GDK_DEBUG_DEFAULT_SETTINGS)
return FALSE;
return _gdk_macos_display_get_setting (GDK_MACOS_DISPLAY (display), setting, value);
}
@@ -991,17 +994,41 @@ _gdk_macos_display_warp_pointer (GdkMacosDisplay *self,
CGWarpMouseCursorPosition ((CGPoint) { x, y });
}
/* Find the matching `NSEvent` for an `GdkEvent`. This function
* return the `NSEvent`, also for rewritten `GdkEvent`'s.
*/
NSEvent *
_gdk_macos_display_get_nsevent (GdkEvent *event)
_gdk_macos_display_get_matching_nsevent (GdkEvent *event)
{
for (const GList *iter = event_map.head; iter; iter = iter->next)
for (GList *iter = event_map.head; iter; iter = iter->next)
{
const GdkToNSEventMap *map = iter->data;
GdkToNSEventMap *map = iter->data;
if (map->gdk_event->event_type == event->event_type &&
map->gdk_event->device == event->device &&
map->gdk_event->time == event->time)
return map->nsevent;
{
return map->nsevent;
}
}
return NULL;
}
/* Find the matching `NSEvent` for the original `GdkEvent`.
* If an event was rewritten, it returns `NULL`.
*/
NSEvent *
_gdk_macos_display_get_exact_nsevent (GdkEvent *event)
{
for (GList *iter = event_map.head; iter; iter = iter->next)
{
GdkToNSEventMap *map = iter->data;
if (map->gdk_event == event)
{
return map->nsevent;
}
}
return NULL;
+1 -1
View File
@@ -738,7 +738,7 @@ gdk_macos_event_source_dispatch (GSource *source,
if (!handled)
{
NSEvent *nsevent = _gdk_macos_display_get_nsevent (event);
NSEvent *nsevent = _gdk_macos_display_get_exact_nsevent (event);
if (nsevent != NULL)
[NSApp sendEvent: nsevent];
}
+11 -3
View File
@@ -313,7 +313,9 @@ linux_dmabuf_main_device (void *data,
struct zwp_linux_dmabuf_feedback_v1 *zwp_linux_dmabuf_feedback_v1,
struct wl_array *device)
{
dev_t dev G_GNUC_UNUSED = *(dev_t *)device->data;
dev_t dev G_GNUC_UNUSED;
memcpy (&dev, device->data, sizeof (dev_t));
GDK_DEBUG (MISC, "got dmabuf main device: %u %u", major (dev), minor (dev));
}
@@ -330,7 +332,9 @@ linux_dmabuf_tranche_target_device (void *data,
struct zwp_linux_dmabuf_feedback_v1 *zwp_linux_dmabuf_feedback_v1,
struct wl_array *device)
{
dev_t dev G_GNUC_UNUSED = *(dev_t *)device->data;
dev_t dev G_GNUC_UNUSED;
memcpy (&dev, device->data, sizeof (dev_t));
GDK_DEBUG (MISC, "got dmabuf tranche target device: %u %u", major (dev), minor (dev));
}
@@ -440,7 +444,7 @@ gdk_registry_handle_global (void *data,
{
display_wayland->compositor =
wl_registry_bind (display_wayland->wl_registry, id,
&wl_compositor_interface, MIN (version, 5));
&wl_compositor_interface, MIN (version, 6));
}
else if (strcmp (interface, "wl_shm") == 0)
{
@@ -1917,6 +1921,7 @@ apply_portal_setting (TranslationEntry *entry,
entry->fallback.s = g_intern_string (g_variant_get_string (value, NULL));
break;
case G_TYPE_INT:
case G_TYPE_ENUM:
entry->fallback.i = g_variant_get_int32 (value);
break;
case G_TYPE_BOOLEAN:
@@ -2166,6 +2171,9 @@ set_value_from_entry (GdkDisplay *display,
case G_TYPE_BOOLEAN:
g_value_set_boolean (value, entry->fallback.b);
break;
case G_TYPE_ENUM:
g_value_set_enum (value, entry->fallback.i);
break;
case G_TYPE_NONE:
if (g_str_equal (entry->setting, "gtk-fontconfig-timestamp"))
g_value_set_uint (value, (guint)entry->fallback.i);
+16 -16
View File
@@ -781,8 +781,8 @@ pointer_handle_motion (void *data,
{
double x, y;
gdk_event_get_position (event, &x, &y);
g_message ("motion %f %f, seat %p state %d",
x, y, seat, gdk_event_get_modifier_state (event));
gdk_debug_message ("motion %f %f, seat %p state %d",
x, y, seat, gdk_event_get_modifier_state (event));
}
if (wl_seat_get_version (seat->wl_seat) < WL_POINTER_HAS_FRAME)
@@ -1664,7 +1664,7 @@ touch_handle_down (void *data,
{
double xx, yy;
gdk_event_get_position (event, &xx, &yy);
g_message ("touch begin %f %f", xx, yy);
gdk_debug_message ("touch begin %f %f", xx, yy);
}
_gdk_wayland_display_deliver_event (seat->display, event);
@@ -1699,7 +1699,7 @@ touch_handle_up (void *data,
{
double x, y;
gdk_event_get_position (event, &x, &y);
g_message ("touch end %f %f", x, y);
gdk_debug_message ("touch end %f %f", x, y);
}
_gdk_wayland_display_deliver_event (seat->display, event);
@@ -1747,7 +1747,7 @@ touch_handle_motion (void *data,
{
double xx, yy;
gdk_event_get_position (event, &xx, &yy);
g_message ("touch update %f %f", xx, yy);
gdk_debug_message ("touch update %f %f", xx, yy);
}
_gdk_wayland_display_deliver_event (seat->display, event);
@@ -1841,9 +1841,9 @@ emit_gesture_swipe_event (GdkWaylandSeat *seat,
{
double x, y;
gdk_event_get_position (event, &x, &y);
g_message ("swipe event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event), x, y, seat,
gdk_event_get_modifier_state (event));
gdk_debug_message ("swipe event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event), x, y, seat,
gdk_event_get_modifier_state (event));
}
_gdk_wayland_display_deliver_event (seat->display, event);
@@ -1936,10 +1936,10 @@ emit_gesture_pinch_event (GdkWaylandSeat *seat,
{
double x, y;
gdk_event_get_position (event, &x, &y);
g_message ("pinch event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event),
x, y, seat,
gdk_event_get_modifier_state (event));
gdk_debug_message ("pinch event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event),
x, y, seat,
gdk_event_get_modifier_state (event));
}
_gdk_wayland_display_deliver_event (seat->display, event);
@@ -2030,10 +2030,10 @@ emit_gesture_hold_event (GdkWaylandSeat *seat,
{
double x, y;
gdk_event_get_position (event, &x, &y);
g_message ("hold event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event),
x, y, seat,
gdk_event_get_modifier_state (event));
gdk_debug_message ("hold event %d, coords: %f %f, seat %p state %d",
gdk_event_get_event_type (event),
x, y, seat,
gdk_event_get_modifier_state (event));
}
_gdk_wayland_display_deliver_event (seat->display, event);
+45 -36
View File
@@ -408,61 +408,64 @@ gdk_wayland_subsurface_attach (GdkSubsurface *sub,
if (has_background)
ensure_bg_surface (self);
if (self->dest.x != dest->origin.x ||
self->dest.y != dest->origin.y ||
self->dest.width != dest->size.width ||
self->dest.height != dest->size.height)
if (!scaled_rect_is_integral (dest, 1, &device_rect))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Non-integer coordinates %g %g %g %g for %dx%d texture, hiding subsurface %p",
"[%p] 🗙 Non-integral coordinates %g %g %g %g",
self,
dest->origin.x, dest->origin.y,
dest->size.width, dest->size.height,
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
self);
dest->size.width, dest->size.height);
}
else if (!scaled_rect_is_integral (dest, scale, &device_rect))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Non-integral device coordinates %g %g %g %g (fractional scale %.2f), hiding subsurface %p",
"[%p] 🗙 Non-integral device coordinates %g %g %g %g (scale %.2f)",
self,
device_rect.origin.x, device_rect.origin.y,
device_rect.size.width, device_rect.size.height,
scale,
self);
scale);
}
else if (background && !scaled_rect_is_integral (background, 1, &device_rect))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"[%p] 🗙 Non-integral background coordinates %g %g %g %g",
self,
background->origin.x, background->origin.y,
background->size.width, background->size.height);
}
else if (background && !scaled_rect_is_integral (background, scale, &device_rect))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Non-integral background device coordinates %g %g %g %g (fractional scale %.2f), hiding background of subsurface %p",
"[%p] 🗙 Non-integral background device coordinates %g %g %g %g (scale %.2f)",
self,
device_rect.origin.x, device_rect.origin.y,
device_rect.size.width, device_rect.size.height,
scale,
self);
scale);
}
else if (!GDK_IS_DMABUF_TEXTURE (texture) &&
!GDK_DISPLAY_DEBUG_CHECK (gdk_surface_get_display (sub->parent), FORCE_OFFLOAD))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"%dx%d %s is not a GdkDmabufTexture, hiding subsurface %p",
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
"[%p] 🗙 %s (%dx%d) is not a GdkDmabufTexture",
self,
G_OBJECT_TYPE_NAME (texture),
self);
gdk_texture_get_width (texture),
gdk_texture_get_height (texture));
}
else if (!will_be_above &&
gdk_memory_format_alpha (gdk_texture_get_format (texture)) != GDK_MEMORY_ALPHA_OPAQUE &&
!has_background)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Cannot offload non-opaque %dx%d texture below, hiding subsurface %p",
"[%p] 🗙 Non-opaque texture (%dx%d) below",
self,
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
self);
gdk_texture_get_height (texture));
}
else if (has_background && !display->single_pixel_buffer)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Cannot offload subsurface %p with background, no single-pixel buffer support",
"[%p] 🗙 Texture has background, but no single-pixel buffer support",
self);
}
else
@@ -491,10 +494,13 @@ gdk_wayland_subsurface_attach (GdkSubsurface *sub,
}
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Attached %dx%d texture to subsurface %p at %d %d %d %d",
"[%p] %s Attaching texture (%dx%d) at %d %d %d %d",
self,
will_be_above
? (has_background ? "" : "")
: (has_background ? "" : ""),
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
self,
self->dest.x, self->dest.y,
self->dest.width, self->dest.height);
result = TRUE;
@@ -502,22 +508,25 @@ gdk_wayland_subsurface_attach (GdkSubsurface *sub,
else
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Compositor failed to create wl_buffer for %dx%d texture, hiding subsurface %p",
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
"[%p] 🗙 Failed to create wl_buffer",
self);
}
}
else
{
if (dest_changed)
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"[%p] %s Moving texture (%dx%d) to %d %d %d %d",
self,
will_be_above
? (has_background ? "" : "")
: (has_background ? "" : ""),
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
self->dest.x, self->dest.y,
self->dest.width, self->dest.height);
buffer = NULL;
GDK_DISPLAY_DEBUG (gdk_surface_get_display (sub->parent), OFFLOAD,
"Moved %dx%d texture in subsurface %p to %d %d %d %d",
gdk_texture_get_width (texture),
gdk_texture_get_height (texture),
self,
self->dest.x, self->dest.y,
self->dest.width, self->dest.height);
result = TRUE;
}
}
@@ -654,7 +663,7 @@ gdk_wayland_subsurface_detach (GdkSubsurface *sub)
if (sub->parent == NULL)
{
g_warning ("Can't draw to destroyed subsurface %p", self);
g_warning ("Can't detach from destroyed subsurface %p", self);
return;
}
+37 -3
View File
@@ -821,6 +821,11 @@ gdk_wayland_surface_fractional_scale_preferred_scale_cb (void *data,
gdk_wayland_surface_update_size (surface,
surface->width, surface->height,
&GDK_FRACTIONAL_SCALE_INIT (scale));
GDK_DISPLAY_DEBUG (gdk_surface_get_display (surface), EVENTS,
"preferred fractional scale, surface %p scale %f",
surface,
gdk_fractional_scale_to_double (&GDK_FRACTIONAL_SCALE_INIT (scale)));
}
static const struct wp_fractional_scale_v1_listener fractional_scale_listener = {
@@ -837,8 +842,8 @@ surface_enter (void *data,
GdkDisplay *display = gdk_surface_get_display (surface);
GdkMonitor *monitor;
GDK_DISPLAY_DEBUG(gdk_surface_get_display (surface), EVENTS,
"surface enter, surface %p output %p", surface, output);
GDK_DISPLAY_DEBUG (gdk_surface_get_display (surface), EVENTS,
"surface enter, surface %p output %p", surface, output);
impl->display_server.outputs = g_slist_prepend (impl->display_server.outputs, output);
@@ -870,9 +875,38 @@ surface_leave (void *data,
gdk_surface_leave_monitor (surface, monitor);
}
static void
surface_preferred_buffer_scale (void *data,
struct wl_surface *wl_surface,
int32_t factor)
{
GdkSurface *surface = GDK_SURFACE (data);
GDK_DISPLAY_DEBUG (gdk_surface_get_display (surface), EVENTS,
"preferred buffer scale, surface %p scale %d",
surface, factor);
}
static void
surface_preferred_buffer_transform (void *data,
struct wl_surface *wl_surface,
uint32_t transform)
{
GdkSurface *surface = GDK_SURFACE (data);
const char *transform_name[] = {
"normal", "90", "180", "270", "flipped", "flipped-90", "flipped-180", "flipped-270"
};
GDK_DISPLAY_DEBUG (gdk_surface_get_display (surface), EVENTS,
"preferred buffer transform, surface %p transform %s",
surface, transform_name[transform]);
}
static const struct wl_surface_listener surface_listener = {
surface_enter,
surface_leave
surface_leave,
surface_preferred_buffer_scale,
surface_preferred_buffer_transform,
};
static void
+5
View File
@@ -313,6 +313,11 @@ gsk_gpu_upload_texture_op_try (GskGpuFrame *frame,
{
GEnumClass *enum_class = g_type_class_ref (GDK_TYPE_MEMORY_FORMAT);
if (!GDK_IS_MEMORY_TEXTURE (texture))
{
gdk_debug_message ("Unoptimized upload for %s", G_OBJECT_TYPE_NAME (texture));
}
if (gdk_texture_get_format (texture) != gsk_gpu_image_get_format (image))
{
gdk_debug_message ("Unsupported format %s, converting on CPU to %s",
+1 -1
View File
@@ -48,5 +48,5 @@ gsk_vulkan_descriptors_bind (GskVulkanDescriptors *self,
GskVulkanDescriptors *previous,
VkCommandBuffer vk_command_buffer)
{
return GSK_VULKAN_DESCRIPTORS_GET_CLASS (self)->bind (self, previous, vk_command_buffer);
GSK_VULKAN_DESCRIPTORS_GET_CLASS (self)->bind (self, previous, vk_command_buffer);
}
+6
View File
@@ -9,6 +9,7 @@
#include "gdk/gdkdisplayprivate.h"
#include "gdk/gdkvulkancontextprivate.h"
#include "gdk/gdkprofilerprivate.h"
struct _GskVulkanDevice
{
@@ -949,6 +950,7 @@ gsk_vulkan_device_get_vk_pipeline (GskVulkanDevice *self,
GdkDisplay *display;
const char *version_string;
char *vertex_shader_name, *fragment_shader_name;
G_GNUC_UNUSED gint64 begin_time = GDK_PROFILER_CURRENT_TIME;
cache_key = (PipelineCacheKey) {
.op_class = op_class,
@@ -1125,6 +1127,10 @@ gsk_vulkan_device_get_vk_pipeline (GskVulkanDevice *self,
NULL,
&pipeline);
gdk_profiler_end_markf (begin_time,
"Create Vulkan pipeline", "frag=%s vert=%s",
fragment_shader_name, vertex_shader_name);
g_free (fragment_shader_name);
g_free (vertex_shader_name);
+1 -1
View File
@@ -825,7 +825,7 @@ gsk_vulkan_image_new_for_dmabuf (GskVulkanDevice *device,
self->vk_tiling = VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT;
self->vk_format = vk_format;
self->vk_pipeline_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
self->vk_image_layout = VK_IMAGE_LAYOUT_UNDEFINED;
self->vk_image_layout = VK_IMAGE_LAYOUT_GENERAL;
self->vk_access = 0;
res = vkCreateImage (vk_device,
+10 -22
View File
@@ -130,18 +130,14 @@ find_texture_to_attach (GskOffload *self,
gsk_rect_equal (&bounds, &subsurface_node->bounds) &&
gdk_rgba_equal (gsk_color_node_get_color (child), &GDK_RGBA_BLACK))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Offloading subsurface %p with background",
subsurface);
*has_background = TRUE;
node = gsk_container_node_get_child (node, 1);
break;
}
}
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: too much content, container with %d children",
"[%p] 🗙 Too much content, container with %d children",
subsurface, gsk_container_node_get_n_children (node));
goto out;
@@ -153,7 +149,7 @@ find_texture_to_attach (GskOffload *self,
{
char *s = gsk_transform_to_string (t);
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: transform %s is not just scale/translate",
"[%p] 🗙 Transform %s is not just scale/translate",
subsurface, s);
g_free (s);
goto out;
@@ -181,7 +177,7 @@ find_texture_to_attach (GskOffload *self,
if (!gsk_rect_intersection (c, &clip, &clip))
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: empty clip", subsurface);
"[%p] 🗙 Empty clip", subsurface);
goto out;
}
}
@@ -231,7 +227,7 @@ find_texture_to_attach (GskOffload *self,
default:
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: Only textures supported but found %s",
"[%p] 🗙 Only textures supported (found %s)",
subsurface, g_type_name_from_instance ((GTypeInstance *) node));
goto out;
}
@@ -492,7 +488,7 @@ visit_node (GskOffload *self,
type != GSK_DEBUG_NODE)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't raise subsurface %p because a %s overlaps",
"[%p] Lowering because a %s overlaps",
info->subsurface,
g_type_name_from_instance ((GTypeInstance *) node));
info->can_raise = FALSE;
@@ -635,19 +631,19 @@ complex_clip:
if (info == NULL)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload: unknown subsurface %p",
"[%p] 🗙 Unknown subsurface",
subsurface);
}
else if (!self->current_clip->is_fully_contained)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: clipped",
"[%p] 🗙 Clipped",
subsurface);
}
else if (gsk_transform_get_category (transform) < GSK_TRANSFORM_CATEGORY_2D_AFFINE)
{
GDK_DISPLAY_DEBUG (gdk_surface_get_display (self->surface), OFFLOAD,
"Can't offload subsurface %p: non-affine transform",
"[%p] 🗙 Non-affine transform",
subsurface);
}
else
@@ -684,7 +680,6 @@ gsk_offload_new (GdkSurface *surface,
GskRenderNode *root,
cairo_region_t *diff)
{
GdkDisplay *display = gdk_surface_get_display (surface);
GskOffload *self;
self = g_new0 (GskOffload, 1);
@@ -752,17 +747,10 @@ gsk_offload_new (GdkSurface *surface,
{
info->is_offloaded = FALSE;
if (info->was_offloaded)
{
GDK_DISPLAY_DEBUG (display, OFFLOAD, "Hiding subsurface %p", info->subsurface);
gdk_subsurface_detach (info->subsurface);
}
gdk_subsurface_detach (info->subsurface);
}
if (info->is_offloaded && gdk_subsurface_is_above_parent (info->subsurface))
{
GDK_DISPLAY_DEBUG (display, OFFLOAD, "Raising subsurface %p", info->subsurface);
info->is_above = TRUE;
}
info->is_above = info->is_offloaded && gdk_subsurface_is_above_parent (info->subsurface);
gdk_subsurface_get_bounds (info->subsurface, &bounds);
+1 -1
View File
@@ -1020,7 +1020,7 @@ gtk_css_tokenizer_read_ident_like (GtkCssTokenizer *tokenizer,
{
gtk_css_tokenizer_read_name (tokenizer);
if (*tokenizer->data == '(')
if (gtk_css_tokenizer_remaining (tokenizer) > 0 && *tokenizer->data == '(')
{
gtk_css_tokenizer_consume_ascii (tokenizer);
if (g_ascii_strcasecmp (tokenizer->name_buffer->str, "url") == 0)
+3 -1
View File
@@ -990,11 +990,13 @@ GtkActionMuxer *
gtk_application_get_parent_muxer_for_window (GtkWindow *window)
{
GtkApplication *application = gtk_window_get_application (window);
GtkApplicationPrivate *priv = gtk_application_get_instance_private (application);
GtkApplicationPrivate *priv;
if (!application)
return NULL;
priv = gtk_application_get_instance_private (application);
return priv->muxer;
}
+4 -3
View File
@@ -1055,6 +1055,7 @@ gtk_at_context_get_accessible_relation (GtkATContext *self,
static guint8 naming[] = {
[GTK_ACCESSIBLE_ROLE_ALERT] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_ALERT_DIALOG] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_APPLICATION] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_ARTICLE] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_BANNER] = GTK_ACCESSIBLE_NAME_PROHIBITED,
[GTK_ACCESSIBLE_ROLE_BLOCK_QUOTE] = NAME_FROM_AUTHOR,
@@ -1099,6 +1100,7 @@ static guint8 naming[] = {
[GTK_ACCESSIBLE_ROLE_NONE] = GTK_ACCESSIBLE_NAME_PROHIBITED,
[GTK_ACCESSIBLE_ROLE_NOTE] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_OPTION] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_PARAGRAPH] = GTK_ACCESSIBLE_NAME_PROHIBITED,
[GTK_ACCESSIBLE_ROLE_PRESENTATION] = GTK_ACCESSIBLE_NAME_PROHIBITED,
[GTK_ACCESSIBLE_ROLE_PROGRESS_BAR] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_RADIO] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
@@ -1124,9 +1126,11 @@ static guint8 naming[] = {
[GTK_ACCESSIBLE_ROLE_TABLE] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_TAB_LIST] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_TAB_PANEL] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_TERMINAL] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_TEXT_BOX] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_TIME] = GTK_ACCESSIBLE_NAME_PROHIBITED,
[GTK_ACCESSIBLE_ROLE_TIMER] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_TOOLBAR] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
[GTK_ACCESSIBLE_ROLE_TOOLTIP] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
[GTK_ACCESSIBLE_ROLE_TREE] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
@@ -1134,9 +1138,6 @@ static guint8 naming[] = {
[GTK_ACCESSIBLE_ROLE_TREE_ITEM] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_WIDGET] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
[GTK_ACCESSIBLE_ROLE_WINDOW] = NAME_FROM_AUTHOR,
[GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_APPLICATION] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
[GTK_ACCESSIBLE_ROLE_PARAGRAPH] = GTK_ACCESSIBLE_NAME_PROHIBITED,
};
/* < private >
+3 -1
View File
@@ -1006,7 +1006,7 @@ gtk_check_button_set_group (GtkCheckButton *self,
GtkCheckButton *group)
{
GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (self);
GtkCheckButtonPrivate *group_priv = gtk_check_button_get_instance_private (group);
GtkCheckButtonPrivate *group_priv;
g_return_if_fail (GTK_IS_CHECK_BUTTON (self));
g_return_if_fail (self != group);
@@ -1037,6 +1037,8 @@ gtk_check_button_set_group (GtkCheckButton *self,
if (priv->group_next == group)
return;
group_priv = gtk_check_button_get_instance_private (group);
priv->group_prev = NULL;
if (group_priv->group_prev)
{
+61 -11
View File
@@ -541,9 +541,9 @@ match_any (const GtkCssSelector *selector,
#undef GTK_CSS_CHANGE_ANY
#define GTK_CSS_CHANGE_ANY 0
DEFINE_SIMPLE_SELECTOR(any, ANY, print_any, match_any,
gtk_css_selector_default_hash_one, gtk_css_selector_default_compare_one,
FALSE, FALSE, FALSE, TRUE)
DEFINE_SIMPLE_SELECTOR (any, ANY, print_any, match_any,
gtk_css_selector_default_hash_one, gtk_css_selector_default_compare_one,
FALSE, FALSE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_ANY
/* NAME */
@@ -575,7 +575,7 @@ comp_name (const GtkCssSelector *a,
return a->name.name - b->name.name;
}
DEFINE_SIMPLE_SELECTOR(name, NAME, print_name, match_name, hash_name, comp_name, FALSE, FALSE, TRUE, FALSE)
DEFINE_SIMPLE_SELECTOR (name, NAME, print_name, match_name, hash_name, comp_name, FALSE, FALSE, TRUE, FALSE)
/* CLASS */
@@ -612,7 +612,7 @@ comp_class (const GtkCssSelector *a,
return 0;
}
DEFINE_SIMPLE_SELECTOR(class, CLASS, print_class, match_class, hash_class, comp_class, FALSE, TRUE, FALSE, FALSE)
DEFINE_SIMPLE_SELECTOR (class, CLASS, print_class, match_class, hash_class, comp_class, FALSE, TRUE, FALSE, FALSE)
/* ID */
@@ -644,7 +644,7 @@ comp_id (const GtkCssSelector *a,
return a->id.name - b->id.name;
}
DEFINE_SIMPLE_SELECTOR(id, ID, print_id, match_id, hash_id, comp_id, TRUE, FALSE, FALSE, FALSE)
DEFINE_SIMPLE_SELECTOR (id, ID, print_id, match_id, hash_id, comp_id, TRUE, FALSE, FALSE, FALSE)
/* PSEUDOCLASS FOR STATE */
static void
@@ -700,8 +700,8 @@ change_pseudoclass_state (const GtkCssSelector *selector)
}
#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,
DEFINE_SIMPLE_SELECTOR (pseudoclass_state, PSEUDOCLASS_STATE, print_pseudoclass_state,
match_pseudoclass_state, hash_pseudoclass_state, comp_pseudoclass_state,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_STATE
@@ -888,10 +888,52 @@ change_pseudoclass_position (const GtkCssSelector *selector)
}
#define GTK_CSS_CHANGE_PSEUDOCLASS_POSITION change_pseudoclass_position(selector)
DEFINE_SIMPLE_SELECTOR(pseudoclass_position, PSEUDOCLASS_POSITION, print_pseudoclass_position,
match_pseudoclass_position, hash_pseudoclass_position, comp_pseudoclass_position,
FALSE, TRUE, FALSE, TRUE)
DEFINE_SIMPLE_SELECTOR (pseudoclass_position, PSEUDOCLASS_POSITION, print_pseudoclass_position,
match_pseudoclass_position, hash_pseudoclass_position, comp_pseudoclass_position,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_POSITION
/* PSEUDOCLASS FOR ROOT */
static void
print_pseudoclass_root (const GtkCssSelector *selector,
GString *string)
{
g_string_append (string, ":root");
}
static gboolean
match_pseudoclass_root (const GtkCssSelector *selector,
GtkCssNode *node)
{
return gtk_css_node_get_parent (node) == NULL;
}
static guint
hash_pseudoclass_root (const GtkCssSelector *selector)
{
return GPOINTER_TO_UINT (selector->class);
}
static int
comp_pseudoclass_root (const GtkCssSelector *a,
const GtkCssSelector *b)
{
return 0;
}
static GtkCssChange
change_pseudoclass_root (const GtkCssSelector *selector)
{
return 0;
}
#define GTK_CSS_CHANGE_PSEUDOCLASS_ROOT change_pseudoclass_root(selector)
DEFINE_SIMPLE_SELECTOR (pseudoclass_root, PSEUDOCLASS_ROOT, print_pseudoclass_root,
match_pseudoclass_root, hash_pseudoclass_root, comp_pseudoclass_root,
FALSE, TRUE, FALSE, TRUE)
#undef GTK_CSS_CHANGE_PSEUDOCLASS_ROOT
/* API */
static guint
@@ -1267,6 +1309,7 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
PositionType position_type;
int position_a;
int position_b;
gboolean is_root;
} pseudo_classes[] = {
{ "first-child", 0, POSITION_FORWARD, 0, 1 },
{ "last-child", 0, POSITION_BACKWARD, 0, 1 },
@@ -1283,6 +1326,7 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
{ "checked", GTK_STATE_FLAG_CHECKED, },
{ "focus-visible", GTK_STATE_FLAG_FOCUS_VISIBLE, },
{ "focus-within", GTK_STATE_FLAG_FOCUS_WITHIN, },
{ "root", 0, 0, 0, 0, TRUE },
};
guint i;
@@ -1297,6 +1341,12 @@ gtk_css_selector_parse_selector_pseudo_class (GtkCssParser *parser,
selector);
selector->state.state = pseudo_classes[i].state_flag;
}
else if (pseudo_classes[i].is_root)
{
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_ROOT
: &GTK_CSS_SELECTOR_PSEUDOCLASS_ROOT,
selector);
}
else
{
selector = gtk_css_selector_new (negate ? &GTK_CSS_SELECTOR_NOT_PSEUDOCLASS_POSITION
+6 -6
View File
@@ -258,9 +258,9 @@ gtk_drop_target_async_handle_event (GtkEventController *controller,
static void
gtk_drop_target_async_handle_crossing (GtkEventController *controller,
const GtkCrossingData *crossing,
double x,
double y)
const GtkCrossingData *crossing,
double x,
double y)
{
GtkDropTargetAsync *self = GTK_DROP_TARGET_ASYNC (controller);
GtkWidget *widget = gtk_event_controller_get_widget (controller);
@@ -340,9 +340,9 @@ gtk_drop_target_async_set_property (GObject *object,
static void
gtk_drop_target_async_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GtkDropTargetAsync *self = GTK_DROP_TARGET_ASYNC (object);
+2 -1
View File
@@ -226,7 +226,8 @@ gtk_graphics_offload_snapshot (GtkWidget *widget,
gtk_widget_get_width (widget),
gtk_widget_get_height (widget)));
gtk_widget_snapshot_child (widget, self->child, snapshot);
if (self->child)
gtk_widget_snapshot_child (widget, self->child, snapshot);
if (self->subsurface)
gtk_snapshot_pop (snapshot);
+1 -1
View File
@@ -637,7 +637,7 @@ resource_is_pixdata (const char *resource_path)
if (data_size < sizeof(guint32))
goto out;
magic = (stream[0] << 24) + (stream[1] << 16) + (stream[2] << 8) + stream[3];
magic = (((guint32)(stream[0])) << 24) | (((guint32)(stream[1])) << 16) | (((guint32)(stream[2])) << 8) | (guint32)(stream[3]);
if (magic == GDK_PIXBUF_MAGIC_NUMBER)
ret = TRUE;
+1 -1
View File
@@ -185,7 +185,7 @@ quartz_filter_keypress (GtkIMContext *context,
keyval = gdk_key_event_get_keyval (event);
keycode = gdk_key_event_get_keycode (event);
NSEvent *nsevent = _gdk_macos_display_get_nsevent ((GdkEvent *)event);
NSEvent *nsevent = _gdk_macos_display_get_matching_nsevent ((GdkEvent *)event);
if (!nsevent)
{
+24 -2
View File
@@ -2113,6 +2113,28 @@ gtk_label_unroot (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_label_parent_class)->unroot (widget);
}
static void
launch_done (GObject *source,
GAsyncResult *result,
gpointer data)
{
GError *error = NULL;
gboolean success;
if (GTK_IS_FILE_LAUNCHER (source))
success = gtk_file_launcher_launch_finish (GTK_FILE_LAUNCHER (source), result, &error);
else if (GTK_IS_URI_LAUNCHER (source))
success = gtk_uri_launcher_launch_finish (GTK_URI_LAUNCHER (source), result, &error);
else
g_assert_not_reached ();
if (!success)
{
g_warning ("Failed to launch handler: %s", error->message);
g_error_free (error);
}
}
static gboolean
gtk_label_activate_link (GtkLabel *self,
const char *uri)
@@ -2132,7 +2154,7 @@ gtk_label_activate_link (GtkLabel *self,
file = g_file_new_for_uri (uri);
launcher = gtk_file_launcher_new (file);
gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL);
gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL);
g_object_unref (launcher);
g_object_unref (file);
}
@@ -2141,7 +2163,7 @@ gtk_label_activate_link (GtkLabel *self,
GtkUriLauncher *launcher;
launcher = gtk_uri_launcher_new (uri);
gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL);
gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL);
g_object_unref (launcher);
}
+24 -2
View File
@@ -480,6 +480,28 @@ gtk_link_button_pressed_cb (GtkGestureClick *gesture,
}
}
static void
launch_done (GObject *source,
GAsyncResult *result,
gpointer data)
{
GError *error = NULL;
gboolean success;
if (GTK_IS_FILE_LAUNCHER (source))
success = gtk_file_launcher_launch_finish (GTK_FILE_LAUNCHER (source), result, &error);
else if (GTK_IS_URI_LAUNCHER (source))
success = gtk_uri_launcher_launch_finish (GTK_URI_LAUNCHER (source), result, &error);
else
g_assert_not_reached ();
if (!success)
{
g_warning ("Failed to launch handler: %s", error->message);
g_error_free (error);
}
}
static gboolean
gtk_link_button_activate_link (GtkLinkButton *link_button)
{
@@ -496,7 +518,7 @@ gtk_link_button_activate_link (GtkLinkButton *link_button)
launcher = gtk_file_launcher_new (file);
gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL);
gtk_file_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL);
g_object_unref (launcher);
g_object_unref (file);
@@ -505,7 +527,7 @@ gtk_link_button_activate_link (GtkLinkButton *link_button)
{
GtkUriLauncher *launcher = gtk_uri_launcher_new (link_button->uri);
gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, NULL, NULL);
gtk_uri_launcher_launch (launcher, GTK_WINDOW (toplevel), NULL, launch_done, NULL);
g_object_unref (launcher);
}
+2 -2
View File
@@ -586,7 +586,7 @@ gtk_list_factory_widget_set_activatable (GtkListFactoryWidget *self,
else
gtk_widget_remove_css_class (GTK_WIDGET (self), "activatable");
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SINGLE_CLICK_ACTIVATE]);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ACTIVATABLE]);
}
gboolean
@@ -608,7 +608,7 @@ gtk_list_factory_widget_set_selectable (GtkListFactoryWidget *self,
priv->selectable = selectable;
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SINGLE_CLICK_ACTIVATE]);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SELECTABLE]);
}
gboolean
+3 -1
View File
@@ -511,7 +511,7 @@ gtk_toggle_button_set_group (GtkToggleButton *toggle_button,
GtkToggleButton *group)
{
GtkToggleButtonPrivate *priv = gtk_toggle_button_get_instance_private (toggle_button);
GtkToggleButtonPrivate *group_priv = gtk_toggle_button_get_instance_private (group);
GtkToggleButtonPrivate *group_priv;
g_return_if_fail (GTK_IS_TOGGLE_BUTTON (toggle_button));
g_return_if_fail (toggle_button != group);
@@ -538,6 +538,8 @@ gtk_toggle_button_set_group (GtkToggleButton *toggle_button,
if (priv->group_next == group)
return;
group_priv = gtk_toggle_button_get_instance_private (group);
priv->group_prev = NULL;
if (group_priv->group_prev)
{
+10 -9
View File
@@ -5835,19 +5835,20 @@ gtk_window_is_active (GtkWindow *window)
GtkWindowGroup *
gtk_window_get_group (GtkWindow *window)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
static GtkWindowGroup *default_group = NULL;
if (window && priv->group)
return priv->group;
else
if (window)
{
static GtkWindowGroup *default_group = NULL;
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
if (!default_group)
default_group = gtk_window_group_new ();
return default_group;
if (priv->group)
return priv->group;
}
if (!default_group)
default_group = gtk_window_group_new ();
return default_group;
}
/**
+1 -1
View File
@@ -936,7 +936,7 @@ property_editor (GObject *object,
G_PARAM_SPEC_INT (spec)->minimum,
G_PARAM_SPEC_INT (spec)->maximum,
1,
MAX ((G_PARAM_SPEC_INT (spec)->maximum - G_PARAM_SPEC_INT (spec)->minimum) / 10, 1),
MAX ((((double) G_PARAM_SPEC_INT (spec)->maximum - (double)G_PARAM_SPEC_INT (spec)->minimum)) / 10, 1),
0.0);
prop_edit = gtk_spin_button_new (adj, 1.0, 0);
+5 -3
View File
@@ -10513,7 +10513,8 @@ bool ra_overwrite(const roaring_array_t *source, roaring_array_t *dest,
}
}
dest->size = source->size;
memcpy(dest->keys, source->keys, dest->size * sizeof(uint16_t));
if (dest->size > 0)
memcpy(dest->keys, source->keys, dest->size * sizeof(uint16_t));
// we go through the containers, turning them into shared containers...
if (copy_on_write) {
for (int32_t i = 0; i < dest->size; ++i) {
@@ -10526,8 +10527,9 @@ bool ra_overwrite(const roaring_array_t *source, roaring_array_t *dest,
memcpy(dest->typecodes, source->typecodes,
dest->size * sizeof(uint8_t));
} else {
memcpy(dest->typecodes, source->typecodes,
dest->size * sizeof(uint8_t));
if (dest->size > 0)
memcpy(dest->typecodes, source->typecodes,
dest->size * sizeof(uint8_t));
for (int32_t i = 0; i < dest->size; i++) {
dest->containers[i] =
container_clone(source->containers[i], source->typecodes[i]);
-2
View File
@@ -3,8 +3,6 @@ leak:xdg_mime_init
leak:libfontconfig.so
leak:libEGL_mesa.so
leak:iris_dri.so
leak:libglib-2.0.so
leak:libgio-2.0.so
leak:libcairo.so
leak:libpixman-1.so
leak:librsvg-2.so
+1 -1
View File
@@ -1,5 +1,5 @@
project('gtk', 'c',
version: '4.15.0',
version: '4.15.1',
default_options: [
'buildtype=debugoptimized',
'warning_level=1',
+9 -4
View File
@@ -72,14 +72,17 @@ GST_DEBUG_CATEGORY (gtk_debug_gst_sink);
#define NOGL_CAPS GST_VIDEO_CAPS_MAKE (FORMATS)
#ifdef HAVE_GSTREAMER_DRM
# define GST_VIDEO_DMA_DRM_CAPS_MAKE_STR GST_VIDEO_DMA_DRM_CAPS_MAKE "; "
#else
# define GST_VIDEO_DMA_DRM_CAPS_MAKE_STR
#endif
static GstStaticPadTemplate gtk_gst_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (
#ifdef HAVE_GSTREAMER_DRM
GST_VIDEO_DMA_DRM_CAPS_MAKE "; "
#endif
GST_STATIC_CAPS (GST_VIDEO_DMA_DRM_CAPS_MAKE_STR
"video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), "
"format = (string) RGBA, "
"width = " GST_VIDEO_SIZE_RANGE ", "
@@ -89,6 +92,8 @@ GST_STATIC_PAD_TEMPLATE ("sink",
"; " NOGL_CAPS)
);
#undef GST_VIDEO_DMA_DRM_CAPS_MAKE_STR
G_DEFINE_TYPE_WITH_CODE (GtkGstSink, gtk_gst_sink,
GST_TYPE_VIDEO_SINK,
GST_DEBUG_CATEGORY_INIT (gtk_debug_gst_sink,
+1
View File
@@ -141,6 +141,7 @@ testsuite/css/style/font.ui
testsuite/css/style/inherit.ui
testsuite/css/style/label.ui
testsuite/css/style/nth-child.ui
testsuite/css/style/root.ui
testsuite/gtk/filechooser.c
testsuite/gtk/focus-chain/widget-factory2.ui
testsuite/gtk/focus-chain/widget-factory3.ui
+178 -146
View File
@@ -14,8 +14,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-03-09 18:21+0000\n"
"PO-Revision-Date: 2024-03-10 23:13+0900\n"
"POT-Creation-Date: 2024-04-09 09:56+0000\n"
"PO-Revision-Date: 2024-04-09 23:28+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: Gnome Korea <gnome-kr@googlegroups.com>\n"
"Language: ko\n"
@@ -38,7 +38,7 @@ msgstr "이 클립보드는 데이터를 저장할 수 없습니다."
msgid "Cannot read from empty clipboard."
msgstr "빈 클립보드에서는 읽을 수 없습니다."
#: gdk/gdkclipboard.c:318 gdk/gdkclipboard.c:1136 gdk/gdkdrag.c:618
#: gdk/gdkclipboard.c:318 gdk/gdkclipboard.c:1136 gdk/gdkdrag.c:606
msgid "No compatible formats to transfer clipboard contents."
msgstr "클립보드 내용을 전달할 호환 형식이 없습니다."
@@ -53,11 +53,11 @@ msgstr "내용을 “%s”(으)로 제공할 수 없습니다"
msgid "Cannot provide contents as %s"
msgstr "내용을 %s(으)로 제공할 수 없습니다"
#: gdk/gdkdisplay.c:176 gdk/gdkglcontext.c:459
#: gdk/gdkdisplay.c:176 gdk/gdkglcontext.c:464
msgid "The current backend does not support OpenGL"
msgstr "현재 백엔드가 OpenGL을 지원하지 않습니다"
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1601
#: gdk/gdkdisplay.c:1315 gdk/gdkvulkancontext.c:1600
msgid "Vulkan support disabled via GDK_DEBUG"
msgstr "GDK_DEBUG를 통해 Vulkan 기능을 사용하지 않습니다"
@@ -65,45 +65,45 @@ msgstr "GDK_DEBUG를 통해 Vulkan 기능을 사용하지 않습니다"
msgid "GL support disabled via GDK_DEBUG"
msgstr "GDK_DEBUG를 통해 GL 기능을 사용하지 않습니다"
#: gdk/gdkdisplay.c:1665
#: gdk/gdkdisplay.c:1675
msgid "No EGL configuration available"
msgstr "사용할 수 있는 EGL 설정이 없습니다"
#: gdk/gdkdisplay.c:1673
#: gdk/gdkdisplay.c:1683
msgid "Failed to get EGL configurations"
msgstr "EGL 설정을 가져오는데 실패했습니다"
#: gdk/gdkdisplay.c:1703
#: gdk/gdkdisplay.c:1713
msgid "No EGL configuration with required features found"
msgstr "필요한 기능이 들어 있는 EGL 설정이 없습니다"
#: gdk/gdkdisplay.c:1710
#: gdk/gdkdisplay.c:1720
msgid "No perfect EGL configuration found"
msgstr "완전한 EGL 설정이 없습니다"
#: gdk/gdkdisplay.c:1752
#: gdk/gdkdisplay.c:1762
#, c-format
msgid "EGL implementation is missing extension %s"
msgid_plural "EGL implementation is missing %2$d extensions: %1$s"
msgstr[0] "EGL 구현에 %2$d개 확장이 빠졌습니다: %1$s"
#: gdk/gdkdisplay.c:1801
#: gdk/gdkdisplay.c:1811
msgid "libEGL not available in this sandbox"
msgstr "이 샌드박스에서 libEGL을 사용할 수 없습니다"
#: gdk/gdkdisplay.c:1802
#: gdk/gdkdisplay.c:1812
msgid "libEGL not available"
msgstr "libEGL을 사용할 수 없습니다"
#: gdk/gdkdisplay.c:1812
#: gdk/gdkdisplay.c:1822
msgid "Failed to create EGL display"
msgstr "EGL 디스플레이를 만들 수 없습니다"
#: gdk/gdkdisplay.c:1821
#: gdk/gdkdisplay.c:1831
msgid "Could not initialize EGL display"
msgstr "EGL 디스플레이를 초기화할 수 없습니다"
#: gdk/gdkdisplay.c:1831
#: gdk/gdkdisplay.c:1841
#, c-format
msgid "EGL version %d.%d is too old. GTK requires %d.%d"
msgstr "EGL %d.%d 버전은 너무 오래 되었습니다. GTK는 %d.%d 버전이 필요합니다."
@@ -116,32 +116,32 @@ msgstr "다른 프로그램에서 드래그앤드롭은 지원하지 않습니
msgid "No compatible formats to transfer contents."
msgstr "내용을 전달할 호환 형식이 없습니다."
#: gdk/gdkglcontext.c:419 gdk/x11/gdkglcontext-glx.c:645
#: gdk/gdkglcontext.c:424 gdk/x11/gdkglcontext-glx.c:645
msgid "No GL API allowed."
msgstr "GL API를 허용하지 않습니다."
#: gdk/gdkglcontext.c:442 gdk/win32/gdkglcontext-win32-wgl.c:395
#: gdk/gdkglcontext.c:447 gdk/win32/gdkglcontext-win32-wgl.c:395
#: gdk/win32/gdkglcontext-win32-wgl.c:538
#: gdk/win32/gdkglcontext-win32-wgl.c:582 gdk/x11/gdkglcontext-glx.c:691
msgid "Unable to create a GL context"
msgstr "GL 컨텍스트를 만들 수 없습니다"
#: gdk/gdkglcontext.c:1304
#: gdk/gdkglcontext.c:1310
msgid "OpenGL ES disabled via GDK_DEBUG"
msgstr "GDK_DEBUG를 통해 OpenGL ES를 사용하지 않습니다"
#: gdk/gdkglcontext.c:1316
#: gdk/gdkglcontext.c:1322
msgid "OpenGL disabled via GDK_DEBUG"
msgstr "GDK_DEBUG를 통해 OpenGL을 사용하지 않습니다"
#: gdk/gdkglcontext.c:1327
#: gdk/gdkglcontext.c:1333
#, c-format
msgid "Application does not support %s API"
msgstr "프로그램이 %s API를 지원하지 않습니다"
#. translators: This is about OpenGL backend names, like
#. * "Trying to use X11 GLX, but EGL is already in use"
#: gdk/gdkglcontext.c:2113
#: gdk/gdkglcontext.c:2123
#, c-format
msgid "Trying to use %s, but %s is already in use"
msgstr "%s 백엔드 사용을 시도했지만, 이미 %s 백엔드를 사용 중입니다"
@@ -1127,7 +1127,7 @@ msgid "Pick a Font"
msgstr "글꼴 고르기"
#: gtk/deprecated/gtkfontbutton.c:600 gtk/gtkfilechooserwidget.c:3815
#: gtk/gtkfontdialogbutton.c:126 gtk/inspector/visual.ui:169
#: gtk/gtkfontdialogbutton.c:126 gtk/inspector/visual.ui:285
msgid "Font"
msgstr "글꼴"
@@ -2391,7 +2391,7 @@ msgid "If you delete an item, it will be permanently lost."
msgstr "삭제하면 영구히 잃어버리게 됩니다."
#: gtk/gtkfilechooserwidget.c:1188 gtk/gtkfilechooserwidget.c:1786
#: gtk/gtklabel.c:5711 gtk/gtktext.c:6193 gtk/gtktextview.c:9079
#: gtk/gtklabel.c:5712 gtk/gtktext.c:6194 gtk/gtktextview.c:9099
msgid "_Delete"
msgstr "삭제(_D)"
@@ -2731,31 +2731,31 @@ msgstr "닫기"
msgid "Close the infobar"
msgstr "정보 창을 닫습니다"
#: gtk/gtklabel.c:5708 gtk/gtktext.c:6181 gtk/gtktextview.c:9067
#: gtk/gtklabel.c:5709 gtk/gtktext.c:6182 gtk/gtktextview.c:9087
msgid "Cu_t"
msgstr "잘라내기(_T)"
#: gtk/gtklabel.c:5709 gtk/gtktext.c:6185 gtk/gtktextview.c:9071
#: gtk/gtklabel.c:5710 gtk/gtktext.c:6186 gtk/gtktextview.c:9091
msgid "_Copy"
msgstr "복사(_C)"
#: gtk/gtklabel.c:5710 gtk/gtktext.c:6189 gtk/gtktextview.c:9075
#: gtk/gtklabel.c:5711 gtk/gtktext.c:6190 gtk/gtktextview.c:9095
msgid "_Paste"
msgstr "붙여넣기(_P)"
#: gtk/gtklabel.c:5716 gtk/gtktext.c:6202 gtk/gtktextview.c:9100
#: gtk/gtklabel.c:5717 gtk/gtktext.c:6203 gtk/gtktextview.c:9120
msgid "Select _All"
msgstr "모두 선택(_A)"
#: gtk/gtklabel.c:5721
#: gtk/gtklabel.c:5722
msgid "_Open Link"
msgstr "링크 열기(_O)"
#: gtk/gtklabel.c:5725
#: gtk/gtklabel.c:5726
msgid "Copy _Link Address"
msgstr "링크 주소 복사(_L)"
#: gtk/gtklabel.c:5769 gtk/gtktext.c:2724 gtk/gtktextview.c:9149
#: gtk/gtklabel.c:5770 gtk/gtktext.c:2723 gtk/gtktextview.c:9169
msgid "Context menu"
msgstr "컨텍스트 메뉴"
@@ -3450,7 +3450,7 @@ msgstr "용지 부족"
#. Translators: this is a printer status.
#: gtk/print/gtkprintoperation-win32.c:640
#: modules/printbackends/gtkprintbackendcpdb.c:1528
#: modules/printbackends/gtkprintbackendcpdb.c:1533
#: modules/printbackends/gtkprintbackendcups.c:2639
msgid "Paused"
msgstr "일시 정지"
@@ -3522,42 +3522,42 @@ msgstr "프린터 정보를 받는 중입니다…"
#. * multiple pages on a sheet when printing
#.
#: gtk/print/gtkprintunixdialog.c:2753
#: modules/printbackends/gtkprintbackendcups.c:5645
#: modules/printbackends/gtkprintbackendcups.c:5677
msgid "Left to right, top to bottom"
msgstr "왼쪽에서 오른쪽, 위에서 아래"
#: gtk/print/gtkprintunixdialog.c:2753
#: modules/printbackends/gtkprintbackendcups.c:5645
#: modules/printbackends/gtkprintbackendcups.c:5677
msgid "Left to right, bottom to top"
msgstr "왼쪽에서 오른쪽, 아래에서 위"
#: gtk/print/gtkprintunixdialog.c:2754
#: modules/printbackends/gtkprintbackendcups.c:5646
#: modules/printbackends/gtkprintbackendcups.c:5678
msgid "Right to left, top to bottom"
msgstr "오른쪽에서 왼쪽, 위에서 아래"
#: gtk/print/gtkprintunixdialog.c:2754
#: modules/printbackends/gtkprintbackendcups.c:5646
#: modules/printbackends/gtkprintbackendcups.c:5678
msgid "Right to left, bottom to top"
msgstr "오른쪽에서 왼쪽, 아래에서 위"
#: gtk/print/gtkprintunixdialog.c:2755
#: modules/printbackends/gtkprintbackendcups.c:5647
#: modules/printbackends/gtkprintbackendcups.c:5679
msgid "Top to bottom, left to right"
msgstr "위에서 아래, 왼쪽에서 오른쪽"
#: gtk/print/gtkprintunixdialog.c:2755
#: modules/printbackends/gtkprintbackendcups.c:5647
#: modules/printbackends/gtkprintbackendcups.c:5679
msgid "Top to bottom, right to left"
msgstr "위에서 아래, 오른쪽에서 왼쪽"
#: gtk/print/gtkprintunixdialog.c:2756
#: modules/printbackends/gtkprintbackendcups.c:5648
#: modules/printbackends/gtkprintbackendcups.c:5680
msgid "Bottom to top, left to right"
msgstr "아래에서 위, 왼쪽에서 오른쪽"
#: gtk/print/gtkprintunixdialog.c:2756
#: modules/printbackends/gtkprintbackendcups.c:5648
#: modules/printbackends/gtkprintbackendcups.c:5680
msgid "Bottom to top, right to left"
msgstr "아래에서 위, 오른쪽에서 왼쪽"
@@ -3696,15 +3696,15 @@ msgid "Sidebar"
msgstr "가장자리창"
# 키보드에 써 있는 단어이므로 번역하지 않는다
#: gtk/gtktext.c:6207 gtk/gtktextview.c:9105
#: gtk/gtktext.c:6208 gtk/gtktextview.c:9125
msgid "Insert _Emoji"
msgstr "에모지 입력(_E)"
#: gtk/gtktextview.c:9087
#: gtk/gtktextview.c:9107
msgid "_Undo"
msgstr "입력 취소(_U)"
#: gtk/gtktextview.c:9091
#: gtk/gtktextview.c:9111
msgid "_Redo"
msgstr "다시 실행(_R)"
@@ -3932,7 +3932,7 @@ msgctxt "Vulkan version"
msgid "None"
msgstr "없음"
#: gtk/inspector/general.c:923
#: gtk/inspector/general.c:924
msgid "IM Context is hardcoded by GTK_IM_MODULE"
msgstr "IM 컨텍스트가 GTK_IM_MODULE에 따라 하드 코딩되어 있습니다"
@@ -4119,7 +4119,7 @@ msgstr "프레임 수"
msgid "Frame Rate"
msgstr "초당 프레임"
#: gtk/inspector/misc-info.ui:527
#: gtk/inspector/misc-info.ui:527 gtk/inspector/visual.ui:315
msgid "Scale"
msgstr "크기 조정"
@@ -4381,7 +4381,7 @@ msgstr "계층 구조"
msgid "Implements"
msgstr "구현"
#: gtk/inspector/visual.c:672 gtk/inspector/visual.c:691
#: gtk/inspector/visual.c:765 gtk/inspector/visual.c:784
msgid "Theme is hardcoded by GTK_THEME"
msgstr "테마가 GTK_THEME으로 하드 코딩되어 있습니다"
@@ -4405,85 +4405,113 @@ msgstr "커서 크기"
msgid "Icon Theme"
msgstr "아이콘 테마"
#: gtk/inspector/visual.ui:199
msgid "Font Scale"
msgstr "글꼴 크기 조정"
#: gtk/inspector/visual.ui:244
#: gtk/inspector/visual.ui:169
msgid "Text Direction"
msgstr "글자 방향"
#: gtk/inspector/visual.ui:259
#: gtk/inspector/visual.ui:184
msgid "Left-to-Right"
msgstr "왼쪽에서 오른쪽으로"
#: gtk/inspector/visual.ui:260
#: gtk/inspector/visual.ui:185
msgid "Right-to-Left"
msgstr "오른쪽에서 왼쪽으로"
#: gtk/inspector/visual.ui:277
#: gtk/inspector/visual.ui:202
msgid "Animations"
msgstr "애니메이션"
#: gtk/inspector/visual.ui:302
#: gtk/inspector/visual.ui:227
msgid "Slowdown"
msgstr "감속"
#: gtk/inspector/visual.ui:356
#: gtk/inspector/visual.ui:362
msgid "Antialiasing"
msgstr "안티앨리어싱"
#: gtk/inspector/visual.ui:387
msgid "Hinting"
msgstr "힌팅"
#: gtk/inspector/visual.ui:402
msgctxt "Font hinting style"
msgid "None"
msgstr "없음"
#: gtk/inspector/visual.ui:403
msgctxt "Font hinting style"
msgid "Slight"
msgstr "약간"
#: gtk/inspector/visual.ui:404
msgctxt "Font hinting style"
msgid "Medium"
msgstr "중간"
#: gtk/inspector/visual.ui:405
msgctxt "Font hinting style"
msgid "Full"
msgstr "최대한"
#: gtk/inspector/visual.ui:422
msgid "Metrics Hinting"
msgstr "메트릭 힌팅"
#: gtk/inspector/visual.ui:457
msgid "Show Framerate"
msgstr "프레임 수 표시"
#: gtk/inspector/visual.ui:381
#: gtk/inspector/visual.ui:482
msgid "Show Graphic Updates"
msgstr "그래픽 업데이트 표시"
#: gtk/inspector/visual.ui:401
#: gtk/inspector/visual.ui:502
msgid ""
"Tints all the places where the current renderer uses Cairo instead of the "
"GPU."
msgstr "현재 렌더러가 GPU가 아닌 카이로를 사용하는 모든 부분에 색을 넣습니다."
#: gtk/inspector/visual.ui:407
#: gtk/inspector/visual.ui:508
msgid "Show Cairo Rendering"
msgstr "카이로 렌더링 표시"
#: gtk/inspector/visual.ui:432
#: gtk/inspector/visual.ui:533
msgid "Show Baselines"
msgstr "베이스라인 표시"
#: gtk/inspector/visual.ui:460
#: gtk/inspector/visual.ui:561
msgid "Show Layout Borders"
msgstr "레이아웃 경계 표시"
#: gtk/inspector/visual.ui:517
#: gtk/inspector/visual.ui:618
msgid "CSS Padding"
msgstr "CSS 채움"
#: gtk/inspector/visual.ui:527
#: gtk/inspector/visual.ui:628
msgid "CSS Border"
msgstr "CSS 가장자리"
#: gtk/inspector/visual.ui:537
#: gtk/inspector/visual.ui:638
msgid "CSS Margin"
msgstr "CSS 여백"
#: gtk/inspector/visual.ui:547
#: gtk/inspector/visual.ui:648
msgid "Widget Margin"
msgstr "위젯 여백"
#: gtk/inspector/visual.ui:582
#: gtk/inspector/visual.ui:683
msgid "Show Focus"
msgstr "포커스 표시"
#: gtk/inspector/visual.ui:607
#: gtk/inspector/visual.ui:708
msgid "Show Accessibility warnings"
msgstr "접근성 경고 표시"
#: gtk/inspector/visual.ui:632
#: gtk/inspector/visual.ui:733
msgid "Show Graphics Offload"
msgstr "그래픽 오프로드 표시"
#: gtk/inspector/visual.ui:664
#: gtk/inspector/visual.ui:765
msgid "Inspect Inspector"
msgstr "인스펙터 검사"
@@ -6613,34 +6641,35 @@ msgstr "고급"
msgid "Some of the settings in the dialog conflict"
msgstr "대화 상자의 설정이 충돌합니다"
#. Translators: These strings name the possible values of the
#. * job priority option in the print dialog
#.
#: modules/printbackends/gtkprintbackendcpdb.c:541
#: modules/printbackends/gtkprintbackendcups.c:5640
#: modules/printbackends/gtkprintbackendcpdb.c:542
#: modules/printbackends/gtkprintbackendcups.c:5668
msgctxt "Print job priority"
msgid "Urgent"
msgstr "긴급"
#: modules/printbackends/gtkprintbackendcpdb.c:541
#: modules/printbackends/gtkprintbackendcups.c:5640
#: modules/printbackends/gtkprintbackendcpdb.c:543
#: modules/printbackends/gtkprintbackendcups.c:5669
msgctxt "Print job priority"
msgid "High"
msgstr "높음"
#: modules/printbackends/gtkprintbackendcpdb.c:541
#: modules/printbackends/gtkprintbackendcups.c:5640
#: modules/printbackends/gtkprintbackendcpdb.c:544
#: modules/printbackends/gtkprintbackendcups.c:5670
msgctxt "Print job priority"
msgid "Medium"
msgstr "중간"
#: modules/printbackends/gtkprintbackendcpdb.c:541
#: modules/printbackends/gtkprintbackendcups.c:5640
#: modules/printbackends/gtkprintbackendcpdb.c:545
#: modules/printbackends/gtkprintbackendcups.c:5671
msgctxt "Print job priority"
msgid "Low"
msgstr "낮음"
#. Translators, this is the label used for the option in the print
#. * dialog that controls the front cover page.
#.
#: modules/printbackends/gtkprintbackendcpdb.c:562
#: modules/printbackends/gtkprintbackendcups.c:5782
#: modules/printbackends/gtkprintbackendcpdb.c:567
#: modules/printbackends/gtkprintbackendcups.c:5814
msgctxt "printer option"
msgid "Before"
msgstr "앞에"
@@ -6648,33 +6677,33 @@ msgstr "앞에"
#. Translators, this is the label used for the option in the print
#. * dialog that controls the back cover page.
#.
#: modules/printbackends/gtkprintbackendcpdb.c:569
#: modules/printbackends/gtkprintbackendcups.c:5797
#: modules/printbackends/gtkprintbackendcpdb.c:574
#: modules/printbackends/gtkprintbackendcups.c:5829
msgctxt "printer option"
msgid "After"
msgstr "뒤에"
#: modules/printbackends/gtkprintbackendcpdb.c:592
#: modules/printbackends/gtkprintbackendcpdb.c:597
msgid "Print at"
msgstr "인쇄할 때"
#: modules/printbackends/gtkprintbackendcpdb.c:602
#: modules/printbackends/gtkprintbackendcpdb.c:607
msgid "Print at time"
msgstr "인쇄할 시각"
#: modules/printbackends/gtkprintbackendcpdb.c:665
#: modules/printbackends/gtkprintbackendcpdb.c:670
msgctxt "print option"
msgid "Borderless"
msgstr "가장자리 없음"
#. Translators: this is a printer status.
#: modules/printbackends/gtkprintbackendcpdb.c:1525
#: modules/printbackends/gtkprintbackendcpdb.c:1530
#: modules/printbackends/gtkprintbackendcups.c:2636
msgid "Paused; Rejecting Jobs"
msgstr "일시 정지, 작업을 거부하는 중"
#. Translators: this is a printer status.
#: modules/printbackends/gtkprintbackendcpdb.c:1531
#: modules/printbackends/gtkprintbackendcpdb.c:1536
#: modules/printbackends/gtkprintbackendcups.c:2642
msgid "Rejecting Jobs"
msgstr "작업을 거부하는 중"
@@ -6825,266 +6854,266 @@ msgstr "“%s” 프린터에 문제가 있습니다."
msgid "; "
msgstr ", "
#: modules/printbackends/gtkprintbackendcups.c:4582
#: modules/printbackends/gtkprintbackendcups.c:4649
#: modules/printbackends/gtkprintbackendcups.c:4609
#: modules/printbackends/gtkprintbackendcups.c:4676
msgctxt "printing option"
msgid "Two Sided"
msgstr "양면"
#: modules/printbackends/gtkprintbackendcups.c:4583
#: modules/printbackends/gtkprintbackendcups.c:4610
msgctxt "printing option"
msgid "Paper Type"
msgstr "용지 종류"
#: modules/printbackends/gtkprintbackendcups.c:4584
#: modules/printbackends/gtkprintbackendcups.c:4611
msgctxt "printing option"
msgid "Paper Source"
msgstr "용지 공급"
#: modules/printbackends/gtkprintbackendcups.c:4585
#: modules/printbackends/gtkprintbackendcups.c:4650
#: modules/printbackends/gtkprintbackendcups.c:4612
#: modules/printbackends/gtkprintbackendcups.c:4677
msgctxt "printing option"
msgid "Output Tray"
msgstr "출력 트레이"
#: modules/printbackends/gtkprintbackendcups.c:4586
#: modules/printbackends/gtkprintbackendcups.c:4613
msgctxt "printing option"
msgid "Resolution"
msgstr "해상도"
#: modules/printbackends/gtkprintbackendcups.c:4587
#: modules/printbackends/gtkprintbackendcups.c:4614
msgctxt "printing option"
msgid "GhostScript pre-filtering"
msgstr "고스트스크립트 사전 필터링"
#: modules/printbackends/gtkprintbackendcups.c:4596
#: modules/printbackends/gtkprintbackendcups.c:4623
msgctxt "printing option value"
msgid "One Sided"
msgstr "단면"
#. Translators: this is an option of "Two Sided"
#: modules/printbackends/gtkprintbackendcups.c:4598
#: modules/printbackends/gtkprintbackendcups.c:4625
msgctxt "printing option value"
msgid "Long Edge (Standard)"
msgstr "긴 방향(표준)"
#. Translators: this is an option of "Two Sided"
#: modules/printbackends/gtkprintbackendcups.c:4600
#: modules/printbackends/gtkprintbackendcups.c:4627
msgctxt "printing option value"
msgid "Short Edge (Flip)"
msgstr "짧은 방향(거꾸로)"
#. Translators: this is an option of "Paper Source"
#: modules/printbackends/gtkprintbackendcups.c:4602
#: modules/printbackends/gtkprintbackendcups.c:4604
#: modules/printbackends/gtkprintbackendcups.c:4612
#: modules/printbackends/gtkprintbackendcups.c:4629
#: modules/printbackends/gtkprintbackendcups.c:4631
#: modules/printbackends/gtkprintbackendcups.c:4639
msgctxt "printing option value"
msgid "Auto Select"
msgstr "자동 선택"
#. Translators: this is an option of "Paper Source"
#. Translators: this is an option of "Resolution"
#: modules/printbackends/gtkprintbackendcups.c:4606
#: modules/printbackends/gtkprintbackendcups.c:4608
#: modules/printbackends/gtkprintbackendcups.c:4610
#: modules/printbackends/gtkprintbackendcups.c:4614
#: modules/printbackends/gtkprintbackendcups.c:4633
#: modules/printbackends/gtkprintbackendcups.c:4635
#: modules/printbackends/gtkprintbackendcups.c:4637
#: modules/printbackends/gtkprintbackendcups.c:4641
msgctxt "printing option value"
msgid "Printer Default"
msgstr "프린터 기본값"
#. Translators: this is an option of "GhostScript"
#: modules/printbackends/gtkprintbackendcups.c:4616
#: modules/printbackends/gtkprintbackendcups.c:4643
msgctxt "printing option value"
msgid "Embed GhostScript fonts only"
msgstr "고스트스크립트 글꼴만 문서에 포함"
#. Translators: this is an option of "GhostScript"
#: modules/printbackends/gtkprintbackendcups.c:4618
#: modules/printbackends/gtkprintbackendcups.c:4645
msgctxt "printing option value"
msgid "Convert to PS level 1"
msgstr "PS 레벨 1로 변환"
#. Translators: this is an option of "GhostScript"
#: modules/printbackends/gtkprintbackendcups.c:4620
#: modules/printbackends/gtkprintbackendcups.c:4647
msgctxt "printing option value"
msgid "Convert to PS level 2"
msgstr "PS 레벨 2로 변환"
#. Translators: this is an option of "GhostScript"
#: modules/printbackends/gtkprintbackendcups.c:4622
#: modules/printbackends/gtkprintbackendcups.c:4649
msgctxt "printing option value"
msgid "No pre-filtering"
msgstr "사전 필터링 기능이 없습니다"
#. Translators: "Miscellaneous" is the label for a button, that opens
#. up an extra panel of settings in a print dialog.
#: modules/printbackends/gtkprintbackendcups.c:4631
#: modules/printbackends/gtkprintbackendcups.c:4658
msgctxt "printing option group"
msgid "Miscellaneous"
msgstr "기타"
#: modules/printbackends/gtkprintbackendcups.c:4658
#: modules/printbackends/gtkprintbackendcups.c:4685
msgctxt "sides"
msgid "One Sided"
msgstr "단면"
#. Translators: this is an option of "Two Sided"
#: modules/printbackends/gtkprintbackendcups.c:4660
#: modules/printbackends/gtkprintbackendcups.c:4687
msgctxt "sides"
msgid "Long Edge (Standard)"
msgstr "긴 방향(표준)"
#. Translators: this is an option of "Two Sided"
#: modules/printbackends/gtkprintbackendcups.c:4662
#: modules/printbackends/gtkprintbackendcups.c:4689
msgctxt "sides"
msgid "Short Edge (Flip)"
msgstr "짧은 방향(거꾸로)"
#. Translators: Top output bin
#: modules/printbackends/gtkprintbackendcups.c:4665
#: modules/printbackends/gtkprintbackendcups.c:4692
msgctxt "output-bin"
msgid "Top Bin"
msgstr "위 출력함"
#. Translators: Middle output bin
#: modules/printbackends/gtkprintbackendcups.c:4667
#: modules/printbackends/gtkprintbackendcups.c:4694
msgctxt "output-bin"
msgid "Middle Bin"
msgstr "중간 출력함"
#. Translators: Bottom output bin
#: modules/printbackends/gtkprintbackendcups.c:4669
#: modules/printbackends/gtkprintbackendcups.c:4696
msgctxt "output-bin"
msgid "Bottom Bin"
msgstr "아래 출력함"
#. Translators: Side output bin
#: modules/printbackends/gtkprintbackendcups.c:4671
#: modules/printbackends/gtkprintbackendcups.c:4698
msgctxt "output-bin"
msgid "Side Bin"
msgstr "옆 출력함"
#. Translators: Left output bin
#: modules/printbackends/gtkprintbackendcups.c:4673
#: modules/printbackends/gtkprintbackendcups.c:4700
msgctxt "output-bin"
msgid "Left Bin"
msgstr "왼쪽 출력함"
#. Translators: Right output bin
#: modules/printbackends/gtkprintbackendcups.c:4675
#: modules/printbackends/gtkprintbackendcups.c:4702
msgctxt "output-bin"
msgid "Right Bin"
msgstr "오른쪽 출력함"
#. Translators: Center output bin
#: modules/printbackends/gtkprintbackendcups.c:4677
#: modules/printbackends/gtkprintbackendcups.c:4704
msgctxt "output-bin"
msgid "Center Bin"
msgstr "중앙 출력함"
#. Translators: Rear output bin
#: modules/printbackends/gtkprintbackendcups.c:4679
#: modules/printbackends/gtkprintbackendcups.c:4706
msgctxt "output-bin"
msgid "Rear Bin"
msgstr "뒤 출력함"
#. Translators: Output bin where one sided output is oriented in the face-up position
#: modules/printbackends/gtkprintbackendcups.c:4681
#: modules/printbackends/gtkprintbackendcups.c:4708
msgctxt "output-bin"
msgid "Face Up Bin"
msgstr "전면 출력함"
#. Translators: Output bin where one sided output is oriented in the face-down position
#: modules/printbackends/gtkprintbackendcups.c:4683
#: modules/printbackends/gtkprintbackendcups.c:4710
msgctxt "output-bin"
msgid "Face Down Bin"
msgstr "후면 출력함"
#. Translators: Large capacity output bin
#: modules/printbackends/gtkprintbackendcups.c:4685
#: modules/printbackends/gtkprintbackendcups.c:4712
msgctxt "output-bin"
msgid "Large Capacity Bin"
msgstr "대용량 출력함"
#. Translators: Output stacker number %d
#: modules/printbackends/gtkprintbackendcups.c:4707
#: modules/printbackends/gtkprintbackendcups.c:4734
#, c-format
msgctxt "output-bin"
msgid "Stacker %d"
msgstr "%d번 스태커"
#. Translators: Output mailbox number %d
#: modules/printbackends/gtkprintbackendcups.c:4711
#: modules/printbackends/gtkprintbackendcups.c:4738
#, c-format
msgctxt "output-bin"
msgid "Mailbox %d"
msgstr "%d번 메일함"
#. Translators: Private mailbox
#: modules/printbackends/gtkprintbackendcups.c:4715
#: modules/printbackends/gtkprintbackendcups.c:4742
msgctxt "output-bin"
msgid "My Mailbox"
msgstr "내 메일함"
#. Translators: Output tray number %d
#: modules/printbackends/gtkprintbackendcups.c:4719
#: modules/printbackends/gtkprintbackendcups.c:4746
#, c-format
msgctxt "output-bin"
msgid "Tray %d"
msgstr "%d번 트레이"
#: modules/printbackends/gtkprintbackendcups.c:5196
#: modules/printbackends/gtkprintbackendcups.c:5223
msgid "Printer Default"
msgstr "프린터 기본값"
#. Translators, this string is used to label the job priority option
#. * in the print dialog
#.
#: modules/printbackends/gtkprintbackendcups.c:5670
#: modules/printbackends/gtkprintbackendcups.c:5702
msgid "Job Priority"
msgstr "작업 우선순위"
#. Translators, this string is used to label the billing info entry
#. * in the print dialog
#.
#: modules/printbackends/gtkprintbackendcups.c:5681
#: modules/printbackends/gtkprintbackendcups.c:5713
msgid "Billing Info"
msgstr "요금 정보"
#. Translators, these strings are names for various 'standard' cover
#. * pages that the printing system may support.
#.
#: modules/printbackends/gtkprintbackendcups.c:5705
#: modules/printbackends/gtkprintbackendcups.c:5737
msgctxt "cover page"
msgid "None"
msgstr "없음"
#: modules/printbackends/gtkprintbackendcups.c:5706
#: modules/printbackends/gtkprintbackendcups.c:5738
msgctxt "cover page"
msgid "Classified"
msgstr "비밀 분류"
#: modules/printbackends/gtkprintbackendcups.c:5707
#: modules/printbackends/gtkprintbackendcups.c:5739
msgctxt "cover page"
msgid "Confidential"
msgstr "기밀"
#: modules/printbackends/gtkprintbackendcups.c:5708
#: modules/printbackends/gtkprintbackendcups.c:5740
msgctxt "cover page"
msgid "Secret"
msgstr "비밀"
#: modules/printbackends/gtkprintbackendcups.c:5709
#: modules/printbackends/gtkprintbackendcups.c:5741
msgctxt "cover page"
msgid "Standard"
msgstr "표준"
#: modules/printbackends/gtkprintbackendcups.c:5710
#: modules/printbackends/gtkprintbackendcups.c:5742
msgctxt "cover page"
msgid "Top Secret"
msgstr "일급 비밀"
#: modules/printbackends/gtkprintbackendcups.c:5711
#: modules/printbackends/gtkprintbackendcups.c:5743
msgctxt "cover page"
msgid "Unclassified"
msgstr "비밀 분류 해제"
@@ -7092,7 +7121,7 @@ msgstr "비밀 분류 해제"
#. Translators, this string is used to label the pages-per-sheet option
#. * in the print dialog
#.
#: modules/printbackends/gtkprintbackendcups.c:5723
#: modules/printbackends/gtkprintbackendcups.c:5755
msgctxt "printer option"
msgid "Pages per Sheet"
msgstr "한 장당 페이지 수"
@@ -7100,7 +7129,7 @@ msgstr "한 장당 페이지 수"
#. Translators, this string is used to label the option in the print
#. * dialog that controls in what order multiple pages are arranged
#.
#: modules/printbackends/gtkprintbackendcups.c:5740
#: modules/printbackends/gtkprintbackendcups.c:5772
msgctxt "printer option"
msgid "Page Ordering"
msgstr "페이지 순서"
@@ -7109,7 +7138,7 @@ msgstr "페이지 순서"
#. * a print job is printed. Possible values are 'now', a specified time,
#. * or 'on hold'
#.
#: modules/printbackends/gtkprintbackendcups.c:5817
#: modules/printbackends/gtkprintbackendcups.c:5849
msgctxt "printer option"
msgid "Print at"
msgstr "인쇄할 때"
@@ -7117,7 +7146,7 @@ msgstr "인쇄할 때"
#. Translators: this is the name of the option that allows the user
#. * to specify a time when a print job will be printed.
#.
#: modules/printbackends/gtkprintbackendcups.c:5828
#: modules/printbackends/gtkprintbackendcups.c:5860
msgctxt "printer option"
msgid "Print at time"
msgstr "인쇄할 시각"
@@ -7127,19 +7156,19 @@ msgstr "인쇄할 시각"
#. * the width and height in points. E.g: "Custom
#. * 230.4x142.9"
#.
#: modules/printbackends/gtkprintbackendcups.c:5875
#: modules/printbackends/gtkprintbackendcups.c:5907
#, c-format
msgid "Custom %s×%s"
msgstr "사용자 지정 %s×%s"
#. TRANSLATORS: this is the ICC color profile to use for this job
#: modules/printbackends/gtkprintbackendcups.c:5986
#: modules/printbackends/gtkprintbackendcups.c:6018
msgctxt "printer option"
msgid "Printer Profile"
msgstr "프린터 프로파일"
#. TRANSLATORS: this is when color profile information is unavailable
#: modules/printbackends/gtkprintbackendcups.c:5993
#: modules/printbackends/gtkprintbackendcups.c:6025
msgctxt "printer option value"
msgid "Unavailable"
msgstr "없음"
@@ -8126,3 +8155,6 @@ msgstr ""
"“%s” 안에 테마 인덱스 파일이 없습니다.\n"
"정말로 여기에 아이콘 캐시를 만드려면, --ignore-theme-index 옵션을 사용하십시"
"오.\n"
#~ msgid "Font Scale"
#~ msgstr "글꼴 크기 조정"
@@ -49,3 +49,7 @@
:drop(active) {
color: red;
}
:root {
color: red;
}
@@ -49,3 +49,7 @@
:drop(active) {
color: rgb(255,0,0);
}
:root {
color: rgb(255,0,0);
}
+13
View File
@@ -0,0 +1,13 @@
:root {
color: red;
}
window {
/* :root has higher priority */
color: blue;
}
label {
/* :root doesn't apply so it's still green */
color: green;
}
+6
View File
@@ -0,0 +1,6 @@
window.background:dir(ltr)
color: rgb(255,0,0); /* root.css:2:3-14 */
box.horizontal:dir(ltr)
label:dir(ltr)
color: rgb(0,128,0); /* root.css:12:3-16 */
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="decorated">0</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">Hello World!</property>
</object>
</child>
</object>
</child>
</object>
</interface>
+12 -1
View File
@@ -73,7 +73,18 @@ float_to_half (const float x)
const guint b = *(guint*)&x+0x00001000; // round-to-nearest-even
const guint e = (b&0x7F800000)>>23; // exponent
const guint m = b&0x007FFFFF; // mantissa
return (b&0x80000000)>>16 | (e>112)*((((e-112)<<10)&0x7C00)|m>>13) | ((e<113)&(e>101))*((((0x007FF000+m)>>(125-e))+1)>>1) | (e>143)*0x7FFF; // sign : normalized : denormalized : saturate
guint n0 = 0;
guint n1 = 0;
guint n2 = 0;
if (e > 112)
n0 = (((e - 112) << 10) & 0x7C00) | m >> 13;
if (e < 113 && e > 101)
n1 = (((0x007FF000 + m) >> (125- e)) + 1) >> 1;
if (e > 143)
n2 = 0x7FFF;
return (b & 0x80000000) >> 16 | n0 | n1 | n2; // sign : normalized : denormalized : saturate
}
static gsize