From: Matthias Clasen Date: Mon, 4 Mar 2002 22:19:47 +0000 (+0000) Subject: Make color selection and selection examples work. X-Git-Url: http://pileus.org/git/?p=~andy%2Fgtk;a=commitdiff_plain;h=0b46f4ab61b937b6880d847f41a718d18b399d37 Make color selection and selection examples work. * docs/tutorial/gtk-tut.sgml: Make color selection and selection examples work. * tests/testselection.c (selection_toggled, selection_clear): Use selection_widget as selection owner - otherwise clearing the selection doesn't work. --- diff --git a/ChangeLog b/ChangeLog index 520c25b4e..8003793a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 520c25b4e..8003793a6 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2002-03-04 Matthias Clasen + + * docs/tutorial/gtk-tut.sgml: Make color selection and selection + examples work. + + * tests/testselection.c (selection_toggled, selection_clear): + Use selection_widget as selection owner - otherwise clearing the + selection doesn't work. + Mon Mar 4 12:43:48 2002 Owen Taylor Fixes for non XKB operation. (#73103) diff --git a/docs/tutorial/gtk-tut.sgml b/docs/tutorial/gtk-tut.sgml index 3d0e1fb23..aa4669970 100755 --- a/docs/tutorial/gtk-tut.sgml +++ b/docs/tutorial/gtk-tut.sgml @@ -6062,34 +6062,17 @@ background color. GtkWidget *colorseldlg = NULL; GtkWidget *drawingarea = NULL; +GdkColor color; /* Color changed handler */ void color_changed_cb( GtkWidget *widget, GtkColorSelection *colorsel ) { - GdkColor gdk_color; - GdkColormap *colormap; + GdkColor ncolor; - /* Get drawingarea colormap */ - - colormap = gdk_window_get_colormap (drawingarea->window); - - /* Get current color */ - - gtk_color_selection_get_current_color (colorsel, &gdk_color); - - /* Allocate color */ - - gdk_color_alloc (colormap, &gdk_color); - - /* Set window background color */ - - gdk_window_set_background (drawingarea->window, &gdk_color); - - /* Clear window */ - - gdk_window_clear (drawingarea->window); + gtk_color_selection_get_current_color (colorsel, &ncolor); + gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &ncolor); } /* Drawingarea event handler */ @@ -6099,33 +6082,40 @@ gint area_event( GtkWidget *widget, gpointer client_data ) { gint handled = FALSE; - GtkWidget *colorsel; + gint response; + GtkColorSelection *colorsel; /* Check if we've received a button pressed event */ - if (event->type == GDK_BUTTON_PRESS && colorseldlg == NULL) + if (event->type == GDK_BUTTON_PRESS) { - /* Yes, we have an event and there's no colorseldlg yet! */ - handled = TRUE; - /* Create color selection dialog */ - - colorseldlg = gtk_color_selection_dialog_new ("Select background color"); + /* Create color selection dialog */ + if (colorseldlg == NULL) + colorseldlg = gtk_color_selection_dialog_new ("Select background color"); /* Get the ColorSelection widget */ + colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (colorseldlg)->colorsel); - colorsel = GTK_COLOR_SELECTION_DIALOG (colorseldlg)->colorsel; + gtk_color_selection_set_previous_color (colorsel, &color); + gtk_color_selection_set_current_color (colorsel, &color); + gtk_color_selection_set_has_palette (colorsel, TRUE); /* Connect to the "color_changed" signal, set the client-data * to the colorsel widget */ - g_signal_connect (G_OBJECT (colorsel), "color_changed", G_CALLBACK (color_changed_cb), (gpointer)colorsel); /* Show the dialog */ + response = gtk_dialog_run (GTK_DIALOG (colorseldlg)); - gtk_widget_show (colorseldlg); + if (response == GTK_RESPONSE_OK) + gtk_color_selection_get_current_color (colorsel, &color); + else + gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color); + + gtk_widget_hide (colorseldlg); } return handled; @@ -6167,6 +6157,11 @@ gint main( gint argc, drawingarea = gtk_drawing_area_new (); + color.red = 0; + color.blue = 65535; + color.green = 0; + gtk_widget_modify_bg (drawingarea, GTK_STATE_NORMAL, &color); + gtk_widget_set_size_request (GTK_WIDGET (drawingarea), 200, 200); gtk_widget_set_events (drawingarea, GDK_BUTTON_PRESS_MASK); @@ -9220,10 +9215,10 @@ selections and targets are identified by atoms. process, you call: -gint gtk_selection_convert( GtkWidget *widget, - GdkAtom selection, - GdkAtom target, - guint32 time ); +gboolean gtk_selection_convert( GtkWidget *widget, + GdkAtom selection, + GdkAtom target, + guint32 time ); This converts the selection into the form specified by @@ -9265,7 +9260,7 @@ could not be retrieved. This might happen if no application owned the selection, or if you requested a target that the application didn't support. The buffer is actually guaranteed to be one byte longer than length; the extra byte will always be zero, so it isn't -necessary to make a copy of strings just to null terminate them. +necessary to make a copy of strings just to nul-terminate them. In the following example, we retrieve the special target "TARGETS", which is a list of all targets into which the selection can be @@ -9286,13 +9281,14 @@ void get_targets( GtkWidget *widget, gpointer data ) { static GdkAtom targets_atom = GDK_NONE; + GtkWidget *window = (GtkWidget *)data; /* Get the atom corresponding to the string "TARGETS" */ if (targets_atom == GDK_NONE) targets_atom = gdk_atom_intern ("TARGETS", FALSE); /* And request the "TARGETS" target for the primary selection */ - gtk_selection_convert (widget, GDK_SELECTION_PRIMARY, targets_atom, + gtk_selection_convert (window, GDK_SELECTION_PRIMARY, targets_atom, GDK_CURRENT_TIME); } @@ -9357,9 +9353,9 @@ int main( int argc, button = gtk_button_new_with_label ("Get Targets"); gtk_container_add (GTK_CONTAINER (window), button); - g_signal_connect (G_OBJECT(button), "clicked", - G_CALLBACK (get_targets), NULL); - g_signal_connect (G_OBJECT(button), "selection_received", + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (get_targets), window); + g_signal_connect (G_OBJECT (window), "selection_received", G_CALLBACK (selection_received), NULL); gtk_widget_show (button); @@ -9407,7 +9403,7 @@ responsible for filling in the fields type, formatdata, and length. (The format field is actually important here - the X server uses it to figure out whether the data needs to be byte-swapped or not. Usually it will be 8 - i.e. a -character - or 32 - i.e. a. integer.) This is done by calling the +character - or 32 - i.e. an integer.) This is done by calling the function: @@ -9426,9 +9422,9 @@ in the fields of the GtkSelectionData structure by hand.) calling: -gint gtk_selection_owner_set( GtkWidget *widget, - GdkAtom selection, - guint32 time ); +gboolean gtk_selection_owner_set( GtkWidget *widget, + GdkAtom selection, + guint32 time ); If another application claims ownership of the selection, you will @@ -9448,13 +9444,16 @@ string representation of the time is returned. #include <gtk/gtk.h> #include <time.h> +GtkWidget *selection_button; +GtkWidget *selection_widget; + /* Callback when the user toggles the selection */ void selection_toggled( GtkWidget *widget, gint *have_selection ) { if (GTK_TOGGLE_BUTTON (widget)->active) { - *have_selection = gtk_selection_owner_set (widget, + *have_selection = gtk_selection_owner_set (selection_widget, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); /* if claiming the selection failed, we return the button to @@ -9482,7 +9481,7 @@ gint selection_clear( GtkWidget *widget, gint *have_selection ) { *have_selection = FALSE; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (selection_button), FALSE); return TRUE; } @@ -9510,7 +9509,6 @@ int main( int argc, char *argv[] ) { GtkWidget *window; - GtkWidget *selection_button; static int have_selection = FALSE; @@ -9527,20 +9525,21 @@ int main( int argc, /* Create a toggle button to act as the selection */ + selection_widget = gtk_invisible_new (); selection_button = gtk_toggle_button_new_with_label ("Claim Selection"); gtk_container_add (GTK_CONTAINER (window), selection_button); gtk_widget_show (selection_button); g_signal_connect (G_OBJECT (selection_button), "toggled", G_CALLBACK (selection_toggled), &have_selection); - g_signal_connect (G_OBJECT (selection_button), "selection_clear_event", + g_signal_connect (G_OBJECT (selection_widget), "selection_clear_event", G_CALLBACK (selection_clear), &have_selection); - gtk_selection_add_target (selection_button, + gtk_selection_add_target (selection_widget, GDK_SELECTION_PRIMARY, GDK_SELECTION_TYPE_STRING, 1); - g_signal_connect (G_OBJECT (selection_button), "selection_get", + g_signal_connect (G_OBJECT (selection_widget), "selection_get", G_CALLBACK (selection_handle), &have_selection); gtk_widget_show (selection_button); diff --git a/tests/testselection.c b/tests/testselection.c index 3f3d6830c..303075235 100644 --- a/tests/testselection.c +++ b/tests/testselection.c @@ -141,7 +141,7 @@ selection_toggled (GtkWidget *widget) { if (GTK_TOGGLE_BUTTON(widget)->active) { - have_selection = gtk_selection_owner_set (widget, + have_selection = gtk_selection_owner_set (selection_widget, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); if (!have_selection) @@ -197,7 +197,7 @@ gint selection_clear (GtkWidget *widget, GdkEventSelection *event) { have_selection = FALSE; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(selection_button), FALSE); return TRUE; }