diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-07-26 15:46:41 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-07-28 13:01:22 -0400 |
commit | 18aa05110fe7b8ed72843a993e36a52b88600722 (patch) | |
tree | 4995daab23e8077b976ecefce811392174727fc1 | |
parent | 2233566f4854c07d89deeeb8505e82bad544787c (diff) | |
download | gtk+-18aa05110fe7b8ed72843a993e36a52b88600722.tar.gz |
Put window exporting behind a display protocol agnostic API
Introduce a private API meant for abstracting how to get a handle
of a window that can be shared with other processes. The API is
async, since some implementations will require that. Currently,
only X11 is supported, which doesn't.
Based on a patch by Jonas Adahl.
-rw-r--r-- | gtk/gtkwindow.c | 30 | ||||
-rw-r--r-- | gtk/gtkwindowprivate.h | 11 |
2 files changed, 41 insertions, 0 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 9146a03b14..943561ef4a 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -12612,3 +12612,33 @@ gtk_window_set_hardcoded_window (GtkWindow *window, g_set_object (&priv->hardcoded_window, gdk_window); } + +gboolean +gtk_window_export_handle (GtkWindow *window, + GtkWindowHandleExported callback, + gpointer user_data) +{ + GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (window)); + +#ifdef GDK_WINDOWING_X11 + if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window)))) + { + char *handle_str; + guint32 xid = (guint32) gdk_x11_window_get_xid (gdk_window); + + handle_str = g_strdup_printf ("x11:%x", xid); + callback (window, handle_str, user_data); + + return TRUE; + } +#endif + + g_warning ("Couldn't export handle, unsupported windowing system"); + + return FALSE; +} + +void +gtk_window_unexport_handle (GtkWindow *window) +{ +} diff --git a/gtk/gtkwindowprivate.h b/gtk/gtkwindowprivate.h index 80253bf55c..5cb5a72db2 100644 --- a/gtk/gtkwindowprivate.h +++ b/gtk/gtkwindowprivate.h @@ -135,6 +135,17 @@ void gtk_window_set_hardcoded_window (GtkWindow *window, GdkScreen *_gtk_window_get_screen (GtkWindow *window); +/* Exported handles */ + +typedef void (*GtkWindowHandleExported) (GtkWindow *window, + const char *handle, + gpointer user_data); + +gboolean gtk_window_export_handle (GtkWindow *window, + GtkWindowHandleExported callback, + gpointer user_data); +void gtk_window_unexport_handle (GtkWindow *window); + G_END_DECLS #endif /* __GTK_WINDOW_PRIVATE_H__ */ |