Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qpwgraph for openSUSE:Factory checked in at 2023-07-11 15:57:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qpwgraph (Old) and /work/SRC/openSUSE:Factory/.qpwgraph.new.8922 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qpwgraph" Tue Jul 11 15:57:19 2023 rev:17 rq:1098064 version:0.4.5 Changes: -------- --- /work/SRC/openSUSE:Factory/qpwgraph/qpwgraph.changes 2023-04-02 21:35:02.598702603 +0200 +++ /work/SRC/openSUSE:Factory/.qpwgraph.new.8922/qpwgraph.changes 2023-07-11 15:57:41.369306161 +0200 @@ -1,0 +2,16 @@ +Mon Jul 10 19:24:48 UTC 2023 - Alexei Sorokin <[email protected]> + +- Update to version 0.4.5: + * Split non-physical terminal device nodes for monitor and + control ports, adding the suffix "[Monitor]" and/or "[Control]" + resp. to the node name. + * Fix the dimming of new connections when Patchbay/Edit mode is + on and Patchbay/Auto Pin is off. + +------------------------------------------------------------------- +Sun Jun 18 20:29:27 UTC 2023 - Alexei Sorokin <[email protected]> + +- Update to version 0.4.4 (changes since 0.4.2): + * Split devices for capture/monitor and playback ports. + +------------------------------------------------------------------- Old: ---- qpwgraph-v0.4.2.tar.bz2 New: ---- qpwgraph-v0.4.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qpwgraph.spec ++++++ --- /var/tmp/diff_new_pack.M3x5ML/_old 2023-07-11 15:57:42.033310023 +0200 +++ /var/tmp/diff_new_pack.M3x5ML/_new 2023-07-11 15:57:42.041310070 +0200 @@ -17,7 +17,7 @@ Name: qpwgraph -Version: 0.4.2 +Version: 0.4.5 Release: 0 Summary: PipeWire Graph Qt GUI Interface License: GPL-2.0-or-later ++++++ qpwgraph-v0.4.2.tar.bz2 -> qpwgraph-v0.4.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/.gitlab-ci.yml new/qpwgraph-v0.4.5/.gitlab-ci.yml --- old/qpwgraph-v0.4.2/.gitlab-ci.yml 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/.gitlab-ci.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,97 +0,0 @@ -# qpwgraph Pipeline -# -workflow: - rules: - - if: $CI_COMMIT_BRANCH == "main" - - when: never - -stages: - - container - - build - -variables: - FDO_UPSTREAM_REPO: 'rncbc/qpwgraph' - -include: - - project: 'freedesktop/ci-templates' - file: '/templates/fedora.yml' - - project: 'freedesktop/ci-templates' - file: '/templates/ubuntu.yml' - -container_fedora: - stage: container - extends: - - .fedora - - .fdo.container-build@fedora - variables: - GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image - -container_ubuntu: - stage: container - extends: - - .ubuntu - - .fdo.container-build@ubuntu - variables: - GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image - -.fedora: - variables: - # Update this tag when you want to trigger a rebuild - FDO_DISTRIBUTION_TAG: '2023-03-15.0' - FDO_DISTRIBUTION_VERSION: '37' - FDO_DISTRIBUTION_PACKAGES: >- - gcc - gcc-c++ - findutils - pkgconf - cmake - qt6-qtbase-devel - qt6-qttools-devel - qt6-qtsvg-devel - alsa-lib-devel - pipewire-devel - -.ubuntu: - variables: - # Update this tag when you want to trigger a rebuild - FDO_DISTRIBUTION_TAG: '2023-03-15.0' - FDO_DISTRIBUTION_VERSION: '22.10' - FDO_DISTRIBUTION_PACKAGES: >- - debhelper-compat - gcc - g++ - findutils - pkg-config - cmake - qt6-base-dev - qt6-tools-dev - libqt6svg6-dev - libasound2-dev - libpipewire-0.3-dev - -.build: - script: - - echo "Building application..." - - cmake -DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/usr/local - -B build - - cmake --build build - - cmake --install build - - echo "Build complete." - artifacts: - name: qpwgraph-$CI_COMMIT_SHORT_SHA - paths: - - usr/local/bin/qpwgraph - -build_fedora: - extends: - - .fedora - - .fdo.distribution-image@fedora - - .build - stage: build - -build_ubuntu: - extends: - - .ubuntu - - .fdo.distribution-image@ubuntu - - .build - stage: build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/CMakeLists.txt new/qpwgraph-v0.4.5/CMakeLists.txt --- old/qpwgraph-v0.4.2/CMakeLists.txt 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/CMakeLists.txt 2023-07-10 17:37:36.000000000 +0200 @@ -1,7 +1,7 @@ cmake_minimum_required (VERSION 3.15) project(qpwgraph - VERSION 0.4.2 + VERSION 0.4.5 DESCRIPTION "A PipeWire Graph Qt GUI Interface" HOMEPAGE_URL "https://gitlab.freedesktop.org/rncbc/qpwgraph" LANGUAGES C CXX) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/ChangeLog new/qpwgraph-v0.4.5/ChangeLog --- old/qpwgraph-v0.4.2/ChangeLog 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/ChangeLog 2023-07-10 17:37:36.000000000 +0200 @@ -2,6 +2,25 @@ -------------------------------------------- +0.4.5 2023-07-10 A summer'23 release. + +- Split non-physical terminal device nodes for monitor and control + ports, adding the suffix "[Monitor]" and/or "[Control]" resp. to + the node name. +- Fixed the dimming of new connections when Patchbay/Edit mode is on + and Patchbay/Auto Pin is off. + + +0.4.4 2023-06-18 A late-spring'23 regression. + +- Split devices for capture/monitor and playback ports. (REGRESSION) + + +0.4.3 2023-06-17 A late-spring'23 release. + +- Split devices for capture/monitor and playback ports. + + 0.4.2 2023-04-02 An early-spring'23 release. - Soft incremental bounds constraints now imposed to all new and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/debian/changelog new/qpwgraph-v0.4.5/debian/changelog --- old/qpwgraph-v0.4.2/debian/changelog 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/debian/changelog 2023-07-10 17:37:36.000000000 +0200 @@ -1,3 +1,21 @@ +qpwgraph (0.4.5-27.1) unstable; urgency=low + + * A summer'23 release. + + -- Rui Nuno Capela <[email protected]> Mon, 10 Jul 2023 18:00:00 +0100 + +qpwgraph (0.4.4-26.1) unstable; urgency=low + + * A late-spring'23 regression. + + -- Rui Nuno Capela <[email protected]> Sun, 18 Jun 2023 12:00:00 +0100 + +qpwgraph (0.4.3-25.1) unstable; urgency=low + + * A late-spring'23 release. + + -- Rui Nuno Capela <[email protected]> Sat, 17 Jun 2023 12:00:00 +0100 + qpwgraph (0.4.2-24.1) unstable; urgency=low * An early-spring'23 release. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/debian/control new/qpwgraph-v0.4.5/debian/control --- old/qpwgraph-v0.4.2/debian/control 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/debian/control 2023-07-10 17:37:36.000000000 +0200 @@ -9,7 +9,7 @@ qt6-tools-dev (>= 6.1) | qttools5-dev (>= 5.1), qt6-tools-dev-tools (>= 6.1) | qttools5-dev-tools (>= 5.1), qt6-l10n-tools (>= 6.1) | base-files (<< 12), - libqt6svg6-dev | libqt5svg5-dev, libgl-dev, + qt6-svg-dev | libqt6svg6-dev | libqt5svg5-dev, libgl-dev, libasound2-dev, libpipewire-0.3-dev Standards-Version: 3.9.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/rpm/qpwgraph.spec new/qpwgraph-v0.4.5/rpm/qpwgraph.spec --- old/qpwgraph-v0.4.2/rpm/qpwgraph.spec 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/rpm/qpwgraph.spec 2023-07-10 17:37:36.000000000 +0200 @@ -16,8 +16,8 @@ # %define name qpwgraph -%define version 0.4.2 -%define release 24.1 +%define version 0.4.5 +%define release 27.1 %define _prefix /usr @@ -141,6 +141,12 @@ %changelog +* Mon Jul 10 2023 Rui Nuno Capela <[email protected]> 0.4.5 +- A summer'23 release. +* Sun Jun 18 2023 Rui Nuno Capela <[email protected]> 0.4.4 +- A late-spring'23 regression. +* Sat Jun 17 2023 Rui Nuno Capela <[email protected]> 0.4.3 +- A late-spring'23 release. * Sun Apr 2 2023 Rui Nuno Capela <[email protected]> 0.4.2 - An early-spring'23 release. * Fri Mar 3 2023 Rui Nuno Capela <[email protected]> 0.4.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/appdata/org.rncbc.qpwgraph.metainfo.xml new/qpwgraph-v0.4.5/src/appdata/org.rncbc.qpwgraph.metainfo.xml --- old/qpwgraph-v0.4.2/src/appdata/org.rncbc.qpwgraph.metainfo.xml 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/appdata/org.rncbc.qpwgraph.metainfo.xml 2023-07-10 17:37:36.000000000 +0200 @@ -37,7 +37,7 @@ <developer_name>rncbc aka. Rui Nuno Capela</developer_name> <update_contact>[email protected]</update_contact> <releases> - <release version="0.4.2" date="2023-04-02" urgency="low" /> + <release version="0.4.5" date="2023-07-10" urgency="low" /> </releases> <content_rating type="oars-1.0"/> </component> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/qpwgraph.cpp new/qpwgraph-v0.4.5/src/qpwgraph.cpp --- old/qpwgraph-v0.4.2/src/qpwgraph.cpp 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/qpwgraph.cpp 2023-07-10 17:37:36.000000000 +0200 @@ -31,6 +31,9 @@ #ifdef CONFIG_SYSTEM_TRAY #include <QSharedMemory> +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) +#include <QNativeIpcKey> +#endif #include <QLocalServer> #include <QLocalSocket> #include <QHostInfo> @@ -143,12 +146,24 @@ } m_unique += '@'; m_unique += QHostInfo::localHostName(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) + const QNativeIpcKey native_key + = QSharedMemory::legacyNativeKey(m_unique); +#endif #if defined(Q_OS_UNIX) +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) + m_memory = new QSharedMemory(native_key); +#else m_memory = new QSharedMemory(m_unique); +#endif m_memory->attach(); delete m_memory; #endif +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) + m_memory = new QSharedMemory(native_key); +#else m_memory = new QSharedMemory(m_unique); +#endif bool is_server = false; const qint64 pid = QCoreApplication::applicationPid(); struct Data { qint64 pid; }; @@ -217,7 +232,7 @@ if (form && parse_args(QString(data).split(' '))) form->apply_args(this); // Just make it always shows up fine... - if (m_widget && !m_start_minimized) { + if (m_widget) { m_widget->hide(); m_widget->show(); m_widget->raise(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/qpwgraph_canvas.cpp new/qpwgraph-v0.4.5/src/qpwgraph_canvas.cpp --- old/qpwgraph-v0.4.2/src/qpwgraph_canvas.cpp 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/qpwgraph_canvas.cpp 2023-07-10 17:37:36.000000000 +0200 @@ -273,8 +273,7 @@ qpwgraph_node *node = static_cast<qpwgraph_node *> (item); if (node) { m_nodes.append(node); - m_node_ids.insert(qpwgraph_node::NodeIdKey(node), node); - m_node_keys.insert(qpwgraph_node::NodeNameKey(node), node); + addNodeKeys(node); if (restoreNode(node)) emit updated(node); else @@ -305,10 +304,10 @@ if (node && saveNode(node)) { emit removed(node); node->removePorts(); - m_node_keys.remove(qpwgraph_node::NodeNameKey(node)); - m_node_ids.remove(qpwgraph_node::NodeIdKey(node)); - m_nodes.removeAll(node); + removeNodeKeys(node); } + if (node) + m_nodes.removeAll(node); } else if (item->type() == qpwgraph_port::Type) { @@ -519,10 +518,24 @@ } +void qpwgraph_canvas::releaseNode ( qpwgraph_node *node ) +{ + removeNodeKeys(node); + + node->setMarked(false); +} + + // Port (dis)connections dispatcher. void qpwgraph_canvas::emitConnectPorts ( qpwgraph_port *port1, qpwgraph_port *port2, bool is_connect ) { + if (m_patchbay_edit && !m_patchbay_autopin && is_connect) { + qpwgraph_connect *connect = port1->findConnect(port2); + if (connect) + connect->setDimmed(true); + } + if (m_patchbay && (m_patchbay_autopin || !is_connect)) m_patchbay->connectPorts(port1, port2, is_connect); @@ -1292,6 +1305,9 @@ // const qpwgraph_node::NodeNameKey name_key(node); const int n = m_node_keys.values(name_key).count(); + if (n < 1) + return false; + const QString& node_key = nodeKey(node, n); m_settings->beginGroup(NodeAliasesGroup); @@ -1503,6 +1519,20 @@ } +void qpwgraph_canvas::addNodeKeys ( qpwgraph_node *node ) +{ + m_node_ids.insert(qpwgraph_node::NodeIdKey(node), node); + m_node_keys.insert(qpwgraph_node::NodeNameKey(node), node); +} + + +void qpwgraph_canvas::removeNodeKeys ( qpwgraph_node *node ) +{ + m_node_keys.remove(qpwgraph_node::NodeNameKey(node)); + m_node_ids.remove(qpwgraph_node::NodeIdKey(node)); +} + + // Graph port colors management. void qpwgraph_canvas::setPortTypeColor ( uint port_type, const QColor& port_color ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/qpwgraph_canvas.h new/qpwgraph-v0.4.5/src/qpwgraph_canvas.h --- old/qpwgraph-v0.4.2/src/qpwgraph_canvas.h 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/qpwgraph_canvas.h 2023-07-10 17:37:36.000000000 +0200 @@ -120,6 +120,8 @@ QList<qpwgraph_node *> findNodes( const QString& name, qpwgraph_item::Mode mode, uint type = 0) const; + void releaseNode(qpwgraph_node *node); + // Whether it's in the middle of something... bool isBusy() const; @@ -242,6 +244,9 @@ QString nodeKey(qpwgraph_node *node, int n = 0) const; QString portKey(qpwgraph_port *port, int n = 0) const; + void addNodeKeys(qpwgraph_node *node); + void removeNodeKeys(qpwgraph_node *node); + // Zoom in rectangle range. void zoomFitRange(const QRectF& range_rect); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/qpwgraph_pipewire.cpp new/qpwgraph-v0.4.5/src/qpwgraph_pipewire.cpp --- old/qpwgraph-v0.4.2/src/qpwgraph_pipewire.cpp 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/qpwgraph_pipewire.cpp 2023-07-10 17:37:36.000000000 +0200 @@ -96,7 +96,7 @@ { Node (uint node_id) : Object(node_id, Type::Node) {} - enum Types { + enum NodeType { None = 0, Audio = 1, Video = 2, @@ -105,9 +105,11 @@ QString node_name; qpwgraph_item::Mode node_mode; - Types node_types; + NodeType node_type; QList<qpwgraph_pipewire::Port *> node_ports; QIcon node_icon; + QString media_name; + bool node_changed; bool node_ready; }; @@ -167,6 +169,7 @@ if (p->pending_seq == 0) spa_list_append(&pd->pending, &p->pending_link); p->pending_seq = pw_core_sync(pd->core, 0, p->pending_seq); + pd->pending_seq = p->pending_seq; } static @@ -189,11 +192,11 @@ if (object && object->p) { info = pw_node_info_update((struct pw_node_info *)object->p->info, info); object->p->info = (void *)info; - // Add media.name to node name, settle node icon, if any... - if (object->p->info) { + // Get node icon and media.name, if any... + if (info && (info->change_mask & PW_NODE_CHANGE_MASK_PROPS)) { qpwgraph_pipewire::Node *node = static_cast<qpwgraph_pipewire::Node *> (object); - if (node && !node->node_ready) { + if (node) { QIcon node_icon; const char *icon_name = spa_dict_lookup(info->props, PW_KEY_APP_ICON_NAME); @@ -206,26 +209,26 @@ = spa_dict_lookup(info->props, PW_KEY_CLIENT_API); if (client_api && ::strlen(client_api) > 0) { if (::strcmp(client_api, "jack") == 0 || - ::strcmp(client_api, "pipewire-jack") == 0) + ::strcmp(client_api, "pipewire-jack") == 0) { node_icon = qpwgraph_icon(":images/itemJack.png"); + } else if (::strcmp(client_api, "pulse") == 0 || - ::strcmp(client_api, "pipewire-pulse") == 0) + ::strcmp(client_api, "pipewire-pulse") == 0) { node_icon = qpwgraph_icon(":images/itemPulse.png"); + } } } if (!node_icon.isNull()) node->node_icon = node_icon; const char *media_name = spa_dict_lookup(info->props, PW_KEY_MEDIA_NAME); - if (media_name && ::strlen(media_name) > 0) { - QString& node_name = node->node_name; - node_name += ' '; - node_name += '['; - node_name += media_name; - node_name += ']'; - } + if (media_name && ::strlen(media_name) > 0) + node->media_name = media_name; + node->node_changed = true; node->node_ready = true; + if (object->p->pw) + object->p->pw->changedNotify(); } } } @@ -463,7 +466,7 @@ if (str) port_type = qpwgraph_item::itemType(str); else - if (n && n->node_types == qpwgraph_pipewire::Node::Video) + if (n && n->node_type == qpwgraph_pipewire::Node::Video) port_type = qpwgraph_pipewire::videoPortType(); qpwgraph_item::Mode port_mode = qpwgraph_item::None; str = spa_dict_lookup(props, PW_KEY_PORT_DIRECTION); @@ -654,6 +657,7 @@ m_data = new Data; spa_zero(*m_data); spa_list_init(&m_data->pending); + m_data->pending_seq = 0; m_data->loop = pw_thread_loop_new("qpwgraph_thread_loop", nullptr); if (m_data->loop == nullptr) { @@ -924,12 +928,35 @@ } } + if (*node && n->node_changed) { + canvas()->releaseNode(*node); + *node = nullptr; + } + if (*node) *port = (*node)->findPort(port_id, port_mode, port_type); if (add_new && *node == nullptr) { - *node = new qpwgraph_node(node_id, n->node_name, node_mode, node_type); + QString node_name = n->node_name; + if ((p->port_flags & Port::Physical) == Port::None) { + if (p->port_flags & Port::Monitor) { + node_name += ' '; + node_name += "[Monitor]"; + } + if (p->port_flags & Port::Control) { + node_name += ' '; + node_name += "[Control]"; + } + if (!n->media_name.isEmpty()) { + node_name += ' '; + node_name += '['; + node_name += n->media_name; + node_name += ']'; + } + } + *node = new qpwgraph_node(node_id, node_name, node_mode, node_type); (*node)->setNodeIcon(n->node_icon); + n->node_changed = false; qpwgraph_sect::addItem(*node); } @@ -1162,13 +1189,14 @@ uint node_id, const QString& node_name, qpwgraph_item::Mode node_mode, - uint node_types ) + uint node_type ) { Node *node = new Node(node_id); node->node_name = node_name; node->node_mode = node_mode; - node->node_types = Node::Types(node_types); + node->node_type = Node::NodeType(node_type); node->node_icon = qpwgraph_icon(":/images/itemPipewire.png"); + node->node_changed = false; node->node_ready = false; addObjectEx(node_id, node); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qpwgraph-v0.4.2/src/qpwgraph_pipewire.h new/qpwgraph-v0.4.5/src/qpwgraph_pipewire.h --- old/qpwgraph-v0.4.2/src/qpwgraph_pipewire.h 2023-04-02 11:40:12.000000000 +0200 +++ new/qpwgraph-v0.4.5/src/qpwgraph_pipewire.h 2023-07-10 17:37:36.000000000 +0200 @@ -104,7 +104,7 @@ uint node_id, const QString& node_name, qpwgraph_item::Mode node_mode, - uint node_types); + uint node_type); void destroyNode(Node *node); // Port methods....
