From 06b28ea0ab59a619605a95c0f8fce718d1fd275b Mon Sep 17 00:00:00 2001 From: Patrick Geneva Date: Sat, 12 Nov 2022 07:21:43 -0500 Subject: [PATCH] Add ability to pin Usercards to stay open even if it loses focus (#3884) Co-authored-by: pajlada Co-authored-by: Rasmus Karlsson Co-authored-by: James Upjohn --- CHANGELOG.md | 1 + resources/buttons/pinDisabledDark.png | Bin 0 -> 996 bytes resources/buttons/pinDisabledDark.svg | 23 +++++++++++++ resources/buttons/pinDisabledLight.png | Bin 0 -> 989 bytes resources/buttons/pinDisabledLight.svg | 23 +++++++++++++ resources/buttons/pinEnabled.png | Bin 0 -> 1233 bytes resources/buttons/pinEnabled.svg | 23 +++++++++++++ resources/resources_autogenerated.qrc | 6 ++++ src/autogenerated/ResourcesAutogen.cpp | 3 ++ src/autogenerated/ResourcesAutogen.hpp | 3 ++ src/singletons/Theme.cpp | 2 ++ src/singletons/Theme.hpp | 1 + src/widgets/dialogs/UserInfoPopup.cpp | 38 ++++++++++++++++++++++ src/widgets/dialogs/UserInfoPopup.hpp | 10 ++++++ src/widgets/settingspages/GeneralPage.cpp | 2 +- 15 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 resources/buttons/pinDisabledDark.png create mode 100644 resources/buttons/pinDisabledDark.svg create mode 100644 resources/buttons/pinDisabledLight.png create mode 100644 resources/buttons/pinDisabledLight.svg create mode 100644 resources/buttons/pinEnabled.png create mode 100644 resources/buttons/pinEnabled.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index e08c055f..5f7b4f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Major: Added multi-channel searching to search dialog via keyboard shortcut. (Ctrl+Shift+F by default) (#3694, #3875) - Major: Added support for emotes and badges from [7TV](https://7tv.app). [Wiki Page](https://wiki.chatterino.com/Third_party_services/#7tv) (#4002, #4062) - Major: Added support for Right-to-Left Languages (#3958, #4139) +- Minor: Added ability to pin Usercards to stay open even if it loses focus. Only available if "Automatically close usercard when it loses focus" is enabled. (#3884) - Minor: Allow hiding moderation actions in streamer mode. (#3926) - Minor: Added highlights for `Elevated Messages`. (#4016) - Minor: Removed total views from the usercard, as Twitch no longer updates the number. (#3792) diff --git a/resources/buttons/pinDisabledDark.png b/resources/buttons/pinDisabledDark.png new file mode 100644 index 0000000000000000000000000000000000000000..f762f0adeb83f13454555ac0139d6c9cf7fc98c3 GIT binary patch literal 996 zcmVAs##`DENXNL_{7h z3Pr7cf(k136ZiqNlGLJj*qyrB=4E$wc4m_PA%|o(v-$nznPg_jgorRIQPsV`d*EpL z(kd_`B0p^VY`FMfK9YeylzI68@KIIw+4egU0#tPhSSEqrlWA%K`>7xydI2f?Ti`I= z@FtZcL@l5Iyot4hXa$sjH?fisr2q?flhP8R6Ho!(q?ClH1UP^xcm~~ z%RZkD@Yza03jYW=18f#}OEZ1Mk`C|%m@6$nRVRRZz&y!_Mpe=U(gD5#b0V^CQvuV! z0&$IK(U_5+6_ItYTL}HKd|&8ng9i%`5%~mMAz4g}O1jEE+h8@4B61(N#%M?|@UtTF zGv8=k$|E9SAUsr@%aKbM3J(sx%p#Rg2p$}Ln@1+0Fg!T?Ig3O>DR^-FdmdOqX?Un% zK@&)V6+G0mqVp`l8Xjs~(t46m2_9-*)7LDaGCX+L)YK%w2|Re()j5{n3?3W{P}PR2 z9`DtbO1J_1u5gPDk}d6w3wUrSAU!5~0xYZQ^wW);AE5@x<7Lb8I#s5>^CUA3rgcz31Kt%z4;7vwCg0+CmoEQ3^_cwvt zs(PYVV+<0k1mx!Ypkwhi@C0u4tSGL5(*2b z6W%0*ghB#*z?%$NF;1rUaF(G0e8QWgi>0e{S3(@7D%iGp6v6j=YFG z1TNDpVJzo-K3k=qN?0V>g_*J+yE&iFWUJNMdeUmOR@c_nzLSjp`Ef1#Z2ke)&&x%2 S!u^^60000 + + + diff --git a/resources/buttons/pinDisabledLight.png b/resources/buttons/pinDisabledLight.png new file mode 100644 index 0000000000000000000000000000000000000000..ed381899189bbe3d1eb826bc1fd917238429e648 GIT binary patch literal 989 zcmV<310wv1P)tSc=W}9qwXJ=<7$scmbZf5iQ%`@3&mNeS!Hlq@y)NbHCa74fL z378d;AGTvQU3@VgNx>gXy}cj!sFd1cJMKsbP)bb$Ds z-lUR*s09>&H?fuwt$-5nCRP%n6kq{wQd&ZE0xH0pl#&pY00;0Ug(XBIz#+UzAqi0k zr~%$&sD$7GYJ@k*l@L^b2Y8c#5`qcv2yfC?LJ$D~;7ztkX!za^2ZT>&9rz9$-RbkH zdP}=Xva6f&dF@PEz+T{kwlJY`O*TEQVrlPus|}SQI&Lobb)WcyojvXRKN_d zNL({oG-l@KL}U%@8lhj7p9`IB@L&NVBAreojPw zW)E7I@`y;tg@=l3IdTa@;laU=S)>vQ!Goh;^T;F=h6jhYvq&VAf(OU<^S}~H!$S=X zO&|$Y@K94n=UIX^Jk;3IdXi8H9%}CCYnD(M9z1MnYLegt9z5;p97}Kp4~_*WrJ72q zWBrb43D<$&6)v$(vZbAM0S^uZ=*MJ_ffc3HwSMP_$Q@uA`%2gVZfCc&RpLZ|hJON_ z1RB6irPOl2bG3xf9phFi3rN8W|DXD{fEzgyVrZLziUJ0}n~a16YXPY>-)8Xh{uXdc zDRsQx!5Ac13COJZyvO1l;3@EK&lol|g?9=H0FM&l7`I|RpNC~9`)B$f2N~raz4@o9#MSe7sd%55&^5^H$+|F6=PKP=`=;;KCndp|NC`-*NiDV=$RLh z2f#&oC5+{o&t|LiwS*;-U6?8Rv0L-m^sIfo94?V;JkE}5*{Aalm-x!!G-zjo00000 LNkvXXu0mjfx$3Tz literal 0 HcmV?d00001 diff --git a/resources/buttons/pinDisabledLight.svg b/resources/buttons/pinDisabledLight.svg new file mode 100644 index 00000000..eb086e43 --- /dev/null +++ b/resources/buttons/pinDisabledLight.svg @@ -0,0 +1,23 @@ + + + + diff --git a/resources/buttons/pinEnabled.png b/resources/buttons/pinEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..5a113da1c0aff52c70b27b291cfd4e42d0029f23 GIT binary patch literal 1233 zcmV;?1TOoDP)#YeV3(z z5QGHMMHO9$h!aML4DztN@%B6)U%xRMZQ0j=Rx z^d&@AK>P42dJ-Zjz&X5%a|w|XpbxL&OhTjtxQAD1UqWOAcn7c2o`gsU@E%^JwS>?G z_y@1jTtcV<{D)U*EFm-j!NIH4mk^48;NexyN(fv)cJihCtz&`RsmJ#`B#82;VVf9_-Y^mPB$|cLfJQt_7cdLrt$C2=KHq6zE)%N z!bOxjIZ=4?Dmg&@)Dn;}O=EZG(YGYtp|IF$ybXyHi0jnV*#1|%B>>sY|<2QybmT&G0pjkcTeo6lip@n|p$XzT-G zBF7@(pCL4&%6{gP;>E1`(J{!4rx&*ku|Efy_xAaGO}XrQi?h}6faXqc>3HBS?b1?* zNH|&Zg_*_w2ajqmYL{|{NN5TVxI7C)TtZ8Dz=Ok3L?yHZ4|sGMjF^PB;Q6C zoAiP=egxqc~!w7T_nmN*EH_5)cHuO0yj!!5C;;I`cM4O94T`tE3N8tA>Xq>Ngt+GNnABboEsUN{MhUH0f6=X zXDABrLFG&ZoF{moM!(~+1Asx{12owW5Xb@ib!c>|Ys$Vlv45_ZTXVhEe*(TmAXanT zqHtrlaOu5;{r#?k2TtC6Iy-QWus;=``i~yFa?RJKQu^uaz+15hAO%DxNNd~IUm v + + + diff --git a/resources/resources_autogenerated.qrc b/resources/resources_autogenerated.qrc index c7a02e62..4d84f4fd 100644 --- a/resources/resources_autogenerated.qrc +++ b/resources/resources_autogenerated.qrc @@ -38,6 +38,12 @@ buttons/modModeDisabled2.png buttons/modModeEnabled.png buttons/modModeEnabled2.png + buttons/pinDisabledDark.png + buttons/pinDisabledDark.svg + buttons/pinDisabledLight.png + buttons/pinDisabledLight.svg + buttons/pinEnabled.png + buttons/pinEnabled.svg buttons/replyDark.png buttons/replyDark.svg buttons/replyThreadDark.png diff --git a/src/autogenerated/ResourcesAutogen.cpp b/src/autogenerated/ResourcesAutogen.cpp index 671376e6..d5a718af 100644 --- a/src/autogenerated/ResourcesAutogen.cpp +++ b/src/autogenerated/ResourcesAutogen.cpp @@ -34,6 +34,9 @@ Resources2::Resources2() this->buttons.modModeDisabled2 = QPixmap(":/buttons/modModeDisabled2.png"); this->buttons.modModeEnabled = QPixmap(":/buttons/modModeEnabled.png"); this->buttons.modModeEnabled2 = QPixmap(":/buttons/modModeEnabled2.png"); + this->buttons.pinDisabledDark = QPixmap(":/buttons/pinDisabledDark.png"); + this->buttons.pinDisabledLight = QPixmap(":/buttons/pinDisabledLight.png"); + this->buttons.pinEnabled = QPixmap(":/buttons/pinEnabled.png"); this->buttons.replyDark = QPixmap(":/buttons/replyDark.png"); this->buttons.replyThreadDark = QPixmap(":/buttons/replyThreadDark.png"); this->buttons.search = QPixmap(":/buttons/search.png"); diff --git a/src/autogenerated/ResourcesAutogen.hpp b/src/autogenerated/ResourcesAutogen.hpp index 218d5953..200a3fbd 100644 --- a/src/autogenerated/ResourcesAutogen.hpp +++ b/src/autogenerated/ResourcesAutogen.hpp @@ -41,6 +41,9 @@ public: QPixmap modModeDisabled2; QPixmap modModeEnabled; QPixmap modModeEnabled2; + QPixmap pinDisabledDark; + QPixmap pinDisabledLight; + QPixmap pinEnabled; QPixmap replyDark; QPixmap replyThreadDark; QPixmap search; diff --git a/src/singletons/Theme.cpp b/src/singletons/Theme.cpp index 635f31b0..e13df1cd 100644 --- a/src/singletons/Theme.cpp +++ b/src/singletons/Theme.cpp @@ -278,10 +278,12 @@ void Theme::actuallyUpdate(double hue, double multiplier) if (this->isLightTheme()) { this->buttons.copy = getResources().buttons.copyDark; + this->buttons.pin = getResources().buttons.pinDisabledDark; } else { this->buttons.copy = getResources().buttons.copyLight; + this->buttons.pin = getResources().buttons.pinDisabledLight; } } diff --git a/src/singletons/Theme.hpp b/src/singletons/Theme.hpp index ea49457e..bc8b4a10 100644 --- a/src/singletons/Theme.hpp +++ b/src/singletons/Theme.hpp @@ -129,6 +129,7 @@ public: struct { QPixmap copy; + QPixmap pin; } buttons; void normalizeColor(QColor &color); diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index 478a0eea..2dd28e29 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -134,11 +134,13 @@ UserInfoPopup::UserInfoPopup(bool closeAutomatically, QWidget *parent, Split *split) : DraggablePopup(closeAutomatically, parent) , split_(split) + , closeAutomatically_(closeAutomatically) { assert(split != nullptr && "split being nullptr causes lots of bugs down the road"); this->setWindowTitle("Usercard"); this->setStayInScreenRect(true); + this->updateFocusLoss(); HotkeyController::HotkeyMap actions{ {"delete", @@ -349,6 +351,22 @@ UserInfoPopup::UserInfoPopup(bool closeAutomatically, QWidget *parent, this->ui_.localizedNameLabel->setVisible(false); this->ui_.localizedNameCopyButton->setVisible(false); + + // button to pin the window (only if we close automatically) + if (this->closeAutomatically_) + { + this->ui_.pinButton = box.emplace