From 57aa4510ea92878de1317ec2db90342baeddfbcd Mon Sep 17 00:00:00 2001 From: K D Hedger Date: Thu, 2 May 2024 12:40:50 +0100 Subject: [PATCH] various ui fixes see change logs ... --- .../LFSApplications/src/lfstkprefs.cpp | 41 +- LFSDock/ChangeLog | 2 + .../resources/pixmaps/gradgreen-2-ls.png | Bin 0 -> 5353 bytes .../resources/pixmaps/gradgreen-2-rs.png | Bin 0 -> 5378 bytes .../LFSDock/resources/pixmaps/gradgreen-2.png | Bin 0 -> 6386 bytes LFSDock/LFSDock/resources/pixmaps/rage-ls.png | Bin 0 -> 7464 bytes LFSDock/LFSDock/resources/pixmaps/rage-rs.png | Bin 0 -> 7511 bytes LFSDock/LFSDock/resources/pixmaps/rage.png | Bin 0 -> 12998 bytes LFSDock/LFSDock/src/callbacks.cpp | 6 +- LFSDock/LFSDock/src/globals.cpp | 2 + LFSDock/LFSDock/src/launchers.cpp | 14 +- LFSDock/LFSDock/src/main.cpp | 32 +- LFSDock/LFSDock/src/taskBar.cpp | 12 - LFSDock/README.md | 1 + LFSPanel/LFSPanel/src/slider.cpp | 10 + LFSToolKit/LFSToolKit/lfstk/LFSTKButton.cpp | 7 +- .../LFSToolKit/lfstk/LFSTKFontDialog.cpp | 6 +- LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.cpp | 13 +- LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.h | 2 + LFSToolKit/LFSToolKit/lfstk/LFSTKGlobals.h | 2 +- LFSToolKit/LFSToolKit/lfstk/LFSTKLabel.cpp | 23 ++ LFSToolKit/LFSToolKit/lfstk/LFSTKWindow.cpp | 40 +- LFSToolKit/examples/basic.cpp | 2 + LFSToolKit/examples/toggle.cpp | 4 +- LFSWM2/ChangeLog | 3 + LFSWM2/LFSWM2/src/clientClass.cpp | 46 ++- LFSWM2/LFSWM2/src/eventsClass.cpp | 381 ++++++------------ LFSWM2/LFSWM2/src/eventsClass.h | 2 +- LFSWM2/LFSWM2/src/lfswm2Class.h | 2 - LFSWM2/LFSWM2/src/main.cpp | 1 + LFSWM2/LFSWM2/src/windowsClass.cpp | 16 +- LFSWM2/config.h.in | 3 + LFSWM2/configure.ac | 7 + 33 files changed, 305 insertions(+), 375 deletions(-) create mode 100644 LFSDock/LFSDock/resources/pixmaps/gradgreen-2-ls.png create mode 100644 LFSDock/LFSDock/resources/pixmaps/gradgreen-2-rs.png create mode 100644 LFSDock/LFSDock/resources/pixmaps/gradgreen-2.png create mode 100644 LFSDock/LFSDock/resources/pixmaps/rage-ls.png create mode 100644 LFSDock/LFSDock/resources/pixmaps/rage-rs.png create mode 100644 LFSDock/LFSDock/resources/pixmaps/rage.png diff --git a/LFSApplications/LFSApplications/src/lfstkprefs.cpp b/LFSApplications/LFSApplications/src/lfstkprefs.cpp index 58971d5..a71bced 100644 --- a/LFSApplications/LFSApplications/src/lfstkprefs.cpp +++ b/LFSApplications/LFSApplications/src/lfstkprefs.cpp @@ -284,7 +284,10 @@ void setPreviewData(void) if((!ml->empty()) ) { if(useTheme->LFSTK_getValue()==true) + { wc->LFSTK_setTile(windowTileEdit->LFSTK_getCStr(),-1); + wc->LFSTK_clearWindow(true); + } else { wc->LFSTK_setTile(NULL,0); @@ -359,13 +362,39 @@ void setPreviewData(void) { if(mls->gadget!=NULL) { - if(mls->type!=LINEEDITGADGET) + int gtype=mls->type; + switch(gtype) { - if(useTheme->LFSTK_getValue()==true) - mls->gadget->LFSTK_setTile(buttonTileEdit->LFSTK_getCStr(),-1); - else - mls->gadget->LFSTK_setTile(NULL,-1); + //fprintf(stderr,"SEPERATORGADGET\n"); + //mls->gadget->LFSTK_setTile(windowTileEdit->LFSTK_getCStr(),-1); + //break; + case SEPERATORGADGET: + case LABELGADGET: + //fprintf(stderr,"LABELGADGET\n"); + if(useTheme->LFSTK_getValue()==true) + mls->gadget->LFSTK_setTile(windowTileEdit->LFSTK_getCStr(),-1); + else + mls->gadget->LFSTK_setTile(NULL,-1); + break; + default: + if(useTheme->LFSTK_getValue()==true) + mls->gadget->LFSTK_setTile(buttonTileEdit->LFSTK_getCStr(),-1); + else + mls->gadget->LFSTK_setTile(NULL,-1); + break; } +// if(mls->type!=LINEEDITGADGET) +// { +// if(useTheme->LFSTK_getValue()==true) +// mls->gadget->LFSTK_setTile(buttonTileEdit->LFSTK_getCStr(),-1); +// else +// mls->gadget->LFSTK_setTile(NULL,-1); +// } +// else if(mls->type==LABELGADGET) +// { +// fprintf(stderr,"LABELGADGET\n"); +// mls->gadget->LFSTK_setTile(windowTileEdit->LFSTK_getCStr(),-1); +// } } } } @@ -806,7 +835,7 @@ int main(int argc, char **argv) sy+=YSPACING; setPreviewData(); - wc->LFSTK_resizeWindow(sx,sy,true); + wc->LFSTK_resizeWindow(DIALOGWIDTH+BORDER,sy,true); wc->LFSTK_showWindow(); wc->LFSTK_setKeepAbove(true); if(parentWindow!=-1) diff --git a/LFSDock/ChangeLog b/LFSDock/ChangeLog index dc27df6..8e53e01 100644 --- a/LFSDock/ChangeLog +++ b/LFSDock/ChangeLog @@ -1,4 +1,6 @@ 0.2.0 +Added a couple of background examples. +UI updates. Added use end caps ( optional ) when setting BG image. Better display of transparent BG image. Added optional background image to dock. diff --git a/LFSDock/LFSDock/resources/pixmaps/gradgreen-2-ls.png b/LFSDock/LFSDock/resources/pixmaps/gradgreen-2-ls.png new file mode 100644 index 0000000000000000000000000000000000000000..06920e29cc52ee9e6bc0b6ac657eb3abcda1fe0c GIT binary patch literal 5353 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 literal 0 HcmV?d00001 diff --git a/LFSDock/LFSDock/resources/pixmaps/gradgreen-2-rs.png b/LFSDock/LFSDock/resources/pixmaps/gradgreen-2-rs.png new file mode 100644 index 0000000000000000000000000000000000000000..52a335ff3adbe08336bd85b7dbcc59aec62df130 GIT binary patch literal 5378 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 QU~a88B383|);o*;1Cv;W2><{9 literal 0 HcmV?d00001 diff --git a/LFSDock/LFSDock/resources/pixmaps/gradgreen-2.png b/LFSDock/LFSDock/resources/pixmaps/gradgreen-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8863113664b2612f4375cb2dc48c8a13553d543 GIT binary patch literal 6386 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 literal 0 HcmV?d00001 diff --git a/LFSDock/LFSDock/resources/pixmaps/rage-ls.png b/LFSDock/LFSDock/resources/pixmaps/rage-ls.png new file mode 100644 index 0000000000000000000000000000000000000000..f363899f9543f26e192011295db5bad7a564052e GIT binary patch literal 7464 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 b!#;|aW1`e{ZAm>UyaG|k&NgM%dk*~%!{_a% literal 0 HcmV?d00001 diff --git a/LFSDock/LFSDock/resources/pixmaps/rage-rs.png b/LFSDock/LFSDock/resources/pixmaps/rage-rs.png new file mode 100644 index 0000000000000000000000000000000000000000..1a43cac734302034e2500c3184364ef0e30ad803 GIT binary patch literal 7511 zcmeHKc{r5a`yW{&Oj#p?5thDUKVWOVj|$*4-H+~VD}L4B#;RNO^6uy03rp1AOfJp#|eD5!$Et6fFMK= z><@x%4QTT*{H7ovyxboF?G4}UEYMc}j#&ZPx&kX8l3XRNT@+GJA6$<@V{j-84vmKC>f=BgjRMgEXMTCaXIfl)Z#Br0 zK(VrNCRka)7%V!O5(0ps=kCiev1>M0yyN%S-l4?M)B3iGm7Gxh`Q$>60x>zu@`o1= zw4U>O$WtLOnX*0-QZd>dN}(*h@cp0l}e7+-CVVE54q9Ln_GJ74Lkpene2R2I)V_HvmWvy zpU{6V^8RBHmGNRrYE@?0n$t3Ar#KcvwiQ~+4NPR6_Pe(8IfPCb+e3H!MYWXL?2BxS z@rth4ybp<9md3E=feey>dr-Qs+1$p($!^VUPT_Ol}11JGEZ)a{kp!k z>)Fy?!4vapH(qr6+nNvPGnmi2vrGnAqU)m30j{B&%p41xAul?|PO;3tBA~mcBZDVi zeH6Ioyt8D(;2?Az!sSzBc32WF>htWj(uR#JdsfktMxX=C!ElP3C&$xq8;(S$B8dTX ze*hUyW$+ISVr&-9Ad-Rs4$L12q|i*@Q}qpS7$v|2z7y++a%5NmK@_`47T_A`;e~SpW=!#2`@! zd^jZ(4L22s8M6Y&I2UW1?-byZ2|S3yVc>Lh!otFkVR}e9D^N$*$jC?sh1Nl%5g-D= zj-YXf;RqUAl~3`F!x~_dSQG|_LZ`v_oJ4;*mtz8lgY&Q-{!tl@jz8&X?C&aodgz1` z89KU1ln#}u^ZN=m2OkQOe0S(Su3)=GFaRAFfKBJJNB}+*pm9`xr{Le9pA7tv0x49+ za!{anf7>j8^b^P6vO<0Ky1BqYxw%+Q1*JtB>_3 z1}szY&jDxQOfZ3?k*HrI&LKn&na-k`z_(Fo-0)u$ZWJou$|3Sa(>2i5GcYm&!_`Bf z4Gr~wfjj^f8%#Jp=W>Z$o(Uk~Y(PdLm^c(FF%ZyU&;pky_{V|+g8_vl^79mAULFTy z!CA2YB8Sd$qtio7;6JPG&uK^SIt36pL~9}k0C)RYhuwbEVJ(y{4)rZAKAj^yfI^P= zztH^412YEk;E~%=*x>#V%R}F8lqg}^3;0^bw{xxP)2 zf{3(00IVM0)Ah$VdPmnv8>robXX9;KOTObp)d$E`iEfX?}F)k4_Jp^ zGk!#Dtnw zA1UyU!2f2~zjFN}1^yBE-|YH-lS};9>l8o(e+7ksFH7vhtW)5NmWaQDt@ZLN7i8Y5 zem`ifWY~GJArJ`}eiMM4%v}c#igE~!c+oK-dFgfX56;fcLm;a@609xUf?nk15Yl{h z%C&s0d{JIdf3RY*V(+tw%Su}h5d6hbs_@CTQic5+QzZvrA?9`#_Z9Hb@#-&N_>6Rv zm-Pyv6^$YZ>2|WDKMeCDFI4|8Ev-~YDltDCpByuwkN$hk+hU&pqzrqKs(erY*nK=0V3alNB%?e1`k){vr4 zt*x(a?BHRr_GxB>Om#=s*V7T32xs@!EOhOtp0Bqocy}0FvSi+6%(m+CQ=?L;lya90 zwHwnNTO&VDTs5-_*FRPA_zk$wT~qEg%c#7(obtIzcw&4!`fE+k?$0@Dfa&p%Jf06S z%>K;oO0AT$u5QgQo!iN-VN);uOq`&)m%0;NHvh5XlIIgL)wRZZBB}D`!e2dwe)ex# zGV2EBQ)AxU-LO|#DNmVs$@BcP3Hwa(#CVULJ8SCdF1%)yv<9&1Xy}|EI(_@qf&E_% z-s^R}l~y}C)&IzEqp>rS?Ycv(_}=k1E>F|l6J(h)}W-ywQVw~<2ulnzDzB&9^IhnuG#ne zxqGJCg+KT1t?{;h?3R3K^5Me!&tVTPX%_|$9D><|*| z(UrnuXD(#sXI_pSluHKYzKlGt#~B(rU-RkSgEDk?k;RLLsZH41tC_^!THT{Od#X(1 z%q@!8{n2SnS#i)ersC<7&b3V$70g$q&(hWf|{Nc$v#J-h6b7y`6?_Oa?ym29l!oCgO7a!KO)z zcPTtShYML+3X-;wZ_BT$5e62!4K}JS3aM?}b0Ds;BmHFxZ~9C}!9*Od$=+f=>y;j1FwMI)0nV+0*>$BPkb((LsXD-bwiF#M|%-q+iR8N6pcRAvB@aBx( z%!s616P-1=elGEDRHo_iC$Hz7y9#6c{Jws=id9a-p6I` zmgbN^Xx2lJwV_T*tl*W%l3G zy<+Gcf3ekU;aV2W+*v(vWutIQ$jfHxa9t7>V^lOhf0Oqx_K!PeDeq+(4F0p2-*$h+2~_ zh3G4Lg_9h9B0wB!D~4Rcc8A1`Ih37-RiFeOsYoYu_dyju3{(vskr7_E>SCj7f^baP zHJ+)!4&{$US?jk|qqa7=Zu{gwc$px4aHtm_{CEL+Tkk}w`6X{B7PzGw8R3mW}fPq-?V8|044`aF5#AdX!!j#JDRedA8J znnB$VkA+GlKa6nNv&x@PAn{RlvL0qUmANCK{A6I;rS{D&#<6p%)2|&9aDc@DN!RP- zRq?7&r$?OQQ{o4G|H#UzYadyutB@CW9a89iySixvZSGOKar~bAIa}z;4!v$vAv)y& z{PE|C@!;y4DjK)dRg<1kEjWVpRk6DQt8*S;hd%?!yFyn{l|7&2tIQ#VcFyhVJa(Tv z_jz&3vJfELNB7@81{+}+rP6@+`e=imDESHRwTehan_zZY;MRwoEr| z4aIBk^1_ZS#p5;l%FVA2Lw6m>YS~;*P6BG>pBe&! zYiuzlS>v2KSyLm|_Mu!@fR-j3T0W#Jxa#KiJ5U+X1jVS#ri$tsxLAva2b4?hKP7W6 z%9>WHTo&VFCqA0n>EY{{R(n#*yW{Ebl6$wcv5tbJR(BLbk(nSTzkS|J(7p3o|Dn=8 z`+G)Zu?(4B8GSmlP2x!hUf)mfB^Ul#Bw;$*N+iK6+ic`s^UyHFEeRSmwt|-Cy6NVE zW}SARWG6n^Pql95tNnLdLmPE>L1_eWuDah)o$$xQia-lCTgI4tdqLT^ z>E>aZf(cg3YK4t`){nXG9L2cr2Cf9-o|zKLtwK(z8UxbmgeoM$GjZk?K5UxnW&UR9 zs$|dXr>7z6WlPn@)eNQXEj}`Oj~~-diW0ok6powycp-dC_#eFHoy@mFY=FJEP&%h`9VLl0E*Q;=?^V@id=pdO5v| z7x$Cb_|uFy5#+TJV#X3&I9J5$n66SV``P5!r+x*vUq!FlCK64bC8S;7{!+32sCyt% zI6E!=b=JAy;6S9Tqwh^SAA4WMm#Yp1N);v&Qds%?Ek5U9>+6nq9DEm{@BM0@lBlO= z@RiZjt!yPXQ6sPR@NrzJAar(p)r{|1i42*Fi1=e%uQ1=Zcbo6&Wb6usT7=BJlsa5? zYIfiAxVPC7>)t)tbY3Q^R;N)%|Fr)ivo$1$rM2l{T@ES+7^O-pa|&aXL|7bay0CKlDDU^3_3n zV@-%xwuV9Z-N_v=gy%)h)aBt+Z|1cvEaAY@H#~%siVy8;Ogtl8b&2>vL~NwuK*L{c zcSHy!JjNKD6>uT&@gdR`j?Hs!M!$I3o|<-rD_2HD>N0{=uB={?pG8Rf5vg(_a_k!i zOWi{}PH>+e0~&KrZ8YU5ed&8TUofMfuar|id4mA0{c1Gb{1!T2IbX1zE#(vw6Fy#K z|MY8MjN#(O>1M0GzAQ@r)A^UZaz&?eHugc=HC;-h7AmSPE}mi+j%Ac4S+3krJ@1eq zc?x+k)F)iC>9W+>;!cl?ha^O-49pZ`=WeewxjQD&A$c?%d%U3StguiD)JK5Waf6&+ zi>8YdrUb_ok329ccGNPhM;3eP?&Y=*wk^KvooOR(i0{1hMiE^~+#j4wk`UTu+_0kX zZQzAV4+qn33{>mh7t1Osl_^gNs?%Vl&XmT)tnbVW=0hrN8dfWbJBE?S6iw;U06%iire9PfMB9o?L8m zz7fL9`b~Y@aI9m}q_5w2+k@R3P9LlkKfjsgqfi}m=TANIpkPm|*`ZJg)4p8xbhBKt zN5-SI?b7wg^dsd#^txGy2hjSb(WA9((xe`jXmU&~Q6v41hjgDJGr8ZU!okj`hA8e( zz9H{YZSondz>%cJqvxUr&|%e+6@uru+2e`xxwR#ukf#e$Z>L9+F7XEayuD&fnPkop zuVG&nZmXGMJx({IUZDKghMR{wRZ6k?c?ZViMu{wWsCW0p+VCxb<7)?VEpKgh5LF+) d*BYt$#!NjUUyJ?%XyLyx5%5md6_$JA{|6LU?ob(bA0`@K4zXEn@&N0hs9eDY}rO+V#wUcqx@`S%#11qxaO_h#9~?uqaSrwUk7?*2}}ClCKyl4eKj3 zA1Yu`ee{UZgn&4ZTaVEs)62_^3agWZ)DFb1NW-}oq?)H#4*GQIm?J zPw(*Y!(}T_oD=x6q3tV? zJ)FIRB4@XG_L$m)a`GIC*bGm(W#vjPruIiX&D^{FC26XI6w1#&T7kG2`|lMgNh&hv z2xt9@DF1YK6*^#4*kg2z;*CZfCfihwGANP1FbKsW!*}3#jY0p&$m;=j0a9l8qYUco zjyosnZdg15_|QJiROW>FVteAQx~7k6Jl4?uvKaGiSvMN{3C7j)sYmJT!Pm5JM`o@Z zFkhXrzMr44QkGp1aeFj3ktDU~4!ZS3z*^_=9T|;0ZNU8C&kT3jYbdGNzMtdP_XA+B zw*DLX#YNIv&<96;sos$=|MO$@vUXe)4mUajjX)OiO7uMj@a8t0cN2>U_+vxad>LUCc z5#rVm8EJe;9~c_I*~Zfn?Bnd@;sNuKg8asXq2-%yUI_TNil?I#!~h*f3a;)pU?CnM z9zLj|5Av}9L>eC~>27TcdjMDZ69V0mg4la{y1{sPy}iA8yajn&-R*e!#l^*W`2=_c z1fXaQsE4nMr=<_n#pCu3#2*-N8xMp#(#;d;>H@yOw6t>d@|1!=(Bt60>~nV0(D)nP z#p6#F(0uUvSi14@^YHOHJM;c?hKHx(V>HO02K|pSJam2CY`?Vk>Bq8(-8D>f8+m~_FumLRz_=SXu#mE2(Oz(RpC;Q8+&2at_Y+x?6)XxDJaa3 z5EX+8AVe&oLShI$sFf|ci9m?iT8Ua(+X`9n{{u?Z#lzFm1z~dog$CzAqH)A*`9*}p z(X$0C1wG9=O>S7}^;$v6eS+ibnq3kM;$o;BI5->FTcQ>gpr~xiR2( z*8O`}1AUyVEj=yamYz1~)&9=Ix_{+iE>Sm(Bb);D=^3J9pwCXZEt&H3ct_>YwT8(sg;=)(Wk6y3CoghzD4MosTENT*ZT)N;iLjV8_P=(9s`b8BchN{%22CdiG4 zfgXcDx;#&^?)#p04GVHy=}dw4k$)V+6JHe~sT183R)@+Q$YZ{3Ds>ruLvi%2IPPpG z%1Z>|M|M9t$`H;CS!RV4k@1h5Uq-!x!zCbkXMu%-*^1~J^)y^MCu<^$e{k(+nla+V*ibWJz()3{WRK|fG6%$nE{F}%_P{@~ zIVf*OYy7%!yXAS*rzn+DvL)5tvZZ90neqpdAi;npZRNay8NXLbaMTzQ3X%SK?F*+o zxR%X{+*Vtg&f6aRxvvNp60R(qHc*C#9;?DP*V;y-ewNOKuq{?(=TVT|36RlkkuaKt zAG3dp5}U-_REEnyMjVC&vtC3YDmv5!+lqVqn;Xkjzm4OE+xnHLo{^GO9R^RHNtXeo z^m9ODdt_S`4WSZbd-6NV&AcEyuC;W*!=|c0&BH4p$UKtaUDVtAGT2b~$QY5S6iSxd za=1~*(@jHl@<%-p1hOsMQOWlG{&B$}*sEc`gvw_qTzb7B54&V->9J5R2KDQgTM5I$ zUIF@}p`HgrM28t8*Dmdqk7U-{^x&*^)2~U$9_96r6SaZ&)R2!A9_WlXFsx1QjO`LU zTTX6UNF757y_xh2b`@foJljrV+Sa`+YPbW9_iacUzRug=y}kS?>V#zT(0?u5d);6E zdjJ>SuGpOUT}VPD%&}}Q-PY#~4$SDV!Hj@TC6rcEt&^yMZi2wHA$inHU1(pXtQ~W1 za?~;3zdW~sYb8BN`e4{3V0PoWl(p#fWGQQD(cWWWVy>eQ>QZ_#RkN@($H9JK4`hX> zT$pbjh|@l9en!TzstU543=4WqH9g6?xpw(%S_8>9u|g$v@bZHfb2BQdQfe}vvH>g{ zun^CReHK)C?4KU>1b%Tht0tI7Vt2V*I5-5>bc^^9fLIHuk*436PP1)%9pWuitqGq+ zE_x8c3X{#sNUH9clQfOJN0^F^-TOKo^l&m|eByoOnnTd!fm`EU=a>7k$J__fd`C&y z!rz9wMaM1eNjZfZNA7KHtklz)ShBrXFDVI0X=Lr8co_HVAS_~nPiI}2rB zlbQTTD4fb_hoq$Jea^8p#9T4e4b--_);pWiql?Ogx%x~ldec2An z<_@z*w!FeDgX0UF7ZFL*=eb9bzXHz4;-f8rt>$`uuL^Mx`e$Y&_a_z|-C;%5eaE|? z6u0-xheJdadi2@GnA=+hmvdb~v<^-WD{Qrnc^eFL=7Opk-W_J-8XFrlAh+>wJoeL1s0#(X zntb)#UevmV{O~xD)g!OQZzlX~Yt0KB`#7&%7tX4Kr6i#p7weE4l6(t!G`iaP$D;PvXcS7-hn=RoKVy}&orm&-%=$FGrlZ8nCI8ZKNd6<)b&T!Bk|JUaCh*z zvH7!QAl%Z)@q9UP~2~nS*3b zy;Y1lC;`hq(4(O}0lqD(ztt^hqWmG}hhbo`VpF~r)9vM*^f$ClSMTYzyFwi7s~d3* z%iVMsNl=SZ>FTU_$LrO3m(nB0#KE@Y-%=PdjAtEV#{)mAC)la>PVI-S&OEiL)ARw& zS(DTwVrxo5G9A1=Punfn^BwK08B1S@8WoB*yJ`{TEWdAXzc=}{o*kM_b@=1){F^y= z!eMTR+1hlno>)b)`MQLJEhoH{Jw1*ddQd3cK5QLZkw{KdUPZg38ts^V$@b(p#&&Lg zDK`CEx!%-vdBZ;WeRGZFD_`b&1(QR|M*x{O3&I7wM4!sv@V6>#E{oaVyVejQ*Bm4% z#7yt_mw3P(6|gvtT8YOx-nB`Lf8|t-Jho6soE(-SAQF3d)WX;F_{q;0EiY%q00w&o zXoa6#&JWT6YN5sjn~M2+2?7ak$ts&@v(>t`$XRK>#?AF7>46s;HCa=Rn>o2C(!z>G zWckLd(+(_-10 z9`1vOwSXu?`C)pjyYkFlw`9M)_d+EDI{0)a#=HGp8CBRB>$ z^#=9vXKX{Asaa*1bNU~oW#lN+Frz1uk{TMIg6o59-*%1kW~>Vb7p!Lc;B^OhToc1z z6@zos06fHSC4;pT%5g%s49sfjU;~&&N;D`y8XIn_vzmMr^{|oLv}3`3tur!xS2=gd zxuJc?V_^8|16yqYa5_TdX{wF_XZVDnSHe#t$0Y<7AG=$EZ9?_XJ;Oe_xuXJGvX6A) z0t0V@{TXkm<@>)dio?&gG)JW0`$bI`yATU_%gQyUJF&PwR6>iiSOpgO1wY#sA9gTb zwydjPVo)HDA2Ia^2*RdauL;{CeF0WnxlPp`|l3Wq$E*x{2c9r8nYLuYRd+f#3!aX=C%q&|Gp8~IM# zHOyT*B#t6UO=rmH5Nzq_w8wUlBK7tv;FRGhVGminq{V^_ z7)W%2HBY`)5fGR=nXqlRF2@v4zgZSwm(1*?!TheTp4GNOE-kYrbY2Wc6+slyl7!X7 zQYd_R$d8k;NUd%&jW1bDd+&g6Vu}`S@nJv3&6Vig79fqz;bT_A<6JNHvZc%)#zbv} zgIU;BmO-Fe-Qr$3pQ;(oFZLIodf(uX7I|oNJcM5;Ol*o;4D6THmM&Z)gi6?!dd+UL0PQ7Nufqu*b&Tt&6$A!e!b78SbA+7gO^h;Tj#6 zZ4pRw1XOyQU~!?qPgM%F4oD~XV~6m>ePX4cNg;`C*~P#p3!*hug&f)+n(o#33SdF0 z+`5=!f)g2nnN6n}XJ6VJ?4J_Ix9_=5aIZGXt})EA=sCh(Xb+wATi&&r(IDfCpB5yC z{rD-=5vVrpU{9F6NO(S5XC5y8dA)O_S8x{dj@jaV{D&v+f6(|)Wr@>SaP`c;hnE8>#GdS?tEiI)n@5*Nuq&fLBo<_xIM*-%{8dnemLfWS`}oS1^mXA;Ei=!PRzGvu>XWsNHC?~Dn^dsYUf8fx(3 z8%0EvY!XMse?N96qZU6vC(id`Z$qY83+p+;hliV+oZvR+lD4v&rQY2CPau3%_W zayJ`-E@hfJf_Jw`Dzf(@pV}B{Wn1u8hS)Ouw>c{T_hDh8@0<)$dU% zG1imC&%bP>^V>ZON>y2~AkU;~8|r?w?@83pOCZz5<&`J*q)cx5mt-V7VCX#AbG(gh z+40qg-JgKZG{$>g(cun;4>(Z+%y=t0tRCVO5 zag7cu#;z*w#;HfA7@5mbZg>WXi%0Fl_|iHVIu?<|39SuBXC{*p9tRH+Y1S9EUb4v1 zEGmm}Nr7DUOfK87@ai|q4=7uKlLT=r(uxJPO2&*=vPwDFM?v&gPo=)lcI{0)2R>El zd?cl4Qns=5$5Z5irf^~)6?;M7mO=f( zqwN?{mBI1pN_-O$WzrM(pdGPOsmH#6-W?)62~c$R1ECTB4JN^d%~OFmk2S~J#SK)A zh>GH!E5lZsrsaK77nwzbJEVg1{oP7F=i;p%Xy1wJyo(#l-a#hOL9^N+*|I1x**PE+ zPGbP*b<{tTrSK=FScnv2#fCp+bvs_t9JHMDj*r|`s9dU^l4BX{RHb`iLxkT5(tjM< z70>xOMh{^4#en<#mcpwx|2R2`DJ!;on6teZd;-?l8J}276Fixf_;x5P+tPI>tWhwb zH*loUEw4v~s{u!NC;4bU4<{94swLct3)7na(3=D}9Ktj*)=qCCF)EfB(TLpa?vtpS znU$q;#+q%%WJj`=?U4yFMb^ezByd|;(dVuialQv33d6|5O0U#W1IUj?MwuzncGm$1 zEf_>oXIsE6FEEfRWj=NjDhZ^9|z-H)meAl$1JN$RKvBtd8sEwan<@ zL}Lrb^2uAp+R9~?)e=V)A+htL+bBxAU+03qgq3zp)O>mo9ifKlx}bQw>M zECnSF?9d4ez0Q)FECQ}Ne#xHfBX6Como-_`CEj3KCz`}zj1Ti4Wp&7%UE_1^Gm6F$ z)2&^RziJRnqL{vyiFweM=rxK(`T+ZZAXbZ4l+*5-o(u17Ex~x+_-=)7-6ow4rdG)g zDk;${zr>@?`KxjL6P-~4G|S2tr6>7O9Kza>URWF7%cns!xxQLF@jCVjj)&7zWUa;D!1C`fW;hQsmnS0kPXgC1q{U^~8y7 zL^2iFH&fO1-(Rc6BIt?IG571ezXPx+-+LxuT@z`{ZR+|0=i9YkS$ax> z;dI2gdQ%Dt@RuGwk*}dpnb=~lF@<2B%J^E)tHo)agmN8@&msvGhyo0|-aDFcgFji$ zHpA{Zl_7#q)Z6Fy2@)WOtfXoqY*vfG?vRcxUSz}wczS!tF|+?*^Qf^tNEKr8Fp|XLOKd$&##E%&kiRqw!g=K$ z<18$Y)=>+= zOVcTHnv2p<%^f_^4tQ3O z3Iswc3zD=T(TI0SW4Tb5jpmVPCy7Z=aN2o95hTS8X~T230~^*`;*!u8VOGgFZp-I09l&(3p5SQIt*3 zH_FW_;_4nYjw8k~?(z`fUl-vx7vy>!S1tP#wMM6v(oKPPKdpR-A-l*LoysJLSEl|t zWU-7d$TSnLWbu8Uf_Qh1j%zO5GYL>l%?Au%Rrd|-l76d*KuMvA?Fw{?VeCa@BwIkO z%2MvW^xs}m_f_-l?*k|r$I!CH0kU)Wp0f6L$~BKZHxSr7Kd&wxJ(=96VC&_W1g=(e za7_a}gn@ALVE?&=&*?8a0`AK7@sLs0V!2zn?5phpT6(9=LMxAR0E!9=3--B#Rvv-! zRByZ9;H-HhKMCxrtZyj%@nDi(UFyDhs!y<5d0WM(qv{&jVoPJs=!>suS~Sb*Qu^&z zS3{rYPs3pAgw8V*yRQPr)a@1r=JTb8Wo@a-^|D7EV&rP?^T5w_kCxZOWRjLyqAHiCV^FU8*~ZqHy&S>h z!+gg6!eZUzG6%Wa!)JF^nSTu01$dNrpWO3*A5EBYduVH)V#TeK!Z@64vsSAO7xim$ zk6Bt1RzIp!%%|_EM!{pxeD!X<3`;}8X(?<~1x%S{sQ;II5gvQDZ zJXqc@pQhDF>#q^D&TwClp35z8*`8309On#b^@bR(v-V>Obm~;Avn|r6oiTGzIdHb< zDq>8ed}vUOjRHNbmJhJb*x8-Ky%qYciHOhOYes+Gvd!C%Y61e69H06wgLo(&R~&e# z$ns=o=j_t4;(27WO>E>8h%s_8lwwZaJ}pn2T!a|b1g>3#I~E+5PHR@l4hoVV-PgJ>{?6gk7_b-ast=`sm5c+-%t|JCze6>WESqq$<6&mp_?qx9vi7*-qmsH;RVbr{$4{!M7;LQx{ z5S|wX^z@P6&kxHGc7rF1&db5v-BNu=#&3PRjb}2K-xxviMu;#cjD79uLGE14_chhL z%E4SzjkWTCZ+?4J3E+{R}MU!|!BUwO

6f1LOzuQpVhK|L8i3{~ ze#VSN8GZF`NOb_^qt>VN5{aDW8S}?hI^lu%PIZ8`&OEqyWC(qxR4~>pZ@1+B+&jSxG2$8~aV^^TeTkIO8_OA=Zdpl+W z!vifksRy;}!SR9^o1&o}D<3qe{O5P4Wh_V19MlD5eMfOMqrqtcIlw%w;42*UrFU$5 zw}#H~t-pF`hdav??A4=!Kw;M-r+Csz9|%*%Qdn&|b(T-@u9FI4_l;V&$PPmtW2K?eCa0b9N@THUIb+N-+3_SeIwcrk3wH7mV3o4G+c zxYGN#NVErqfY(Ejt=q_lgq|tYwN-Hno=i3P16AtKCh&M4X!w(zW18%5$7rR6_gNVz{duV#ypF-j;hd2)Jz z)v{|^zgM_VaaJP^w5H)Q169h-!zsK-^x5Ks7vZQyi~5>%R;Q2DGgY)EuQH)@|^ z{g+4(aC?zK>48FaXELajDuVnp9tb$Ja2LAQLM%U_-*BVtj z!rfk~8aVe$0uJakDhJixMQhk>8;j}D>dsF!U!X7ekA-54P0uwGRy=2RkUQM*bU13$a%`0^=wsbfRVYR|YyU}hwTYDf1rnuCbjuYtry6pudR@AYAveHM>q z`}Ioci<-*e;cg~W#j!iDeo$GkYLU=sKV1(68Zs9+yQ0-zZr>Om`K9mkO0i;!>N9RH zo5$DD_-Uz7*WLSxo*`XHvIXJ_mHTB=7iV#09-F3Z*csBGMkh8;ZD(eGU+k8gPU+*) zZ_X|jwqK%_VX|R5Dk)gp{R}^(1+Cwub`Y>d@tNj{!u47(i;T>6m>0=oe?|!xUyw~t= zN!*_duDhbkFhA#izak&z6T$s9h-H&sr1%Lm{(EnT%%ce0sf$P>$;Q{X^o!fXmVd0=6u{@3NC=2j(CENB2`ty;?U<_{aNF9u_2`mJ>?_Z$icc$c zV|U#=M!_D*)wP02%+otfG1HS?D{5`eqps!NEQlL81XQmM-p3aM)yeGLeH^?eA-C7g zG54jj<%{dXbOQ)C9_QvbmLV#@jXE-l>}b*4=gxUa-YZoH>LEeb@oR*n6z>ufr=ok( znaWn|;cn%+mZngm+SWNp7R3vwH2c(^owJx6^k$M?x02Rq|Fccg3Bg0YmG;TNc52{- z2@FLwbzqKZAr=0~fvH;;)+0QVHI;dGObEL@ro~KZF_M%ZxY`tvlnxE+Oq7AibOy>1 z7&Q~kxazK@P9<$TCe70W=FMSL4uaFm!Ceoog}2fF2GGCxEdXOK{*GMd5CD%#|J^Gs zVXU1c>XNjyR#g^}Rr-^$IrP=2q9}|mf;TIN4>Nx=v-{3PM1%?HJi!NqgeaE&;-5Morz}_F;genycVMfK%mAl$}o}Qu}ow}ei znBFyFCY>N>nqAWCZx7e7JuE#9sYH~3!yltkf%ENvTM}3&BUlo1p4X;Q)q{Z&FTPe? zz1N;u;RzsU^`sdKe&Q6vOY4jsougq*EPYOBHjS0`M%uP13eKf?-5KHn%Og1;AtC0by>&1V5bc&bM_}Ga!c^CBrem4*MV-QKy!nS7u zj@y#LdaQPkPkCBE7@t3my#&{zOcmgnZ2AHqg()~)LP76sG@%}z_=hi37knw=i8K~N z^s3S!{*t62n>->i1E(f0yhBE?m_7ID&$JwJ+oQ=;kG`+5)V24FE~xS=F32QI2K&Rp zD8`ldKAule1~tX^`hM`2Fk|zfzPT{phDShO9nh)I19UCB0H;$IZKkOQi-g)J##f#E zT{gun8Y@O}WBa&BjV%d`%SOVJ%{#MeKtPIQ*EZF!BwFwnT9cifRh3mLZDl0v7pHx% hFP6_!)ZC|Qpe&8w3)Zjix^8};qN=C~uavh4{a@8%pmYEL literal 0 HcmV?d00001 diff --git a/LFSDock/LFSDock/src/callbacks.cpp b/LFSDock/LFSDock/src/callbacks.cpp index a0008bf..97e7136 100644 --- a/LFSDock/LFSDock/src/callbacks.cpp +++ b/LFSDock/LFSDock/src/callbacks.cpp @@ -22,6 +22,8 @@ LFSTK_windowClass *launcherContextWindow; LFSTK_windowClass *taskContextWindow; +int cnt=0; +int cnt2=0; void sendClientMessage(Window win,const char *msg,unsigned long data0,unsigned long data1,unsigned long data2,unsigned long data3,unsigned long data4) { @@ -80,9 +82,6 @@ bool gadgetDrop(void *lwc,propertyStruct *data,void* ud) return(true); } -int cnt=0; -int cnt2=0; - bool timerCB(LFSTK_applicationClass *p,void* ud) { readMsg(); @@ -224,7 +223,6 @@ void showhidetActionList(LFSTK_gadgetClass *bc,LFSTK_windowClass *winc,LFSTK_lis { winc->LFSTK_hideWindow(); apc->windows->at(apc->LFSTK_findWindow(winc)).showing=false; - // XSync(apc->display,false); } } diff --git a/LFSDock/LFSDock/src/globals.cpp b/LFSDock/LFSDock/src/globals.cpp index 214e3ea..e7d9356 100644 --- a/LFSDock/LFSDock/src/globals.cpp +++ b/LFSDock/LFSDock/src/globals.cpp @@ -338,6 +338,8 @@ void resizeDock(int wid,int hite) dockBGWindow->LFSTK_resizeWindow(wid,hite,true); if(bgrs!=NULL) bgrs->LFSTK_moveGadget(wid-sidewid,0); + dockWindow->LFSTK_clearWindow(true); + dockBGWindow->LFSTK_clearWindow(true); } void moveDock(int extra) diff --git a/LFSDock/LFSDock/src/launchers.cpp b/LFSDock/LFSDock/src/launchers.cpp index 4908b93..3330845 100644 --- a/LFSDock/LFSDock/src/launchers.cpp +++ b/LFSDock/LFSDock/src/launchers.cpp @@ -29,7 +29,7 @@ std::vector launchersArray; LFSTK_findClass *findlaunchers=NULL; LFSTK_gadgetClass *currentLauncher=NULL; -bool launcherEnterCB(LFSTK_gadgetClass*p,void* ud) +bool launcherEnterCB(LFSTK_gadgetClass* p,void* ud) { if(p!=NULL) { @@ -58,8 +58,6 @@ bool launcherEnterCB(LFSTK_gadgetClass*p,void* ud) inSomeWindow=true; } - //else - // currentLauncher=NULL; return(true); } @@ -85,11 +83,9 @@ bool launcherCB(void *p,void* ud) std::string command; std::string args; std::string str; - //std::string whch; propReturn pr; showhidetActionList(NULL,popActionWindow,popActionList); - //XSync(apc->display,false); if(p!=NULL) { @@ -130,19 +126,13 @@ bool launcherCB(void *p,void* ud) args=""; } - //whch=apc->globalLib->LFSTK_oneLiner("which '%S'",command); - sendNotify("Launching ",lds.name); - -// XSync(apc->display,false); if(lds.inTerm==false) str=apc->globalLib->LFSTK_oneLiner("exec %S %S &\necho $!",command,args); else str=apc->globalLib->LFSTK_oneLiner("exec %S %S %S &\necho $!",prefs.LFSTK_getString("termcommand"),command,args); lds.pid=std::stoul(str); - //XFlush(apc->display); - //apc->mainWindow->LFSTK_handleWindowEvents(NULL); if(useTaskBar==true) updateTaskBar(); @@ -248,10 +238,8 @@ int addLaunchers(int x,int y,int grav) bc->LFSTK_setImageFromPath(DATADIR "/pixmaps/command.png",LEFT,true); setGadgetDetails(bc); -// bc->LFSTK_setStyle(BEVELOUT); launchersArray.push_back(lds); xpos+=iconWidth+ICONSPACE; } - return(xpos); } diff --git a/LFSDock/LFSDock/src/main.cpp b/LFSDock/LFSDock/src/main.cpp index fcb7b13..564ec4a 100644 --- a/LFSDock/LFSDock/src/main.cpp +++ b/LFSDock/LFSDock/src/main.cpp @@ -217,7 +217,7 @@ int main(int argc,char **argv) win->windowType=apc->appAtomsHashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_WINDOW_TYPE_DOCK")); win->level=ABOVEALL; win->decorated=false; - //win->className="LFSDOCK"; + win->className="LFSDOCK"; apc->LFSTK_addWindow(win,"LFSDock"); dockWindow=apc->mainWindow; @@ -315,23 +315,26 @@ int main(int argc,char **argv) psize=windowWidth; win=apc->LFSTK_getDefaultWInit(); - win->windowType=apc->appAtomsHashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_WINDOW_TYPE_NORMAL")); + win->windowType=apc->appAtomsHashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_WINDOW_TYPE_DOCK")); win->level=ABOVEALL; win->overRide=false; win->decorated=false; apc->LFSTK_addWindow(win,"DOCKBG"); - dockBGWindow=apc->windows->back().window; - apc->windows->back().showing=true; + dockBGWindow=apc->windows->back().window; dockBGWindow->LFSTK_setTile(dockBGImage.c_str(),-1); + dockWindow->LFSTK_setTransientFor(dockBGWindow->window); + apc->windows->back().showing=true; - moveDock(0); resizeDock(psize,iconWidth+extraSpace); - + moveDock(0); //max hite for end caps should be 120 - +//size = 2 = 60 +//fprintf(stderr,"dock hite=%i\n",iconWidth+extraSpace); if(useBG==true) { + //hack :( + LFSTK_labelClass *label=new LFSTK_labelClass(dockBGWindow,"XX",0,0,1,1,NorthGravity); cairo_status_t st; cairo_surface_t *tsfc; std::string suffix=LFSTK_UtilityClass::LFSTK_deleteSuffix(&dockBGImage); @@ -339,14 +342,9 @@ int main(int argc,char **argv) dockBGImageLS=dockBGImage+"-ls."+suffix; dockBGImageRS=dockBGImage+"-rs."+suffix; dockBGWindow->LFSTK_showWindow(true); - tsfc=apc->globalLib->LFSTK_lib::LFSTK_createSurfaceFromPath(dockBGImageLS.c_str()); if(tsfc!=NULL) { -//fprintf(stderr,"dock hite=%i\n",iconWidth+extraSpace); -//fprintf(stderr,"sfc=%p\n",tsfc); -//fprintf(stderr,"hite===%i\n",cairo_image_surface_get_height(tsfc)); -//fprintf(stderr,"wid===%i\n",cairo_image_surface_get_width(tsfc)); sidehite=cairo_image_surface_get_height(tsfc); sidewid=cairo_image_surface_get_width(tsfc); cairo_surface_destroy (tsfc); @@ -356,7 +354,7 @@ int main(int argc,char **argv) st=bgls->LFSTK_setImageFromPath(dockBGImageLS,LEFT,false); if(st!=CAIRO_STATUS_SUCCESS) { - dockBGWindow->LFSTK_deleteGadget(bgls); + //dockBGWindow->LFSTK_deleteGadget(bgls); bgls=NULL; } @@ -365,13 +363,15 @@ int main(int argc,char **argv) st=bgrs->LFSTK_setImageFromPath(dockBGImageRS,RIGHT,false); if(st!=CAIRO_STATUS_SUCCESS) { - dockBGWindow->LFSTK_deleteGadget(bgrs); + //dockBGWindow->LFSTK_deleteGadget(bgrs); bgrs=NULL; } } - + dockBGWindow->LFSTK_clearWindow(true); } - + + tasks.clear(); + holdtasks.clear(); if(useTaskBar==true) updateTaskBar(true); diff --git a/LFSDock/LFSDock/src/taskBar.cpp b/LFSDock/LFSDock/src/taskBar.cpp index 1931206..4e3627d 100644 --- a/LFSDock/LFSDock/src/taskBar.cpp +++ b/LFSDock/LFSDock/src/taskBar.cpp @@ -32,7 +32,6 @@ bool taskSwitcherExitCB(LFSTK_gadgetClass*p,void* ud) { setGadgetPosition(p,false); inSomeWindow=false; - //dockWindow->LFSTK_clearWindow(true); currentTask=NULL; return(true); } @@ -121,7 +120,6 @@ bool taskListCB(void* p,void* ud) if(bc!=NULL) { sendClientMessage((Window)filltasks.at((unsigned long)bc->userData).winid,"_NET_ACTIVE_WINDOW",0,0,0,0,0); - //XSync(apc->display,false); } return(true); } @@ -252,11 +250,6 @@ skiplabel: oldwidth=0; moveDock(0); resizeDock(windowWidth,iconWidth+extraSpace); -// dockWindow->LFSTK_resizeWindow(windowWidth,iconWidth+extraSpace,true); -// dockBGWindow->LFSTK_resizeWindow(windowWidth,iconWidth+extraSpace,true); -// dockBGWindow->LFSTK_clearWindow(true); -// dockWindow->LFSTK_clearWindow(true); - return; } @@ -341,12 +334,7 @@ skiplabel: { moveDock(filltasks.size()*iconWidth); resizeDock(windowWidth+((iconWidth+ICONSPACE)*filltasks.size()),iconWidth+extraSpace); -// dockWindow->LFSTK_resizeWindow(windowWidth+((iconWidth+ICONSPACE)*filltasks.size()),iconWidth+extraSpace,true); -// dockBGWindow->LFSTK_resizeWindow(windowWidth+((iconWidth+ICONSPACE)*filltasks.size()),iconWidth+extraSpace,true); -// dockBGWindow->LFSTK_clearWindow(true); - oldwidth=windowWidth+(iconWidth*filltasks.size()); -// dockWindow->LFSTK_clearWindow(true); } } diff --git a/LFSDock/README.md b/LFSDock/README.md index 0d5b729..a0cb712 100644 --- a/LFSDock/README.md +++ b/LFSDock/README.md @@ -40,6 +40,7 @@ End caps can be optionally set and fshould be in the same folder and be the same /home/keithhedger/Backgrounds/rage-rs.png < Images can be (semi-)transparent.
The main tile can be any size but the end caps height shoud be at least 120, the width can be any size>=1.
+A couple of examples are included in /usr/share/LFSDock/pixmaps

More gadgets to come and improvements to the graphics.
The dock looks best with a transparent background at the bottom.
diff --git a/LFSPanel/LFSPanel/src/slider.cpp b/LFSPanel/LFSPanel/src/slider.cpp index 32ce6e9..4121a02 100644 --- a/LFSPanel/LFSPanel/src/slider.cpp +++ b/LFSPanel/LFSPanel/src/slider.cpp @@ -215,11 +215,21 @@ int addSlider(int x,int y,int grav,bool fromleft) direction=false; } + //win->x=100; + //win->y=100; + //w=w; + //h=h; win->w=w; win->h=h; + win->app=apc; apc->LFSTK_addToolWindow(win); scwindow=apc->windows->back().window; +// win->w=w; +// win->h=h; +// apc->LFSTK_addToolWindow(win); +// scwindow=apc->windows->back().window; + vsb=new LFSTK_scrollBarClass(scwindow,direction,0,0,w,h,BUTTONGRAV); vsb->LFSTK_setMouseCallBack(NULL,valChanged,NULL); diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKButton.cpp b/LFSToolKit/LFSToolKit/lfstk/LFSTKButton.cpp index 7c4bce1..f784873 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKButton.cpp +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKButton.cpp @@ -61,6 +61,7 @@ LFSTK_buttonClass::LFSTK_buttonClass(LFSTK_windowClass* parentwc,const char* lab this->ml->function=&LFSTK_lib::LFSTK_gadgetEvent; this->ml->gadget=this; this->ml->type=BUTTONGADGET; + this->gadgetType=BUTTONGADGET; wc->LFSTK_addMappedListener(this->window,ml); if(this->wc->globalLib->LFSTK_getUseTheme()==true) @@ -69,7 +70,11 @@ LFSTK_buttonClass::LFSTK_buttonClass(LFSTK_windowClass* parentwc,const char* lab this->useTile=false; if(this->label.compare("--")==0) - gadgetDetails={&this->newGadgetBGColours.at(NORMALCOLOUR),BEVELOUT,NOINDICATOR,NORMALCOLOUR,0,true,{0,0,w,h},{0,0,0,0},false,false,true}; + { + this->ml->type=SEPERATORGADGET; + this->gadgetType=SEPERATORGADGET; + gadgetDetails={&this->newGadgetBGColours.at(NORMALCOLOUR),BEVELOUT,NOINDICATOR,NORMALCOLOUR,0,true,{0,0,w,h},{0,0,0,0},false,false,true}; + } else gadgetDetails={&this->newGadgetBGColours.at(NORMALCOLOUR),BEVELOUT,NOINDICATOR,NORMALCOLOUR,0,true,{0,0,w,h},{0,0,0,0},false,false,false}; } diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKFontDialog.cpp b/LFSToolKit/LFSToolKit/lfstk/LFSTKFontDialog.cpp index 8684c08..b074893 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKFontDialog.cpp +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKFontDialog.cpp @@ -225,9 +225,12 @@ void LFSTK_fontDialogClass::buildDialog(void) delete win; this->dialog->autoLabelColour=false; - this->dialog->LFSTK_reloadGlobals(); + this->dialog->LFSTK_reloadGlobals(); this->dialog->LFSTK_clearWindow(); +//hack + LFSTK_labelClass *label=new LFSTK_labelClass(this->dialog,"XX",0,0,DIALOGWIDTH,DIALOGHITE,NorthGravity); + //list this->fontlist=new LFSTK_listGadgetClass(this->dialog,"",BORDER,sy,DIALOGWIDTH-(BORDER*2),GADGETHITE*5); this->loadFontStrings(); @@ -322,6 +325,7 @@ LFSTK_fontDialogClass::LFSTK_fontDialogClass(LFSTK_windowClass* parentwc,const c this->ml->function=&LFSTK_lib::LFSTK_gadgetEvent; this->ml->gadget=this; this->ml->type=BUTTONGADGET; + this->gadgetType=BUTTONGADGET; this->wc->LFSTK_addMappedListener(this->window,ml); if(this->wc->globalLib->LFSTK_getUseTheme()==true) diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.cpp b/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.cpp index bdacce1..27b77c5 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.cpp +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.cpp @@ -327,8 +327,9 @@ void LFSTK_gadgetClass::LFSTK_setUseWindowPixmap(bool usepixmap) void LFSTK_gadgetClass::clearBox(gadgetStruct* details) { cairo_pattern_t *patt; - colourStruct *usecolour; + colourStruct *usecolour; geometryStruct geom; + this->LFSTK_getGeom(&geom); if(details->useWindowPixmap==true) @@ -1571,12 +1572,12 @@ void LFSTK_gadgetClass::LFSTK_setTile(const char *path,int size) if(cs==CAIRO_STATUS_SUCCESS) { - if((this->gadgetDetails.gadgetGeom.w!=0) && (this->gadgetDetails.gadgetGeom.h!=0)) - cairo_xlib_surface_set_size(this->sfc,cairo_image_surface_get_width(tempimage)+1,cairo_image_surface_get_height(tempimage)+1); - if((cairo_xlib_surface_get_width(this->sfc)==0) || (cairo_xlib_surface_get_height(this->sfc)==0)) - cairo_xlib_surface_set_size(this->sfc,this->gadgetDetails.gadgetGeom.w,this->gadgetDetails.gadgetGeom.h); - + if((cairo_image_surface_get_width(tempimage)>cairo_xlib_surface_get_width(this->sfc)) ) + cairo_xlib_surface_set_size(this->sfc,cairo_image_surface_get_width(tempimage)+1,this->gadgetGeom.h); + else + cairo_xlib_surface_set_size(this->sfc,this->gadgetGeom.w,this->gadgetGeom.h); + this->pattern=cairo_pattern_create_for_surface(tempimage); cairo_surface_destroy(tempimage); cairo_pattern_set_extend(pattern,CAIRO_EXTEND_REPEAT); diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.h b/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.h index 75b2095..7df8217 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.h +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKGadget.h @@ -185,6 +185,8 @@ class LFSTK_gadgetClass cairo_pattern_t *pattern=NULL; unsigned pad; + int gadgetType=NOGADGET; + private: void initGadget(void); void selectBevel(bool mousedown); diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKGlobals.h b/LFSToolKit/LFSToolKit/lfstk/LFSTKGlobals.h index 440e8ee..27959d6 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKGlobals.h +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKGlobals.h @@ -78,7 +78,7 @@ enum {CANCEL=0,APPLY}; enum {NONE=0,LEFT,CENTRE,RIGHT,AUTO,MENU,PRESERVEASPECT,TOOLBAR}; enum gadgetState {NORMALCOLOUR=0,PRELIGHTCOLOUR,ACTIVECOLOUR,INACTIVECOLOUR,MAXCOLOURS}; -enum {BUTTONGADGET=1,MENUBUTTONGADGET,LINEEDITGADGET,LABELGADGET,TOGGLEGADGET,IMAGEGADGET,LISTGADGET,DIALOGGADGET,MULTILINEGADGET,SCROLLBARGADGET,MENUGADGET,MENUITEMGADGET,MULTIGADGET,TRANSPARENTGADGET,NOGADGET}; +enum {BUTTONGADGET=1,MENUBUTTONGADGET,LINEEDITGADGET,LABELGADGET,TOGGLEGADGET,IMAGEGADGET,LISTGADGET,DIALOGGADGET,MULTILINEGADGET,SCROLLBARGADGET,MENUGADGET,MENUITEMGADGET,MULTIGADGET,TRANSPARENTGADGET,SEPERATORGADGET,NOGADGET}; //enum {TYPEINT=1,TYPESTRING,TYPEBOOL}; enum {NORMAL=0,ABOVEALL,BELOWALL}; diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKLabel.cpp b/LFSToolKit/LFSToolKit/lfstk/LFSTKLabel.cpp index a68b04f..ee08b66 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKLabel.cpp +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKLabel.cpp @@ -67,6 +67,7 @@ LFSTK_labelClass::LFSTK_labelClass(LFSTK_windowClass* parentwc,const char* label this->ml->function=&LFSTK_lib::LFSTK_gadgetEvent; this->ml->gadget=this; this->ml->type=LABELGADGET; + this->gadgetType=LABELGADGET; this->wc->LFSTK_addMappedListener(this->window,ml); if(this->wc->globalLib->LFSTK_getUseTheme()==true) @@ -74,6 +75,28 @@ LFSTK_labelClass::LFSTK_labelClass(LFSTK_windowClass* parentwc,const char* label else this->useTile=false; +/* +struct gadgetStruct +{ + colourStruct *colour=NULL; + bevelType bevel=BEVELNONE; + indicatorType indic=NOINDICATOR; + int state=NORMALCOLOUR; + int reserveSpace=0; + bool buttonTile=false; + geometryStruct gadgetGeom={0,0,1,1}; + geometryStruct indicatorGeom={0,0,1,1}; + bool hasIndicator=false; + bool useWindowPixmap=false; + bool geomRelativeToMainWindow=false; + bool showLink=false; + bool showBroken=false; +}; +*/ gadgetDetails={&this->wc->windowColourNames[NORMALCOLOUR],BEVELNONE,NOINDICATOR,NORMALCOLOUR,0,false,{0,0,w,h},{0,0,0,0},false,false,true}; this->LFSTK_setLabelGravity(gravity); +// fprintf(stderr,"w=%i\n",gadgetGeom.w); +//this->gadgetDetails.gadgetGeom.w=1000; +//this->gadgetDetails.gadgetGeom.h=h; + } diff --git a/LFSToolKit/LFSToolKit/lfstk/LFSTKWindow.cpp b/LFSToolKit/LFSToolKit/lfstk/LFSTKWindow.cpp index d3e9715..484c40f 100644 --- a/LFSToolKit/LFSToolKit/lfstk/LFSTKWindow.cpp +++ b/LFSToolKit/LFSToolKit/lfstk/LFSTKWindow.cpp @@ -338,16 +338,6 @@ void LFSTK_windowClass::LFSTK_redrawAllGadgets(void) void LFSTK_windowClass::LFSTK_clearWindow(bool cleargadgets) { int state=NORMALCOLOUR; -// -// XClearWindow(this->app->display,this->window); -// cairo_save(this->cr); -// cairo_reset_clip (this->cr); -// fprintf(stderr,"--->>>here\n"); -// cairo_set_source_rgba(this->cr,1.0,1.0,1.0,1.0); -// cairo_set_operator(this->cr,CAIRO_OPERATOR_SOURCE); -// cairo_paint(this->cr); -// cairo_surface_flush (this->sfc); -// cairo_restore(this->cr); if(cleargadgets==true) this->LFSTK_redrawAllGadgets(); @@ -358,16 +348,14 @@ void LFSTK_windowClass::LFSTK_clearWindow(bool cleargadgets) if(this->isActive==false) state=INACTIVECOLOUR; - if(this->useTile==true) { - cairo_save(this->cr); cairo_reset_clip (this->cr); cairo_set_source(this->cr,this->pattern); cairo_set_operator(this->cr,CAIRO_OPERATOR_SOURCE); cairo_paint(this->cr); - cairo_surface_flush (this->sfc); + cairo_surface_flush(this->sfc); cairo_restore(this->cr); } else @@ -396,6 +384,8 @@ void LFSTK_windowClass::LFSTK_resizeWindow(int w,int h,bool tellx) XResizeWindow(this->app->display,this->window,w,h); this->globalLib->LFSTK_setCairoSurface(this->app->display,this->window,this->visual,&this->sfc,&this->cr,w,h); + this->w=w; + this->h=h; this->LFSTK_clearWindow(true); } @@ -985,7 +975,7 @@ void LFSTK_windowClass::LFSTK_setTile(const char *path,int size) { cairo_surface_t *tempimage; cairo_status_t cs=CAIRO_STATUS_SUCCESS; - char *suffix=NULL; + char *suffix=NULL; if(this->pattern!=NULL) { @@ -999,32 +989,32 @@ void LFSTK_windowClass::LFSTK_setTile(const char *path,int size) return; } + if(this->sfc==NULL) + this->sfc=cairo_xlib_surface_create(this->app->display,this->window,this->visual,this->w,this->h); + suffix=strrchr((char*)path,'.'); if((suffix!=NULL) && (strcasecmp(suffix,".png")==0)) { tempimage=cairo_image_surface_create_from_png(path); cs=cairo_surface_status(tempimage); } - else - cs=CAIRO_STATUS_INVALID_FORMAT; - - if(cs!=CAIRO_STATUS_SUCCESS) + else if((suffix!=NULL) && (strcasecmp(suffix,".jpg")==0)) { tempimage=this->globalLib->LFSTK_cairo_image_surface_create_from_jpeg(path); cs=cairo_surface_status(tempimage); - if(tempimage==NULL) - printf("Unkown Format : %s\n",path); } + else + cs=CAIRO_STATUS_INVALID_FORMAT; if(cs==CAIRO_STATUS_SUCCESS) { - //if((this->gadgetDetails.gadgetGeom.w!=0) && (this->gadgetDetails.gadgetGeom.h!=0)) - if(this->sfc==NULL) - this->sfc=cairo_xlib_surface_create(this->app->display,this->window,this->visual,w,h); - cairo_xlib_surface_set_size(this->sfc,cairo_image_surface_get_width(tempimage)+1,cairo_image_surface_get_height(tempimage)+1); + if((this->w!=0) && (h!=0)) + // cairo_xlib_surface_set_size(this->sfc,cairo_image_surface_get_width(tempimage)+1,cairo_image_surface_get_height(tempimage)+1); + cairo_xlib_surface_set_size(this->sfc,this->w,this->h); + //cairo_xlib_surface_set_size(this->sfc,1000,1000); this->pattern=cairo_pattern_create_for_surface(tempimage); cairo_surface_destroy(tempimage); - cairo_pattern_set_extend (pattern,CAIRO_EXTEND_REPEAT); + cairo_pattern_set_extend(pattern,CAIRO_EXTEND_REPEAT); this->useTile=true; } else diff --git a/LFSToolKit/examples/basic.cpp b/LFSToolKit/examples/basic.cpp index 579797e..46e0908 100755 --- a/LFSToolKit/examples/basic.cpp +++ b/LFSToolKit/examples/basic.cpp @@ -309,6 +309,8 @@ int main(int argc, char **argv) popWindow->LFSTK_resizeWindow(poplabel->LFSTK_getTextRealWidth("This is a mouse enter callback"),GADGETHITE); popWindow->LFSTK_setWindowColourName(NORMALCOLOUR,"#c0808080"); +//wc->LFSTK_setTile("/home/keithhedger/Backgrounds/bc3h.png",-1); + int retval=apc->LFSTK_runApp(); delete apc; diff --git a/LFSToolKit/examples/toggle.cpp b/LFSToolKit/examples/toggle.cpp index 32b5c8c..22c84f7 100755 --- a/LFSToolKit/examples/toggle.cpp +++ b/LFSToolKit/examples/toggle.cpp @@ -122,12 +122,12 @@ int main(int argc, char **argv) //check button check=new LFSTK_toggleButtonClass(wc,"Check Box",DIALOGMIDDLE-HALFGADGETWIDTH,sy,GADGETWIDTH,CHECKBOXSIZE); check->LFSTK_setValue(true); - check->LFSTK_setMouseCallBack(NULL,buttonCB,(void*)check->LFSTK_getLabel().c_str()); + check->LFSTK_setMouseCallBack(NULL,buttonCB,(void*)"Check Box"); sy+=YSPACING; //toggle button toggle=new LFSTK_toggleButtonClass(wc,"Toggle",DIALOGMIDDLE-HALFGADGETWIDTH,sy,GADGETWIDTH,GADGETWIDTH); - toggle->LFSTK_setMouseCallBack(NULL,buttonCB,(void*)toggle->LFSTK_getLabel().c_str()); + toggle->LFSTK_setMouseCallBack(NULL,buttonCB,(void*)"Toggle"); toggle->LFSTK_setMouseMoveCallBack(enterCB,exitCB,USERDATA(0)); toggle->LFSTK_setToggleStyle(TOGGLENORMAL); toggle->userData=USERDATA(1); diff --git a/LFSWM2/ChangeLog b/LFSWM2/ChangeLog index 1021e32..fa6cb3d 100644 --- a/LFSWM2/ChangeLog +++ b/LFSWM2/ChangeLog @@ -1,4 +1,7 @@ 1.0.1 +Removed some unnecessary code. +Added --enable-debug to configure. +Redone restack and window shuffle. Minor stack tweak. Unknown window types now set to normal type. Minor gui tweak on new app start. diff --git a/LFSWM2/LFSWM2/src/clientClass.cpp b/LFSWM2/LFSWM2/src/clientClass.cpp index a845856..73f95d8 100644 --- a/LFSWM2/LFSWM2/src/clientClass.cpp +++ b/LFSWM2/LFSWM2/src/clientClass.cpp @@ -251,7 +251,6 @@ bool LFSWM2_clientClass::doResizeDraggers(XEvent *e) steps=0; this->setWindowRects(false); this->dragRect=this->frameWindowRect; - this->mainClass->restackCnt=2; switch(this->resizeMode) { @@ -313,13 +312,11 @@ bool LFSWM2_clientClass::doResizeDraggers(XEvent *e) XMoveResizeWindow(this->mainClass->display,this->resizeWindow,this->mainClass->displayWidth+10,0,1,1); this->setWindowRects(true); - this->mainClass->restackCnt=0; break; case MotionNotify: if(buttonDown==true) { - this->mainClass->restackCnt=2; this->steps++; if(this->steps>this->smoothness) { @@ -534,13 +531,22 @@ bool LFSWM2_clientClass::wmCB(void *p,void* ud) { if(cc->onTop==false) { + XSetInputFocus(cc->mainClass->display,cc->contentWindow,RevertToNone,CurrentTime); + cc->isActive=true; + cc->mainClass->mainWindowClass->LFSWM2_setProp(cc->mainClass->rootWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,32,&cc->contentWindow,1); cc->mainClass->mainWindowClass->LFSWM2_addState(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE"))); cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); + cc->mainClass->mainEventClass->LFSWM2_shuffle(cc->contentWindow); } else { + XSetInputFocus(cc->mainClass->display,None,RevertToNone,CurrentTime); cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE"))); + cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->mainClass->rootWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW"))); + cc->mainClass->mainEventClass->LFSWM2_shuffle(None); + cc->mainClass->mainWindowClass->LFSWM2_refreshFrame(cc); } + cc->mainClass->mainEventClass->LFSWM2_restack(); usealt=!cc->onTop; stringnum=ONTOPLABEL; @@ -552,12 +558,18 @@ bool LFSWM2_clientClass::wmCB(void *p,void* ud) { cc->mainClass->mainWindowClass->LFSWM2_addState(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE"))); + cc->mainClass->mainEventClass->LFSWM2_shuffle(None); } else - cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); + { + cc->mainClass->mainWindowClass->LFSWM2_removeProp(cc->contentWindow,cc->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); + cc->mainClass->mainEventClass->LFSWM2_shuffle(None); + } + cc->mainClass->mainEventClass->LFSWM2_restack(); usealt=!cc->onBottom; stringnum=ONBOTTOMLABEL; + cc->mainClass->mainEventClass->LFSWM2_restack(); } if(LFSTK_UtilityClass::LFSTK_strStr(comp,cc->menuNames.at(ONALLDESKSLABEL)).empty()==false) @@ -903,7 +915,6 @@ void LFSWM2_clientClass::LFSWM2_setWMState(XEvent *e) this->onBottom=true; this->onTop=false; XLowerWindow(this->mainClass->display,this->contentWindow); - this->mainClass->restackCnt++; } if(this->mainClass->mainWindowClass->LFSWM2_hasState(e->xproperty.window,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE")))) @@ -912,7 +923,6 @@ void LFSWM2_clientClass::LFSWM2_setWMState(XEvent *e) this->onTop=true; XRaiseWindow(this->mainClass->display,this->contentWindow); this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,32,&this->contentWindow,1); - this->mainClass->restackCnt++; } if(states!=NULL) XFree(states); @@ -1038,6 +1048,14 @@ bool LFSWM2_clientClass::LFSWM2_handleEvents(XEvent *e) //this->mainClass->DEBUG_printEventData(e,true); switch(e->type) { + case ButtonPress: + //fprintf(stderr,"ButtonPress\n"); + if((e->xbutton.state&(this->mainClass->modKeys))!=(this->mainClass->modKeys))//TODO//???windows key for now used to move window wihout restacking + { + this->mainClass->mainEventClass->LFSWM2_shuffle(this->contentWindow); + this->mainClass->mainEventClass->LFSWM2_restack(); + } + break; case ButtonRelease: this->adjustContentWindow(); break; @@ -1056,7 +1074,6 @@ bool LFSWM2_clientClass::LFSWM2_handleEvents(XEvent *e) { this->mainClass->mainEventClass->noRestack=true; this->LFSWM2_doFrameMoveEvents(e); - this->mainClass->restackCnt=2; return(true); } break; @@ -1080,19 +1097,19 @@ bool LFSWM2_clientClass::LFSWM2_handleEvents(XEvent *e) //std::cerr<<"client MapNotify"<LFSWM2_hideWindow(true); - return(true); - } - break; case MapRequest: //std::cerr<<"client MapRequest"<LFSWM2_showWindow(false); break; + case UnmapNotify: + { + //fprintf(stderr,"UnmapNotify from client\n"); + this->LFSWM2_hideWindow(true); + return(true); + } + //break; case DestroyNotify: { //fprintf(stderr,"DestroyNotify from client\n"); @@ -1186,7 +1203,6 @@ void LFSWM2_clientClass::renderFrame(bool isfirst,int x,int y) this->setWindowRects(true); this->rendered=true; this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,32,(void*)&this->contentWindow,1); - this->mainClass->restackCnt=0; if(this->isBorderless==true) { XMoveWindow(this->mainClass->display,this->frameWindow,this->firstx+this->mainClass->leftSideBarSize,this->firsty+this->mainClass->titleBarSize); diff --git a/LFSWM2/LFSWM2/src/eventsClass.cpp b/LFSWM2/LFSWM2/src/eventsClass.cpp index 55e7c9e..ffbd51e 100644 --- a/LFSWM2/LFSWM2/src/eventsClass.cpp +++ b/LFSWM2/LFSWM2/src/eventsClass.cpp @@ -44,25 +44,25 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) int lastbutton=-1; int lasttime=0; -//XSynchronize(this->mainClass->display,true); this->mainClass->runLevel=RL_STARTUP; this->mainClass->LFSWM2_pushXErrorHandler(); this->mainClass->mainWindowClass->LFSWM2_buildClientList(); this->mainClass->LFSWM2_popXErrorHandler(); this->mainClass->runLevel=RL_NORMAL; - this->mainClass->restackCnt=0; this->mainClass->LFSWM2_setCurrentDesktop(this->mainClass->currentDesktop,true); this->LFSWM2_restack(); while(true) { XEvent e; + //if(XPending(this->mainClass->display)==0) + //fprintf(stderr,">>>>>e->type=%i\n",e.type); + if(firstrun==true) { if(XPending(this->mainClass->display)==0) { - this->mainClass->restackCnt=0; this->LFSWM2_restack(); firstrun=false; } @@ -115,7 +115,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) XGrabKey(this->mainClass->display,XKeysymToKeycode(this->mainClass->display,XK_Escape),(this->mainClass->modKeys),ccs->contentWindow,False,GrabModeSync,GrabModeAsync); } } - this->mainClass->restackCnt=1; this->noRestack=false; } @@ -144,7 +143,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) } cccontrol=NULL; e.type=0; - this->mainClass->restackCnt=1; continue; } } @@ -160,9 +158,8 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) { cc->renderFrame(false); this->noRestack=false; - this->mainClass->restackCnt=0; - XRaiseWindow(this->mainClass->display,cc->frameWindow); - //continue; + this->LFSWM2_shuffle(cc->contentWindow); + this->LFSWM2_restack(); } } } @@ -170,7 +167,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) switch(e.type) { case KeyRelease: - //fprintf(stderr,"e.xkey.keycode=%i\n",e.xkey.keycode); if((e.xkey.keycode==XKeysymToKeycode(this->mainClass->display,XK_Escape)) && (e.xkey.state&(this->mainClass->modKeys))==(this->mainClass->modKeys)) { cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(e.xkey.window); @@ -183,7 +179,7 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) break; case ButtonRelease: -// fprintf(stderr,"ButtonRelease eventnumber %i button number %i win=%x time=%d\n",when++,e.xbutton.button,e.xbutton.window,e.xbutton.time); + //fprintf(stderr,"ButtonRelease eventnumber %i button number %i win=%x time=%d\n",when++,e.xbutton.button,e.xbutton.window,e.xbutton.time); if((e.xbutton.window==this->mainClass->rootWindow) && (e.xbutton.time-lasttime>250)) { this->noRestack=false; @@ -199,7 +195,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) if(cd>=this->mainClass->numberOfDesktops) cd=0; this->mainClass->LFSWM2_setCurrentDesktop(cd); - this->mainClass->restackCnt=0; lasttime=e.xbutton.time; } } @@ -211,14 +206,16 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) //fprintf(stderr,"ButtonPress eventnumber %i\n",when++); this->noRestack=false; start=e.xbutton; - this->mainClass->restackCnt=0; this->sy=e.xbutton.y; cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(e.xbutton.window); if(cc!=NULL) { inmenu=false; if((e.xbutton.state&(this->mainClass->modKeys))==(this->mainClass->modKeys))//TODO//???windows key for now used to move window wihout restacking - break; + { + this->noRestack=true; + break; + } this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,32,&cc->contentWindow,1); XSetInputFocus(this->mainClass->display,cc->contentWindow,RevertToNone,CurrentTime); @@ -235,7 +232,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) long unsigned int nitems_return; if(overide==false) - this->mainClass->restackCnt=4; v=(Atom*)this->mainClass->mainWindowClass->LFSWM2_getProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,&nitems_return); if(v!=NULL) { @@ -256,14 +252,12 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) hs=this->mainClass->mainWindowClass->LFSWM2_getWindowHints(e.xmaprequest.window); XGetWindowAttributes(this->mainClass->display,e.xmaprequest.window,&x_window_attrs); XMapWindow(this->mainClass->display,e.xmaprequest.window); - //hs=this->mainClass->mainWindowClass->LFSWM2_getWindowHints(e.xmaprequest.window); //this->mainClass->DEBUG_printCurrentHintsDataStruct(hs); if((hs.mHints!=NULL) && (hs.mHints->decorations==0)) { if(this->mainClass->mainWindowClass->LFSWM2_createUnframedWindow(e.xmaprequest.window)==true) { this->noRestack=false; - this->mainClass->restackCnt=0; break; } break; @@ -274,9 +268,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) XMoveResizeWindow(this->mainClass->display,e.xmaprequest.window,this->mainClass->leftSideBarSize,this->mainClass->titleBarSize,x_window_attrs.width,x_window_attrs.height); this->noRestack=false; - this->mainClass->restackCnt=0; - //XRaiseWindow(this->mainClass->display,); - //XRaiseWindow(this->mainClass->display,this->mainClass->mainWindowClass->clientList.at(e.xmaprequest.window)->frameWindow); } break; @@ -348,9 +339,7 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) changes.sibling=e.xconfigurerequest.above; changes.stack_mode=e.xconfigurerequest.detail; - XConfigureWindow(this->mainClass->display,e.xconfigurerequest.window,e.xconfigurerequest.value_mask,&changes); - this->mainClass->restackCnt=1; - + XConfigureWindow(this->mainClass->display,e.xconfigurerequest.window,e.xconfigurerequest.value_mask,&changes); break; if((e.xconfigurerequest.value_mask & (CWX|CWY)) == (CWX|CWY)) @@ -381,7 +370,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) { //fprintf(stderr,"PropertyNotify IN eventnumber %i atom name=%s\n",when++,XGetAtomName(this->mainClass->display,e.xproperty.atom)); LFSWM2_clientClass *cc; - this->mainClass->restackCnt++;//??? if(false) { fprintf(stderr,"PropertyNotify eventnumber %i\n",when++); @@ -404,7 +392,6 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) if(e.xproperty.window==this->mainClass->rootWindow) { this->noRestack=false; - this->mainClass->restackCnt=0; this->mainClass->LFSWM2_setCurrentDesktopFromRoot(); } break; @@ -447,39 +434,28 @@ void LFSWM2_eventsClass::LFSWM2_mainEventLoop(void) case ClientMessage: //fprintf(stderr,"ClientMessage eventnumber %i\n",when++); this->noRestack=false; - this->mainClass->restackCnt=0; this->LFSWM2_doClientMsg(e.xclient.window,&e.xclient); break; case DestroyNotify: - //std::cout<<"DestroyNotify from main event loop"<::iterator it; + it=std::find(this->mainClass->mainWindowClass->windowIDList.begin(),this->mainClass->mainWindowClass->windowIDList.end(),e.xdestroywindow.window); + if(it != this->mainClass->mainWindowClass->windowIDList.end()) + this->mainClass->mainWindowClass->windowIDList.erase(it); + } break; default: //fprintf(stderr,"default eventnumber %i\n",when++); - if(overide==false) - this->mainClass->restackCnt=2;//TODO// break; } if(this->noRestack==false) { - this->mainClass->restackCnt--; - if(this->mainClass->restackCnt<1) - { - //fprintf(stderr,"this->mainClass->restackCnt<1 eventnumber %i\n",when++); - Atom *v=NULL; - long unsigned int n; - v=(Atom*)this->mainClass->mainWindowClass->LFSWM2_getProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CURRENT_DESKTOP")),XA_CARDINAL,&n); - - this->LFSWM2_restack(); - if((v!=NULL) && (this->mainClass->currentDesktop!=(long unsigned int)v[0])) - this->mainClass->mainWindowClass->LFSWM2_setVisibilityForDesk(this->mainClass->currentDesktop); - - this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CURRENT_DESKTOP")),XA_CARDINAL,32,&this->mainClass->currentDesktop,1); - - this->mainClass->restackCnt=1; - overide=false; - } + //fprintf(stderr,"this->mainClass->restackCnt<1 eventnumber %i\n",when++); + this->LFSWM2_restack(); } XAllowEvents(this->mainClass->display,ReplayPointer,CurrentTime); } @@ -530,8 +506,7 @@ void LFSWM2_eventsClass::LFSWM2_doClientMsg(Window id,XClientMessageEvent *e) ccmessage->visible=true; XRaiseWindow(this->mainClass->display,ccmessage->contentWindow); XSetInputFocus(this->mainClass->display,ccmessage->contentWindow,RevertToNone,CurrentTime); - //XSetInputFocus(this->mainClass->display,None,RevertToNone,0); - this->mainClass->restackCnt=0; + this->LFSWM2_shuffle(ccmessage->contentWindow); this->mainClass->LFSWM2_popXErrorHandler(); } @@ -548,12 +523,10 @@ void LFSWM2_eventsClass::LFSWM2_doClientMsg(Window id,XClientMessageEvent *e) if(this->mainClass->currentDesktop!=(unsigned long)e->data.l[0]) { this->mainClass->currentDesktop=(unsigned long)e->data.l[0]; - this->mainClass->restackCnt++; this->noRestack=true; return; } this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CURRENT_DESKTOP")),XA_CARDINAL,32,&this->mainClass->currentDesktop,1); - this->mainClass->restackCnt++; this->noRestack=true; return; } @@ -574,7 +547,6 @@ void LFSWM2_eventsClass::LFSWM2_doClientMsg(Window id,XClientMessageEvent *e) { this->mainClass->mainWindowClass->LFSWM2_addState(e->window,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_HIDDEN"))); this->mainClass->mainWindowClass->LFSWM2_reloadWindowState(e->window); - this->mainClass->restackCnt++; return; } } @@ -616,8 +588,7 @@ Atom (nil) name=(null) ccmessage->onTop=true; ccmessage->onBottom=false; this->mainClass->mainWindowClass->LFSWM2_changeState(ccmessage->contentWindow,NET_WM_STATE_REMOVE,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); - this->LFSWM2_moveToTop(ccmessage->contentWindow); - this->mainClass->restackCnt++; + this->LFSWM2_shuffle(ccmessage->contentWindow); } goto exitit; return; @@ -638,7 +609,6 @@ Atom (nil) name=(null) if(ccmessage->isBorderless==false) XLowerWindow(this->mainClass->display,ccmessage->frameWindow); ccmessage->onBottom=true; - this->mainClass->restackCnt++; } goto exitit; } @@ -685,240 +655,127 @@ void LFSWM2_eventsClass::LFSWM2_sendConfigureEvent(Window wid,rectStruct r) XSendEvent(this->mainClass->display,wid,true,StructureNotifyMask,(XEvent*)&ce); } -void LFSWM2_eventsClass::LFSWM2_restack(void)//TODO// still dont like this code +void LFSWM2_eventsClass::LFSWM2_restack(void) { - std::vector fromwl; - std::vector towldesktop; - std::vector towlbelow; - std::vector towlnormal; - //std::vector towlunknown; - std::vector towlabove; - std::vector towlpanel; - std::vector towlmenu; - std::vector towl; - std::vector netclientwl; - std::vector netclientstackwl; - - long unsigned int nitems_return; - int wtype; - Atom *v=NULL; - LFSWM2_clientClass *cc=NULL; - int a=0; - - v=(Atom*)this->mainClass->mainWindowClass->LFSWM2_getProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,&nitems_return); - - if((v!=NULL) && (v[0]!=None)) - { - hintsDataStruct hs; - hs=this->mainClass->mainWindowClass->LFSWM2_getWindowHints(v[0]); - if((hs.mHints!=NULL) && (hs.mHints->decorations==0)) - { - this->mainClass->mainWindowClass->LFSWM2_removeProp(this->mainClass->rootWindow,LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")); - v[0]=0; - } - } - - for(int a=0;amainClass->mainWindowClass->windowIDList.size();a++) - { - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(this->mainClass->mainWindowClass->windowIDList.at(a)); - if(cc!=NULL) - { - if(cc->rendered==false) - continue; - cc->doneRestack=false; - if((v!=NULL) && (cc->contentWindow==v[0]) && (cc->isActive==false)) - { - cc->isActive=true; - cc->mainClass->mainWindowClass->LFSWM2_refreshFrame(cc); - move(this->mainClass->mainWindowClass->windowIDList,a,0); - } - else if((v!=NULL) && (cc->contentWindow!=v[0]) && (cc->isActive==true)) - { - cc->isActive=false; - cc->mainClass->mainWindowClass->LFSWM2_refreshFrame(cc); - } - } - } + std::vector wl; + std::vector cl; + LFSWM2_clientClass *cc; for(int j=0;jmainClass->mainWindowClass->windowIDList.size();j++) { cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(this->mainClass->mainWindowClass->windowIDList.at(j)); if(cc!=NULL) { - cc->doneRestack=false; - } - } - -//move transients - a=0; - while(amainClass->mainWindowClass->windowIDList.size()) - { - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(this->mainClass->mainWindowClass->windowIDList.at(a)); - if(cc!=NULL) - { - if((cc->transientFor!=0) && (cc->doneRestack==false)) - { - for(int b=0;bmainClass->mainWindowClass->windowIDList.size();b++) - { - if((this->mainClass->mainWindowClass->windowIDList.at(b)==cc->transientFor) && ((v!=NULL) && (this->mainClass->mainWindowClass->windowIDList.at(b)==v[0]))) - { - cc->doneRestack=true; - move(this->mainClass->mainWindowClass->windowIDList,a,0); - a=0; - continue; - } - } - } - } - a++; - } - - if(v!=NULL) - XFree(v); - - fromwl=this->mainClass->mainWindowClass->windowIDList; - towldesktop.clear(); - towlbelow.clear(); - towlnormal.clear(); - //towlunknown.clear(); - towlabove.clear(); - towlpanel.clear(); - towlmenu.clear(); - netclientwl.clear(); - netclientstackwl.clear(); - towl.clear(); - - for(int j=0;jmainClass->mainWindowClass->LFSWM2_getWindowType(fromwl.at(j)); - switch(wtype) - { - case MENUWINDOW: - case NOTIFICATION: - //menus - towlmenu.push_back(fromwl.at(j)); - break; - case DESKTOPWINDOW: - //desktop windows - towldesktop.push_back(fromwl.at(j)); - break; - case NORMALWINDOW: - case DIALOGWINDOW: - case TOOLWINDOW: - //case UNKNOWNTYPE: - if(this->mainClass->mainWindowClass->LFSWM2_hasState(fromwl.at(j),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW")))) - { - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(fromwl.at(j)); - if(cc!=NULL) - towlbelow.push_back(cc->frameWindow); - else - towlbelow.push_back(fromwl.at(j)); - break; - } - if(this->mainClass->mainWindowClass->LFSWM2_hasState(fromwl.at(j),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE")))) - { - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(fromwl.at(j)); - if(cc!=NULL) - towlabove.push_back(cc->frameWindow); - else - towlabove.push_back(fromwl.at(j)); - break; - } - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(fromwl.at(j)); - if(cc!=NULL) - { - //if (wtype==UNKNOWNTYPE) - //fprintf(stderr,"wid=0x%x\n",fromwl.at(j)); - towlnormal.push_back(cc->frameWindow); - } - else - towlnormal.push_back(fromwl.at(j)); - break; -// case UNKNOWNTYPE: -// cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(fromwl.at(j)); -// if(cc!=NULL) -// { -// if (wtype==UNKNOWNTYPE) -// fprintf(stderr,"wid=0x%x\n",fromwl.at(j)); -// towlnormal.push_back(cc->frameWindow); -// } -// else -// towlnormal.push_back(fromwl.at(j)); -// break; - case DOCKWINDOW: - //panels - towlpanel.push_back(fromwl.at(j)); - break; - } - } - - towl=towlmenu; - - if(this->mainClass->forceDockStackingOrder==FORCEABOVE) - towl.insert(towl.end(),towlpanel.begin(),towlpanel.end()); - towl.insert(towl.end(),towlabove.begin(),towlabove.end()); - towl.insert(towl.end(),towlnormal.begin(),towlnormal.end()); - towl.insert(towl.end(),towlbelow.begin(),towlbelow.end()); - - if(this->mainClass->forceDockStackingOrder==FORCEBELOW) - towl.insert(towl.end(),towlpanel.begin(),towlpanel.end()); - - towl.insert(towl.end(),towldesktop.begin(),towldesktop.end()); - - XRestackWindows(this->mainClass->display,towl.data(),towl.size()); - - for(int j=0;jmainClass->mainWindowClass->LFSWM2_getClientClass(fromwl.at(j)); - if(cc!=NULL) - { - if(cc->isWithdrawn==false) - netclientwl.push_back(cc->contentWindow); + cl.push_back(this->mainClass->mainWindowClass->clientList.at(this->mainClass->mainWindowClass->windowIDList.at(j))->contentWindow); + wl.push_back(this->mainClass->mainWindowClass->clientList.at(this->mainClass->mainWindowClass->windowIDList.at(j))->frameWindow); } else { - if(this->mainClass->mainWindowClass->LFSWM2_getWindowType(fromwl.at(j))!=DESKTOPWINDOW) - netclientwl.push_back(fromwl.at(j)); + cl.push_back(this->mainClass->mainWindowClass->windowIDList.at(j)); + wl.push_back(this->mainClass->mainWindowClass->windowIDList.at(j)); } } - this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CLIENT_LIST")),XA_WINDOW,32,netclientwl.data(),netclientwl.size()); -//this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CLIENT_LIST_STACKING")),XA_WINDOW,32,netclientwl.data(),netclientwl.size()); -// -// - for(int j=towl.size()-1;j>-1;j--) - { - cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(towl.at(j)); - if(cc!=NULL) - { - if(cc->isWithdrawn==false) - netclientstackwl.push_back(cc->contentWindow); - } - else - { - if(this->mainClass->mainWindowClass->LFSWM2_getWindowType(towl.at(j))!=DESKTOPWINDOW) - netclientstackwl.push_back(towl.at(j)); - } - } - this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CLIENT_LIST_STACKING")),XA_WINDOW,32,netclientstackwl.data(),netclientstackwl.size()); - //XRestackWindows(this->mainClass->display,towl.data(),towl.size()); + XRestackWindows(this->mainClass->display,wl.data(),wl.size()); + this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CLIENT_LIST")),XA_WINDOW,32,cl.data(),cl.size()); + this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_CLIENT_LIST_STACKING")),XA_WINDOW,32,cl.data(),cl.size()); } -void LFSWM2_eventsClass::LFSWM2_moveToTop(Window id) +void LFSWM2_eventsClass::LFSWM2_shuffle(Window id) { - for(long unsigned j=0;jmainClass->mainWindowClass->windowIDList.size();j++) + std::vector wl; + std::vector wlb; + std::vector::iterator it; + LFSWM2_clientClass *cc; + int findid=0; + int lastdock=0; + int lastabove=0; + int cnt=0; + long unsigned int n=0; + int to=0; + + if(id!=None) { - if(this->mainClass->mainWindowClass->windowIDList.at(j)==id) + findid=std::find(this->mainClass->mainWindowClass->windowIDList.begin(),this->mainClass->mainWindowClass->windowIDList.end(),id)-this->mainClass->mainWindowClass->windowIDList.begin(); + this->mainClass->mainWindowClass->windowIDList.erase(this->mainClass->mainWindowClass->windowIDList.begin()+findid); + this->mainClass->mainWindowClass->windowIDList.emplace (this->mainClass->mainWindowClass->windowIDList.begin(),id); + cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(id); + if(cc!=NULL) { - this->mainClass->mainWindowClass->windowIDList.erase(this->mainClass->mainWindowClass->windowIDList.begin()+j); - this->mainClass->mainWindowClass->windowIDList.emplace (this->mainClass->mainWindowClass->windowIDList.begin(),id); + cc->isActive=true; + this->mainClass->mainWindowClass->LFSWM2_setProp(this->mainClass->rootWindow,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_ACTIVE_WINDOW")),XA_WINDOW,32,&cc->contentWindow,1); + XSetInputFocus(this->mainClass->display,cc->contentWindow,RevertToNone,CurrentTime); + this->mainClass->mainWindowClass->LFSWM2_refreshFrame(cc); } } + + for(int j=0;jmainClass->mainWindowClass->windowIDList.size();j++) + { + cc=this->mainClass->mainWindowClass->LFSWM2_getClientClass(this->mainClass->mainWindowClass->windowIDList.at(j)); + if((cc!=NULL) && (id!=cc->contentWindow)) + { + cc->isActive=false; + this->mainClass->mainWindowClass->LFSWM2_refreshFrame(cc); + } + if(this->mainClass->mainWindowClass->LFSWM2_getWindowType(this->mainClass->mainWindowClass->windowIDList.at(j))==DOCKWINDOW) + { + wl.emplace(wl.begin()+lastdock,this->mainClass->mainWindowClass->windowIDList.at(j)); + lastdock++; + continue; + } + if(this->mainClass->mainWindowClass->LFSWM2_hasState(this->mainClass->mainWindowClass->windowIDList.at(j),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE")))==true) + { + wl.emplace(wl.begin()+lastabove+lastdock,this->mainClass->mainWindowClass->windowIDList.at(j)); + lastabove++; + continue; + } + } + + for(int j=0;jmainClass->mainWindowClass->windowIDList.size();j++) + { + it=std::find(wl.begin(),wl.end(),this->mainClass->mainWindowClass->windowIDList.at(j)); + if(it != wl.end()) + continue; + wl.push_back(this->mainClass->mainWindowClass->windowIDList.at(j)); + } + +//transients + while(cntmainClass->mainWindowClass->LFSWM2_getProp(wl.at(cnt),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("WM_TRANSIENT_FOR")),XA_WINDOW,&n); + if(n>0) + { + for(int j=0;jmainClass->mainWindowClass->LFSWM2_hasState(wl.at(j),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW")))==false) + { + wlb.push_back(wl.at(j)); + } + } + + for(int j=0;jmainClass->mainWindowClass->LFSWM2_hasState(wl.at(j),this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW")))==true) + { + wlb.push_back(wl.at(j)); + } + } + + this->mainClass->mainWindowClass->windowIDList=wlb; } void LFSWM2_eventsClass::LFSWM2_moveToBottom(Window id) { +//fprintf(stderr,"LFSWM2_moveToBottom\n"); for(long unsigned j=0;jmainClass->mainWindowClass->windowIDList.size();j++) { if(this->mainClass->mainWindowClass->windowIDList.at(j)==id) diff --git a/LFSWM2/LFSWM2/src/eventsClass.h b/LFSWM2/LFSWM2/src/eventsClass.h index 714dd0b..ae6cb22 100644 --- a/LFSWM2/LFSWM2/src/eventsClass.h +++ b/LFSWM2/LFSWM2/src/eventsClass.h @@ -35,7 +35,7 @@ class LFSWM2_eventsClass void LFSWM2_mainEventLoop(void); void LFSWM2_sendConfigureEvent(Window wid,struct rectStruct r); void LFSWM2_doClientMsg(Window id,XClientMessageEvent *e); - void LFSWM2_moveToTop(Window id); + void LFSWM2_shuffle(Window id); void LFSWM2_moveToBottom(Window id); void LFSWM2_restack(void); diff --git a/LFSWM2/LFSWM2/src/lfswm2Class.h b/LFSWM2/LFSWM2/src/lfswm2Class.h index b61fe7a..c455d29 100644 --- a/LFSWM2/LFSWM2/src/lfswm2Class.h +++ b/LFSWM2/LFSWM2/src/lfswm2Class.h @@ -46,7 +46,6 @@ #include "config.h" -//#define __DEBUG__ #ifdef __DEBUG__ #define MOVEKEYS (Mod4Mask|ControlMask|ShiftMask) #else @@ -253,7 +252,6 @@ class LFSWM2_Class Cursor bottomLeftCursor; Cursor leftCursor; Cursor rootCursor; - int restackCnt=-1; LFSWM2_eventsClass *mainEventClass; LFSWM2_windowClass *mainWindowClass; diff --git a/LFSWM2/LFSWM2/src/main.cpp b/LFSWM2/LFSWM2/src/main.cpp index 8c39386..76ebe80 100644 --- a/LFSWM2/LFSWM2/src/main.cpp +++ b/LFSWM2/LFSWM2/src/main.cpp @@ -39,6 +39,7 @@ int main(int argc, char **argv) do { + fprintf(stderr,"<<<<<\n"); loop=false; for(auto& x:mainLFSWM2Class->mainWindowClass->clientList) { diff --git a/LFSWM2/LFSWM2/src/windowsClass.cpp b/LFSWM2/LFSWM2/src/windowsClass.cpp index f8b0b3f..d818351 100644 --- a/LFSWM2/LFSWM2/src/windowsClass.cpp +++ b/LFSWM2/LFSWM2/src/windowsClass.cpp @@ -85,7 +85,6 @@ void LFSWM2_windowClass::LFSWM2_destroyClient(Window id) { delete cc; } - this->mainClass->restackCnt++; } struct fontColour* LFSWM2_windowClass::LFSWM2_xftLoadColour(const char *name,const char *fallback) @@ -138,6 +137,7 @@ bool LFSWM2_windowClass::LFSWM2_createUnframedWindow(Window wid) // case FORCEABOVE: // this->LFSWM2_removeProp(wid,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_BELOW"))); // this->LFSWM2_addState(wid,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE"))); +// // break; // case FORCEBELOW: // this->LFSWM2_removeProp(wid,this->mainClass->atomshashed.at(LFSTK_UtilityClass::LFSTK_hashFromKey("_NET_WM_STATE_ABOVE"))); @@ -146,9 +146,11 @@ bool LFSWM2_windowClass::LFSWM2_createUnframedWindow(Window wid) // default: // break; // } -// this->LFSWM2_setClientList(wid,true); -// return(true); -// break; + this->LFSWM2_setClientList(wid,true); + this->mainClass->mainEventClass->LFSWM2_shuffle(wid); + this->mainClass->mainEventClass->LFSWM2_restack(); + return(true); + break; case NORMALWINDOW: case DIALOGWINDOW: case TOOLWINDOW: @@ -200,7 +202,6 @@ bool LFSWM2_windowClass::LFSWM2_createClient(Window id,hintsDataStruct premaphs) { if(premaphs.mHints->decorations==0) { - this->mainClass->restackCnt=1; noborder=true; } } @@ -500,14 +501,12 @@ bool LFSWM2_windowClass::LFSWM2_createClient(Window id,hintsDataStruct premaphs) } XAddToSaveSet(this->mainClass->display,id); - this->mainClass->restackCnt++; if(states!=NULL) XFree(states); this->LFSWM2_setControlRects(cc); cc->LFSWM2_setFrameExtents(); } - this->mainClass->restackCnt=0; return(true); } @@ -704,7 +703,6 @@ void LFSWM2_windowClass::LFSWM2_reloadWindowState(Window id) else cc->LFSWM2_hideWindow(false); } - this->mainClass->restackCnt++; XFree(states); return; @@ -863,6 +861,8 @@ void LFSWM2_windowClass::LFSWM2_setClientList(Window id,bool addwindow) } } } +//for(long unsigned j=0;jwindowIDList.size();j++) +// fprintf(stderr,"this->windowIDList.at(j)=%p\n",this->windowIDList.at(j)); } void LFSWM2_windowClass::LFSWM2_setWindowState(Window w,long state) diff --git a/LFSWM2/config.h.in b/LFSWM2/config.h.in index dd3b02c..cee8bdd 100644 --- a/LFSWM2/config.h.in +++ b/LFSWM2/config.h.in @@ -23,3 +23,6 @@ /* Version number of package */ #undef VERSION + +/* Enable debug code */ +#undef __DEBUG__ diff --git a/LFSWM2/configure.ac b/LFSWM2/configure.ac index bda7d4c..95e6672 100644 --- a/LFSWM2/configure.ac +++ b/LFSWM2/configure.ac @@ -56,6 +56,13 @@ PKG_CHECK_MODULES(LFSTK, $LFSTK_MODULES) AC_SUBST(LFSTK_LIBS) AC_SUBST(LFSTK_CFLAGS) +AC_MSG_CHECKING(whether to build debug code) +AC_ARG_ENABLE(debug,AS_HELP_STRING([--enable-debug],[Enable debug code]),[enable_debug=$enableval],[enable_debug="no"]) +AC_MSG_RESULT($enable_debug) +if test "$enable_debug" = "yes"; then + AC_DEFINE([__DEBUG__], [], [Enable debug code]) +fi + AC_SUBST(CXXFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS)