!GTK_OBJECT_DESTROYED() -> GTK_WIDGET_REALIZE() for resize queueing.
Thu Jun 28 23:53:31 2001 Tim Janik <timj@gtk.org> * gtk/gtkwidget.c (gtk_widget_hide): !GTK_OBJECT_DESTROYED() -> GTK_WIDGET_REALIZE() for resize queueing. * gtk/gtkmain.c (gtk_main_do_event): !GTK_OBJECT_DESTROYED() -> GTK_WIDGET_REALIZE() for post event delivery destruction upon GDK_DESTROY. * gtk/gtkwidget.c: added GtkWidget::event-after notification signal, to sompensate for former (pre-2.0) connect_after() facility. (gtk_widget_send_expose): (gtk_widget_event): assert the widget is realized, since event delivery to non-realized widgets is essentially a bug. event handlers should be able to unconditionally rely on widget->window (unless they emit events on their own which can trigger widget destruction). (gtk_widget_event_internal): removed old outdated GTK_OBJECT_DESTROYED() logic. event delivery happens as follows: a) emission of GtkWidget::event (RUN_LAST handler). returns was_handled. b) if !was_handled in (a) and the widget is still realized, emit event- specific signal (RUN_LAST handler). returns was_handled. c) emission of GtkWidget::event-after for notification if the widget is still realized (regardless of was_handled from previous stages, no class handler). no return value. d) was_handled gets passed on to caller, to determine further propagation. if the widget got unrealized meanwhile, was_handled is returned as TRUE. * gdk/gdkevents.[hc]: added gdk_event_get_root_coords() and gdk_event_get_coords().
This commit is contained in:
119
gdk/gdkevents.c
119
gdk/gdkevents.c
@ -559,6 +559,125 @@ gdk_event_get_state (GdkEvent *event,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_coords:
|
||||
* @event: a #GdkEvent
|
||||
* @x_root: location to put event window x coordinate
|
||||
* @y_root: location to put event window y coordinate
|
||||
*
|
||||
* Extract the event window relative x/y coordinates from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered event window coordinates
|
||||
**/
|
||||
gboolean
|
||||
gdk_event_get_coords (GdkEvent *event,
|
||||
gdouble *x_win,
|
||||
gdouble *y_win)
|
||||
{
|
||||
gdouble x = 0, y = 0;
|
||||
gboolean fetched = TRUE;
|
||||
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_CONFIGURE:
|
||||
x = event->configure.x;
|
||||
y = event->configure.y;
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
x = event->crossing.x;
|
||||
y = event->crossing.y;
|
||||
break;
|
||||
case GDK_SCROLL:
|
||||
x = event->scroll.x;
|
||||
y = event->scroll.y;
|
||||
break;
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
x = event->button.x;
|
||||
y = event->button.y;
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
x = event->motion.x;
|
||||
y = event->motion.y;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (x_win)
|
||||
*x_win = x;
|
||||
if (y_win)
|
||||
*y_win = x;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_root_coords:
|
||||
* @event: a #GdkEvent
|
||||
* @x_root: location to put root window x coordinate
|
||||
* @y_root: location to put root window y coordinate
|
||||
*
|
||||
* Extract the root window relative x/y coordinates from an event.
|
||||
*
|
||||
* Return value: %TRUE if the event delivered root window coordinates
|
||||
**/
|
||||
gboolean
|
||||
gdk_event_get_root_coords (GdkEvent *event,
|
||||
gdouble *x_root,
|
||||
gdouble *y_root)
|
||||
{
|
||||
gdouble x = 0, y = 0;
|
||||
gboolean fetched = TRUE;
|
||||
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_MOTION_NOTIFY:
|
||||
x = event->motion.x_root;
|
||||
y = event->motion.y_root;
|
||||
break;
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
x = event->button.x_root;
|
||||
y = event->button.y_root;
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
x = event->crossing.x_root;
|
||||
y = event->crossing.y_root;
|
||||
break;
|
||||
case GDK_DRAG_ENTER:
|
||||
case GDK_DRAG_LEAVE:
|
||||
case GDK_DRAG_MOTION:
|
||||
case GDK_DRAG_STATUS:
|
||||
case GDK_DROP_START:
|
||||
case GDK_DROP_FINISHED:
|
||||
x = event->dnd.x_root;
|
||||
y = event->dnd.y_root;
|
||||
break;
|
||||
default:
|
||||
fetched = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (x_root)
|
||||
*x_root = x;
|
||||
if (y_root)
|
||||
*y_root = x;
|
||||
|
||||
return fetched;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_event_get_axis:
|
||||
* @event: a #GdkEvent
|
||||
|
||||
Reference in New Issue
Block a user