Compare commits

..

12 Commits

Author SHA1 Message Date
Matthias Clasen
406a32d825 Fix the build 2023-02-12 16:31:40 -05:00
Matthias Clasen
beabe8c33b gsk: Drop an unnecessary call
The renderer should make all the necessary
make_current calls.
2023-02-12 15:12:43 -05:00
Matthias Clasen
90500519d6 gst: Add a comment about context confusion 2023-02-12 15:12:43 -05:00
Matthias Clasen
06921674a9 gsk: Only wait if we need to
If the texture was created in the same context
we are using it in, then waiting on the sync
will be a no-op.
2023-02-12 15:12:43 -05:00
Matthias Clasen
a91fa9a680 gltexture: Only wait if we need to
If the texture was created in the same context
we are downloading it from, then waiting on the
sync will be a no-op.
2023-02-12 15:12:43 -05:00
Matthias Clasen
ead40dc834 gldriver: Add a sync when creating textures 2023-02-12 15:12:43 -05:00
Matthias Clasen
2be928b569 gstreamer: Defer the sync
Don't sync right when we receive the buffer,
pass it along with the texture to be executed
later in the renderer.
2023-02-12 15:12:43 -05:00
Matthias Clasen
621ba6d67c Export gdk_gl_texture_new_with_sync
Otherwise we can't use it in the loadable modules,
like the GStreamer media stream.

This change puts gdk_gl_texture_new_with_sync into
the private, but exported bucket for now. We will
make new public APIs for textures (including
synchronization) when we add color management support.
2023-02-12 15:12:43 -05:00
Matthias Clasen
af929a8787 glarea: Synchronize
Create a fence object and pass it along when
creating the GL texture, so that the GL renderer
can wait for the texture to be ready.
2023-02-12 15:12:43 -05:00
Matthias Clasen
ef986f4256 gsk: Synchronize when using textures
Pass the GLsync object from texture into our
command queue, and when executing the queue,
wait on the sync object the first time we
use its associated texture.
2023-02-12 15:12:41 -05:00
Matthias Clasen
ab36c275cf gltexture: Synchronize when downloading
If the GL texture has a sync object, wait
on it before downloading the data.
2023-02-12 15:09:21 -05:00
Matthias Clasen
720327bc00 gltexture: Optionally take a sync object
Add a new (private, for now) constructor takes
a GLsync together with a texture id, for synchronization.
2023-02-12 15:09:21 -05:00
19 changed files with 583 additions and 630 deletions

13
NEWS
View File

@@ -1,9 +1,8 @@
Overview of Changes in 4.9.4, 12-02-2023
Overview of Changes in 4.9.4, xx-xx-xxxx
========================================
* Printing:
- Add a CPDB backend
- Drop the lpr backend
- Add a CPDB print backend
* GtkFileDialog:
- Robustness fixes
@@ -11,28 +10,20 @@ Overview of Changes in 4.9.4, 12-02-2023
* GtkScaleButton:
- Add an 'active' property
* GtkSearchEntry:
- Add placeholder text
* Fix conflicting type names between gtk and gio
* Gsk:
- Settable filtering for scaled textures
- Add mask nodes
- Some robustness and crash fixes
* Wayland:
- Handle dispatch failing in more places
* Deprecations:
- GtkVolumeButton
* Translation updates:
Belarusian
Chinese (Taiwan)
Georgian
Turkish
Ukrainian
Overview of Changes in 4.9.3, 04-02-2023

View File

@@ -239,14 +239,14 @@ control whether Vulkan should be used.
### `media-gstreamer` and `media-ffmpeg`
By default, GTK will try to build the gstreamer backend for
media playback support. These options can be used to explicitly
media playback support. These option can be used to explicitly
control which media backends should be built.
### `print-cups` and `print-cpdb`
### `print-cups`
By default, GTK will try to build the cups and file print backends
if their dependencies are found. These options can be used to
explicitly control which print backends should be built.
By default, GTK will try to build various print backends
if their dependencies are found. This option can be used
to explicitly control whether the cups print backend should be built.
### `cloudproviders`

View File

@@ -39,6 +39,7 @@ struct _GdkGLTexture {
GdkGLContext *context;
guint id;
GLsync sync;
GdkTexture *saved;
@@ -64,6 +65,7 @@ drop_gl_resources (GdkGLTexture *self)
g_clear_object (&self->context);
self->id = 0;
self->sync = NULL;
}
static void
@@ -99,6 +101,10 @@ gdk_gl_texture_invoke_callback (gpointer data)
context = gdk_display_get_gl_context (gdk_gl_context_get_display (invoke->self->context));
gdk_gl_context_make_current (context);
if (invoke->self->sync && context != invoke->self->context)
glWaitSync (invoke->self->sync, 0, GL_TIMEOUT_IGNORED);
glBindTexture (GL_TEXTURE_2D, invoke->self->id);
invoke->func (invoke->self, context, invoke->data);
@@ -440,6 +446,46 @@ gdk_gl_texture_new (GdkGLContext *context,
int height,
GDestroyNotify destroy,
gpointer data)
{
g_return_val_if_fail (GDK_IS_GL_CONTEXT (context), NULL);
g_return_val_if_fail (id != 0, NULL);
g_return_val_if_fail (width > 0, NULL);
g_return_val_if_fail (height > 0, NULL);
return gdk_gl_texture_new_with_sync (context, id, NULL, width, height, destroy, data);
}
/*< private >
* gdk_gl_texture_new_with_sync:
* @context: a `GdkGLContext`
* @id: the ID of a texture that was created with @context
* @sync: (nullable): an optional GLsync object
* @width: the nominal width of the texture
* @height: the nominal height of the texture
* @destroy: a destroy notify that will be called when the GL resources
* are released
* @data: data that gets passed to @destroy
*
* Creates a new texture for an existing GL texture.
*
* If @sync is given, consumers of the texture are required to wait on
* it before attempting to use the GL texture.
*
* The GL texture and the sync object must stay alive unmodified until
* @destroy is called, which will happen when the GdkTexture object is
* finalized, or due to an explicit call of [method@Gdk.GLTexture.release].
*
* Return value: (transfer full) (type GdkGLTexture): A newly-created
* `GdkTexture`
*/
GdkTexture *
gdk_gl_texture_new_with_sync (GdkGLContext *context,
guint id,
gpointer sync,
int width,
int height,
GDestroyNotify destroy,
gpointer data)
{
GdkGLTexture *self;
@@ -455,6 +501,7 @@ gdk_gl_texture_new (GdkGLContext *context,
self->context = g_object_ref (context);
self->id = id;
self->sync = sync;
self->destroy = destroy;
self->data = data;
@@ -463,3 +510,8 @@ gdk_gl_texture_new (GdkGLContext *context,
return GDK_TEXTURE (self);
}
gpointer
gdk_gl_texture_get_sync (GdkGLTexture *self)
{
return self->sync;
}

View File

@@ -9,6 +9,16 @@ G_BEGIN_DECLS
GdkGLContext * gdk_gl_texture_get_context (GdkGLTexture *self);
guint gdk_gl_texture_get_id (GdkGLTexture *self);
gpointer gdk_gl_texture_get_sync (GdkGLTexture *self);
GDK_AVAILABLE_IN_4_10
GdkTexture * gdk_gl_texture_new_with_sync (GdkGLContext *context,
guint id,
gpointer sync,
int width,
int height,
GDestroyNotify destroy,
gpointer data);
G_END_DECLS

View File

@@ -403,6 +403,7 @@ gsk_gl_command_queue_dispose (GObject *object)
gsk_gl_command_batches_clear (&self->batches);
gsk_gl_command_binds_clear (&self->batch_binds);
gsk_gl_command_uniforms_clear (&self->batch_uniforms);
gsk_gl_syncs_clear (&self->syncs);
gsk_gl_buffer_destroy (&self->vertices);
@@ -425,6 +426,7 @@ gsk_gl_command_queue_init (GskGLCommandQueue *self)
gsk_gl_command_batches_init (&self->batches, 128);
gsk_gl_command_binds_init (&self->batch_binds, 1024);
gsk_gl_command_uniforms_init (&self->batch_uniforms, 2048);
gsk_gl_syncs_init (&self->syncs, 10);
gsk_gl_buffer_init (&self->vertices, GL_ARRAY_BUFFER, sizeof (GskGLDrawVertex));
}
@@ -1098,17 +1100,25 @@ gsk_gl_command_queue_execute (GskGLCommandQueue *self,
if G_UNLIKELY (batch->draw.bind_count > 0)
{
const GskGLCommandBind *bind = &self->batch_binds.items[batch->draw.bind_offset];
for (guint i = 0; i < batch->draw.bind_count; i++)
{
if (textures[bind->texture] != bind->id)
{
GskGLSync *s;
if (active != bind->texture)
{
active = bind->texture;
glActiveTexture (GL_TEXTURE0 + bind->texture);
}
s = gsk_gl_syncs_get_sync (&self->syncs, bind->id);
if (s && s->sync)
{
glWaitSync ((GLsync) s->sync, 0, GL_TIMEOUT_IGNORED);
s->sync = NULL;
}
glBindTexture (GL_TEXTURE_2D, bind->id);
textures[bind->texture] = bind->id;
}
@@ -1236,6 +1246,7 @@ gsk_gl_command_queue_end_frame (GskGLCommandQueue *self)
self->batches.len = 0;
self->batch_binds.len = 0;
self->batch_uniforms.len = 0;
self->syncs.len = 0;
self->n_uploads = 0;
self->tail_batch_index = -1;
self->in_frame = FALSE;

View File

@@ -167,9 +167,15 @@ typedef union _GskGLCommandBatch
G_STATIC_ASSERT (sizeof (GskGLCommandBatch) == 32);
typedef struct _GskGLSync {
guint id;
gpointer sync;
} GskGLSync;
DEFINE_INLINE_ARRAY (GskGLCommandBatches, gsk_gl_command_batches, GskGLCommandBatch)
DEFINE_INLINE_ARRAY (GskGLCommandBinds, gsk_gl_command_binds, GskGLCommandBind)
DEFINE_INLINE_ARRAY (GskGLCommandUniforms, gsk_gl_command_uniforms, GskGLCommandUniform)
DEFINE_INLINE_ARRAY (GskGLSyncs, gsk_gl_syncs, GskGLSync)
struct _GskGLCommandQueue
{
@@ -225,6 +231,8 @@ struct _GskGLCommandQueue
*/
GskGLCommandUniforms batch_uniforms;
GskGLSyncs syncs;
/* Discovered max texture size when loading the command queue so that we
* can either scale down or slice textures to fit within this size. Assumed
* to be both height and width.
@@ -354,6 +362,37 @@ gsk_gl_command_queue_bind_framebuffer (GskGLCommandQueue *self,
return ret;
}
static inline GskGLSync *
gsk_gl_syncs_get_sync (GskGLSyncs *syncs,
guint id)
{
for (unsigned int i = 0; i < syncs->len; i++)
{
GskGLSync *sync = &syncs->items[i];
if (sync->id == id)
return sync;
}
return NULL;
}
static inline void
gsk_gl_syncs_add_sync (GskGLSyncs *syncs,
guint id,
gpointer sync)
{
GskGLSync *s;
s = gsk_gl_syncs_get_sync (syncs, id);
if (s)
g_assert (s->sync == sync);
else
{
s = gsk_gl_syncs_append (syncs);
s->id = id;
s->sync = sync;
}
}
G_END_DECLS
#endif /* __GSK_GL_COMMAND_QUEUE_PRIVATE_H__ */

View File

@@ -1329,6 +1329,7 @@ typedef struct _GskGLTextureState
{
GdkGLContext *context;
GLuint texture_id;
GLsync sync;
} GskGLTextureState;
static void
@@ -1341,6 +1342,7 @@ create_texture_from_texture_destroy (gpointer data)
gdk_gl_context_make_current (state->context);
glDeleteTextures (1, &state->texture_id);
glDeleteSync (state->sync);
g_clear_object (&state->context);
g_slice_free (GskGLTextureState, state);
}
@@ -1375,10 +1377,13 @@ gsk_gl_driver_create_gdk_texture (GskGLDriver *self,
texture->texture_id = 0;
gsk_gl_texture_free (texture);
return gdk_gl_texture_new (self->command_queue->context,
texture_id,
width,
height,
create_texture_from_texture_destroy,
state);
state->sync = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
return gdk_gl_texture_new_with_sync (self->command_queue->context,
texture_id,
state->sync,
width,
height,
create_texture_from_texture_destroy,
state);
}

View File

@@ -264,6 +264,27 @@ gsk_gl_program_set_uniform_texture (GskGLProgram *self,
texture_slot);
}
static inline void
gsk_gl_program_set_uniform_texture_with_sync (GskGLProgram *self,
guint key,
guint stamp,
GLenum texture_target,
GLenum texture_slot,
guint texture_id,
gpointer sync)
{
gsk_gl_attachment_state_bind_texture (self->driver->command_queue->attachments,
texture_target,
texture_slot,
texture_id);
gsk_gl_uniform_state_set_texture (self->uniforms,
self->program_info,
key,
stamp,
texture_slot);
gsk_gl_syncs_add_sync (&self->driver->command_queue->syncs, texture_id, sync);
}
static inline void
gsk_gl_program_set_uniform_matrix (GskGLProgram *self,
guint key,

View File

@@ -190,6 +190,7 @@ typedef struct _GskGLRenderOffscreen
/* Return location for texture ID */
guint texture_id;
gpointer sync;
/* Whether to force creating a new texture, even if the
* input already is a texture
@@ -3497,12 +3498,17 @@ gsk_gl_render_job_upload_texture (GskGLRenderJob *job,
int mag_filter,
GskGLRenderOffscreen *offscreen)
{
GdkGLTexture *gl_texture = NULL;
if (GDK_IS_GL_TEXTURE (texture))
gl_texture = (GdkGLTexture *) texture;
if (min_filter == GL_LINEAR &&
mag_filter == GL_LINEAR &&
gsk_gl_texture_library_can_cache ((GskGLTextureLibrary *)job->driver->icons_library,
texture->width,
texture->height) &&
!GDK_IS_GL_TEXTURE (texture))
!gl_texture)
{
const GskGLIconData *icon_data;
@@ -3514,6 +3520,9 @@ gsk_gl_render_job_upload_texture (GskGLRenderJob *job,
{
offscreen->texture_id = gsk_gl_driver_load_texture (job->driver, texture, min_filter, mag_filter);
init_full_texture_region (offscreen);
if (gl_texture && offscreen->texture_id == gdk_gl_texture_get_id (gl_texture) &&
gdk_gl_texture_get_context (gl_texture) != gsk_gl_command_queue_get_context (job->command_queue))
offscreen->sync = gdk_gl_texture_get_sync (gl_texture);
}
}
@@ -3535,11 +3544,12 @@ gsk_gl_render_job_visit_texture (GskGLRenderJob *job,
g_assert (offscreen.was_offscreen == FALSE);
gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blit));
gsk_gl_program_set_uniform_texture (job->current_program,
UNIFORM_SHARED_SOURCE, 0,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id);
gsk_gl_program_set_uniform_texture_with_sync (job->current_program,
UNIFORM_SHARED_SOURCE, 0,
GL_TEXTURE_2D,
GL_TEXTURE0,
offscreen.texture_id,
offscreen.sync);
gsk_gl_render_job_draw_offscreen (job, bounds, &offscreen);
gsk_gl_render_job_end_draw (job);
}

View File

@@ -60,16 +60,12 @@
*
* `GtkAssistant` has a single CSS node with the name window and style
* class .assistant.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
/**
* GtkAssistantPage:
*
* `GtkAssistantPage` is an auxiliary object used by `GtkAssistant.
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
#include "config.h"
@@ -279,8 +275,6 @@ gtk_assistant_page_class_init (GtkAssistantPageClass *class)
* GtkAssistantPage:page-type:
*
* The type of the assistant page.
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_TYPE,
@@ -293,8 +287,6 @@ gtk_assistant_page_class_init (GtkAssistantPageClass *class)
* GtkAssistantPage:title:
*
* The title of the page.
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_TITLE,
@@ -309,8 +301,6 @@ gtk_assistant_page_class_init (GtkAssistantPageClass *class)
*
* GTK uses this information to control the sensitivity
* of the navigation buttons.
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_COMPLETE,
@@ -322,8 +312,6 @@ gtk_assistant_page_class_init (GtkAssistantPageClass *class)
* GtkAssistantPage:child:
*
* The child widget.
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
CHILD_PROP_CHILD,
@@ -530,8 +518,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
* @assistant: the `GtkAssistant`
*
* Emitted when then the cancel button is clicked.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
signals[CANCEL] =
g_signal_new (I_("cancel"),
@@ -552,8 +538,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
*
* A handler for this signal can do any preparations which are
* necessary before showing @page.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
signals[PREPARE] =
g_signal_new (I_("prepare"),
@@ -579,8 +563,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
* %GTK_ASSISTANT_PAGE_PROGRESS after the confirmation page and handle
* this operation within the [signal@Gtk.Assistant::prepare] signal of
* the progress page.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
signals[APPLY] =
g_signal_new (I_("apply"),
@@ -598,8 +580,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
* Emitted either when the close button of a summary page is clicked,
* or when the apply button in the last page in the flow (of type
* %GTK_ASSISTANT_PAGE_CONFIRM) is clicked.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
signals[CLOSE] =
g_signal_new (I_("close"),
@@ -615,8 +595,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
* @assistant: the `GtkAssistant`
*
* The action signal for the Escape binding.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
signals[ESCAPE] =
g_signal_new_class_handler (I_("escape"),
@@ -640,8 +618,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
*
* For technical reasons, this property is declared as an integer
* property, but you should only set it to %TRUE or %FALSE.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class,
PROP_USE_HEADER_BAR,
@@ -1459,8 +1435,6 @@ gtk_assistant_close_request (GtkWindow *window)
* Creates a new `GtkAssistant`.
*
* Returns: a newly created `GtkAssistant`
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget*
gtk_assistant_new (void)
@@ -1481,8 +1455,6 @@ gtk_assistant_new (void)
* Returns: The index (starting from 0) of the current
* page in the @assistant, or -1 if the @assistant has no pages,
* or no current page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
int
gtk_assistant_get_current_page (GtkAssistant *assistant)
@@ -1508,8 +1480,6 @@ gtk_assistant_get_current_page (GtkAssistant *assistant)
* Note that this will only be necessary in custom buttons,
* as the @assistant flow can be set with
* gtk_assistant_set_forward_page_func().
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_set_current_page (GtkAssistant *assistant,
@@ -1555,8 +1525,6 @@ gtk_assistant_set_current_page (GtkAssistant *assistant,
*
* This function is for use when creating pages of the
* %GTK_ASSISTANT_PAGE_CUSTOM type.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_next_page (GtkAssistant *assistant)
@@ -1580,8 +1548,6 @@ gtk_assistant_next_page (GtkAssistant *assistant)
*
* This function is for use when creating pages of the
* %GTK_ASSISTANT_PAGE_CUSTOM type.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_previous_page (GtkAssistant *assistant)
@@ -1615,8 +1581,6 @@ gtk_assistant_previous_page (GtkAssistant *assistant)
* Returns the number of pages in the @assistant
*
* Returns: the number of pages in the @assistant
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
int
gtk_assistant_get_n_pages (GtkAssistant *assistant)
@@ -1636,8 +1600,6 @@ gtk_assistant_get_n_pages (GtkAssistant *assistant)
*
* Returns: (nullable) (transfer none): the child widget, or %NULL
* if @page_num is out of bounds
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget*
gtk_assistant_get_nth_page (GtkAssistant *assistant,
@@ -1670,8 +1632,6 @@ gtk_assistant_get_nth_page (GtkAssistant *assistant,
* Prepends a page to the @assistant.
*
* Returns: the index (starting at 0) of the inserted page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
int
gtk_assistant_prepend_page (GtkAssistant *assistant,
@@ -1691,8 +1651,6 @@ gtk_assistant_prepend_page (GtkAssistant *assistant,
* Appends a page to the @assistant.
*
* Returns: the index (starting at 0) of the inserted page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
int
gtk_assistant_append_page (GtkAssistant *assistant,
@@ -1714,8 +1672,6 @@ gtk_assistant_append_page (GtkAssistant *assistant,
* Inserts a page in the @assistant at a given position.
*
* Returns: the index (starting from 0) of the inserted page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
int
gtk_assistant_insert_page (GtkAssistant *assistant,
@@ -1814,8 +1770,6 @@ gtk_assistant_add_page (GtkAssistant *assistant,
* or -1 to remove the last page
*
* Removes the @page_nums page from @assistant.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_remove_page (GtkAssistant *assistant,
@@ -1851,8 +1805,6 @@ gtk_assistant_remove_page (GtkAssistant *assistant,
* Setting @page_func to %NULL will make the assistant to
* use the default forward function, which just goes to the
* next visible page.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_set_forward_page_func (GtkAssistant *assistant,
@@ -1901,8 +1853,6 @@ add_to_action_area (GtkAssistant *assistant,
* @child: a `GtkWidget`
*
* Adds a widget to the action area of a `GtkAssistant`.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_add_action_widget (GtkAssistant *assistant,
@@ -1931,8 +1881,6 @@ gtk_assistant_add_action_widget (GtkAssistant *assistant,
* @child: a `GtkWidget`
*
* Removes a widget from the action area of a `GtkAssistant`.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_remove_action_widget (GtkAssistant *assistant,
@@ -1962,8 +1910,6 @@ gtk_assistant_remove_action_widget (GtkAssistant *assistant,
*
* The title is displayed in the header area of the assistant
* when @page is the current page.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_set_page_title (GtkAssistant *assistant,
@@ -1993,8 +1939,6 @@ gtk_assistant_set_page_title (GtkAssistant *assistant,
* Gets the title for @page.
*
* Returns: the title for @page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
const char *
gtk_assistant_get_page_title (GtkAssistant *assistant,
@@ -2024,8 +1968,6 @@ gtk_assistant_get_page_title (GtkAssistant *assistant,
* Sets the page type for @page.
*
* The page type determines the page behavior in the @assistant.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_set_page_type (GtkAssistant *assistant,
@@ -2055,8 +1997,6 @@ gtk_assistant_set_page_type (GtkAssistant *assistant,
* Gets the page type of @page.
*
* Returns: the page type of @page
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkAssistantPageType
gtk_assistant_get_page_type (GtkAssistant *assistant,
@@ -2087,8 +2027,6 @@ gtk_assistant_get_page_type (GtkAssistant *assistant,
*
* This will make @assistant update the buttons state
* to be able to continue the task.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_set_page_complete (GtkAssistant *assistant,
@@ -2118,8 +2056,6 @@ gtk_assistant_set_page_complete (GtkAssistant *assistant,
* Gets whether @page is complete.
*
* Returns: %TRUE if @page is complete.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
gboolean
gtk_assistant_get_page_complete (GtkAssistant *assistant,
@@ -2153,8 +2089,6 @@ gtk_assistant_get_page_complete (GtkAssistant *assistant,
* One situation where it can be necessary to call this
* function is when changing a value on the current page
* affects the future page flow of the assistant.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_update_buttons_state (GtkAssistant *assistant)
@@ -2178,8 +2112,6 @@ gtk_assistant_update_buttons_state (GtkAssistant *assistant)
* or undone. For example, showing a progress page to track
* a long-running, unreversible operation after the user has
* clicked apply on a confirmation page.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_assistant_commit (GtkAssistant *assistant)
@@ -2257,8 +2189,6 @@ gtk_assistant_buildable_custom_finished (GtkBuildable *buildable,
* Returns the `GtkAssistantPage` object for @child.
*
* Returns: (transfer none): the `GtkAssistantPage` for @child
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkAssistantPage *
gtk_assistant_get_page (GtkAssistant *assistant,
@@ -2275,8 +2205,6 @@ gtk_assistant_get_page (GtkAssistant *assistant,
* Returns the child to which @page belongs.
*
* Returns: (transfer none): the child to which @page belongs
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget *
gtk_assistant_page_get_child (GtkAssistantPage *page)
@@ -2388,8 +2316,6 @@ gtk_assistant_pages_new (GtkAssistant *assistant)
* Gets a list model of the assistant pages.
*
* Returns: (transfer full) (attributes element-type=GtkAssistantPage): A list model of the pages.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GListModel *
gtk_assistant_get_pages (GtkAssistant *assistant)

View File

@@ -34,8 +34,6 @@
* same context which was used to request sizes for a given `GtkTreeModel`
* row also be used for the same row when calling other `GtkCellArea` APIs
* such as gtk_cell_area_render() and gtk_cell_area_event().
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
#include "config.h"
@@ -109,8 +107,6 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
* GtkCellAreaContext:area:
*
* The `GtkCellArea` this context was created by
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
PROP_CELL_AREA,
@@ -124,8 +120,6 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
* The minimum width for the `GtkCellArea` in this context
* for all `GtkTreeModel` rows that this context was requested
* for using gtk_cell_area_get_preferred_width().
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
PROP_MIN_WIDTH,
@@ -139,8 +133,6 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
* The natural width for the `GtkCellArea` in this context
* for all `GtkTreeModel` rows that this context was requested
* for using gtk_cell_area_get_preferred_width().
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
PROP_NAT_WIDTH,
@@ -154,8 +146,6 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
* The minimum height for the `GtkCellArea` in this context
* for all `GtkTreeModel` rows that this context was requested
* for using gtk_cell_area_get_preferred_height().
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
PROP_MIN_HEIGHT,
@@ -169,8 +159,6 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
* The natural height for the `GtkCellArea` in this context
* for all `GtkTreeModel` rows that this context was requested
* for using gtk_cell_area_get_preferred_height().
*
* Deprecated: 4.10: This object will be removed in GTK 5
*/
g_object_class_install_property (object_class,
PROP_NAT_HEIGHT,
@@ -321,7 +309,7 @@ gtk_cell_area_context_real_allocate (GtkCellAreaContext *context,
*
* Returns: (transfer none): the `GtkCellArea` this context was created by.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
GtkCellArea *
gtk_cell_area_context_get_area (GtkCellAreaContext *context)
@@ -360,7 +348,7 @@ gtk_cell_area_context_get_area (GtkCellAreaContext *context)
* of all the displayed row heights using
* gtk_cell_area_get_preferred_height_for_width().
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_reset (GtkCellAreaContext *context)
@@ -389,7 +377,7 @@ gtk_cell_area_context_reset (GtkCellAreaContext *context)
* rows. This is generally the case for `GtkTreeView` when
* `GtkTreeView:fixed-height-mode` is enabled.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_allocate (GtkCellAreaContext *context,
@@ -413,7 +401,7 @@ gtk_cell_area_context_allocate (GtkCellAreaContext *context,
* After gtk_cell_area_context_reset() is called and/or before ever
* requesting the size of a `GtkCellArea`, the returned values are 0.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_get_preferred_width (GtkCellAreaContext *context,
@@ -443,7 +431,7 @@ gtk_cell_area_context_get_preferred_width (GtkCellAreaContext *context,
* After gtk_cell_area_context_reset() is called and/or before ever
* requesting the size of a `GtkCellArea`, the returned values are 0.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_get_preferred_height (GtkCellAreaContext *context,
@@ -474,7 +462,7 @@ gtk_cell_area_context_get_preferred_height (GtkCellAreaContext *context,
* After gtk_cell_area_context_reset() is called and/or before ever
* requesting the size of a `GtkCellArea`, the returned values are -1.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_get_preferred_height_for_width (GtkCellAreaContext *context,
@@ -504,7 +492,7 @@ gtk_cell_area_context_get_preferred_height_for_width (GtkCellAreaContext *contex
* After gtk_cell_area_context_reset() is called and/or before ever
* requesting the size of a `GtkCellArea`, the returned values are -1.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_get_preferred_width_for_height (GtkCellAreaContext *context,
@@ -533,7 +521,7 @@ gtk_cell_area_context_get_preferred_width_for_height (GtkCellAreaContext *contex
* context was recently reset with gtk_cell_area_context_reset(),
* the returned value will be -1.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_get_allocation (GtkCellAreaContext *context,
@@ -565,7 +553,7 @@ gtk_cell_area_context_get_allocation (GtkCellAreaContext *context,
* progressively push the requested width over a series of
* gtk_cell_area_get_preferred_width() requests.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_push_preferred_width (GtkCellAreaContext *context,
@@ -609,7 +597,7 @@ gtk_cell_area_context_push_preferred_width (GtkCellAreaContext *context,
* progressively push the requested height over a series of
* gtk_cell_area_get_preferred_height() requests.
*
* Deprecated: 4.10: This object will be removed in GTK 5
* Deprecated: 4.10
*/
void
gtk_cell_area_context_push_preferred_height (GtkCellAreaContext *context,

View File

@@ -70,8 +70,6 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
* [property@Gtk.LockButton:tooltip-lock],
* [property@Gtk.LockButton:tooltip-unlock] and
* [property@Gtk.LockButton:tooltip-not-authorized] properties.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
struct _GtkLockButton
@@ -273,8 +271,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:permission: (attributes org.gtk.Property.get=gtk_lock_button_get_permission org.gtk.Property.set=gtk_lock_button_set_permission)
*
* The `GPermission object controlling this button.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_PERMISSION,
g_param_spec_object ("permission", NULL, NULL,
@@ -286,8 +282,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:text-lock:
*
* The text to display when prompting the user to lock.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_TEXT_LOCK,
g_param_spec_string ("text-lock", NULL, NULL,
@@ -300,8 +294,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:text-unlock:
*
* The text to display when prompting the user to unlock.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_TEXT_UNLOCK,
g_param_spec_string ("text-unlock", NULL, NULL,
@@ -314,8 +306,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:tooltip-lock:
*
* The tooltip to display when prompting the user to lock.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_TOOLTIP_LOCK,
g_param_spec_string ("tooltip-lock", NULL, NULL,
@@ -328,8 +318,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:tooltip-unlock:
*
* The tooltip to display when prompting the user to unlock.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_TOOLTIP_UNLOCK,
g_param_spec_string ("tooltip-unlock", NULL, NULL,
@@ -342,8 +330,6 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass)
* GtkLockButton:tooltip-not-authorized:
*
* The tooltip to display when the user cannot obtain authorization.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class, PROP_TOOLTIP_NOT_AUTHORIZED,
g_param_spec_string ("tooltip-not-authorized", NULL, NULL,
@@ -525,8 +511,6 @@ gtk_lock_button_clicked (GtkButton *widget)
* Creates a new lock button which reflects the @permission.
*
* Returns: a new `GtkLockButton`
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget *
gtk_lock_button_new (GPermission *permission)
@@ -543,8 +527,6 @@ gtk_lock_button_new (GPermission *permission)
* Obtains the `GPermission` object that controls @button.
*
* Returns: (transfer none) (nullable): the `GPermission` of @button
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GPermission *
gtk_lock_button_get_permission (GtkLockButton *button)
@@ -560,8 +542,6 @@ gtk_lock_button_get_permission (GtkLockButton *button)
* @permission: (nullable): a `GPermission` object
*
* Sets the `GPermission` object that controls @button.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_lock_button_set_permission (GtkLockButton *button,

View File

@@ -77,8 +77,6 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
* ## CSS node
*
* `GtkStatusbar` has a single CSS node with name `statusbar`.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
typedef struct _GtkStatusbarMsg GtkStatusbarMsg;
@@ -169,8 +167,6 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
* @text: the message that was pushed
*
* Emitted whenever a new message gets pushed onto a statusbar's stack.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
statusbar_signals[SIGNAL_TEXT_PUSHED] =
g_signal_new (I_("text-pushed"),
@@ -190,8 +186,6 @@ gtk_statusbar_class_init (GtkStatusbarClass *class)
* @text: the message that was just popped
*
* Emitted whenever a new message is popped off a statusbar's stack.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
statusbar_signals[SIGNAL_TEXT_POPPED] =
g_signal_new (I_("text-popped"),
@@ -231,8 +225,6 @@ gtk_statusbar_init (GtkStatusbar *statusbar)
* Creates a new `GtkStatusbar` ready for messages.
*
* Returns: the new `GtkStatusbar`
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget*
gtk_statusbar_new (void)
@@ -265,8 +257,6 @@ gtk_statusbar_update (GtkStatusbar *statusbar,
* Note that the description is not shown in the UI.
*
* Returns: an integer id
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
guint
gtk_statusbar_get_context_id (GtkStatusbar *statusbar,
@@ -327,8 +317,6 @@ gtk_statusbar_msg_free (GtkStatusbarMsg *msg)
*
* Returns: a message id that can be used with
* [method@Gtk.Statusbar.remove].
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
guint
gtk_statusbar_push (GtkStatusbar *statusbar,
@@ -363,8 +351,6 @@ gtk_statusbar_push (GtkStatusbar *statusbar,
* Note that this may not change the displayed message,
* if the message at the top of the stack has a different
* context id.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_statusbar_pop (GtkStatusbar *statusbar,
@@ -409,8 +395,6 @@ gtk_statusbar_pop (GtkStatusbar *statusbar,
*
* Forces the removal of a message from a statusbars stack.
* The exact @context_id and @message_id must be specified.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_statusbar_remove (GtkStatusbar *statusbar,
@@ -459,8 +443,6 @@ gtk_statusbar_remove (GtkStatusbar *statusbar,
*
* Forces the removal of all messages from a statusbar's
* stack with the exact @context_id.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
void
gtk_statusbar_remove_all (GtkStatusbar *statusbar,
@@ -517,8 +499,6 @@ gtk_statusbar_remove_all (GtkStatusbar *statusbar,
* Retrieves the contents of the label in `GtkStatusbar`.
*
* Returns: (transfer none): the contents of the statusbar
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
const char *
gtk_statusbar_get_message (GtkStatusbar *statusbar)

View File

@@ -44,8 +44,6 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
* volume control.
*
* ![An example GtkVolumeButton](volumebutton.png)
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
typedef struct _GtkVolumeButtonClass GtkVolumeButtonClass;
@@ -170,8 +168,6 @@ gtk_volume_button_class_init (GtkVolumeButtonClass *klass)
*
* Note that if the symbolic icons are not available in your installed
* theme, then the normal (potentially colorful) icons will be used.
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
g_object_class_install_property (gobject_class,
PROP_SYMBOLIC,
@@ -204,8 +200,6 @@ gtk_volume_button_init (GtkVolumeButton *button)
* [class@Gtk.ScaleButton].
*
* Returns: a new `GtkVolumeButton`
*
* Deprecated: 4.10: This widget will be removed in GTK 5
*/
GtkWidget *
gtk_volume_button_new (void)

View File

@@ -32,6 +32,7 @@
#include "gtksnapshot.h"
#include "gtkrenderlayoutprivate.h"
#include "gtkcssnodeprivate.h"
#include "gdk/gdkgltextureprivate.h"
#include <epoxy/gl.h>
@@ -144,6 +145,7 @@
typedef struct {
guint id;
GLsync sync;
int width;
int height;
GdkTexture *holder;
@@ -394,6 +396,8 @@ delete_one_texture (gpointer data)
texture->id = 0;
}
g_clear_pointer (&texture->sync, glDeleteSync);
g_free (texture);
}
@@ -673,6 +677,7 @@ release_texture (gpointer data)
{
Texture *texture = data;
texture->holder = NULL;
g_clear_pointer (&texture->sync, glDeleteSync);
}
static void
@@ -735,11 +740,13 @@ gtk_gl_area_snapshot (GtkWidget *widget,
priv->texture = NULL;
priv->textures = g_list_prepend (priv->textures, texture);
texture->holder = gdk_gl_texture_new (priv->context,
texture->id,
texture->width,
texture->height,
release_texture, texture);
texture->sync = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
texture->holder = gdk_gl_texture_new_with_sync (priv->context,
texture->id,
texture->sync,
texture->width,
texture->height,
release_texture, texture);
/* Our texture is rendered by OpenGL, so it is upside down,
* compared to what GSK expects, so flip it back.

View File

@@ -832,42 +832,6 @@ gtk_search_entry_get_key_controller (GtkSearchEntry *entry)
return gtk_text_get_key_controller (GTK_TEXT (entry->entry));
}
/**
* gtk_search_entry_get_placeholder_text:
* @entry: a `GtkSearchEntry`
*
* Gets the placeholder text associated with @entry.
*
* Returns: (nullable): The placeholder text.
*
* Since: 4.10
*/
const char *
gtk_search_entry_get_placeholder_text (GtkSearchEntry *entry)
{
g_return_val_if_fail (GTK_IS_SEARCH_ENTRY (entry), NULL);
return gtk_text_get_placeholder_text (GTK_TEXT (entry->entry));
}
/**
* gtk_search_entry_set_placeholder_text:
* @entry: a `GtkSearchEntry`
* @text: (nullable): the text to set as a placeholder
*
* Sets the placeholder text associated with @entry.
*
* Since: 4.10
*/
void
gtk_search_entry_set_placeholder_text (GtkSearchEntry *entry,
const char *text)
{
g_return_if_fail (GTK_IS_SEARCH_ENTRY (entry));
gtk_text_set_placeholder_text (GTK_TEXT (entry->entry), text);
}
GtkText *
gtk_search_entry_get_text_widget (GtkSearchEntry *entry)
{

View File

@@ -60,12 +60,6 @@ void gtk_search_entry_set_search_delay (GtkSearchEntry *entry,
GDK_AVAILABLE_IN_4_8
guint gtk_search_entry_get_search_delay (GtkSearchEntry *entry);
GDK_AVAILABLE_IN_4_10
void gtk_search_entry_set_placeholder_text (GtkSearchEntry *entry,
const char *text);
GDK_AVAILABLE_IN_4_10
const char * gtk_search_entry_get_placeholder_text (GtkSearchEntry *entry);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkSearchEntry, g_object_unref)
G_END_DECLS

View File

@@ -21,6 +21,7 @@
#include "config.h"
#include "gtkgstsinkprivate.h"
#include "gdkgltextureprivate.h"
#include "gtkgstpaintableprivate.h"
@@ -290,19 +291,22 @@ gtk_gst_sink_texture_from_buffer (GtkGstSink *self,
GstGLSyncMeta *sync_meta;
sync_meta = gst_buffer_get_gl_sync_meta (buffer);
if (sync_meta) {
if (sync_meta)
gst_gl_sync_meta_set_sync_point (sync_meta, self->gst_context);
gst_gl_context_activate (self->gst_gdk_context, TRUE);
gst_gl_sync_meta_wait (sync_meta, self->gst_gdk_context);
gst_gl_context_activate (self->gst_gdk_context, FALSE);
}
texture = gdk_gl_texture_new (self->gdk_context,
*(guint *) frame->data[0],
frame->info.width,
frame->info.height,
(GDestroyNotify) video_frame_free,
frame);
/* Note: using the gdk_context here is a (harmless) lie,
* since the texture really originates in the gst_context.
* But that is not a GdkGLContext. It is harmless, because
* we are never using the texture in the gdk_context, so we
* never make the (erroneous) decision to ignore the sync.
*/
texture = gdk_gl_texture_new_with_sync (self->gdk_context,
*(guint *) frame->data[0],
sync_meta ? sync_meta->data : NULL,
frame->info.width,
frame->info.height,
(GDestroyNotify) video_frame_free,
frame);
*pixel_aspect_ratio = ((double) frame->info.par_n) / ((double) frame->info.par_d);
}

779
po/uk.po

File diff suppressed because it is too large Load Diff