// determine which monitor holds the active window, or failing that the mouse pointer void monitor_active ( Display *display, workarea *mon ) { Screen *screen = DefaultScreenOfDisplay ( display ); Window root = RootWindow ( display, XScreenNumberOfScreen ( screen ) ); int x, y; Window id; Atom type; int count; if ( config.monitor >= 0 ) { if ( monitor_get_dimension ( display, screen, config.monitor, mon ) ) { return; } fprintf ( stderr, "Failed to find selected monitor.\n" ); } if ( window_get_prop ( display, root, netatoms[_NET_ACTIVE_WINDOW], &type, &count, &id, sizeof ( Window ) ) && type == XA_WINDOW && count > 0 ) { XWindowAttributes attr; if ( XGetWindowAttributes ( display, id, &attr ) ) { Window junkwin; if ( XTranslateCoordinates ( display, id, attr.root, -attr.border_width, -attr.border_width, &x, &y, &junkwin ) == True ) { monitor_dimensions ( display, screen, x, y, mon ); return; } } } if ( pointer_get ( display, root, &x, &y ) ) { monitor_dimensions ( display, screen, x, y, mon ); return; } monitor_dimensions ( display, screen, 0, 0, mon ); }
int window_get_cardinal_prop(Window w, Atom atom, unsigned long *list, int count) { Atom type; int items; return window_get_prop(w, atom, &type, &items, list, count*sizeof(unsigned long)) && type == XA_CARDINAL ? items:0; }
int window_get_atom_prop(Window w, Atom atom, Atom *list, int count) { Atom type; int items; return window_get_prop(w, atom, &type, &items, list, count*sizeof(Atom)) && type == XA_ATOM ? items:0; }