From f6fb9fbb3efcc935df3b21c89050e62f82bf4c61 Mon Sep 17 00:00:00 2001 From: kojima Date: Tue, 19 Oct 2004 01:29:34 +0000 Subject: [PATCH] include minimized windows in switch panel --- WindowMaker/Pixmaps/swtile.png | Bin 607 -> 1349 bytes src/cycling.c | 6 ++- src/switchpanel.c | 75 +++++++++++++++++++++++---------- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/WindowMaker/Pixmaps/swtile.png b/WindowMaker/Pixmaps/swtile.png index d8abc64c9a685b1fe9ca4112cda87516ad71a5d7..0b2509a497f30ddba2a8739e9938d70c3bba40cd 100644 GIT binary patch delta 1243 zcmV<11SI?41jP!FQwS3QBo;}TDv6O>D}My3NklDn*m5_ibC}tzIn?P3qX`3uu7*e62F(yMX zSP&tZ*y&7+F@xei8huILyYF>jlwi@$)WT?TzfJBX5cq!g+>`U*eGI&&WLf?M0Dm3= zzy|=(0RZiAb5sFCdWWHK34DwP^z%p!ysK@k3wB!6j8sZ?fO8vr5XdxX#vLI~k`{y3FNW&D1BA{Y#A z9UUEsaD%1O=@d?<(_**V`?OlEuBoX>fe>N{A;T=o{`9W^2q7~Fq0a-GwTA}q^t)8^*p%dxSsNH7@OhB{Fqk=WB{G{@cD-6o|{ z*$e?V zS(bMRA$L|+SAVx!tv}zkhW93oacODkOQX?v7Xbdi7 zlykXUzPh!d>Vpl$VzDeVh*nlsHfk&24gf$r9^Yvc0O4@>d3AXgoy`L2bo#ha04yvl z>{gde=Z}gfCnuy)0POAU31@2r4K50R0-yjW01AKtpa3WU3V;Hj04M+ofC8WZC;$q8 z0-yjW01AKtpa3WU3V(nCpa3WU3ZS6?D3!{Ffl=%Ad@(dM^nRlNsP&2fAOiqkv)MWt z1wf7041&{`3H0>zbT$fr8n4R;PBS)OGMNlIola5j=5;!q!elZTs@wVV3Q(z3YNyj_ zsdoTQr_-WRsnq8cz%b0VBuN_>W7clB_nFORWxbj=o6SnQ-GAPPF=i!6+F%%F8vy|D zJnujVFlJ|4>+RKQwK{|l!}GiYp!$*|$8j(E`};rVIIi7jG`2Q3Hy`8VsoM>IxxoH z5kkn};o)8+5_vj0I{I5Sn=Re8hWEy?xf%$cVvK*3BuTDRD&?J>okA!SO89)f^+KUg zzUlw-*9uP7_5_4bgyXn-k|fE55RvEkVlJ1AF!WZtp0#cf^qr*4JEmKHQ}DCC;6$^zWV(#>Qdj5j8780&*~ZL z>!;-`wO=fCqrYQzIrD@s;ugzdU%4Oo`RC*--p}c}Cj16dO7283>c;*&=GC#&w%&`c zRNYol?XKL8T*t$|J(AzJwy4=YC|CN-5SviFjY)1YBf|>iN9mzzdvcyJ?wVv3Dw)4I zYqi$q+OW5-m;V00#I9n?tnJBY)2gC+k7@mW)_R@;45Xn2tqiY@{CnM1ct&Nlo9N>n z->}%WC42?*MGi!TUJ8}`?I0`2KY9CsKqm(G51)3|FogH~U+ll}*OUWCa#GTiFNV!< zOIy|)V0qC$VW0hM#h5?&LOPkN9J|l*Kik~g-88xVz=l@s|5_F|MdsdR(2KetA-#Ar zw|(0wR@;Q{v(1k0vZ>CW`12T7#bPC^17aJ(`%Z^Q&hI<_pZPflags.mapped) + { + if (!wwin->flags.shaded && !wwin->flags.miniaturized && !wwin->flags.hidden) + return 0; + else + return -1; + } + if (WFLAGP(wwin, no_focusable)) + return 0; + if (wwin->frame->workspace != wwin->screen_ptr->current_workspace) + return 0; + return 1; +} + + static void changeImage(WSwitchPanel *panel, int index, int selected) { WMPixmap *pixmap= NULL; @@ -138,26 +157,33 @@ static void changeImage(WSwitchPanel *panel, int index, int selected) if (image && label) { RColor bgColor; RImage *back; - WMScreen *wscr= WMWidgetScreen(label); + WMScreen *wscr= WMWidgetScreen(label); + int opaq= 255; + + if (canReceiveFocus(WMGetFromArray(panel->windows, index)) < 0) + opaq= 50; if (selected) { back= RCloneImage(panel->tile); - RCombineArea(back, image, 0, 0, image->width, image->height, - (back->width - image->width)/2, (back->height - image->height)/2); + RCombineAreaWithOpaqueness(back, image, 0, 0, image->width, image->height, + (back->width - image->width)/2, (back->height - image->height)/2, + opaq); pixmap= WMCreatePixmapFromRImage(wscr, back, -1); RReleaseImage(back); } else { - bgColor.alpha= 100; + bgColor.alpha= opaq; bgColor.red = WMRedComponentOfColor(WMGrayColor(wscr))>>8; bgColor.green = WMGreenComponentOfColor(WMGrayColor(wscr))>>8; bgColor.blue = WMBlueComponentOfColor(WMGrayColor(wscr))>>8; - image= RCloneImage(image); - RCombineImageWithColor(image, &bgColor); + back= RCreateImage(image->width, image->height, 1); + RFillImage(back, &bgColor); - pixmap= WMCreatePixmapFromRImage(wscr, image, -1); - RReleaseImage(image); + RCombineImagesWithOpaqueness(back, image, opaq); + + pixmap= WMCreatePixmapFromRImage(wscr, back, -1); + RReleaseImage(back); } } @@ -215,27 +241,30 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace) int height; int iconWidth = ICON_IDEAL_SIZE; WMBox *vbox; + int fl; memset(panel, 0, sizeof(WSwitchPanel)); panel->scr= scr; panel->windows= WMCreateArray(10); - for (wwin= curwin; wwin; wwin= wwin->prev) { - if (wwin->frame->workspace == workspace && wWindowCanReceiveFocus(wwin) && - (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window)) { - WMInsertInArray(panel->windows, 0, wwin); + for (fl= 0; fl < 2; fl++) { + for (wwin= curwin; wwin; wwin= wwin->prev) { + if (((!fl && canReceiveFocus(wwin) > 0) || (fl && canReceiveFocus(wwin) < 0)) && + (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window)) { + WMInsertInArray(panel->windows, 0, wwin); + } } - } - wwin = curwin; - /* start over from the beginning of the list */ - while (wwin->next) - wwin = wwin->next; - - for (wwin= curwin; wwin && wwin != curwin; wwin= wwin->prev) { - if (wwin->frame->workspace == workspace && wWindowCanReceiveFocus(wwin) && - (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window)) { - WMInsertInArray(panel->windows, 0, wwin); + wwin = curwin; + /* start over from the beginning of the list */ + while (wwin->next) + wwin = wwin->next; + + for (wwin= curwin; wwin && wwin != curwin; wwin= wwin->prev) { + if (((!fl && canReceiveFocus(wwin) > 0) || (fl && canReceiveFocus(wwin) < 0)) && + (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window)) { + WMInsertInArray(panel->windows, 0, wwin); + } } } @@ -259,7 +288,7 @@ WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace) return panel; } - height= iconWidth + 20 + 10 + ICON_EXTRASPACE; + height= iconWidth + 20 + 10 + ICON_EXTRASPACE + 10; panel->icons= WMCreateArray(WMGetArrayItemCount(panel->windows)); panel->images= WMCreateArray(WMGetArrayItemCount(panel->windows));