Tue Mar 31 15:41:57 PST 1998 Shawn T. Amundson
* Makefile.am: * examples/*: added the rest of the tutorial examples
This commit is contained in:
13
examples/selection/Makefile
Normal file
13
examples/selection/Makefile
Normal file
@@ -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
|
||||
98
examples/selection/gettargets.c
Normal file
98
examples/selection/gettargets.c
Normal file
@@ -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;
|
||||
}
|
||||
106
examples/selection/setselection.c
Normal file
106
examples/selection/setselection.c
Normal file
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user