6 GtkWidget *colorseldlg = NULL;
7 GtkWidget *drawingarea = NULL;
10 /* Color changed handler */
12 static void color_changed_cb( GtkWidget *widget,
13 GtkColorSelection *colorsel )
17 gtk_color_selection_get_current_color (colorsel, &ncolor);
18 gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &ncolor);
21 /* Drawingarea event handler */
23 static gboolean area_event( GtkWidget *widget,
25 gpointer client_data )
29 GtkColorSelection *colorsel;
30 GtkColorSelectionDialog *selection_dialog;
32 /* Check if we've received a button pressed event */
34 if (event->type == GDK_BUTTON_PRESS)
38 /* Create color selection dialog */
39 if (colorseldlg == NULL)
40 colorseldlg = gtk_color_selection_dialog_new ("Select background color");
42 /* Get the ColorSelection widget */
43 selection_dialog = GTK_COLOR_SELECTION_DIALOG (colorseldlg);
44 colorsel = GTK_COLOR_SELECTION (gtk_color_selection_dialog_get_colorsel (selection_dialog));
46 gtk_color_selection_set_previous_color (colorsel, &color);
47 gtk_color_selection_set_current_color (colorsel, &color);
48 gtk_color_selection_set_has_palette (colorsel, TRUE);
50 /* Connect to the "color-changed" signal, set the client-data
51 * to the colorsel widget */
52 g_signal_connect (colorsel, "color-changed",
53 G_CALLBACK (color_changed_cb),
57 response = gtk_dialog_run (GTK_DIALOG (colorseldlg));
59 if (response == GTK_RESPONSE_OK)
60 gtk_color_selection_get_current_color (colorsel, &color);
62 gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color);
64 gtk_widget_hide (colorseldlg);
70 /* Close down and exit handler */
72 static gboolean destroy_window( GtkWidget *widget,
74 gpointer client_data )
87 /* Initialize the toolkit, remove gtk-related commandline stuff */
89 gtk_init (&argc, &argv);
91 /* Create toplevel window, set title and policies */
93 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
94 gtk_window_set_title (GTK_WINDOW (window), "Color selection test");
95 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
97 /* Attach to the "delete" and "destroy" events so we can exit */
99 g_signal_connect (window, "delete_event",
100 G_CALLBACK (destroy_window), (gpointer) window);
102 /* Create drawingarea, set size and catch button events */
104 drawingarea = gtk_drawing_area_new ();
109 gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color);
111 gtk_widget_set_size_request (GTK_WIDGET (drawingarea), 200, 200);
113 gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK);
115 g_signal_connect (drawingarea, "event",
116 G_CALLBACK (area_event), (gpointer) drawingarea);
118 /* Add drawingarea to window, then show them both */
120 gtk_container_add (GTK_CONTAINER (window), drawingarea);
122 gtk_widget_show (drawingarea);
123 gtk_widget_show (window);
125 /* Enter the gtk main loop (this never returns) */
129 /* Satisfy grumpy compilers */