From 3b602bc4fc8ef4119b82b28bcaff810628239509 Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Sat, 26 Sep 2026 09:30:45 +0200 Subject: [PATCH] Related tdf#173606 - Show an icon in combobox depending on msg type Following the prototype of gtk3 Change-Id: Id25c0a61c3c38427e86525f58c6bb40b9cd257ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211476 Tested-by: Jenkins Reviewed-by: Heiko Tietze --- icon-themes/colibre/vcl/res/error.png | Bin 0 -> 457 bytes icon-themes/colibre/vcl/res/information.png | Bin 0 -> 596 bytes icon-themes/colibre/vcl/res/warning.png | Bin 0 -> 540 bytes icon-themes/colibre_dark/vcl/res/error.png | Bin 0 -> 583 bytes icon-themes/colibre_dark/vcl/res/information.png | Bin 0 -> 643 bytes icon-themes/colibre_dark/vcl/res/warning.png | Bin 0 -> 546 bytes icon-themes/colibre_dark_svg/vcl/res/error.svg | 1 + .../colibre_dark_svg/vcl/res/information.svg | 1 + icon-themes/colibre_dark_svg/vcl/res/warning.svg | 1 + icon-themes/colibre_svg/vcl/res/error.svg | 1 + icon-themes/colibre_svg/vcl/res/information.svg | 1 + icon-themes/colibre_svg/vcl/res/warning.svg | 1 + include/vcl/toolkit/edit.hxx | 3 +++ vcl/inc/bitmaps.hlst | 4 ++++ vcl/source/app/salvtables.cxx | 12 +++++++----- vcl/source/control/edit.cxx | 13 ++++++++++++- 16 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 icon-themes/colibre/vcl/res/error.png create mode 100644 icon-themes/colibre/vcl/res/information.png create mode 100644 icon-themes/colibre/vcl/res/warning.png create mode 100644 icon-themes/colibre_dark/vcl/res/error.png create mode 100644 icon-themes/colibre_dark/vcl/res/information.png create mode 100644 icon-themes/colibre_dark/vcl/res/warning.png create mode 100644 icon-themes/colibre_dark_svg/vcl/res/error.svg create mode 100644 icon-themes/colibre_dark_svg/vcl/res/information.svg create mode 100644 icon-themes/colibre_dark_svg/vcl/res/warning.svg create mode 100644 icon-themes/colibre_svg/vcl/res/error.svg create mode 100644 icon-themes/colibre_svg/vcl/res/information.svg create mode 100644 icon-themes/colibre_svg/vcl/res/warning.svg diff --git a/icon-themes/colibre/vcl/res/error.png b/icon-themes/colibre/vcl/res/error.png new file mode 100644 index 0000000000000000000000000000000000000000..23d975167e0522a1dad14093bd2b91a1ac4e5263 GIT binary patch literal 457 zcmV;)0XF`LP)G#+%8U%zk}JZ71qP)VSR+phqdr4%>Apk4ZW}t4vmpV zJqN4E$K3*)4Zp+rx;_@}HpH9Zc%3hVLAcZkJPzv(;ab=U55r0&EH(Jo@U#_p9iDgW z-mfBq@SuY|3%w-66b567FjXTAraRdF${9L%6gHb3Zq%KZ!@cU{PJ^$7C+!hV)l0lw z*GIzjhHxbut@CrW_d++uH=!S9{uAR=_!d?t{Rh((?1!rp$ctgK;6@>N8^#X)c>2vv|cI0%B!O_RLq5Pf~GeZAxTpL00({O^^Su~#Yk%muKg zm%4jmb_&QZ4IyU+*(Am=V8B_eGqtq8Hn6l>ln~;z$UBR?zjr_;$ zUS$%qRh;&S)fTsUBPewXRF9GY2y_Z*INGxM+$-P%UGGLD1G|8+7SCgO3>d)dSHd)F zNEZRTfAC{?!A1;X9K<1m(FeSZy}8{Dy6(}40~|U8G5-4OIw&zr{-^`EQGphYjwgbX z%F{`pwJji;KsJi$ZK3re`c*8(_Ju%ML?hzBd5AHsba^xcZGFxGX&}Spl4IW#y z@C`r{OCtoj2Fd{o*2q5yIlGSOeCZ61<^dlFFoZBr6}NNOstd92-X#z|oGb2QzdK0V iGg5uut(NC1UbLP}6KRnE0000l&~?~gt}IEbx#*%` zM0DEx0%M94T1XI!_ycT&K+voag(PI=*aX>3#v2~^n)99aIqz3|vd#Y}|Er7JMRk(n zhK=Gp^R-2P$jT{egRo17-NJj|#GdteC+6J4Wq(U&gUtFChJj866ctbe3QajCvZ4n7 z+gNRFV-+(Glq>x@`$vGF25jYHs`U+`FLj=8?=S{@jbm!R1%xH_VXjDw z+*|f1K?mm8qgSpQ#(|!&q-&Xg$pJN4JOJK(Z0BjZslA&gz>3A(P`{2G0Bmkh0nP+s zaACo58c?k|QNSQj*i9JP2e?^O!7u_mn_lvphPm&12Y{KEerplg+zESi`X?Y4FbyQ+ z8EOu?{CT3rFtueeSMs3C#y}OHEH&lVEVV^GN1>Jy~ zMU;NGU^MLkG>d54+)vC!g*}{4%nGn3v7R-Mmd$bCq~U^WQ!eRJAg&{h{v}}3BAQ$B e>&(yeFZu!Lg_$l+MQi2&0000*v7d#%T@*_;3x@S9z-T*g&Wkl`+cL~GSxq&_bNAiFa5ko#y#{dBo81LJN2c&tx z22kieCrQ-lyoBlkuuPI%%K-`_z&=Js7Q3>Z zQ%;g`oO^)CJR%#w2eN{bz;RSx;(5384rS-_=YjB2!d9B>2Sb5#9tiY VuvFVRZvy}T002ovPDHLkV1n})^LhXP literal 0 HcmV?d00001 diff --git a/icon-themes/colibre_dark/vcl/res/information.png b/icon-themes/colibre_dark/vcl/res/information.png new file mode 100644 index 0000000000000000000000000000000000000000..90d925859e86205c8ea19bf9d5adadf61f7c06ab GIT binary patch literal 643 zcmV-}0(||6P)t?pP4h~h^n&Pn1d9+ z1&Fs}q}5=dSRU}y%m9-JgMb3x1YS9>_GqlP^GA|5$%QS2S3JxYF|te1Yo?>t-%*VR z6mBTGPh#(@Emg8j5mgmcWif~@+Mv8m+f6Lk$$Wq$QtG0WRC|M83(XI`54HAdhxS{!O7j}f++XI=<9qj zIs~w`?mtD$sKboxT=ky=*p~~`cefcdj0&V(D(Y7st^DzW d@gbtExPMpg5eIgzHaY+R002ovPDHLkV1ku#7!Uve literal 0 HcmV?d00001 diff --git a/icon-themes/colibre_dark/vcl/res/warning.png b/icon-themes/colibre_dark/vcl/res/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..5be7ab2d99bea30a0c7ba609598d76b33a9df98e GIT binary patch literal 546 zcmV+-0^R+IP)J4z<*Uo3HeLqUq(ASO9s1-G2(j!2(6#Asl2joIBHMu

3 zoWvNn7dNI>A{uMH3&8C~RK1IITrNN9HPJk<2rRX1Xs-RhK{*_&zr@P3QvqKR?$}PZ kA&yLuJ^7cdKhrLu@k6ll>h($07*qoM6N<$f?VtE_W%F@ literal 0 HcmV?d00001 diff --git a/icon-themes/colibre_dark_svg/vcl/res/error.svg b/icon-themes/colibre_dark_svg/vcl/res/error.svg new file mode 100644 index 000000000000..f41640278066 --- /dev/null +++ b/icon-themes/colibre_dark_svg/vcl/res/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon-themes/colibre_dark_svg/vcl/res/information.svg b/icon-themes/colibre_dark_svg/vcl/res/information.svg new file mode 100644 index 000000000000..483b97bd90ac --- /dev/null +++ b/icon-themes/colibre_dark_svg/vcl/res/information.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon-themes/colibre_dark_svg/vcl/res/warning.svg b/icon-themes/colibre_dark_svg/vcl/res/warning.svg new file mode 100644 index 000000000000..d0c8a5f2a9ba --- /dev/null +++ b/icon-themes/colibre_dark_svg/vcl/res/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon-themes/colibre_svg/vcl/res/error.svg b/icon-themes/colibre_svg/vcl/res/error.svg new file mode 100644 index 000000000000..f5ed3982b566 --- /dev/null +++ b/icon-themes/colibre_svg/vcl/res/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon-themes/colibre_svg/vcl/res/information.svg b/icon-themes/colibre_svg/vcl/res/information.svg new file mode 100644 index 000000000000..a069979cf797 --- /dev/null +++ b/icon-themes/colibre_svg/vcl/res/information.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icon-themes/colibre_svg/vcl/res/warning.svg b/icon-themes/colibre_svg/vcl/res/warning.svg new file mode 100644 index 000000000000..3ff0db263af9 --- /dev/null +++ b/icon-themes/colibre_svg/vcl/res/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/include/vcl/toolkit/edit.hxx b/include/vcl/toolkit/edit.hxx index c731c0b4bbe7..49610dcddd0b 100644 --- a/include/vcl/toolkit/edit.hxx +++ b/include/vcl/toolkit/edit.hxx @@ -82,6 +82,7 @@ private: Link maAutocompleteHdl; Link maActivateHdl; std::unique_ptr mpUIBuilder; + sal_uInt8 maEntryMessageType; css::uno::Reference mxBreakIterator; css::uno::Reference mxISC; @@ -246,6 +247,8 @@ public: bool IsPassword() const { return mbPassword; } bool IsActivePopup() const { return mbActivePopup; } + + void SetEntryMessageType(sal_uInt8 aEntryMessageType) { maEntryMessageType = aEntryMessageType; } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/bitmaps.hlst b/vcl/inc/bitmaps.hlst index da7f30a3ee8b..1723a7cd45ea 100644 --- a/vcl/inc/bitmaps.hlst +++ b/vcl/inc/bitmaps.hlst @@ -227,4 +227,8 @@ inline constexpr OUString CHEVRON = u"sfx2/res/chevron.png"_ustr; inline constexpr OUString RID_UPDATE_AVAILABLE_16 = u"extensions/res/update/ui/onlineupdate_16.png"_ustr; inline constexpr OUString RID_UPDATE_AVAILABLE_26 = u"extensions/res/update/ui/onlineupdate_26.png"_ustr; +inline constexpr OUString RID_MSGTYPE_INFO = u"vcl/res/information.png"_ustr; +inline constexpr OUString RID_MSGTYPE_WARN = u"vcl/res/warning.png"_ustr; +inline constexpr OUString RID_MSGTYPE_ERR = u"vcl/res/error.png"_ustr; + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 6bf73e7b2ffb..eeccc451098f 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -3213,14 +3213,14 @@ void set_message_type(Edit* pEntry, weld::EntryMessageType eType) switch (eType) { case weld::EntryMessageType::Normal: + case weld::EntryMessageType::Info: pEntry->SetForceControlBackground(false); pEntry->SetControlForeground(); pEntry->SetControlBackground(); - break; - case weld::EntryMessageType::Info: - pEntry->SetForceControlBackground(true); - pEntry->SetControlForeground(COL_BLACK); - pEntry->SetControlBackground(0xb4c7dc); // light blue 3 + if (eType == weld::EntryMessageType::Normal) + pEntry->SetEntryMessageType(0); + else + pEntry->SetEntryMessageType(1); break; case weld::EntryMessageType::Warning: // tdf#114603: enable setting the background to a different color; @@ -3228,6 +3228,7 @@ void set_message_type(Edit* pEntry, weld::EntryMessageType eType) pEntry->SetForceControlBackground(true); pEntry->SetControlForeground(COL_BLACK); pEntry->SetControlBackground(0xffffa6); // "light yellow 3" + pEntry->SetEntryMessageType(2); break; case weld::EntryMessageType::Error: // tdf#114603: enable setting the background to a different color; @@ -3235,6 +3236,7 @@ void set_message_type(Edit* pEntry, weld::EntryMessageType eType) pEntry->SetForceControlBackground(true); pEntry->SetControlForeground(COL_BLACK); // contrast of 5.87 to the red background pEntry->SetControlBackground(0xffa6a6); // "light red 3" + pEntry->SetEntryMessageType(3); break; } } diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 001314f3fcb0..6e6a2b5f6c91 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -253,6 +254,7 @@ void Edit::ImplInitEditData() mpDDInfo = nullptr; mpIMEInfos = nullptr; mcEchoChar = 0; + maEntryMessageType = 0; // no default mirroring for Edit controls // note: controls that use a subedit will revert this (SpinField, ComboBox) @@ -483,7 +485,16 @@ void Edit::ImplRepaint(vcl::RenderContext& rRenderContext, const tools::Rectangl ImplPaintBorder(rRenderContext); - bool bDrawSelection = maSelection.Len() && (HasFocus() || (GetStyle() & WB_NOHIDESELECTION) || mbActivePopup); + if (maEntryMessageType > 0) + { + const OUString sType( maEntryMessageType == 1 ? RID_MSGTYPE_INFO + : maEntryMessageType == 2 ? RID_MSGTYPE_WARN + : RID_MSGTYPE_ERR); + const Point aPoint(rRectangle.Right() - 18, rRectangle.Bottom() / 2 - 8); + rRenderContext.DrawImage(aPoint, Image(StockImage::Yes, sType)); + } + bool bDrawSelection + = maSelection.Len() && (HasFocus() || (GetStyle() & WB_NOHIDESELECTION) || mbActivePopup); aPos.setX( mnXOffset + ImplGetExtraXOffset() ); if (bPaintPlaceholderText)