A GtkToolPalette
allows you to add GtkToolItem
s to a palette-like
container with different categories and drag and drop support. A GtkToolPalette
is created with a call to gtkToolPaletteNew
.
GtkToolItem
s cannot be added directly to a GtkToolPalette
-
instead they are added to a GtkToolItemGroup
which can than be added
to a GtkToolPalette
. To add a GtkToolItemGroup
to a GtkToolPalette
,
use gtkContainerAdd
.
GtkWidget *palette, *group;
GtkToolItem *item; palette = gtk_tool_palette_new ();
group = gtk_tool_item_group_new (_("Test Category"));
gtk_container_add (GTK_CONTAINER (palette), group); item = gtk_tool_button_new_from_stock (GTK_STOCK_OK);
gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
The easiest way to use drag and drop with GtkToolPalette
is to call
gtkToolPaletteAddDragDest
with the desired drag source palette
and the desired drag target widget
. Then gtkToolPaletteGetDragItem
can be used to get the dragged item in the "drag-data-received"
signal handler of the drag target.
static void
passive_canvas_drag_data_received (GtkWidget *widget,
GdkDragContext *context,
gint x,
gint y,
GtkSelectionData *selection,
guint info,
guint time,
gpointer data)
{
GtkWidget *palette;
GtkWidget *item; / * Get the dragged item * /
palette = gtk_widget_get_ancestor (gtk_drag_get_source_widget (context),
GTK_TYPE_TOOL_PALETTE);
if (palette != NULL)
item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (palette),
selection); / * Do something with item * /
} GtkWidget *target, palette; palette = gtk_tool_palette_new ();
target = gtk_drawing_area_new (); g_signal_connect (G_OBJECT (target), "drag-data-received",
G_CALLBACK (passive_canvas_drag_data_received), NULL);
gtk_tool_palette_add_drag_dest (GTK_TOOL_PALETTE (palette), target,
GTK_DEST_DEFAULT_ALL,
GTK_TOOL_PALETTE_DRAG_ITEMS,
GDK_ACTION_COPY);