1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
#include "config.h"
#include <ctk/ctk.h>

CtkWidget *notebook;


static void
remove_notebook_page (CtkWidget *button G_GNUC_UNUSED,
		      CtkWidget *toplevel)
{
  ctk_container_remove (CTK_CONTAINER (notebook), toplevel);
  ctk_widget_show (toplevel);
}

CtkWidget *
create_tab_label (CtkWidget *toplevel)<--- The function 'create_tab_label' should have static linkage since it is not used outside of its translation unit.
{
  CtkWidget *box = ctk_box_new (CTK_ORIENTATION_HORIZONTAL, 2);
  CtkWidget *label = ctk_label_new (G_OBJECT_TYPE_NAME (toplevel));
  CtkWidget *button = ctk_button_new ();
  CtkWidget *image = ctk_image_new_from_icon_name ("window-close", CTK_ICON_SIZE_MENU);

  ctk_container_add (CTK_CONTAINER (button), image);
  ctk_box_pack_start (CTK_BOX (box), label, TRUE, TRUE, 0);
  ctk_box_pack_start (CTK_BOX (box), button, FALSE, TRUE, 0);

  g_signal_connect (button, "clicked",
		    G_CALLBACK (remove_notebook_page), toplevel);

  ctk_widget_show_all (box);
  return box;
}

static void
toplevel_delete_event (CtkWidget *toplevel,
		       CdkEvent  *event G_GNUC_UNUSED,
		       gpointer   none G_GNUC_UNUSED)
{
  CdkWindow *cdk_win;
  CtkWidget *label = create_tab_label (toplevel);

  cdk_win = ctk_widget_get_window (notebook);
  g_assert (cdk_win);

  ctk_widget_hide (toplevel);
  ctk_widget_unrealize (toplevel);

  ctk_widget_set_parent_window (toplevel, cdk_win);
  ctk_notebook_append_page (CTK_NOTEBOOK (notebook), toplevel, label);

  ctk_widget_show (toplevel);
}

gint
main (gint argc, gchar **argv)
{
  CtkWidget *window;
  CtkWidget *widget;
  
  ctk_init (&argc, &argv);

  window = ctk_window_new (CTK_WINDOW_TOPLEVEL);
  ctk_window_set_title (CTK_WINDOW (window), "Toplevel widget embedding example");
  g_signal_connect (window, "destroy", ctk_main_quit, NULL);

  notebook = ctk_notebook_new ();
  ctk_notebook_set_scrollable (CTK_NOTEBOOK (notebook), TRUE);
  ctk_container_add (CTK_CONTAINER (window), notebook);

  ctk_widget_realize (notebook);

  widget = ctk_about_dialog_new ();
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  widget = ctk_file_chooser_dialog_new ("the chooser", NULL, CTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  widget = ctk_color_chooser_dialog_new ("the colorsel", NULL);
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  widget = ctk_font_chooser_dialog_new ("the fontsel", NULL);
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  widget = ctk_recent_chooser_dialog_new ("the recent chooser", NULL,
					  "_Cancel", CTK_RESPONSE_CANCEL,
					  "_Open", CTK_RESPONSE_ACCEPT,
					  NULL);
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  widget = ctk_message_dialog_new (NULL, CTK_DIALOG_MODAL, 
				   CTK_MESSAGE_QUESTION, CTK_BUTTONS_YES_NO,
				   "Do you have any questions ?");
  toplevel_delete_event (widget, NULL, NULL);
  g_signal_connect (widget, "delete-event", G_CALLBACK (toplevel_delete_event), NULL);

  ctk_widget_show_all (window);
  ctk_main ();

  return 0;
}