From afb5a1e5bf81a7af4adafcd0b5bf6205805bc50b Mon Sep 17 00:00:00 2001 From: fourtf Date: Fri, 25 May 2018 16:11:03 +0200 Subject: [PATCH] Fixes #309 alt tabbing doesn't hide resize handles --- resources/images/split/splitdown.png | Bin 793 -> 361 bytes resources/images/split/splitleft.png | Bin 812 -> 437 bytes resources/images/split/splitmove.png | Bin 1241 -> 772 bytes resources/images/split/splitright.png | Bin 811 -> 494 bytes resources/images/split/splitup.png | Bin 793 -> 361 bytes src/widgets/helper/splitoverlay.cpp | 29 ++++++++++++++++++-------- src/widgets/splitcontainer.cpp | 14 +++++++++++++ src/widgets/splitcontainer.hpp | 1 + src/widgets/window.cpp | 4 ++++ 9 files changed, 39 insertions(+), 9 deletions(-) diff --git a/resources/images/split/splitdown.png b/resources/images/split/splitdown.png index 3891ca3987cf9dcf52055670823088c1dd67bff8..042f1f4c2e51437cb34afdcf120219e02706162a 100644 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Zif($kIEG|6znx;pb;Lk``S1T<|6a#Tc0C%G{6>0$s04@h1qCL_$Hvb? zx45U@oBrN-&dCH`S)%cS?2P_%CG+pk{Px19x@4KH)#UwKY~Od+mAM;5I0NzF$x~*0 zN=iD_-KnXswrtM~FsIrprpa|nHv84um<=6eZx`(9=N7xTPB!Fw;X$QaTbp0mss3<9 sRu9$uUo1FfLt9_U2h%O?(a&laHU}T5oWGXo0??BTp00i_>zopr0DxbMkpKVy literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJq(MA#*AN1Jg85 z7srr_xVKXsv!nw=j?{dPTlC#`w*<>iO&-0^Z&_3>9E<|3hTet0t7f|`urQtx?HM)BzNy;STzMKkFlkL4eg^fKTx=Iyj=B-QGGY>Le zn-&K&YQrGaa-M&|`N}UoK;PV!vz;s{^I)6%d7uw=yuD~Vb0PnNV35#JHRB(`C75Ah zaUd5IOy~Iv>ekQ45ek3qFxI_@1qZ+#Z~&bqmGj{*o5lU;-|Nk%Px}rI=t_NXs3JJ_ z54S#D2M+dk;AkP4^J6D-O*oF2BQk)%Dd>k$!yYkM@>*L{^M^4_>i(Oi9rl-j$(X^@ L)z4*}Q$iB}{<&M) diff --git a/resources/images/split/splitleft.png b/resources/images/split/splitleft.png index 8d1cb0e199051fc8a141e4358dd9f4b83ce8edc5..210b74b48f864b4e19caf703a639540732f0e9a8 100644 GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-ZrmA|nIEG|6zwI~VVm9PqdH=uk-)ooF7B2l`kIH7}Bq(rr7k{>yzjex= zI{)Z65N;|33%YiN)WnXRv-+@s}^H(I#tubEHE5t@jCH1cmJayASWR zM55Aq7^2NepCA;&lwGYbvnY}D52;y)1 z5`FOPpIkIWKU{SAzW>tMvDaADmJh{TVjY9-^#A!Ay8a0se8)TW?F5g0-m?6PHD6hG X1RSW$J-JvN7^)1Ou6{1-oD!M!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJq(MA#*AN1Jg=R z7srr_xVKXsvy=lxj?{eKdE}1y-u%a@PpP^u x**5HpK}tu>jC`lhJalHT?1rYe=*sHf>@I2d-_)ibodrzU44$rjF6*2UngBT^H=zIk diff --git a/resources/images/split/splitmove.png b/resources/images/split/splitmove.png index 82bf5382bfb0030eea42e2b9e432e87db63d1252..e4ce85ceadb440dd2d7ee301a2a29f60e14e7a98 100644 GIT binary patch delta 724 zcmcb~*}|sR8Q|y6%O%Cdz`(%k>ERLtq-{W$gAGVp{kd5Lq!^2X+?^QKos)SvQBj)f zFarbMVaDV6D^e!9sn;`=c)B=-WH`T_aWPlMkcV~sk|_@+1vPaS$ZH;4n(N_gW3cOH z?8i0g7TMA>=0^rTI?Vj;@b=u>`$RR?^PJLd{&Z?V%)z(0zkTC)y-dZv9lg;L|0R|a z$o#UG^`GqdBiOvFHx~|`Q{PVK#Vo{^z(4_PvMz`C%OMr@6b>nl* zCv5F065Cd>^{xZZOjFC4Z`uwkpQ(Rv3JBYH^zZSPbN2~OJy5s)qtpF)j88T8c|@~UpQR;>5SminKfnYK?PG9HfN=Ul0CKN5B~=+!AeO!K$kky`NPWB0ArFBj(86uYF>tIfZgsFBf7#J_)stpopW z`Ey@E4(SWJ!0=S^UqJPT`Kq60Dr*`4%z3;ZdG6Nkv7;vZXI zNMB^?VVfsp;;?d=P=%Ss)juq89H$~97PQBIa%`*TU$p=jQt#~3L|*h{+6UPJ1MqZs z^t7$77tHCbXI-&PC;Pgir8KwUtxa2E*`MaaI^FnxnCjybuV_Pz~N^D!*?!P2)@8sQ0vALXBB r1;j~C31@pc)v+=)Aa45GZ{mIrPgte%tGR9mrcee?S3j3^P6!lvI6;>1s;*b z3=Dh+L6~vJ#O${~LCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33JtM=93Yk-Z28DUL zIEGZjy}e`DC*mp4`p}a3(2)mh9ug519Ngl3TgCk5Gce0{8$VEDInKbmfBU3gpMB5! z?0>l`r>o=I5%ty!c1g46O`pnhSTAO3keBA&eK}pTY`>jyTX8daeNGFE>ECf$Axk8w z-&Rqtc|~A{?YEX4Jd4~EzugdiWYi(mdL!AtqxjZadH>Ik&u{k(Tr5!ihO^MF_~-rQ zH~l}WzE%u?itPTYed_(^uJ@j;P(3?;e);ZM$qg~mV)}0X`uQc>8z7ROE&c%|%VCoI z|AD+x7_a^J{C{>U^B7IJHXffR@VwyH%lDI?i9zkzlL|D)1ZK`--TGg@m+WA@qH#p7 z+DRt+?&bUHM|BrKTp#foXwE~p(jMEtwTJSdrXH6BYHYd31o3#E@%@G}j_uFinzXxa zueaM4Zk`}qytAEs!Yl0ueNY$Qd>enys$qJKzZS%@IsUQ^8>|`uuldYXl%R?78#t5&!di(XCe*@6_G3b7pt!b$YW={mAmUdi%~V zm2;RM3KO~a>Cx|)UyNTOOQ2e7uK#-Ud(X^ewG*EERnM*exNG^dd(F^bnO*i<{Lg{o z_bxcky>^^iN(d4J`?lS-f68wCO-=4s&Fp8KzJH;XU4O;!Zua`iIW-Kve?>~F>-;}w z&U$X50&!tYc&$)ga`$^k9N(y(v7g5_vc?_iOkMj9Z@Y%0N6TT}dD*<<2y;X%Ou=he zpn{)gcg)}Otl*<8B)0o!+b{UP?5D-q>`R|>OBv4o*>77nSt)vSiv{MBj0XW?eY(c8>l{Xv1&7984Rl}J}rv%CES-tu{;yHnfhGl0bq NgQu&X%Q~loCIFysR_y=) diff --git a/resources/images/split/splitright.png b/resources/images/split/splitright.png index 173537331602ebd35222e3c96ab9c596e2246bdc..88963fb353acdb959ce1c41dbf403576f805972a 100644 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Zrp9@?IEG|6zwJNRb<{w_>G%KFKkuJQDfAYbxG2Q@aWiwjOYy7Hzjw+f z?Z3aZ_*8_YoYc+ZdVZ4HpVR+yu%DRxt$YLb6VKn)H&{O{`78T|sq)f4zOqJ}%zF0S z4)eC`Z;n;)zjgnh-URix?-RsPlyCTV^0e)?6-_p4>OU3r>#kDZe?5QCo#bw<6Ni7P z>wmwoi0c!ElJmEBp89v~(N5>a^^Wtl7f=1W_GocCQ+%^c{&TJ0(cRDaSog72-a8li zZM)ccS*{vhOcRK(1eb#e`0xMz=HNH-8!b}T$nf{RNfuw;)BpP)tKyCWm2EYj9s{F; N!PC{xWt~$(69A=w<^2Ev literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJq(MA#*AN1Jepm z7srr_xVKXsvyuY^m}@`BD19&8Be1A*qtAoY@lLB8x=*%0UzTOK-CCxVphNqsJ6%Tw`a`Oqp{Qmm?&;D+;mIn#<@-DxW!?9uG!;o3L zjAmwYyf*)gZ20;1NZj4euih^gdp8lN=GY-ypqdL2JKTY4q`1F(Y*utgekhk|#*(3P zM;T~AZ)^3En*s|q7WA7)Gnvp$(;3}8Alr+%-veEA;Lagypeqfwf9L}`f=H>K@{IfH z_gB5I%dY_ihW592-;bFC{k00#LT=By}Z;C1rt33 zJtM=93Yk-Zif($kIEG|6znx;pb;Lk``S1T<|6a#Tc0C%G{6>0$s04@h1qCL_$Hvb? zx45U@oBrN-&dCH`Ss?ZgN;=iusj08FY|o4tpOV0w_nL*AVi(uRhI}tPsB~*<^D8^O z2$$Vu0e6qHc4u7YTlIU&194R(^-#_KqJ1VFl(L$1@cIS0xi9VZ8^66c^VJqj3 t%<6mMf8X?_Y-l4Me=yzR9{sF_L2c`SO74;yaX?Qpc)I$ztaD0e0ssVxl#~Df literal 793 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJq(MA#*AN1Jg85 z7srr_xVKXsv!nw=j?{dPTlC#`w*<>iO&-0^Z&_3>9E<|3hTet0t7f|`urQtx?HM)BzNy;STzMOjILoxf0h2^S1<8Bo}q)6o){x1EX zCjagJdofY>yg^nx-J8P39ubY;{BOBFZ8zA$o!T=GGF~H@^YA&}hggK0A24KluLs*v zr3&<2gWdCs#z1rPs=xRE?Y}K&J6TfZ!8Z5vDQ$KQe$YUA;C~^PtN=o>3>Zq6AYOsetFocusPolicy(Qt::NoFocus); down->setFocusPolicy(Qt::NoFocus); - move->setCursor(Qt::PointingHandCursor); + move->setCursor(Qt::SizeAllCursor); left->setCursor(Qt::PointingHandCursor); right->setCursor(Qt::PointingHandCursor); up->setCursor(Qt::PointingHandCursor); down->setCursor(Qt::PointingHandCursor); this->managedConnect(this->scaleChanged, [=](float _scale) { - int a = _scale * 40; + int a = int(_scale * 30); QSize size(a, a); move->setIconSize(size); @@ -83,9 +83,11 @@ SplitOverlay::SplitOverlay(Split *parent) }); this->setMouseTracking(true); + + this->setCursor(Qt::ArrowCursor); } -void SplitOverlay::paintEvent(QPaintEvent *event) +void SplitOverlay::paintEvent(QPaintEvent *) { QPainter painter(this); painter.fillRect(this->rect(), QColor(0, 0, 0, 150)); @@ -95,16 +97,22 @@ void SplitOverlay::paintEvent(QPaintEvent *event) case SplitLeft: { rect = QRect(0, 0, this->width() / 2, this->height()); } break; + case SplitRight: { rect = QRect(this->width() / 2, 0, this->width() / 2, this->height()); } break; + case SplitUp: { rect = QRect(0, 0, this->width(), this->height() / 2); } break; + case SplitDown: { rect = QRect(0, this->height() / 2, this->width(), this->height() / 2); } break; + + default:; } + if (!rect.isNull()) { painter.setPen(getApp()->themes->splits.dropPreviewBorder); painter.setBrush(getApp()->themes->splits.dropPreview); @@ -174,19 +182,22 @@ bool SplitOverlay::ButtonEventFilter::eventFilter(QObject *watched, QEvent *even this->parent->split->drag(); } return true; - } else { + } + } break; + case QEvent::MouseButtonRelease: { + if (this->hoveredElement != HoveredElement::SplitMove) { SplitContainer *container = this->parent->split->getContainer(); if (container != nullptr) { auto *_split = new Split(container); - container->insertSplit( - _split, - (SplitContainer::Direction)(this->hoveredElement + SplitContainer::Left - - SplitLeft), - this->parent->split); + auto dir = SplitContainer::Direction(this->hoveredElement + + SplitContainer::Left - SplitLeft); + container->insertSplit(_split, dir, this->parent->split); + this->parent->hide(); } } } break; + default:; } return QObject::eventFilter(watched, event); } diff --git a/src/widgets/splitcontainer.cpp b/src/widgets/splitcontainer.cpp index fbc7687f..386eecc4 100644 --- a/src/widgets/splitcontainer.cpp +++ b/src/widgets/splitcontainer.cpp @@ -82,6 +82,15 @@ void SplitContainer::setTab(NotebookTab *_tab) this->refreshTabTitle(); } +void SplitContainer::hideResizeHandles() +{ + this->overlay.hide(); + + for (std::unique_ptr &handle : this->resizeHandles) { + handle->hide(); + } +} + void SplitContainer::appendNewSplit(bool openChannelNameDialog) { util::assertInGuiThread(); @@ -155,6 +164,7 @@ void SplitContainer::addSplit(Split *split) this->tab->setHighlightState(state); } }); + split->focused.connect([this, split] { this->setSelected(split); }); this->layout(); @@ -197,6 +207,10 @@ SplitContainer::Position SplitContainer::releaseSplit(Split *split) this->refreshTabTitle(); + // fourtf: really bad + split->getChannelView().tabHighlightRequested.disconnectAll(); + split->focused.disconnectAll(); + split->getChannelView().tabHighlightRequested.disconnectAll(); return position; diff --git a/src/widgets/splitcontainer.hpp b/src/widgets/splitcontainer.hpp index 00459430..eb7e7a00 100644 --- a/src/widgets/splitcontainer.hpp +++ b/src/widgets/splitcontainer.hpp @@ -187,6 +187,7 @@ public: Node *getBaseNode(); void setTab(NotebookTab *tab); + void hideResizeHandles(); static bool isDraggingSplit; static Split *draggingSplit; diff --git a/src/widgets/window.cpp b/src/widgets/window.cpp index 60396d5d..331e143f 100644 --- a/src/widgets/window.cpp +++ b/src/widgets/window.cpp @@ -164,6 +164,10 @@ bool Window::event(QEvent *event) split->updateLastReadMessage(); } } + + if (SplitContainer *container = dynamic_cast(page)) { + container->hideResizeHandles(); + } } break; default:;