summaryrefslogtreecommitdiff
path: root/recipes/glib-2.0/glib-2.0-2.24.0
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/glib-2.0/glib-2.0-2.24.0')
-rw-r--r--recipes/glib-2.0/glib-2.0-2.24.0/gio.patch255
1 files changed, 255 insertions, 0 deletions
diff --git a/recipes/glib-2.0/glib-2.0-2.24.0/gio.patch b/recipes/glib-2.0/glib-2.0-2.24.0/gio.patch
new file mode 100644
index 0000000000..37cd300b2e
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0-2.24.0/gio.patch
@@ -0,0 +1,255 @@
+From: Jason Smith <jason.smith@canonical.com>
+Subject: add new extension point in GIO for use with multiple applications
+
+I am providing here a patch for GIO which opens up a new extension point. This
+extension point is useful to do quite a few things, however its primary target
+is a window matching library called wncksync. Wncksync is used to match windows
+by the XID to the .desktop file on the system they were launched from. With
+this patch wncksync becomes incredibly accurate at doing this, having very few
+flaws. Additionally the Zeitgeist developers are aware of this patch and intend
+on using it to improve their application as well.
+
+I will keep this short as I am sure there will need to be a conversation here
+about the patch, its implications, if and how to include it, and of course the
+code itself.
+
+Cheers,
+Jason
+
+https://bugzilla.gnome.org/show_bug.cgi?id=606960
+
+---
+
+*** a/gio/gdesktopappinfo.c 2009-10-16 23:57:29.436561111 -0400
+--- b/gio/gdesktopappinfo.c 2009-10-17 00:06:28.716984254 -0400
+***************
+*** 69,74 ****
+--- 69,78 ----
+ static void mime_info_cache_reload (const char *dir);
+ static gboolean g_desktop_app_info_ensure_saved (GDesktopAppInfo *info,
+ GError **error);
++ static void
++ g_desktop_app_info_launch_handler_on_launched (GDesktopAppInfoLaunchHandler *launch_handler,
++ const char *desktop_file_path,
++ gint pid);
+
+ /**
+ * GDesktopAppInfo:
+***************
+*** 859,864 ****
+--- 863,907 ----
+ g_setenv ("DESKTOP_STARTUP_ID", data->sn_id, TRUE);
+ }
+
++ static void
++ g_desktop_app_info_on_launched (const char *desktop_file_path, gint pid)
++ {
++ static gsize lookup = 0;
++
++ if (g_once_init_enter (&lookup))
++ {
++ gsize setup_value = 1;
++ GDesktopAppInfoLaunchHandler *lookup_instance;
++ GIOExtensionPoint *ep;
++ GIOExtension *extension;
++ GList *l;
++
++ /* Ensure vfs in modules loaded */
++ _g_io_modules_ensure_loaded ();
++
++ ep = g_io_extension_point_lookup (G_DESKTOP_APP_INFO_LAUNCH_HANDLER_EXTENSION_POINT_NAME);
++
++ lookup_instance = NULL;
++ for (l = g_io_extension_point_get_extensions (ep); l != NULL; l = l->next)
++ {
++ extension = l->data;
++ lookup_instance = g_object_new (g_io_extension_get_type (extension), NULL);
++ if (lookup_instance != NULL)
++ break;
++ }
++
++ if (lookup_instance != NULL)
++ setup_value = (gsize)lookup_instance;
++
++ g_once_init_leave (&lookup, setup_value);
++ }
++
++ if (lookup == 1)
++ return;
++
++ g_desktop_app_info_launch_handler_on_launched (G_DESKTOP_APP_INFO_LAUNCH_HANDLER (lookup), desktop_file_path, pid);
++ }
++
+ static gboolean
+ g_desktop_app_info_launch_uris (GAppInfo *appinfo,
+ GList *uris,
+***************
+*** 910,922 ****
+ g_list_free (launched_files);
+ }
+
+ if (!g_spawn_async (info->path,
+ argv,
+ NULL,
+ G_SPAWN_SEARCH_PATH,
+ child_setup,
+ &data,
+! NULL,
+ error))
+ {
+ if (data.sn_id)
+--- 953,966 ----
+ g_list_free (launched_files);
+ }
+
++ gint pid;
+ if (!g_spawn_async (info->path,
+ argv,
+ NULL,
+ G_SPAWN_SEARCH_PATH,
+ child_setup,
+ &data,
+! &pid,
+ error))
+ {
+ if (data.sn_id)
+***************
+*** 927,932 ****
+--- 971,980 ----
+
+ goto out;
+ }
++ else
++ {
++ g_desktop_app_info_on_launched (info->filename, pid);
++ }
+
+ g_free (data.sn_id);
+ g_free (data.display);
+***************
+*** 2692,2696 ****
+--- 2740,2806 ----
+ return (* iface->get_default_for_uri_scheme) (lookup, uri_scheme);
+ }
+
++ /* GDesktopAppInfoLaunchHandler interface: */
++
++ static void g_desktop_app_info_launch_handler_base_init (gpointer g_class);
++ static void g_desktop_app_info_launch_handler_class_init (gpointer g_class,
++ gpointer class_data);
++
++ GType
++ g_desktop_app_info_launch_handler_get_type (void)
++ {
++ static volatile gsize g_define_type_id__volatile = 0;
++
++ if (g_once_init_enter (&g_define_type_id__volatile))
++ {
++ const GTypeInfo desktop_app_info_launch_handler_info =
++ {
++ sizeof (GDesktopAppInfoLaunchHandlerIface), /* class_size */
++ g_desktop_app_info_launch_handler_base_init, /* base_init */
++ NULL, /* base_finalize */
++ g_desktop_app_info_launch_handler_class_init,
++ NULL, /* class_finalize */
++ NULL, /* class_data */
++ 0,
++ 0, /* n_preallocs */
++ NULL
++ };
++ GType g_define_type_id =
++ g_type_register_static (G_TYPE_INTERFACE, I_("GDesktopAppInfoLaunchHandler"),
++ &desktop_app_info_launch_handler_info, 0);
++
++ g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
++
++ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
++ }
++
++ return g_define_type_id__volatile;
++ }
++
++ static void
++ g_desktop_app_info_launch_handler_class_init (gpointer g_class,
++ gpointer class_data)
++ {
++ }
++
++ static void
++ g_desktop_app_info_launch_handler_base_init (gpointer g_class)
++ {
++ }
++
++ static void
++ g_desktop_app_info_launch_handler_on_launched (GDesktopAppInfoLaunchHandler *launch_handler,
++ const char *desktop_file_path,
++ gint pid)
++ {
++ GDesktopAppInfoLaunchHandlerIface *iface;
++
++ g_return_if_fail (G_IS_DESKTOP_APP_INFO_LAUNCH_HANDLER (launch_handler));
++
++ iface = G_DESKTOP_APP_INFO_LAUNCH_HANDLER_GET_IFACE (launch_handler);
++
++ (* iface->on_launched) (launch_handler, desktop_file_path, pid);
++ }
++
+ #define __G_DESKTOP_APP_INFO_C__
+ #include "gioaliasdef.c"
+
+*** a/gio/gdesktopappinfo.h 2009-03-31 19:04:20.000000000 -0400
+--- b/gio/gdesktopappinfo.h 2009-07-21 20:34:35.565657314 -0400
+***************
+*** 89,94 ****
+--- 89,123 ----
+ GAppInfo *g_desktop_app_info_lookup_get_default_for_uri_scheme (GDesktopAppInfoLookup *lookup,
+ const char *uri_scheme);
+
++
++
++ #define G_TYPE_DESKTOP_APP_INFO_LAUNCH_HANDLER (g_desktop_app_info_launch_handler_get_type ())
++ #define G_DESKTOP_APP_INFO_LAUNCH_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_DESKTOP_APP_INFO_LAUNCH_HANDLER, GDesktopAppInfoLaunchHandler))
++ #define G_IS_DESKTOP_APP_INFO_LAUNCH_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_DESKTOP_APP_INFO_LAUNCH_HANDLER))
++ #define G_DESKTOP_APP_INFO_LAUNCH_HANDLER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_DESKTOP_APP_INFO_LAUNCH_HANDLER, GDesktopAppInfoLaunchHandlerIface))
++
++ /**
++ * G_DESKTOP_APP_INFO_LAUNCH_HANDLER_EXTENSION_POINT_NAME:
++ *
++ * Extension point for default handler to launching. See
++ * <link linkend="extending-gio">Extending GIO</link>.
++ */
++ #define G_DESKTOP_APP_INFO_LAUNCH_HANDLER_EXTENSION_POINT_NAME "gio-desktop-app-info-launch-handler"
++
++ typedef struct _GDesktopAppInfoLaunchHandler GDesktopAppInfoLaunchHandler;
++ typedef struct _GDesktopAppInfoLaunchHandlerIface GDesktopAppInfoLaunchHandlerIface;
++
++ struct _GDesktopAppInfoLaunchHandlerIface
++ {
++ GTypeInterface g_iface;
++
++ void (* on_launched) (GDesktopAppInfoLaunchHandler *launch_handler,
++ const char *desktop_file_path,
++ gint pid);
++ };
++
++ GType g_desktop_app_info_launch_handler_get_type (void) G_GNUC_CONST;
++
+ G_END_DECLS
+
+ #endif /* __G_DESKTOP_APP_INFO_H__ */
+
+*** a/gio/giomodule.c 2009-03-31 19:04:20.000000000 -0400
+--- b/gio/giomodule.c 2009-07-21 20:40:32.738157079 -0400
+***************
+*** 312,317 ****
+--- 312,320 ----
+ #ifdef G_OS_UNIX
+ ep = g_io_extension_point_register (G_DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME);
+ g_io_extension_point_set_required_type (ep, G_TYPE_DESKTOP_APP_INFO_LOOKUP);
++
++ ep = g_io_extension_point_register (G_DESKTOP_APP_INFO_LAUNCH_HANDLER_EXTENSION_POINT_NAME);
++ g_io_extension_point_set_required_type (ep, G_TYPE_DESKTOP_APP_INFO_LAUNCH_HANDLER);
+ #endif
+
+ ep = g_io_extension_point_register (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME);
+