From 1988e13749e613b4b378be1a6cb4bad7f17bebb0 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 25 Jun 2001 01:51:58 +0000 Subject: [PATCH] Add a special size for drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) Sun Jun 24 21:34:32 2001 Owen Taylor * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem with un'reffing wrong list reported by Jeff Franks. * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND for the default icon. Remove inline XPM. * gtk/gtkstock.h gtk/gtkiconfactory.c: Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new is used for GTK_STOCK_DND, but it is a bit too small.) * gtk/stock-icons/stock_dnd_multiple.png gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return TRUE when starting a drag. In other cases, we are just observing. (#52995) * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add function to set the icon for a drag from a GdkPixbuf or stock ID. * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): Likewise, for drag sources. * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. (Now should be done using the stock system.) --- ChangeLog | 34 ++ ChangeLog.pre-2-0 | 34 ++ ChangeLog.pre-2-10 | 34 ++ ChangeLog.pre-2-2 | 34 ++ ChangeLog.pre-2-4 | 34 ++ ChangeLog.pre-2-6 | 34 ++ ChangeLog.pre-2-8 | 34 ++ docs/reference/ChangeLog | 5 + docs/reference/gtk/gtk-sections.txt | 3 - docs/reference/gtk/tmpl/gtk-unused.sgml | 25 ++ docs/reference/gtk/tmpl/gtkdnd.sgml | 77 +--- docs/reference/gtk/tmpl/gtkiconfactory.sgml | 1 + docs/reference/gtk/tmpl/gtktextview.sgml | 10 - gtk/gtkdnd.c | 468 +++++++++++++------- gtk/gtkdnd.h | 64 +-- gtk/gtkenums.h | 1 + gtk/gtkiconfactory.c | 11 +- gtk/gtkmain.c | 4 +- gtk/gtkstock.h | 3 + gtk/stock-icons/Makefile.am | 2 + gtk/stock-icons/stock_dnd_multiple.png | Bin 0 -> 1843 bytes gtk/stock-icons/stock_dnd_multiple_32.png | Bin 0 -> 1843 bytes 22 files changed, 657 insertions(+), 255 deletions(-) create mode 100644 gtk/stock-icons/stock_dnd_multiple.png create mode 100644 gtk/stock-icons/stock_dnd_multiple_32.png diff --git a/ChangeLog b/ChangeLog index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 99bfd4ac8e..1ec7cfe029 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,37 @@ +Sun Jun 24 21:34:32 2001 Owen Taylor + + * gtk/gtkenums.h gtk/gtkiconfactory.c: Add a special size for + drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32) + + * gtk/gtkdnd.c (gtk_drag_dest_set_target_list): Fix problem + with un'reffing wrong list reported by Jeff Franks. + + * gtk/gtkdnd.[ch] (_gtk_drag_{source,}dest_handle_event): _prefix. + + * gtk/gtkdnd.c (gtk_drag_set_icon_default): Use GTK_STOCK_DND + for the default icon. Remove inline XPM. + + * gtk/gtkstock.h gtk/gtkiconfactory.c: + Add GTK_STOCK_DND GTK_STOCK_DND_MULTIPLE (Currently, stock_new + is used for GTK_STOCK_DND, but it is a bit too small.) + + * gtk/stock-icons/stock_dnd_multiple.png + gtk/stock-icons/Makefile.am: New stock icon moved from gnome-libs. + + * gtk/gtkdnd.c (gtk_drag_source_event_cb): Only return + TRUE when starting a drag. In other cases, we are + just observing. (#52995) + + * gtk/gtkdnd.[ch] (gtk_drag_set_icon_{stock,pixbuf}): Add + function to set the icon for a drag from a GdkPixbuf + or stock ID. + + * gtk/gtkdnd.[ch] (gtk_drag_source_set_icon_{stock,pixbuf}): + Likewise, for drag sources. + + * gtk/gtkdnd.h: Deprecate gtk_drag_set_default_icon. + (Now should be done using the stock system.) + Sun Jun 24 12:06:47 2001 Owen Taylor * gtk/gtktextview.[ch] (gtk_text_view_set_text_window_size): diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 6ddd476989..0c99021064 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,8 @@ +Sun Apr 15 15:04:12 2001 Owen Taylor + + * gtk/tmpl/gtkdnd.sgml: Move some of the function docs to the + C files. + Thu Jun 21 12:31:29 2001 Owen Taylor * gtk/gtk-sections.txt: Update a bit. diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index a6e323e590..fe1a409c2c 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -3545,9 +3545,6 @@ gtk_drag_check_threshold gtk_drag_source_set gtk_drag_source_set_icon gtk_drag_source_unset - -gtk_drag_source_handle_event -gtk_drag_dest_handle_event diff --git a/docs/reference/gtk/tmpl/gtk-unused.sgml b/docs/reference/gtk/tmpl/gtk-unused.sgml index 5e03313b25..889137cefe 100644 --- a/docs/reference/gtk/tmpl/gtk-unused.sgml +++ b/docs/reference/gtk/tmpl/gtk-unused.sgml @@ -1394,6 +1394,22 @@ This function is not usually used by users. @tree_column: @titles: + + +Internal function. + + +@toplevel: +@event: + + + +Internal function. + + +@widget: +@event: + Causes the "changed" signal to be emitted. @@ -1942,6 +1958,15 @@ Creates a border around the arrows of a #GtkSpinButton. The type of border is de @first: @second: + + + + + +@text_view: +@width: +@height: + Private: print debugging information while doing a gtk_object_ref() or diff --git a/docs/reference/gtk/tmpl/gtkdnd.sgml b/docs/reference/gtk/tmpl/gtkdnd.sgml index f73ba58918..fcf88848fc 100644 --- a/docs/reference/gtk/tmpl/gtkdnd.sgml +++ b/docs/reference/gtk/tmpl/gtkdnd.sgml @@ -265,56 +265,43 @@ gtk_drag_source_set() is used. -Change the icon for a widget to a given widget. GTK+ -will not destroy the icon, so if you don't want -it to persist, you should connect to the "drag_end" -signal and destroy it yourself. -@context: the context for a drag. (This must be called - with a context for the source side of a drag) -@widget: A toplevel window to use as an icon. -@hot_x: The X offset within @widget of the hotspot. -@hot_y: The Y offset within @widget of the hotspot. +@context: +@widget: +@hot_x: +@hot_y: -Sets a given pixmap as the icon for a given drag. -GTK+ retains a reference count for the arguments, and -will release them when they are no longer needed. -@context: the context for a drag. (This must be called - with a context for the source side of a drag) -@colormap: the colormap of the icon -@pixmap: the image data for the icon -@mask: the transparency mask for an image. -@hot_x: The X offset within @widget of the hotspot. -@hot_y: The Y offset within @widget of the hotspot. +@context: +@colormap: +@pixmap: +@mask: +@hot_x: +@hot_y: -Set the icon for a particular drag to the default -icon. -@context: the context for a drag. (This must be called - with a context for the source side of a drag) +@context: -Change the default drag icon. GTK+ retains a reference count for the -arguments, and will release them when they are no longer needed. + -@colormap: the colormap of the icon -@pixmap: the image data for the icon -@mask: the transparency mask for an image. -@hot_x: The X offset within @widget of the hotspot. -@hot_y: The Y offset within @widget of the hotspot. +@colormap: +@pixmap: +@mask: +@hot_x: +@hot_y: @@ -347,16 +334,12 @@ widget. The widget must have a window. -Sets the icon that will be used for drags from a -particular widget. GTK+ retains a reference count -for the arguments, and will release them when -they are no longer needed. -@widget: a #GtkWidget -@colormap: the colormap of the icon -@pixmap: the image data for the icon -@mask: the transparency mask for an image. +@widget: +@colormap: +@pixmap: +@mask: @@ -367,21 +350,3 @@ Undo the effects of gtk_drag_source_set(). @widget: a #GtkWidget - - -Internal function. - - -@widget: -@event: - - - - -Internal function. - - -@toplevel: -@event: - - diff --git a/docs/reference/gtk/tmpl/gtkiconfactory.sgml b/docs/reference/gtk/tmpl/gtkiconfactory.sgml index 2eec513dfe..16a6bf138c 100644 --- a/docs/reference/gtk/tmpl/gtkiconfactory.sgml +++ b/docs/reference/gtk/tmpl/gtkiconfactory.sgml @@ -62,6 +62,7 @@ looking up the icon to use for a given stock ID. @GTK_ICON_SIZE_SMALL_TOOLBAR: @GTK_ICON_SIZE_LARGE_TOOLBAR: @GTK_ICON_SIZE_BUTTON: +@GTK_ICON_SIZE_DND: @GTK_ICON_SIZE_DIALOG: diff --git a/docs/reference/gtk/tmpl/gtktextview.sgml b/docs/reference/gtk/tmpl/gtktextview.sgml index 3be7141f8f..57704920f0 100644 --- a/docs/reference/gtk/tmpl/gtktextview.sgml +++ b/docs/reference/gtk/tmpl/gtktextview.sgml @@ -242,16 +242,6 @@ types related to the text widget and how they work together. @size: - - - - - -@text_view: -@width: -@height: - - diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 5d14a4e8d1..bff1b76b45 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -39,9 +39,11 @@ #include "gdk/gdkkeysyms.h" #include "gtkdnd.h" +#include "gtkimage.h" #include "gtkinvisible.h" #include "gtkmain.h" #include "gtksignal.h" +#include "gtkstock.h" #include "gtkwindow.h" static GSList *drag_widgets = NULL; @@ -67,9 +69,17 @@ struct _GtkDragSourceSite GdkModifierType start_button_mask; GtkTargetList *target_list; /* Targets for drag data */ GdkDragAction actions; /* Possible actions */ + + /* Drag icon */ + GtkImageType icon_type; + union + { + GtkImagePixmapData pixmap; + GtkImagePixbufData pixbuf; + GtkImageStockData stock; + } icon_data; + GdkColormap *colormap; /* Colormap for drag icon */ - GdkPixmap *pixmap; /* Icon for drag data */ - GdkBitmap *mask; /* Stored button press information to detect drag beginning */ gint state; @@ -349,45 +359,6 @@ static struct { static const gint n_drag_cursors = sizeof (drag_cursors) / sizeof (drag_cursors[0]); -/* XPM */ -static const char *drag_default_xpm[] = { -"32 32 3 1", -" c None", -". c #000000", -"+ c #FFFFFF", -" ", -" ", -" .. ", -" ..+. ", -" ..++.. ", -" ...++++. ", -" ...++++++.. ", -" ...+++++++++. ", -" ...+++++++++++.. ", -" ..+.++++++++++++.. ", -" .++.++++++++++++.. ", -" .+++.++++++++++++.. ", -" .++++.++++++++++++. ", -" .+++.+++++++++++++.. ", -" .++.+++++++++++++++.. ", -" .+.+++++++++++++++++.. ", -" ..+++++++++++++++++++.. ", -" ..++++++++++++++++++++. ", -" .++++++++++++++++++++.. ", -" ..+++++++++++++++++.. ", -" .++++++++++++++++.. ", -" ..+++++++++++++... ", -" .++++++++++++.. ", -" ..+++++++++.. ", -" .++++++++.. ", -" ..++++++.. ", -" .+++++.. ", -" .++.. ", -" ... ", -" .. ", -" ", -" "}; - /********************* * Utility functions * *********************/ @@ -983,7 +954,7 @@ gtk_drag_dest_set_target_list (GtkWidget *widget, } if (target_list) - gtk_target_list_ref (site->target_list); + gtk_target_list_ref (target_list); if (site->target_list) gtk_target_list_unref (site->target_list); @@ -993,7 +964,7 @@ gtk_drag_dest_set_target_list (GtkWidget *widget, /************************************************************* - * gtk_drag_dest_handle_event: + * _gtk_drag_dest_handle_event: * Called from widget event handling code on Drag events * for destinations. * @@ -1004,7 +975,7 @@ gtk_drag_dest_set_target_list (GtkWidget *widget, *************************************************************/ void -gtk_drag_dest_handle_event (GtkWidget *toplevel, +_gtk_drag_dest_handle_event (GtkWidget *toplevel, GdkEvent *event) { GtkDragDestInfo *info; @@ -1894,6 +1865,8 @@ gtk_drag_source_set (GtkWidget *widget, else { site = g_new0 (GtkDragSourceSite, 1); + + site->icon_type = GTK_IMAGE_EMPTY; gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC (gtk_drag_source_event_cb), @@ -1942,16 +1915,48 @@ gtk_drag_source_unset (GtkWidget *widget) } } -/************************************************************* - * gtk_drag_source_set_icon: - * Set an icon for drags from this source. - * arguments: - * colormap: Colormap for this icon - * pixmap: - * mask - * results: - *************************************************************/ +static void +gtk_drag_source_unset_icon (GtkDragSourceSite *site) +{ + switch (site->icon_type) + { + case GTK_IMAGE_EMPTY: + break; + case GTK_IMAGE_PIXMAP: + if (site->icon_data.pixmap.pixmap) + gdk_pixmap_unref (site->icon_data.pixmap.pixmap); + if (site->icon_data.pixmap.mask) + gdk_pixmap_unref (site->icon_data.pixmap.mask); + break; + case GTK_IMAGE_PIXBUF: + g_object_unref (G_OBJECT (site->icon_data.pixbuf.pixbuf)); + break; + case GTK_IMAGE_STOCK: + g_free (G_OBJECT (site->icon_data.stock.stock_id)); + break; + default: + g_assert_not_reached(); + break; + } + site->icon_type = GTK_IMAGE_EMPTY; + + if (site->colormap) + gdk_colormap_unref (site->colormap); + site->colormap = NULL; +} +/** + * gtk_drag_source_set_icon: + * @widget: a #GtkWidget + * @colormap: the colormap of the icon + * @pixmap: the image data for the icon + * @mask: the transparency mask for an image. + * + * Sets the icon that will be used for drags from a particular widget + * from a pixmap/mask. GTK+ retains a reference count for the + * arguments, and will release them when they are no longer needed. + * Use gtk_drag_source_set_icon_pixbuf() instead. + **/ void gtk_drag_source_set_icon (GtkWidget *widget, GdkColormap *colormap, @@ -1961,40 +1966,81 @@ gtk_drag_source_set_icon (GtkWidget *widget, GtkDragSourceSite *site; g_return_if_fail (widget != NULL); + g_return_if_fail (GDK_IS_COLORMAP (colormap)); + g_return_if_fail (GDK_IS_PIXMAP (pixmap)); + g_return_if_fail (!mask || GDK_IS_PIXMAP (mask)); site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-site-data"); g_return_if_fail (site != NULL); - if (site->colormap) - gdk_colormap_unref (site->colormap); - if (site->pixmap) - gdk_pixmap_unref (site->pixmap); - if (site->mask) - gdk_pixmap_unref (site->mask); - - site->colormap = colormap; - if (colormap) - gdk_colormap_ref (colormap); - - site->pixmap = pixmap; - if (pixmap) - gdk_pixmap_ref (pixmap); - - site->mask = mask; + gdk_colormap_ref (colormap); + gdk_pixmap_ref (pixmap); if (mask) gdk_pixmap_ref (mask); + + gtk_drag_source_unset_icon (site); + + site->icon_type = GTK_IMAGE_PIXMAP; + + site->icon_data.pixmap.pixmap = pixmap; + site->icon_data.pixmap.mask = mask; + site->colormap = colormap; } -/************************************************************* - * gtk_drag_set_icon_window: - * Set a widget as the icon for a drag. - * arguments: - * context: - * widget: - * hot_x: Hot spot - * hot_y: - * results: - *************************************************************/ +/** + * gtk_drag_source_set_icon_pixbuf: + * @widget: a #GtkWidget + * @pixbuf: the #GdkPixbuf for the drag icon + * + * Sets the icon that will be used for drags from a particular widget + * from a #GdkPixbuf. GTK+ retains a reference count @pixbuf. + * and will release it when it is no longer needed. + **/ +void +gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, + GdkPixbuf *pixbuf) +{ + GtkDragSourceSite *site; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GDK_IS_PIXBUF (pixbuf)); + + site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-site-data"); + g_return_if_fail (site != NULL); + + gdk_pixbuf_ref (pixbuf); + + gtk_drag_source_unset_icon (site); + + site->icon_type = GTK_IMAGE_PIXBUF; + site->icon_data.pixbuf.pixbuf = pixbuf; +} + +/** + * gtk_drag_source_set_icon_stock: + * @widget: a #GtkWidget + * @stock: the ID of the stock icon to use.. + * @size: size at which to render the stock icon + * + * Sets the icon that will be used for drags from a particular to + * a stock icon. + **/ +void +gtk_drag_source_set_icon_stock (GtkWidget *widget, + const gchar *stock_id) +{ + GtkDragSourceSite *site; + + g_return_if_fail (widget != NULL); + g_return_if_fail (stock_id != NULL); + + site = gtk_object_get_data (GTK_OBJECT (widget), "gtk-site-data"); + g_return_if_fail (site != NULL); + + gtk_drag_source_unset_icon (site); + + site->icon_data.stock.stock_id = g_strdup (stock_id); +} static void gtk_drag_set_icon_window (GdkDragContext *context, @@ -2028,17 +2074,19 @@ gtk_drag_set_icon_window (GdkDragContext *context, info->destroy_icon = destroy_on_release; } -/************************************************************* +/** * gtk_drag_set_icon_widget: - * Set a widget as the icon for a drag. - * arguments: - * context: - * widget: - * hot_x: Hot spot - * hot_y: - * results: - *************************************************************/ - + * @context: the context for a drag. (This must be called + with a context for the source side of a drag) + * @widget: a toplevel window to use as an icon. + * @hot_x: the X offset within @widget of the hotspot. + * @hot_y: the Y offset within @widget of the hotspot. + * + * Changes the icon for a widget to a given widget. GTK+ + * will not destroy the icon, so if you don't want + * it to persist, you should connect to the "drag_end" + * signal and destroy it yourself. + **/ void gtk_drag_set_icon_widget (GdkDragContext *context, GtkWidget *widget, @@ -2051,19 +2099,123 @@ gtk_drag_set_icon_widget (GdkDragContext *context, gtk_drag_set_icon_window (context, widget, hot_x, hot_y, FALSE); } -/************************************************************* - * gtk_drag_set_icon_pixmap: - * Set a widget as the icon for a drag. - * arguments: - * context: - * colormap: Colormap for the icon window. - * pixmap: - * mask: - * hot_x: Hot spot - * hot_y: - * results: - *************************************************************/ +static void +set_icon_stock_pixbuf (GdkDragContext *context, + const gchar *stock_id, + GdkPixbuf *pixbuf, + gint hot_x, + gint hot_y) +{ + GtkWidget *window; + gint width, height; + GdkPixmap *pixmap; + GdkPixmap *mask; + + g_return_if_fail (context != NULL); + g_return_if_fail (pixbuf != NULL || stock_id != NULL); + g_return_if_fail (pixbuf == NULL || stock_id == NULL); + gtk_widget_push_colormap (gdk_rgb_get_colormap ()); + window = gtk_window_new (GTK_WINDOW_POPUP); + gtk_widget_pop_colormap (); + + gtk_widget_set_events (window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); + gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE); + + if (stock_id) + { + pixbuf = gtk_widget_render_icon (window, stock_id, + GTK_ICON_SIZE_DND, NULL); + + if (!pixbuf) + { + g_warning ("Cannot load drag icon from stock_id %s", stock_id); + gtk_widget_destroy (window); + return; + } + + } + + width = gdk_pixbuf_get_width (pixbuf); + height = gdk_pixbuf_get_width (pixbuf); + + gtk_widget_set_usize (window, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf)); + gtk_widget_realize (window); + + gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, &mask, 128); + + gdk_window_set_back_pixmap (window->window, pixmap, FALSE); + + if (mask) + gtk_widget_shape_combine_mask (window, mask, 0, 0); + + g_object_unref (G_OBJECT (pixmap)); + g_object_unref (G_OBJECT (mask)); + + gtk_drag_set_icon_window (context, window, hot_x, hot_y, TRUE); +} + +/** + * gtk_drag_set_icon_pixbuf: + * @context: the context for a drag. (This must be called + * with a context for the source side of a drag) + * @pixbuf: the #GdkPixbuf to use as the drag icon. + * @hot_x: the X offset within @widget of the hotspot. + * @hot_y: the Y offset within @widget of the hotspot. + * + * Sets @pixbuf as the icon for a given drag. + **/ +void +gtk_drag_set_icon_pixbuf (GdkDragContext *context, + GdkPixbuf *pixbuf, + gint hot_x, + gint hot_y) +{ + g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + g_return_if_fail (GDK_IS_PIXBUF (pixbuf)); + + set_icon_stock_pixbuf (context, NULL, pixbuf, hot_x, hot_y); +} + +/** + * gtk_drag_set_icon_pixbuf: + * @context: the context for a drag. (This must be called + * with a context for the source side of a drag) + * @stock: the ID of the stock icon to use for the drag. + * @hot_x: the X offset within the icon of the hotspot. + * @hot_y: the Y offset within the icon of the hotspot. + * + * Sets the the icon for a given drag from a stock ID. + **/ +void +gtk_drag_set_icon_stock (GdkDragContext *context, + const gchar *stock_id, + gint hot_x, + gint hot_y) +{ + g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + g_return_if_fail (stock_id != NULL); + + set_icon_stock_pixbuf (context, stock_id, NULL, hot_x, hot_y); +} + +/** + * gtk_drag_set_icon_pixmap: + * @context: the context for a drag. (This must be called + * with a context for the source side of a drag) + * @colormap: the colormap of the icon + * @pixmap: the image data for the icon + * @mask: the transparency mask for the icon + * @hot_x: the X offset within @pixmap of the hotspot. + * @hot_y: the Y offset within @pixmap of the hotspot. + * + * Sets @pixmap as the icon for a given drag. GTK+ retains a + * reference count for the arguments, and will release them when + * they are no longer needed. In general, gtk_drag_set_icon_pixbuf() + * will be more convenient to use. + **/ void gtk_drag_set_icon_pixmap (GdkDragContext *context, GdkColormap *colormap, @@ -2100,51 +2252,43 @@ gtk_drag_set_icon_pixmap (GdkDragContext *context, gtk_drag_set_icon_window (context, window, hot_x, hot_y, TRUE); } -/************************************************************* +/** * gtk_drag_set_icon_default: - * Set the icon for a drag to the default icon. - * arguments: - * context: - * results: - *************************************************************/ - + * @context: the context for a drag. (This must be called + with a context for the source side of a drag) + * + * Sets the icon for a particular drag to the default + * icon. + **/ void gtk_drag_set_icon_default (GdkDragContext *context) { g_return_if_fail (context != NULL); if (!default_icon_pixmap) - { - default_icon_colormap = gdk_colormap_get_system (); - default_icon_pixmap = - gdk_pixmap_colormap_create_from_xpm_d (NULL, - default_icon_colormap, - &default_icon_mask, - NULL, (gchar **)drag_default_xpm); - default_icon_hot_x = -2; - default_icon_hot_y = -2; - } - - gtk_drag_set_icon_pixmap (context, - default_icon_colormap, - default_icon_pixmap, - default_icon_mask, - default_icon_hot_x, - default_icon_hot_y); + gtk_drag_set_icon_stock (context, GTK_STOCK_DND, -2, -2); + else + gtk_drag_set_icon_pixmap (context, + default_icon_colormap, + default_icon_pixmap, + default_icon_mask, + default_icon_hot_x, + default_icon_hot_y); } -/************************************************************* +/** * gtk_drag_set_default_icon: - * Set a default icon for all drags as a pixmap. - * arguments: - * colormap: Colormap for the icon window. - * pixmap: - * mask: - * hot_x: Hot spot - * hot_y: - * results: - *************************************************************/ - + * @colormap: the colormap of the icon + * @pixmap: the image data for the icon + * @mask: the transparency mask for an image. + * @hot_x: The X offset within @widget of the hotspot. + * @hot_y: The Y offset within @widget of the hotspot. + * + * Changes the default drag icon. GTK+ retains a reference count for the + * arguments, and will release them when they are no longer needed. + * This function is obsolete. The default icon should now be changed + * via the stock system by changing the stock pixbuf for GTK_STOCK_DND. + **/ void gtk_drag_set_default_icon (GdkColormap *colormap, GdkPixmap *pixmap, @@ -2178,7 +2322,7 @@ gtk_drag_set_default_icon (GdkColormap *colormap, /************************************************************* - * gtk_drag_source_handle_event: + * _gtk_drag_source_handle_event: * Called from widget event handling code on Drag events * for drag sources. * @@ -2189,8 +2333,8 @@ gtk_drag_set_default_icon (GdkColormap *colormap, *************************************************************/ void -gtk_drag_source_handle_event (GtkWidget *widget, - GdkEvent *event) +_gtk_drag_source_handle_event (GtkWidget *widget, + GdkEvent *event) { GtkDragSourceInfo *info; GdkDragContext *context; @@ -2477,16 +2621,12 @@ gtk_drag_source_event_cb (GtkWidget *widget, site->state |= (GDK_BUTTON1_MASK << (event->button.button - 1)); site->x = event->button.x; site->y = event->button.y; - retval = TRUE; } break; case GDK_BUTTON_RELEASE: if ((GDK_BUTTON1_MASK << (event->button.button - 1)) & site->start_button_mask) - { - site->state &= ~(GDK_BUTTON1_MASK << (event->button.button - 1)); - retval = TRUE; - } + site->state &= ~(GDK_BUTTON1_MASK << (event->button.button - 1)); break; case GDK_MOTION_NOTIFY: @@ -2518,13 +2658,32 @@ gtk_drag_source_event_cb (GtkWidget *widget, if (!info->icon_window) { - if (site->pixmap) - gtk_drag_set_icon_pixmap (context, - site->colormap, - site->pixmap, - site->mask, -2, -2); - else - gtk_drag_set_icon_default (context); + switch (site->icon_type) + { + case GTK_IMAGE_EMPTY: + gtk_drag_set_icon_default (context); + break; + case GTK_IMAGE_PIXMAP: + gtk_drag_set_icon_pixmap (context, + site->colormap, + site->icon_data.pixmap.pixmap, + site->icon_data.pixmap.mask, + -2, -2); + break; + case GTK_IMAGE_PIXBUF: + gtk_drag_set_icon_pixbuf (context, + site->icon_data.pixbuf.pixbuf, + -2, -2); + break; + case GTK_IMAGE_STOCK: + gtk_drag_set_icon_stock (context, + site->icon_data.stock.stock_id, + -2, -2); + break; + default: + g_assert_not_reached(); + break; + } } retval = TRUE; @@ -2547,12 +2706,7 @@ gtk_drag_source_site_destroy (gpointer data) if (site->target_list) gtk_target_list_unref (site->target_list); - if (site->pixmap) - gdk_pixmap_unref (site->pixmap); - - if (site->mask) - gdk_pixmap_unref (site->mask); - + gtk_drag_source_unset_icon (site); g_free (site); } diff --git a/gtk/gtkdnd.h b/gtk/gtkdnd.h index 1a589d349b..8bb7aeb429 100644 --- a/gtk/gtkdnd.h +++ b/gtk/gtkdnd.h @@ -96,10 +96,14 @@ void gtk_drag_source_set (GtkWidget *widget, void gtk_drag_source_unset (GtkWidget *widget); -void gtk_drag_source_set_icon (GtkWidget *widget, - GdkColormap *colormap, - GdkPixmap *pixmap, - GdkBitmap *mask); +void gtk_drag_source_set_icon (GtkWidget *widget, + GdkColormap *colormap, + GdkPixmap *pixmap, + GdkBitmap *mask); +void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget, + GdkPixbuf *pixbuf); +void gtk_drag_source_set_icon_stock (GtkWidget *widget, + const gchar *stock_id); /* There probably should be functions for setting the targets * as a GtkTargetList @@ -113,27 +117,27 @@ GdkDragContext *gtk_drag_begin (GtkWidget *widget, /* Set the image being dragged around */ -void gtk_drag_set_icon_widget (GdkDragContext *context, - GtkWidget *widget, - gint hot_x, - gint hot_y); - -void gtk_drag_set_icon_pixmap (GdkDragContext *context, - GdkColormap *colormap, - GdkPixmap *pixmap, - GdkBitmap *mask, - gint hot_x, - gint hot_y); +void gtk_drag_set_icon_widget (GdkDragContext *context, + GtkWidget *widget, + gint hot_x, + gint hot_y); +void gtk_drag_set_icon_pixmap (GdkDragContext *context, + GdkColormap *colormap, + GdkPixmap *pixmap, + GdkBitmap *mask, + gint hot_x, + gint hot_y); +void gtk_drag_set_icon_pixbuf (GdkDragContext *context, + GdkPixbuf *pixbuf, + gint hot_x, + gint hot_y); +void gtk_drag_set_icon_stock (GdkDragContext *context, + const gchar *stock_id, + gint hot_x, + gint hot_y); void gtk_drag_set_icon_default (GdkDragContext *context); -void gtk_drag_set_default_icon (GdkColormap *colormap, - GdkPixmap *pixmap, - GdkBitmap *mask, - gint hot_x, - gint hot_y); - - gboolean gtk_drag_check_threshold (GtkWidget *widget, gint start_x, gint start_y, @@ -141,10 +145,18 @@ gboolean gtk_drag_check_threshold (GtkWidget *widget, gint current_y); /* Internal functions */ -void gtk_drag_source_handle_event (GtkWidget *widget, - GdkEvent *event); -void gtk_drag_dest_handle_event (GtkWidget *toplevel, - GdkEvent *event); +void _gtk_drag_source_handle_event (GtkWidget *widget, + GdkEvent *event); +void _gtk_drag_dest_handle_event (GtkWidget *toplevel, + GdkEvent *event); + +#ifndef GTK_DISABLE_DEPRECATED +void gtk_drag_set_default_icon (GdkColormap *colormap, + GdkPixmap *pixmap, + GdkBitmap *mask, + gint hot_x, + gint hot_y); +#endif /* !GTK_DISABLE_DEPRECATED */ #ifdef __cplusplus } diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index 88c204a145..0f3545dc7b 100644 --- a/gtk/gtkenums.h +++ b/gtk/gtkenums.h @@ -123,6 +123,7 @@ typedef enum GTK_ICON_SIZE_SMALL_TOOLBAR, GTK_ICON_SIZE_LARGE_TOOLBAR, GTK_ICON_SIZE_BUTTON, + GTK_ICON_SIZE_DND, GTK_ICON_SIZE_DIALOG } GtkIconSize; diff --git a/gtk/gtkiconfactory.c b/gtk/gtkiconfactory.c index 697281f753..ae80f3180b 100644 --- a/gtk/gtkiconfactory.c +++ b/gtk/gtkiconfactory.c @@ -461,6 +461,10 @@ get_default_icons (GtkIconFactory *factory) add_sized (factory, dialog_question, GTK_ICON_SIZE_DIALOG, GTK_STOCK_DIALOG_QUESTION); add_sized (factory, dialog_warning, GTK_ICON_SIZE_DIALOG, GTK_STOCK_DIALOG_WARNING); + /* dnd size only */ + add_sized (factory, stock_new, GTK_ICON_SIZE_DND, GTK_STOCK_DND); + add_sized (factory, stock_dnd_multiple, GTK_ICON_SIZE_DND, GTK_STOCK_DND_MULTIPLE); + /* Only have button sizes */ add_sized (factory, stock_button_apply, GTK_ICON_SIZE_BUTTON, GTK_STOCK_APPLY); add_sized (factory, stock_button_cancel, GTK_ICON_SIZE_BUTTON, GTK_STOCK_CANCEL); @@ -585,7 +589,7 @@ init_icon_sizes (void) { if (icon_sizes == NULL) { -#define NUM_BUILTIN_SIZES 6 +#define NUM_BUILTIN_SIZES 7 gint i; icon_aliases = g_hash_table_new (g_str_hash, g_str_equal); @@ -625,6 +629,11 @@ init_icon_sizes (void) icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].width = 24; icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].height = 24; + icon_sizes[GTK_ICON_SIZE_DND].size = GTK_ICON_SIZE_DND; + icon_sizes[GTK_ICON_SIZE_DND].name = "gtk-dnd"; + icon_sizes[GTK_ICON_SIZE_DND].width = 32; + icon_sizes[GTK_ICON_SIZE_DND].height = 32; + icon_sizes[GTK_ICON_SIZE_DIALOG].size = GTK_ICON_SIZE_DIALOG; icon_sizes[GTK_ICON_SIZE_DIALOG].name = "gtk-dialog"; icon_sizes[GTK_ICON_SIZE_DIALOG].width = 48; diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 4f61bf4fc6..f51d8253da 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -946,13 +946,13 @@ gtk_main_do_event (GdkEvent *event) case GDK_DRAG_STATUS: case GDK_DROP_FINISHED: - gtk_drag_source_handle_event (event_widget, event); + _gtk_drag_source_handle_event (event_widget, event); break; case GDK_DRAG_ENTER: case GDK_DRAG_LEAVE: case GDK_DRAG_MOTION: case GDK_DROP_START: - gtk_drag_dest_handle_event (event_widget, event); + _gtk_drag_dest_handle_event (event_widget, event); break; default: g_assert_not_reached (); diff --git a/gtk/gtkstock.h b/gtk/gtkstock.h index c870bbbb77..4aff435d0d 100644 --- a/gtk/gtkstock.h +++ b/gtk/gtkstock.h @@ -67,6 +67,9 @@ void gtk_stock_item_free (GtkStockItem *item); #define GTK_STOCK_DIALOG_ERROR "gtk-dialog-error" #define GTK_STOCK_DIALOG_QUESTION "gtk-dialog-question" +#define GTK_STOCK_DND "gtk-dnd" +#define GTK_STOCK_DND_MULTIPLE "gtk-dnd-multiple" + #define GTK_STOCK_ADD "gtk-add" #define GTK_STOCK_APPLY "gtk-apply" #define GTK_STOCK_BOLD "gtk-bold" diff --git a/gtk/stock-icons/Makefile.am b/gtk/stock-icons/Makefile.am index eac408bce1..22f1234cc9 100644 --- a/gtk/stock-icons/Makefile.am +++ b/gtk/stock-icons/Makefile.am @@ -24,6 +24,7 @@ IMAGES = @STRIP_BEGIN@ \ stock_convert.png \ stock_copy.png \ stock_cut.png \ + stock_dnd_multiple.png \ stock_down_arrow.png \ stock_exec.png \ stock_exit.png \ @@ -85,6 +86,7 @@ VARIABLES = @STRIP_BEGIN@ \ stock_button_apply $(srcdir)/stock_button_apply.png \ stock_button_cancel $(srcdir)/stock_button_cancel.png \ stock_button_close $(srcdir)/stock_button_close.png \ + stock_dnd_multiple $(srcdir)/stock_dnd_multiple.png \ stock_button_no $(srcdir)/stock_button_no.png \ stock_button_ok $(srcdir)/stock_button_ok.png \ stock_button_yes $(srcdir)/stock_button_yes.png \ diff --git a/gtk/stock-icons/stock_dnd_multiple.png b/gtk/stock-icons/stock_dnd_multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c21ec739bd4a26ff65cb6681b32e32dae31907 GIT binary patch literal 1843 zcmV-32h8}1P)AH695EK~`Dl@WxY$JQonQX+c z1v1D84nm>BN*F@qeUvw;(lA!WT2N|>QpymOxwuhc-Lf%cn;B>WEeIknQnau1{e`x_ z{qfv;>7}<)$c#^Na?ZW?{Lc5~Ip=#We7=v|YJ&be!Jk>VI7FgfBI*tm-KtKqmS!+^ z#1L#p@!m(3JiReDD(>wNkhQ-`r$>6&xc$Xj)k|r?CK3~3vAr70*4Q3ReNz+fR$O8J z;@^hr2TDNl)-PpbN<0CdmupSUlwG{aip@Kssgh+GGnq4GB9`Lc=If) z)@~n=1CqCXDfbOYz~^yLN@3Xw$7^VAZ{t{5Io-y?@(s^N6fJ*pDju(gv15iYdeji^ z8XE5saWu8{Z6w{BHXsKgz-`A>5VF*AdNo^9*VxEA|2<7hYX^%~7WP@Jp|Y6R*f?I^ zca+)bS+^u0YZlJsd*2wr;5dI6q&KMT=|#p?5x;3|bM|~4**OQv-+hQp>wd|jkBsA? zardMA6T`2}>JJ>iHa$3AgU4^8Dz}}R2ss*UY)}qO&0U)Ayzy+hlj?GB`IkL zA75>c0O~gf%HJ;~GpCU9OP6WsY{M60vHvee7(Q`6L&v9cy!;%VfQ2{4qD#7X|Kw#_ z+7##*8k^zhzt1ss#yXxzpGIoxXhwd06bXq#`P)BE4Q$s-dzl<5eO>^0V&;!RVInVV zoi9&iJSKotp4lnVxL*#xnkj(n+O|ka-pH0^i+?VFOn&UUlAbnQ4j$MkwN(`&U3H%s zN)ZI!d~I_W6p-BK(&fW%M^w%1^Lg1|unmSaHqcy`NctXlsPOVfVFl!w0qfH8`u z_Ezeenz>Zd*gJxwinV$JKes%C3HJ{pDKQquYfxIDwZa&M?$uB>C_`exmjHNp+yfX( zV=RTS6iI{PNJ$yY*Y54)?c$A;U#Mo`s^9hNfGnInok+MSh9o6g){i+_rHZ@YqU`qTSbu3!Er-N3$^tPoT&JeMJsY69f*wykT7^q zu*fY4sWq1Cg4PPl)_|e9rkMpx+ik6) z%xB#6^cg&U%k6yzZ@|Liv#4)uXHLeJ@ID9;P|LFNXl!W>D!xI&*f(!JcLM^@)5i2^ zKOlE&29sxJap{vP7c`_isM_&bXv+i2N6BA5j5q}mQT(6Nmt8OoN(F(n>xwq6dX$9@ z5s)^n)z^gUYa1GAyWSC2ZF_7NSjT|!Q(bqRS@SkUoPyp2)Z(?pz@)7-vl5hdmdv_hx6?Tqw)Lvy@=YNEWqve6qhh7 zZCM}8sMm3IZBzK@X-m1*D-&Mq(#KV#r%eYSG4ZQB_`rSm{ey$5{h(umE(`)4Lv>w8 zRPcTYyz}0LaQJ9_WAjzlHnXSrE$$xqV|Eq10-$Ej*}#E69;c@6I;fZ+us7(G7j%G< z!^gPYN7}9yNq7A|k*3$B>cT#GIX|=a_1b4XAb)?mSft|vkB&Q>tdGte_pu(Z%OFwr+KR7ft$EH0^ZD6Y&cNG!=r&ezK?N(TUZ zY7hB%_7uVZ001+3R9JLVX=iR>bairN004N}Gc`;xNisG`vM{ntOEXSQwzM!ZH%l`$ hu{5AH695EK~`Dl@WxY$JQonQX+c z1v1D84nm>BN*F@qeUvw;(lA!WT2N|>QpymOxwuhc-Lf%cn;B>WEeIknQnau1{e`x_ z{qfv;>7}<)$c#^Na?ZW?{Lc5~Ip=#We7=v|YJ&be!Jk>VI7FgfBI*tm-KtKqmS!+^ z#1L#p@!m(3JiReDD(>wNkhQ-`r$>6&xc$Xj)k|r?CK3~3vAr70*4Q3ReNz+fR$O8J z;@^hr2TDNl)-PpbN<0CdmupSUlwG{aip@Kssgh+GGnq4GB9`Lc=If) z)@~n=1CqCXDfbOYz~^yLN@3Xw$7^VAZ{t{5Io-y?@(s^N6fJ*pDju(gv15iYdeji^ z8XE5saWu8{Z6w{BHXsKgz-`A>5VF*AdNo^9*VxEA|2<7hYX^%~7WP@Jp|Y6R*f?I^ zca+)bS+^u0YZlJsd*2wr;5dI6q&KMT=|#p?5x;3|bM|~4**OQv-+hQp>wd|jkBsA? zardMA6T`2}>JJ>iHa$3AgU4^8Dz}}R2ss*UY)}qO&0U)Ayzy+hlj?GB`IkL zA75>c0O~gf%HJ;~GpCU9OP6WsY{M60vHvee7(Q`6L&v9cy!;%VfQ2{4qD#7X|Kw#_ z+7##*8k^zhzt1ss#yXxzpGIoxXhwd06bXq#`P)BE4Q$s-dzl<5eO>^0V&;!RVInVV zoi9&iJSKotp4lnVxL*#xnkj(n+O|ka-pH0^i+?VFOn&UUlAbnQ4j$MkwN(`&U3H%s zN)ZI!d~I_W6p-BK(&fW%M^w%1^Lg1|unmSaHqcy`NctXlsPOVfVFl!w0qfH8`u z_Ezeenz>Zd*gJxwinV$JKes%C3HJ{pDKQquYfxIDwZa&M?$uB>C_`exmjHNp+yfX( zV=RTS6iI{PNJ$yY*Y54)?c$A;U#Mo`s^9hNfGnInok+MSh9o6g){i+_rHZ@YqU`qTSbu3!Er-N3$^tPoT&JeMJsY69f*wykT7^q zu*fY4sWq1Cg4PPl)_|e9rkMpx+ik6) z%xB#6^cg&U%k6yzZ@|Liv#4)uXHLeJ@ID9;P|LFNXl!W>D!xI&*f(!JcLM^@)5i2^ zKOlE&29sxJap{vP7c`_isM_&bXv+i2N6BA5j5q}mQT(6Nmt8OoN(F(n>xwq6dX$9@ z5s)^n)z^gUYa1GAyWSC2ZF_7NSjT|!Q(bqRS@SkUoPyp2)Z(?pz@)7-vl5hdmdv_hx6?Tqw)Lvy@=YNEWqve6qhh7 zZCM}8sMm3IZBzK@X-m1*D-&Mq(#KV#r%eYSG4ZQB_`rSm{ey$5{h(umE(`)4Lv>w8 zRPcTYyz}0LaQJ9_WAjzlHnXSrE$$xqV|Eq10-$Ej*}#E69;c@6I;fZ+us7(G7j%G< z!^gPYN7}9yNq7A|k*3$B>cT#GIX|=a_1b4XAb)?mSft|vkB&Q>tdGte_pu(Z%OFwr+KR7ft$EH0^ZD6Y&cNG!=r&ezK?N(TUZ zY7hB%_7uVZ001+3R9JLVX=iR>bairN004N}Gc`;xNisG`vM{ntOEXSQwzM!ZH%l`$ hu{5