Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c45199e388 | |||
| 27fb9917d8 | |||
| b5d6613a3f | |||
| 5dc77edbe3 | |||
| a3d63b3579 | |||
| 57c12a8661 | |||
| f1ccb9b81a | |||
| 2711cb8dcd | |||
| c79925bd4a | |||
| a1fdf06d80 | |||
| 36d7ca058e | |||
| 6b2b6ceb74 |
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1128,7 +1128,7 @@ gsk_vulkan_device_get_vk_pipeline (GskVulkanDevice *self,
|
||||
&pipeline);
|
||||
|
||||
gdk_profiler_end_markf (begin_time,
|
||||
"Create Vulkan pipeline frag=%s vert=%s",
|
||||
"Create Vulkan pipeline", "frag=%s vert=%s",
|
||||
fragment_shader_name, vertex_shader_name);
|
||||
|
||||
g_free (fragment_shader_name);
|
||||
|
||||
+4
-3
@@ -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 >
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
+24
-2
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -123,14 +123,6 @@ gtk_list_item_widget_setup_object (GtkListFactoryWidget *fw,
|
||||
gtk_list_factory_widget_set_selectable (fw, list_item->selectable);
|
||||
gtk_widget_set_focusable (GTK_WIDGET (self), list_item->focusable);
|
||||
|
||||
if (list_item->selectable)
|
||||
gtk_accessible_update_state (GTK_ACCESSIBLE (self),
|
||||
GTK_ACCESSIBLE_STATE_SELECTED, FALSE,
|
||||
-1);
|
||||
else
|
||||
gtk_accessible_reset_state (GTK_ACCESSIBLE (self),
|
||||
GTK_ACCESSIBLE_STATE_SELECTED);
|
||||
|
||||
gtk_accessible_update_property (GTK_ACCESSIBLE (self),
|
||||
GTK_ACCESSIBLE_PROPERTY_LABEL, list_item->accessible_label,
|
||||
GTK_ACCESSIBLE_PROPERTY_DESCRIPTION, list_item->accessible_description,
|
||||
@@ -184,11 +176,6 @@ gtk_list_item_widget_update_object (GtkListFactoryWidget *fw,
|
||||
/* Track notify manually instead of freeze/thaw_notify for performance reasons. */
|
||||
gboolean notify_item = FALSE, notify_position = FALSE, notify_selected = FALSE;
|
||||
|
||||
if (list_item->selectable)
|
||||
gtk_accessible_update_state (GTK_ACCESSIBLE (self),
|
||||
GTK_ACCESSIBLE_STATE_SELECTED, selected,
|
||||
-1);
|
||||
|
||||
/* FIXME: It's kinda evil to notify external objects from here... */
|
||||
notify_item = gtk_list_item_base_get_item (base) != item;
|
||||
notify_position = gtk_list_item_base_get_position (base) != position;
|
||||
|
||||
Reference in New Issue
Block a user