static void create_hand_widgets (window_board_t *win) { static const char *alignment_a[] = {"alignment_w", "alignment_n", "alignment_e", "alignment_s"}; static int dir[] = { 1, 2, 3, 4 }; int h; GtkSizeGroup *sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); for (h = 0; h < 4; h++) { GtkWidget *alignment = get_widget (alignment_a[h]); GtkWidget *hand = hand_display_new(HAND_DISPLAY_MODE_HAND); gtk_container_add(GTK_CONTAINER(alignment), hand); gtk_widget_show(hand); g_signal_connect (hand, "card-clicked", G_CALLBACK (card_clicked), dir + h); g_signal_connect (hand, "card-enter", G_CALLBACK (card_enter), dir + h); g_signal_connect (hand, "card-leave", G_CALLBACK (card_leave), dir + h); g_signal_connect (hand, "card-drag-drop", G_CALLBACK (card_drag_drop), dir + h); win->handdisp[h] = HAND_DISPLAY(hand); hand_display_set_drag (HAND_DISPLAY (hand), 1); gtk_size_group_add_widget (sizegroup, hand); } g_object_unref (sizegroup); /* trick display */ GtkWidget *grid = get_widget ("table1"); GtkWidget *table = hand_display_new (HAND_DISPLAY_MODE_TABLE); gtk_table_attach_defaults (GTK_TABLE (grid), table, 1, 2, 1, 2); gtk_widget_show (table); win->table = HAND_DISPLAY (table); }
static void hand_display_drag_begin (GtkWidget *hand, GdkDragContext *dc, gpointer data /* unused */) { HandDisplay *handdisp = HAND_DISPLAY (hand); assert (handdisp->cur_drag >= 0 && handdisp->cur_drag < 52); handdisp->cards[handdisp->cur_drag] |= HAND_DISPLAY_INVISIBLE_CARD; handdisp->cur_click = -1; redraw_card (hand, handdisp->cur_drag); /* create drag widget */ if (drag_win) { /* should be NULL, but happens sometimes */ gtk_widget_destroy (drag_win); drag_win = NULL; } drag_win = gtk_window_new (GTK_WINDOW_POPUP); GtkWidget *card = hand_display_new (HAND_DISPLAY_MODE_CARD); hand_display_set_style (HAND_DISPLAY (card), handdisp->style); hand_display_card_set_card (HAND_DISPLAY (card), handdisp->cur_drag); gtk_container_add (GTK_CONTAINER (drag_win), card); gtk_drag_set_icon_widget (dc, drag_win, 0, 0); gtk_widget_show_all (drag_win); }