Index: gdkevents-directfb.c
===================================================================
--- gdkevents-directfb.c	(revision 21788)
+++ gdkevents-directfb.c	(working copy)
@@ -164,18 +164,15 @@
 gdk_event_send_client_message_by_window (GdkEvent *event,
                                         GdkWindow *window)
 {
-  GdkEvent *new_event;
+  DFBUserEvent evt;
 
   g_return_val_if_fail(event != NULL, FALSE);
   g_return_val_if_fail(GDK_IS_WINDOW(window), FALSE);
-
-  new_event = gdk_directfb_event_make (window, GDK_CLIENT_EVENT);
-  new_event->client.message_type = event->client.message_type;
-  new_event->client.data_format = event->client.data_format;
-  memcpy(&new_event->client.data,
-        &event->client.data,
-        sizeof(event->client.data));
-
+	
+  evt.clazz = DFEC_USER;
+  evt.type = (unsigned int)GDK_ATOM_TO_POINTER(event->client.message_type);
+  evt.data = (void*)event->client.data.l[0];
+  _gdk_display->buffer->PostEvent(_gdk_display->buffer, DFB_EVENT(&evt));
   return TRUE;
 }
 
@@ -230,6 +227,28 @@
           else
             dfb_events_process_window_event (&event->window);
           break;
+        case DFEC_USER:
+        {
+            GList *tmp_list;
+
+            GDK_NOTE (EVENTS, g_print (" client_message"));
+
+            tmp_list = client_filters;
+            while (tmp_list)
+            {
+                GdkClientFilter *filter = (GdkEventFilter*)tmp_list->data;
+                DFBUserEvent *UserEvt = (DFBUserEvent *)event;
+
+                tmp_list = tmp_list->next;
+
+                if (filter->type == GDK_POINTER_TO_ATOM(UserEvt->type))
+                {
+                    if (filter->function(UserEvt,NULL,filter->data) != GDK_FILTER_CONTINUE)
+                        break;
+                }
+            }
+        }
+          break;
         default:
           break;
         }
