public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/kde:master commit in: kde-plasma/plasma-workspace/files/, kde-plasma/plasma-workspace/
Date: Tue,  4 May 2021 21:12:15 +0000 (UTC)	[thread overview]
Message-ID: <1620159469.421fd89da5df5796db415c3eb4a294b18fca1277.asturm@gentoo> (raw)

commit:     421fd89da5df5796db415c3eb4a294b18fca1277
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue May  4 20:00:23 2021 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue May  4 20:17:49 2021 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=421fd89d

kde-plasma/plasma-workspace: Backport 5.22 adaptive opacity feature

This raises the minimum required KDE Frameworks version to 5.82.0
which is carrying the necessary backport in kde-frameworks/plasma.

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=434202
KDe-bug: https://bugs.kde.org/show_bug.cgi?id=434285
Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 ...workspace-5.21.5-transparency-panelConfig.patch |  27 ++
 .../plasma-workspace-5.21.5-transparency.patch     | 376 +++++++++++++++++++++
 .../plasma-workspace-5.21.5.ebuild                 |   6 +-
 3 files changed, 408 insertions(+), 1 deletion(-)

diff --git a/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch
new file mode 100644
index 0000000000..fb7993e6db
--- /dev/null
+++ b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch
@@ -0,0 +1,27 @@
+From 1cf02aad96bfe650a1f4d1465ae15234205fb061 Mon Sep 17 00:00:00 2001
+From: Bharadwaj Raju <bharadwaj.raju777@protonmail.com>
+Date: Mon, 26 Apr 2021 18:47:51 +0000
+Subject: [PATCH] Load panelOpacity from config parent, not from config
+
+BUG: 434285
+FIXED-IN: 5.22
+---
+ shell/panelview.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/panelview.cpp b/shell/panelview.cpp
+index 5ed743024..4533e856f 100644
+--- a/shell/panelview.cpp
++++ b/shell/panelview.cpp
+@@ -633,7 +633,7 @@ void PanelView::restore()
+     // the place for this config key is changed in Plasma 5.9
+     // Do NOT use readConfigValueWithFallBack
+     setVisibilityMode((VisibilityMode)panelConfig.parent().readEntry<int>("panelVisibility", panelConfig.readEntry<int>("panelVisibility", (int)NormalPanel)));
+-    setOpacityMode((OpacityMode)readConfigValueWithFallBack("panelOpacity", PanelView::OpacityMode::Adaptive));
++    setOpacityMode((OpacityMode)config().parent().readEntry<int>("panelOpacity", configDefaults().parent().readEntry<int>("panelOpacity", PanelView::OpacityMode::Adaptive)));
+     m_initCompleted = true;
+     resizePanel();
+     positionPanel();
+-- 
+GitLab
+

diff --git a/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch
new file mode 100644
index 0000000000..1a925a137c
--- /dev/null
+++ b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch
@@ -0,0 +1,376 @@
+From 7db8d5ee551f30576588d31470fe287b6ad2adcd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <niccolo@venerandi.com>
+Date: Mon, 1 Mar 2021 22:14:43 +0000
+Subject: [PATCH] Add support for adaptive opacity panels
+
+Co-authored-by: Jan Blackquill <uhhadd@gmail.com>
+---
+ libtaskmanager/taskfilterproxymodel.cpp | 26 ++++++++++++++++++
+ libtaskmanager/taskfilterproxymodel.h   | 19 ++++++++++++++
+ libtaskmanager/tasksmodel.cpp           | 11 ++++++++
+ libtaskmanager/tasksmodel.h             | 19 ++++++++++++++
+ shell/panelconfigview.cpp               | 11 ++++++++
+ shell/panelconfigview.h                 |  5 ++++
+ shell/panelview.cpp                     | 35 +++++++++++++++++++++++++
+ shell/panelview.h                       | 28 ++++++++++++++++++++
+ 8 files changed, 154 insertions(+)
+
+diff --git a/libtaskmanager/taskfilterproxymodel.cpp b/libtaskmanager/taskfilterproxymodel.cpp
+index 37a3076fd..6bb27537a 100644
+--- a/libtaskmanager/taskfilterproxymodel.cpp
++++ b/libtaskmanager/taskfilterproxymodel.cpp
+@@ -40,6 +40,7 @@ public:
+     bool filterByScreen = false;
+     bool filterByActivity = false;
+     bool filterNotMinimized = false;
++    bool filterNotMaximized = false;
+     bool filterSkipTaskbar = true;
+     bool filterSkipPager = false;
+ 
+@@ -185,6 +186,22 @@ void TaskFilterProxyModel::setFilterNotMinimized(bool filter)
+     }
+ }
+ 
++bool TaskFilterProxyModel::filterNotMaximized() const
++{
++    return d->filterNotMaximized;
++}
++
++void TaskFilterProxyModel::setFilterNotMaximized(bool filter)
++{
++    if (d->filterNotMaximized != filter) {
++        d->filterNotMaximized = filter;
++
++        invalidateFilter();
++
++        emit filterNotMaximizedChanged();
++    }
++}
++
+ bool TaskFilterProxyModel::filterSkipTaskbar() const
+ {
+     return d->filterSkipTaskbar;
+@@ -301,6 +318,15 @@ bool TaskFilterProxyModel::acceptsRow(int sourceRow) const
+         }
+     }
+ 
++    // Filter not maximized.
++    if (d->filterNotMaximized) {
++        bool isMaximized = sourceIdx.data(AbstractTasksModel::IsMaximized).toBool();
++
++        if (!isMaximized) {
++            return false;
++        }
++    }
++
+     return true;
+ }
+ 
+diff --git a/libtaskmanager/taskfilterproxymodel.h b/libtaskmanager/taskfilterproxymodel.h
+index 7ad2cb9ce..88ba3adab 100644
+--- a/libtaskmanager/taskfilterproxymodel.h
++++ b/libtaskmanager/taskfilterproxymodel.h
+@@ -52,6 +52,7 @@ class TASKMANAGER_EXPORT TaskFilterProxyModel : public QSortFilterProxyModel, pu
+     Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE setFilterByScreen NOTIFY filterByScreenChanged)
+     Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged)
+     Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged)
++    Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximizedChanged)
+     Q_PROPERTY(bool filterSkipTaskbar READ filterSkipTaskbar WRITE setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged)
+     Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE setFilterSkipPager NOTIFY filterSkipPagerChanged)
+ 
+@@ -212,6 +213,23 @@ public:
+      **/
+     void setFilterNotMinimized(bool filter);
+ 
++    /**
++     * Whether non-maximized tasks should be filtered. Defaults to
++     * @c false.
++     *
++     * @see setFilterNotMaximized
++     * @returns @c true if non-maximized tasks should be filtered.
++     **/
++    bool filterNotMaximized() const;
++
++    /**
++     * Set whether non-maximized tasks should be filtered.
++     *
++     * @see filterNotMaximized
++     * @param filter Whether non-maximized tasks should be filtered.
++     **/
++    void setFilterNotMaximized(bool filter);
++
+     /**
+      * Whether tasks which should be omitted from 'task bars' should be
+      * filtered. Defaults to @c true.
+@@ -285,6 +303,7 @@ Q_SIGNALS:
+     void filterByScreenChanged() const;
+     void filterByActivityChanged() const;
+     void filterNotMinimizedChanged() const;
++    void filterNotMaximizedChanged() const;
+     void filterSkipTaskbarChanged() const;
+     void filterSkipPagerChanged() const;
+     void demandingAttentionSkipsFiltersChanged() const;
+diff --git a/libtaskmanager/tasksmodel.cpp b/libtaskmanager/tasksmodel.cpp
+index c6e66926b..11eb53fdf 100644
+--- a/libtaskmanager/tasksmodel.cpp
++++ b/libtaskmanager/tasksmodel.cpp
+@@ -302,6 +302,7 @@ void TasksModel::Private::initModels()
+     QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterByScreenChanged, q, &TasksModel::filterByScreenChanged);
+     QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterByActivityChanged, q, &TasksModel::filterByActivityChanged);
+     QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterNotMinimizedChanged, q, &TasksModel::filterNotMinimizedChanged);
++    QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterNotMaximizedChanged, q, &TasksModel::filterNotMaximizedChanged);
+ 
+     groupingProxyModel = new TaskGroupingProxyModel(q);
+     groupingProxyModel->setSourceModel(filterProxyModel);
+@@ -1152,6 +1153,16 @@ void TasksModel::setFilterNotMinimized(bool filter)
+     d->filterProxyModel->setFilterNotMinimized(filter);
+ }
+ 
++bool TasksModel::filterNotMaximized() const
++{
++    return d->filterProxyModel->filterNotMaximized();
++}
++
++void TasksModel::setFilterNotMaximized(bool filter)
++{
++    d->filterProxyModel->setFilterNotMaximized(filter);
++}
++
+ TasksModel::SortMode TasksModel::sortMode() const
+ {
+     return d->sortMode;
+diff --git a/libtaskmanager/tasksmodel.h b/libtaskmanager/tasksmodel.h
+index 18e3d9bb4..8c84012d0 100644
+--- a/libtaskmanager/tasksmodel.h
++++ b/libtaskmanager/tasksmodel.h
+@@ -73,6 +73,7 @@ class TASKMANAGER_EXPORT TasksModel : public QSortFilterProxyModel, public Abstr
+     Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE setFilterByScreen NOTIFY filterByScreenChanged)
+     Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged)
+     Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged)
++    Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximized)
+ 
+     Q_PROPERTY(SortMode sortMode READ sortMode WRITE setSortMode NOTIFY sortModeChanged)
+     Q_PROPERTY(bool separateLaunchers READ separateLaunchers WRITE setSeparateLaunchers NOTIFY separateLaunchersChanged)
+@@ -295,6 +296,23 @@ public:
+      **/
+     void setFilterNotMinimized(bool filter);
+ 
++    /**
++     * Whether non-maximized tasks should be filtered. Defaults to
++     * @c false.
++     *
++     * @see setFilterNotMaximized
++     * @returns @c true if non-maximized tasks should be filtered.
++     **/
++    bool filterNotMaximized() const;
++
++    /**
++     * Set whether non-maximized tasks should be filtered.
++     *
++     * @see filterNotMaximized
++     * @param filter Whether non-maximized tasks should be filtered.
++     **/
++    void setFilterNotMaximized(bool filter);
++
+     /**
+      * The sort mode used in sorting tasks. Defaults to SortAlpha.
+      *
+@@ -848,6 +866,7 @@ Q_SIGNALS:
+     void filterByScreenChanged() const;
+     void filterByActivityChanged() const;
+     void filterNotMinimizedChanged() const;
++    void filterNotMaximizedChanged() const;
+     void sortModeChanged() const;
+     void separateLaunchersChanged() const;
+     void launchInPlaceChanged() const;
+diff --git a/shell/panelconfigview.cpp b/shell/panelconfigview.cpp
+index a331c0bb2..5637f3233 100644
+--- a/shell/panelconfigview.cpp
++++ b/shell/panelconfigview.cpp
+@@ -289,6 +289,17 @@ PanelView::VisibilityMode PanelConfigView::visibilityMode() const
+     return m_panelView->visibilityMode();
+ }
+ 
++void PanelConfigView::setOpacityMode(PanelView::OpacityMode mode)
++{
++    m_panelView->setOpacityMode(mode);
++    emit opacityModeChanged();
++}
++
++PanelView::OpacityMode PanelConfigView::opacityMode() const
++{
++    return m_panelView->opacityMode();
++}
++
+ Plasma::FrameSvg::EnabledBorders PanelConfigView::enabledBorders() const
+ {
+     return m_enabledBorders;
+diff --git a/shell/panelconfigview.h b/shell/panelconfigview.h
+index 8e0abd314..db2af6bf9 100644
+--- a/shell/panelconfigview.h
++++ b/shell/panelconfigview.h
+@@ -51,6 +51,7 @@ class PanelConfigView : public PlasmaQuick::ConfigView
+ {
+     Q_OBJECT
+     Q_PROPERTY(PanelView::VisibilityMode visibilityMode READ visibilityMode WRITE setVisibilityMode NOTIFY visibilityModeChanged)
++    Q_PROPERTY(PanelView::OpacityMode opacityMode READ opacityMode WRITE setOpacityMode NOTIFY opacityModeChanged)
+     Q_PROPERTY(Plasma::FrameSvg::EnabledBorders enabledBorders READ enabledBorders NOTIFY enabledBordersChanged)
+ 
+ public:
+@@ -62,6 +63,9 @@ public:
+     PanelView::VisibilityMode visibilityMode() const;
+     void setVisibilityMode(PanelView::VisibilityMode mode);
+ 
++    PanelView::OpacityMode opacityMode() const;
++    void setOpacityMode(PanelView::OpacityMode mode);
++
+     Plasma::FrameSvg::EnabledBorders enabledBorders() const;
+ 
+ protected:
+@@ -84,6 +88,7 @@ private Q_SLOTS:
+ 
+ Q_SIGNALS:
+     void visibilityModeChanged();
++    void opacityModeChanged();
+     void enabledBordersChanged();
+ 
+ private:
+diff --git a/shell/panelview.cpp b/shell/panelview.cpp
+index 4654a7a72..a699cc84c 100644
+--- a/shell/panelview.cpp
++++ b/shell/panelview.cpp
+@@ -64,6 +64,7 @@ PanelView::PanelView(ShellCorona *corona, QScreen *targetScreen, QWindow *parent
+     , m_alignment(Qt::AlignLeft)
+     , m_corona(corona)
+     , m_visibilityMode(NormalPanel)
++    , m_opacityMode(Adaptive)
+     , m_backgroundHints(Plasma::Types::StandardBackground)
+     , m_shellSurface(nullptr)
+ {
+@@ -76,8 +77,10 @@ PanelView::PanelView(ShellCorona *corona, QScreen *targetScreen, QWindow *parent
+     setClearBeforeRendering(true);
+     setColor(QColor(Qt::transparent));
+     setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
++    updateAdaptiveOpacityEnabled();
+ 
+     connect(&m_theme, &Plasma::Theme::themeChanged, this, &PanelView::updateMask);
++    connect(&m_theme, &Plasma::Theme::themeChanged, this, &PanelView::updateAdaptiveOpacityEnabled);
+     connect(this, &PanelView::backgroundHintsChanged, this, &PanelView::updateMask);
+     connect(this, &PanelView::backgroundHintsChanged, this, &PanelView::updateEnabledBorders);
+     // TODO: add finished/componentComplete signal to QuickViewSharedEngine,
+@@ -405,6 +408,37 @@ PanelView::VisibilityMode PanelView::visibilityMode() const
+     return m_visibilityMode;
+ }
+ 
++PanelView::OpacityMode PanelView::opacityMode() const
++{
++    if (!m_theme.adaptiveTransparencyEnabled()) {
++        return PanelView::Translucent;
++    }
++    return m_opacityMode;
++}
++
++bool PanelView::adaptiveOpacityEnabled()
++{
++    return m_theme.adaptiveTransparencyEnabled();
++}
++
++void PanelView::setOpacityMode(PanelView::OpacityMode mode)
++{
++    if (m_opacityMode != mode) {
++        m_opacityMode = mode;
++        if (config().isValid() && config().parent().isValid()) {
++            config().parent().writeEntry("panelOpacity", (int)mode);
++            m_corona->requestApplicationConfigSync();
++        }
++        emit opacityModeChanged();
++    }
++}
++
++void PanelView::updateAdaptiveOpacityEnabled()
++{
++    emit opacityModeChanged();
++    emit adaptiveOpacityEnabledChanged();
++}
++
+ void PanelView::positionPanel()
+ {
+     if (!containment()) {
+@@ -599,6 +633,7 @@ void PanelView::restore()
+     // the place for this config key is changed in Plasma 5.9
+     // Do NOT use readConfigValueWithFallBack
+     setVisibilityMode((VisibilityMode)panelConfig.parent().readEntry<int>("panelVisibility", panelConfig.readEntry<int>("panelVisibility", (int)NormalPanel)));
++    setOpacityMode((OpacityMode)readConfigValueWithFallBack("panelOpacity", PanelView::OpacityMode::Adaptive));
+     m_initCompleted = true;
+     resizePanel();
+     positionPanel();
+diff --git a/shell/panelview.h b/shell/panelview.h
+index 60e4d446e..c312d4907 100644
+--- a/shell/panelview.h
++++ b/shell/panelview.h
+@@ -100,6 +100,18 @@ class PanelView : public PlasmaQuick::ContainmentView
+      */
+     Q_PROPERTY(VisibilityMode visibilityMode READ visibilityMode WRITE setVisibilityMode NOTIFY visibilityModeChanged)
+ 
++    /**
++     *  Property that determines how a panel's opacity behaves.
++     *
++     * @see OpacityMode
++     */
++    Q_PROPERTY(OpacityMode opacityMode READ opacityMode WRITE setOpacityMode NOTIFY opacityModeChanged)
++
++    /**
++    /*  Property that determines whether adaptive opacity is used.
++     */
++    Q_PROPERTY(bool adaptiveOpacityEnabled READ adaptiveOpacityEnabled NOTIFY adaptiveOpacityEnabledChanged)
++
+ public:
+     enum VisibilityMode {
+         NormalPanel = 0, /** default, always visible panel, the windowmanager reserves a places for it */
+@@ -109,6 +121,14 @@ public:
+     };
+     Q_ENUM(VisibilityMode)
+ 
++    /** Enumeration of possible opacity modes. */
++    enum OpacityMode {
++        Adaptive = 0, /** The panel will change opacity depending on the presence of a maximized window */
++        Opaque, /** The panel will always be opaque */
++        Translucent /** The panel will always be translucent */
++    };
++    Q_ENUM(OpacityMode)
++
+     explicit PanelView(ShellCorona *corona, QScreen *targetScreen = nullptr, QWindow *parent = nullptr);
+     ~PanelView() override;
+ 
+@@ -147,6 +167,11 @@ public:
+     VisibilityMode visibilityMode() const;
+     void setVisibilityMode(PanelView::VisibilityMode mode);
+ 
++    PanelView::OpacityMode opacityMode() const;
++	bool adaptiveOpacityEnabled();
++    void setOpacityMode(PanelView::OpacityMode mode);
++    void updateAdaptiveOpacityEnabled();
++
+     /**
+      * @returns the geometry of the panel given a distance
+      */
+@@ -185,6 +210,8 @@ Q_SIGNALS:
+     // QWindow does not have a property for screen. Adding this property requires re-implementing the signal
+     void screenToFollowChanged(QScreen *screen);
+     void visibilityModeChanged();
++    void opacityModeChanged();
++    void adaptiveOpacityEnabledChanged();
+ 
+ protected Q_SLOTS:
+     /**
+@@ -235,6 +262,7 @@ private:
+     ShellCorona *m_corona;
+     QTimer m_strutsTimer;
+     VisibilityMode m_visibilityMode;
++    OpacityMode m_opacityMode;
+     Plasma::Theme m_theme;
+     QTimer m_positionPaneltimer;
+     QTimer m_unhideTimer;
+-- 
+GitLab
+

diff --git a/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild b/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
index 711dd242a8..31b3b92188 100644
--- a/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
+++ b/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
@@ -143,7 +143,11 @@ PDEPEND="
 	>=kde-plasma/kde-cli-tools-${PVCUT}:5
 "
 
-PATCHES=( "${FILESDIR}/${PN}-5.14.2-split-libkworkspace.patch" )
+PATCHES=(
+	"${FILESDIR}/${PN}-5.14.2-split-libkworkspace.patch"
+	"${FILESDIR}/${P}-transparency.patch" # KDE-bug 434202
+	"${FILESDIR}/${P}-transparency-panelConfig.patch" # KDE-bug 434285
+)
 
 src_prepare() {
 	ecm_src_prepare


             reply	other threads:[~2021-05-04 21:12 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-04 21:12 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-02-21 11:47 [gentoo-commits] proj/kde:master commit in: kde-plasma/plasma-workspace/files/, kde-plasma/plasma-workspace/ Andreas Sturmlechner
2021-11-09 13:04 Andreas Sturmlechner
2021-05-05  3:00 Andreas Sturmlechner
2019-10-15 17:10 Andreas Sturmlechner
2019-05-14  6:28 Andreas Sturmlechner
2018-10-22 18:14 Andreas Sturmlechner
2016-11-12  8:34 Michael Palimaka
2016-10-08 15:51 Michael Palimaka
2016-03-20 14:47 Michael Palimaka
2015-12-28  0:33 Marc Schiffbauer
2015-11-14 16:01 Michael Palimaka
2015-11-10 12:41 Michael Palimaka
2015-08-16 20:36 Johannes Huber
2015-07-04 14:48 Johannes Huber
2015-06-01 18:18 Michael Palimaka
2015-04-29 15:03 Michael Palimaka
2015-01-27 20:07 Johannes Huber
2015-01-21 20:48 Johannes Huber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1620159469.421fd89da5df5796db415c3eb4a294b18fca1277.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox