diff options
author | Owen Taylor <otaylor@redhat.com> | 2001-06-25 01:51:58 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2001-06-25 01:51:58 +0000 |
commit | 1988e13749e613b4b378be1a6cb4bad7f17bebb0 (patch) | |
tree | 0f5775f3f599586a2885149f73c9ec43797bb77a /gtk | |
parent | 24a325c67a12ad928180e96aad8483837e26125f (diff) | |
download | gtk+-1988e13749e613b4b378be1a6cb4bad7f17bebb0.tar.gz |
Add a special size for drag-and-drop GTK_ICON_SIZE_DND (Default to 32x32)
Sun Jun 24 21:34:32 2001 Owen Taylor <otaylor@redhat.com>
* 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.)
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkdnd.c | 464 | ||||
-rw-r--r-- | gtk/gtkdnd.h | 64 | ||||
-rw-r--r-- | gtk/gtkenums.h | 1 | ||||
-rw-r--r-- | gtk/gtkiconfactory.c | 11 | ||||
-rw-r--r-- | gtk/gtkmain.c | 4 | ||||
-rw-r--r-- | gtk/gtkstock.h | 3 | ||||
-rw-r--r-- | gtk/stock-icons/Makefile.am | 2 | ||||
-rw-r--r-- | gtk/stock-icons/stock_dnd_multiple.png | bin | 0 -> 1843 bytes | |||
-rw-r--r-- | gtk/stock-icons/stock_dnd_multiple_32.png | bin | 0 -> 1843 bytes |
9 files changed, 365 insertions, 184 deletions
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); + 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; - if (colormap) - gdk_colormap_ref (colormap); +} + +/** + * 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; - site->pixmap = pixmap; - if (pixmap) - gdk_pixmap_ref (pixmap); + g_return_if_fail (widget != NULL); + g_return_if_fail (GDK_IS_PIXBUF (pixbuf)); - site->mask = mask; - if (mask) - gdk_pixmap_ref (mask); + 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_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_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 Binary files differnew file mode 100644 index 0000000000..a4c21ec739 --- /dev/null +++ b/gtk/stock-icons/stock_dnd_multiple.png diff --git a/gtk/stock-icons/stock_dnd_multiple_32.png b/gtk/stock-icons/stock_dnd_multiple_32.png Binary files differnew file mode 100644 index 0000000000..a4c21ec739 --- /dev/null +++ b/gtk/stock-icons/stock_dnd_multiple_32.png |