diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2013-03-27 22:33:13 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-03-27 22:33:13 -0400 |
commit | f08dceb7f8181ba9c5ec95d35206e73602f60afc (patch) | |
tree | 742148b0960b60fd366aedb7a64fa8db515791d4 | |
parent | ef6e0159df6d1baa238ac16a948839a71294e570 (diff) |
Use upstream gtk+ API for custom surfaces
-rw-r--r-- | gtk-overlay-client.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/gtk-overlay-client.c b/gtk-overlay-client.c index ba35c62..2ccac84 100644 --- a/gtk-overlay-client.c +++ b/gtk-overlay-client.c @@ -32,13 +32,11 @@ #include "overlay-client-protocol.h" struct overlay_client { - GdkWindow *gdk_window; GdkDisplay *gdk_display; struct wl_display *wl_display; struct wl_registry *wl_registry; GtkWidget *window; struct overlay *overlay; - struct wl_surface *wl_surface; }; static void @@ -60,6 +58,22 @@ dismiss(GtkWidget *widget, gpointer data) } static void +widget_realize_cb (GtkWidget *widget, void *data) +{ + GdkWindow *window; + struct wl_surface *surface; + struct input_panel_surface *ip_surface; + GdkWindow *gdk_window; + struct overlay_client *client = data; + + gdk_window = gtk_widget_get_window(widget); + gdk_wayland_window_set_use_custom_surface(gdk_window); + surface = gdk_wayland_window_get_wl_surface(gdk_window); + + overlay_surface(client->overlay, surface); +} + +static void overlay_activate(void *data, struct overlay *overlay) { struct overlay_client *client = data; @@ -76,6 +90,8 @@ overlay_activate(void *data, struct overlay *overlay) gtk_window_set_title(GTK_WINDOW(client->window), "Hello"); gtk_window_set_decorated(GTK_WINDOW(client->window), FALSE); gtk_window_set_default_size(GTK_WINDOW(client->window), 400, 200); + g_signal_connect (client->window, "realize", + G_CALLBACK (widget_realize_cb), client); gtk_container_set_border_width(GTK_CONTAINER(client->window), 10); @@ -99,17 +115,6 @@ overlay_activate(void *data, struct overlay *overlay) g_signal_connect(button, "clicked", G_CALLBACK(dismiss), client); gtk_container_add(GTK_CONTAINER(bbox), button); - gtk_widget_realize(client->window); - - client->gdk_window = gtk_widget_get_window(client->window); - - gdk_wayland_window_set_custom(client->gdk_window); - - client->wl_surface = - gdk_wayland_window_get_wl_surface(client->gdk_window); - - overlay_surface(client->overlay, client->wl_surface); - gtk_widget_show_all(client->window); } |