Make GtkDragIcon public

This is needed if we want to use gdk_drag_begin
for one-off drags, without a GtkDragSource.
This commit is contained in:
Matthias Clasen 2020-01-06 15:47:25 -05:00
parent e8b830a3dd
commit 78832c65b5
4 changed files with 92 additions and 5 deletions

View File

@ -91,6 +91,7 @@
#include <gtk/gtkdebug.h>
#include <gtk/gtkdialog.h>
#include <gtk/gtkdragdest.h>
#include <gtk/gtkdragicon.h>
#include <gtk/gtkdragsource.h>
#include <gtk/gtkdrawingarea.h>
#include <gtk/gtkeditable.h>

View File

@ -23,6 +23,8 @@
#include "gtkintl.h"
#include "gtkwidgetprivate.h"
#include "gtkcssnodeprivate.h"
#include "gtknativeprivate.h"
#include "gtkpicture.h"
struct _GtkDragIcon
@ -374,6 +376,44 @@ gtk_drag_icon_new (void)
return g_object_new (GTK_TYPE_DRAG_ICON, NULL);
}
GtkWidget *
gtk_drag_icon_new_for_drag (GdkDrag *drag)
{
GtkWidget *icon;
g_return_val_if_fail (GDK_IS_DRAG (drag), NULL);
icon = g_object_new (GTK_TYPE_DRAG_ICON, NULL);
gtk_drag_icon_set_surface (GTK_DRAG_ICON (icon), gdk_drag_get_drag_surface (drag));
return icon;
}
void
gtk_drag_icon_set_from_paintable (GdkDrag *drag,
GdkPaintable *paintable,
int hot_x,
int hot_y)
{
GtkWidget *icon;
GtkWidget *picture;
gdk_drag_set_hotspot (drag, hot_x, hot_y);
icon = gtk_drag_icon_new_for_drag (drag);
picture = gtk_picture_new_for_paintable (paintable);
gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE);
gtk_container_add (GTK_CONTAINER (icon), picture);
g_object_set_data_full (G_OBJECT (drag),
"icon",
g_object_ref_sink (icon),
(GDestroyNotify)gtk_widget_destroy);
gtk_widget_show (icon);
}
void
gtk_drag_icon_set_surface (GtkDragIcon *icon,
GdkSurface *surface)

50
gtk/gtkdragicon.h Normal file
View File

@ -0,0 +1,50 @@
/*
* Copyright © 2020 Matthias Clasen
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: Benjamin Otte <otte@gnome.org>
*/
#ifndef __GTK_DRAG_ICON_H__
#define __GTK_DRAG_ICON_H__
#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif
#include <gio/gio.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkcontainer.h>
G_BEGIN_DECLS
#define GTK_TYPE_DRAG_ICON (gtk_drag_icon_get_type ())
G_DECLARE_FINAL_TYPE (GtkDragIcon, gtk_drag_icon, GTK, DRAG_ICON, GtkContainer)
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_drag_icon_new_for_drag (GdkDrag *drag);
GDK_AVAILABLE_IN_ALL
void gtk_drag_icon_set_from_paintable (GdkDrag *drag,
GdkPaintable *paintable,
int hot_x,
int hot_y);
G_END_DECLS
#endif /* __GTK_DRAG_ICON_H__ */

View File

@ -26,14 +26,10 @@
#define __GTK_DRAG_ICON_PRIVATE_H__
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <gtk/gtkdragicon.h>
G_BEGIN_DECLS
#define GTK_TYPE_DRAG_ICON (gtk_drag_icon_get_type ())
G_DECLARE_FINAL_TYPE (GtkDragIcon, gtk_drag_icon, GTK, DRAG_ICON, GtkContainer)
GtkWidget * gtk_drag_icon_new (void);
void gtk_drag_icon_set_surface (GtkDragIcon *icon,