forked from AuroraMiddleware/gtk
Add convenience api for image dnd (#150165):
2004-10-21 Matthias Clasen <mclasen@redhat.com> Add convenience api for image dnd (#150165): * gtk/gtkselection.h: * gtk/gtkselection.c (gtk_target_list_add_image_targets) (gtk_selection_data_set_pixbuf, gtk_selection_data_get_pixbuf): New functions to handle the image formats readable/writable by gdk-pixbuf. * gtk/gtkdnd.h: * gtk/gtkdnd.c (gtk_drag_dest_add_image_targets) (gtk_drag_source_add_text_targets): New functions to handle the image formats readable/writable by gdk-pixbuf.
This commit is contained in:
parent
bfb64fa04f
commit
968b192fec
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
||||
2004-10-21 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add convenience api for image dnd (#150165):
|
||||
|
||||
* gtk/gtkselection.h:
|
||||
* gtk/gtkselection.c (gtk_target_list_add_image_targets)
|
||||
(gtk_selection_data_set_pixbuf, gtk_selection_data_get_pixbuf):
|
||||
New functions to handle the image formats readable/writable
|
||||
by gdk-pixbuf.
|
||||
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_dest_add_image_targets)
|
||||
(gtk_drag_source_add_text_targets): New functions to handle
|
||||
the image formats readable/writable by gdk-pixbuf.
|
||||
|
||||
2004-10-20 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_new): Make
|
||||
|
@ -1,3 +1,18 @@
|
||||
2004-10-21 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add convenience api for image dnd (#150165):
|
||||
|
||||
* gtk/gtkselection.h:
|
||||
* gtk/gtkselection.c (gtk_target_list_add_image_targets)
|
||||
(gtk_selection_data_set_pixbuf, gtk_selection_data_get_pixbuf):
|
||||
New functions to handle the image formats readable/writable
|
||||
by gdk-pixbuf.
|
||||
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_dest_add_image_targets)
|
||||
(gtk_drag_source_add_text_targets): New functions to handle
|
||||
the image formats readable/writable by gdk-pixbuf.
|
||||
|
||||
2004-10-20 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_new): Make
|
||||
|
@ -1,3 +1,18 @@
|
||||
2004-10-21 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add convenience api for image dnd (#150165):
|
||||
|
||||
* gtk/gtkselection.h:
|
||||
* gtk/gtkselection.c (gtk_target_list_add_image_targets)
|
||||
(gtk_selection_data_set_pixbuf, gtk_selection_data_get_pixbuf):
|
||||
New functions to handle the image formats readable/writable
|
||||
by gdk-pixbuf.
|
||||
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_dest_add_image_targets)
|
||||
(gtk_drag_source_add_text_targets): New functions to handle
|
||||
the image formats readable/writable by gdk-pixbuf.
|
||||
|
||||
2004-10-20 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_new): Make
|
||||
|
@ -1,3 +1,18 @@
|
||||
2004-10-21 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add convenience api for image dnd (#150165):
|
||||
|
||||
* gtk/gtkselection.h:
|
||||
* gtk/gtkselection.c (gtk_target_list_add_image_targets)
|
||||
(gtk_selection_data_set_pixbuf, gtk_selection_data_get_pixbuf):
|
||||
New functions to handle the image formats readable/writable
|
||||
by gdk-pixbuf.
|
||||
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_dest_add_image_targets)
|
||||
(gtk_drag_source_add_text_targets): New functions to handle
|
||||
the image formats readable/writable by gdk-pixbuf.
|
||||
|
||||
2004-10-20 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_new): Make
|
||||
|
48
gtk/gtkdnd.c
48
gtk/gtkdnd.c
@ -1049,6 +1049,30 @@ gtk_drag_dest_add_text_targets (GtkWidget *widget)
|
||||
gtk_target_list_unref (target_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_dest_add_image_targets:
|
||||
* @widget: a #GtkWidget that's a drag destination
|
||||
*
|
||||
* Add the image targets supported by #GtkSelection to
|
||||
* the target list of the drag destination.
|
||||
*
|
||||
* Since: 2.6
|
||||
**/
|
||||
void
|
||||
gtk_drag_dest_add_image_targets (GtkWidget *widget)
|
||||
{
|
||||
GtkTargetList *target_list;
|
||||
|
||||
target_list = gtk_drag_dest_get_target_list (widget);
|
||||
if (target_list)
|
||||
gtk_target_list_ref (target_list);
|
||||
else
|
||||
target_list = gtk_target_list_new (NULL, 0);
|
||||
gtk_target_list_add_image_targets (target_list, FALSE);
|
||||
gtk_drag_dest_set_target_list (widget, target_list);
|
||||
gtk_target_list_unref (target_list);
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
* _gtk_drag_dest_handle_event:
|
||||
* Called from widget event handling code on Drag events
|
||||
@ -2216,6 +2240,30 @@ gtk_drag_source_add_text_targets (GtkWidget *widget)
|
||||
gtk_target_list_unref (target_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_source_add_image_targets:
|
||||
* @widget: a #GtkWidget that's is a drag source
|
||||
*
|
||||
* Add the writable image targets supported by #GtkSelection to
|
||||
* the target list of the drag source.
|
||||
*
|
||||
* Since: 2.6
|
||||
**/
|
||||
void
|
||||
gtk_drag_source_add_image_targets (GtkWidget *widget)
|
||||
{
|
||||
GtkTargetList *target_list;
|
||||
|
||||
target_list = gtk_drag_source_get_target_list (widget);
|
||||
if (target_list)
|
||||
gtk_target_list_ref (target_list);
|
||||
else
|
||||
target_list = gtk_target_list_new (NULL, 0);
|
||||
gtk_target_list_add_image_targets (target_list, TRUE);
|
||||
gtk_drag_source_set_target_list (widget, target_list);
|
||||
gtk_target_list_unref (target_list);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_drag_source_unset_icon (GtkDragSourceSite *site)
|
||||
{
|
||||
|
@ -86,6 +86,7 @@ GtkTargetList* gtk_drag_dest_get_target_list (GtkWidget *widget);
|
||||
void gtk_drag_dest_set_target_list (GtkWidget *widget,
|
||||
GtkTargetList *target_list);
|
||||
void gtk_drag_dest_add_text_targets (GtkWidget *widget);
|
||||
void gtk_drag_dest_add_image_targets (GtkWidget *widget);
|
||||
|
||||
/* Source side */
|
||||
|
||||
@ -101,6 +102,7 @@ GtkTargetList* gtk_drag_source_get_target_list (GtkWidget *widget);
|
||||
void gtk_drag_source_set_target_list (GtkWidget *widget,
|
||||
GtkTargetList *target_list);
|
||||
void gtk_drag_source_add_text_targets (GtkWidget *widget);
|
||||
void gtk_drag_source_add_image_targets (GtkWidget *widget);
|
||||
|
||||
void gtk_drag_source_set_icon (GtkWidget *widget,
|
||||
GdkColormap *colormap,
|
||||
|
@ -59,6 +59,7 @@
|
||||
#include "gtkalias.h"
|
||||
#include "gtkmain.h"
|
||||
#include "gtkselection.h"
|
||||
#include "gdk-pixbuf/gdk-pixbuf.h"
|
||||
|
||||
#ifdef GDK_WINDOWING_X11
|
||||
#include "x11/gdkx.h"
|
||||
@ -294,6 +295,49 @@ gtk_target_list_add_text_targets (GtkTargetList *list)
|
||||
gtk_target_list_add (list, text_plain_atom, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_target_list_add_image_targets:
|
||||
* @list: a #GtkTargetList
|
||||
* @writable: whether to add only targets for which GTK+ knows
|
||||
* how to convert a pixbuf into the format
|
||||
*
|
||||
* Adds the image targets supported by #GtkSelection to
|
||||
* the target list. The targets are added with both flags
|
||||
* and info being zero.
|
||||
*
|
||||
* Since: 2.6
|
||||
**/
|
||||
void
|
||||
gtk_target_list_add_image_targets (GtkTargetList *list,
|
||||
gboolean writable)
|
||||
{
|
||||
GSList *formats, *f;
|
||||
gchar **mimes, **m;
|
||||
GdkAtom atom;
|
||||
|
||||
g_return_if_fail (list != NULL);
|
||||
|
||||
formats = gdk_pixbuf_get_formats ();
|
||||
|
||||
for (f = formats; f; f = f->next)
|
||||
{
|
||||
GdkPixbufFormat *fmt = f->data;
|
||||
|
||||
if (writable && !gdk_pixbuf_format_is_writable (fmt))
|
||||
continue;
|
||||
|
||||
mimes = gdk_pixbuf_format_get_mime_types (fmt);
|
||||
for (m = mimes; *m; m++)
|
||||
{
|
||||
atom = gdk_atom_intern (*m, FALSE);
|
||||
gtk_target_list_add (list, atom, 0, 0);
|
||||
}
|
||||
g_strfreev (mimes);
|
||||
}
|
||||
|
||||
g_slist_free (formats);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_target_list_add_table (GtkTargetList *list,
|
||||
const GtkTargetEntry *targets,
|
||||
@ -1157,6 +1201,107 @@ gtk_selection_data_get_text (GtkSelectionData *selection_data)
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_selection_data_set_pixbuf:
|
||||
* @selection_data: a #GtkSelectionData
|
||||
* @pixbuf: a #GdkPixbuf
|
||||
*
|
||||
* Sets the contents of the selection from a #GdkPixbuf
|
||||
* The pixbuf is converted to the form determined by
|
||||
* @selection_data->target.
|
||||
*
|
||||
* Return value: %TRUE if the selection was successfully set,
|
||||
* otherwise %FALSE.
|
||||
*
|
||||
* Since: 2.6
|
||||
**/
|
||||
gboolean
|
||||
gtk_selection_data_set_pixbuf (GtkSelectionData *selection_data,
|
||||
GdkPixbuf *pixbuf)
|
||||
{
|
||||
GSList *formats, *f;
|
||||
gchar **mimes, **m;
|
||||
GdkAtom atom;
|
||||
gboolean result;
|
||||
gchar *str, *type;
|
||||
gsize len;
|
||||
|
||||
formats = gdk_pixbuf_get_formats ();
|
||||
|
||||
for (f = formats; f; f = f->next)
|
||||
{
|
||||
GdkPixbufFormat *fmt = f->data;
|
||||
|
||||
mimes = gdk_pixbuf_format_get_mime_types (fmt);
|
||||
for (m = mimes; *m; m++)
|
||||
{
|
||||
atom = gdk_atom_intern (*m, FALSE);
|
||||
if (selection_data->target == atom)
|
||||
{
|
||||
str = NULL;
|
||||
type = gdk_pixbuf_format_get_name (fmt),
|
||||
result = gdk_pixbuf_save_to_buffer (pixbuf,
|
||||
&str,
|
||||
&len,
|
||||
type,
|
||||
NULL);
|
||||
if (result)
|
||||
gtk_selection_data_set (selection_data,
|
||||
atom, 8, (guchar *)str, len);
|
||||
g_free (type);
|
||||
g_free (str);
|
||||
g_strfreev (mimes);
|
||||
g_slist_free (formats);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
g_strfreev (mimes);
|
||||
}
|
||||
|
||||
g_slist_free (formats);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_selection_data_get_pixbuf:
|
||||
* @selection_data: a #GtkSelectionData
|
||||
*
|
||||
* Gets the contents of the selection data as a #GdkPixbuf.
|
||||
*
|
||||
* Return value: if the selection data contained a recognized
|
||||
* image type and it could be converted to a #GdkPixbuf, a
|
||||
* newly allocated pixbuf is returned, otherwise %NULL.
|
||||
* If the result is non-%NULL it must be freed with g_object_unref().
|
||||
*
|
||||
* Since: 2.6
|
||||
**/
|
||||
GdkPixbuf *
|
||||
gtk_selection_data_get_pixbuf (GtkSelectionData *selection_data)
|
||||
{
|
||||
GdkPixbufLoader *loader;
|
||||
GdkPixbuf *result = NULL;
|
||||
|
||||
loader = gdk_pixbuf_loader_new ();
|
||||
|
||||
if (gdk_pixbuf_loader_write (loader,
|
||||
selection_data->data,
|
||||
selection_data->length,
|
||||
NULL))
|
||||
result = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||
|
||||
if (result)
|
||||
g_object_ref (result);
|
||||
|
||||
gdk_pixbuf_loader_close (loader, NULL);
|
||||
g_object_unref (loader);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gtk_selection_data_get_targets:
|
||||
* @selection_data: a #GtkSelectionData object
|
||||
|
@ -96,6 +96,8 @@ void gtk_target_list_add (GtkTargetList *list,
|
||||
guint flags,
|
||||
guint info);
|
||||
void gtk_target_list_add_text_targets (GtkTargetList *list);
|
||||
void gtk_target_list_add_image_targets (GtkTargetList *list,
|
||||
gboolean writable);
|
||||
void gtk_target_list_add_table (GtkTargetList *list,
|
||||
const GtkTargetEntry *targets,
|
||||
guint ntargets);
|
||||
@ -138,6 +140,9 @@ gboolean gtk_selection_data_set_text (GtkSelectionData *selection_data,
|
||||
const gchar *str,
|
||||
gint len);
|
||||
guchar * gtk_selection_data_get_text (GtkSelectionData *selection_data);
|
||||
gboolean gtk_selection_data_set_pixbuf (GtkSelectionData *selection_data,
|
||||
GdkPixbuf *pixbuf);
|
||||
GdkPixbuf *gtk_selection_data_get_pixbuf (GtkSelectionData *selection_data);
|
||||
|
||||
gboolean gtk_selection_data_get_targets (GtkSelectionData *selection_data,
|
||||
GdkAtom **targets,
|
||||
|
Loading…
Reference in New Issue
Block a user