diff options
Diffstat (limited to 'twin/kompmgr/kompmgr.c')
-rw-r--r-- | twin/kompmgr/kompmgr.c | 157 |
1 files changed, 107 insertions, 50 deletions
diff --git a/twin/kompmgr/kompmgr.c b/twin/kompmgr/kompmgr.c index d94b7aa11..2b497fb5f 100644 --- a/twin/kompmgr/kompmgr.c +++ b/twin/kompmgr/kompmgr.c @@ -258,6 +258,7 @@ conv *gaussianMap; #define TRANS_OPACITY 0.75 #define NDEBUG 1 +#define DEBUG_WINDWS 0 #define DEBUG_REPAINT 0 #define DEBUG_WINDOWS 0 #define DEBUG_EVENTS 0 @@ -1054,8 +1055,9 @@ discard_ignore (Display *dpy, unsigned long sequence) set_ignore (Display *dpy, unsigned long sequence) { ignore *i = malloc (sizeof (ignore)); - if (!i) + if (!i) { return; + } i->sequence = sequence; i->next = 0; *ignore_tail = i; @@ -1072,11 +1074,13 @@ should_ignore (Display *dpy, unsigned long sequence) static win * find_win (Display *dpy, Window id) { - win *w; + win *w; - for (w = list; w; w = w->next) - if ((!w->destroyed) && (w->id == id)) + for (w = list; w; w = w->next) { + if ((!w->destroyed) && (w->id == id)) { return w; + } + } return 0; } @@ -1363,12 +1367,20 @@ paint_all (Display *dpy, XserverRegion region) #endif /* never painted, ignore it */ - if ((!screen_damaged) && (!w->damaged)) + if ((!screen_damaged) && (!w->damaged)) { +#if DEBUG_REPAINT + printf(" [not damaged: 0x%x]", w->id); +#endif continue; + } /* skip invisible windows */ - if (w->a.x + w->a.width < 1 || w->a.y + w->a.height < 1 || w->a.x >= root_width || w->a.y >= root_height) + if (w->a.x + w->a.width < 1 || w->a.y + w->a.height < 1 || w->a.x >= root_width || w->a.y >= root_height) { +#if DEBUG_REPAINT + printf(" [invisible: 0x%x]", w->id); +#endif continue; + } if (!w->picture) { @@ -1390,7 +1402,7 @@ paint_all (Display *dpy, XserverRegion region) &pa); } #if DEBUG_REPAINT - printf (" 0x%x", w->id); + printf (" [painting 0x%x]", w->id); #endif if (clipChanged) { @@ -1829,6 +1841,10 @@ map_win (Display *dpy, Window id, unsigned long sequence, Bool fade) win *w = find_win (dpy, id); Drawable back; +#if DEBUG_WINDOWS + printf("map_win: 0x%x 0x%x\n", w, id); +#endif + if (!w) { return; } @@ -1879,6 +1895,9 @@ map_win (Display *dpy, Window id, unsigned long sequence, Bool fade) static void finish_unmap_win (Display *dpy, win *w) { +#if DEBUG_WINDOWS + printf("finish_unmap_win: 0x%x\n", w->id); +#endif w->damaged = 0; #if CAN_DO_USABLE w->usable = False; @@ -1955,6 +1974,11 @@ static void unmap_win (Display *dpy, Window id, Bool fade) { win *w = find_win (dpy, id); + +#if DEBUG_WINDOWS + printf("unmap_win: 0x%x 0x%x\n", w, id); +#endif + if (!w) return; @@ -2351,20 +2375,30 @@ add_win (Display *dpy, Window id, Window prev) win **p; unsigned int tmp; - if (!new) +#if DEBUG_WINDOWS + printf("add_win: 0x%x\n", id); +#endif + + if (!new) { return; - if (prev) - { - for (p = &list; *p; p = &(*p)->next) - if ((*p)->id == prev && !(*p)->destroyed) + } + if (prev) { + for (p = &list; *p; p = &(*p)->next) { + if (((*p)->id == prev) && (!(*p)->destroyed)) { break; + } + } } - else + else { p = &list; + } new->id = id; set_ignore (dpy, NextRequest (dpy)); if (!XGetWindowAttributes (dpy, id, &new->a)) { +#if DEBUG_WINDOWS + printf("not adding 0x%x: failed to get attributes\n", new->id); +#endif free (new); return; } @@ -2432,8 +2466,9 @@ add_win (Display *dpy, Window id, Window prev) new->next = *p; *p = new; - if (new->a.map_state == IsViewable) + if (new->a.map_state == IsViewable) { map_win (dpy, id, new->damage_sequence - 1, True); + } } void @@ -2441,25 +2476,32 @@ restack_win (Display *dpy, win *w, Window new_above) { Window old_above; - if (w->next) +#if DEBUG_WINDOWS + printf("restack_win: 0x%x\n", w->id); +#endif + + if (w->next) { old_above = w->next->id; - else + } + else { old_above = None; - if (old_above != new_above) - { + } + if (old_above != new_above) { win **prev; /* unhook */ - for (prev = &list; *prev; prev = &(*prev)->next) - if ((*prev) == w) + for (prev = &list; *prev; prev = &(*prev)->next) { + if ((*prev) == w) { break; + } + } *prev = w->next; /* rehook */ - for (prev = &list; *prev; prev = &(*prev)->next) - { - if ((!(*prev)->destroyed) && ((*prev)->id == new_above)) + for (prev = &list; *prev; prev = &(*prev)->next) { + if ((!(*prev)->destroyed) && ((*prev)->id == new_above)) { break; + } } w->next = *prev; *prev = w; @@ -2568,11 +2610,15 @@ finish_destroy_win (Display *dpy, Window id, Bool gone) { win **prev, *w; - for (prev = &list; (w = *prev); prev = &w->next) - if (w->id == id && w->destroyed) - { - if (gone) +#if DEBUG_WINDOWS + printf("finish_destroy_win: 0x%x\n", id); +#endif + + for (prev = &list; (w = *prev); prev = &w->next) { + if (w->id == id && w->destroyed) { + if (gone) { finish_unmap_win (dpy, w); + } *prev = w->next; if (w->picture) { @@ -2605,6 +2651,7 @@ finish_destroy_win (Display *dpy, Window id, Bool gone) free (w); break; } + } } #if HAS_NAME_WINDOW_PIXMAP @@ -2621,15 +2668,21 @@ destroy_win (Display *dpy, Window id, Bool gone, Bool fadeout) fade *f; win *w = find_win (dpy, id); +#if DEBUG_WINDOWS + printf("destroy_win: 0x%x 0x%x\n", w, id); +#endif + + if (w) { + w->destroyed = True; + } + if (w && w->destruct_queued == False) { f = find_fade (w); if (f) { w->destruct_queued = True; f->callback = destroy_callback; - w->destroyed = True; } else { - w->destroyed = True; #if HAS_NAME_WINDOW_PIXMAP if (w->pixmap && fadeout && winTypeFade[w->windowType]) { set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step, destroy_callback, gone, False, True, True); @@ -2650,25 +2703,26 @@ destroy_win (Display *dpy, Window id, Bool gone, Bool fadeout) } } -/* - static void - dump_win (win *w) - { - printf ("\t%08lx: %d x %d + %d + %d (%d)\n", w->id, - w->a.width, w->a.height, w->a.x, w->a.y, w->a.border_width); - } - - - static void - dump_wins (void) - { - win *w; - - printf ("windows:\n"); - for (w = list; w; w = w->next) - dump_win (w); - } - */ +#if DEBUG_WINDOWS + static void +dump_win (win *w) +{ + printf ("\t%08lx: %d x %d + %d + %d (%d)\n", w->id, + w->a.width, w->a.height, w->a.x, w->a.y, w->a.border_width); +} + + + static void +dump_wins (void) +{ + win *w; + + printf ("windows:\n"); + for (w = list; w; w = w->next) { + dump_win (w); + } +} +#endif static void damage_win (Display *dpy, XDamageNotifyEvent *de) @@ -3569,8 +3623,9 @@ main (int argc, char **argv) XShapeSelectInput (dpy, root, ShapeNotifyMask); XQueryTree (dpy, root, &root_return, &parent_return, &children, &nchildren); - for (i = 0; i < nchildren; i++) + for (i = 0; i < nchildren; i++) { add_win (dpy, children[i], i ? children[i-1] : None); + } XFree (children); } XUngrabServer (dpy); @@ -3586,7 +3641,9 @@ main (int argc, char **argv) for (;;) { - /* dump_wins (); */ +#if DEBUG_WINDOWS + dump_wins (); +#endif do { if (autoRedirect) { XFlush (dpy); |