diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-10-03 20:53:30 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-10-03 20:53:30 +0000 |
commit | ef33adff83617e2c937052316b9fb925d4972252 (patch) | |
tree | c6badff88c8dca205f9013043ab12c7f68db5903 /gdk | |
parent | 6cb79658c2a64d01f6e488f065eb2d265be97414 (diff) | |
download | gtk+-ef33adff83617e2c937052316b9fb925d4972252.tar.gz |
Add a 'type' parameter, make public.
Thu Oct 3 14:13:33 2002 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.c (gdk_event_new): Add a 'type'
parameter, make public.
* gdk/gdkevents.c (gdk_event_copy): Copy the screen.
* gdk/gdkevents.c gdk/linux-fb/gdkmain-fb.c
gdk/x11/gdkevents-x11.c gdk/win32/gdkevents-win32.c:
_gdk_event_new() => gdk_event_new().
* gdk/win32/gdkevents-win32.c (real_window_procedure):
Fix event_private->screen breakage that results from evil
encapsulation breakage here.
* gtk/gtkclist.c gtk/gtkcombo.c gtk/gtkcontainer.c
gtk/gtkdialog.c gtk/gtkdnd.c gtk/gtkdrawingarea.c
gtk/gtkimcontextsimple.c gtk/gtklist.c gtk/gtkmenu.c
gtk/gtknotebook.c gtk/gtkplug.c gtk/gtkselection.c
gtk/gtktext.c gtk/gtktreeitem.c gtk/gtktreeview.c
gtk/gtkviewport.c gtk/gtkwindow-decorate.c gtk/gtkwindow.c
tests/testgtk.c: Remove most usage of stack-allocated
GdkEvent structures.
* gtk/gtktreeview.c: Use a cut-and-paste of the full
send_focus_event() from gtkwindow.c that does the necessary
notification of the ::has-focus property and setting of
the HAS_FOCUS flag.x
* gtk/gtkdnd.c: Clean up some mess/duplicated code; removing
an extraneous use of a GdkEvent.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdkevents.c | 74 | ||||
-rw-r--r-- | gdk/gdkevents.h | 2 | ||||
-rw-r--r-- | gdk/gdkinternals.h | 3 | ||||
-rw-r--r-- | gdk/linux-fb/gdkmain-fb.c | 3 | ||||
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 13 | ||||
-rw-r--r-- | gdk/x11/gdkevents-x11.c | 5 |
6 files changed, 75 insertions, 25 deletions
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index ca3088cad2..bab5ad5d41 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -24,6 +24,8 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ +#include <string.h> /* For memset() */ + #include "gdk.h" #include "gdkinternals.h" @@ -259,9 +261,10 @@ static GMemChunk *event_chunk = NULL; static GHashTable *event_hash = NULL; GdkEvent* -_gdk_event_new (void) +gdk_event_new (GdkEventType type) { - GdkEventPrivate *new_event; + GdkEventPrivate *new_private; + GdkEvent *new_event; if (event_chunk == NULL) { @@ -272,13 +275,59 @@ _gdk_event_new (void) event_hash = g_hash_table_new (g_direct_hash, NULL); } - new_event = g_chunk_new (GdkEventPrivate, event_chunk); - new_event->flags = 0; - new_event->screen = NULL; + new_private = g_chunk_new (GdkEventPrivate, event_chunk); + memset (new_private, 0, sizeof (GdkEventPrivate)); + + new_private->flags = 0; + new_private->screen = NULL; + + g_hash_table_insert (event_hash, new_private, GUINT_TO_POINTER (1)); - g_hash_table_insert (event_hash, new_event, GUINT_TO_POINTER (1)); + new_event = (GdkEvent *) new_private; + + new_event->any.type = type; + + /* + * Bytewise 0 initialization is reasonable for most of the + * current event types. Explicitely initialize double fields + * since I trust bytewise 0 == 0. less than for integers + * or pointers. + */ + switch (type) + { + case GDK_MOTION_NOTIFY: + new_event->motion.x = 0.; + new_event->motion.y = 0.; + new_event->motion.x_root = 0.; + new_event->motion.y_root = 0.; + break; + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_RELEASE: + new_event->button.x = 0.; + new_event->button.y = 0.; + new_event->button.x_root = 0.; + new_event->button.y_root = 0.; + break; + case GDK_SCROLL: + new_event->scroll.x = 0.; + new_event->scroll.y = 0.; + new_event->scroll.x_root = 0.; + new_event->scroll.y_root = 0.; + break; + case GDK_ENTER_NOTIFY: + case GDK_LEAVE_NOTIFY: + new_event->crossing.x = 0.; + new_event->crossing.y = 0.; + new_event->crossing.x_root = 0.; + new_event->crossing.y_root = 0.; + break; + default: + break; + } - return (GdkEvent*) new_event; + return new_event; } static gboolean @@ -303,15 +352,22 @@ gdk_event_is_allocated (GdkEvent *event) GdkEvent* gdk_event_copy (GdkEvent *event) { + GdkEventPrivate *private; + GdkEventPrivate *new_private; GdkEvent *new_event; g_return_val_if_fail (event != NULL, NULL); - new_event = _gdk_event_new (); - + new_event = gdk_event_new (GDK_NOTHING); + new_private = (GdkEventPrivate *)new_event; + + private = (GdkEventPrivate *)event; + *new_event = *event; if (new_event->any.window) g_object_ref (new_event->any.window); + + new_private->screen = private->screen; switch (event->any.type) { diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h index d9f26167a0..818bb27465 100644 --- a/gdk/gdkevents.h +++ b/gdk/gdkevents.h @@ -237,7 +237,6 @@ struct _GdkEventNoExpose GdkEventType type; GdkWindow *window; gint8 send_event; - /* XXX: does anyone need the X major_code or minor_code fields? */ }; struct _GdkEventVisibility @@ -451,6 +450,7 @@ GdkEvent* gdk_event_peek (void); GdkEvent* gdk_event_get_graphics_expose (GdkWindow *window); void gdk_event_put (GdkEvent *event); +GdkEvent* gdk_event_new (GdkEventType type); GdkEvent* gdk_event_copy (GdkEvent *event); void gdk_event_free (GdkEvent *event); diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index a0255ca07d..bc00798b06 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -169,9 +169,6 @@ extern gchar *_gdk_display_name; extern const GdkPointerHooks *_gdk_current_pointer_hooks; -GdkEvent* _gdk_event_new (void); - - void _gdk_events_queue (GdkDisplay *display); GdkEvent* _gdk_event_unqueue (GdkDisplay *display); diff --git a/gdk/linux-fb/gdkmain-fb.c b/gdk/linux-fb/gdkmain-fb.c index dd252470bc..4e3868ee58 100644 --- a/gdk/linux-fb/gdkmain-fb.c +++ b/gdk/linux-fb/gdkmain-fb.c @@ -1456,12 +1456,11 @@ gdk_event_make (GdkWindow *window, GdkEventType type, gboolean append_to_queue) { - GdkEvent *event = _gdk_event_new (); + GdkEvent *event = gdk_event_new (type); guint32 the_time; the_time = gdk_fb_get_time (); - event->any.type = type; event->any.window = gdk_window_ref (window); event->any.send_event = FALSE; switch (type) diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index d7cd076f37..ab01d6d1dc 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -166,6 +166,7 @@ real_window_procedure (HWND hwnd, msg.pt.y = HIWORD (pos); event.flags = GDK_EVENT_PENDING; + event.screen = NULL; if (gdk_event_translate (display, &event.event, &msg, &ret_val_flag, &ret_val, FALSE)) { event.flags &= ~GDK_EVENT_PENDING; @@ -217,7 +218,7 @@ real_window_procedure (HWND hwnd, } } #endif - eventp = _gdk_event_new (); + eventp = gdk_event_new (GDK_NOTHING); *((GdkEventPrivate *) eventp) = event; /* Philippe Colantoni <colanton@aris.ss.uci.edu> suggests this @@ -505,7 +506,7 @@ gdk_event_get_graphics_expose (GdkWindow *window) #else if (PeekMessage (&msg, GDK_WINDOW_HWND (window), WM_PAINT, WM_PAINT, PM_REMOVE)) { - event = _gdk_event_new (); + event = gdk_event_new (GDK_NOTHING); if (gdk_event_translate (gdk_drawable_get_display (window), event, &msg, NULL, NULL, TRUE)) @@ -1246,8 +1247,7 @@ synthesize_enter_or_leave_event (GdkWindow *window, { GdkEvent *event; - event = _gdk_event_new (); - event->crossing.type = type; + event = gdk_event_new (type); event->crossing.window = window; event->crossing.send_event = FALSE; gdk_window_ref (event->crossing.window); @@ -1468,8 +1468,7 @@ synthesize_expose_events (GdkWindow *window) WIN32_GDI_FAILED ("GetClipBox"); else if (k != NULLREGION) { - event = _gdk_event_new (); - event->expose.type = GDK_EXPOSE; + event = gdk_event_new (GDK_EXPOSE); event->expose.window = window; gdk_window_ref (window); event->expose.area.x = r.left; @@ -2533,7 +2532,7 @@ gdk_event_translate (GdkDisplay *display, * (from which it will be fetched before the release * event). */ - GdkEvent *event2 = _gdk_event_new (); + GdkEvent *event2 = gdk_event_new (GDK_KEY_PRESS); build_keypress_event (event2, msg); event2->key.window = window; gdk_drawable_ref (window); diff --git a/gdk/x11/gdkevents-x11.c b/gdk/x11/gdkevents-x11.c index 69a2ef4e67..cd9ec3ead9 100644 --- a/gdk/x11/gdkevents-x11.c +++ b/gdk/x11/gdkevents-x11.c @@ -269,7 +269,7 @@ gdk_event_get_graphics_expose (GdkWindow *window) if (xevent.xany.type == GraphicsExpose) { - event = _gdk_event_new (); + event = gdk_event_new (GDK_NOTHING); if (gdk_event_translate (GDK_WINDOW_DISPLAY (window), event, &xevent, TRUE)) @@ -1799,9 +1799,8 @@ _gdk_events_queue (GdkDisplay *display) continue; } - event = _gdk_event_new (); + event = gdk_event_new (GDK_NOTHING); - event->any.type = GDK_NOTHING; event->any.window = NULL; event->any.send_event = xevent.xany.send_event ? TRUE : FALSE; |