Blame examples/selection/gettargets.c

Packit Service fb6fa5
Packit Service fb6fa5
#include <stdlib.h>
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
static void selection_received( GtkWidget        *widget,
Packit Service fb6fa5
                                GtkSelectionData *selection_data,
Packit Service fb6fa5
                                gpointer          data );
Packit Service fb6fa5
Packit Service fb6fa5
/* Signal handler invoked when user clicks on the "Get Targets" button */
Packit Service fb6fa5
static void get_targets( GtkWidget *widget,
Packit Service fb6fa5
                         gpointer data )
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GdkAtom targets_atom = GDK_NONE;
Packit Service fb6fa5
  GtkWidget *window = (GtkWidget *)data;
Packit Service fb6fa5
Packit Service fb6fa5
  /* Get the atom corresponding to the string "TARGETS" */
Packit Service fb6fa5
  if (targets_atom == GDK_NONE)
Packit Service fb6fa5
    targets_atom = gdk_atom_intern ("TARGETS", FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
  /* And request the "TARGETS" target for the primary selection */
Packit Service fb6fa5
  gtk_selection_convert (window, GDK_SELECTION_PRIMARY, targets_atom,
Packit Service fb6fa5
			 GDK_CURRENT_TIME);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
/* Signal handler called when the selections owner returns the data */
Packit Service fb6fa5
static void selection_received( GtkWidget        *widget,
Packit Service fb6fa5
                                GtkSelectionData *selection_data,
Packit Service fb6fa5
                                gpointer          data )
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkAtom *atoms;
Packit Service fb6fa5
  GList *item_list;
Packit Service fb6fa5
  int i;
Packit Service fb6fa5
Packit Service fb6fa5
  /* **** IMPORTANT **** Check to see if retrieval succeeded  */
Packit Service fb6fa5
  if (selection_data->length < 0)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print ("Selection retrieval failed\n");
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  /* Make sure we got the data in the expected form */
Packit Service fb6fa5
  if (selection_data->type != GDK_SELECTION_TYPE_ATOM)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print ("Selection \"TARGETS\" was not returned as atoms!\n");
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  /* Print out the atoms we received */
Packit Service fb6fa5
  atoms = (GdkAtom *)selection_data->data;
Packit Service fb6fa5
Packit Service fb6fa5
  item_list = NULL;
Packit Service fb6fa5
  for (i = 0; i < selection_data->length / sizeof(GdkAtom); i++)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      char *name;
Packit Service fb6fa5
      name = gdk_atom_name (atoms[i]);
Packit Service fb6fa5
      if (name != NULL)
Packit Service fb6fa5
	g_print ("%s\n",name);
Packit Service fb6fa5
      else
Packit Service fb6fa5
	g_print ("(bad atom)\n");
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
int main( int   argc,
Packit Service fb6fa5
          char *argv[] )
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *window;
Packit Service fb6fa5
  GtkWidget *button;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_init (&argc, &argv);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create the toplevel window */
Packit Service fb6fa5
Packit Service fb6fa5
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
  gtk_window_set_title (GTK_WINDOW (window), "Event Box");
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (window, "destroy",
Packit Service fb6fa5
	            G_CALLBACK (exit), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Create a button the user can click to get targets */
Packit Service fb6fa5
Packit Service fb6fa5
  button = gtk_button_new_with_label ("Get Targets");
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (window), button);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (button, "clicked",
Packit Service fb6fa5
		    G_CALLBACK (get_targets), (gpointer) window);
Packit Service fb6fa5
  g_signal_connect (window, "selection-received",
Packit Service fb6fa5
		    G_CALLBACK (selection_received), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show (button);
Packit Service fb6fa5
  gtk_widget_show (window);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_main ();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}