summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2013-03-27 22:33:13 -0400
committerKristian Høgsberg <krh@bitplanet.net>2013-03-27 22:33:13 -0400
commitf08dceb7f8181ba9c5ec95d35206e73602f60afc (patch)
tree742148b0960b60fd366aedb7a64fa8db515791d4
parentef6e0159df6d1baa238ac16a948839a71294e570 (diff)
Use upstream gtk+ API for custom surfaces
-rw-r--r--gtk-overlay-client.c31
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);
}