X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=pager.c;h=10c1703560ae3675ad67749f79eba963ff287a7a;hb=14aa6aff46683d1b60773607495a6490e1d5c6cc;hp=6c60e09e12a3ce7702fdbb7edbd8915ec5156e61;hpb=ad8836f845babf08c9033700172c80967188f870;p=pager.git diff --git a/pager.c b/pager.c index 6c60e09..10c1703 100644 --- a/pager.c +++ b/pager.c @@ -11,14 +11,14 @@ static GC dockapp_border1GC, dockapp_border2GC, window_border1GC, window_border2GC, active_desktopGC, inactive_desktopGC, active_windowGC, inactive_windowGC; static Atom supported_atom, num_desktops_atom, desktop_geometry_atom, current_desktop_atom, client_list_atom, client_desktop_atom, client_state_atom, active_window_atom, moveresize_window_atom; -static Atom above_state, below_state, shaded_state, skip_pager_state, hidden_state; -static long desktop = -1; +static Atom shaded_state, skip_pager_state, hidden_state; +static int desktop = -1; static Window drag_window; static int drag_x, drag_y; static int drag_button; static int dockapp_x, dockapp_y; static unsigned int dockapp_width, dockapp_height, dockapp_border, dockapp_depth; -static double scale; +static double aspect, scale; static int desktop_geometry_supported; static int current_desktop_supported; @@ -105,7 +105,7 @@ void enumerate_clients(client_t ***clients, unsigned long *num_clients, unsigned if (desktop_geometry_supported) { get_atom_longs(desktop_geometry_atom, XA_CARDINAL, DefaultRootWindow(DADisplay), &states, &num_states); root_width = states[0]; - root_height = states[0]; + root_height = states[1]; XFree(states); } else { @@ -115,6 +115,7 @@ void enumerate_clients(client_t ***clients, unsigned long *num_clients, unsigned XGetGeometry(DADisplay, DAWindow, &dockapp_root, &dockapp_x, &dockapp_y, &dockapp_width, &dockapp_height, &dockapp_border, &dockapp_depth); scale = (double) root_width / (double) dockapp_width; + aspect = (double) root_height / (double) dockapp_height; *active_window = get_atom_long(active_window_atom, XA_WINDOW, dockapp_root); *active_desktop = get_atom_long(current_desktop_atom, XA_CARDINAL, DefaultRootWindow(DADisplay)); @@ -135,9 +136,17 @@ void enumerate_clients(client_t ***clients, unsigned long *num_clients, unsigned } (*clients)[i]->window = 0; + /* Don't page the pager. */ + if (data[i] == DAWindow) continue; + /* Check the window is on our desktop (or all desktops). */ client_desktop = get_atom_long(client_desktop_atom, XA_CARDINAL, data[i]); - if (client_desktop != desktop && client_desktop != -1) continue; + if (desktop > -1) { + if (client_desktop != desktop && client_desktop != -1) continue; + } + else { + if (client_desktop != *active_desktop && client_desktop != -1) continue; + } /* Try to get its dimensions. */ if (! XGetGeometry(DADisplay, data[i], &root, &x, &y, &width, &height, &border, &depth)) continue; @@ -157,9 +166,9 @@ void enumerate_clients(client_t ***clients, unsigned long *num_clients, unsigned /* Scale it. */ (*clients)[i]->rect.x = (double) x / scale; - (*clients)[i]->rect.y = (double) y / scale; + (*clients)[i]->rect.y = (double) y / aspect; (*clients)[i]->rect.width = (double) width / scale; - (*clients)[i]->rect.height = (double) height / scale; + (*clients)[i]->rect.height = (double) height / aspect; } XFree(data); @@ -288,7 +297,7 @@ void page() { enumerate_clients(&clients, &num_clients, &active_desktop, &active_window); pixmap = XCreatePixmap(DADisplay, DAWindow, dockapp_width, dockapp_height, dockapp_depth); - if (active_desktop == desktop) gc = active_desktopGC; + if (active_desktop == desktop || desktop < 0) gc = active_desktopGC; else gc = inactive_desktopGC; draw_relief(pixmap, dockapp_width, dockapp_height, gc); @@ -349,7 +358,6 @@ int main(int argc, char **argv) { Display *display; unsigned int root_width, root_height; long num_desktops; - double aspect; DACallbacks callbacks = { 0, change, release, move, 0, 0, page }; DAProgramOption options = { "-d", "--desktop", "Desktop to page", DOInteger, 0, { (int *) &desktop } }; @@ -387,8 +395,6 @@ int main(int argc, char **argv) { setup_atom(&active_window_atom, "_NET_ACTIVE_WINDOW"); setup_atom(&moveresize_window_atom, "_NET_MOVERESIZE_WINDOW"); - setup_atom(&above_state, "_NET_WM_STATE_ABOVE"); - setup_atom(&below_state, "_NET_WM_STATE_BELOW"); setup_atom(&shaded_state, "_NET_WM_STATE_SHADED"); setup_atom(&skip_pager_state, "_NET_WM_STATE_SKIP_PAGER"); setup_atom(&hidden_state, "_NET_WM_STATE_HIDDEN"); @@ -396,9 +402,10 @@ int main(int argc, char **argv) { check_support(); num_desktops = get_atom_long(num_desktops_atom, XA_CARDINAL, DefaultRootWindow(DADisplay)); - if (desktop < 1) { + if (desktop == 0) { desktop = get_atom_long(current_desktop_atom, XA_CARDINAL, DefaultRootWindow(DADisplay)); } + else if (desktop < 0) desktop = -1; else if (desktop-- > num_desktops) { fprintf(stderr, "There are only %ld desktops!\n", num_desktops); exit(111);