Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qarma for openSUSE:Factory checked in at 2026-04-10 17:53:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qarma (Old) and /work/SRC/openSUSE:Factory/.qarma.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qarma" Fri Apr 10 17:53:30 2026 rev:2 rq:1345716 version:1.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/qarma/qarma.changes 2025-01-14 16:23:26.843993869 +0100 +++ /work/SRC/openSUSE:Factory/.qarma.new.21863/qarma.changes 2026-04-10 18:02:53.350303361 +0200 @@ -1,0 +2,9 @@ +Thu Apr 9 23:52:03 UTC 2026 - Shawn Dunn <[email protected]> + +- Update to 1.1.1 + * handle print column default value for lists + (gh#luebking/qarma#66) + * Mention --help-font-selection in --help (gh#luebking/qarma#53) + * Make DBus optional (gh#luebking/qarma#33) + +------------------------------------------------------------------- Old: ---- qarma-1.0.0.tar.gz New: ---- qarma-1.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qarma.spec ++++++ --- /var/tmp/diff_new_pack.FHIE56/_old 2026-04-10 18:02:54.062332730 +0200 +++ /var/tmp/diff_new_pack.FHIE56/_new 2026-04-10 18:02:54.066332895 +0200 @@ -17,7 +17,7 @@ Name: qarma -Version: 1.0.0 +Version: 1.1.1 Release: 0 Summary: Tool for creating Qt dialog boxes License: GPL-2.0-Only ++++++ qarma-1.0.0.tar.gz -> qarma-1.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qarma-1.0.0/Qarma.cpp new/qarma-1.1.1/Qarma.cpp --- old/qarma-1.0.0/Qarma.cpp 2024-04-19 14:32:24.000000000 +0200 +++ new/qarma-1.1.1/Qarma.cpp 2026-04-06 17:21:21.000000000 +0200 @@ -24,16 +24,20 @@ #include <QCheckBox> #include <QColorDialog> #include <QComboBox> +#include <QCryptographicHash> #include <QDate> +#ifndef QARMA_NO_DBUS #include <QDBusConnection> #include <QDBusConnectionInterface> #include <QDBusInterface> +#endif #include <QDialogButtonBox> #include <QEvent> #include <QFileDialog> #include <QFontDialog> #include <QFormLayout> #include <QIcon> +#include <QImageReader> #include <QInputDialog> #include <QLabel> #include <QLocale> @@ -42,12 +46,15 @@ #include <QProcess> #include <QProgressDialog> #include <QPropertyAnimation> +#include <QProxyStyle> #include <QPushButton> #include <QScreen> #include <QScrollBar> #include <QSettings> #include <QSlider> #include <QSocketNotifier> +#include <QSplitter> +#include <QStandardPaths> #include <QStringBuilder> #include <QStringList> #include <QTextBrowser> @@ -70,6 +77,10 @@ #include <unistd.h> #endif +#define QARMA_VERSION "1.1.0" +#define ZENITY_VERSION "4.2.1" + + #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) #define SKIP_EMPTY Qt::SkipEmptyParts #else @@ -180,6 +191,7 @@ , m_type(Invalid) { m_pos = QPoint(INT_MAX, INT_MAX); // invalid + m_size = QSize(0,0); // so we can reasonably use isNull … QStringList argList = QCoreApplication::arguments(); // arguments() is slow const QString binary = argList.at(0); m_zenity = binary.endsWith("zenity"); @@ -271,6 +283,9 @@ } else if (arg == "--dzen") { m_type = Dzen; error = showDzen(args); + } else if (arg == "--version") { + printf("%s\n", m_zenity ? ZENITY_VERSION : QARMA_VERSION); + exit(0); } if (error != 1) { break; @@ -365,12 +380,18 @@ m_dialog->setWindowIcon(QIcon(m_icon)); QDialogButtonBox *box = m_dialog->findChild<QDialogButtonBox*>(); if (box && !m_ok.isNull()) { - if (QPushButton *btn = box->button(QDialogButtonBox::Ok)) + if (QPushButton *btn = box->button(QDialogButtonBox::Ok)) { btn->setText(m_ok); + if (m_ok.isEmpty()) + btn->hide(); + } } if (box && !m_cancel.isNull()) { - if (QPushButton *btn = box->button(QDialogButtonBox::Cancel)) + if (QPushButton *btn = box->button(QDialogButtonBox::Cancel)) { btn->setText(m_cancel); + if (m_cancel.isEmpty()) + btn->hide(); + } } if (m_parentWindow) { #ifdef WS_X11 @@ -538,16 +559,34 @@ QTreeWidget *tw = sender()->findChild<QTreeWidget*>(); QStringList result; if (tw) { + QVariant v = sender()->property("qarma_print_column"); + int column = 1; + if (v.isValid()) { + column = v.toString() == "ALL" ? -1 : v.toInt(); + if (column > tw->columnCount()) + column = -1; + else if (column > 0) + --column; + } bool done(false); + auto text = [=](const QTreeWidgetItem *twi, int col, int offset) { + if (col > -1) + return (col < offset) ? QString() : twi->text(col); + QString s; + for (int i = offset; i < tw->columnCount()-1; ++i) + s += twi->text(i) + '\t'; + s += twi->text(tw->columnCount()-1); + return s; + }; foreach (const QTreeWidgetItem *twi, tw->selectedItems()) { done = true; - result << twi->text(0); + result << text(twi, column, 0); } if (!done) { // checkable for (int i = 0; i < tw->topLevelItemCount(); ++i) { const QTreeWidgetItem *twi = tw->topLevelItem(i); if (twi->checkState(0) == Qt::Checked) - result << twi->text(1); + result << text(twi, column, 1); } } } @@ -765,20 +804,154 @@ args.at(i) != "--warning" && args.at(i) != "--error") qDebug() << "unspecific argument" << args.at(i); } - if (QLabel *l = dlg->findChild<QLabel*>("qt_msgbox_label")) { - l->setWordWrap(wrap); - l->setTextFormat(html ? Qt::RichText : Qt::PlainText); + QLabel *msgLabel = dlg->findChild<QLabel*>("qt_msgbox_label"); + if (msgLabel) { + // this is pointless because QMessageBox fucks around with that when applying its size constraints, see below +// msgLabel->setWordWrap(wrap); + msgLabel->setTextFormat(html ? Qt::RichText : Qt::PlainText); if (m_selectableLabel) - l->setTextInteractionFlags(l->textInteractionFlags()|Qt::TextSelectableByMouse); + msgLabel->setTextInteractionFlags(msgLabel->textInteractionFlags()|Qt::TextSelectableByMouse); } if (dlg->iconPixmap().isNull()) dlg->setIcon(type == 'w' ? QMessageBox::Warning : (type == 'q' ? QMessageBox::Question : (type == 'e' ? QMessageBox::Critical : QMessageBox::Information))); SHOW_DIALOG + // **** grrrrrrrr ***** + // https://github.com/luebking/qarma/issues/62 + // https://runebook.dev/en/docs/qt/qmessagebox/resizeEvent + // the suggested spacer however doesn't work, but Qt allows us to fix the size after the show event + // + // still a lousy hack which might run into windowmanager related problems + if (!(wrap && m_size.isNull()) && msgLabel) { + if (m_size.width() > 0 && dlg->width() <= 500) { + // QMessageBox unconditionally disables wrapping for dialogs < 500px width, so don't try to shrink those + m_size.setWidth(qMax(m_size.width(), dlg->width())); + } + // figure the dimensions of the dialog if the label wasn't there + QLabel *icnLabel = dlg->findChild<QLabel*>("qt_msgboxex_icon_label"); + QSize delta = msgLabel->size(); + // we need to account for the icon left of the label - if that's taller than the label + // it dictates the labels effective height + if (icnLabel) + delta.setHeight(qMax(delta.height(), icnLabel->height())); + // delta is now the virtual label size, subtract if from the dialog + delta = dlg->size() - delta; + QRect r; + QMargins marge = msgLabel->contentsMargins() + QMargins(4,4,4,4); + if (!wrap) { + r = msgLabel->fontMetrics().boundingRect(msgLabel->text()); + } else if (m_size.width() < 1 || m_size.height() < 1) { + // likewise we can apply unilateral --width/--height + r = QRect(0,0,QWIDGETSIZE_MAX,QWIDGETSIZE_MAX); + if (m_size.width() > 0) + r.setWidth(m_size.width() - delta.width()); + r = msgLabel->fontMetrics().boundingRect(r, Qt::TextWordWrap, msgLabel->text()); + if (m_size.height() > 0) { + // for only fixed height, calculate the line count and overguess the necessary columns + r.setHeight(m_size.height() - delta.height()); + int lines = qMax(1, r.height()/msgLabel->fontMetrics().lineSpacing()); + r.setWidth(3*r.width()/(2*lines)); // generous 50% overhead to account for word wrapping, better the dialog is a bit wider than missing text + } + } else { // or completely fixed size + r.setSize(m_size); + delta = QSize(0,0); + marge = QMargins(); + } + m_size = QSize(0,0); // reset so the global size adjustment doesn't apply + r.setWidth(r.width() + marge.left()+marge.right()); + r.setHeight(r.height() + marge.top()+marge.bottom()); + // if there's an icon, our new label, regardless of the widths sufficient for one unwrapped line, gets at least its height + if (icnLabel) + r.setHeight(qMax(r.height(), icnLabel->height())); + dlg->setFixedSize(delta + r.size()); + // here's the catch - the WM migth think the pre-showing size is mandatory + // (probably race condition between window mapping and the size fix and the WM handling client messages) + // so we briefly wait (100ms is a complete random time) and set the current size again to get the WM up to speed + for (int ms = 2; ms < 150; ms*=2) { + QTimer::singleShot(ms, this, [=]() {dlg->setFixedSize(delta + r.size());}); + } + } return 0; } +QPixmap thumbnail(const QString &path, uint size) +{ + size = qMin(size, 1024u); + QImage thumb; + QImageReader thumbReader; + thumbReader.setFileName(path); + if (!thumbReader.canRead()) + return QPixmap(); + + thumbReader.setQuality(50); + QSize sz = thumbReader.size(); + QSize origSz = sz; + bool skipThumbnail = sz.width()*sz.height() < 1920*1200+1; + + if (skipThumbnail) { + sz.scale(QSize(size,size), Qt::KeepAspectRatio); + thumbReader.setScaledSize(sz); + } else { + QFileInfo info(path); + QString canonicalPath = info.canonicalFilePath(); + if (canonicalPath.isEmpty()) + canonicalPath = info.absoluteFilePath(); + QUrl url = QUrl::fromLocalFile(canonicalPath); + QCryptographicHash md5(QCryptographicHash::Md5); + md5.addData(QFile::encodeName(url.adjusted(QUrl::RemovePassword).url())); + + QString folder; + uint tSize; + if (size <= 128) { + tSize = 128; folder = "normal/"; + } else if (size <= 256) { + tSize = 256; folder = "large/"; + } else if (size <= 512) { + tSize = 512; folder = "x-large/"; + } else { + tSize = 1024; folder = "xx-large/"; + } + Q_UNUSED(tSize); + + const QString thumbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + + QLatin1String("/thumbnails/") + folder + + QString::fromLatin1(md5.result().toHex()) + QStringLiteral(".png"); + QFileInfo tInfo(thumbPath); + if (tInfo.exists() && info.metadataChangeTime() <= tInfo.lastModified() && info.lastModified() <= tInfo.lastModified()) { + thumbReader.setFileName(thumbPath); + sz.scale(QSize(size,size), Qt::KeepAspectRatio); + thumbReader.setScaledSize(sz); + if (thumbReader.read(&thumb)) { + int w = thumb.text("Thumb::Image::Width").toInt(); + int h = thumb.text("Thumb::Image::Height").toInt(); + if (origSz == QSize(w, h)) + return QPixmap::fromImage(thumb); + } + } + thumbReader.setFileName(path); +// sz.scale(QSize(tSize,tSize), Qt::KeepAspectRatio); // in case we'll ever store the thumbnail + sz.scale(QSize(size,size), Qt::KeepAspectRatio); + thumbReader.setScaledSize(sz); + } + if (!thumbReader.read(&thumb)) + return QPixmap(); +// if (skipThumbnail) + return QPixmap::fromImage(thumb); +} + +class DblClckStyle : public QProxyStyle +{ + public: + int styleHint(StyleHint hint, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override + { + if (hint == QStyle::SH_ItemView_ActivateItemOnSingleClick) + return false; + return QProxyStyle::styleHint(hint, option, widget, returnData); + } +}; + char Qarma::showFileSelection(const QStringList &args) { QFileDialog *dlg = new QFileDialog; @@ -821,6 +994,17 @@ if (idx > -1) mimeFilter = mimeFilter.left(idx).trimmed() + " (" + mimeFilter.mid(idx+1).trimmed() + ")"; mimeFilters << mimeFilter; + } else if (args.at(i) == "--preview-images") { + READ_INT(size, UInt, "--preview-images must be followed by a positive number for the thumbnail size"); + dlg->setOption(QFileDialog::DontUseNativeDialog); + if (QSplitter *splitter = dlg->findChild<QSplitter*>()) { + qApp->setStyle(new DblClckStyle); + QLabel *preview = new QLabel(splitter); + splitter->addWidget(preview); + connect(dlg, &QFileDialog::currentChanged, [=](const QString &path) { + preview->setPixmap(thumbnail(path, size)); + }); + } } else { WARN_UNKNOWN_ARG("--file-selection") } } @@ -863,7 +1047,7 @@ flags |= Qt::ItemIsEditable; if (checkable) { flags |= Qt::ItemIsUserCheckable; - item->setCheckState(0, Qt::Unchecked); + item->setCheckState(0, QVariant(item->text(0)).toBool() ? Qt::Checked : Qt::Unchecked); } if (icons) item->setIcon(0, QPixmap(item->text(0))); @@ -913,7 +1097,7 @@ if (ok) hiddenCols << v-1; } else if (args.at(i) == "--print-column") { - qWarning("TODO: --print-column"); + dlg->setProperty("qarma_print_column", NEXT_ARG); } else if (args.at(i) == "--checklist") { tw->setSelectionMode(QAbstractItemView::NoSelection); tw->setAllColumnsShowFocus(false); @@ -943,8 +1127,10 @@ if (values.isEmpty()) listenToStdIn(); - if (checkable) + if (checkable) { + tw->setCurrentItem(nullptr); editable = false; + } tw->setProperty("qarma_list_flags", int(editable | checkable << 1 | icons << 2)); @@ -969,6 +1155,7 @@ void Qarma::notify(const QString message, bool noClose) { +#ifndef QARMA_NO_DBUS if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.freedesktop.Notifications")) { QDBusInterface notifications("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); const QString summary = (message.length() < 32) ? message : message.left(25) + "..."; @@ -1000,6 +1187,7 @@ SHOW_DIALOG dlg->adjustSize(); dlg->move(QGuiApplication::screens().at(0)->availableGeometry().topRight() - QPoint(dlg->width() + 20, -20)); +#endif } char Qarma::showNotification(const QStringList &args) @@ -1052,12 +1240,14 @@ if (notifier) notifier->setEnabled(false); - QByteArray ba = m_type == TextInfo ? gs_stdin->readAll() : gs_stdin->readLine(); + QByteArray ba = (m_type == TextInfo || m_type == List) ? gs_stdin->readAll() : gs_stdin->readLine(); if (ba.isEmpty() && notifier) { gs_stdin->close(); // gs_stdin->deleteLater(); // hello segfault... // gs_stdin = NULL; notifier->deleteLater(); + if (m_type == Progress) + finishProgress(); return; } @@ -1167,31 +1357,30 @@ addItems(tw, input, twflags & 1, twflags & 1<<1, twflags & 1<<2); } } else if (m_type == Dzen) { - while (true) { - ba = gs_stdin->read(8192); - if (ba.isEmpty()) - break; - newText = QString::fromLocal8Bit(ba); - if (newText.endsWith('\n')) - newText.resize(newText.length()-1); - input.append(newText.split('\n')); - if (ba.size() < 8192) /** @todo: if the input block is exactly 8kB, we're gonna wait for the next one here */ - break; - } -// if (input.isEmpty()) -// return; QLabel *header = m_dialog->findChild<QLabel*>("header"); QLabel *body = m_dialog->findChild<QLabel*>("body"); if (body) { - if (header->text().isEmpty() || m_dialog->property("unified").toBool()) + const int lines = body->property("lines").toInt(); + const bool unified = m_dialog->property("unified").toBool(); + for (int i = unified ? 0 : 1; i < lines; ++i) + input.append(QString::fromLocal8Bit(gs_stdin->readLine())); +// qDebug() << input; + if (header->text().isEmpty() || unified) { +// qDebug() << header->text().isEmpty() << m_dialog->property("unified").toBool() << "set header text"; header->setText(input.takeFirst()); + } if (!input.isEmpty()) { +// qDebug() << "have more input"; QStringList oldBody = body->text().split('\n'); +// qDebug() << oldBody; oldBody.append(input); - const int idx = qMax(0, oldBody.count() - body->property("lines").toInt()); +// qDebug() << "=>" << oldBody; + const int idx = qMax(0, oldBody.count() - lines); +// qDebug() << "==>" << oldBody.mid(idx); body->setText(oldBody.mid(idx).join('\n')); } } else { +// qDebug() << "just set header"; header->setText(input.constLast()); } } @@ -1520,9 +1709,21 @@ QStringList lastListValues, lastListColumns, lastComboValues; bool lastListHeader(false); QComboBox *lastCombo = NULL; + QLineEdit *lastEntry = nullptr; + QString lastEntryValue; for (int i = 0; i < args.count(); ++i) { if (args.at(i) == "--add-entry") { - fl->addRow(NEXT_ARG, new QLineEdit(dlg)); + fl->addRow(NEXT_ARG, lastEntry = new QLineEdit(dlg)); + lastEntry->setText(lastEntryValue); + lastEntry->setPlaceholderText(lastEntryValue); + } else if (args.at(i) == "--entry-value") { + lastEntryValue = NEXT_ARG; + if (lastEntry) { + lastEntry->setText(lastEntryValue); + lastEntry->setPlaceholderText(lastEntryValue); + lastEntryValue.clear(); + lastEntry = nullptr; + } } else if (args.at(i) == "--add-password") { QLineEdit *le; fl->addRow(NEXT_ARG, le = new QLineEdit(dlg)); @@ -1617,8 +1818,10 @@ vl->addWidget(header = new QLabel(dlg)); header->setObjectName("header"); header->setAlignment(Qt::AlignCenter); + header->setMargin(6); vl->addWidget(body = new QLabel(dlg)); body->setObjectName("body"); + body->setMargin(8); QPalette pal = dlg->palette(); @@ -1642,13 +1845,6 @@ pal.setColor(cg, QPalette::Base, c); pal.setColor(cg, QPalette::Window, c); } - } else if (args.at(i) == "-bg") { - QColor c(NEXT_ARG); - for (int i = 0; i < 3; ++i) { // Disabled, Active, Inactive, Normal - QPalette::ColorGroup cg = (QPalette::ColorGroup)i; - pal.setColor(cg, QPalette::Base, c); - pal.setColor(cg, QPalette::Window, c); - } } else if (args.at(i) == "-fn") { dlg->setFont(xftFont(NEXT_ARG)); } else if (args.at(i) == "-ta" || args.at(i) == "-sa") { @@ -1664,17 +1860,14 @@ READ_INT(lines, UInt, "-l(ines) expects a positive integer as next value"); body->setProperty("lines", lines); } else if (args.at(i) == "-x") { - READ_INT(x, UInt, "-x expects a positive integer as next value"); + READ_INT(x, Int, "-x expects a positive integer as next value"); m_pos.setX(x); } else if (args.at(i) == "-y") { - READ_INT(y, UInt, "-y expects a positive integer as next value"); + READ_INT(y, Int, "-y expects a positive integer as next value"); m_pos.setY(y); } else if (args.at(i) == "-w") { READ_INT(w, UInt, "-w expects a positive integer as next value"); m_size.setWidth(w); - } else if (args.at(i) == "-l") { - READ_INT(lines, UInt, "-l(ines) expects a positive integer as next value"); - body->setProperty("lines", lines); } else if (args.at(i) == "-p") { suicide = -1; if (i+1 < args.count()) { @@ -1764,15 +1957,17 @@ Help("--help-scale", tr("Show scale options")) << Help("--help-text-info", tr("Show text information options")) << Help("--help-color-selection", tr("Show color selection options")) << + Help("--help-font-selection", tr("Show font selection options")) << Help("--help-password", tr("Show password dialog options")) << Help("--help-forms", tr("Show forms dialog options")) << + Help("--help-dzen", tr("Show dzen options")) << Help("--help-misc", tr("Show miscellaneous options")) << Help("--help-qt", tr("Show Qt Options"))); helpDict["general"] = CategoryHelp(tr("General options"), HelpList() << Help("--title=TITLE", tr("Set the dialog title")) << Help("--window-icon=ICONPATH", tr("Set the window icon")) << - Help("--width=WIDTH", tr("Set the width")) << - Help("--height=HEIGHT", tr("Set the height")) << + Help("--width=WIDTH", tr("Set the width") + tr(" (not entirely deterministic for message dialogs)")) << + Help("--height=HEIGHT", tr("Set the height") + tr(" (not entirely deterministic for message dialogs)")) << Help("--pos=[+-]x[(+-)y]", "QARMA ONLY! " + tr("Set the position")) << Help("--timeout=TIMEOUT", tr("Set dialog timeout in seconds")) << Help("--ok-label=TEXT", tr("Sets the label of the Ok button")) << @@ -1815,7 +2010,8 @@ Help("--save", tr("Activate save mode")) << Help("--separator=SEPARATOR", tr("Set output separator character")) << Help("--confirm-overwrite", tr("Confirm file selection if filename already exists")) << - Help("--file-filter=NAME | PATTERN1 PATTERN2 ...", tr("Sets a filename filter"))); + Help("--file-filter=NAME | PATTERN1 PATTERN2 ...", tr("Sets a filename filter")) << + Help("--preview-images=SIZE", "QARMA ONLY! " + tr("Show image thumbnails of SIZE"))); helpDict["list"] = CategoryHelp(tr("List Command\n %1 --list [Options] [Item1 ...]\nList Options").arg(applicationName()), HelpList() << Help("--text=TEXT", tr("Set the dialog text")) << Help("--column=COLUMN", tr("Set the column header")) << @@ -1887,6 +2083,7 @@ Help("--prompt=TEXT", "QARMA ONLY! " + tr("The prompt for the user"))); helpDict["forms"] = CategoryHelp(tr("Forms dialog options"), HelpList() << Help("--add-entry=Field name", tr("Add a new Entry in forms dialog")) << + Help("--entry-value=TEXT", "QARMA ONLY! " + tr("Preset text for the last entry")) << Help("--add-password=Field name", tr("Add a new Password Entry in forms dialog")) << Help("--add-calendar=Calendar field name", tr("Add a new Calendar in forms dialog")) << Help("--add-list=List field and header name", tr("Add a new List in forms dialog")) << @@ -1899,12 +2096,32 @@ Help("--separator=SEPARATOR", tr("Set output separator character")) << Help("--forms-date-format=PATTERN", tr("Set the format for the returned date")) << Help("--add-checkbox=Checkbox label", "QARMA ONLY! " + tr("Add a new Checkbox forms dialog"))); + helpDict["dzen"] = CategoryHelp(tr("Dzen options"), HelpList() << + Help("-fg <color>", tr("Set foreground color. Either as symbolic name (e.g. red, darkgreen, etc.) or as #rrggbb hex-value.")) << + Help("-bg <color>", tr("Set background color (same format as -fg).")) << + Help("-fn <font>", tr("Set font (using the format of xlsfonts and xfontsel).")) << + Help("-ta <l|c|r>", tr("Set alignement of title window content: l(eft), c(center) or r(ight).")) << + Help("-sa <l|c|r>", tr("Set alignment of slave window (see -ta ).")) << + Help("-l <lines>", tr("Number of lines to display in slave window.")) << + Help("-u", tr("Update contents of title and slave window simultaneously.")) << + Help("-p [<timeout>]", tr("Persist EOF (optional timeout in seconds).")) << + Help("-x <pixels>", tr("Set x position on the screen.")) << + Help("-y <pixels>", tr("Set y position on the screen.")) << + Help("-w <pixels>", tr("width"))); helpDict["misc"] = CategoryHelp(tr("Miscellaneous options"), HelpList() << Help("--about", tr("About Qarma")) << Help("--version", tr("Print version"))); helpDict["qt"] = CategoryHelp(tr("Qt options"), HelpList() << - Help("--foo", tr("Foo")) << - Help("--bar", tr("Bar"))); + Help("-platform <platformName[:options]>", tr("specifies the Qt Platform Abstraction (QPA) plugin")) << + Help("-platformpluginpath <path>", tr("specifies the path to platform plugins")) << + Help("-platformtheme <platformTheme>", tr("specifies the platform theme")) << + Help("-plugin <plugin>", tr("specifies additional plugins to load. Can appear multiple times")) << + Help("-qwindowgeometry <WxH+X+Y>", tr("specifies window geometry for the main window")) << + Help("-qwindowicon <icon>", tr("sets the default window icon")) << + Help("-qwindowtitle <title>", tr("sets the title of the first window")) << + Help("-reverse", tr("sets the application's layout direction to Qt::RightToLeft")) << + Help("-display <hostname:screen_number>", tr("switches displays on X11")) << + Help("-geometry <WxH+X+Y>", tr("same as -qwindowgeometry"))); helpDict["application"] = CategoryHelp(tr("Application Options"), HelpList() << Help("--calendar", tr("Display calendar dialog")) << Help("--entry", tr("Display text entry dialog")) << @@ -1922,6 +2139,7 @@ Help("--font-selection", "QARMA ONLY! " + tr("Display font selection dialog")) << Help("--password", tr("Display password dialog")) << Help("--forms", tr("Display forms dialog")) << + Help("--dzen", "QARMA ONLY! " + tr("Somewhat dzen compatible label")) << Help("--display=DISPLAY", tr("X display to use")) << Help("--class=CLASS", tr("Program class as used by the window manager")) << Help("--name=NAME", tr("Program name as used by the window manager"))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qarma-1.0.0/qarma.pro new/qarma-1.1.1/qarma.pro --- old/qarma-1.0.0/qarma.pro 2024-04-19 14:32:24.000000000 +0200 +++ new/qarma-1.1.1/qarma.pro 2026-04-06 17:21:21.000000000 +0200 @@ -1,11 +1,17 @@ HEADERS = Qarma.h SOURCES = Qarma.cpp -QT += dbus gui widgets +QT += gui widgets lessThan(QT_MAJOR_VERSION, 6){ unix:!macx:QT += x11extras } TARGET = qarma +DISABLE_DBUS { + DEFINES += QARMA_NO_DBUS +} else { + QT += dbus +} + unix:!macx:LIBS += -lX11 unix:!macx:DEFINES += WS_X11
