diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md
new file mode 100644
index 0000000..1f699f3
--- /dev/null
+++ b/.github/actions/spelling/README.md
@@ -0,0 +1,17 @@
+# check-spelling/check-spelling configuration
+
+File | Purpose | Format | Info
+-|-|-|-
+[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
+[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
+[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
+[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
+[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
+[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
+[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns)
+[line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
+[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
+[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
+
+Note: you can replace any of these files with a directory by the same name (minus the suffix)
+and then include multiple files inside that directory (with that suffix) to merge multiple files together.
diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md
new file mode 100644
index 0000000..a32d109
--- /dev/null
+++ b/.github/actions/spelling/advice.md
@@ -0,0 +1,31 @@
+
+If the flagged items are :exploding_head: false positives
+
+If items relate to a ...
+* binary file (or some other file you wouldn't want to check at all).
+
+ Please add a file path to the `excludes.txt` file matching the containing file.
+
+ File paths are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
+
+ `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
+../tree/HEAD/README.md) (on whichever branch you're using).
+
+* well-formed pattern.
+
+ If you can write a [pattern](
+https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
+) that would match it,
+ try adding it to the `patterns.txt` file.
+
+ Patterns are Perl 5 Regular Expressions - you can [test](
+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
+
+ Note that patterns can't match multiline strings.
+
+
+
+
+:steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling,
+please merge to your PR's base branch to get the version configured for your repository.
diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt
new file mode 100644
index 0000000..eac02a5
--- /dev/null
+++ b/.github/actions/spelling/allow.txt
@@ -0,0 +1,53 @@
+actionsearch
+appmenu
+appmenumodel
+appmenuwidget
+batterywidget
+blurwindow
+CMake
+cmake
+controlwidget
+cpp
+datetime
+datetimewidget
+dbusmenu
+dbusmenuimporter
+dbusmenushortcut
+dbusmenutypes
+dbustypes
+extensionwidget
+github
+https
+kde
+lineediteventfilter
+logout
+mainpanel
+mainwindow
+menubar
+menuimporter
+menuimporteradaptor
+pluginmanager
+pluginsinterface
+popupwindow
+pri
+qml
+qrc
+qtlocalpeer
+qtlockedfile
+qtsingleapplication
+qtsinglecoreapplication
+README
+src
+ssh
+statusnotifier
+statusnotifierbutton
+statusnotifieriteminterface
+statusnotifierwatcher
+statusnotifierwidget
+ubuntu
+unix
+utils
+volumewidget
+workarounds
+xml
+yml
diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns
new file mode 100644
index 0000000..25011ce
--- /dev/null
+++ b/.github/actions/spelling/candidate.patterns
@@ -0,0 +1,642 @@
+# marker to ignore all code on line
+^.*/\* #no-spell-check-line \*/.*$
+# marker to ignore all code on line
+^.*\bno-spell-check(?:-line|)(?:\s.*|)$
+
+# https://cspell.org/configuration/document-settings/
+# cspell inline
+^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b
+
+# patch hunk comments
+^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .*
+# git index header
+index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40}
+
+# file permissions
+['"`\s][-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s]
+
+# css url wrappings
+\burl\([^)]+\)
+
+# cid urls
+(['"])cid:.*?\g{-1}
+
+# data url in parens
+\(data:(?:[^) ][^)]*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\)
+# data url in quotes
+([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}
+# data url
+\bdata:[-a-zA-Z=;:/0-9+]*,\S*
+
+# https/http/file urls
+(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
+
+# mailto urls
+mailto:[-a-zA-Z=;:/?%&0-9+@._]{3,}
+
+# magnet urls
+magnet:[?=:\w]+
+
+# magnet urls
+"magnet:[^"]+"
+
+# obs:
+"obs:[^"]*"
+
+# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read
+# In this examples content, I'm using a number of different ways to match things to show various approaches
+# asciinema
+\basciinema\.org/a/[0-9a-zA-Z]+
+
+# asciinema v2
+^\[\d+\.\d+, "[io]", ".*"\]$
+
+# apple
+\bdeveloper\.apple\.com/[-\w?=/]+
+# Apple music
+\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+
+
+# appveyor api
+\bci\.appveyor\.com/api/projects/status/[0-9a-z]+
+# appveyor project
+\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+
+
+# Amazon
+
+# Amazon
+\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|)
+# AWS S3
+\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/%_?:=]*
+# AWS execute-api
+\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b
+# AWS ELB
+\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b
+# AWS SNS
+\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/%_?:=]*
+# AWS VPC
+vpc-\w+
+
+# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
+# YouTube url
+\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*
+# YouTube music
+\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*)
+# YouTube tag
+<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
+# YouTube image
+\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
+# Google Accounts
+\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]*
+# Google Analytics
+\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
+# Google APIs
+\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+
+# Google Storage
+\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
+# Google Calendar
+\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
+\w+\@group\.calendar\.google\.com\b
+# Google DataStudio
+\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
+# The leading `/` here is as opposed to the `\b` above
+# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
+# Google Docs
+/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|))
+# Google Drive
+\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]*
+# Google Groups
+\bgroups\.google\.com(?:/[a-z]+/(?:#!|)[^/\s"]+)*
+# Google Maps
+\bmaps\.google\.com/maps\?[\w&;=]*
+# Google themes
+themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+.
+# Google CDN
+\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
+# Goo.gl
+/goo\.gl/[a-zA-Z0-9]+
+# Google Chrome Store
+\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|)
+# Google Books
+\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=.]*
+# Google Fonts
+\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
+# Google Forms
+\bforms\.gle/\w+
+# Google Scholar
+\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+
+# Google Colab Research Drive
+\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]*
+
+# GitHub SHAs (api)
+\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b
+# GitHub SHAs (markdown)
+(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
+# GitHub SHAs
+\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b
+# GitHub SHA refs
+\[([0-9a-f]+)\]\(https://(?:www\.|)github.com/[-\w]+/[-\w]+/commit/\g{-1}[0-9a-f]*
+# GitHub wiki
+\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b
+# githubusercontent
+/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
+# githubassets
+\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+)
+# gist github
+\bgist\.github\.com/[^/\s"]+/[0-9a-f]+
+# git.io
+\bgit\.io/[0-9a-zA-Z]+
+# GitHub JSON
+"node_id": "[-a-zA-Z=;:/0-9+_]*"
+# Contributor
+\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\)
+# GHSA
+GHSA(?:-[0-9a-z]{4}){3}
+
+# GitLab commit
+\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b
+# GitLab merge requests
+\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b
+# GitLab uploads
+\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]*
+# GitLab commits
+\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b
+
+# binance
+accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]*
+
+# bitbucket diff
+\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+
+# bitbucket repositories commits
+\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
+# bitbucket commits
+\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+
+
+# bit.ly
+\bbit\.ly/\w+
+
+# bitrise
+\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]*
+
+# bootstrapcdn.com
+\bbootstrapcdn\.com/[-./\w]+
+
+# cdn.cloudflare.com
+\bcdnjs\.cloudflare\.com/[./\w]+
+
+# circleci
+\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+
+
+# gitter
+\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+
+
+# gravatar
+\bgravatar\.com/avatar/[0-9a-f]+
+
+# ibm
+[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]*
+
+# imgur
+\bimgur\.com/[^.]+
+
+# Internet Archive
+\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*)
+
+# discord
+/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}
+
+# Disqus
+\bdisqus\.com/[-\w/%.()!?&=_]*
+
+# medium link
+\blink\.medium\.com/[a-zA-Z0-9]+
+# medium
+\bmedium\.com/\@?[^/\s"]+/[-\w]+
+
+# microsoft
+\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]*
+# powerbi
+\bapp\.powerbi\.com/reportEmbed/[^"' ]*
+# vs devops
+\bvisualstudio.com(?::443|)/[-\w/?=%&.]*
+# microsoft store
+\bmicrosoft\.com/store/apps/\w+
+
+# mvnrepository.com
+\bmvnrepository\.com/[-0-9a-z./]+
+
+# now.sh
+/[0-9a-z-.]+\.now\.sh\b
+
+# oracle
+\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]*
+
+# chromatic.com
+/\S+.chromatic.com\S*[")]
+
+# codacy
+\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+
+
+# compai
+\bcompai\.pub/v1/png/[0-9a-f]+
+
+# mailgun api
+\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]*
+# mailgun
+\b[0-9a-z]+.mailgun.org
+
+# /message-id/
+/message-id/[-\w@./%]+
+
+# Reddit
+\breddit\.com/r/[/\w_]*
+
+# requestb.in
+\brequestb\.in/[0-9a-z]+
+
+# sched
+\b[a-z0-9]+\.sched\.com\b
+
+# Slack url
+slack://[a-zA-Z0-9?&=]+
+# Slack
+\bslack\.com/[-0-9a-zA-Z/_~?&=.]*
+# Slack edge
+\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+
+# Slack images
+\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+
+
+# shields.io
+\bshields\.io/[-\w/%?=&.:+;,]*
+
+# stackexchange -- https://stackexchange.com/feeds/sites
+\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/)
+
+# Sentry
+[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b
+
+# Twitter markdown
+\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\)
+# Twitter hashtag
+\btwitter\.com/hashtag/[\w?_=&]*
+# Twitter status
+\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)
+# Twitter profile images
+\btwimg\.com/profile_images/[_\w./]*
+# Twitter media
+\btwimg\.com/media/[-_\w./?=]*
+# Twitter link shortened
+\bt\.co/\w+
+
+# facebook
+\bfburl\.com/[0-9a-z_]+
+# facebook CDN
+\bfbcdn\.net/[\w/.,]*
+# facebook watch
+\bfb\.watch/[0-9A-Za-z]+
+
+# dropbox
+\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+
+
+# ipfs protocol
+ipfs://[0-9a-zA-Z]{3,}
+# ipfs url
+/ipfs/[0-9a-zA-Z]{3,}
+
+# w3
+\bw3\.org/[-0-9a-zA-Z/#.]+
+
+# loom
+\bloom\.com/embed/[0-9a-f]+
+
+# regex101
+\bregex101\.com/r/[^/\s"]+/\d+
+
+# figma
+\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+
+
+# freecodecamp.org
+\bfreecodecamp\.org/[-\w/.]+
+
+# image.tmdb.org
+\bimage\.tmdb\.org/[/\w.]+
+
+# mermaid
+\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+
+
+# Wikipedia
+\ben\.wikipedia\.org/wiki/[-\w%.#]+
+
+# gitweb
+[^"\s]+/gitweb/\S+;h=[0-9a-f]+
+
+# HyperKitty lists
+/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/
+
+# lists
+/thread\.html/[^"\s]+
+
+# list-management
+\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+
+
+# kubectl.kubernetes.io/last-applied-configuration
+"kubectl.kubernetes.io/last-applied-configuration": ".*"
+
+# pgp
+\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]*
+
+# Spotify
+\bopen\.spotify\.com/embed/playlist/\w+
+
+# Mastodon
+\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]*
+
+# scastie
+\bscastie\.scala-lang\.org/[^/]+/\w+
+
+# images.unsplash.com
+\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+
+
+# pastebin
+\bpastebin\.com/[\w/]+
+
+# heroku
+\b\w+\.heroku\.com/source/archive/\w+
+
+# quip
+\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)?
+
+# badgen.net
+\bbadgen\.net/badge/[^")\]'\s]+
+
+# statuspage.io
+\w+\.statuspage\.io\b
+
+# media.giphy.com
+\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+
+
+# tinyurl
+\btinyurl\.com/\w+
+
+# codepen
+\bcodepen\.io/[\w/]+
+
+# registry.npmjs.org
+\bregistry\.npmjs\.org/(?:@[^/"']+/|)[^/"']+/-/[-\w@.]+
+
+# getopts
+\bgetopts\s+(?:"[^"]+"|'[^']+')
+
+# ANSI color codes
+(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m
+
+# URL escaped characters
+\%[0-9A-F][A-F](?=[A-Za-z])
+# lower URL escaped characters
+\%[0-9a-f][a-f](?=[a-z]{2,})
+# IPv6
+\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b
+# c99 hex digits (not the full format, just one I've seen)
+0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP]
+# Punycode
+\bxn--[-0-9a-z]+
+# sha
+sha\d+:[0-9]*[a-f]{3,}[0-9a-f]*
+# sha-... -- uses a fancy capture
+(\\?['"]|")[0-9a-f]{40,}\g{-1}
+# hex runs
+\b[0-9a-fA-F]{16,}\b
+# hex in url queries
+=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?&
+# ssh
+(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,}
+
+# PGP
+\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b
+# GPG keys
+\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b
+# Well known gpg keys
+.well-known/openpgpkey/[\w./]+
+
+# pki
+-----BEGIN.*-----END
+
+# uuid:
+\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b
+# hex digits including css/html color classes:
+(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b
+# integrity
+integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1}
+
+# https://www.gnu.org/software/groff/manual/groff.html
+# man troff content
+\\f[BCIPR]
+# '/"
+\\\([ad]q
+
+# .desktop mime types
+^MimeTypes?=.*$
+# .desktop localized entries
+^[A-Z][a-z]+\[[a-z]+\]=.*$
+# Localized .desktop content
+Name\[[^\]]+\]=.*
+
+# IServiceProvider / isAThing
+\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+(?:[A-Z]|\b))
+
+# crypt
+(['"])\$2[ayb]\$.{56}\g{-1}
+
+# scrypt / argon
+\$(?:scrypt|argon\d+[di]*)\$\S+
+
+# go.sum
+\bh1:\S+
+
+# scala modules
+("[^"]+"\s*%%?\s*){2,3}"[^"]+"
+
+# Input to GitHub JSON
+content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1}
+
+# This does not cover multiline strings, if your repository has them,
+# you'll want to remove the `(?=.*?")` suffix.
+# The `(?=.*?")` suffix should limit the false positives rate
+# printf
+%(?:(?:(?:hh?|ll?|[jzt])?[diuoxn]|l?[cs]|L?[fega]|p)(?=[a-z]{2,})|(?:X|L?[FEGA]|p)(?=[a-zA-Z]{2,}))(?!%)(?=[_a-zA-Z]+(?!%)\b)(?=.*?['"])
+
+# Python string prefix / binary prefix
+# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings
+(?|m([|!/@#,;']).*?\g{-1})
+
+# perl qr regex
+(?|\(.*?\)|([|!/@#,;']).*?\g{-1})
+
+# perl run
+perl(?:\s+-[a-zA-Z]\w*)+
+
+# Go regular expressions
+regexp?\.MustCompile\(`[^`]*`\)
+
+# regex choice
+\(\?:[^)]+\|[^)]+\)
+
+# proto
+^\s*(\w+)\s\g{-1} =
+
+# sed regular expressions
+sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2}
+
+# node packages
+(["'])\@[^/'" ]+/[^/'" ]+\g{-1}
+
+# go install
+go install(?:\s+[a-z]+\.[-@\w/.]+)+
+
+# jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571
+urn:shemas-jetbrains-com
+
+# kubernetes pod status lists
+# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase
+\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+
+
+# kubectl - pods in CrashLoopBackOff
+\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+
+
+# kubernetes object suffix
+-[0-9a-f]{10}-\w{5}\s
+
+# posthog secrets
+([`'"])phc_[^"',]+\g{-1}
+
+# xcode
+
+# xcodeproject scenes
+(?:Controller|destination|ID|id)="\w{3}-\w{2}-\w{3}"
+
+# xcode api botches
+customObjectInstantitationMethod
+
+# configure flags
+.* \| --\w{2,}.*?(?=\w+\s\w+)
+
+# font awesome classes
+\.fa-[-a-z0-9]+
+
+# bearer auth
+(['"])Bear[e][r] .*?\g{-1}
+
+# basic auth
+(['"])Basic [-a-zA-Z=;:/0-9+]{3,}\g{-1}
+
+# base64 encoded content
+([`'"])[-a-zA-Z=;:/0-9+]+=\g{-1}
+# base64 encoded content in xml/sgml
+>[-a-zA-Z=;:/0-9+]+=
+# base64 encoded content, possibly wrapped in mime
+(?:^|[\s=;:?])[-a-zA-Z=;:/0-9+]{50,}(?:[\s=;:?]|$)
+
+# encoded-word
+=\?[-a-zA-Z0-9"*%]+\?[BQ]\?[^?]{0,75}\?=
+
+# Time Zones
+\b(?:Africa|Atlantic|America|Antarctica|Asia|Australia|Europe|Indian|Pacific)(?:/\w+)+
+
+# linux kernel info
+^(?:bugs|flags|Features)\s+:.*
+
+# systemd mode
+systemd.*?running in system mode \([-+].*\)$
+
+# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
+# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
+# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
+## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
+## You could manually change `(?i)X...` to use `[Xx]...`
+## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
+# Lorem
+(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*
+
+# Non-English
+[a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,}
+
+# highlighted letters
+\[[A-Z]\][a-z]+
+
+# French
+# This corpus only had capital letters, but you probably want lowercase ones as well.
+\b[LN]'+[a-z]{2,}\b
+
+# latex (check-spelling <= 0.0.21)
+\\(?:n(?:ew|ormal|osub)|r(?:enew)|t(?:able(?:of|)|he|itle))(?=[a-z]+)
+
+# latex (check-spelling >= 0.0.22)
+\\\w{2,}\{
+
+# eslint
+"varsIgnorePattern": ".+"
+
+# Windows short paths
+[/\\][^/\\]{5,6}~\d{1,2}[/\\]
+
+# in check-spelling@v0.0.22+, printf markers aren't automatically consumed
+# printf markers
+(?v#
+(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
+
+# Compiler flags (Unix, Java/Scala)
+# Use if you have things like `-Pdocker` and want to treat them as `docker`
+#(?:^|[\t ,>"'`=(])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
+
+# Compiler flags (Windows / PowerShell)
+# This is a subset of the more general compiler flags pattern.
+# It avoids matching `-Path` to prevent it from being treated as `ath`
+#(?:^|[\t ,"'`=(])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}))
+
+# Compiler flags (linker)
+,-B
+
+# curl arguments
+\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)*
+# set arguments
+\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)*
+# tar arguments
+\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+
+# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long...
+\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b
+# macOS temp folders
+/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/
diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
new file mode 100644
index 0000000..6e39dd0
--- /dev/null
+++ b/.github/actions/spelling/excludes.txt
@@ -0,0 +1,87 @@
+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
+(?:^|/)(?i)COPYRIGHT
+(?:^|/)(?i)LICEN[CS]E
+(?:^|/)3rdparty/
+(?:^|/)go\.sum$
+(?:^|/)package(?:-lock|)\.json$
+(?:^|/)Pipfile$
+(?:^|/)pyproject.toml
+(?:^|/)requirements(?:-dev|-doc|-test|)\.txt$
+(?:^|/)vendor/
+\.a$
+\.ai$
+\.all-contributorsrc$
+\.avi$
+\.bmp$
+\.bz2$
+\.cer$
+\.class$
+\.coveragerc$
+\.crl$
+\.crt$
+\.csr$
+\.dll$
+\.docx?$
+\.drawio$
+\.DS_Store$
+\.eot$
+\.eps$
+\.exe$
+\.gif$
+\.git-blame-ignore-revs$
+\.gitattributes$
+\.gitkeep$
+\.graffle$
+\.gz$
+\.icns$
+\.ico$
+\.ipynb$
+\.jar$
+\.jks$
+\.jpe?g$
+\.key$
+\.lib$
+\.lock$
+\.map$
+\.min\..
+\.mo$
+\.mod$
+\.mp[34]$
+\.o$
+\.ocf$
+\.otf$
+\.p12$
+\.parquet$
+\.pdf$
+\.pem$
+\.pfx$
+\.png$
+\.psd$
+\.pyc$
+\.pylintrc$
+\.qm$
+\.s$
+\.sig$
+\.so$
+\.svgz?$
+\.sys$
+\.tar$
+\.tgz$
+\.tiff?$
+\.ttf$
+\.wav$
+\.webm$
+\.webp$
+\.woff2?$
+\.xcf$
+\.xlsx?$
+\.xpm$
+\.xz$
+\.zip$
+^\.github/actions/spelling/
+^\Q.github/workflows/spelling.yml\E$
+^\Qplugin-statusnotifier/statusnotifier.cpp\E$
+^\Qplugin-statusnotifier/statusnotifier.json\E$
+^\Qsrc/lineediteventfilter.cpp\E$
+_(?!en)..(?:_\w+|)\.ts$
+ignore$
diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
new file mode 100644
index 0000000..162fb6a
--- /dev/null
+++ b/.github/actions/spelling/expect.txt
@@ -0,0 +1,263 @@
+Ablage
+albertlauncher
+amd
+Antialiasing
+apk
+appdir
+appimage
+applicationinfo
+applicationwindow
+apps
+arandr
+ARGB
+armeabi
+ASingle
+ASKPASS
+aurelien
+autogen
+AUTOMOC
+AUTORCC
+autoselection
+AUTOUIC
+backlight
+balazsbela
+balooctl
+baloosearch
+Bellegarde
+broulik
+buildlib
+buildtools
+CDeclaration
+centralwidget
+Chinmoy
+chinmoyrp
+chrono
+CLASSINFO
+cmap
+cmath
+constexpr
+cpy
+CXX
+Datei
+dbusaddons
+dde
+decr
+DEPENDPATH
+deregisters
+DESTDIR
+destinationlabel
+Digia
+dox
+dpy
+dsbmixer
+endcode
+evt
+ewmh
+extattr
+Falkon
+FHS
+FILLCOM
+FILLENV
+Firefox
+fontconfig
+foxmail
+freeargv
+freeenvv
+frontmost
+fscompleter
+fullscreen
+gcc
+gdbus
+getactivewindow
+getargv
+getenvv
+getprocs
+ghr
+globalaccel
+globalkeyshortcuts
+gmenudbusmenuproxy
+gnumdk
+Goffart
+gpu
+gtk
+HCenter
+hicolor
+HMenu
+horstretch
+hsizetype
+ias
+icns
+iconset
+idc
+idx
+Ienabled
+iiay
+IID
+INCLUDEPATH
+initgfx
+Inkscape
+inmenu
+Jesper
+jsmdk
+kdbusaddons
+kenv
+Keshav
+keysym
+KGlobal
+kglobalaccel
+kglobalshortcutsrc
+killall
+kinfo
+Knutsson
+krunner
+kwin
+KWindow
+kwindowsystem
+ldd
+LDFLAGS
+LIBDIR
+LIBNAME
+Lieuthier
+lxqt
+lxrandr
+macmenu
+mainwidget
+Mbar
+megabigbug
+MENUPROXY
+menuqcalc
+milli
+mmw
+mountpoints
+Mouridsen
+mutexname
+ncpu
+NETWM
+NONINFRINGEMENT
+noquote
+npos
+nproc
+nullfs
+ogoffart
+openproc
+operatingsystem
+pacman
+pargs
+paulolieuthier
+picom
+pids
+pixmap
+pkgconf
+PLATFORMTHEME
+platformthemeplugin
+Plc
+Popups
+PProcess
+Pradhan
+privat
+probono
+procinfo
+procps
+procstat
+PROCTAB
+productname
+prstat
+pulseaudio
+puredarwin
+qalculate
+QBENCHMARK
+qdbus
+qdbusxml
+qdoc
+qgetenv
+qgtk
+qint
+QIO
+qmake
+qobject
+QPA
+qreal
+qresource
+qss
+qstrlen
+qtbase
+qtdeclarative
+qtmultimedia
+qtproject
+qtsingleapp
+qttools
+quickcontrols
+qvariant
+Ranjan
+RDLCK
+readproc
+realmem
+reclosed
+rekols
+revenmartin
+rmutex
+rmutexes
+scriptable
+searchprovider
+searchstring
+semiyucky
+septemberhx
+SETLK
+SETLKW
+sigaction
+sigaddset
+sigemptyset
+sigset
+SIGSUR
+sizepolicy
+smartgit
+sni
+sniasync
+sourcelabel
+SRCS
+STREQUAL
+syslimits
+systemname
+Taskbar
+TCHAR
+thelastlineislong
+thumbnailer
+Toolbar
+Topmenu
+typedef
+unionfs
+unistd
+UNLCK
+unminimize
+Unregistration
+uselib
+Uwe
+VCenter
+vendorname
+verstretch
+Vetoniemi
+vsizetype
+WINAPI
+windowswidget
+windowsystem
+wmutex
+woboq
+workflows
+WRLCK
+xcb
+xcomposite
+xdamage
+xdg
+xkill
+XLarge
+Xlib
+XOpen
+Xorg
+xpm
+xrandr
+xrender
+xresloader
+XString
+XWindow
+xwininfo
+zzz
diff --git a/.github/actions/spelling/line_forbidden.patterns b/.github/actions/spelling/line_forbidden.patterns
new file mode 100644
index 0000000..d2b5fa5
--- /dev/null
+++ b/.github/actions/spelling/line_forbidden.patterns
@@ -0,0 +1,134 @@
+# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere
+# see [fprime](https://github.com/nasa/fprime/commit/d589f0a25c59ea9a800d851ea84c2f5df02fb529)
+# and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46)
+# \bm_data\b
+
+# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test,
+# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want
+# to use this:
+#\bfit\(
+
+# s.b. anymore
+\bany more[,.]
+
+# s.b. cannot
+\b[Cc]an not\b
+
+# s.b. GitHub
+(?"'`=(])-(?:(?:J-|)[DPWXY]|[Lf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})
+
+# hit-count: 7 file-count: 2
+# hex digits including css/html color classes:
+(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b
+
+# hit-count: 4 file-count: 4
+# Non-English
+[a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,}
+
+# hit-count: 3 file-count: 3
+# hex runs
+\b[0-9a-fA-F]{16,}\b
+
+# hit-count: 1 file-count: 1
+# in check-spelling@v0.0.22+, printf markers aren't automatically consumed
+# printf markers
+(?v#
+(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))
+
+GITHUB_TOKEN: .*$
+
+# IServiceProvider / isAThing
+(?:(?<=[a-z])|\b)(?:[IQ]|isA)(?=(?:[A-Z][a-z]{2,})+(?:[^a-z]|\b))
+
+# libraries
+libx
+\blib(?=[a-qs-yz])
+
+LIVEstep
+
+# subsidiaries
+\(-ies\)
+
+# Questionably acceptable forms of `in to`
+# Personally, I prefer `log into`, but people object
+# https://www.tprteaching.com/log-into-log-in-to-login/
+\b(?:[Ll]og|[Ss]ign) in to\b
+
+# to opt in
+\bto opt in\b
+
+# acceptable duplicates
+# ls directory listings
+[-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+\d+\s+
+# mount
+\bmount\s+-t\s+(\w+)\s+\g{-1}\b
+# C types and repeated CSS values
+\s(auto|center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?: \g{-1})+\s
+# C struct
+\bstruct\s+(\w+)\s+\g{-1}\b
+# go templates
+\s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml):
+# doxygen / javadoc / .net
+(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+static|\s+override|\s+readonly)*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s
+
+# Commit message -- Signed-off-by and friends
+^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$
+
+# Autogenerated revert commit message
+^This reverts commit [0-9a-f]{40}\.$
+
+# ignore long runs of a single character:
+\b([A-Za-z])\g{-1}{3,}\b
diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt
new file mode 100644
index 0000000..e5e4c3e
--- /dev/null
+++ b/.github/actions/spelling/reject.txt
@@ -0,0 +1,11 @@
+^attache$
+^bellow$
+benefitting
+occurences?
+^dependan.*
+^oer$
+Sorce
+^[Ss]pae.*
+^untill$
+^untilling$
+^wether.*
diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
new file mode 100644
index 0000000..813a9b9
--- /dev/null
+++ b/.github/workflows/spelling.yml
@@ -0,0 +1,140 @@
+name: Check Spelling
+
+# Comment management is handled through a secondary job, for details see:
+# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
+#
+# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
+# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare)
+# it needs `contents: write` in order to add a comment.
+#
+# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
+# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
+# it needs `pull-requests: write` in order to manipulate those comments.
+
+# Updating pull request branches is managed via comment handling.
+# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
+#
+# These elements work together to make it happen:
+#
+# `on.issue_comment`
+# This event listens to comments by users asking to update the metadata.
+#
+# `jobs.update`
+# This job runs in response to an issue_comment and will push a new commit
+# to update the spelling metadata.
+#
+# `with.experimental_apply_changes_via_bot`
+# Tells the action to support and generate messages that enable it
+# to make a commit to update the spelling metadata.
+#
+# `with.ssh_key`
+# In order to trigger workflows when the commit is made, you can provide a
+# secret (typically, a write-enabled github deploy key).
+#
+# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key
+
+# Sarif reporting
+#
+# Access to Sarif reports is generally restricted (by GitHub) to members of the repository.
+#
+# Requires enabling `security-events: write`
+# and configuring the action with `use_sarif: 1`
+#
+# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output
+
+# Minimal workflow structure:
+#
+# on:
+# push:
+# ...
+# pull_request_target:
+# ...
+# jobs:
+# # you only want the spelling job, all others should be omitted
+# spelling:
+# # remove `security-events: write` and `use_sarif: 1`
+# # remove `experimental_apply_changes_via_bot: 1`
+# ... otherwise adjust the `with:` as you wish
+
+on:
+ push:
+ branches:
+ - "**"
+ tags-ignore:
+ - "**"
+ pull_request_target:
+ branches:
+ - "**"
+ types:
+ - 'opened'
+ - 'reopened'
+ - 'synchronize'
+ issue_comment:
+ types:
+ - 'created'
+
+jobs:
+ spelling:
+ name: Check Spelling
+ permissions:
+ contents: read
+ pull-requests: read
+ actions: read
+ security-events: write
+ outputs:
+ followup: ${{ steps.spelling.outputs.followup }}
+ runs-on: ubuntu-latest
+ if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }}
+ concurrency:
+ group: spelling-${{ github.event.pull_request.number || github.ref }}
+ # note: If you use only_check_changed_files, you do not want cancel-in-progress
+ cancel-in-progress: true
+ steps:
+ - name: check-spelling
+ id: spelling
+ uses: check-spelling/check-spelling@v0.0.22
+ with:
+ suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
+ checkout: true
+ check_file_names: 1
+ spell_check_this: helloSystem/Menu@main
+ post_comment: 0
+ use_magic_file: 1
+ report-timing: 1
+ warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check
+ experimental_apply_changes_via_bot: ${{ github.repository_owner != 'helloSystem' && 1 }}
+ use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }}
+ check_extra_dictionaries: ''
+ extra_dictionaries:
+ cspell:software-terms/dict/softwareTerms.txt
+ cspell:php/dict/php.txt
+ cspell:python/src/python/python-lib.txt
+ cspell:cpp/src/stdlib-c.txt
+ cspell:node/dict/node.txt
+ cspell:fullstack/dict/fullstack.txt
+ cspell:cpp/src/compiler-msvc.txt
+ cspell:shell/dict/shell-all-words.txt
+
+ update:
+ name: Update PR
+ permissions:
+ contents: write
+ pull-requests: write
+ actions: read
+ runs-on: ubuntu-latest
+ if: ${{
+ github.repository_owner != 'helloSystem' &&
+ github.event_name == 'issue_comment' &&
+ github.event.issue.pull_request &&
+ contains(github.event.comment.body, '@check-spelling-bot apply')
+ }}
+ concurrency:
+ group: spelling-update-${{ github.event.issue.number }}
+ cancel-in-progress: false
+ steps:
+ - name: apply spelling updates
+ uses: check-spelling/check-spelling@v0.0.22
+ with:
+ experimental_apply_changes_via_bot: 1
+ checkout: true
+ ssh_key: "${{ secrets.CHECK_SPELLING }}"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 47b6bf5..b5dfe2d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0)
project(Menu)
-# Disable depreciation warnings
+# Disable deprecation warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
set(CMAKE_INSTALL_PREFIX "/System/Menu.app")
diff --git a/Shutdown/main.cpp b/Shutdown/main.cpp
index b91c336..abea6eb 100644
--- a/Shutdown/main.cpp
+++ b/Shutdown/main.cpp
@@ -14,7 +14,7 @@ void ignoreUnixSignals(std::initializer_list ignoreSignals) {
void catchUnixSignals(std::initializer_list quitSignals) {
auto handler = [](int sig) -> void {
- // blocking and not aysnc-signal-safe func are valid
+ // blocking and not async-signal-safe func are valid
printf("\nquit the application by signal(%d).\n", sig);
QCoreApplication::quit();
};
diff --git a/interfaces/pluginsiterface.h b/interfaces/pluginsinterface.h
similarity index 100%
rename from interfaces/pluginsiterface.h
rename to interfaces/pluginsinterface.h
diff --git a/plugin-battery/plugin.h b/plugin-battery/plugin.h
index 7b2bc1c..a53ce81 100644
--- a/plugin-battery/plugin.h
+++ b/plugin-battery/plugin.h
@@ -1,7 +1,7 @@
#ifndef PLUGIN_H
#define PLUGIN_H
-#include "pluginsiterface.h"
+#include "pluginsinterface.h"
#include "batterywidget.h"
#include
diff --git a/plugin-datetime/datetime.h b/plugin-datetime/datetime.h
index 03f1933..2f710ba 100644
--- a/plugin-datetime/datetime.h
+++ b/plugin-datetime/datetime.h
@@ -1,7 +1,7 @@
#ifndef DATETIME_H
#define DATETIME_H
-#include "pluginsiterface.h"
+#include "pluginsinterface.h"
#include "datetimewidget.h"
#include
diff --git a/plugin-datetime/datetimewidget.cpp b/plugin-datetime/datetimewidget.cpp
index 0e1a3d5..bd9790e 100644
--- a/plugin-datetime/datetimewidget.cpp
+++ b/plugin-datetime/datetimewidget.cpp
@@ -48,7 +48,7 @@ void DateTimeWidget::updateCurrentTimeString()
void DateTimeWidget::change()
{
- qDebug() << "pronbono: To be implemented";
+ qDebug() << "probono: To be implemented";
QProcess *p = new QProcess();
p->setArguments({ "Date and Time" });
p->setProgram("launch");
diff --git a/plugin-statusnotifier/statusnotifier.h b/plugin-statusnotifier/statusnotifier.h
index acbc79d..8ff08db 100644
--- a/plugin-statusnotifier/statusnotifier.h
+++ b/plugin-statusnotifier/statusnotifier.h
@@ -1,7 +1,7 @@
#ifndef STATUSNOTIFIER_H
#define STATUSNOTIFIER_H
-#include "pluginsiterface.h"
+#include "pluginsinterface.h"
#include "statusnotifierwidget.h"
#include
diff --git a/plugin-statusnotifier/statusnotifierwidget.cpp b/plugin-statusnotifier/statusnotifierwidget.cpp
index a5e0fae..38f90f2 100644
--- a/plugin-statusnotifier/statusnotifierwidget.cpp
+++ b/plugin-statusnotifier/statusnotifierwidget.cpp
@@ -83,7 +83,7 @@ void StatusNotifierWidget::itemAdded(QString serviceAndPath)
m_layout->insertWidget(0, button);
button->show();
- // FIXME: The follwoing can crash. Why? Likely because when this is fist called,
+ // FIXME: The following can crash. Why? Likely because when this is fist called,
// the objects that this tries to manipulate are not there yet. Race condition?
// reinterpret_cast(parent()->parent())->hideApplicationName();
//
diff --git a/plugin-volume/plugin.h b/plugin-volume/plugin.h
index 05cd469..db81595 100644
--- a/plugin-volume/plugin.h
+++ b/plugin-volume/plugin.h
@@ -1,7 +1,7 @@
#ifndef DATETIME_H
#define DATETIME_H
-#include "pluginsiterface.h"
+#include "pluginsinterface.h"
#include "controlwidget.h"
#include
diff --git a/plugin-windows/windows.h b/plugin-windows/windows.h
index 9eeb0b6..4fc8faa 100644
--- a/plugin-windows/windows.h
+++ b/plugin-windows/windows.h
@@ -1,7 +1,7 @@
#ifndef WINDOWS_H
#define WINDOWS_H
-#include "pluginsiterface.h"
+#include "pluginsinterface.h"
#include "windowswidget.h"
#include
diff --git a/plugin-windows/windowswidget.cpp b/plugin-windows/windowswidget.cpp
index 1ed3db8..3c78542 100644
--- a/plugin-windows/windowswidget.cpp
+++ b/plugin-windows/windowswidget.cpp
@@ -68,7 +68,7 @@ void WindowsWidget::updateWindows()
// we could keep some internal state and change just what needs to be changed;
// but writing the code for this would be significantly more complex
// and error-prone; so let's see whether we can get away with this.
-// Looks like preformance is good since we use X11 atoms to store the kind of
+// Looks like performance is good since we use X11 atoms to store the kind of
// information we need directly on the windows themselves, so that we don't have
// to re-compute it each time windows are switched.
@@ -182,7 +182,7 @@ void WindowsWidget::updateWindows()
m_menu->addSeparator();
- // Add one menu item for each appliction
+ // Add one menu item for each application
for (WId id : distinctApps) {
@@ -265,7 +265,7 @@ void WindowsWidget::updateWindows()
} else {
// If there are multiple windows for the same PID, then add a submenu (a QMenu with
// QActions) So don't add an action here, but a submenu which contains all windows that
- // beloong to that PID
+ // belong to that PID
QMenu *subMenu = m_menu->addMenu(niceName);
subMenu->setToolTipsVisible(true);
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 53e943c..da85332 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -65,7 +65,7 @@ find_package(PkgConfig REQUIRED)
find_package(Qt5 COMPONENTS Network REQUIRED) # probono: For qtsingleapplication
find_package(dbusmenu-qt5 REQUIRED)
find_package(KF5GlobalAccel REQUIRED)
-pkg_check_modules(QCALCULATE REQUIRED libqalculate)
+pkg_check_modules(QALCULATE REQUIRED libqalculate)
target_include_directories(${TARGET} PUBLIC ${dbusmenu-qt5_INCLUDE_DIRS})
target_link_libraries(${TARGET}
@@ -85,7 +85,7 @@ target_link_libraries(${TARGET}
${XCB_LIBRARIES}
${XCB_EWMH_LIBRARIES}
${XCB_EWMH_LIBRARIES}
- ${QCALCULATE_LIBRARIES}
+ ${QALCULATE_LIBRARIES}
dbusmenu-qt5
)
if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
diff --git a/src/applicationinfo.cpp b/src/applicationinfo.cpp
index 0d040d6..6e38017 100644
--- a/src/applicationinfo.cpp
+++ b/src/applicationinfo.cpp
@@ -46,7 +46,7 @@
// directly on the window itself, so that it can be easily
// retrieved next time we need it. And fast!
//
-// Similarly for information that is intreresting about files and directories,
+// Similarly for information that is interesting about files and directories,
// in which case we may do a similar thing using extended attributes.
ApplicationInfo::ApplicationInfo() { }
@@ -163,7 +163,7 @@ QString ApplicationInfo::environmentVariableForPId(unsigned int pid,
}
path = "";
#else
- path = "NotImplemeted";
+ path = "NotImplemented";
#endif
return path;
diff --git a/src/appmenu/appmenumodel.cpp b/src/appmenu/appmenumodel.cpp
index c52ce45..b750744 100644
--- a/src/appmenu/appmenumodel.cpp
+++ b/src/appmenu/appmenumodel.cpp
@@ -460,7 +460,7 @@ void AppMenuModel::onActiveWindowChanged(WId id)
if (info.hasState(NET::SkipTaskbar) || info.windowType(NET::UtilityMask) == NET::Utility) {
- //! hide when the windows or their transiet(s) do not have a menu
+ //! hide when the windows or their transient(s) do not have a menu
if (filterByActive()) {
KWindowInfo transientInfo = KWindowInfo(
@@ -558,7 +558,7 @@ void AppMenuModel::filterWindow(KWindowInfo &info)
{
if (m_currentWindowId == info.win()) {
//! HACK: if the user has enabled screen scaling under X11 environment
- //! then the window and screen geometries can not be trusted for comparison
+ //! then the window and screen geometries cannot be trusted for comparison
//! before windows coordinates be adjusted properly.
//! BUG: 404500
QPoint windowCenter = info.geometry().center();
diff --git a/src/appmenu/appmenumodel.h b/src/appmenu/appmenumodel.h
index 4698de8..42a4ab4 100644
--- a/src/appmenu/appmenumodel.h
+++ b/src/appmenu/appmenumodel.h
@@ -97,7 +97,7 @@ class HDBusMenuImporter : public DBusMenuImporter
QMenu *createMenu(QWidget *parent) override
{
HMenu *menu = new HMenu(parent);
- // Make some workarounds for focus loss which calls closeAllPoupus();
+ // Make some workarounds for focus loss which calls closeAllPopups();
if (parent && qobject_cast(parent->parent())) {
connect(menu, &QMenu::aboutToShow, this, [this] {
recent = qobject_cast(sender());
@@ -114,7 +114,7 @@ class HDBusMenuImporter : public DBusMenuImporter
std::chrono::duration dur =
std::chrono::high_resolution_clock::now() - reshow->lastOpened;
- if (dur.count() < 350) // start reshow timer on fastly reclosed menus
+ if (dur.count() < 350) // start reshow timer on quickly reclosed menus
m_reshowTimer->start();
});
}
@@ -346,7 +346,7 @@ private Q_SLOTS:
//! there are apps that are not releasing their menu properly after closing
//! and as such their menu is still shown even though the app does not exist
- //! any more. Such apps are Java based e.g. smartgit
+ //! anymore. Such apps are Java based e.g. smartgit
void onWindowRemoved(WId id);
void filterWindow(KWindowInfo &info);
diff --git a/src/appmenu/com.canonical.AppMenu.Registrar.xml b/src/appmenu/com.canonical.AppMenu.Registrar.xml
index bc2be43..67c7598 100644
--- a/src/appmenu/com.canonical.AppMenu.Registrar.xml
+++ b/src/appmenu/com.canonical.AppMenu.Registrar.xml
@@ -4,7 +4,7 @@
@mainpage
An interface to register menus that are associated with a window in an application. The
- main interface is docuemented here: @ref com::canonical::AppMenu::Registrar.
+ main interface is documented here: @ref com::canonical::AppMenu::Registrar.
The actual menus are transported using the dbusmenu protocol which is available
here: @ref com::canonical::dbusmenu.
@@ -21,7 +21,7 @@
/note this method assumes that the connection from the caller is the DBus connection
to use for the object. Applications that use multiple DBus connections will need to
- ensure this method is called with the same connection that implmenets the object.
+ ensure this method is called with the same connection that implements the object.
]]>
The XWindow ID of the window
diff --git a/src/appmenuwidget.cpp b/src/appmenuwidget.cpp
index 2e38cd3..949b3df 100644
--- a/src/appmenuwidget.cpp
+++ b/src/appmenuwidget.cpp
@@ -358,7 +358,7 @@ void AppMenuWidget::addAppToMenu(QString candidate, QMenu *submenu)
action->setToolTip(file.absoluteFilePath());
action->setProperty("path", file.absoluteFilePath());
// action->setDisabled(true); // As a reminder that we consider those legacy and
- // encourage people to swtich
+ // encourage people to switch
}
} else if (file.fileName().endsWith(".AppImage") || file.fileName().endsWith(".appimage")) {
@@ -476,7 +476,7 @@ void AppMenuWidget::findAppsInside(QStringList locationsContainingApps)
continue;
}
- // Use QDir::entryList() insted of QDirIterator because it supports sorting
+ // Use QDir::entryList() instead of QDirIterator because it supports sorting
QStringList candidates = dir.entryList();
QString candidate;
foreach (candidate, candidates) {
@@ -735,9 +735,9 @@ void AppMenuWidget::searchEditingDone()
{
if (m_searchMenu && m_searchMenu->actions().count() > 1) {
searchLineEdit->clearFocus();
- for (QAction *findActivateeCanidcate : m_searchMenu->actions())
- if (!findActivateeCanidcate->isSeparator()) {
- m_searchMenu->setActiveAction(findActivateeCanidcate);
+ for (QAction *findCandidateAction : m_searchMenu->actions())
+ if (!findCandidateAction->isSeparator()) {
+ m_searchMenu->setActiveAction(findCandidateAction);
break;
}
}
@@ -798,7 +798,7 @@ void AppMenuWidget::updateActionSearch()
// TODO: https://stackoverflow.com/a/33790639
// We could customize more aspects of the list view of the completer by
//setting the CompletionMode to InlineCompletion, so there will be no popup.
- // Then make your QListView indepedant of the QLineEdit;
+ // Then make your QListView independent of the QLineEdit;
// just react to signals that indicate when a view types some text,...
KWindowSystem::setType(actionCompleter->popup()->winId(), NET::DropdownMenu);
@@ -874,7 +874,7 @@ void AppMenuWidget::searchMenu()
qDebug() << result;
return;
}
- // Only initialize fscompleter if searhcstring hints a path;
+ // Only initialize fscompleter if searchstring hints a path;
if (searchString.startsWith("/") || searchString == "~") {
if (searchString == "~") {
@@ -1043,7 +1043,7 @@ void AppMenuWidget::searchMenu()
return; // Don't show any other results in this case
}
- std::function setResultVisbileMbar = [this, searchString](
+ std::function setResultVisibleMbar = [this, searchString](
QModelIndex idx,
int depth) {
QAction *action = idx.data().value();
@@ -1125,7 +1125,7 @@ void AppMenuWidget::searchMenu()
searchResults << m_searchMenu->addSeparator(); // The items in searchResults get removed when
// search results change
- iterate(QModelIndex(), m_appMenuModel, setResultVisbileMbar);
+ iterate(QModelIndex(), m_appMenuModel, setResultVisibleMbar);
m_isSearching = false;
searchResults << m_searchMenu->addSeparator(); // The items in searchResults get removed when
@@ -1298,7 +1298,7 @@ void AppMenuWidget::searchMenu()
number_of_enabled_actions++;
}
qDebug() << "probono: number_of_enabled_actions" << number_of_enabled_actions;
- // QUESITON: Unclear whether it is 2 or 3, depending on whether one menu action or one Baloo
+ // QUESTION: Unclear whether it is 2 or 3, depending on whether one menu action or one Baloo
// search result is there...
if (number_of_enabled_actions == 2
|| (number_of_enabled_actions == 3 && m_appMenuModel->filteredActions().count() == 1)) {
@@ -1442,7 +1442,7 @@ void AppMenuWidget::toggleMaximizeWindow()
if (isMax) {
restoreWindow();
} else {
- maxmizeWindow();
+ maximizeWindow();
}
}
@@ -1548,7 +1548,7 @@ void AppMenuWidget::closeWindow()
.closeWindowRequest(KWindowSystem::activeWindow());
}
-void AppMenuWidget::maxmizeWindow()
+void AppMenuWidget::maximizeWindow()
{
KWindowSystem::setState(KWindowSystem::activeWindow(), NET::Max);
}
@@ -1654,7 +1654,7 @@ void AppMenuWidget::actionMinimizeAll()
<< "0x" + QString::number(KWindowSystem::activeWindow(), 16);
// NOTE: This always prints the window ID of the menu itself, rather than the one of the
// otherwise frontmost application window Hence we would need to store a variable somewhere that
- // contains the window ID of the last non-menu window... or is there a btter way?
+ // contains the window ID of the last non-menu window... or is there a better way?
const auto &windows = KWindowSystem::windows();
for (WId wid : windows) {
KWindowSystem::minimizeWindow(wid);
@@ -1669,7 +1669,7 @@ void AppMenuWidget::actionMaximizeAll()
<< "0x" + QString::number(KWindowSystem::activeWindow(), 16);
// NOTE: This always prints the window ID of the menu itself, rather than the one of the
// otherwise frontmost application window Hence we would need to store a variable somewhere that
- // contains the window ID of the last non-menu window... or is there a btter way?
+ // contains the window ID of the last non-menu window... or is there a better way?
const auto &windows = KWindowSystem::windows();
for (WId wid : windows) {
KWindowSystem::activateWindow(wid);
@@ -1748,7 +1748,7 @@ bool AppMenuWidget::eventFilter(QObject *watched, QEvent *event)
QMenu *submenu = qobject_cast(
watched); // Workaround for: no member named 'toolTip' in 'QObject'
if (!submenu->rect().contains(
- mouseEvent->pos())) { // Prevent the Menu action from getting triggred when user
+ mouseEvent->pos())) { // Prevent the Menu action from getting triggered when user
// click on actions in submenu
// Gets executed when the submenu is clicked
qDebug() << "Submenu clicked:" << submenu->property("path").toString();
diff --git a/src/appmenuwidget.h b/src/appmenuwidget.h
index d58f69c..0e20cad 100644
--- a/src/appmenuwidget.h
+++ b/src/appmenuwidget.h
@@ -112,7 +112,7 @@ class AppMenuWidget : public QWidget
void onWindowChanged(WId id, NET::Properties properties, NET::Properties2 properties2);
void minimizeWindow();
void closeWindow();
- void maxmizeWindow();
+ void maximizeWindow();
void restoreWindow();
public slots:
diff --git a/src/extensionwidget.h b/src/extensionwidget.h
index a8689b1..dca807f 100644
--- a/src/extensionwidget.h
+++ b/src/extensionwidget.h
@@ -24,7 +24,7 @@
#include
#include "blurwindow.h"
#include "popupwindow.h"
-#include "../interfaces/pluginsiterface.h"
+#include "../interfaces/pluginsinterface.h"
class ExtensionWidget : public QWidget
{
diff --git a/src/mainwidget.h b/src/mainwidget.h
index 4bb920e..ab7e591 100644
--- a/src/mainwidget.h
+++ b/src/mainwidget.h
@@ -22,7 +22,7 @@
#include
#include
-#include "../interfaces/pluginsiterface.h"
+#include "../interfaces/pluginsinterface.h"
#include "pluginmanager.h"
#include "appmenuwidget.h"
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index fe50fb1..ec6e902 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -368,7 +368,7 @@ QString MainWindow::showApplicationName(const QString &arg)
}
*/
- // This seeme to be a reasonable compromise in terms of speed,
+ // This seems to be a reasonable compromise in terms of speed,
// but we are not showing the second of two applications with the same name
// being launched from two different locations. Maybe this is good enough for now
ApplicationInfo *ai = new ApplicationInfo();
diff --git a/src/pluginmanager.h b/src/pluginmanager.h
index 3f0a7e3..839437b 100644
--- a/src/pluginmanager.h
+++ b/src/pluginmanager.h
@@ -23,7 +23,7 @@
#include
#include
#include "extensionwidget.h"
-#include "../interfaces/pluginsiterface.h"
+#include "../interfaces/pluginsinterface.h"
class PluginManager : public QObject
{
diff --git a/src/qtsingleapplication/qtlockedfile.cpp b/src/qtsingleapplication/qtlockedfile.cpp
index c142a86..b1d71f7 100644
--- a/src/qtsingleapplication/qtlockedfile.cpp
+++ b/src/qtsingleapplication/qtlockedfile.cpp
@@ -158,8 +158,8 @@ QtLockedFile::LockMode QtLockedFile::lockMode() const
can be locked.
If \a block is true, this function will block until the lock is
- aquired. If \a block is false, this function returns \e false
- immediately if the lock cannot be aquired.
+ acquired. If \a block is false, this function returns \e false
+ immediately if the lock cannot be acquired.
If this object already has a lock of type \a mode, this function
returns \e true immediately. If this object has a lock of a
diff --git a/src/qtsingleapplication/qtsingleapplication.cpp b/src/qtsingleapplication/qtsingleapplication.cpp
index d0fb15d..56336ca 100644
--- a/src/qtsingleapplication/qtsingleapplication.cpp
+++ b/src/qtsingleapplication/qtsingleapplication.cpp
@@ -52,7 +52,7 @@
This class allows you to create applications where only one
instance should be running at a time. I.e., if the user tries to
launch another instance, the already running instance will be
- activated instead. Another usecase is a client-server system,
+ activated instead. Another use case is a client-server system,
where the first started instance will assume the role of server,
and the later instances will act as clients of that server.
@@ -144,7 +144,7 @@ void QtSingleApplication::sysInit(const QString &appId)
/*!
Creates a QtSingleApplication object. The application identifier
will be QCoreApplication::applicationFilePath(). \a argc, \a
- argv, and \a GUIenabled are passed on to the QAppliation constructor.
+ argv, and \a GUIenabled are passed on to the QApplication constructor.
If you are creating a console application (i.e. setting \a
GUIenabled to false), you may consider using
@@ -161,7 +161,7 @@ QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled
/*!
Creates a QtSingleApplication object with the application
identifier \a appId. \a argc and \a argv are passed on to the
- QAppliation constructor.
+ QApplication constructor.
*/
QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
@@ -175,7 +175,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
/*!
Creates a QtSingleApplication object. The application identifier
will be QCoreApplication::applicationFilePath(). \a argc, \a
- argv, and \a type are passed on to the QAppliation constructor.
+ argv, and \a type are passed on to the QApplication constructor.
*/
QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type)
: QApplication(argc, argv, type)
diff --git a/src/qtsingleapplication/qtsinglecoreapplication.cpp b/src/qtsingleapplication/qtsinglecoreapplication.cpp
index 5634537..18de5d1 100644
--- a/src/qtsingleapplication/qtsinglecoreapplication.cpp
+++ b/src/qtsingleapplication/qtsinglecoreapplication.cpp
@@ -67,7 +67,7 @@
/*!
Creates a QtSingleCoreApplication object. The application identifier
will be QCoreApplication::applicationFilePath(). \a argc and \a
- argv are passed on to the QCoreAppliation constructor.
+ argv are passed on to the QCoreApplication constructor.
*/
QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv)
@@ -81,7 +81,7 @@ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv)
/*!
Creates a QtSingleCoreApplication object with the application
identifier \a appId. \a argc and \a argv are passed on to the
- QCoreAppliation constructor.
+ QCoreApplication constructor.
*/
QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc, char **argv)
: QCoreApplication(argc, argv)