]> Pileus Git - ~andy/gtk/blobdiff - tests/testdnd.c
Rename GdkQuartzWindow.h and .c to GdkQuartzNSWindow.h and .c
[~andy/gtk] / tests / testdnd.c
index f258c1b978db9b23d22571c646036ee942c76e74..375e5ab854815d29c63361a80be398d324e9b74d 100644 (file)
@@ -1,9 +1,30 @@
+/* testdnd.c
+ * Copyright (C) 1998  Red Hat, Inc.
+ * Author: Owen Taylor
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
 #include "gtk/gtk.h"
 
 /* Target side drag signals */
 
 /* XPM */
-static char * drag_icon_xpm[] = {
+static const char * drag_icon_xpm[] = {
 "36 48 9 1",
 "      c None",
 ".     c #020204",
@@ -64,7 +85,7 @@ static char * drag_icon_xpm[] = {
 "...................................."};
 
 /* XPM */
-static char * trashcan_closed_xpm[] = {
+static const char * trashcan_closed_xpm[] = {
 "64 80 17 1",
 "      c None",
 ".     c #030304",
@@ -165,7 +186,7 @@ static char * trashcan_closed_xpm[] = {
 "                                                                "};
 
 /* XPM */
-static char * trashcan_open_xpm[] = {
+static const char * trashcan_open_xpm[] = {
 "64 80 17 1",
 "      c None",
 ".     c #030304",
@@ -265,10 +286,8 @@ static char * trashcan_open_xpm[] = {
 "                                                                ",
 "                                                                "};
 
-GdkPixmap *trashcan_open;
-GdkPixmap *trashcan_open_mask;
-GdkPixmap *trashcan_closed;
-GdkPixmap *trashcan_closed_mask;
+GdkPixbuf *trashcan_open;
+GdkPixbuf *trashcan_closed;
 
 gboolean have_drag;
 
@@ -280,7 +299,7 @@ enum {
 static GtkTargetEntry target_table[] = {
   { "STRING",     0, TARGET_STRING },
   { "text/plain", 0, TARGET_STRING },
-  { "application/x-rootwin-drop", 0, TARGET_ROOTWIN }
+  { "application/x-rootwindow-drop", 0, TARGET_ROOTWIN }
 };
 
 static guint n_targets = sizeof(target_table) / sizeof(target_table[0]);
@@ -292,7 +311,7 @@ target_drag_leave      (GtkWidget          *widget,
 {
   g_print("leave\n");
   have_drag = FALSE;
-  gtk_pixmap_set (GTK_PIXMAP (widget), trashcan_closed, trashcan_closed_mask);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_closed);
 }
 
 gboolean
@@ -303,19 +322,31 @@ target_drag_motion           (GtkWidget          *widget,
                            guint               time)
 {
   GtkWidget *source_widget;
+  GList *tmp_list;
 
   if (!have_drag)
     {
       have_drag = TRUE;
-      gtk_pixmap_set (GTK_PIXMAP (widget), trashcan_open, trashcan_open_mask);
+      gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_open);
     }
 
   source_widget = gtk_drag_get_source_widget (context);
-  g_print("motion, source %s\n", source_widget ?
-           gtk_type_name (GTK_OBJECT (source_widget)->klass->type) :
-           "unknown");
+  g_print ("motion, source %s\n", source_widget ?
+          G_OBJECT_TYPE_NAME (source_widget) :
+          "NULL");
+
+  tmp_list = gdk_drag_context_list_targets (context);
+  while (tmp_list)
+    {
+      char *name = gdk_atom_name (GDK_POINTER_TO_ATOM (tmp_list->data));
+      g_print ("%s\n", name);
+      g_free (name);
+      
+      tmp_list = tmp_list->next;
+    }
+
+  gdk_drag_status (context, gdk_drag_context_get_suggested_action (context), time);
 
-  gdk_drag_status (context, context->suggested_action, time);
   return TRUE;
 }
 
@@ -329,12 +360,12 @@ target_drag_drop     (GtkWidget          *widget,
   g_print("drop\n");
   have_drag = FALSE;
 
-  gtk_pixmap_set (GTK_PIXMAP (widget), trashcan_closed, trashcan_closed_mask);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (widget), trashcan_closed);
 
-  if (context->targets)
+  if (gdk_drag_context_list_targets (context))
     {
-      gtk_drag_get_data (widget, context, 
-                        GPOINTER_TO_INT (context->targets->data), 
+      gtk_drag_get_data (widget, context,
+                        GDK_POINTER_TO_ATOM (gdk_drag_context_list_targets (context)->data),
                         time);
       return TRUE;
     }
@@ -347,13 +378,14 @@ target_drag_data_received  (GtkWidget          *widget,
                            GdkDragContext     *context,
                            gint                x,
                            gint                y,
-                           GtkSelectionData   *data,
+                           GtkSelectionData   *selection_data,
                            guint               info,
                            guint               time)
 {
-  if ((data->length >= 0) && (data->format == 8))
+  if (gtk_selection_data_get_length (selection_data) >= 0 &&
+      gtk_selection_data_get_format (selection_data) == 8)
     {
-      g_print ("Received \"%s\" in trashcan\n", (gchar *)data->data);
+      g_print ("Received \"%s\" in trashcan\n", (gchar *) gtk_selection_data_get_data (selection_data));
       gtk_drag_finish (context, TRUE, FALSE, time);
       return;
     }
@@ -366,13 +398,14 @@ label_drag_data_received  (GtkWidget          *widget,
                            GdkDragContext     *context,
                            gint                x,
                            gint                y,
-                           GtkSelectionData   *data,
+                           GtkSelectionData   *selection_data,
                            guint               info,
                            guint               time)
 {
-  if ((data->length >= 0) && (data->format == 8))
+  if (gtk_selection_data_get_length (selection_data) >= 0 &&
+      gtk_selection_data_get_format (selection_data) == 8)
     {
-      g_print ("Received \"%s\" in label\n", (gchar *)data->data);
+      g_print ("Received \"%s\" in label\n", (gchar *) gtk_selection_data_get_data (selection_data));
       gtk_drag_finish (context, TRUE, FALSE, time);
       return;
     }
@@ -392,12 +425,12 @@ source_drag_data_get  (GtkWidget          *widget,
     g_print ("I was dropped on the rootwin\n");
   else
     gtk_selection_data_set (selection_data,
-                           selection_data->target,
-                           8, "I'm Data!", 9);
+                           gtk_selection_data_get_target (selection_data),
+                           8, (guchar *) "I'm Data!", 9);
 }
   
 /* The following is a rather elaborate example demonstrating/testing
- * changing of the window heirarchy during a drag - in this case,
+ * changing of the window hierarchy during a drag - in this case,
  * via a "spring-loaded" popup window.
  */
 static GtkWidget *popup_window = NULL;
@@ -431,7 +464,7 @@ popup_motion           (GtkWidget          *widget,
       if (popdown_timer)
        {
          g_print ("removed popdown\n");
-         gtk_timeout_remove (popdown_timer);
+         g_source_remove (popdown_timer);
          popdown_timer = 0;
        }
     }
@@ -450,12 +483,12 @@ popup_leave          (GtkWidget          *widget,
       if (!popdown_timer)
        {
          g_print ("added popdown\n");
-         popdown_timer = gtk_timeout_add (500, popdown_cb, NULL);
+         popdown_timer = gdk_threads_add_timeout (500, popdown_cb, NULL);
        }
     }
 }
 
-gint
+gboolean
 popup_cb (gpointer data)
 {
   if (!popped_up)
@@ -485,10 +518,10 @@ popup_cb (gpointer data)
                                   GTK_DEST_DEFAULT_ALL,
                                   target_table, n_targets - 1, /* no rootwin */
                                   GDK_ACTION_COPY | GDK_ACTION_MOVE);
-               gtk_signal_connect (GTK_OBJECT (button), "drag_motion",
-                                   GTK_SIGNAL_FUNC (popup_motion), NULL);
-               gtk_signal_connect (GTK_OBJECT (button), "drag_leave",
-                                   GTK_SIGNAL_FUNC (popup_leave), NULL);
+               g_signal_connect (button, "drag_motion",
+                                 G_CALLBACK (popup_motion), NULL);
+               g_signal_connect (button, "drag_leave",
+                                 G_CALLBACK (popup_leave), NULL);
              }
 
          gtk_widget_show_all (table);
@@ -499,7 +532,7 @@ popup_cb (gpointer data)
       popped_up = TRUE;
     }
 
-  popdown_timer = gtk_timeout_add (500, popdown_cb, NULL);
+  popdown_timer = gdk_threads_add_timeout (500, popdown_cb, NULL);
   g_print ("added popdown\n");
 
   popup_timer = FALSE;
@@ -515,7 +548,7 @@ popsite_motion         (GtkWidget          *widget,
                    guint               time)
 {
   if (!popup_timer)
-    popup_timer = gtk_timeout_add (500, popup_cb, NULL);
+    popup_timer = gdk_threads_add_timeout (500, popup_cb, NULL);
 
   return TRUE;
 }
@@ -527,7 +560,7 @@ popsite_leave          (GtkWidget          *widget,
 {
   if (popup_timer)
     {
-      gtk_timeout_remove (popup_timer);
+      g_source_remove (popup_timer);
       popup_timer = 0;
     }
 }
@@ -540,6 +573,17 @@ source_drag_data_delete  (GtkWidget          *widget,
   g_print ("Delete the data!\n");
 }
   
+void
+test_init (void)
+{
+  if (g_file_test ("../gdk-pixbuf/libpixbufloader-pnm.la",
+                  G_FILE_TEST_EXISTS))
+    {
+      g_setenv ("GDK_PIXBUF_MODULE_FILE", "../gdk-pixbuf/loaders.cache", TRUE);
+      g_setenv ("GTK_IM_MODULE_FILE", "../modules/input/immodules.cache", TRUE);
+    }
+}
+
 int 
 main (int argc, char **argv)
 {
@@ -548,32 +592,23 @@ main (int argc, char **argv)
   GtkWidget *label;
   GtkWidget *pixmap;
   GtkWidget *button;
-  GdkPixmap *drag_icon;
-  GdkPixmap *drag_mask;
+  GdkPixbuf *drag_icon;
 
+  test_init ();
+  
   gtk_init (&argc, &argv); 
 
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_signal_connect (GTK_OBJECT(window), "destroy",
-                     GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
+  g_signal_connect (window, "destroy",
+                   G_CALLBACK (gtk_main_quit), NULL);
 
   
   table = gtk_table_new (2, 2, FALSE);
   gtk_container_add (GTK_CONTAINER (window), table);
 
-  drag_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL,
-                                                    gtk_widget_get_colormap (window),
-                                                    &drag_mask,
-                                                    NULL, drag_icon_xpm);
-
-  trashcan_open = gdk_pixmap_colormap_create_from_xpm_d (NULL,
-                                                        gtk_widget_get_colormap (window),
-                                                        &trashcan_open_mask,
-                                                        NULL, trashcan_open_xpm);
-  trashcan_closed = gdk_pixmap_colormap_create_from_xpm_d (NULL,
-                                                          gtk_widget_get_colormap (window),
-                                                          &trashcan_closed_mask,
-                                                          NULL, trashcan_closed_xpm);
+  drag_icon = gdk_pixbuf_new_from_xpm_data (drag_icon_xpm);
+  trashcan_open = gdk_pixbuf_new_from_xpm_data (trashcan_open_xpm);
+  trashcan_closed = gdk_pixbuf_new_from_xpm_data (trashcan_closed_xpm);
   
   label = gtk_label_new ("Drop Here\n");
 
@@ -582,8 +617,8 @@ main (int argc, char **argv)
                     target_table, n_targets - 1, /* no rootwin */
                     GDK_ACTION_COPY | GDK_ACTION_MOVE);
 
-  gtk_signal_connect( GTK_OBJECT(label), "drag_data_received",
-                     GTK_SIGNAL_FUNC( label_drag_data_received), NULL);
+  g_signal_connect (label, "drag_data_received",
+                   G_CALLBACK( label_drag_data_received), NULL);
 
   gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
                    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
@@ -600,28 +635,28 @@ main (int argc, char **argv)
                    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
                    0, 0);
 
-  gtk_signal_connect (GTK_OBJECT (label), "drag_motion",
-                     GTK_SIGNAL_FUNC (popsite_motion), NULL);
-  gtk_signal_connect (GTK_OBJECT (label), "drag_leave",
-                     GTK_SIGNAL_FUNC (popsite_leave), NULL);
+  g_signal_connect (label, "drag_motion",
+                   G_CALLBACK (popsite_motion), NULL);
+  g_signal_connect (label, "drag_leave",
+                   G_CALLBACK (popsite_leave), NULL);
   
-  pixmap = gtk_pixmap_new (trashcan_closed, trashcan_closed_mask);
+  pixmap = gtk_image_new_from_pixbuf (trashcan_closed);
   gtk_drag_dest_set (pixmap, 0, NULL, 0, 0);
   gtk_table_attach (GTK_TABLE (table), pixmap, 1, 2, 0, 1,
                    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
                    0, 0);
 
-  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_leave",
-                     GTK_SIGNAL_FUNC (target_drag_leave), NULL);
+  g_signal_connect (pixmap, "drag_leave",
+                   G_CALLBACK (target_drag_leave), NULL);
 
-  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_motion",
-                     GTK_SIGNAL_FUNC (target_drag_motion), NULL);
+  g_signal_connect (pixmap, "drag_motion",
+                   G_CALLBACK (target_drag_motion), NULL);
 
-  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_drop",
-                     GTK_SIGNAL_FUNC (target_drag_drop), NULL);
+  g_signal_connect (pixmap, "drag_drop",
+                   G_CALLBACK (target_drag_drop), NULL);
 
-  gtk_signal_connect (GTK_OBJECT (pixmap), "drag_data_received",
-                     GTK_SIGNAL_FUNC (target_drag_data_received), NULL);
+  g_signal_connect (pixmap, "drag_data_received",
+                   G_CALLBACK (target_drag_data_received), NULL);
 
   /* Drag site */
 
@@ -630,21 +665,18 @@ main (int argc, char **argv)
   gtk_drag_source_set (button, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
                       target_table, n_targets, 
                       GDK_ACTION_COPY | GDK_ACTION_MOVE);
-  gtk_drag_source_set_icon (button, 
-                           gtk_widget_get_colormap (window),
-                           drag_icon, drag_mask);
+  gtk_drag_source_set_icon_pixbuf (button, drag_icon);
 
-  gdk_pixmap_unref (drag_icon);
-  gdk_pixmap_unref (drag_mask);
+  g_object_unref (drag_icon);
 
   gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2,
                    GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
                    0, 0);
 
-  gtk_signal_connect (GTK_OBJECT (button), "drag_data_get",
-                     GTK_SIGNAL_FUNC (source_drag_data_get), NULL);
-  gtk_signal_connect (GTK_OBJECT (button), "drag_data_delete",
-                     GTK_SIGNAL_FUNC (source_drag_data_delete), NULL);
+  g_signal_connect (button, "drag_data_get",
+                   G_CALLBACK (source_drag_data_get), NULL);
+  g_signal_connect (button, "drag_data_delete",
+                   G_CALLBACK (source_drag_data_delete), NULL);
 
   gtk_widget_show_all (window);