void
xkb_layout_chooser_response (GtkDialog * dialog, gint response)
{
	switch (response)
	case GTK_RESPONSE_OK:{
			/* Handled by the main code */
			break;
	case RESPONSE_PREVIEW:{
				gchar *selected_id = (gchar *)
				    xkb_layout_chooser_get_selected_id
				    (dialog);

				if (selected_id != NULL) {
					if (preview_dialog == NULL) {
						preview_dialog =
						    gkbd_keyboard_drawing_dialog_new
						    ();
						g_signal_connect (G_OBJECT
								  (preview_dialog),
								  "destroy",
								  G_CALLBACK
								  (xkb_preview_destroy_callback),
								  NULL);
						/* Put into the separate group to avoid conflict
						   with modal parent */
						gtk_window_group_add_window
						    (gtk_window_group_new
						     (),
						     GTK_WINDOW
						     (preview_dialog));
					};
					gkbd_keyboard_drawing_dialog_set_layout
					    (preview_dialog,
					     config_registry, selected_id);

					gtk_widget_show_all
					    (preview_dialog);
				}
			}

			return;
		}
	if (preview_dialog != NULL) {
		gtk_widget_destroy (preview_dialog);
	}
	if (search_pattern_list != NULL) {
		g_strfreev (search_pattern_list);
		search_pattern_list = NULL;
	}
	gtk_widget_destroy (GTK_WIDGET (dialog));
}
static void
show_selected_layout (GtkWidget * button, GtkBuilder * dialog)
{
	gint idx = find_selected_layout_idx (dialog);

	if (idx != -1) {
		GtkWidget *parent = WID ("region_notebook");
		GtkWidget *popup = gkbd_keyboard_drawing_dialog_new ();
		gkbd_keyboard_drawing_dialog_set_group (popup,
							config_registry,
							idx);
		gtk_window_set_transient_for (GTK_WINDOW (popup),
					      GTK_WINDOW
					      (gtk_widget_get_toplevel
					       (parent)));
		gtk_widget_show_all (popup);
	}
}
static void
popup_menu_show_layout ()
{
	GtkWidget *dialog;
	XklEngine *engine =
	    xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY
				     (gdk_display_get_default ()));
	XklState *xkl_state = xkl_engine_get_current_state (engine);

	gchar **group_names = gkbd_status_get_group_names ();

	gpointer p = g_hash_table_lookup (preview_dialogs,
					  GINT_TO_POINTER
					  (xkl_state->group));

	if (xkl_state->group < 0
	    || xkl_state->group >= g_strv_length (group_names)) {
		return;
	}

	if (p != NULL) {
		/* existing window */
		gtk_window_present (GTK_WINDOW (p));
		return;
	}

	if (!ensure_xkl_registry ())
		return;

	dialog = gkbd_keyboard_drawing_dialog_new ();
	gkbd_keyboard_drawing_dialog_set_group (dialog, xkl_registry, xkl_state->group);

	g_signal_connect (dialog, "destroy",
			  G_CALLBACK (show_layout_destroy),
			  GINT_TO_POINTER (xkl_state->group));
	g_hash_table_insert (preview_dialogs,
			     GINT_TO_POINTER (xkl_state->group), dialog);
	gtk_widget_show_all (dialog);
}