diff options
author | Shawn Amundson <amundson@src.gnome.org> | 1998-03-31 23:43:49 +0000 |
---|---|---|
committer | Shawn Amundson <amundson@src.gnome.org> | 1998-03-31 23:43:49 +0000 |
commit | c36ca76bb84879ed1e2ba51541c95eacd56e550e (patch) | |
tree | 8a01644357246180f22165e28d7f0cdf8cf67afe /examples/selection | |
parent | 30f22e0208593dba5ca5d3b824d8d03519414296 (diff) | |
download | gtk+-c36ca76bb84879ed1e2ba51541c95eacd56e550e.tar.gz |
Tue Mar 31 15:41:57 PST 1998 Shawn T. Amundson
* Makefile.am:
* examples/*: added the rest of the tutorial examples
Diffstat (limited to 'examples/selection')
-rw-r--r-- | examples/selection/Makefile | 13 | ||||
-rw-r--r-- | examples/selection/gettargets.c | 98 | ||||
-rw-r--r-- | examples/selection/setselection.c | 106 |
3 files changed, 217 insertions, 0 deletions
diff --git a/examples/selection/Makefile b/examples/selection/Makefile new file mode 100644 index 0000000000..de7aaf708a --- /dev/null +++ b/examples/selection/Makefile @@ -0,0 +1,13 @@ + +CC = gcc + +all: gettargets setselection + +gettargets: gettargets.c + $(CC) `gtk-config --cflags` `gtk-config --libs` gettargets.c -o gettargets + +setselection: setselection.c + $(CC) `gtk-config --cflags` `gtk-config --libs` setselection.c -o setselection + +clean: + rm -f *.o gettargets setselection diff --git a/examples/selection/gettargets.c b/examples/selection/gettargets.c new file mode 100644 index 0000000000..47f7adbb7c --- /dev/null +++ b/examples/selection/gettargets.c @@ -0,0 +1,98 @@ +/* This file extracted from the GTK tutorial. */ + +/* gettargets.c */ + +#include <gtk/gtk.h> + +void selection_received (GtkWidget *widget, + GtkSelectionData *selection_data, + gpointer data); + +/* Signal handler invoked when user clicks on the "Get Targets" button */ +void +get_targets (GtkWidget *widget, gpointer data) +{ + static GdkAtom targets_atom = GDK_NONE; + + /* Get the atom corresonding 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, + GDK_CURRENT_TIME); +} + +/* Signal handler called when the selections owner returns the data */ +void +selection_received (GtkWidget *widget, GtkSelectionData *selection_data, + gpointer data) +{ + GdkAtom *atoms; + GList *item_list; + int i; + + /* **** IMPORTANT **** Check to see if retrieval succeeded */ + if (selection_data->length < 0) + { + g_print ("Selection retrieval failed\n"); + return; + } + /* Make sure we got the data in the expected form */ + if (selection_data->type != GDK_SELECTION_TYPE_ATOM) + { + g_print ("Selection \"TARGETS\" was not returned as atoms!\n"); + return; + } + + /* Print out the atoms we received */ + atoms = (GdkAtom *)selection_data->data; + + item_list = NULL; + for (i=0; i<selection_data->length/sizeof(GdkAtom); i++) + { + char *name; + name = gdk_atom_name (atoms[i]); + if (name != NULL) + g_print ("%s\n",name); + else + g_print ("(bad atom)\n"); + } + + return; +} + +int +main (int argc, char *argv[]) +{ + GtkWidget *window; + GtkWidget *button; + + gtk_init (&argc, &argv); + + /* Create the toplevel window */ + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Event Box"); + gtk_container_border_width (GTK_CONTAINER (window), 10); + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (gtk_exit), NULL); + + /* Create a button the user can click to get targets */ + + button = gtk_button_new_with_label ("Get Targets"); + gtk_container_add (GTK_CONTAINER (window), button); + + gtk_signal_connect (GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC (get_targets), NULL); + gtk_signal_connect (GTK_OBJECT(button), "selection_received", + GTK_SIGNAL_FUNC (selection_received), NULL); + + gtk_widget_show (button); + gtk_widget_show (window); + + gtk_main (); + + return 0; +} diff --git a/examples/selection/setselection.c b/examples/selection/setselection.c new file mode 100644 index 0000000000..c3e784b8ab --- /dev/null +++ b/examples/selection/setselection.c @@ -0,0 +1,106 @@ +/* This file extracted from the GTK tutorial. */ + +/* setselection.c */ + +#include <gtk/gtk.h> +#include <time.h> + +/* 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, + GDK_SELECTION_PRIMARY, + GDK_CURRENT_TIME); + /* if claiming the selection failed, we return the button to + the out state */ + if (!*have_selection) + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(widget), FALSE); + } + else + { + if (*have_selection) + { + /* Before clearing the selection by setting the owner to NULL, + we check if we are the actual owner */ + if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window) + gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, + GDK_CURRENT_TIME); + *have_selection = FALSE; + } + } +} + +/* Called when another application claims the selection */ +gint +selection_clear (GtkWidget *widget, GdkEventSelection *event, + gint *have_selection) +{ + *have_selection = FALSE; + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(widget), FALSE); + + return TRUE; +} + +/* Supplies the current time as the selection. */ +void +selection_handle (GtkWidget *widget, + GtkSelectionData *selection_data, + gpointer data) +{ + gchar *timestr; + time_t current_time; + + current_time = time (NULL); + timestr = asctime (localtime(¤t_time)); + /* When we return a single string, it should not be null terminated. + That will be done for us */ + + gtk_selection_data_set (selection_data, GDK_SELECTION_TYPE_STRING, + 8, timestr, strlen(timestr)); +} + +int +main (int argc, char *argv[]) +{ + GtkWidget *window; + + GtkWidget *selection_button; + + static int have_selection = FALSE; + + gtk_init (&argc, &argv); + + /* Create the toplevel window */ + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Event Box"); + gtk_container_border_width (GTK_CONTAINER (window), 10); + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (gtk_exit), NULL); + + /* Create a toggle button to act as the selection */ + + selection_button = gtk_toggle_button_new_with_label ("Claim Selection"); + gtk_container_add (GTK_CONTAINER (window), selection_button); + gtk_widget_show (selection_button); + + gtk_signal_connect (GTK_OBJECT(selection_button), "toggled", + GTK_SIGNAL_FUNC (selection_toggled), &have_selection); + gtk_signal_connect (GTK_OBJECT(selection_button), "selection_clear_event", + GTK_SIGNAL_FUNC (selection_clear), &have_selection); + + gtk_selection_add_handler (selection_button, GDK_SELECTION_PRIMARY, + GDK_SELECTION_TYPE_STRING, + selection_handle, NULL); + + gtk_widget_show (selection_button); + gtk_widget_show (window); + + gtk_main (); + + return 0; +} |