gdk: Remove GdkEventClient
authorBenjamin Otte <otte@redhat.com>
Tue, 1 Feb 2011 05:30:27 +0000 (06:30 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 1 Feb 2011 05:33:02 +0000 (06:33 +0100)
... and all APIs making use of it.

That code like it hasn't been touched in years, Google codesearch
didn't find any users and most importantly it's a horrendous API, so
let's just make it die instead of having to port it over to
non-GdkNativeWindow usage, which would be required for multi-backend
GDK.

http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00049.html

docs/reference/gdk/gdk3-sections.txt
gdk/gdk.symbols
gdk/gdkdisplay.c
gdk/gdkdisplay.h
gdk/gdkdisplayprivate.h
gdk/gdkevents.h
gdk/gdkscreen.c
gdk/gdkscreen.h
gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkdisplay-x11.h
gdk/x11/gdkscreen-x11.c

index a0627079dfe2dcc41f0e28c947346cee06b8acc2..846eeaa9861e542f51913768712319a394252d1e 100644 (file)
@@ -120,7 +120,6 @@ gdk_display_get_event
 gdk_display_peek_event
 gdk_display_put_event
 gdk_display_has_pending
-gdk_display_add_client_message_filter
 gdk_display_set_double_click_time
 gdk_display_set_double_click_distance
 gdk_display_get_pointer
@@ -204,7 +203,6 @@ gdk_screen_get_monitor_at_window
 gdk_screen_get_monitor_height_mm
 gdk_screen_get_monitor_width_mm
 gdk_screen_get_monitor_plug_name
-gdk_screen_broadcast_client_message
 gdk_screen_get_setting
 gdk_screen_get_font_options
 gdk_screen_set_font_options
@@ -777,12 +775,6 @@ gdk_events_get_distance
 gdk_event_handler_set
 GdkEventFunc
 
-<SUBSECTION>
-gdk_event_send_client_message
-gdk_event_send_client_message_for_display
-gdk_event_send_clientmessage_toall
-gdk_add_client_message_filter
-
 <SUBSECTION>
 gdk_get_show_events
 gdk_set_show_events
@@ -822,7 +814,6 @@ GdkEventSelection
 GdkNativeWindow
 GdkEventDND
 GdkEventProximity
-GdkEventClient
 GdkEventWindowState
 GdkEventSetting
 GdkEventOwnerChange
index 9fb4b631495e7cebdf1ada876bd67c44b610e554..bf7210c792894940ad59fc8a575b4c10aa141dbf 100644 (file)
@@ -1,7 +1,6 @@
 /* This file lists all exported symbols. It is used to generate
  * the gdk.def file used to control exports on Windows.
  */
-gdk_add_client_message_filter
 gdk_add_option_entries_libgtk_only
 gdk_app_launch_context_get_type G_GNUC_CONST
 gdk_app_launch_context_new
@@ -79,7 +78,6 @@ gdk_device_type_get_type G_GNUC_CONST
 gdk_device_ungrab
 gdk_device_warp
 gdk_disable_multidevice
-gdk_display_add_client_message_filter
 gdk_display_beep
 gdk_display_close
 gdk_display_device_is_grabbed
@@ -173,9 +171,6 @@ gdk_event_new
 gdk_event_peek
 gdk_event_put
 gdk_event_request_motions
-gdk_event_send_client_message
-gdk_event_send_client_message_for_display
-gdk_event_send_clientmessage_toall
 gdk_event_set_device
 gdk_event_set_screen
 gdk_event_set_source_device
@@ -260,7 +255,6 @@ gdk_rgba_get_type
 gdk_rgba_hash
 gdk_rgba_parse
 gdk_rgba_to_string
-gdk_screen_broadcast_client_message
 gdk_screen_get_active_window
 gdk_screen_get_default
 gdk_screen_get_display
index 22aebd7550a536fc45ac6f90e08a152b61c41ac7..4caadef4ba0ad97ed39bebad8bf44b1b74626fc5 100644 (file)
@@ -523,48 +523,6 @@ gdk_flush (void)
   g_slist_free (list);
 }
 
-/**
- * gdk_event_send_client_message:
- * @event: the #GdkEvent to send, which should be a #GdkEventClient.
- * @winid:  the window to send the X ClientMessage event to.
- * 
- * Sends an X ClientMessage event to a given window (which must be
- * on the default #GdkDisplay.)
- * This could be used for communicating between different applications,
- * though the amount of data is limited to 20 bytes.
- * 
- * Return value: non-zero on success.
- **/
-gboolean
-gdk_event_send_client_message (GdkEvent        *event,
-                              GdkNativeWindow  winid)
-{
-  g_return_val_if_fail (event != NULL, FALSE);
-
-  return gdk_event_send_client_message_for_display (gdk_display_get_default (),
-                                                   event, winid);
-}
-
-/**
- * gdk_event_send_clientmessage_toall:
- * @event: the #GdkEvent to send, which should be a #GdkEventClient.
- *
- * Sends an X ClientMessage event to all toplevel windows on the default
- * #GdkScreen.
- *
- * Toplevel windows are determined by checking for the WM_STATE property, as
- * described in the Inter-Client Communication Conventions Manual (ICCCM).
- * If no windows are found with the WM_STATE property set, the message is sent
- * to all children of the root window.
- **/
-void
-gdk_event_send_clientmessage_toall (GdkEvent *event)
-{
-  g_return_if_fail (event != NULL);
-
-  gdk_screen_broadcast_client_message (gdk_screen_get_default (), event);
-}
-
 void
 _gdk_display_enable_motion_hints (GdkDisplay *display,
                                   GdkDevice  *device)
@@ -1675,76 +1633,6 @@ gdk_display_list_devices (GdkDisplay *display)
   return GDK_DISPLAY_GET_CLASS(display)->list_devices (display);
 }
 
-/**
- * gdk_event_send_client_message_for_display:
- * @display: the #GdkDisplay for the window where the message is to be sent.
- * @event: the #GdkEvent to send, which should be a #GdkEventClient.
- * @winid: the window to send the client message to.
- *
- * On X11, sends an X ClientMessage event to a given window. On
- * Windows, sends a message registered with the name
- * GDK_WIN32_CLIENT_MESSAGE.
- *
- * This could be used for communicating between different
- * applications, though the amount of data is limited to 20 bytes on
- * X11, and to just four bytes on Windows.
- *
- * Returns: non-zero on success.
- *
- * Since: 2.2
- */
-gboolean
-gdk_event_send_client_message_for_display (GdkDisplay     *display,
-                                          GdkEvent       *event,
-                                          GdkNativeWindow winid)
-{
-  return GDK_DISPLAY_GET_CLASS(display)->send_client_message (display, event, winid);
-}
-
-/**
- * gdk_display_add_client_message_filter: (skip)
- * @display: a #GdkDisplay for which this message filter applies
- * @message_type: the type of ClientMessage events to receive.
- *   This will be checked against the @message_type field
- *   of the XClientMessage event struct.
- * @func: the function to call to process the event.
- * @data: user data to pass to @func.
- *
- * Adds a filter to be called when X ClientMessage events are received.
- * See gdk_window_add_filter() if you are interested in filtering other
- * types of events.
- *
- * Since: 2.2
- **/
-void
-gdk_display_add_client_message_filter (GdkDisplay   *display,
-                                      GdkAtom       message_type,
-                                      GdkFilterFunc func,
-                                      gpointer      data)
-{
-  GDK_DISPLAY_GET_CLASS(display)->add_client_message_filter (display, message_type, func, data);
-}
-
-/**
- * gdk_add_client_message_filter: (skip)
- * @message_type: the type of ClientMessage events to receive. This will be
- *     checked against the <structfield>message_type</structfield> field of the
- *     XClientMessage event struct.
- * @func: the function to call to process the event.
- * @data: user data to pass to @func.
- *
- * Adds a filter to the default display to be called when X ClientMessage events
- * are received. See gdk_display_add_client_message_filter().
- **/
-void
-gdk_add_client_message_filter (GdkAtom       message_type,
-                              GdkFilterFunc func,
-                              gpointer      data)
-{
-  gdk_display_add_client_message_filter (gdk_display_get_default (),
-                                        message_type, func, data);
-}
-
 static GdkAppLaunchContext *
 gdk_display_real_get_app_launch_context (GdkDisplay *display)
 {
index af779096c81013b234d0e013dd2e70d16f9c6d8a..65daad19911730571732916928e51ab746c628ce 100644 (file)
@@ -80,11 +80,6 @@ void      gdk_display_put_event  (GdkDisplay     *display,
                                   const GdkEvent *event);
 gboolean  gdk_display_has_pending (GdkDisplay  *display);
 
-void gdk_display_add_client_message_filter (GdkDisplay   *display,
-                                            GdkAtom       message_type,
-                                            GdkFilterFunc func,
-                                            gpointer      data);
-
 void gdk_display_set_double_click_time     (GdkDisplay   *display,
                                             guint         msec);
 void gdk_display_set_double_click_distance (GdkDisplay   *display,
index fc82f4f0931059dd9c3ceb36e940811b88139277..7438b66c0b8f848340e75f9a5eebc74bb8de83bf 100644 (file)
@@ -163,13 +163,6 @@ struct _GdkDisplayClass
                                                          gint           y);
 
   GList *                    (*list_devices)       (GdkDisplay *display);
-  gboolean                   (*send_client_message) (GdkDisplay     *display,
-                                                     GdkEvent       *event,
-                                                     GdkNativeWindow winid);
-  void                       (*add_client_message_filter) (GdkDisplay   *display,
-                                                           GdkAtom       message_type,
-                                                           GdkFilterFunc func,
-                                                           gpointer      data);
   GdkAppLaunchContext *      (*get_app_launch_context) (GdkDisplay *display);
   GdkNativeWindow            (*get_drag_protocol)      (GdkDisplay      *display,
                                                         GdkNativeWindow  winid,
index 91a5c8e0a7dd2178b615048623df36ee500778ce..97e3f3f70715fd3d7e9249c4c53957b0a85058e2 100644 (file)
@@ -89,7 +89,6 @@ typedef struct _GdkEventProperty    GdkEventProperty;
 typedef struct _GdkEventSelection   GdkEventSelection;
 typedef struct _GdkEventOwnerChange GdkEventOwnerChange;
 typedef struct _GdkEventProximity   GdkEventProximity;
-typedef struct _GdkEventClient     GdkEventClient;
 typedef struct _GdkEventDND         GdkEventDND;
 typedef struct _GdkEventWindowState GdkEventWindowState;
 typedef struct _GdkEventSetting     GdkEventSetting;
@@ -874,35 +873,6 @@ struct _GdkEventProximity
   GdkDevice *device;
 };
 
-/**
- * GdkEventClient:
- * @type: the type of the event (%GDK_CLIENT_EVENT).
- * @window: the window which received the event.
- * @send_event: %TRUE if the event was sent explicitly (e.g. using
- *   <function>XSendEvent</function>).
- * @message_type: the type of the message, which can be defined by the
- *   application.
- * @data_format: the format of the data, given as the number of bits in each
- *   data element, i.e. 8, 16, or 32. 8-bit data uses the b array of the
- *   data union, 16-bit data uses the s array, and 32-bit data uses the l
- *   array.
- *
- * An event sent by another client application.
- */
-struct _GdkEventClient
-{
-  GdkEventType type;
-  GdkWindow *window;
-  gint8 send_event;
-  GdkAtom message_type;
-  gushort data_format;
-  union {
-    char b[20];
-    short s[10];
-    long l[5];
-  } data;
-};
-
 /**
  * GdkEventSetting:
  * @type: the type of the event (%GDK_SETTING).
@@ -1060,7 +1030,6 @@ union _GdkEvent
   GdkEventSelection        selection;
   GdkEventOwnerChange              owner_change;
   GdkEventProximity        proximity;
-  GdkEventClient           client;
   GdkEventDND               dnd;
   GdkEventWindowState       window_state;
   GdkEventSetting           setting;
@@ -1125,19 +1094,9 @@ gboolean  gdk_get_show_events            (void);
 
 gboolean gdk_setting_get                           (const gchar *name,
                                                     GValue          *value);
-void gdk_add_client_message_filter                 (GdkAtom          message_type,
-                                                    GdkFilterFunc    func,
-                                                    gpointer         data);
-gboolean gdk_event_send_client_message             (GdkEvent        *event,
-                                                    GdkNativeWindow  winid);
-void     gdk_event_send_clientmessage_toall        (GdkEvent        *event);
 
 #endif /* GDK_MULTIHEAD_SAFE */
 
-gboolean gdk_event_send_client_message_for_display (GdkDisplay      *display,
-                                                    GdkEvent        *event,
-                                                    GdkNativeWindow  winid);
-
 G_END_DECLS
 
 #endif /* __GDK_EVENTS_H__ */
index 7658bfab9ca2077619667258ef7adbe0f7bdd26a..4dd9164a85d28f45ad7b249a40e8f3e0cefb0db8 100644 (file)
@@ -934,32 +934,6 @@ gdk_screen_get_window_stack (GdkScreen *screen)
   return GDK_SCREEN_GET_CLASS(screen)->get_window_stack (screen);
 }
 
-/**
- * gdk_screen_broadcast_client_message:
- * @screen: the #GdkScreen where the event will be broadcasted.
- * @event: the #GdkEvent.
- *
- * On X11, sends an X ClientMessage event to all toplevel windows on
- * @screen.
- *
- * Toplevel windows are determined by checking for the WM_STATE property,
- * as described in the Inter-Client Communication Conventions Manual (ICCCM).
- * If no windows are found with the WM_STATE property set, the message is
- * sent to all children of the root window.
- *
- * On Windows, broadcasts a message registered with the name
- * GDK_WIN32_CLIENT_MESSAGE to all top-level windows. The amount of
- * data is limited to one long, i.e. four bytes.
- *
- * Since: 2.2
- */
-void
-gdk_screen_broadcast_client_message (GdkScreen *screen,
-                                    GdkEvent  *event)
-{
-  return GDK_SCREEN_GET_CLASS(screen)->broadcast_client_message (screen, event);
-}
-
 /**
  * gdk_screen_get_setting:
  * @screen: the #GdkScreen where the setting is located
index dadb9666c43ae17dfb582a8183dd4cbe8ba58f71..0f16a8f0f683723d70d3015aab99146ce53e06f2 100644 (file)
@@ -74,9 +74,6 @@ gint          gdk_screen_get_monitor_height_mm (GdkScreen *screen,
 gchar *       gdk_screen_get_monitor_plug_name (GdkScreen *screen,
                                                 gint       monitor_num);
 
-void          gdk_screen_broadcast_client_message  (GdkScreen       *screen,
-                                                    GdkEvent        *event);
-
 GdkScreen *gdk_screen_get_default (void);
 
 gboolean   gdk_screen_get_setting (GdkScreen   *screen,
index 18be58fceca30165ed2f9a9f44384a19b75327bf..acc78a8ff753361fc7e338dcad842a14f75009e3 100644 (file)
@@ -846,56 +846,12 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
       break;
 
     case ClientMessage:
-      {
-       GList *tmp_list;
-       GdkFilterReturn result = GDK_FILTER_CONTINUE;
-       GdkAtom message_type = gdk_x11_xatom_to_atom_for_display (display, xevent->xclient.message_type);
-
-       GDK_NOTE (EVENTS,
-                 g_message ("client message:\twindow: %ld",
-                            xevent->xclient.window));
-
-       tmp_list = display_x11->client_filters;
-       while (tmp_list)
-         {
-           GdkClientFilter *filter = tmp_list->data;
-           tmp_list = tmp_list->next;
-
-           if (filter->type == message_type)
-             {
-               result = (*filter->function) (xevent, event, filter->data);
-               if (result != GDK_FILTER_CONTINUE)
-                 break;
-             }
-         }
-
-       switch (result)
-         {
-         case GDK_FILTER_REMOVE:
-           return_val = FALSE;
-           break;
-         case GDK_FILTER_TRANSLATE:
-           return_val = TRUE;
-           break;
-         case GDK_FILTER_CONTINUE:
-           /* Send unknown ClientMessage's on to Gtk for it to use */
-            if (window == NULL)
-              {
-                return_val = FALSE;
-              }
-            else
-              {
-                event->client.type = GDK_CLIENT_EVENT;
-                event->client.window = window;
-                event->client.message_type = message_type;
-                event->client.data_format = xevent->xclient.format;
-                memcpy(&event->client.data, &xevent->xclient.data,
-                       sizeof(event->client.data));
-              }
-            break;
-          }
-      }
+      GDK_NOTE (EVENTS,
+                g_message ("client message:\twindow: %ld",
+                           xevent->xclient.window));
 
+      /* Not currently handled */
+      return_val = FALSE;
       break;
 
     case MappingNotify:
@@ -1771,10 +1727,6 @@ gdk_x11_display_finalize (GObject *object)
   /* Leader Window */
   XDestroyWindow (display_x11->xdisplay, display_x11->leader_window);
 
-  /* list of filters for client messages */
-  g_list_foreach (display_x11->client_filters, (GFunc) g_free, NULL);
-  g_list_free (display_x11->client_filters);
-
   /* List of event window extraction functions */
   g_slist_foreach (display_x11->event_types, (GFunc)g_free, NULL);
   g_slist_free (display_x11->event_types);
@@ -2311,45 +2263,6 @@ gdk_x11_display_list_devices (GdkDisplay *display)
   return GDK_X11_DISPLAY (display)->input_devices;
 }
 
-static gboolean
-gdk_x11_display_send_client_message (GdkDisplay     *display,
-                                    GdkEvent       *event,
-                                    GdkNativeWindow winid)
-{
-  XEvent sev;
-
-  g_return_val_if_fail(event != NULL, FALSE);
-
-  /* Set up our event to send, with the exception of its target window */
-  sev.xclient.type = ClientMessage;
-  sev.xclient.display = GDK_DISPLAY_XDISPLAY (display);
-  sev.xclient.format = event->client.data_format;
-  sev.xclient.window = winid;
-  memcpy(&sev.xclient.data, &event->client.data, sizeof (sev.xclient.data));
-  sev.xclient.message_type = gdk_x11_atom_to_xatom_for_display (display, event->client.message_type);
-
-  return _gdk_x11_display_send_xevent (display, winid, False, NoEventMask, &sev);
-}
-
-static void
-gdk_x11_display_add_client_message_filter (GdkDisplay   *display,
-                                          GdkAtom       message_type,
-                                          GdkFilterFunc func,
-                                          gpointer      data)
-{
-  GdkClientFilter *filter;
-  g_return_if_fail (GDK_IS_DISPLAY (display));
-  filter = g_new (GdkClientFilter, 1);
-
-  filter->type = message_type;
-  filter->function = func;
-  filter->data = data;
-
-  GDK_X11_DISPLAY(display)->client_filters =
-    g_list_append (GDK_X11_DISPLAY (display)->client_filters,
-                  filter);
-}
-
 /**
  * gdk_x11_register_standard_event_type:
  * @display: a #GdkDisplay
@@ -2747,8 +2660,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
   display_class->supports_input_shapes = gdk_x11_display_supports_input_shapes;
   display_class->supports_composite = gdk_x11_display_supports_composite;
   display_class->list_devices = gdk_x11_display_list_devices;
-  display_class->send_client_message = gdk_x11_display_send_client_message;
-  display_class->add_client_message_filter = gdk_x11_display_add_client_message_filter;
   display_class->get_app_launch_context = _gdk_x11_display_get_app_launch_context;
   display_class->get_drag_protocol = _gdk_x11_display_get_drag_protocol;
   display_class->get_cursor_for_type = _gdk_x11_display_get_cursor_for_type;
index a18d647fb07d70bd97dcbdcdb1685c032e294711..7fdb05e231ad4e846d55e548f191be84c66afbfd 100644 (file)
@@ -95,9 +95,6 @@ struct _GdkX11Display
   GdkWindow *leader_gdk_window;
   gboolean leader_window_title_set;
 
-  /* list of filters for client messages */
-  GList *client_filters;
-
   /* List of functions to go from extension event => X window */
   GSList *event_types;
 
index e5cc2aedf23fc847206b4894c9fdcb4283f75e26..b6ceeb649e89a3ae2e4382b60616f1d36eb496da 100644 (file)
@@ -1086,92 +1086,6 @@ gdk_x11_screen_get_window_stack (GdkScreen *screen)
   return ret;
 }
 
-/* Sends a ClientMessage to all toplevel client windows */
-static gboolean
-gdk_event_send_client_message_to_all_recurse (GdkDisplay *display,
-                                             XEvent     *xev,
-                                             guint32     xid,
-                                             guint       level)
-{
-  Atom type = None;
-  int format;
-  unsigned long nitems, after;
-  unsigned char *data;
-  Window *ret_children, ret_root, ret_parent;
-  unsigned int ret_nchildren;
-  gboolean send = FALSE;
-  gboolean found = FALSE;
-  gboolean result = FALSE;
-  int i;
-
-  gdk_x11_display_error_trap_push (display);
-
-  if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), xid,
-                         gdk_x11_get_xatom_by_name_for_display (display, "WM_STATE"),
-                         0, 0, False, AnyPropertyType,
-                         &type, &format, &nitems, &after, &data) != Success)
-    goto out;
-
-  if (type)
-    {
-      send = TRUE;
-      XFree (data);
-    }
-  else
-    {
-      /* OK, we're all set, now let's find some windows to send this to */
-      if (!XQueryTree (GDK_DISPLAY_XDISPLAY (display), xid,
-                     &ret_root, &ret_parent,
-                     &ret_children, &ret_nchildren))
-       goto out;
-
-      for(i = 0; i < ret_nchildren; i++)
-       if (gdk_event_send_client_message_to_all_recurse (display, xev, ret_children[i], level + 1))
-         found = TRUE;
-
-      XFree (ret_children);
-    }
-
-  if (send || (!found && (level == 1)))
-    {
-      xev->xclient.window = xid;
-      _gdk_x11_display_send_xevent (display, xid, False, NoEventMask, xev);
-    }
-
-  result = send || found;
-
- out:
-  gdk_x11_display_error_trap_pop_ignored (display);
-
-  return result;
-}
-
-static void
-gdk_x11_screen_broadcast_client_message (GdkScreen *screen,
-                                        GdkEvent  *event)
-{
-  XEvent sev;
-  GdkWindow *root_window;
-
-  g_return_if_fail (event != NULL);
-
-  root_window = gdk_screen_get_root_window (screen);
-
-  /* Set up our event to send, with the exception of its target window */
-  sev.xclient.type = ClientMessage;
-  sev.xclient.display = GDK_WINDOW_XDISPLAY (root_window);
-  sev.xclient.format = event->client.data_format;
-  memcpy(&sev.xclient.data, &event->client.data, sizeof (sev.xclient.data));
-  sev.xclient.message_type =
-    gdk_x11_atom_to_xatom_for_display (GDK_WINDOW_DISPLAY (root_window),
-                                      event->client.message_type);
-
-  gdk_event_send_client_message_to_all_recurse (gdk_screen_get_display (screen),
-                                               &sev,
-                                               GDK_WINDOW_XID (root_window),
-                                               0);
-}
-
 static gboolean
 check_transform (const gchar *xsettings_name,
                 GType        src_type,
@@ -1691,7 +1605,6 @@ gdk_x11_screen_class_init (GdkX11ScreenClass *klass)
   screen_class->make_display_name = gdk_x11_screen_make_display_name;
   screen_class->get_active_window = gdk_x11_screen_get_active_window;
   screen_class->get_window_stack = gdk_x11_screen_get_window_stack;
-  screen_class->broadcast_client_message = gdk_x11_screen_broadcast_client_message;
   screen_class->get_setting = gdk_x11_screen_get_setting;
   screen_class->visual_get_best_depth = _gdk_x11_screen_visual_get_best_depth;
   screen_class->visual_get_best_type = _gdk_x11_screen_visual_get_best_type;