+static void
+gtk_tray_icon_get_icon_size_property (GtkTrayIcon *icon)
+{
+ GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (icon));
+ GdkDisplay *display = gdk_screen_get_display (screen);
+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
+
+ Atom type;
+ int format;
+ union {
+ gulong *prop;
+ guchar *prop_ch;
+ } prop = { NULL };
+ gulong nitems;
+ gulong bytes_after;
+ int error, result;
+
+ g_assert (icon->priv->manager_window != None);
+
+ gdk_error_trap_push ();
+ type = None;
+ result = XGetWindowProperty (xdisplay,
+ icon->priv->manager_window,
+ icon->priv->icon_size_atom,
+ 0, G_MAXLONG, FALSE,
+ XA_CARDINAL,
+ &type, &format, &nitems,
+ &bytes_after, &(prop.prop_ch));
+ error = gdk_error_trap_pop ();
+
+ if (!error && result == Success &&
+ type == XA_CARDINAL && nitems == 1 && format == 32)
+ {
+ gint icon_size;
+
+ icon_size = prop.prop[0];
+
+ if (icon->priv->icon_size != icon_size)
+ {
+ icon->priv->icon_size = icon_size;
+
+ g_object_notify (G_OBJECT (icon), "icon-size");
+ }
+ }
+
+ if (type != None)
+ XFree (prop.prop);
+}
+