mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-24 12:41:16 +00:00
New functions to support themed drag icons. (#116577, Christian Neumair)
2005-05-18 Matthias Clasen <mclasen@redhat.com> * gtk/gtk.symbols: * gtk/gtkdnd.h: * gtk/gtkdnd.c (gtk_drag_source_set_icon_name) (gtk_drag_set_icon_name): New functions to support themed drag icons. (#116577, Christian Neumair)
This commit is contained in:
parent
df1cc88424
commit
77f3189adc
@ -1,3 +1,11 @@
|
||||
2005-05-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtk.symbols:
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_source_set_icon_name)
|
||||
(gtk_drag_set_icon_name): New functions to support themed
|
||||
drag icons. (#116577, Christian Neumair)
|
||||
|
||||
2005-05-17 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdrawable-x11.c (gdk_x11_ref_cairo_surface):
|
||||
|
@ -1,3 +1,11 @@
|
||||
2005-05-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtk.symbols:
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_source_set_icon_name)
|
||||
(gtk_drag_set_icon_name): New functions to support themed
|
||||
drag icons. (#116577, Christian Neumair)
|
||||
|
||||
2005-05-17 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdrawable-x11.c (gdk_x11_ref_cairo_surface):
|
||||
|
@ -1,3 +1,11 @@
|
||||
2005-05-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtk.symbols:
|
||||
* gtk/gtkdnd.h:
|
||||
* gtk/gtkdnd.c (gtk_drag_source_set_icon_name)
|
||||
(gtk_drag_set_icon_name): New functions to support themed
|
||||
drag icons. (#116577, Christian Neumair)
|
||||
|
||||
2005-05-17 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk/x11/gdkdrawable-x11.c (gdk_x11_ref_cairo_surface):
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-05-18 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtk-sections.txt: Add new functions.
|
||||
|
||||
2005-05-16 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/tree_widget.sgml: Use gtk-doc abbrevs instead of
|
||||
|
@ -5159,6 +5159,7 @@ gtk_drag_set_icon_widget
|
||||
gtk_drag_set_icon_pixmap
|
||||
gtk_drag_set_icon_pixbuf
|
||||
gtk_drag_set_icon_stock
|
||||
gtk_drag_set_icon_name
|
||||
gtk_drag_set_icon_default
|
||||
gtk_drag_set_default_icon
|
||||
gtk_drag_check_threshold
|
||||
@ -5166,6 +5167,7 @@ gtk_drag_source_set
|
||||
gtk_drag_source_set_icon
|
||||
gtk_drag_source_set_icon_pixbuf
|
||||
gtk_drag_source_set_icon_stock
|
||||
gtk_drag_source_set_icon_name
|
||||
gtk_drag_source_unset
|
||||
gtk_drag_source_set_target_list
|
||||
gtk_drag_source_get_target_list
|
||||
|
@ -946,6 +946,7 @@ gtk_drag_highlight
|
||||
gtk_drag_set_default_icon
|
||||
#endif
|
||||
gtk_drag_set_icon_default
|
||||
gtk_drag_set_icon_name
|
||||
gtk_drag_set_icon_pixbuf
|
||||
gtk_drag_set_icon_pixmap
|
||||
gtk_drag_set_icon_stock
|
||||
@ -956,6 +957,7 @@ gtk_drag_source_add_uri_targets
|
||||
gtk_drag_source_get_target_list
|
||||
gtk_drag_source_set
|
||||
gtk_drag_source_set_icon
|
||||
gtk_drag_source_set_icon_name
|
||||
gtk_drag_source_set_icon_pixbuf
|
||||
gtk_drag_source_set_icon_stock
|
||||
gtk_drag_source_set_target_list
|
||||
|
89
gtk/gtkdnd.c
89
gtk/gtkdnd.c
@ -30,6 +30,8 @@
|
||||
#include "gdk/gdkkeysyms.h"
|
||||
|
||||
#include "gtkdnd.h"
|
||||
#include "gtkiconfactory.h"
|
||||
#include "gtkicontheme.h"
|
||||
#include "gtkimage.h"
|
||||
#include "gtkinvisible.h"
|
||||
#include "gtkmain.h"
|
||||
@ -68,6 +70,7 @@ struct _GtkDragSourceSite
|
||||
GtkImagePixmapData pixmap;
|
||||
GtkImagePixbufData pixbuf;
|
||||
GtkImageStockData stock;
|
||||
GtkImageIconNameData name;
|
||||
} icon_data;
|
||||
GdkBitmap *icon_mask;
|
||||
|
||||
@ -2046,6 +2049,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
|
||||
site->icon_data.stock.stock_id,
|
||||
-2, -2);
|
||||
break;
|
||||
case GTK_IMAGE_ICON_NAME:
|
||||
gtk_drag_set_icon_name (context,
|
||||
site->icon_data.name.icon_name,
|
||||
-2, -2);
|
||||
break;
|
||||
case GTK_IMAGE_EMPTY:
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
@ -2355,6 +2363,9 @@ gtk_drag_source_unset_icon (GtkDragSourceSite *site)
|
||||
case GTK_IMAGE_STOCK:
|
||||
g_free (site->icon_data.stock.stock_id);
|
||||
break;
|
||||
case GTK_IMAGE_ICON_NAME:
|
||||
g_free (site->icon_data.name.icon_name);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
@ -2462,6 +2473,34 @@ gtk_drag_source_set_icon_stock (GtkWidget *widget,
|
||||
site->icon_data.stock.stock_id = g_strdup (stock_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_source_set_icon_name:
|
||||
* @widget: a #GtkWidget
|
||||
* @icon_name: name of icon to use
|
||||
*
|
||||
* Sets the icon that will be used for drags from a particular source
|
||||
* to a themed icon. See the docs for #GtkIconTheme for more details.
|
||||
*
|
||||
* Since: 2.8
|
||||
**/
|
||||
void
|
||||
gtk_drag_source_set_icon_name (GtkWidget *widget,
|
||||
const gchar *icon_name)
|
||||
{
|
||||
GtkDragSourceSite *site;
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (icon_name != NULL);
|
||||
|
||||
site = g_object_get_data (G_OBJECT (widget), "gtk-site-data");
|
||||
g_return_if_fail (site != NULL);
|
||||
|
||||
gtk_drag_source_unset_icon (site);
|
||||
|
||||
site->icon_type = GTK_IMAGE_ICON_NAME;
|
||||
site->icon_data.name.icon_name = g_strdup (icon_name);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_drag_get_icon (GtkDragSourceInfo *info,
|
||||
GtkWidget **icon_window,
|
||||
@ -2782,6 +2821,56 @@ gtk_drag_set_icon_pixmap (GdkDragContext *context,
|
||||
gtk_drag_set_icon_window (context, window, hot_x, hot_y, TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_set_icon_name:
|
||||
* @context: the context for a drag. (This must be called
|
||||
* with a context for the source side of a drag)
|
||||
* @icon_name: name of icon to use
|
||||
* @hot_x: the X offset of the hotspot within the icon
|
||||
* @hot_y: the Y offset of the hotspot within the icon
|
||||
*
|
||||
* Sets the icon for the window from a named themed icon. See
|
||||
* the docs for #GtkIconTheme for more details. Note that the
|
||||
* size of the icon depends on the icon theme (the icon is
|
||||
* loaded at the symbolic size #GTK_ICON_SIZE_DND), thus
|
||||
* @hot_x and @hot_y have to be used with care.
|
||||
*
|
||||
* Since: 2.8
|
||||
**/
|
||||
void
|
||||
gtk_drag_set_icon_name (GdkDragContext *context,
|
||||
const gchar *icon_name,
|
||||
gint hot_x,
|
||||
gint hot_y)
|
||||
{
|
||||
GdkScreen *screen;
|
||||
GtkSettings *settings;
|
||||
GtkIconTheme *icon_theme;
|
||||
GdkPixbuf *pixbuf;
|
||||
gint width, height, icon_size;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
g_return_if_fail (context->is_source);
|
||||
g_return_if_fail (icon_name != NULL);
|
||||
|
||||
screen = gdk_drawable_get_screen (context->source_window);
|
||||
g_return_if_fail (screen != NULL);
|
||||
|
||||
settings = gtk_settings_get_for_screen (screen);
|
||||
if (gtk_icon_size_lookup_for_settings (settings,
|
||||
GTK_ICON_SIZE_DND,
|
||||
&width, &height))
|
||||
icon_size = MAX (width, height);
|
||||
else
|
||||
icon_size = 32; /* default value for GTK_ICON_SIZE_DND */
|
||||
|
||||
icon_theme = gtk_icon_theme_get_for_screen (screen);
|
||||
|
||||
pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name,
|
||||
icon_size, 0, NULL);
|
||||
set_icon_stock_pixbuf (context, NULL, pixbuf, hot_x, hot_y);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_set_icon_default:
|
||||
* @context: the context for a drag. (This must be called
|
||||
|
@ -112,6 +112,8 @@ void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
|
||||
GdkPixbuf *pixbuf);
|
||||
void gtk_drag_source_set_icon_stock (GtkWidget *widget,
|
||||
const gchar *stock_id);
|
||||
void gtk_drag_source_set_icon_name (GtkWidget *widget,
|
||||
const gchar *icon_name);
|
||||
|
||||
/* There probably should be functions for setting the targets
|
||||
* as a GtkTargetList
|
||||
@ -143,6 +145,10 @@ void gtk_drag_set_icon_stock (GdkDragContext *context,
|
||||
const gchar *stock_id,
|
||||
gint hot_x,
|
||||
gint hot_y);
|
||||
void gtk_drag_set_icon_name (GdkDragContext *context,
|
||||
const gchar *icon_name,
|
||||
gint hot_x,
|
||||
gint hot_y);
|
||||
|
||||
void gtk_drag_set_icon_default (GdkDragContext *context);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user