From da7d11e38794a6e3d05e39b390f7a4292e80d0b0 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 14 Jun 2011 12:39:46 +0900 Subject: [PATCH] Follow monitors-changed event. --- src/server-context.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/server-context.c b/src/server-context.c index 5123ce82..56d50a61 100644 --- a/src/server-context.c +++ b/src/server-context.c @@ -278,6 +278,13 @@ set_geometry (ServerContext *context) gdk_screen_get_monitor_geometry (screen, monitor, &rect); eek_element_get_bounds (EEK_ELEMENT(context->keyboard), &bounds); + g_signal_handlers_disconnect_by_func (context->window, + on_realize_set_dock, + context); + g_signal_handlers_disconnect_by_func (context->window, + on_realize_set_non_maximizable, + context); + if (context->fullscreen) { gint width = rect.width, height = rect.height / 2; @@ -380,10 +387,9 @@ update_widget (ServerContext *context) _("Keyboard")); gtk_window_set_icon_name (GTK_WINDOW(context->window), "eekboard"); gtk_window_set_keep_above (GTK_WINDOW(context->window), TRUE); - - set_geometry (context); } gtk_container_add (GTK_CONTAINER(context->window), context->widget); + set_geometry (context); } static void @@ -540,9 +546,19 @@ server_context_class_init (ServerContextClass *klass) pspec); } +static void +on_monitors_changed (GdkScreen *screen, + gpointer user_data) +{ + ServerContext *context = user_data; + if (context->window) + set_geometry (context); +} + static void server_context_init (ServerContext *context) { + GdkScreen *screen; GError *error; context->connection = NULL; @@ -574,6 +590,12 @@ server_context_init (ServerContext *context) g_settings_bind (context->settings, "ui-toolkit", context, "ui-toolkit", G_SETTINGS_BIND_GET); + + screen = gdk_screen_get_default (); + g_signal_connect (screen, + "monitors-changed", + G_CALLBACK(on_monitors_changed), + context); } static void