GTimer *timer;
- gulong toplevel_expose_event_id;
+ gulong toplevel_draw_id;
gulong toplevel_property_notify_event_id;
GdkAtom profiler_atom;
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GtkWidgetProfilerClass, create_widget),
NULL, NULL,
- _gtk_marshal_OBJECT__VOID,
+ _testperf_marshal_OBJECT__VOID,
G_TYPE_OBJECT, 0);
signals[REPORT] =
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GtkWidgetProfilerClass, report),
NULL, NULL,
- _gtk_marshal_VOID__ENUM_OBJECT_DOUBLE,
+ _testperf_marshal_VOID__ENUM_OBJECT_DOUBLE,
G_TYPE_NONE, 3,
GTK_TYPE_WIDGET_PROFILER_REPORT,
G_TYPE_OBJECT,
if (priv->toplevel)
{
- g_signal_handler_disconnect (priv->toplevel, priv->toplevel_expose_event_id);
- priv->toplevel_expose_event_id = 0;
+ g_signal_handler_disconnect (priv->toplevel, priv->toplevel_draw_id);
+ priv->toplevel_draw_id = 0;
g_signal_handler_disconnect (priv->toplevel, priv->toplevel_property_notify_event_id);
priv->toplevel_property_notify_event_id = 0;
if (!widget)
g_error ("The profiler emitted the \"create-widget\" signal but the signal handler returned no widget!");
- if (gtk_widget_get_visible (widget) || GTK_WIDGET_MAPPED (widget))
+ if (gtk_widget_get_visible (widget) || gtk_widget_get_mapped (widget))
g_error ("The handler for \"create-widget\" must return an unmapped and unshown widget");
return widget;
}
static gboolean
-toplevel_idle_after_expose_cb (gpointer data)
+toplevel_idle_after_draw_cb (gpointer data)
{
GtkWidgetProfiler *profiler;
GtkWidgetProfilerPrivate *priv;
profiler = GTK_WIDGET_PROFILER (data);
priv = profiler->priv;
- gdk_property_change (priv->toplevel->window,
+ gdk_property_change (gtk_widget_get_window (priv->toplevel),
priv->profiler_atom,
gdk_atom_intern ("STRING", FALSE),
8,
}
static gboolean
-toplevel_expose_event_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data)
+toplevel_draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
{
GtkWidgetProfiler *profiler;
profiler = GTK_WIDGET_PROFILER (data);
- gdk_threads_add_idle_full (G_PRIORITY_HIGH, toplevel_idle_after_expose_cb, profiler, NULL);
+ gdk_threads_add_idle_full (G_PRIORITY_HIGH, toplevel_idle_after_draw_cb, profiler, NULL);
return FALSE;
}
priv = profiler->priv;
- priv->toplevel_expose_event_id = g_signal_connect (toplevel, "expose-event",
- G_CALLBACK (toplevel_expose_event_cb), profiler);
+ priv->toplevel_draw_id = g_signal_connect (toplevel, "draw",
+ G_CALLBACK (toplevel_draw_cb), profiler);
gtk_widget_add_events (toplevel, GDK_PROPERTY_CHANGE_MASK);
priv->toplevel_property_notify_event_id = g_signal_connect (toplevel, "property-notify-event",
profile_expose (GtkWidgetProfiler *profiler)
{
GtkWidgetProfilerPrivate *priv;
+ GtkAllocation allocation;
GdkWindow *window;
GdkWindowAttr attr;
int attr_mask;
/* Time creation */
+ gtk_widget_get_allocation (priv->toplevel, &allocation);
+
attr.x = 0;
attr.y = 0;
- attr.width = priv->toplevel->allocation.width;
- attr.height = priv->toplevel->allocation.width;
+ attr.width = allocation.width;
+ attr.height = allocation.width;
attr.wclass = GDK_INPUT_OUTPUT;
- attr.window_type = GDK_WINDOW_CHILD;
+ attr.window_type = GDK_WINDOW_TEMP;
attr_mask = GDK_WA_X | GDK_WA_Y;
- window = gdk_window_new (priv->toplevel->window, &attr, attr_mask);
- gdk_window_set_back_pixmap (window, NULL, TRUE); /* avoid flicker */
+ window = gdk_window_new (gdk_screen_get_root_window (gtk_widget_get_screen (priv->toplevel)),
+ &attr, attr_mask);
gdk_window_show (window);
gdk_window_hide (window);