Blame tests/testdnd.c

Packit Service fb6fa5
/* testdnd.c
Packit Service fb6fa5
 * Copyright (C) 1998  Red Hat, Inc.
Packit Service fb6fa5
 * Author: Owen Taylor
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is free software; you can redistribute it and/or
Packit Service fb6fa5
 * modify it under the terms of the GNU Library General Public
Packit Service fb6fa5
 * License as published by the Free Software Foundation; either
Packit Service fb6fa5
 * version 2 of the License, or (at your option) any later version.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * This library is distributed in the hope that it will be useful,
Packit Service fb6fa5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fb6fa5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service fb6fa5
 * Library General Public License for more details.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * You should have received a copy of the GNU Library General Public
Packit Service fb6fa5
 * License along with this library; if not, write to the
Packit Service fb6fa5
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit Service fb6fa5
 * Boston, MA 02111-1307, USA.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include "gtk/gtk.h"
Packit Service fb6fa5
Packit Service fb6fa5
/* Target side drag signals */
Packit Service fb6fa5
Packit Service fb6fa5
/* XPM */
Packit Service fb6fa5
static const char * drag_icon_xpm[] = {
Packit Service fb6fa5
"36 48 9 1",
Packit Service fb6fa5
" 	c None",
Packit Service fb6fa5
".	c #020204",
Packit Service fb6fa5
"+	c #8F8F90",
Packit Service fb6fa5
"@	c #D3D3D2",
Packit Service fb6fa5
"#	c #AEAEAC",
Packit Service fb6fa5
"$	c #ECECEC",
Packit Service fb6fa5
"%	c #A2A2A4",
Packit Service fb6fa5
"&	c #FEFEFC",
Packit Service fb6fa5
"*	c #BEBEBC",
Packit Service fb6fa5
"               .....................",
Packit Service fb6fa5
"              ..&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"             ...&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"            ..&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"           ..&&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"          ..&&&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"         ..&&&&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"        ..&&&&&.&&&@&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"       ..&&&&&&.*$%$+$&&&&&&&&&&&&&.",
Packit Service fb6fa5
"      ..&&&&&&&.%$%$+&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"     ..&&&&&&&&.#&#@$&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"    ..&&&&&&&&&.#$**#$&&&&&&&&&&&&&.",
Packit Service fb6fa5
"   ..&&&&&&&&&&.&@%&%$&&&&&&&&&&&&&.",
Packit Service fb6fa5
"  ..&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
" ..&&&&&&&&&&&&.&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"................&$@&&&@&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&@#@@$&*@&@#@#$**#$&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&@%&%$&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&+&$+&$&@&$@&&$@&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&+&&#@%#+@#@*$%&+$&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&+&&#@#@&&@*%$%$+&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&+&$%&#@&#@@#&#@$&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&@#@@$&*@&@#@#$#*#$&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&$#@@$&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&+&$%&$$@&$@&&$@&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&+&&#@%#+@#@*$%$+$&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&+&&#@#@&&@*#$%$+&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&+&$+&*@&#@@#&#@$&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&$%@@&&*@&@#@#$#*#&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&$%&%$&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
".&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.",
Packit Service fb6fa5
"...................................."};
Packit Service fb6fa5
Packit Service fb6fa5
/* XPM */
Packit Service fb6fa5
static const char * trashcan_closed_xpm[] = {
Packit Service fb6fa5
"64 80 17 1",
Packit Service fb6fa5
" 	c None",
Packit Service fb6fa5
".	c #030304",
Packit Service fb6fa5
"+	c #5A5A5C",
Packit Service fb6fa5
"@	c #323231",
Packit Service fb6fa5
"#	c #888888",
Packit Service fb6fa5
"$	c #1E1E1F",
Packit Service fb6fa5
"%	c #767677",
Packit Service fb6fa5
"&	c #494949",
Packit Service fb6fa5
"*	c #9E9E9C",
Packit Service fb6fa5
"=	c #111111",
Packit Service fb6fa5
"-	c #3C3C3D",
Packit Service fb6fa5
";	c #6B6B6B",
Packit Service fb6fa5
">	c #949494",
Packit Service fb6fa5
",	c #282828",
Packit Service fb6fa5
"'	c #808080",
Packit Service fb6fa5
")	c #545454",
Packit Service fb6fa5
"!	c #AEAEAC",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                       ==......=$$...===                        ",
Packit Service fb6fa5
"                 ..$------)+++++++++++++@$$...                  ",
Packit Service fb6fa5
"             ..=@@-------&+++++++++++++++++++-....              ",
Packit Service fb6fa5
"          =.$$@@@-&&)++++)-,$$$$=@@&+++++++++++++,..$           ",
Packit Service fb6fa5
"         .$$$$@@&+++++++&$$$@@@@-&,$,-++++++++++;;;&..          ",
Packit Service fb6fa5
"        $$$$,@--&++++++&$$)++++++++-,$&++++++;%%'%%;;$@         ",
Packit Service fb6fa5
"       .-@@-@-&++++++++-@++++++++++++,-++++++;''%;;;%*-$        ",
Packit Service fb6fa5
"       +------++++++++++++++++++++++++++++++;;%%%;;##*!.        ",
Packit Service fb6fa5
"        =+----+++++++++++++++++++++++;;;;;;;;;;;;%'>>).         ",
Packit Service fb6fa5
"         .=)&+++++++++++++++++;;;;;;;;;;;;;;%''>>#>#@.          ",
Packit Service fb6fa5
"          =..=&++++++++++++;;;;;;;;;;;;;%###>>###+%==           ",
Packit Service fb6fa5
"           .&....=-+++++%;;####''''''''''##'%%%)..#.            ",
Packit Service fb6fa5
"           .+-++@....=,+%#####'%%%%%%%%%;@$-@-@*++!.            ",
Packit Service fb6fa5
"           .+-++-+++-&-@$$=$=......$,,,@;&)+!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ",
Packit Service fb6fa5
"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ",
Packit Service fb6fa5
"              =.++++++++++++++!++++!++++!+++!++.=               ",
Packit Service fb6fa5
"                 $..+++++++++++++++!++++++...$                  ",
Packit Service fb6fa5
"                      $$=.............=$$                       ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                "};
Packit Service fb6fa5
Packit Service fb6fa5
/* XPM */
Packit Service fb6fa5
static const char * trashcan_open_xpm[] = {
Packit Service fb6fa5
"64 80 17 1",
Packit Service fb6fa5
" 	c None",
Packit Service fb6fa5
".	c #030304",
Packit Service fb6fa5
"+	c #5A5A5C",
Packit Service fb6fa5
"@	c #323231",
Packit Service fb6fa5
"#	c #888888",
Packit Service fb6fa5
"$	c #1E1E1F",
Packit Service fb6fa5
"%	c #767677",
Packit Service fb6fa5
"&	c #494949",
Packit Service fb6fa5
"*	c #9E9E9C",
Packit Service fb6fa5
"=	c #111111",
Packit Service fb6fa5
"-	c #3C3C3D",
Packit Service fb6fa5
";	c #6B6B6B",
Packit Service fb6fa5
">	c #949494",
Packit Service fb6fa5
",	c #282828",
Packit Service fb6fa5
"'	c #808080",
Packit Service fb6fa5
")	c #545454",
Packit Service fb6fa5
"!	c #AEAEAC",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                      .=.==.,@                  ",
Packit Service fb6fa5
"                                   ==.,@-&&&)-=                 ",
Packit Service fb6fa5
"                                 .$@,&+;;;;%>*-                 ",
Packit Service fb6fa5
"                               $,-+)+++%%;;'#+.                 ",
Packit Service fb6fa5
"                            =---+++++;%%%;%##@.                 ",
Packit Service fb6fa5
"                           @)++++++++;%%%%'#%$                  ",
Packit Service fb6fa5
"                         $&++++++++++;%%;%##@=                  ",
Packit Service fb6fa5
"                       ,-++++)+++++++;;;'#%)                    ",
Packit Service fb6fa5
"                      @+++&&--&)++++;;%'#'-.                    ",
Packit Service fb6fa5
"                    ,&++-@@,,,,-)++;;;'>'+,                     ",
Packit Service fb6fa5
"                  =-++&@$@&&&&-&+;;;%##%+@                      ",
Packit Service fb6fa5
"                =,)+)-,@@&+++++;;;;%##%&@                       ",
Packit Service fb6fa5
"               @--&&,,@&)++++++;;;;'#)@                         ",
Packit Service fb6fa5
"              ---&)-,@)+++++++;;;%''+,                          ",
Packit Service fb6fa5
"            $--&)+&$-+++++++;;;%%'';-                           ",
Packit Service fb6fa5
"           .,-&+++-$&++++++;;;%''%&=                            ",
Packit Service fb6fa5
"          $,-&)++)-@++++++;;%''%),                              ",
Packit Service fb6fa5
"         =,@&)++++&&+++++;%'''+$@&++++++                        ",
Packit Service fb6fa5
"        .$@-++++++++++++;'#';,........=$@&++++                  ",
Packit Service fb6fa5
"       =$@@&)+++++++++++'##-.................=&++               ",
Packit Service fb6fa5
"      .$$@-&)+++++++++;%#+$.....................=)+             ",
Packit Service fb6fa5
"      $$,@-)+++++++++;%;@=........................,+            ",
Packit Service fb6fa5
"     .$$@@-++++++++)-)@=............................            ",
Packit Service fb6fa5
"     $,@---)++++&)@===............................,.            ",
Packit Service fb6fa5
"    $-@---&)))-$$=..............................=)!.            ",
Packit Service fb6fa5
"     --&-&&,,$=,==...........................=&+++!.            ",
Packit Service fb6fa5
"      =,=$..=$+)+++++&@$=.............=$@&+++++!++!.            ",
Packit Service fb6fa5
"           .)-++-+++++++++++++++++++++++++++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++++++++++++++++++++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!+++!!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           .+-++-+++-+++++++++!++++!++++!+++!++!++!.            ",
Packit Service fb6fa5
"           =+-++-+++-+++++++++!++++!++++!+++!++!+++=            ",
Packit Service fb6fa5
"            $.++-+++-+++++++++!++++!++++!+++!++!+.$             ",
Packit Service fb6fa5
"              =.++++++++++++++!++++!++++!+++!++.=               ",
Packit Service fb6fa5
"                 $..+++++++++++++++!++++++...$                  ",
Packit Service fb6fa5
"                      $$==...........==$$                       ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                ",
Packit Service fb6fa5
"                                                                "};
Packit Service fb6fa5
Packit Service fb6fa5
GdkPixbuf *trashcan_open;
Packit Service fb6fa5
GdkPixbuf *trashcan_closed;
Packit Service fb6fa5
Packit Service fb6fa5
gboolean have_drag;
Packit Service fb6fa5
Packit Service fb6fa5
enum {
Packit Service fb6fa5
  TARGET_STRING,
Packit Service fb6fa5
  TARGET_ROOTWIN
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static GtkTargetEntry target_table[] = {
Packit Service fb6fa5
  { "STRING",     0, TARGET_STRING },
Packit Service fb6fa5
  { "text/plain", 0, TARGET_STRING },
Packit Service fb6fa5
  { "application/x-rootwindow-drop", 0, TARGET_ROOTWIN }
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static guint n_targets = sizeof(target_table) / sizeof(target_table[0]);
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
target_drag_leave	   (GtkWidget	       *widget,
Packit Service fb6fa5
			    GdkDragContext     *context,
Packit Service fb6fa5
			    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print("leave\n");
Packit Service fb6fa5
  have_drag = FALSE;
Packit Service fb6fa5
  gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_closed);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
target_drag_motion	   (GtkWidget	       *widget,
Packit Service fb6fa5
			    GdkDragContext     *context,
Packit Service fb6fa5
			    gint                x,
Packit Service fb6fa5
			    gint                y,
Packit Service fb6fa5
			    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *source_widget;
Packit Service fb6fa5
  GList *tmp_list;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!have_drag)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      have_drag = TRUE;
Packit Service fb6fa5
      gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_open);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  source_widget = gtk_drag_get_source_widget (context);
Packit Service fb6fa5
  g_print ("motion, source %s\n", source_widget ?
Packit Service fb6fa5
	   G_OBJECT_TYPE_NAME (source_widget) :
Packit Service fb6fa5
	   "NULL");
Packit Service fb6fa5
Packit Service fb6fa5
  tmp_list = context->targets;
Packit Service fb6fa5
  while (tmp_list)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      char *name = gdk_atom_name (GDK_POINTER_TO_ATOM (tmp_list->data));
Packit Service fb6fa5
      g_print ("%s\n", name);
Packit Service fb6fa5
      g_free (name);
Packit Service fb6fa5
      
Packit Service fb6fa5
      tmp_list = tmp_list->next;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  gdk_drag_status (context, context->suggested_action, time);
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
target_drag_drop	   (GtkWidget	       *widget,
Packit Service fb6fa5
			    GdkDragContext     *context,
Packit Service fb6fa5
			    gint                x,
Packit Service fb6fa5
			    gint                y,
Packit Service fb6fa5
			    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print("drop\n");
Packit Service fb6fa5
  have_drag = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_closed);
Packit Service fb6fa5
Packit Service fb6fa5
  if (context->targets)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_drag_get_data (widget, context, 
Packit Service fb6fa5
			 GDK_POINTER_TO_ATOM (context->targets->data), 
Packit Service fb6fa5
			 time);
Packit Service fb6fa5
      return TRUE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
target_drag_data_received  (GtkWidget          *widget,
Packit Service fb6fa5
			    GdkDragContext     *context,
Packit Service fb6fa5
			    gint                x,
Packit Service fb6fa5
			    gint                y,
Packit Service fb6fa5
			    GtkSelectionData   *data,
Packit Service fb6fa5
			    guint               info,
Packit Service fb6fa5
			    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if ((data->length >= 0) && (data->format == 8))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print ("Received \"%s\" in trashcan\n", (gchar *)data->data);
Packit Service fb6fa5
      gtk_drag_finish (context, TRUE, FALSE, time);
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_drag_finish (context, FALSE, FALSE, time);
Packit Service fb6fa5
}
Packit Service fb6fa5
  
Packit Service fb6fa5
void  
Packit Service fb6fa5
label_drag_data_received  (GtkWidget          *widget,
Packit Service fb6fa5
			    GdkDragContext     *context,
Packit Service fb6fa5
			    gint                x,
Packit Service fb6fa5
			    gint                y,
Packit Service fb6fa5
			    GtkSelectionData   *data,
Packit Service fb6fa5
			    guint               info,
Packit Service fb6fa5
			    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if ((data->length >= 0) && (data->format == 8))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_print ("Received \"%s\" in label\n", (gchar *)data->data);
Packit Service fb6fa5
      gtk_drag_finish (context, TRUE, FALSE, time);
Packit Service fb6fa5
      return;
Packit Service fb6fa5
    }
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_drag_finish (context, FALSE, FALSE, time);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
source_drag_data_get  (GtkWidget          *widget,
Packit Service fb6fa5
		       GdkDragContext     *context,
Packit Service fb6fa5
		       GtkSelectionData   *selection_data,
Packit Service fb6fa5
		       guint               info,
Packit Service fb6fa5
		       guint               time,
Packit Service fb6fa5
		       gpointer            data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (info == TARGET_ROOTWIN)
Packit Service fb6fa5
    g_print ("I was dropped on the rootwin\n");
Packit Service fb6fa5
  else
Packit Service fb6fa5
    gtk_selection_data_set (selection_data,
Packit Service fb6fa5
			    selection_data->target,
Packit Service fb6fa5
			    8, (guchar *) "I'm Data!", 9);
Packit Service fb6fa5
}
Packit Service fb6fa5
  
Packit Service fb6fa5
/* The following is a rather elaborate example demonstrating/testing
Packit Service fb6fa5
 * changing of the window hierarchy during a drag - in this case,
Packit Service fb6fa5
 * via a "spring-loaded" popup window.
Packit Service fb6fa5
 */
Packit Service fb6fa5
static GtkWidget *popup_window = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
static gboolean popped_up = FALSE;
Packit Service fb6fa5
static gboolean in_popup = FALSE;
Packit Service fb6fa5
static guint popdown_timer = 0;
Packit Service fb6fa5
static guint popup_timer = 0;
Packit Service fb6fa5
Packit Service fb6fa5
gint
Packit Service fb6fa5
popdown_cb (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  popdown_timer = 0;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_hide (popup_window);
Packit Service fb6fa5
  popped_up = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
popup_motion	   (GtkWidget	       *widget,
Packit Service fb6fa5
		    GdkDragContext     *context,
Packit Service fb6fa5
		    gint                x,
Packit Service fb6fa5
		    gint                y,
Packit Service fb6fa5
		    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (!in_popup)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      in_popup = TRUE;
Packit Service fb6fa5
      if (popdown_timer)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  g_print ("removed popdown\n");
Packit Service fb6fa5
	  g_source_remove (popdown_timer);
Packit Service fb6fa5
	  popdown_timer = 0;
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
popup_leave	   (GtkWidget	       *widget,
Packit Service fb6fa5
		    GdkDragContext     *context,
Packit Service fb6fa5
		    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (in_popup)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      in_popup = FALSE;
Packit Service fb6fa5
      if (!popdown_timer)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  g_print ("added popdown\n");
Packit Service fb6fa5
	  popdown_timer = gdk_threads_add_timeout (500, popdown_cb, NULL);
Packit Service fb6fa5
	}
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
popup_cb (gpointer data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (!popped_up)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      if (!popup_window)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  GtkWidget *button;
Packit Service fb6fa5
	  GtkWidget *table;
Packit Service fb6fa5
	  int i, j;
Packit Service fb6fa5
	  
Packit Service fb6fa5
	  popup_window = gtk_window_new (GTK_WINDOW_POPUP);
Packit Service fb6fa5
	  gtk_window_set_position (GTK_WINDOW (popup_window), GTK_WIN_POS_MOUSE);
Packit Service fb6fa5
Packit Service fb6fa5
	  table = gtk_table_new (3,3, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
	  for (i=0; i<3; i++)
Packit Service fb6fa5
	    for (j=0; j<3; j++)
Packit Service fb6fa5
	      {
Packit Service fb6fa5
		char buffer[128];
Packit Service fb6fa5
		g_snprintf(buffer, sizeof(buffer), "%d,%d", i, j);
Packit Service fb6fa5
		button = gtk_button_new_with_label (buffer);
Packit Service fb6fa5
		gtk_table_attach (GTK_TABLE (table), button, i, i+1, j, j+1,
Packit Service fb6fa5
				  GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
				  0, 0);
Packit Service fb6fa5
Packit Service fb6fa5
		gtk_drag_dest_set (button,
Packit Service fb6fa5
				   GTK_DEST_DEFAULT_ALL,
Packit Service fb6fa5
				   target_table, n_targets - 1, /* no rootwin */
Packit Service fb6fa5
				   GDK_ACTION_COPY | GDK_ACTION_MOVE);
Packit Service fb6fa5
		g_signal_connect (button, "drag_motion",
Packit Service fb6fa5
				  G_CALLBACK (popup_motion), NULL);
Packit Service fb6fa5
		g_signal_connect (button, "drag_leave",
Packit Service fb6fa5
				  G_CALLBACK (popup_leave), NULL);
Packit Service fb6fa5
	      }
Packit Service fb6fa5
Packit Service fb6fa5
	  gtk_widget_show_all (table);
Packit Service fb6fa5
	  gtk_container_add (GTK_CONTAINER (popup_window), table);
Packit Service fb6fa5
Packit Service fb6fa5
	}
Packit Service fb6fa5
      gtk_widget_show (popup_window);
Packit Service fb6fa5
      popped_up = TRUE;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  popdown_timer = gdk_threads_add_timeout (500, popdown_cb, NULL);
Packit Service fb6fa5
  g_print ("added popdown\n");
Packit Service fb6fa5
Packit Service fb6fa5
  popup_timer = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  return FALSE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
gboolean
Packit Service fb6fa5
popsite_motion	   (GtkWidget	       *widget,
Packit Service fb6fa5
		    GdkDragContext     *context,
Packit Service fb6fa5
		    gint                x,
Packit Service fb6fa5
		    gint                y,
Packit Service fb6fa5
		    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (!popup_timer)
Packit Service fb6fa5
    popup_timer = gdk_threads_add_timeout (500, popup_cb, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  return TRUE;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
popsite_leave	   (GtkWidget	       *widget,
Packit Service fb6fa5
		    GdkDragContext     *context,
Packit Service fb6fa5
		    guint               time)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (popup_timer)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_source_remove (popup_timer);
Packit Service fb6fa5
      popup_timer = 0;
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void  
Packit Service fb6fa5
source_drag_data_delete  (GtkWidget          *widget,
Packit Service fb6fa5
			  GdkDragContext     *context,
Packit Service fb6fa5
			  gpointer            data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  g_print ("Delete the data!\n");
Packit Service fb6fa5
}
Packit Service fb6fa5
  
Packit Service fb6fa5
void
Packit Service fb6fa5
test_init (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
Packit Service fb6fa5
		   G_FILE_TEST_EXISTS))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/gdk-pixbuf.loaders", TRUE);
Packit Service fb6fa5
      g_setenv ("GTK_IM_MODULE_FILE", "../modules/input/immodules.cache", TRUE);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
int 
Packit Service fb6fa5
main (int argc, char **argv)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *window;
Packit Service fb6fa5
  GtkWidget *table;
Packit Service fb6fa5
  GtkWidget *label;
Packit Service fb6fa5
  GtkWidget *pixmap;
Packit Service fb6fa5
  GtkWidget *button;
Packit Service fb6fa5
  GdkPixbuf *drag_icon;
Packit Service fb6fa5
Packit Service fb6fa5
  test_init ();
Packit Service fb6fa5
  
Packit Service fb6fa5
  gtk_init (&argc, &argv); 
Packit Service fb6fa5
Packit Service fb6fa5
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
  g_signal_connect (window, "destroy",
Packit Service fb6fa5
		    G_CALLBACK (gtk_main_quit), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  
Packit Service fb6fa5
  table = gtk_table_new (2, 2, FALSE);
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (window), table);
Packit Service fb6fa5
Packit Service fb6fa5
  drag_icon = gdk_pixbuf_new_from_xpm_data (drag_icon_xpm);
Packit Service fb6fa5
  trashcan_open = gdk_pixbuf_new_from_xpm_data (trashcan_open_xpm);
Packit Service fb6fa5
  trashcan_closed = gdk_pixbuf_new_from_xpm_data (trashcan_closed_xpm);
Packit Service fb6fa5
  
Packit Service fb6fa5
  label = gtk_label_new ("Drop Here\n");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_drag_dest_set (label,
Packit Service fb6fa5
		     GTK_DEST_DEFAULT_ALL,
Packit Service fb6fa5
		     target_table, n_targets - 1, /* no rootwin */
Packit Service fb6fa5
		     GDK_ACTION_COPY | GDK_ACTION_MOVE);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (label, "drag_data_received",
Packit Service fb6fa5
		    G_CALLBACK( label_drag_data_received), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
		    0, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  label = gtk_label_new ("Popup\n");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_drag_dest_set (label,
Packit Service fb6fa5
		     GTK_DEST_DEFAULT_ALL,
Packit Service fb6fa5
		     target_table, n_targets - 1, /* no rootwin */
Packit Service fb6fa5
		     GDK_ACTION_COPY | GDK_ACTION_MOVE);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
		    0, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (label, "drag_motion",
Packit Service fb6fa5
		    G_CALLBACK (popsite_motion), NULL);
Packit Service fb6fa5
  g_signal_connect (label, "drag_leave",
Packit Service fb6fa5
		    G_CALLBACK (popsite_leave), NULL);
Packit Service fb6fa5
  
Packit Service fb6fa5
  pixmap = gtk_image_new_from_pixbuf (trashcan_closed);
Packit Service fb6fa5
  gtk_drag_dest_set (pixmap, 0, NULL, 0, 0);
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), pixmap, 1, 2, 0, 1,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
		    0, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (pixmap, "drag_leave",
Packit Service fb6fa5
		    G_CALLBACK (target_drag_leave), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (pixmap, "drag_motion",
Packit Service fb6fa5
		    G_CALLBACK (target_drag_motion), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (pixmap, "drag_drop",
Packit Service fb6fa5
		    G_CALLBACK (target_drag_drop), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (pixmap, "drag_data_received",
Packit Service fb6fa5
		    G_CALLBACK (target_drag_data_received), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Drag site */
Packit Service fb6fa5
Packit Service fb6fa5
  button = gtk_button_new_with_label ("Drag Here\n");
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_drag_source_set (button, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
Packit Service fb6fa5
		       target_table, n_targets, 
Packit Service fb6fa5
		       GDK_ACTION_COPY | GDK_ACTION_MOVE);
Packit Service fb6fa5
  gtk_drag_source_set_icon_pixbuf (button, drag_icon);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (drag_icon);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,
Packit Service fb6fa5
		    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
		    0, 0);
Packit Service fb6fa5
Packit Service fb6fa5
  g_signal_connect (button, "drag_data_get",
Packit Service fb6fa5
		    G_CALLBACK (source_drag_data_get), NULL);
Packit Service fb6fa5
  g_signal_connect (button, "drag_data_delete",
Packit Service fb6fa5
		    G_CALLBACK (source_drag_data_delete), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show_all (window);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_main ();
Packit Service fb6fa5
Packit Service fb6fa5
  return 0;
Packit Service fb6fa5
}