[gtk+] dnd: Add gtk_image_set_from_definition()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] dnd: Add gtk_image_set_from_definition()
- Date: Wed, 2 Dec 2015 14:53:21 +0000 (UTC)
commit c10b6b7297f04605fe4e15e9b5af25b1b7f27132
Author: Benjamin Otte <otte redhat com>
Date: Wed Dec 2 15:40:44 2015 +0100
dnd: Add gtk_image_set_from_definition()
... and use it in the DND code, thereby getting rid of the icon helper.
gtk/gtkdnd.c | 58 ++++++-------------------------------------------
gtk/gtkimage.c | 27 ++++++++++++++++++++++
gtk/gtkimageprivate.h | 4 +++
3 files changed, 38 insertions(+), 51 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 0f803f6..fb6c1ab 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -24,6 +24,9 @@
#include "config.h"
+#include "gtkdnd.h"
+#include "gtkdndprivate.h"
+
#include <math.h>
#include <stdlib.h>
#include <string.h>
@@ -43,17 +46,15 @@
#include <gdk/wayland/gdkwayland.h>
#endif
-#include "gtkdnd.h"
-#include "gtkdndprivate.h"
#include "gtkgesturedrag.h"
#include "gtkgesturesingle.h"
-#include "gtkiconhelperprivate.h"
#include "gtkicontheme.h"
+#include "gtkimageprivate.h"
+#include "gtkintl.h"
#include "gtkmain.h"
#include "gtkplug.h"
#include "gtktooltipprivate.h"
#include "gtkwindow.h"
-#include "gtkintl.h"
#include "gtkrender.h"
#include "gtkselectionprivate.h"
#include "gtkwindowgroup.h"
@@ -114,7 +115,6 @@ struct _GtkDragSourceInfo
GList *selections; /* selections we've claimed */
GtkDragDestInfo *proxy_dest; /* Set if this is a proxy drag */
- GtkIconHelper *icon_helper;
guint update_idle; /* Idle function to update the drag */
guint drop_timeout; /* Timeout for aborting drop */
@@ -2352,7 +2352,7 @@ gtk_drag_begin_internal (GtkWidget *widget,
* application may have set one in ::drag_begin, or it may
* not have set one.
*/
- if (!info->icon_widget && !info->icon_helper)
+ if (!info->icon_widget)
{
if (icon)
{
@@ -2366,27 +2366,6 @@ gtk_drag_begin_internal (GtkWidget *widget,
}
}
- /* We need to composite the icon into the cursor, if we are
- * not using an icon window.
- */
- if (info->icon_helper)
- {
- cursor = gtk_drag_get_cursor (widget,
- gtk_widget_get_display (widget),
- suggested_action,
- info);
-
- if (cursor != info->cursor)
- {
- gdk_device_grab (pointer, gtk_widget_get_window (widget),
- GDK_OWNERSHIP_APPLICATION, FALSE,
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_RELEASE_MASK,
- cursor, time);
- info->cursor = cursor;
- }
- }
-
info->cur_x = info->start_x;
info->cur_y = info->start_y;
@@ -2572,8 +2551,6 @@ gtk_drag_set_icon_window (GdkDragContext *context,
gtk_container_add (GTK_CONTAINER (info->icon_window), widget);
- g_clear_object (&info->icon_helper);
-
out:
gtk_drag_update_cursor (info);
}
@@ -2623,32 +2600,12 @@ set_icon_helper (GdkDragContext *context,
gint hot_x,
gint hot_y)
{
- GtkDragSourceInfo *info;
GtkWidget *widget;
- GdkScreen *screen;
- cairo_surface_t *source;
- GdkWindow *root;
-
- info = gtk_drag_get_source_info (context, FALSE);
- screen = gdk_window_get_screen (gdk_drag_context_get_source_window (context));
-
- if (info->icon_helper == NULL)
- {
- info->icon_helper = _gtk_icon_helper_new ();
- _gtk_icon_helper_set_window (info->icon_helper, gdk_drag_context_get_source_window (context));
- }
- _gtk_icon_helper_set_definition (info->icon_helper, def);
- _gtk_icon_helper_set_icon_size (info->icon_helper, GTK_ICON_SIZE_DND);
widget = gtk_image_new ();
gtk_widget_show (widget);
- root = gdk_screen_get_root_window (screen);
- source = gtk_icon_helper_load_surface (info->icon_helper,
- gtk_widget_get_style_context (widget),
- gdk_window_get_scale_factor (root));
- gtk_image_set_from_surface (GTK_IMAGE (widget), source);
- cairo_surface_destroy (source);
+ gtk_image_set_from_definition (GTK_IMAGE (widget), def, GTK_ICON_SIZE_DND);
gtk_drag_set_icon_window (context, widget, hot_x, hot_y, TRUE);
}
@@ -3323,7 +3280,6 @@ static void
gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
{
gtk_drag_remove_icon (info);
- g_clear_object (&info->icon_helper);
g_signal_handlers_disconnect_by_func (info->ipc_widget,
gtk_drag_grab_broken_event_cb,
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 30b634c..7a2f33f 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -1771,6 +1771,33 @@ gtk_image_notify_for_storage_type (GtkImage *image,
}
}
+void
+gtk_image_set_from_definition (GtkImage *image,
+ GtkImageDefinition *def,
+ GtkIconSize icon_size)
+{
+ GtkImagePrivate *priv;
+
+ g_return_if_fail (GTK_IS_IMAGE (image));
+
+ priv = image->priv;
+
+ g_object_freeze_notify (G_OBJECT (image));
+
+ gtk_image_clear (image);
+
+ if (def != NULL)
+ {
+ _gtk_icon_helper_set_definition (priv->icon_helper, def);
+
+ gtk_image_notify_for_storage_type (image, gtk_image_definition_get_storage_type (def));
+ }
+
+ _gtk_icon_helper_set_icon_size (priv->icon_helper, icon_size);
+
+ g_object_thaw_notify (G_OBJECT (image));
+}
+
static void
gtk_image_reset (GtkImage *image)
{
diff --git a/gtk/gtkimageprivate.h b/gtk/gtkimageprivate.h
index c734ee8..210d1f3 100644
--- a/gtk/gtkimageprivate.h
+++ b/gtk/gtkimageprivate.h
@@ -27,10 +27,14 @@
#include "gtkimage.h"
+#include "gtkimagedefinitionprivate.h"
G_BEGIN_DECLS
+void gtk_image_set_from_definition (GtkImage *image,
+ GtkImageDefinition *def,
+ GtkIconSize size);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]