+ if(event->atom==compositor->correction_atom)
+ update_geometry_correction(compositor, screen);
+ else if(event->atom==compositor->root_pmap_atom)
+ update_root_pixmap(compositor, screen);
+}
+
+void process_selection_request_event(Compositor *compositor, XSelectionRequestEvent *event)
+{
+ Atom prop_type;
+ int prop_format;
+ unsigned long overflow;
+ unsigned long names_length;
+ XSelectionEvent notify;
+
+ if(event->selection==compositor->geometry_data_atom)
+ {
+ char *monitor_name;
+ CompositedMonitor *monitor;
+
+ XGetWindowProperty(compositor->display, event->requestor, event->property, 0, 64, False, XA_STRING,
+ &prop_type, &prop_format, &names_length, &overflow, (unsigned char **)&monitor_name);
+ if(prop_type!=XA_STRING || prop_format!=8)
+ return;
+
+ monitor = find_monitor_by_name_global(compositor, monitor_name, NULL);
+ if(monitor && monitor->enabled)
+ XChangeProperty(compositor->display, event->requestor, event->property, XA_INTEGER, 16, PropModeReplace, (unsigned char *)monitor->geometry_data, monitor->geometry_data_size);
+
+ notify.type = SelectionNotify;
+ notify.requestor = event->requestor;
+ notify.selection = event->selection;
+ notify.target = event->target;
+ notify.property = (monitor ? event->property : None);
+ notify.time = event->time;
+ XSendEvent(compositor->display, event->requestor, False, 0, (XEvent *)¬ify);
+ }