dnd: Connect to raw func for drag hilight

This commit is contained in:
Benjamin Otte 2010-09-08 21:21:59 +02:00
parent 830cda9e32
commit 729f80b554

View File

@ -192,10 +192,6 @@ static GtkWidget *gtk_drag_get_ipc_widget (GtkWidget *widget);
static GtkWidget *gtk_drag_get_ipc_widget_for_screen (GdkScreen *screen);
static void gtk_drag_release_ipc_widget (GtkWidget *widget);
static gboolean gtk_drag_highlight_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer data);
static void gtk_drag_selection_received (GtkWidget *widget,
GtkSelectionData *selection_data,
guint time,
@ -1096,7 +1092,7 @@ gtk_drag_finish (GdkDragContext *context,
}
/*************************************************************
* gtk_drag_highlight_expose:
* gtk_drag_highlight_draw:
* Callback for expose_event for highlighted widgets.
* arguments:
* widget:
@ -1106,50 +1102,24 @@ gtk_drag_finish (GdkDragContext *context,
*************************************************************/
static gboolean
gtk_drag_highlight_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
gtk_drag_highlight_draw (GtkWidget *widget,
cairo_t *cr,
gpointer data)
{
gint x, y, width, height;
if (gtk_widget_is_drawable (widget))
{
GdkWindow *window;
cairo_t *cr;
int width = gtk_widget_get_allocated_width (widget);
int height = gtk_widget_get_allocated_height (widget);
window = gtk_widget_get_window (widget);
gtk_cairo_paint_shadow (gtk_widget_get_style (widget), cr,
GTK_STATE_NORMAL, GTK_SHADOW_OUT,
widget, "dnd",
0, 0, width, height);
if (!gtk_widget_get_has_window (widget))
{
GtkAllocation allocation;
gtk_widget_get_allocation (widget, &allocation);
x = allocation.x;
y = allocation.y;
width = allocation.width;
height = allocation.height;
}
else
{
x = 0;
y = 0;
gdk_drawable_get_size (window, &width, &height);
}
gtk_paint_shadow (gtk_widget_get_style (widget), window,
GTK_STATE_NORMAL, GTK_SHADOW_OUT,
&event->area, widget, "dnd",
x, y, width, height);
cr = gdk_cairo_create (window);
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); /* black */
cairo_set_line_width (cr, 1.0);
cairo_rectangle (cr,
x + 0.5, y + 0.5,
width - 1, height - 1);
cairo_stroke (cr);
cairo_destroy (cr);
}
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); /* black */
cairo_set_line_width (cr, 1.0);
cairo_rectangle (cr,
0.5, 0.5,
width - 1, height - 1);
cairo_stroke (cr);
return FALSE;
}
@ -1167,8 +1137,8 @@ gtk_drag_highlight (GtkWidget *widget)
{
g_return_if_fail (GTK_IS_WIDGET (widget));
g_signal_connect_after (widget, "expose-event",
G_CALLBACK (gtk_drag_highlight_expose),
g_signal_connect_after (widget, "draw",
G_CALLBACK (gtk_drag_highlight_draw),
NULL);
gtk_widget_queue_draw (widget);
@ -1188,7 +1158,7 @@ gtk_drag_unhighlight (GtkWidget *widget)
g_return_if_fail (GTK_IS_WIDGET (widget));
g_signal_handlers_disconnect_by_func (widget,
gtk_drag_highlight_expose,
gtk_drag_highlight_draw,
NULL);
gtk_widget_queue_draw (widget);