Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ColorPaletteEditor: use theme's list-add and list-remove icons #2630

Merged
merged 3 commits into from
Apr 5, 2020

Conversation

Be-ing
Copy link
Contributor

@Be-ing Be-ing commented Apr 5, 2020

Continuing from discussion on #2589
before:
image

after:
image

@daschuer
Copy link
Member

daschuer commented Apr 5, 2020

This is the way it looks at my machine now, somehow chunky :-/. Compared to @Be-ing s screenshot there seems to be a scaling issue.
image

If I change to list-add-symbolic and list-remove-symbolic it looks like that:
image
This is better, but there is not enough contrast.

So in my case I prefer the text labels.

The rest of the OS, (GTK) uses symbolic icons for list-add and list-remove

How does it look with symbolic and colorful icons on our other targets?

@Be-ing
Copy link
Contributor Author

Be-ing commented Apr 5, 2020

list-add-symbolic/list-remove-symbolic do not look good in my Qt theme:
image
I don't see any problems in your screenshot @daschuer. It looks good to me with list-add/list-remove.

@Holzhaus
Copy link
Member

Holzhaus commented Apr 5, 2020

The color palette editor causes a segfault for me:

─── Output/messages ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Thread 1 "mixxx" received signal SIGSEGV, Segmentation fault.
0x00007ffff6462f7e in QWidget::setFixedWidth(int) () from /usr/lib/libQt5Widgets.so.5
─── Assembly ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
0x00007ffff6462f79 ? push   %rbp
0x00007ffff6462f7a ? mov    %rdi,%rbp
0x00007ffff6462f7d ? push   %rbx
0x00007ffff6462f7e ? mov    0x8(%rdi),%r13
0x00007ffff6462f82 ? mov    %r13,%rdi
0x00007ffff6462f85 ? addr32 callq 0x7ffff6450660 <_ZN14QWidgetPrivate11createExtraEv>
0x00007ffff6462f8b ? mov    0x58(%r13),%rax
─── Expressions ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─── History ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─── Memory ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─── Registers ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   rax 0x0000000000000000     rbx 0x000055556389cda0     rcx 0x0000555556435010     rdx 0x000055556264b7b0     rsi 0x0000000000000020     rdi 0x000000000d55b2be     rbp 0x000000000d55b2be
   rsp 0x00007fffffffc960      r8 0x0000555563acce40      r9 0x0000000000000004     r10 0x0000000000000002     r11 0x00007ffff2cd8a40     r12 0x00007fffffffcb80     r13 0x0000555561558390
   r14 0x0000000000000020     r15 0x00007fffffffcb70     rip 0x00007ffff6462f7e  eflags [ IF RF ]               cs 0x00000033              ss 0x0000002b              ds 0x00000000
    es 0x00000000              fs 0x00000000              gs 0x00000000
─── Source ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
─── Stack ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x00007ffff6462f7e in QWidget::setFixedWidth(int)
(no arguments)
[1] from 0x0000555555d38238 in ColorPaletteEditor::ColorPaletteEditor+536 at /home/jan/Projects/mixxx/src/preferences/colorpaletteeditor.cpp:40
arg this = 0x555561558390
arg parent = <optimized out>
arg showHotcueNumbers = <optimized out>
[+]
─── Threads ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[86] id 346302 name Thread (pooled) from 0x00007ffff2cf101a in pthread_cond_timedwait@@GLIBC_2.3.2
[85] id 346301 name mixxx from 0x00007ffff2c0dabf in poll+79
[84] id 346300 name gdbus from 0x00007ffff2c0dabf in poll+79
[83] id 346299 name gmain from 0x00007ffff2c0dabf in poll+79
[82] id 346298 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[81] id 346297 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[80] id 346296 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[79] id 346295 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[78] id 346294 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[77] id 346293 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[76] id 346292 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[75] id 346291 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[74] id 346290 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[73] id 346289 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[72] id 346288 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[71] id 346287 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[70] id 346286 name Controller from 0x00007ffff2c0dabf in poll+79
[69] id 346285 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[68] id 346284 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[67] id 346283 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[66] id 346282 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[65] id 346281 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[64] id 346280 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[63] id 346279 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[62] id 346278 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[61] id 346277 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[60] id 346276 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[59] id 346275 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[58] id 346274 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[57] id 346273 name VSyncThread from 0x00007ffff2be02d1 in clock_nanosleep@GLIBC_2.2.5
[56] id 346272 name mixxx:gdrv0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[55] id 346271 name Controller from 0x00007ffff2c0dabf in poll+79
[53] id 346269 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[52] id 346268 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[51] id 346267 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[50] id 346266 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[49] id 346265 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[48] id 346264 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[47] id 346263 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[46] id 346262 name AnalyzerThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[45] id 346261 name BrowseThread from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[44] id 346260 name LibraryScanner  from 0x00007ffff2c0dabf in poll+79
[43] id 346259 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[42] id 346258 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[41] id 346257 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[40] id 346256 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[39] id 346255 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[38] id 346254 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[37] id 346253 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[36] id 346252 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[35] id 346251 name CachingReaderWo from 0x00007ffff2c12f8d in syscall+29
[34] id 346250 name VinylControlPro from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[28] id 346243 name EngineSideChain from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[27] id 346242 name EngineWorkerSch from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[26] id 346241 name mixxx from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[25] id 346240 name mixxx:shlo4 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[24] id 346239 name mixxx:shlo3 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[23] id 346238 name mixxx:shlo2 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[22] id 346237 name mixxx:shlo1 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[21] id 346236 name mixxx:shlo0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[20] id 346235 name mixxx:sh11 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[19] id 346234 name mixxx:sh10 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[18] id 346233 name mixxx:sh9 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[17] id 346232 name mixxx:sh8 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[16] id 346231 name mixxx:sh7 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[15] id 346230 name mixxx:sh6 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[14] id 346229 name mixxx:sh5 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[13] id 346228 name mixxx:sh4 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[12] id 346227 name mixxx:sh3 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[11] id 346226 name mixxx:sh2 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[10] id 346225 name mixxx:sh1 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[9] id 346224 name mixxx:sh0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[8] id 346223 name mixxx:disk$3 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[7] id 346222 name mixxx:disk$2 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[6] id 346221 name mixxx:disk$1 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[5] id 346220 name mixxx:disk$0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[4] id 346219 name mixxx:cs0 from 0x00007ffff2cf0cf5 in pthread_cond_wait@@GLIBC_2.3.2
[3] id 346218 name QDBusConnection from 0x00007ffff2c0dabf in poll+79
[2] id 346217 name QXcbEventQueue from 0x00007ffff2c0dabf in poll+79
[1] id 346213 name mixxx from 0x00007ffff6462f7e in QWidget::setFixedWidth(int)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
>>> bt
#0  0x00007ffff6462f7e in QWidget::setFixedWidth(int) () at /usr/lib/libQt5Widgets.so.5
#1  0x0000555555d38238 in ColorPaletteEditor::ColorPaletteEditor(QWidget*, bool) (this=0x555561558390, parent=<optimized out>, showHotcueNumbers=<optimized out>) at /home/jan/Projects/mixxx/src/preferences/colorpaletteeditor.cpp:40
#2  0x0000555555d125dc in std::make_unique<ColorPaletteEditor, DlgPrefColors*, bool&>(DlgPrefColors*&&, bool&) () at /usr/include/c++/9.3.0/bits/unique_ptr.h:856
#3  DlgPrefColors::openColorPaletteEditor(QString const&, bool) (this=0x55555a072930, paletteName=..., editHotcuePalette=<optimized out>) at /home/jan/Projects/mixxx/src/preferences/dialog/dlgprefcolors.cpp:241
#4  0x0000555555d128d6 in DlgPrefColors::slotEditTrackPaletteClicked() (this=0x55555a072930) at /home/jan/Projects/mixxx/src/preferences/dialog/dlgprefcolors.cpp:229
#5  0x00007ffff576250e in  () at /usr/lib/libQt5Core.so.5
#6  0x00007ffff6521a83 in QAbstractButton::clicked(bool) () at /usr/lib/libQt5Widgets.so.5
#7  0x00007ffff6521cac in  () at /usr/lib/libQt5Widgets.so.5
#8  0x00007ffff65230b2 in  () at /usr/lib/libQt5Widgets.so.5
#9  0x00007ffff6523276 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/libQt5Widgets.so.5
#10 0x00007ffff646b48e in QWidget::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5
#11 0x00007ffff6427362 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#12 0x00007ffff6430a68 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#13 0x00007ffff572ca12 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#14 0x00007ffff642fafb in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () at /usr/lib/libQt5Widgets.so.5
#15 0x00007ffff6486c41 in  () at /usr/lib/libQt5Widgets.so.5
#16 0x00007ffff6489bc4 in  () at /usr/lib/libQt5Widgets.so.5
#17 0x00007ffff6427362 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#18 0x00007ffff6430819 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#19 0x00007ffff572ca12 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#20 0x00007ffff5b8e574 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /usr/lib/libQt5Gui.so.5
#21 0x00007ffff5b8fcb6 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib/libQt5Gui.so.5
#22 0x00007ffff5b68bcc in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Gui.so.5
#23 0x00007fffeb8fcbcc in  () at /usr/lib/libQt5XcbQpa.so.5
#24 0x00007ffff52159be in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#25 0x00007ffff5217831 in  () at /usr/lib/libglib-2.0.so.0
#26 0x00007ffff5217871 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#27 0x00007ffff57850d0 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#28 0x00007ffff572b57c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#29 0x00007ffff5733586 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#30 0x00005555556d7f7a in (anonymous namespace)::runMixxx (args=..., app=0x7fffffffdc30) at /home/jan/Projects/mixxx/src/main.cpp:53
#31 main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/jan/Projects/mixxx/src/main.cpp:130

@Be-ing
Copy link
Contributor Author

Be-ing commented Apr 5, 2020

That segfault is only with this branch, not master?

@Holzhaus
Copy link
Member

Holzhaus commented Apr 5, 2020

That segfault is only with this branch, not master?

Yes, master works fine.

m_pRemoveColorButton = new QPushButton("-", this);
QIcon removeIcon = QIcon::fromTheme("list-remove", QIcon());
if (!removeIcon.isNull()) {
m_pRemoveColorButton = new QPushButton(removeIcon, "", this);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Holzhaus can you use a debugger to check if this or line 38 is executing?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

38

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's bizarre. Line 38 is identical to the line in master that was removed.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, I also have no idea what causes that but it happens every time.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can just keep the old code and if the remove icon is not null, then set icon and label on the button afterwards?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll check if that segfaults as well.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@daschuer
Copy link
Member

daschuer commented Apr 5, 2020

I don't like the colorful view. But I don't really mind for this rarearly used piece of gui. If you think this is an improvement go ahead.
At least we should request window and MacOs to check if it is still usable.

@ronso0
Copy link
Member

ronso0 commented Apr 5, 2020

I tried to test on Win10 by running the Appveyor artifacts. Fail

  1. trying to install the mixxx.msi gives a linux folder structure with etc/ bin/ share/ etc.
    won't work obviously..
  2. cd to my previous install dir, replaced exe with the extracted mixxx.exe, run mixxx, Pref > Color > edit = Crash

@Holzhaus
Copy link
Member

Holzhaus commented Apr 5, 2020

  1. cd to my previous install dir, replaced exe with the extracted mixxx.exe, run mixxx, Pref > Color > edit = Crash

Same for me, even on Linux. Very strange. I even commented out all of @Be-ing's code and it still happens

@Holzhaus
Copy link
Member

Holzhaus commented Apr 5, 2020

I have no idea why @Be-ing's implementation doesn't work, but when I revert the last commit and add this, it works for me:

diff --git a/src/preferences/colorpaletteeditor.cpp b/src/preferences/colorpaletteeditor.cpp
index 0a66cdafce..ca2004c972 100644
--- a/src/preferences/colorpaletteeditor.cpp
+++ b/src/preferences/colorpaletteeditor.cpp
@@ -32,6 +32,9 @@ ColorPaletteEditor::ColorPaletteEditor(QWidget* parent, bool showHotcueNumbers)
     pColorButtonLayout->addWidget(pExpander);

     m_pRemoveColorButton = new QPushButton(QIcon::fromTheme("list-remove"), "", this);
+    if (m_pRemoveColorButton->icon().isNull()) {
+        m_pRemoveColorButton->setText("-");
+    }
     m_pRemoveColorButton->setFixedWidth(32);
     m_pRemoveColorButton->setToolTip(tr("Remove Color"));
     m_pRemoveColorButton->setDisabled(true);
@@ -42,6 +45,9 @@ ColorPaletteEditor::ColorPaletteEditor(QWidget* parent, bool showHotcueNumbers)
             &ColorPaletteEditor::slotRemoveColor);

     m_pAddColorButton = new QPushButton(QIcon::fromTheme("list-add"), "", this);
+    if (m_pAddColorButton->icon().isNull()) {
+        m_pAddColorButton->setText("+");
+    }
     m_pAddColorButton->setFixedWidth(32);
     m_pAddColorButton->setToolTip(tr("Add Color"));
     pColorButtonLayout->addWidget(m_pAddColorButton);

@Holzhaus
Copy link
Member

Holzhaus commented Apr 5, 2020

I don't like the colorful view. But I don't really mind for this rarearly used piece of gui. If you think this is an improvement go ahead.

Ok. If you don't like your icons, you could also change your icon theme :-)

@daschuer
Copy link
Member

daschuer commented Apr 5, 2020

I can't confirm this with Xenial.
Maybe it is a bug in a more recent Qt version.
I think you can just remove setFixedWidth()
To fix the issue.

@Be-ing
Copy link
Contributor Author

Be-ing commented Apr 5, 2020

Thanks @Holzhaus, I just pushed a commit with those changes.

Copy link
Member

@Holzhaus Holzhaus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

@Holzhaus Holzhaus merged commit 8257702 into mixxxdj:master Apr 5, 2020
@Be-ing Be-ing deleted the color_preferences_icons branch April 5, 2020 22:49
@Be-ing
Copy link
Contributor Author

Be-ing commented Apr 6, 2020

This might have caused a crash on macOS:
https://bugs.launchpad.net/mixxx/+bug/1871238

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants