[gtk+] dnd: Add gtk_drag_set_icon_definition()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] dnd: Add gtk_drag_set_icon_definition()
- Date: Tue, 1 Dec 2015 23:31:30 +0000 (UTC)
commit 7a154d9acd7a4b496c12a925ddea1d24b8efffd9
Author: Benjamin Otte <otte redhat com>
Date: Tue Dec 1 17:42:09 2015 +0100
dnd: Add gtk_drag_set_icon_definition()
... and use it for entry icons.
As a side effect, icons dragged from entries will now resize to DND
size.
gtk/gtkdnd-quartz.c | 37 +++++++++++++++++++++++++++++++++++++
gtk/gtkdnd.c | 12 ++++++++++++
gtk/gtkdndprivate.h | 4 ++++
gtk/gtkentry.c | 12 ++++--------
4 files changed, 57 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c
index eb5fa95..7505482 100644
--- a/gtk/gtkdnd-quartz.c
+++ b/gtk/gtkdnd-quartz.c
@@ -1453,6 +1453,43 @@ set_icon_stock_pixbuf (GdkDragContext *context,
cairo_surface_destroy (surface);
}
+void
+gtk_drag_set_icon_definition (GdkDragContext *context,
+ GtkImageDefinition *def,
+ gint hot_x,
+ gint hot_y)
+{
+ switch (gtk_image_definition_get_storage_type (def))
+ {
+ case GTK_IMAGE_EMPTY:
+ gtk_drag_set_icon_default (context);
+ break;
+
+ case GTK_IMAGE_PIXBUF:
+ gtk_drag_set_icon_pixbuf (context,
+ gtk_image_definition_get_pixbuf (def),
+ hot_x, hot_y);
+ break;
+
+ case GTK_IMAGE_STOCK:
+ gtk_drag_set_icon_stock (context,
+ gtk_image_definition_get_stock (def),
+ hot_x, hot_y);
+ break;
+
+ case GTK_IMAGE_ICON_NAME:
+ gtk_drag_set_icon_name (context,
+ gtk_image_definition_get_icon_name (def),
+ hot_x, hot_y);
+ break;
+
+ default:
+ g_warning ("FIXME: setting drag icon of type %u not implemented, using default.",
gtk_image_definition_get_storage_type (def));
+ gtk_drag_set_icon_default (context);
+ break;
+ }
+}
+
/**
* gtk_drag_set_icon_pixbuf:
* @context: the context for a drag. (This must be called
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 81abab0..d29e2f6 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -2853,6 +2853,18 @@ set_icon_helper (GdkDragContext *context,
}
}
+void
+gtk_drag_set_icon_definition (GdkDragContext *context,
+ GtkImageDefinition *def,
+ gint hot_x,
+ gint hot_y)
+{
+ g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
+ g_return_if_fail (def != NULL);
+
+ set_icon_helper (context, def, hot_x, hot_y, FALSE);
+}
+
/**
* gtk_drag_set_icon_pixbuf: (method)
* @context: the context for a drag (This must be called
diff --git a/gtk/gtkdndprivate.h b/gtk/gtkdndprivate.h
index 43df858..016f263 100644
--- a/gtk/gtkdndprivate.h
+++ b/gtk/gtkdndprivate.h
@@ -35,6 +35,10 @@ GdkDragContext * gtk_drag_begin_internal (GtkWidget
const GdkEvent *event,
int x,
int y);
+void gtk_drag_set_icon_definition (GdkDragContext *context,
+ GtkImageDefinition *def,
+ gint hot_x,
+ gint hot_y);
void _gtk_drag_source_handle_event (GtkWidget *widget,
GdkEvent *event);
void _gtk_drag_dest_handle_event (GtkWidget *toplevel,
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index ff60869..6870453 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -36,6 +36,7 @@
#include "gtkclipboard.h"
#include "gtkdebug.h"
#include "gtkdnd.h"
+#include "gtkdndprivate.h"
#include "gtkentry.h"
#include "gtkentrybuffer.h"
#include "gtkiconhelperprivate.h"
@@ -10054,14 +10055,9 @@ gtk_entry_drag_begin (GtkWidget *widget,
{
if (icon_info->in_drag)
{
- GdkPixbuf *pix;
-
- pix = _gtk_icon_helper_ensure_pixbuf
- (icon_info->icon_helper,
- gtk_widget_get_style_context (GTK_WIDGET (entry)));
- gtk_drag_set_icon_pixbuf (context, pix, -2, -2);
-
- g_object_unref (pix);
+ gtk_drag_set_icon_definition (context,
+ gtk_icon_helper_get_definition (icon_info->icon_helper),
+ -2, -2);
return;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]