gtk+ r20078 - in trunk: . gdk gdk/directfb gdk/quartz gdk/win32 gdk/x11
- From: rhult svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r20078 - in trunk: . gdk gdk/directfb gdk/quartz gdk/win32 gdk/x11
- Date: Tue, 6 May 2008 22:00:06 +0100 (BST)
Author: rhult
Date: Tue May 6 21:00:06 2008
New Revision: 20078
URL: http://svn.gnome.org/viewvc/gtk+?rev=20078&view=rev
Log:
2008-05-06 Richard Hult <richard imendio com>
* gdk/gdkevents.c: (gdk_event_copy), (gdk_event_free):
* gdk/gdkinternals.h: Add private backend data to events, and
handle it when copying/freeing events. Currently only needed in
the quartz backend.
* gdk/directfb/gdkevents-directfb.c:
* gdk/quartz/gdkevents-quartz.c:
* gdk/win32/gdkevents-win32.c:
* gdk/x11/gdkevents-x11.c: (_gdk_windowing_event_data_copy)
(_gdk_windowing_event_data_free): Add stubs for X11, win32 and
directfb. Implement for quartz. Part of fixing bug #473822.
Modified:
trunk/ChangeLog
trunk/gdk/directfb/gdkevents-directfb.c
trunk/gdk/gdkevents.c
trunk/gdk/gdkinternals.h
trunk/gdk/quartz/gdkevents-quartz.c
trunk/gdk/win32/gdkevents-win32.c
trunk/gdk/x11/gdkevents-x11.c
Modified: trunk/gdk/directfb/gdkevents-directfb.c
==============================================================================
--- trunk/gdk/directfb/gdkevents-directfb.c (original)
+++ trunk/gdk/directfb/gdkevents-directfb.c Tue May 6 21:00:06 2008
@@ -961,5 +961,16 @@
return FALSE;
}
+void
+_gdk_windowing_event_data_copy (GdkEvent *dst,
+ GdkEvent *src)
+{
+}
+
+void
+_gdk_windowing_event_data_free (GdkEvent *event)
+{
+}
+
#define __GDK_EVENTS_X11_C__
#include "gdkaliasdef.c"
Modified: trunk/gdk/gdkevents.c
==============================================================================
--- trunk/gdk/gdkevents.c (original)
+++ trunk/gdk/gdkevents.c Tue May 6 21:00:06 2008
@@ -420,6 +420,9 @@
default:
break;
}
+
+ if (gdk_event_is_allocated (event))
+ _gdk_windowing_event_data_copy (new_event, event);
return new_event;
}
@@ -485,6 +488,8 @@
break;
}
+ _gdk_windowing_event_data_free (event);
+
g_hash_table_remove (event_hash, event);
g_slice_free (GdkEventPrivate, (GdkEventPrivate*) event);
}
Modified: trunk/gdk/gdkinternals.h
==============================================================================
--- trunk/gdk/gdkinternals.h (original)
+++ trunk/gdk/gdkinternals.h Tue May 6 21:00:06 2008
@@ -166,6 +166,7 @@
GdkEvent event;
guint flags;
GdkScreen *screen;
+ gpointer windowing_data;
};
extern GdkEventFunc _gdk_event_func; /* Callback for events */
@@ -188,6 +189,10 @@
void _gdk_event_button_generate (GdkDisplay *display,
GdkEvent *event);
+void _gdk_windowing_event_data_copy (GdkEvent *dst,
+ GdkEvent *src);
+void _gdk_windowing_event_data_free (GdkEvent *event);
+
void gdk_synthesize_window_state (GdkWindow *window,
GdkWindowState unset_flags,
GdkWindowState set_flags);
Modified: trunk/gdk/quartz/gdkevents-quartz.c
==============================================================================
--- trunk/gdk/quartz/gdkevents-quartz.c (original)
+++ trunk/gdk/quartz/gdkevents-quartz.c Tue May 6 21:00:06 2008
@@ -1554,10 +1554,15 @@
GdkEventType type)
{
GdkEvent *event;
+ GdkEventPrivate *priv;
gchar buf[7];
gunichar c = 0;
event = gdk_event_new (type);
+
+ priv = (GdkEventPrivate *) event;
+ priv->windowing_data = [nsevent retain];
+
event->key.window = window;
event->key.time = get_time_from_ns_event (nsevent);
event->key.state = get_keyboard_modifiers_from_ns_event (nsevent);
@@ -2038,3 +2043,29 @@
return FALSE;
}
+
+void
+_gdk_windowing_event_data_copy (GdkEvent *dst,
+ GdkEvent *src)
+{
+ GdkEventPrivate *priv_dst = (GdkEventPrivate *) dst;
+ GdkEventPrivate *priv_src = (GdkEventPrivate *) src;
+
+ if (priv_src->windowing_data)
+ {
+ priv_dst->windowing_data = priv_src->windowing_data;
+ [(NSEvent *)priv_dst->windowing_data retain];
+ }
+}
+
+void
+_gdk_windowing_event_data_free (GdkEvent *event)
+{
+ GdkEventPrivate *priv = (GdkEventPrivate *) event;
+
+ if (priv->windowing_data)
+ {
+ [(NSEvent *)priv->windowing_data release];
+ priv->windowing_data = NULL;
+ }
+}
Modified: trunk/gdk/win32/gdkevents-win32.c
==============================================================================
--- trunk/gdk/win32/gdkevents-win32.c (original)
+++ trunk/gdk/win32/gdkevents-win32.c Tue May 6 21:00:06 2008
@@ -3652,3 +3652,14 @@
{
return FALSE;
}
+
+void
+_gdk_windowing_event_data_copy (GdkEvent *dst,
+ GdkEvent *src)
+{
+}
+
+void
+_gdk_windowing_event_data_free (GdkEvent *event)
+{
+}
Modified: trunk/gdk/x11/gdkevents-x11.c
==============================================================================
--- trunk/gdk/x11/gdkevents-x11.c (original)
+++ trunk/gdk/x11/gdkevents-x11.c Tue May 6 21:00:06 2008
@@ -3085,5 +3085,16 @@
return True;
}
+void
+_gdk_windowing_event_data_copy (GdkEvent *dst,
+ GdkEvent *src)
+{
+}
+
+void
+_gdk_windowing_event_data_free (GdkEvent *event)
+{
+}
+
#define __GDK_EVENTS_X11_C__
#include "gdkaliasdef.c"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]