Compare commits

..

1 Commits

Author SHA1 Message Date
Chun-wei Fan
8b49ebe34f gdkevents-win32.c: Avoid crash in SetTimer()
Since we only support a single GdkDisplay for Windows, make use of it to
ensure we always obtain a proper GdkDisplay to check whether a modal
operation is in progress.

This should fix issue #7147.
2024-11-11 12:53:39 +08:00
19 changed files with 4882 additions and 9551 deletions

View File

@@ -438,10 +438,11 @@ gdk_display_dispose (GObject *object)
g_clear_pointer (&display->egl_dmabuf_formats, gdk_dmabuf_formats_unref);
g_clear_pointer (&display->egl_internal_formats, gdk_dmabuf_formats_unref);
#ifdef GDK_RENDERING_VULKAN
if (display->vk_instance)
gdk_display_destroy_vulkan_instance (display);
g_assert (display->vk_dmabuf_formats == NULL);
g_clear_error (&display->vulkan_error);
if (display->vk_dmabuf_formats)
{
gdk_display_unref_vulkan (display);
g_assert (display->vk_dmabuf_formats == NULL);
}
#endif
g_clear_object (&priv->gl_context);
@@ -1285,53 +1286,6 @@ gdk_display_get_keymap (GdkDisplay *display)
return GDK_DISPLAY_GET_CLASS (display)->get_keymap (display);
}
/*< private >
* gdk_display_prepare_vulkan:
* @self: a `GdkDisplay`
* @error: return location for a `GError`
*
* Checks that Vulkan is available for @self and ensures that it is
* properly initialized.
*
* When this fails, an @error will be set describing the error and this
* function returns %FALSE.
*
* Note that even if this function succeeds, creating a `GdkVulkanContext`
* may still fail.
*
* This function is idempotent. Calling it multiple times will just
* return the same value or error.
*
* You never need to call this function, GDK will call it automatically
* as needed.
*
* Returns: %TRUE if the display supports Vulkan
*/
gboolean
gdk_display_prepare_vulkan (GdkDisplay *self,
GError **error)
{
g_return_val_if_fail (GDK_IS_DISPLAY (self), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
#ifdef GDK_RENDERING_VULKAN
if (!self->vk_instance && !self->vulkan_error)
gdk_display_create_vulkan_instance (self, &self->vulkan_error);
if (self->vk_instance == NULL)
{
if (error)
*error = g_error_copy (self->vulkan_error);
}
return self->vk_instance != NULL;
#else
g_set_error (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_UNSUPPORTED,
"GTK was built without Vulkan support");
return FALSE;
#endif
}
/*<private>
* gdk_display_create_vulkan_context:
* @self: a `GdkDisplay`

View File

@@ -126,7 +126,7 @@ struct _GdkDisplay
GdkDmabufFormats *vk_dmabuf_formats;
GdkVulkanFeatures vulkan_features;
GError *vulkan_error;
guint vulkan_refcount;
#endif /* GDK_RENDERING_VULKAN */
/* egl info */
@@ -239,8 +239,6 @@ void _gdk_display_unpause_events (GdkDisplay *display
void gdk_display_init_dmabuf (GdkDisplay *self);
gboolean gdk_display_prepare_vulkan (GdkDisplay *self,
GError **error);
gboolean gdk_display_has_vulkan_feature (GdkDisplay *self,
GdkVulkanFeatures feature);
GdkVulkanContext * gdk_display_create_vulkan_context (GdkDisplay *self,

View File

@@ -367,6 +367,7 @@ gdk_vulkan_context_dispose (GObject *gobject)
{
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (gobject);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
GdkDisplay *display;
VkDevice device;
guint i;
@@ -396,6 +397,11 @@ gdk_vulkan_context_dispose (GObject *gobject)
priv->surface = VK_NULL_HANDLE;
}
/* display will be unset in gdk_draw_context_dispose() */
display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context));
if (display && priv->vulkan_ref)
gdk_display_unref_vulkan (display);
G_OBJECT_CLASS (gdk_vulkan_context_parent_class)->dispose (gobject);
}
@@ -881,7 +887,8 @@ gdk_vulkan_context_real_init (GInitable *initable,
VkBool32 supported;
uint32_t i;
if (!gdk_display_prepare_vulkan (display, error))
priv->vulkan_ref = gdk_display_init_vulkan (display, error);
if (!priv->vulkan_ref)
return FALSE;
if (surface == NULL)
@@ -1661,7 +1668,7 @@ gdk_vulkan_debug_report (VkDebugReportFlagsEXT flags,
return VK_FALSE;
}
gboolean
static gboolean
gdk_display_create_vulkan_instance (GdkDisplay *display,
GError **error)
{
@@ -1671,8 +1678,6 @@ gdk_display_create_vulkan_instance (GdkDisplay *display,
gboolean have_debug_report = FALSE;
VkResult res;
g_assert (display->vk_instance == NULL);
if (!gdk_has_feature (GDK_FEATURE_VULKAN))
{
g_set_error_literal (error, GDK_VULKAN_ERROR, GDK_VULKAN_ERROR_NOT_AVAILABLE,
@@ -1799,16 +1804,66 @@ gdk_display_create_vulkan_instance (GdkDisplay *display,
return TRUE;
}
/*
* gdk_display_init_vulkan:
* @display: a display
* @error: A potential error message
*
* Initializes Vulkan and returns an error on failure.
*
* If Vulkan is already initialized, this function returns
* %TRUE and increases the refcount of the existing instance.
*
* You need to gdk_display_unref_vulkan() to close it again.
*
* Returns: %TRUE if Vulkan is initialized.
**/
gboolean
gdk_display_init_vulkan (GdkDisplay *display,
GError **error)
{
if (display->vulkan_refcount == 0)
{
if (!gdk_display_create_vulkan_instance (display, error))
return FALSE;
}
display->vulkan_refcount++;
return TRUE;
}
/*
* gdk_display_ref_vulkan:
* @display: a GdkDisplay
*
* Increases the refcount of an existing Vulkan instance.
*
* This function must not be called if Vulkan may not be initialized
* yet, call gdk_display_init_vulkan() in that case.
**/
void
gdk_display_destroy_vulkan_instance (GdkDisplay *display)
gdk_display_ref_vulkan (GdkDisplay *display)
{
g_assert (display->vulkan_refcount > 0);
display->vulkan_refcount++;
}
void
gdk_display_unref_vulkan (GdkDisplay *display)
{
GHashTableIter iter;
gpointer key, value;
g_assert (GDK_IS_DISPLAY (display));
g_assert (display->vk_instance != NULL);
g_return_if_fail (GDK_IS_DISPLAY (display));
g_return_if_fail (display->vulkan_refcount > 0);
GDK_DEBUG (VULKAN, "Destroy Vulkan instance");
display->vulkan_refcount--;
if (display->vulkan_refcount > 0)
return;
GDK_DEBUG (VULKAN, "Closing Vulkan instance");
display->vulkan_features = 0;
g_clear_pointer (&display->vk_dmabuf_formats, gdk_dmabuf_formats_unref);
g_hash_table_iter_init (&iter, display->vk_shader_modules);
@@ -1886,9 +1941,11 @@ gdk_vulkan_init_dmabuf (GdkDisplay *display)
return;
if (!gdk_has_feature (GDK_FEATURE_DMABUF) ||
!gdk_display_prepare_vulkan (display, NULL) ||
(display->vulkan_features & GDK_VULKAN_FEATURE_DMABUF) == 0)
return;
!gdk_display_init_vulkan (display, NULL) ||
((display->vulkan_features & GDK_VULKAN_FEATURE_DMABUF) == 0))
{
return;
}
vulkan_builder = gdk_dmabuf_formats_builder_new ();

View File

@@ -73,9 +73,10 @@ gdk_vulkan_handle_result (VkResult res,
#define GDK_VK_CHECK(func, ...) gdk_vulkan_handle_result (func (__VA_ARGS__), G_STRINGIFY (func))
gboolean gdk_display_create_vulkan_instance (GdkDisplay *display,
gboolean gdk_display_init_vulkan (GdkDisplay *display,
GError **error);
void gdk_display_destroy_vulkan_instance (GdkDisplay *display);
void gdk_display_ref_vulkan (GdkDisplay *display);
void gdk_display_unref_vulkan (GdkDisplay *display);
void gdk_vulkan_init_dmabuf (GdkDisplay *display);

View File

@@ -2032,7 +2032,7 @@ init_settings (GdkDisplay *display)
if (entry)
{
char *a = g_variant_print (v, FALSE);
g_debug ("Using portal setting for %s %s: %s", schema_str, key, a);
g_debug ("Using portal setting for %s %s: %s\n", schema_str, key, a);
g_free (a);
entry->valid = TRUE;
apply_portal_setting (entry, v, display);

View File

@@ -928,10 +928,6 @@ preferred_changed (GdkWaylandColorSurface *color,
{
GdkWaylandSurface *self = GDK_WAYLAND_SURFACE (data);
GDK_DISPLAY_DEBUG (gdk_surface_get_display (GDK_SURFACE (self)), EVENTS,
"preferred color state, surface %p color state %s",
self, gdk_color_state_get_name (color_state));
gdk_surface_set_color_state (GDK_SURFACE (self), color_state);
self->color_state_changed = TRUE;

View File

@@ -1365,7 +1365,9 @@ modal_timer_proc (HWND hwnd,
DWORD time)
{
int arbitrary_limit = 10;
GdkWin32Display *display = GDK_WIN32_DISPLAY (gdk_surface_get_display (GDK_SURFACE (id)));
/* todo: if we support multiple GdkDisplay's on Windows? */
GdkWin32Display *display = GDK_WIN32_DISPLAY (gdk_display_get_default ());
while (display->display_surface_record->modal_operation_in_progress != GDK_WIN32_MODAL_OP_NONE &&
g_main_context_pending (NULL) &&

View File

@@ -343,6 +343,8 @@ gsk_vulkan_device_finalize (GObject *object)
g_clear_pointer (&self->allocators[i], gsk_vulkan_allocator_unref);
g_clear_pointer (&self->external_allocator, gsk_vulkan_allocator_unref);
gdk_display_unref_vulkan (display);
G_OBJECT_CLASS (gsk_vulkan_device_parent_class)->finalize (object);
}
@@ -420,7 +422,7 @@ gsk_vulkan_device_get_for_display (GdkDisplay *display,
if (self)
return GSK_GPU_DEVICE (g_object_ref (self));
if (!gdk_display_prepare_vulkan (display, error))
if (!gdk_display_init_vulkan (display, error))
return NULL;
self = g_object_new (GSK_TYPE_VULKAN_DEVICE, NULL);

View File

@@ -653,16 +653,7 @@ vulkan_supported_platform (GdkSurface *surface,
VkPhysicalDeviceProperties props;
GError *error = NULL;
#ifdef GDK_WINDOWING_WAYLAND
if (!GDK_IS_WAYLAND_DISPLAY (gdk_surface_get_display (surface)) && !as_fallback)
{
GSK_DEBUG (RENDERER, "Not using '%s': platform is not Wayland",
g_type_name (renderer_type));
return FALSE;
}
#endif
if (!gdk_display_prepare_vulkan (display, &error))
if (!gdk_display_init_vulkan (display, &error))
{
GSK_DEBUG (RENDERER, "Not using Vulkan%s: %s",
as_fallback ? " as fallback" : "",
@@ -694,7 +685,15 @@ vulkan_supported_platform (GdkSurface *surface,
}
#endif
return TRUE;
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gdk_surface_get_display (surface)))
return TRUE;
#endif
GSK_DEBUG (RENDERER, "Not using '%s': platform is not Wayland",
g_type_name (renderer_type));
return FALSE;
}
static GType

View File

@@ -590,7 +590,6 @@ populate_servers (GtkPlacesView *view)
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
gtk_button_set_has_frame (GTK_BUTTON (button), FALSE);
gtk_widget_add_css_class (button, "sidebar-button");
gtk_widget_set_tooltip_text (button, _("Remove server"));
gtk_grid_attach (GTK_GRID (grid), button, 1, 0, 1, 2);
gtk_list_box_row_set_child (GTK_LIST_BOX_ROW (row), grid);

View File

@@ -291,7 +291,6 @@ struct _GtkTextPrivate
guint propagate_text_width : 1;
guint text_handles_enabled : 1;
guint enable_undo : 1;
guint emoji_chooser_open : 1;
};
struct _GtkTextPasswordHint
@@ -3460,7 +3459,7 @@ gtk_text_grab_focus (GtkWidget *widget)
if (!GTK_WIDGET_CLASS (gtk_text_parent_class)->grab_focus (GTK_WIDGET (self)))
return FALSE;
if (priv->editable && !priv->in_click && !prev_focus_was_child && !priv->emoji_chooser_open)
if (priv->editable && !priv->in_click && !prev_focus_was_child)
{
g_object_get (gtk_widget_get_settings (widget),
"gtk-entry-select-on-focus",
@@ -7184,15 +7183,6 @@ gtk_text_get_tabs (GtkText *self)
return priv->tabs;
}
static void
emoji_chooser_closed (GtkWidget *chooser,
GtkText *text)
{
GtkTextPrivate *priv = gtk_text_get_instance_private (text);
priv->emoji_chooser_open = 1;
}
static void
emoji_picked (GtkEmojiChooser *chooser,
const char *text,
@@ -7218,7 +7208,6 @@ emoji_picked (GtkEmojiChooser *chooser,
static void
gtk_text_insert_emoji (GtkText *self)
{
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
GtkWidget *chooser;
if (gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_EMOJI_CHOOSER) != NULL)
@@ -7232,11 +7221,10 @@ gtk_text_insert_emoji (GtkText *self)
gtk_widget_set_parent (chooser, GTK_WIDGET (self));
g_signal_connect (chooser, "emoji-picked", G_CALLBACK (emoji_picked), self);
g_signal_connect_swapped (chooser, "hide", G_CALLBACK (emoji_chooser_closed), self);
g_signal_connect_swapped (chooser, "hide", G_CALLBACK (gtk_text_grab_focus_without_selecting), self);
}
gtk_popover_popup (GTK_POPOVER (chooser));
priv->emoji_chooser_open = 1;
}
static void

View File

@@ -577,7 +577,7 @@ init_vulkan (GtkInspectorGeneral *gen)
const char *types[] = { "other", "integrated GPU", "discrete GPU", "virtual GPU", "CPU" };
GError *error = NULL;
if (!gdk_display_prepare_vulkan (gen->display, &error))
if (!gdk_display_init_vulkan (gen->display, &error))
{
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_widget_set_visible (gen->vk_error_row, TRUE);
@@ -617,6 +617,8 @@ init_vulkan (GtkInspectorGeneral *gen)
add_instance_extensions (gen->vulkan_extensions_list);
add_device_extensions (gen->display->vk_physical_device, gen->vulkan_extensions_list);
add_layers (gen->vulkan_layers_list);
gdk_display_unref_vulkan (gen->display);
#else
gtk_label_set_text (GTK_LABEL (gen->vk_device), C_("Vulkan device", "None"));
gtk_widget_set_visible (gen->vk_api_version_row, FALSE);

View File

@@ -183,13 +183,8 @@ update_allocation (GtkWidget *w,
char *size_label;
GEnumClass *class;
GEnumValue *value;
GtkWidget *target;
target = gtk_widget_get_parent (w);
if (target == NULL)
target = w;
if (!gtk_widget_compute_bounds (w, target, &bounds))
if (!gtk_widget_compute_bounds (w, gtk_widget_get_parent (w), &bounds))
graphene_rect_init (&bounds, 0, 0, 0, 0);
size_label = g_strdup_printf ("%g×%g+%g+%g",

View File

@@ -45,7 +45,6 @@
#include "gtklabel.h"
#include "gtklistitem.h"
#include "gtkpopover.h"
#include "gtknative.h"
#include "gtksettings.h"
#include "gtksingleselection.h"
#include "gtksignallistitemfactory.h"
@@ -133,37 +132,6 @@ object_tree_widget_get_children (GObject *object)
return G_LIST_MODEL (gtk_flatten_list_model_new (G_LIST_MODEL (list)));
}
static GObject *
object_tree_window_get_parent (GObject *object)
{
return NULL;
}
static GListModel *
object_tree_native_get_children (GObject *object)
{
GtkNative *native = GTK_NATIVE (object);
GListStore *list;
GListModel *sublist;
list = g_list_store_new (G_TYPE_LIST_MODEL);
sublist = G_LIST_MODEL (g_list_store_new (G_TYPE_OBJECT));
if (gtk_native_get_surface (native))
g_list_store_append (G_LIST_STORE (sublist), gtk_native_get_surface (native));
if (gtk_native_get_renderer (native))
g_list_store_append (G_LIST_STORE (sublist), gtk_native_get_renderer (native));
g_list_store_append (list, sublist);
g_object_unref (sublist);
sublist = object_tree_widget_get_children (object);
g_list_store_append (list, sublist);
g_object_unref (sublist);
return G_LIST_MODEL (gtk_flatten_list_model_new (G_LIST_MODEL (list)));
}
static GListModel *
object_tree_tree_model_sort_get_children (GObject *object)
{
@@ -550,16 +518,6 @@ static const ObjectTreeClassFuncs object_tree_class_funcs[] = {
object_tree_widget_get_parent,
object_tree_combo_box_get_children
},
{
gtk_window_get_type,
object_tree_window_get_parent,
object_tree_native_get_children,
},
{
gtk_popover_get_type,
object_tree_widget_get_parent,
object_tree_native_get_children,
},
{
gtk_widget_get_type,
object_tree_widget_get_parent,

View File

@@ -275,7 +275,6 @@
<property name="direction">0</property>
<property name="popover">recent_servers_popover</property>
<property name="icon-name">pan-down-symbolic</property>
<property name="tooltip-text" translatable="yes">Show recent servers</property>
<style>
<class name="server-list-button"/>
</style>

3607
po/is.po

File diff suppressed because it is too large Load Diff

181
po/sr.po
View File

@@ -3,26 +3,26 @@
# This file is distributed under the same license as the gtk package.
# Translators:
# Данило Шеган <dsegan@gmx.net>, 20042005.
# Милош Поповић <gpopac@gmail.com>, 20102017.
# Марко М. Костић (Marko M. Kostić) <marko.m.kostic@gmail.com>, 2015.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 201120-2024.
# Милош Поповић <gpopac@gmail.com>, 201020-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: gtk+ 2.14\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk/-/issues/\n"
"POT-Creation-Date: 2024-11-07 18:03+0000\n"
"PO-Revision-Date: 2024-11-11 14:13+0100\n"
"Last-Translator: Милош Поповић <gpopac@gmail.com>\n"
"Language-Team: Serbian <Serbian <gnome-sr@googlegroups.com>>\n"
"POT-Creation-Date: 2024-11-01 19:50+0000\n"
"PO-Revision-Date: 2024-11-07 19:03+0100\n"
"Last-Translator: Марко М. Костић <marko.m.kostic@gmail.com>\n"
"Language-Team: Serbian <српски <gnome-sr@googlegroups.org>>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n"
"X-Generator: Gtranslator 46.1\n"
"X-Generator: Poedit 3.4.4\n"
#: gdk/broadway/gdkbroadway-server.c:135
#, c-format
@@ -52,14 +52,16 @@ msgid "cicp: Unspecified parameters not supported"
msgstr "cicp: ненаведени параметри нису подржани"
#: gdk/gdkcolorstate.c:724
#, c-format
#, fuzzy, c-format
#| msgid "Format %s not supported"
msgid "cicp: Transfer function %u not supported"
msgstr "cicp: није подржаја функција преноса „%u“"
msgstr "Формат „%s“ није подржан"
#: gdk/gdkcolorstate.c:754
#, c-format
#, fuzzy, c-format
#| msgid "Format %s not supported"
msgid "cicp: Color primaries %u not supported"
msgstr "cicp: нису подржане основне боје „%u“"
msgstr "Формат „%s“ није подржан"
#: gdk/gdkcontentprovider.c:106 gdk/gdkcontentproviderimpl.c:313
#: gdk/gdkcontentproviderimpl.c:532
@@ -77,12 +79,16 @@ msgid "The current backend does not support OpenGL"
msgstr "Текући позадинац не подржава ОупенГЛ"
#: gdk/gdkdisplay.c:1317 gdk/gdkvulkancontext.c:1710
#, fuzzy
#| msgid "Vulkan support disabled via GDK_DEBUG"
msgid "Vulkan support disabled via GDK_DISABLE"
msgstr "Подршка за Вулкан је онемогућена са „GDK_DISABLE“"
msgstr "Подршка за Вулкан је онемогућена са „GDK_DEBUG“"
#: gdk/gdkdisplay.c:1371
#, fuzzy
#| msgid "GL support disabled via GDK_DEBUG"
msgid "OpenGL support disabled via GDK_DISABLE"
msgstr "Подршка за OypenГЛ је онемогућена са „GDK_DISABLE“"
msgstr "Подршка за ГЛ је онемогућена са „GDK_DEBUG“"
#: gdk/gdkdisplay.c:1685
msgid "No EGL configuration available"
@@ -149,12 +155,16 @@ msgid "Unable to create a GL context"
msgstr "Не могу да направим ГЛ садржај"
#: gdk/gdkglcontext.c:1338
#, fuzzy
#| msgid "OpenGL ES disabled via GDK_DEBUG"
msgid "OpenGL ES API disabled via GDK_DISABLE"
msgstr "ОупенГЛ ЕС АПИ је онемогућен преко „GDK_DISABLE“"
msgstr "Све осим ОупенГЛЕС-а је искључено преко „GDK_DEBUG“"
#: gdk/gdkglcontext.c:1350
#, fuzzy
#| msgid "OpenGL disabled via GDK_DEBUG"
msgid "OpenGL API disabled via GDK_DISABLE"
msgstr "ОупенГЛ АПИ је онемогућен преко „GDK_DISABLE“"
msgstr "Подршка за ОупенГЛ је онемогућена преко „GDK_DEBUG“"
#: gdk/gdkglcontext.c:1361
#, c-format
@@ -170,9 +180,10 @@ msgid "Trying to use %s, but %s is already in use"
msgstr "Покушавам да користим „%s“, али је „%s“ већ у употреби"
#: gdk/gdkglcontext.c:2182
#, c-format
#, fuzzy, c-format
#| msgid "Trying to use %s, but %s is already in use"
msgid "Trying to use %s, but it is disabled via GDK_DISABLE"
msgstr "Покушавам да користим „%s“, али је онемогућен преко „GDK_DISABLE“"
msgstr "Покушавам да користим „%s“, али је „%s“ већ у употреби"
#: gdk/gdktexture.c:672
msgid "Unknown image format."
@@ -7443,9 +7454,10 @@ msgid "%s only accepts three children"
msgstr "%s прихвата само три нижа елемента"
#: tools/gtk-builder-tool-simplify.c:1773
#, c-format
#, fuzzy, c-format
#| msgid "%s only accepts three children"
msgid "%s only accepts one center child"
msgstr "%s прихвата само један нижи елемент на средини"
msgstr "%s прихвата само три нижа елемента"
#: tools/gtk-builder-tool-simplify.c:2549
#, c-format
@@ -7505,7 +7517,20 @@ msgid "Validate the file."
msgstr "Потврди датотеку."
#: tools/gtk-image-tool.c:36
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "Usage:\n"
#| " gtk4-rendernode-tool [COMMAND] [OPTION…] FILE\n"
#| "\n"
#| "Perform various tasks on GTK render nodes.\n"
#| "\n"
#| "Commands:\n"
#| " benchmark Benchmark rendering of a node\n"
#| " compare Compare nodes or images\n"
#| " info Provide information about the node\n"
#| " show Show the node\n"
#| " render Take a screenshot of the node\n"
#| "\n"
msgid ""
"Usage:\n"
" gtk4-image-tool [COMMAND] [OPTION…] FILE…\n"
@@ -7521,16 +7546,16 @@ msgid ""
"\n"
msgstr ""
"Коришћење:\n"
" gtk4-image-tool [НАРЕДБА] [ОПЦИЈА…] ДАТОТЕКА\n"
" gtk4-rendernode-tool [НАРЕДБА] [ОПЦИЈА…] ДАТОТЕКА\n"
"\n"
"Обавља разне задатке на сликама.\n"
"Обавља разне задатке на чворовима Гтк цртача.\n"
"\n"
"Наредбе:\n"
" compare Приказује разлике између две слике\n"
" convert Претвара слику у други формат или стање боја\n"
" info Приказује опште податке о слици\n"
" relabel Мења стање боја слике без претварања у други формат\n"
" show Приказује слику\n"
" benchmark Прати учинак исцртавања чвора\n"
" compare Упореди чворове или слике\n"
" info Обезбеђује податке о чвору\n"
" show Приказује чвор\n"
" render Прави снимак екрана чвора\n"
"\n"
#: tools/gtk-image-tool-compare.c:43 tools/gtk-rendernode-tool-compare.c:67
@@ -7544,14 +7569,16 @@ msgstr "Упореди две слике"
#: tools/gtk-image-tool-compare.c:70 tools/gtk-image-tool-convert.c:113
#: tools/gtk-image-tool-info.c:90 tools/gtk-image-tool-relabel.c:109
#: tools/gtk-image-tool-show.c:141
#, c-format
#, fuzzy, c-format
#| msgid "No .ui file specified\n"
msgid "No image file specified\n"
msgstr "Није одређена датотека са сликом\n"
msgstr "Није наведена „.ui“ датотека\n"
#: tools/gtk-image-tool-compare.c:76
#, c-format
#, fuzzy, c-format
#| msgid "Can only accept a single .node file\n"
msgid "Can only accept two image files\n"
msgstr "Може да прихвати само две датотеке са сликом\n"
msgstr "Може да прихвати само једну .node датотеку\n"
#: tools/gtk-image-tool-compare.c:85 tools/gtk-rendernode-tool-compare.c:111
#, c-format
@@ -7579,8 +7606,10 @@ msgid "No differences.\n"
msgstr "Нема разлике.\n"
#: tools/gtk-image-tool-convert.c:86
#, fuzzy
#| msgid "_Format for:"
msgid "Format to use"
msgstr "Формат за коришћење"
msgstr "_Формат за:"
#: tools/gtk-image-tool-convert.c:86
msgid "FORMAT"
@@ -7591,8 +7620,10 @@ msgid "Color state to use"
msgstr "Стање боје за коришћење"
#: tools/gtk-image-tool-convert.c:87 tools/gtk-image-tool-relabel.c:84
#, fuzzy
#| msgid "COLOR"
msgid "COLORSTATE"
msgstr "СТАЊЕ_БОЈА"
msgstr "БОЈА"
#: tools/gtk-image-tool-convert.c:88 tools/gtk-image-tool-relabel.c:85
msgid "Color state to use, as cicp tuple"
@@ -7607,9 +7638,10 @@ msgid "Convert the image to a different format or color state."
msgstr "Претвори слику у други формат или стање боје."
#: tools/gtk-image-tool-convert.c:119 tools/gtk-image-tool-relabel.c:115
#, c-format
#, fuzzy, c-format
#| msgid "Can only render a single .ui file to a single output file\n"
msgid "Can only accept a single image file and output file\n"
msgstr "Може да прихвати само једну датотеку са сликом и излазну датотеку\n"
msgstr "Могу да исцртам само једну .ui датотеку у једну излазну датотеку\n"
#: tools/gtk-image-tool-convert.c:133
#, c-format
@@ -7629,19 +7661,16 @@ msgid ""
"Possible values:\n"
" %s\n"
msgstr ""
"Није стање боја: %s\n"
"Могуће вредности:\n"
" %s\n"
#: tools/gtk-image-tool-convert.c:160 tools/gtk-image-tool-relabel.c:140
#, c-format
msgid "Can't specify both --color-state and --cicp\n"
msgstr "Не можете да одредите и --color-state и --cicp\n"
msgstr ""
#: tools/gtk-image-tool-convert.c:168 tools/gtk-image-tool-relabel.c:148
#, c-format
msgid "Not a supported cicp tuple: %s\n"
msgstr "Није подржан cicp типл: %s\n"
msgstr ""
#: tools/gtk-image-tool-info.c:55
msgid "Format:"
@@ -7652,17 +7681,20 @@ msgid "Color state:"
msgstr "Стање боје:"
#: tools/gtk-image-tool-info.c:77
#, fuzzy
#| msgid "Provide information about the render node."
msgid "Provide information about the image."
msgstr "Обезбеђује податке о слици."
msgstr "Обезбеђује податке о чвору цртача."
#: tools/gtk-image-tool-info.c:96
#, c-format
#, fuzzy, c-format
#| msgid "Can only accept a single .node file\n"
msgid "Can only accept a single image file\n"
msgstr "Може да прихвати само једну датотеку са сликом\n"
msgstr "Може да прихвати само једну .node датотеку\n"
#: tools/gtk-image-tool-relabel.c:96
msgid "Change the color state of the image without conversion."
msgstr "Мења стање боја слике без њеног претварања у други формат."
msgstr ""
#: tools/gtk-image-tool-relabel.c:130
#, c-format
@@ -7670,8 +7702,6 @@ msgid ""
"Not a color state: %s\n"
"Possible values: %s\n"
msgstr ""
"Није стање боје: %s\n"
"Могуће вредности: %s\n"
#: tools/gtk-image-tool-show.c:117 tools/gtk-rendernode-tool-show.c:115
msgid "Don't add a titlebar"
@@ -7679,12 +7709,12 @@ msgstr "Без траке за наслов"
#: tools/gtk-image-tool-show.c:128
msgid "Show one or more images."
msgstr "Прикажи једну или више слика."
msgstr ""
#: tools/gtk-image-tool-utils.c:234
#, c-format
msgid "cicp must be 4 numbers, separated by /\n"
msgstr "cicp мора да садржи 4 броја раздвојена са „/“\n"
msgstr ""
#: tools/gtk-launch.c:40
msgid "Show program version"
@@ -8052,7 +8082,20 @@ msgid "Failed to parse '%s' as number"
msgstr "Не могу да рашчланим „%s“ као број"
#: tools/gtk-rendernode-tool.c:35
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "Usage:\n"
#| " gtk4-rendernode-tool [COMMAND] [OPTION…] FILE\n"
#| "\n"
#| "Perform various tasks on GTK render nodes.\n"
#| "\n"
#| "Commands:\n"
#| " benchmark Benchmark rendering of a node\n"
#| " compare Compare nodes or images\n"
#| " info Provide information about the node\n"
#| " show Show the node\n"
#| " render Take a screenshot of the node\n"
#| "\n"
msgid ""
"Usage:\n"
" gtk4-rendernode-tool [COMMAND] [OPTION…] FILE\n"
@@ -8074,12 +8117,11 @@ msgstr ""
"Обавља разне задатке на чворовима Гтк цртача.\n"
"\n"
"Наредбе:\n"
" benchmark Прати учинак исцртавања чвора\n"
" benchmark Прати учинак исцртавања чвора\n"
" compare Упореди чворове или слике\n"
" extract Извлачи урл адресе са подацима\n"
" info Обезбеђује податке о чвору\n"
" show Приказује чвор\n"
" render Прави снимак екрана чвора\n"
" info Обезбеђује податке о чвору\n"
" show Приказује чвор\n"
" render Прави снимак екрана чвора\n"
"\n"
#: tools/gtk-rendernode-tool-benchmark.c:96
@@ -8146,13 +8188,16 @@ msgstr "Не могу да направим цртач: %s\n"
#: tools/gtk-rendernode-tool-extract.c:73
#: tools/gtk-rendernode-tool-extract.c:149
#, c-format
#, fuzzy, c-format
#| msgid "Failed to write header\n"
msgid "Failed to write %s\n"
msgstr "Не могу да упишем %s\n"
msgstr "Нисам успео да запишем заглавље\n"
#: tools/gtk-rendernode-tool-extract.c:292
#, fuzzy
#| msgid "Renderer to use"
msgid "Directory to use"
msgstr "Директоријум за коришћење"
msgstr "Цртач који се користи"
#: tools/gtk-rendernode-tool-extract.c:292
msgid "DIRECTORY"
@@ -8163,8 +8208,10 @@ msgid "Be verbose"
msgstr "Опширнији испис"
#: tools/gtk-rendernode-tool-extract.c:303
#, fuzzy
#| msgid "Show the render node."
msgid "Extract data urls from the render node."
msgstr "Извлачи адресе података из чвора цртача."
msgstr "Приказује исцртани чвор."
#: tools/gtk-rendernode-tool-extract.c:322 tools/gtk-rendernode-tool-info.c:254
#, c-format
@@ -8172,24 +8219,32 @@ msgid "Can only accept a single .node file\n"
msgstr "Може да прихвати само једну .node датотеку\n"
#: tools/gtk-rendernode-tool-info.c:193
#, fuzzy
#| msgid "Number of nodes: %u\n"
msgid "Number of nodes:"
msgstr "Број чворова:"
msgstr "Број чворова: %u\n"
#: tools/gtk-rendernode-tool-info.c:200
#, fuzzy
#| msgid "Depth: %u\n"
msgid "Depth:"
msgstr "Дубина:"
msgstr "Дубина: %u\n"
#: tools/gtk-rendernode-tool-info.c:203
#, fuzzy
#| msgid "Bounds"
msgid "Bounds:"
msgstr "Границе:"
msgstr "Границе"
#: tools/gtk-rendernode-tool-info.c:204
#, fuzzy
#| msgid "Origin: %g %g\n"
msgid "Origin:"
msgstr "Почетак:"
msgstr "Почетак: %g %g\n"
#: tools/gtk-rendernode-tool-info.c:208 tools/gtk-rendernode-tool-info.c:214
msgid "Opaque part:"
msgstr "Непровидни део:"
msgstr ""
#: tools/gtk-rendernode-tool-info.c:235
msgid "Provide information about the render node."

File diff suppressed because it is too large Load Diff

View File

@@ -1708,7 +1708,6 @@ main (int argc, char **argv)
g_option_context_add_main_entries (context, args, GETTEXT_PACKAGE);
g_option_context_parse (context, &argc, &argv, NULL);
g_option_context_free (context);
path = argv[1];
#ifdef G_OS_WIN32