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); }