   Kickshaw - A Menu Editor for Openbox

   Copyright (c) 2010–2025        Marcus Schätzle

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License along
   with Kickshaw. If not, see http://www.gnu.org/licenses/.

---

MAJOR MILESTONES
(Listed With Each Minor Release Version Number)

• Core functionality

0.2: Context menus
0.3: Editable cells
0.4: Drag and drop
0.5: Search functionality, support for icons, proper XML parser, GTK3 
0.6: Undo/Redo
0.7: Find and replace
1.0: Polishing:
     - User support (autosave, hints window, shortcuts window, 
       report issue functionality, more options, autocomplete)
     - Interface changes, menu button as default, optional client side 
       decorations

• Additional functionality

1.1: - Support for localization, addition of translations 
     - Added logo to the about dialog

COMPLETE CHANGELOG

1.1.198 – 2025-09-08

  • The Malagasy translation now follows the GNOME terminology and uses 
    "karazan-tsafidy" for "menu" and all related compounds.

1.1.197 – 2025-09-07

  • Added Upper Sorbian translation.
  • Fixed a duplicate mnemonic in the Slovenian translation. The issue was 
    caused by missing checks in the script that scans for duplicate mnemonics, 
    which has now been fixed.

1.1.196 – 2025-09-02

  • The folder structure for the update and helper scripts has been 
    reorganized. New scripts have also been added to check and edit PO files.
  • An issue with inconsistencies in the PO files was caused by recent language 
    improvements (versions 1.1.190 and 1.1.191) that overlooked a duplicate 
    sentence. This issue has been resolved, and several grammatical errors were 
    also corrected.
  • Unified translation comments, which now allows a single helper script to 
    check whether words that should remain untranslated have been translated.
  • Fixed minor discrepancies between the standard and pre-GTK-3.20 versions of 
    the hints2 file in the en_US template and the de_DE and de_CH translations.
  • Confined array to the minimal required scope.

1.1.195 – 2025-09-01

  • Added Sardinian translation.
  • Fixed duplicate mnemonics in the Breton, Bulgarian, Burmese, Galician, 
    Greenlandic, Hindi, isiZulu, Malayalam, Nynorsk, Romanian, Slovenian, 
    Ukrainian, and Wolof translations. Added a script that scans for all 
    possible occurrences of duplicate mnemonics.
  • Fixed missing foreground and background colors in the combobox for adding 
    actions and options in the Ukrainian translation. Added a script that 
    detects translation mismatches causing such issues.
  • Reinserted a sentence that was accidentally removed from one of the info 
    files for en_US and en_GB.
  • The hints updating scripts now include the revised hint texts.

1.1.194 – 2025-08-27

  • When an error occurred reading an undo stack item, the timeout function 
    monitoring changes (icons, font sizes, etc.) was not restarted.
  • If an error occurred while writing a menu and no filter model existed, 
    g_object_unref() was still called with a NULL model, causing a non-critical 
    error.
  • Clarified the existing logic for creating a new undo stack item, making the 
    distinction between post-save and unsaved cases more explicit. This is a 
    refactor only; no functional changes.
  • Added a clarifying code comment.

1.1.193 – 2025-08-26

  • Fixed unreliable undo/redo/restore functionality caused by using a string 
    comparison on a buffer instead of comparing a single byte (the buffer is 
    not null-terminated, so a string comparison results in undefined behavior). 
    Also replaced g_string_append with g_string_append_c for safer character 
    appends in this context.
  • Fixed missing updated shortcuts in the help files and non-ASCII shortcuts 
    in the Greek translation.

1.1.192 – 2025-08-24

  • Unified the translations to use only ASCII-based keyboard shortcuts, 
    removing the Cyrillic variants that did not work as implemented.
  • Removed duplicate translation notes from PO files.

1.1.191 – 2025-08-23

  • Adjusted the translations to reflect the template changes made in the last 
    update and ensured typographical consistency.
  • Translation fixes for Czech. Added translation notes to prevent similar 
    issues in future translations or revisions.
  • Standardized the Luxembourgish translation of two context menu items to 
    avoid misunderstandings.
  • Fixed the Italian PO header.
  • Unified the information in the PO headers:
    • Made "Report-Msgid-Bugs-To" and "Last-Translator" consistent.
    • Removed the template entry for "Language-Team".

1.1.190 – 2025-08-17

  • Polished the language in the English (en_US) template and hint files. 
    All changes also apply to English (en_GB). The German translation has been 
    adjusted.
  • Split a paragraph into two paragraphs in one of the hint files for better 
    readability.

1.1.189 – 2025-08-16

  • Eliminated redundancies in menu item definitions.
  • Polished the language in source code comments,
    including translation notes appearing in the PO files.
  • Clarified one of the changelog entries.

1.1.188 – 2025-08-10

  • A left-click within the tree view, but outside the actual tree, 
    now deselects all selected nodes.
  • Polished the language in the CHANGELOG file; some change descriptions have 
    been clarified for better readability.

1.1.187 – 2025-08-06

  • Fixed a race condition where the program restart (triggered by changes in 
    decorations or menu type) could fail because the previous instance had not 
    fully shut down before the new one launched. Now uses the "shutdown" 
    signal, followed by a loop that waits for the Kickshaw process to 
    terminate, ensuring a clean shutdown before restarting.

1.1.186 – 2025-08-04

  • Changed the style of context menu headlines to keep them clearly distinct 
    across all GTK themes.
    The previous style relied on the assumption that the user would not select 
    a theme with a violet or bluish background/gradient.
    The current solution is a best-effort compromise when using GtkMenu, since 
    only GMenu allows a dedicated style for menu headlines that works 
    consistently across themes.
  • Polished spelling in the English (en_US) template.
  • Updated the word for “separator” in German translations.
  • Revised the README for clearer language and improved readability.
  • Minor changes to previous changelog entries: wording polish and additional 
    clarifying remarks.

1.1.185 – 2025-07-30

  • Added Oromo translation.
  • Added a translation note to address ambiguity.

1.1.184 – 2025-07-26

  • Added Fulah translation.
  • Completed missing translations for some msgid entries in the Sindhi PO 
    file.
  • Corrected the translation of a sentence in help files for Kashmiri, Malay, 
    Maltese, and Swahili.
  • Added a missing sentence in the Standard Tibetan help file.
  • Fixed an incomplete sentence translation in the Tajik translation.
  • Updated the Tatar shortcuts window to display the actual Tatar shortcuts 
    instead of those from the English (en_US) template.
  • Minor changes: added a translation note and improved grammar in the README 
    file.

1.1.183 – 2025-07-25

  • Standardized translations of the phrase “Keep root menu separate in saved 
    menu file” within the same language, as the first translation is a menu 
    item and the second refers to it. This affected the Amharic, Assamese, 
    Azeri, Burmese, Farsi, Haitian, Korean, Sinhala, and Turkmen translations.
    For Azeri, also fixed a garbled menu item text caused by a copy-and-paste 
    error.

1.1.182 – 2025-07-24

  • Added Tigrinya and Tatar translations.
  • Corrected button and label texts that incorrectly used the definite article 
    in the Basque translation. Added translation notes to prevent similar 
    issues in future translations or revisions.
  • Corrected tree view column headings, for the same reason as above, in the 
    Albanian, Arabic, Basque, Kurmanji, and Turkmen translations. Translation 
    notes have been added accordingly.
  • Fixed instances where words that should have remained untranslated were 
    translated. This affected the Albanian, Azeri, Chinese (simplified and 
    traditional), Sinhala, and Spanish translations.

1.1.181 – 2025-07-22

  • Fixed untranslated words and phrases in the Bhojpuri, Bosnian, and Igbo 
    translations.
  • Fixed duplicate mnemonics in the Estonian, Icelandic, and Slovak 
    translations.
  • Revised the README file text describing the inclusion criteria for 
    translations.

1.1.180 – 2025-07-21

  • Added Igbo and Northern Sotho translations.

1.1.179 – 2025-07-14

  • Added Kinyarwanda translation.

1.1.178 – 2025-07-07

  • Added Wolof translation.

1.1.177 – 2025-07-01

  • Added Yoruba translation.
  • Updated one of the logos.

1.1.176 – 2025-06-26

  • Added Greenlandic translation.
  • Added a seventh logo.

1.1.175 – 2025-06-23

  • The Haitian Creole translation has been revised.

1.1.174 – 2025-06-22

  • The Amharic translation has been revised.
  • Fixed missing translations in the Nepali hints files.
  • Added a sixth logo. Logos are now displayed based on the current day of the 
    week rather than at random.

1.1.173 – 2025-06-20

  • Added Bhojpuri translation.
  • The Swahili translation has been revised.
  • Reworded button text in the English (en_US) template for improved idiomatic 
    usage; all translations have been updated accordingly.

1.1.172 – 2025-06-16

  • The Khmer translation has been revised.
  • Updated one of the English hints texts (both en_US and en_GB) to use a more 
    appropriate word.

1.1.171 – 2025-06-14

  • Added Bosnian translation.
  • Added explanations of the inclusion criteria for language versions to the 
    README file.
  • Added a fifth logo.
  • Updated one of the existing logos.

1.1.170 – 2025-06-11

  • The Sinhala translation has been revised.
  • Updated two of the logos.

1.1.169 – 2025-06-10

  • The Pashto translation has been revised.

1.1.168 – 2025-06-08

  • The Kyrgyz and Tajik translations have been revised.
  • Fixed a missing mnemonic in the Thai translation. 
    Added a script to check for missing mnemonics and inconsistencies in 
    mnemonic style.
  • Reworded a sentence for greater clarity; updated all translations 
    accordingly.
  • Corrected English in the unify_top-level_items_translations script 
    (toplevel → top-level).
  • One of the logos has been updated.

1.1.167 – 2025-06-05

  • The Turkmen translation has been revised.

1.1.166 – 2025-06-03

  • The Belarusian translation has been revised.

1.1.165 – 2025-06-02

  • The Norwegian (Nynorsk) translation has been revised.

1.1.164 – 2025-06-01

  • The Assamese translation has been revised.
  • Added a fourth logo for the About dialog window.

1.1.163 – 2025-06-01

  • The Gujarati, Kannada, Malayalam, Odia, and Punjabi (Gurmukhi) translations 
    have been revised.
  • Fixed discrepancies between the two versions of the hints2 texts in several 
    languages. Added a script to detect such discrepancies.
  • Added two new logos for the About dialog window. One of the three available 
    logos is shown at random.
  • Fixed incorrect header in the Dutch PO file.
  • Ensured correct language for all fake quotes. The Forrest Gump and 
    Pakistani paratrooper quotes have been slightly modified.

1.1.162 – 2025-05-28

  • The Marathi, Telugu, and Tamil translations have been revised.
  • Fixed translation issues in several languages.
  • If an error occurs while retrieving the latest version number from the 
    server, the program will now stop retrying instead of displaying an endless 
    loop of error messages.
  • Cosmetic changes in the Icelandic help file.

1.1.161 – 2025-05-25

  • The Urdu translation has been revised.
  • Second revision of the Korean translation.
  • Terminology update: replaced the misleading term “double” with the more 
    accurate “duplicate.” Corresponding translations have been updated where 
    necessary.

1.1.160 – 2025-05-23

  • The Friulian translation has been revised.
  • Second revision of the Japanese translation.

1.1.159 – 2025-05-21

  • Second revision of the Chinese (simplified) translation.

1.1.158 – 2025-05-20

  • The Faroese translation has been revised.

1.1.157 – 2025-05-19

  • The Afrikaans and Western Frisian translations have been revised.

1.1.156 – 2025-05-18

  • The Breton translation has been revised.
  • Fixed an issue in the Uzbek shortcuts window where two shortcuts for  
    different actions where given an identical, misleading translation.
  • Cosmetic changes in Setswana help files.

1.1.155 – 2025-05-17

  • The Irish and Scottish Gaelic translations have been revised.

1.1.154 – 2025-05-16

  • Added Kashmiri translation.
  • The Serbian translation has been revised.

1.1.153 – 2025-05-14

  • The Kazakh translation has been revised.
  • Fixed an issue where, in several translations, an immutable file name was 
    incorrectly translated or altered. Translation notes have been added for 
    each occurrence of the file name to prevent this in the future.
  • Corrected translations for Albanian and Western Frisian.
  • Cosmetic changes in Haitian help files.

1.1.152 – 2025-05-12

  • Added Konkani translation.
  • The Uzbek translation has been revised.
  • Added translation notes to the PO files clarifying that certain strings 
    must be edited by a developer, not a translator, as they are used 
    internally by the program.

1.1.151 – 2025-05-10

  • Added Sindhi translation.
  • The Chinese (Cantonese, traditional) translation has been revised.
  • Cosmetic changes in Esperanto help files.

1.1.150 – 2025-05-08

  • Added Maithili translation.
  • The Galician translation has been revised.

1.1.149 – 2025-05-03

  • The Chinese (traditional) translation has been revised.

1.1.148 – 2025-05-01

  • Added Hausa translation.
  • The Farsi translation has been revised.
  • Fixed a bug that, in some cases, caused certain language versions to 
    display an incorrect plural form or the singular instead of the plural.
  • Corrected garbled plural formula lines in the PO file headers for Chinese 
    (simplified) and Lao.
  • Added missing plural formula to the header of the Māori PO file.

1.1.147 – 2025-04-24

  • Added Cebuano translation.
  • The Thai translation has been revised.

1.1.146 – 2025-04-17

  • Fixed bug where no translations were displayed for the tooltips of the 
    buttons in the find grid.
  • The Vietnamese translation has been revised.

1.1.145 – 2025-04-10

  • The Bengali translation has been revised.
  • The README file has been supplemented and restructured.

1.1.144 – 2025-04-06

  • Enforced right-to-left widget layout for right-to-left scripts after a test 
    case revealed left-to-right layouts were incorrectly applied.
  • Unified label direction layout for all right-to-left scripts.
  • Fixed duplicate mnemonics in Burmese, Chinese (simplified & traditional), 
    Hebrew, Hindi, Kazakh, Khmer, Korean, and Tamil translations.

1.1.143 – 2025-04-04

  • For sections of help texts in languages using right-to-left scripts, 
    replaced cumbersome hacks with the proper use of the HTML entities &#8206 
    (left-to-right mark) and &#8207 (right-to-left mark) to enforce text 
    alignment.

1.1.142 – 2025-04-03

  • The Ukrainian and Hebrew translations have been revised.
  • Fixed an issue where an English sentence in the Icelandic PO file was 
    changed, causing its translation to no longer be displayed.
  • For language versions based on the Cyrillic alphabet, the phrase "not 
    applicable" is now consistently displayed in the regular (i.e., non-italic) 
    font.
  • Small changes in Turkish help files.
  • Small layout improvement for all languages based on a right-to-left script.

1.1.141 – 2025-03-28

  • The Arabic and Icelandic translations have been revised.
  • Cosmetic changes in Macedonian help files.

1.1.140 – 2025-03-22

  • The Hindi translation has been revised.

1.1.139 – 2025-03-16

  • The Georgian translation has been revised.

1.1.138 – 2025-03-10

  • The Armenian translation has been revised.

1.1.137 – 2025-03-04

  • Added Standard Tibetan translation.
  • The Macedonian translation has been revised.
  • Corrections and improvements in the English (en_US) template are now also 
    available in the en_UK version.

1.1.136 – 2025-02-27

  • The Slovenian translation has been revised.
  • Ensured consistent layout in the find and replace window for all 
    translations.
  • Added option for using » « guillemets with the quotation marks replacement 
    script.

1.1.135 – 2025-02-22

  • Added Malay translation.
  • The Norwegian (Bokmål) translation has been revised.
  • One of the sentences in the English (en_US) template now sounds more 
    natural.

1.1.134 – 2025-02-17

  • The Estonian and Lithuanian translations have been revised.

1.1.133 – 2025-02-12

  • The Bulgarian and Slovak translations have been revised.

1.1.132 – 2025-02-07

  • Added Uyghur translation.
  • The Danish translation has been revised.
  • Translation fixes:
    • The semantically ambiguous sentence "Working with Kickshaw" was sometimes 
      translated using the present participle/gerund, whereas the correct form 
      is the infinitive, if the target language has it.
    • For several languages, the phrase "Search key replaced %s." which uses a 
      placeholder for iterative numerals, was corrected.
    • Additional correction in the Arabic translation.
  • Grammatical correction in the English (en_US) template.
  • Fixed markup errors in the Arabic, Thai, and Chinese (traditional) 
    translations.
  • Fixed missing update in the gresource generation script.

1.1.131 – 2025-02-03

  • Added Kurdish (Kurmanji) translation.
  • The Korean translation has been revised.
  • Corrected ungrammatical sentence in the English (en_US) template.
  • Small changes in Swedish help files.
  • Removed unnecessary files.

1.1.130 – 2025-01-30

  • The Swedish translation has been revised.

1.1.129 – 2025-01-26

  • Added Malagasy translation.
  • Added German (Switzerland, Liechtenstein) translation.
  • The Dutch translation has been revised.
  • Several untranslated terms in the Afrikaans translation have been 
    translated. The translation now also has a better translation for 
    "separator."
  • Slovak translation: fixed missing translation in help file and applied 
    cosmetic fix in hints file.
  • Fixed missing translation in Māori help files.
  • Fixed missing translation of the Hebrew hints2 file in its pre-GTK 3.20 
    version.
  • Cosmetic fixes in Friulian and German help files.
  • If the locale is German, but not specifically set to Germany or 
    Switzerland, the program will show the German (Switzerland) help files if 
    the locale is set to German (Liechtenstein), else it will show the ones for 
    German.
    If the locale is Portuguese, but not specifically set to Brazil or 
    Portugal, the program will show the Portuguese (Portugal) help files.
  • Changes in translation preparation script.
  • Removed unnecessary hints folders.

1.1.128 – 2025-01-22

  • Added Māori translation.
  • The Hungarian translation has been revised.
  • Change in the English (en_US) template for better style.

1.1.127 – 2025-01-18

  • The Croatian translation has been revised.

1.1.126 – 2025-01-14

  • The Latvian translation has been revised.
  • Fixed missing translation in Armenian help files.

1.1.125 – 2025-01-11

  • The Romanian translation has been revised.
  • Changes in the wording of the German translation.
  • Cosmetic changes in Latvian and Lithuanian help files.

1.1.124 – 2025-01-08

  • The Italian translation has been revised.
  • Cosmetic change in one of the Turkish help files.

1.1.123 – 2025-01-06

  • The Spanish translation has been revised.

1.1.122 – 2025-01-05

  • The French translation has been revised.

1.1.121 – 2025-01-04

  • The Japanese translation has been revised.
  • A slightly inaccurate word in the Luxembourgish hints texts has been 
    replaced.

1.1.120 – 2025-01-03

  • The Russian translation has been revised.
  • Translation fixes for Polish.

1.1.119 – 2024-12-31

  • The Greek translation has been revised. See also the change below.
  • Fixed a bug concerning a discrepancy in the number of placeholders in a 
    translation of an error message, resulting in a crash.
    The affected translations were:
    Afrikaans, Armenian, Breton, Bulgarian, Croatian, Dutch, French, Italian,
    Galician, Greek, Hungarian, Japanese, Korean, Latvian, Romanian,
    Scottish Gaelic, Slovak, Slovenian, Swahili, Urdu, Uzbek, Vietnamese.
    This bug is similar to the one mentioned in the changelog for 1.1.105, but
    back then, the existence of the variant mentioned here was overlooked.
  • For the German translation, the items of the "Options" menu have been 
    unified to use only the infinitive mood.

1.1.118 – 2024-12-25

  • The Finnish translation has been revised.
  • A couple of issues in the Polish translation have been fixed.

1.1.117 – 2024-12-23

  • The Maltese translation has been revised.

1.1.116 – 2024-12-22

  • The Catalan translation has been revised.

1.1.115 – 2024-12-21

  • The Czech translation has been revised.

1.1.114 – 2024-12-19

  • The Turkish translation has been revised.

1.1.113 – 2024-12-17

  • The Polish translation has been revised.

1.1.112 – 2024-12-16

  • The Welsh translation has been revised.

1.1.111 – 2024-12-15

  • Added a variant for English (en_GB).

1.1.110 – 2024-12-14

  • The Azeri translation has been revised.

1.1.109 – 2024-12-11

  • The Albanian translation has been revised.

1.1.108 – 2024-12-09

  • The Indonesian translation has been revised.
  • Small change in the Italian translation.

1.1.107 – 2024-12-08

  • Added Filipino translation.
  • Locale detection now works properly when one locale is a substring of 
    another (e.g., fi for Finnish and fil for Filipino).
  • Changed the quotation marks in the Portuguese (Portugal) translation to 
    standard guillemets.
  • Cosmetic changes in Luxembourgish help files.

1.1.106 – 2024-12-06

  • Added Portuguese (Portugal) translation.
  • Fixed duplicate mnemonic in Portuguese (Brazil) translation.
  • Made small changes in Portuguese (Brazil) hints files.

1.1.105 – 2024-12-05

  • Revised the Portuguese translation and tailored it entirely to Brazilian 
    Portuguese.
    A distinct version for European Portuguese will be added in the next 
    update.
  • Fixed a bug caused by a mismatch in the number of positional parameters in 
    some error message translations, which could result in a crash.
    The affected translations were: Afrikaans, Albanian, Armenian, Azeri, 
    Basque, Belarusian, Breton, Bulgarian, Catalan, Croatian, Czech, Dutch, 
    French, Galician, Greek, Hungarian, Irish, Italian, Japanese, Kannada, 
    Korean, Latvian, Maltese, Marathi, Norwegian (Bokmål), Norwegian (Nynorsk), 
    Polish, Romanian, Scottish Gaelic, Serbian, Slovak, Slovenian, Spanish, 
    Turkish, Turkmen, Urdu, Uzbek, Welsh.

1.1.104 – 2024-12-02

  • Revised the Basque translation.
  • Fixed an issue in the isiXhosa translation.

1.1.103 – 2024-12-01

  • Added isiXhosa translation.
  • Removed title case from the isiZulu translation.

1.1.102 – 2024-11-29

  • Added isiZulu translation.
  • Cosmetic fix in the Slovenian hints file.

1.1.101 – 2024-11-27

  • Added Lao translation.

1.1.100 – 2024-11-24

  • Added Luxembourgish translation.
  • Translation fixes for Albanian, Arabic, Assamese, Azeri, Bulgarian, 
    Catalan, Chinese (Cantonese, traditional), Chinese (simplified), 
    Chinese (traditional), Dutch, Estonian, Faroese, Farsi, Finnish, French, 
    Irish, Gujarati, Hebrew, Hungarian, Indonesian, Kannada, Khmer, Lithuanian, 
    Macedonian, Maltese, Marathi, Pashto, Portuguese, Romanian, 
    Scottish Gaelic, Slovak, Slovenian, Swahili, Swedish, Telugu, Thai, 
    Turkish, Turkmen, Vietnamese, and Western Frisian.
  • Fixed bug in one of the helper scripts.

1.1.99 – 2024-11-22

  • Added Setswana translation.
  • Fixed missing headlines in Sinhala and Tajik translations.
  • Fixed accidental change in English hints text.
  • Translation fixes for Sinhala.

1.1.98 – 2024-11-20

  • Added Esperanto translation.
  • Added missing Sinhala help text translations (previously still in English).
  • Fixed missing translations in the Kyrgyz and Tajik help texts.

1.1.97 – 2024-11-19

  • Added Mongolian (Cyrillic) translation.
  • Translation fixes for Assamese and Burmese.

1.1.96 – 2024-11-17

  • Added Nepali translation.

1.1.95 – 2024-11-16

  • Added Burmese translation.

1.1.94 – 2024-11-12

  • Revised Chinese (simplified) translation.

1.1.93 — 2024-11-10

  • Added Tajik translation.
  • Fixes and unification in the Kyrgyz translation.

1.1.92 — 2024-11-06

  • Added Sinhala and Kyrgyz translations.
  • The PO files are now included in the archive.

1.1.91 — 2024-06-24

  • Added Assamese translation.
  • Unified several instances of the same sentence in the Punjabi translation.
  • Moved a sentence that appeared five times in the code into a variable, 
    eliminating the need for multiple translation efforts.

1.1.90 — 2024-06-20

  • Added Punjabi (Gurmukhi) translation.
  • Changed quotation marks in the Pashto translation to the official standard.
  • Added another helper script.

1.1.89 — 2024-06-15

  • Added Odia translation.
  • Added two helper scripts to facilitate replacing English text in the hints 
    files with translations.
  • Minor change in a source comment.

1.1.88 — 2024-06-10

  • Added Pashto and Friulian translations.
  • Minor typographical changes in one Urdu help text for unification with 
    Sother right-to-left languages.

1.1.87 — 2024-06-04

  • Added Malayalam translation.
  • Minor unification in the Nynorsk translation.

1.1.86 — 2024-06-02

  • Added Nynorsk translation.
  • Made small corrections in the English template.

1.1.85 — 2024-06-01

  • Added Khmer translation.
  • Fixed a shortcut that was assigned multiple times in the Azeri translation.

1.1.84 — 2024-05-26

  • Added Urdu translation.
  • Made small typesetting adjustments in the Persian translation.

1.1.83 — 2024-05-18

  • Added Gujarati translation.
  • Fixed translation issues in Amharic, Kannada, Serbian, and Telugu.

1.1.82 — 2024-05-14

  • Added Scottish Gaelic translation.
  • Fixed translation issues in Kannada.
  • Made a small change in the Swahili translation.
  • Made a small change in the English template.

1.1.81 — 2024-05-13

  • Added Kannada translation.

1.1.80 — 2024-05-09

  • Added Telugu translation.
  • Added two helper scripts to facilitate replacing English text in hints2 
    with translations.

1.1.79 — 2024-05-04

  • Added Marathi translation.
  • Made a small change in the German translation.

1.1.78 — 2024-04-28

  • Added Turkmen translation.

1.1.77 — 2024-04-24

  • Added Haitian Creole translation.

1.1.76 — 2024-04-22

  • Added Serbian translation (Latin script).

1.1.75 — 2024-04-21

  • Added Amharic translation.

1.1.74 — 2024-04-17

  • Added Tamil translation.

1.1.73 — 2024-04-13

  • Added Belarusian translation.
  • Fixed issue where the Ukrainian help texts contained the shortcut keys from 
    the original English help texts.

1.1.72 — 2024-04-09

  • Added Swahili translation.
  • Fixed missing mnemonic in Farsi and Slovak translations.
  • Fixed incorrect mnemonic in Thai translation.
  • Fixed duplicate mnemonic in Bulgarian, Breton, and Indonesian translations.
  • Fixed usage of incorrect script for mnemonic in Kazakh translation.
  • Changed mnemonic in Lithuanian translation.
  • Cosmetic change.

1.1.71 — 2024-04-07

  • Added Breton translation.
  • Enhanced “replace quotation marks” script so that it can also convert to 
    French-style guillemets (with spaces).
  • Added a test PO file for testing the “replace quotation marks” script.

1.1.70 — 2024-04-05

  • Added Macedonian translation.

1.1.69 — 2024-04-03

  • Added Kazakh translation (Cyrillic script; conversion to Latin script 
    planned).

1.1.68 — 2024-03-31

  • Added Uzbek translation.
  • Updated translation notes and fixed an issue where one translation note was 
    missing.

1.1.67 — 2024-03-29

  • Corrected translations for Dutch, French, Georgian, Spanish, and 
    Vietnamese.

1.1.66 — 2024-03-28

  • Corrected translations for Afrikaans, Catalan, Dutch, Portuguese, and 
    Spanish.
  • Added translation notes to the source text to assist human translators and 
    AI in creating accurate, consistent translations.

1.1.65 — 2024-03-27

  • Added Persian translation.
  • Fixed an issue where a translation required in two places was only applied 
    once.
  • Minor visual adjustment.

1.1.64 — 2024-03-23

  • Added Hebrew translation.
  • Adjusted headline alignment and colon placement in labels for the Arabic 
    translation to match surrounding text or graphical elements.
  • Applied a translation fix in the Find and Replace window.

1.1.63 — 2024-03-20

   • Added Arabic translation.

1.1.62 – 2024-03-16

  • Translation fixes for Azeri, Catalan, Czech, Polish, Romanian, Swedish,
    and Turkish.
  • Fixed a typo that appeared in all languages.

1.1.61 – 2024-03-15

  • Translation fixes for Azeri, Turkish, Polish, Czech, and Irish.

1.1.60 – 2024-03-12

  • Added Irish translation.

1.1.59 – 2024-03-09

  • Added Ukrainian translation.
  • Czech and Polish translation fixes.

1.1.58 – 2024-02-29

  • Added Thai translation.

1.1.57 – 2024-02-21

  • Added Slovenian translation.
  • Changes for more consistent translations.

1.1.56 – 2024-02-16

  • Added Slovak translation.
  • Improved version of the masked quotation marks replacement helper script
    that can now properly handle multiline strings.

1.1.55 – 2024-02-12

  • Added Lithuanian translation.

1.1.54 – 2024-02-09

  • Added Bulgarian translation.

1.1.53 – 2024-02-08

  • Faroese translation fix.
  • More consistent use of Armenian punctuation.

1.1.52 – 2024-02-06

  • Added Faroese translation.
  • Estonian and Icelandic translation fixes.

1.1.51 – 2024-02-05

  • Added Estonian translation.

1.1.50 – 2024-02-02

  • Added Galician translation.
  • update_all_mo.sh and update_all_po.sh now start Python versions of the
    previous shell scripts; the old shell scripts were limited to bash.
  • Moved generate_gresource.py to the updating subfolder; it can now be
    started by running a generate_gresource.sh shell script.

1.1.49 – 2024-01-28

  • Added Georgian translation.
  • The English names of the months are no longer hardcoded; they are now read
    from the settings for the C locale.

1.1.48 – 2024-01-24

  • Added Armenian translation.

1.1.47 – 2024-01-19

  • Added a new shell script, prepare_files_for_new_translation.sh, which is
    run with a locale (e.g., de) as an argument and creates or updates all
    necessary files for a new translation. This script calls several new
    Python scripts.
  • Added a new Python script, generate_gresource.py, which generates the
    .gresource.c file automatically; it no longer needs to be created manually.

1.1.46 – 2024-01-18

  • It is no longer necessary to manually update the update_all_po and
    update_all_mo scripts each time a new translation has been added.
    A new Python script, create_gresource_xml, now generates the .gresource.xml 
    file automatically, so new translations no longer need to be added manually 
    to the XML file.
    Another new Python script, update_makefile, updates the Makefile when new 
    translations have been added.

1.1.45 – 2024-01-17

  • Added Chinese (Traditional) translation.
  • Albanian, Polish, and Basque translation fixes and improvements.
  • Minor translation corrections for Spanish and Danish.

1.1.44 – 2024-01-14

  • Added Cantonese translation.
  • Fixes for Albanian translation.
  • Added missing mnemonics to Vietnamese translation.
  • Slightly reworded a sentence in the template for improved accuracy of the 
    intended meaning.

1.1.43 – 2024-01-09

  • Added Vietnamese translation.
  • Rephrased message text to include more details for better clarity.

1.1.42 – 2024-01-06

  • Added Bengali translation.

1.1.41 – 2024-01-03

  • Added Hindi translation.
  • Minor improvements to Chinese (Simplified) translation.

1.1.40 – 2024-01-01

  • Added Chinese (Simplified) translation.
  • Danish translation fix.

1.1.39 – 2023-12-30

  • Added Korean translation.
  • Fixed a bug where the Japanese translation displayed the wrong headline in
    the combobox for adding actions and options.
  • Japanese translation fix.
  • Translated “n/a” in the Japanese hints texts.
  • The code that determines the correct headline text for the combobox is now
    fully independent of translations, preventing incorrect headlines from
    being shown.

1.1.38 – 2023-12-26

  • Added Japanese translation.
  • Fixed issues in the Albanian translation.
  • Fixed duplicate mnemonics in the English template and in the Maltese 
    translation.

1.1.37 – 2023-12-24

  • Various translation fixes and improvements.

1.1.36 – 2023-12-23

  • Added Icelandic translation.
  • Fixed issue in the Turkish translation.
  • Fixed an issue where the Norwegian info texts for the command line were 
    misplaced, causing the English texts to be shown instead.
  • Fixed an issue where in several translations the English template text 
    appeared in two places.

1.1.35 – 2023-12-18

  • Added Norwegian (Bokmål) translation.

1.1.34 – 2023-12-15

  • Added Hungarian translation.
  • Adjusted the code for setting the background color of the combobox for 
    adding actions and options so that it completely ignores case, ensuring 
    correct behavior for Hungarian as well.
  • In the Swedish translation, fixed an incorrect headline for the 
    aforementioned combobox and improved the translation in this context.
  • Fixed an issue in the Welsh translation.
  • Improved Greek translation.
  • Made small changes to the Albanian and Maltese translations.

1.1.33 – 2023-12-12

  • Added Croatian translation.
  • Fixed crash in the Italian translation caused by an incomplete positional 
    parameter.
  • Corrected translations where the text for the “icon” option button was 
    localized, although it was intended to remain identical to the option name.
  • Fixed regression where the foreground and background colors in the combobox 
    for adding actions and options were missing in the Turkish and Azeri 
    translations; also fixed missing colors in this combobox for the Dutch 
    translation.
  • Fixed markup errors in the Albanian, Indonesian, Turkish, and Welsh 
    translations.
  • Fixed duplicate mnemonic in the Czech translation.
  • Translated “n/a” in the Danish hints texts.
  • Improved consistency in the Turkish translations.

1.1.32 – 2023-12-06

  • Added Danish translation.
  • Fixed bug where, in translations, the headline in the combobox for adding 
    actions and options would not correctly differentiate between the cases of 
    adding actions, actions/options, or options.
  • Fixed missing background color in the aforementioned combobox for the 
    Russian translation.
  • Translation fixes.

1.1.31 – 2023-12-03

  • Added Russian translation.
  • Translation fixes and improvements.

1.1.30 – 2023-11-03

  • Minor translation fixes and improvements.

1.1.29 – 2023-10-11

  • Translation fixes and improvements.

1.1.28 – 2023-10-09

  • Removed several superfluous line breaks from dialog windows.
    
1.1.27 – 2023-10-05

  • Added Greek translation.
  • Modified code to allow language-specific variants of all shortcuts.
  • Translation fixes.

1.1.26 – 2023-09-21

  • Added Latvian translation.

1.1.25 – 2023-09-16

  • Added Indonesian translation.
  • Translation improvement.

1.1.24 – 2023-09-13

  • Added Western Frisian translation.
  • Translation correction and improvements.

1.1.23 – 2023-09-10

  • Added Finnish translation.
  • Updated logo to replace the abstract menu with the Kickshaw sample menu 
    provided by Openbox.
  • Minor corrections to the English template.

1.1.22 – 2023-09-06

  • Added Maltese translation.
  • Fixed error where a sentence in an English info text had been replaced with 
    its Basque translation.

1.1.21 – 2023-09-03

  • Added Basque translation.
  • Translation corrections and improvements.
  • Fixed error where a sentence in an English hint text had been replaced with 
    its Welsh translation.

1.1.20 – 2023-08-29

  • Fixed an issue where multiple placeholders for variables in translatable 
    text could be reordered in translations, resulting in incorrect output. 
    This occurred when translations did not use operand number formats 
    (e.g., %1$i, %2$s), allowing arguments to be switched. For example,.

    Could not open undo stack item %1$i inside tmp folder %2$s for reading!

    could be mistranslated by replacing %1$i and %2$s with %i and %s, leading 
    to swapped arguments in some languages. The update now enforces operand 
    number formats, preventing such errors. While not part of ISO C, operand 
    number formats are a POSIX extension supported by both GCC and Clang.
  • Translation corrections and improvements.

1.1.19 – 2023-08-22

  • Added Welsh translation.
  • Translated “n/a” in Czech hint texts.

1.1.18 – 2023-08-19

  • Added Albanian translation.
  • Improved translations for greater consistency.
  • Corrected a minor grammatical issue in the English template.
  • Removed an unnecessary mnemonic, as a keyboard shortcut already exists.
  • Changed the fake quote of the Chinese person from English to Mandarin, and 
    slightly altered its content.

1.1.17 – 2023-08-16

  • Added Czech translation.
  • Improved Dutch translation for greater consistency.
  • Reverted an error where a sentence in one of the English hint texts had 
    been replaced by its Polish translation.

1.1.16 – 2023-08-02

  • Fixed a bug that could cause a crash when using undo/redo or restoring data 
    from the autosave.
  • Translation corrections and improvements.

1.1.15 – 2023-07-30

  • Added Polish translation.
  • Translation corrections.

1.1.14 – 2023-07-27

  • Translation corrections.

1.1.13 – 2023-07-25

  • Added Swedish translation.
  • Translation corrections.

1.1.12 – 2023-07-23

  • Added Azerbaijani translation.
  • Translation corrections/improvements.

1.1.11 – 2023-07-18

  • Added Turkish translation.
  • A couple of minor improvements to the translations.

1.1.10 – 2023-07-15

  • Added Romanian translation.
  • The program can now handle multiple plural forms in the places where this 
    matters.
  • A couple of translation corrections.

1.1.9 – 2023-06-03

  • Added logo to the About dialog and changed the code accordingly.

1.1.8 – 2023-06-01

  • Added Afrikaans translation.
  • Translation corrections/fixes.

1.1.7 – 2023-05-30

  • Added Catalan translation.
  • Several translation additions/corrections.
  • Text formatting change.

1.1.6 – 2023-05-28

  • Added Dutch translation.
  • Various translation corrections and fixes.
  • Fixed conflicting keyboard accelerator.

1.1.5 – 2023-05-25

  • Added Italian translation.
  • Various translation corrections.
  • Fixed conflicting keyboard accelerators.

1.1.4 – 2023-05-23

  • Added Portuguese translation.
  • Changed button text in English template.
  • Translation changes:
    • Added missing translations.
    • Updated German button text translation.

1.1.3 – 2023-05-21

  • Added Spanish translation.
  • Various fixes for the German translation.

1.1.2 – 2023-05-05

  • Added French translation.
  • In the German translation, fixed inconsistent accelerators for the 
    Shortcuts Window between the menu button and menubar versions.

1.1.1 – 2023-05-01

  • Minor text additions, changes, and corrections.

1.1.0 – 2023-04-28

  • Added support for localization, including a German translation.

1.0.96 – 2023-04-27

  • Equivalent to the behavior for menus and pipe menus, a find-and-replace 
    operation that would delete the text of an item label (making the item 
    invisible) is now blocked.
  • Corrected an incorrect temporary-path reference in one of the hint texts.

1.0.95 – 2023-04-20

  • If Kickshaw was restarted to reset the settings file because of a parsing 
    error, it assumed that the program was already installed. This prevented it 
    from applying the change introduced in the previous update. For this 
    specific restart case, Kickshaw now follows the pattern introduced in the 
    previous update.

1.0.94 – 2023-04-19

  • Kickshaw can now also restart itself if it is not yet installed but only 
    present in a local directory.
  • Small text change for improved consistency.

1.0.93 – 2023-04-01

  • When compiling Kickshaw, there is now an immediate check to ensure that the 
    GLib and GTK version requirements are met. Previously, the minimum 
    requirements were only mentioned in the README file, and the compiler would 
    simply issue warnings when it encountered GLib or GTK functionality that 
    required newer versions than those installed.

1.0.92 – 2023-03-30

  • Fixed an issue where, due to the unreliability of GTK_IS_WIDGET(), the 
    search-and-replace window could fail to open a second time.
  • Added explanatory text to the error message shown when an invalid regular 
    expression is entered in the search box.
  • Added additional G_LIKELY/G_UNLIKELY macros for if conditions as compiler 
    hints.

1.0.91 – 2023-03-28

  • Small adjustment for testing with GCC’s static analyzer.
  • Added content to the README file.
  • Cosmetic changes.

1.0.90 – 2023-03-26

  • When the About dialog is shown and no internet connection is available, 
    Kickshaw now continually checks for a connection in the meantime. If one is 
    established, the version text is updated.
  • The connection process is now handled asynchronously, so attempting to 
    contact the download server without a connection no longer blocks the 
    program.
  • If the download server cannot be reached, no error message is printed to 
    standard error. Instead, a note is added to the version number indicating 
    that checking for updates requires an internet connection.

1.0.89 – 2023-03-24

  • Slightly refined the error message text for invalid arguments.
  • Condensed the command-line help text so it now fits within an 80×24 
    display, without removing any content.
  • Miscellaneous code-unification changes.

1.0.88 – 2023-03-22

  • Reintroduced the old behavior allowing Kickshaw to be started with a 
    non-existent file as an argument, as long as the directory where it would 
    be located already exists.
  • After saving a file, if Openbox is running, Kickshaw now properly waits to 
    check whether the command openbox --reconfigure succeeded.
  • Miscellaneous code-unification changes.

1.0.87 – 2023-03-20

  • Before switching to getopt_long for option parsing, if more than one 
    invalid option was passed to Kickshaw, it displayed all of them rather than 
    just the first. This behavior has been restored for clarity.
  • Removed redundant code.
  • Cosmetic changes.

1.0.86 – 2023-03-19

  • If a directory is passed as an argument, Kickshaw will no longer attempt to 
    open it; instead, it prints an error message and quits.
  • If iconv is available, Kickshaw now checks whether a file path passed as an 
    argument points to a UTF-8-encoded text file. If not, it prints an error 
    message and terminates.
  • Minor/cosmetic changes.

1.0.85 – 2023-03-18

  • Switched to the GNU extension getopt_long for parsing command-line options. 
    This results in shorter, simpler code and also enables the combination of 
    arguments, e.g., -hv.

1.0.84 – 2023-03-15

  • Removed a duplicate word in the dialog text shown when Kickshaw was 
    restarted after an irregular termination and the edit history could not be 
    restored because it had already been removed from the temporary folder 
    where it was stored.
  • Minor/cosmetic changes.

1.0.83 – 2023-03-10

  • If glibc is not installed on the target system, Kickshaw is now compiled 
    with a replacement function for strverscmp. This allows Kickshaw to be 
    compiled independently of glibc again. As a result, Kickshaw is now less 
    tied to the GNU/Linux ecosystem and can be built without difficulty on BSDs 
    and other Unix/Unix-like operating systems.

1.0.82 – 2023-03-07

  • Removed a superfluous function parameter and its associated code.
  • Replaced some TRUE and FALSE parameters with more descriptive identifiers 
    defined by enumerations.
  • Small internal change to the About dialog window.
  • Fixed garbled text in comments.
  • Cosmetic changes.

1.0.81 – 2023-03-04

  • Fixed usage of an incorrect auto-cleanup function.
  • Removed remaining variables that stored the size of allocated memory.
  • Cosmetic changes.

1.0.80 – 2023-03-01

  • When the program is restarted due to a change in client decorations or menu 
    type, the GtkApplication instance is now terminated beforehand, preventing 
    potential issues.

1.0.79 – 2023-02-26

  • Replaced the few remaining uses of GSlice memory slices with standard 
    memory allocation (g_malloc).
    g_malloc has improved over time, making GSlice no longer advantageous. 
    While GSlice could have remained in the code (as of GLib 2.76 it uses 
    g_malloc internally), switching entirely to g_malloc unifies memory 
    handling.
    Storing the size of allocated memory in a variable for later freeing is no 
    longer necessary.

1.0.78 – 2023-02-25

  • Simplified code by using a GLib function instead of a custom 
    implementation.

1.0.77 – 2023-02-12

  • Simplified a loop, eliminating the need for an explanatory comment.

1.0.76 – 2023-02-10

  • More unified and efficient handling of the home folder path string. 
    Substitution of the home path with a tilde in the title/header bar now also 
    works when the home directory is located somewhere other than 
    /home/user_folder. If the current path lies outside the home folder, it is 
    now also shown in the header bar.

1.0.75 – 2023-02-06

  • The only occurrence of g_assert() is now omitted by default during 
    compilation. Fixed garbled text in a comment.

1.0.74 – 2022-10-09

  • With version 2.74, GLib’s port of GRegex to PCRE2 has been completed. 
    Kickshaw now uses GRegex again: up to GLib version 2.72, PCRE is used 
    internally via GRegex; in newer versions, GRegex uses PCRE2 internally.
    The dependency on PCRE2 has thus moved from Kickshaw to GLib, making GTK 
    the only direct dependency of Kickshaw again.
  • Fixed missing escaping in a regular expression.
  • A compiler warning caused by an internal change in GLib 2.74 is now avoided 
    via a version check.

1.0.73 – 2022-06-15

  • Added a check for the existence of a path in case the program is instructed 
    to scroll to a specific cell.

1.0.72 – 2022-06-06

  • The source files are now compiled using the newer GNU11 standard, replacing 
    GNU99. At the time of this update, this eliminates a few warnings when 
    compiling with newer versions of Clang. The C11/GNU11 standard is now 
    widespread and well-supported, so compiling with it should work on nearly 
    all current systems.
  • Minor internal and cosmetic changes.

1.0.71 – 2022-05-20

  • Minor internal changes.
  • Changed one of the fake quotes.

1.0.70 – 2022-05-17

  • Minor internal changes.
  • Changed one of the fake quotes.
  • The GTK team’s plans regarding the future of GRegex have changed. The 
    previous comments in this changelog regarding the future of GRegex were 
    based on the assumption that the GTK/GLib team would not adopt PCRE2 
    internally, as initially announced. At the time, the recommendation was to 
    use PCRE2 directly. However, the GTK/GLib team has since decided to 
    transition GRegex to PCRE2 after all. The earlier comments in this 
    changelog are therefore outdated and have been revised accordingly.

1.0.69 – 2022-05-11

  • Minor internal changes.
  • Small change in one of the fake quotes.
  • At some point, glib-compile-resources was changed to generate just one 
    array with the compiled resources. The HOWTO file has been updated to 
    reflect this.
  • Cosmetic change.

1.0.68 – 2022-03-23

  • Removed unused code that was never called.
  • Slight rearrangement of code.

1.0.67 – 2022-03-22

  • Corrected a typo in the error message for icon-related issues.
  • Fixed a loop condition (the original condition did not lead to incorrect 
    behavior but was incorrect).

1.0.66 – 2022-03-21

  • Corrected capitalization of one of the application menu items.
  • Simplified code.

1.0.65 – 2022-03-12

  • Centralized all function declarations in the main include file to simplify 
    management and improve maintainability. During this process, obsolete or 
    redundant declarations were removed and others cleaned up.
  • Cosmetic changes.

1.0.64 – 2022-03-10

  • Fixed a memory leak that occurred when invisible menu elements were 
    visualized at load time through user interaction.

1.0.63 – 2022-02-25

  • The space reserved for toggle symbols in the context menu is now hidden, 
    as it is not used there.
  • Minor cosmetic changes.

1.0.62 – 2022-02-21

  • Headlines in the context menu are now insensitive, making them visually and 
    behaviorally distinct from selectable menu items.
  • The release year in the resource file info_version is no longer hardcoded. 
    This avoids the need to re-copy unchanged resource files into the codebase 
	when a new release occurs in a different year but the content of those 
	files remains the same.

1.0.61 – 2021-12-30

  • Fixed a compilation error introduced with GLib 2.70. This version of GLib 
    added Pango autocleanup macros, which had previously been manually defined 
	in Kickshaw’s main include file to provide compatibility with older GLib 
	versions. With GLib 2.70 installed, this duplication caused conflicts, 
	which have now been resolved.

1.0.60 – 2021-09-02

  • Since GLib has not yet transitioned to PCRE2, GRegex has been replaced with 
    PCRE2-based code in Kickshaw. This introduces an additional dependency: 
	PCRE2, which must be built with Unicode support (generally the default).
  • Bugfix (regression): Clicking the Cancel button in the restart confirmation 
    dialog (triggered by a change of decoration type or menu type) now 
	correctly cancels the restart.
  • Bugfix: When saving a menu to the default path (.config/openbox/menu.xml), 
    the autosave file was not being deleted as intended; this has been 
	corrected.
  • Dialog window header bar settings are now applied based on dialog type. For 
    file chooser dialogs (open/save), header bars have been disabled again.
  • Minor cosmetic adjustments.
  • Removed redundant code.
  
1.0.59 – 2021-08-30

  • In calls to g_regex_match_simple(), occurrences of G_REGEX_ANCHORED have 
    been moved from the compile options to the matching options as 
	G_REGEX_MATCH_ANCHORED.
    For all cases used in Kickshaw, the end result is the same. 
	Since both G_REGEX_ANCHORED (compile) and G_REGEX_MATCH_ANCHORED (match) 
	were previously specified, this change unifies the approach.

1.0.58 – 2021-08-13

  • Dialog windows now use a custom header bar.
  • The main window still uses server-side decorations by default, but the new 
    header bar makes more sense for dialog windows by reducing visible elements 
	to only the title text. This also removes uncertainty about which of the 
	listed options (if any) will apply if the dialog is closed via its close 
	button.
    The About dialog now also uses a header bar. When server-side decorations 
	are used, some environments may show a maximize button in the About dialog, 
	but clicking it has no effect. A minimize button is also of little 
	relevance for the About dialog.
    Since GtkShortcutWindows (used by Kickshaw) already features a header bar, 
	this change also helps to unify the application’s appearance.
  • The second argument for create_file_dialog() has been made clearer by 
    replacing TRUE and FALSE with OPEN_FILE and SAVE_FILE.
  • Minor and cosmetic changes.

1.0.57 – 2021-08-06

  • Grouped settings boolean variables into a bit field for unified handling 
    and more compact code (e.g., enabling loop-based operations). The GSettings 
	API still appears more suitable for projects larger in scope than Kickshaw.
  • Removed redundancy in the restart dialog code. Previously, similar restart 
    dialog code existed in both variants of the change_view_and_options 
	function (GtkMenu and GMenu) with only minor adaptations. The code has been 
	moved to a separate function, eliminating duplication.
  • Bugfix (regression): Fixed an issue where, after the program was terminated 
    and an undo stack file was loaded on restart (including after a normal 
	restart due to a decorations or menu type change), the state was 
	incorrectly marked as "edited.". This could lead to the program erroneously 
	warning about unsaved changes if restarted under these conditions and then 
	closed immediately.
  • Fixed a minor bug that did not affect the final output.
  • Minor changes:
    • When a menu cannot be loaded properly, the title or header bar now shows 
	  "Unsaved Menu", as in other empty menu cases.
    • Moved another group of variables to a bit field.
    • Slightly reduced memory usage.
  • Cosmetic changes (typo in variable name, corrected indentation of two fake 
    quotes, etc.).

1.0.56 – 2021-08-03

  • Added mnemonics to the tabs in the Hints window so they can be accessed 
    more quickly via keyboard.
  • Made some button mnemonics in the button box more obvious (e.g., by using 
    the initial letter). These changes do not cause conflicts with other 
	mnemonics.
  • Entry completion now works with non-ASCII characters.
  • Sorting of matches follows the current locale; Kickshaw cannot 
    automatically determine if another locale should be used, especially when 
	entries in multiple languages are present in the tree store.
  • When an option is selected, entry completion now only shows matches for 
    the same option type. For example, if a wmclass option is selected, only 
	wmclass matches are displayed. This avoids cluttering the suggestions list 
	with unrelated matches.
  • After saving the menu, if an undo or redo action is performed, the Save 
    toolbar button and menu item are now re-enabled (sensitive) again.
  • Changed the method for forcing the application’s language to English 
    application-wide. The previous approach had stopped working due to code 
	changes and restructuring over time.
  • Restructured code to reduce variable scopes.
  • Removed redundant code.
  • Minor and cosmetic changes.

1.0.55 – 2021-07-31

  • Simplified the code for the Hints window.
  • Changed the type of certain loops for a clearer code structure.
  • Added further acknowledgements to the credits.
  • Moved the list of shortcuts and the base text for the “fake quote” 
    (constructed from random elements) into resource files. Updated code to 
	load these texts from resources.
  • Rewrote and updated the HOWTO file for resource files.
  • Bugfix (regression): re-added a missing const qualifier.
  • Minor changes:
    • Added two auto cleanups.
    • Added const qualifiers to arguments of an auxiliary function and the 
	  undo/redo autosave messaging function.
    • Added a NULL termination check to the add_elements_to_ptr_array auxiliary 
	  function.
    • Changed the name of a function.
  • Cosmetic changes, such as:
    • Unified the text in the Find and Replace menu item and window.
    • Rearranged entries in definitions_and_enumerations.h.

1.0.54 – 2021-07-29

  • Updated hint texts.
  • Removed redundant code.
  • Improved wording in a message inside the makefile.
  • Added a note to the README file that the compiler can be easily switched 
    from the default GCC to Clang by using make CC=clang.
  • Added a note to the README file specifying the variety of English used in 
    the program (American English).
  • "Americanized" remaining British English function names and one word inside 
    a comment.
  • Corrected a spelling mistake in a function name.
  • Cosmetic change (corrected spelling mistake of a menu element in a code 
    comment).

1.0.53 – 2021-07-27

  • Capitalization in menu items, tooltips, title bars, buttons, combo box 
    items, and headlines now adheres more consistently to the established 
	standards. The reference style used is APA Style. This has also been noted 
	in the README file.
  • Expanded the content for the fake quote that is constructed out of random 
    elements.
	The ellipsis is no longer used in this quote, as it disrupts the
	calculation of line break positions. While the iteration used for this 
	calculation moves from one UTF-8 character to the next, an ellipsis 
	occupies the space of three ASCII characters on screen. A line that 
	includes an ellipsis therefore takes up too much space if the UTF-8 
	character is used.
  • Minor code changes related to the calculation mentioned above.

1.0.52 – 2021-07-25

  • Bugfixes related to the fake quote constructed from random elements:
    • Fixed an incorrect conversion specification in a call to strftime. 
      The current month is now correctly obtained as a decimal number. 
	  This issue only affected the quote if the random year matched the 
	  current year.
	  Related code handling this month variable has also been 
	  updated.
    • The random day was previously selected only from the range 1 to the 
	  latest possible day minus one. The range now includes the latest possible 
	  day (i.e., depending on the month, day 29–31).
  • Revised several fake quotes, mostly to improve language.
  • Added new content for the fake quote constructed from random elements.
  • Replaced three consecutive dots (...) with the Unicode ellipsis character 
	(…) in text.
  • Minor changes and code reorganization:
    • Kickshaw fork names have been moved to a resource file.
    • Month names are now again stored within the program itself.
´   • Resource files are now specifically intended for data that can be 
      extended over time.
    • Data that is unlikely to change and consists of only a small number of 
	  elements remains in the program itself.

1.0.51 – 2021-07-23

  • Bugfix: If the menu type was set to menu bar and the settings file had 
    sf-usetabs and sf-separaterootmenu both set to true, the program failed to 
    set the corresponding global variables to true.
    This occurred even though the window showed “Use Tabs for Indentations…” 
    and “Keep Root Menu Separate…” as checked. As a result, menus were saved 
	with spaces for indentation and an integrated root menu unless the user 
	manually toggled these items twice.
  • In the hints, the location of the settings file is now specified more 
    precisely.
  • Corrected the English of one fake quote.
  • Minor changes.

1.0.50 – 2021-07-22

  • Bugfix: If the menu was modified during the loading process to correct 
    errors, convert deprecated "execute" options, and/or visualize or delete 
	invisible menu elements — and the program was then closed without any 
	further edits — the "Changes to the Menu Will be Discarded" dialog appeared 
	with an incorrect message intended for another case.
  • It would state: “[…] the changes have been reverted and the menu is now 
    back at its initial stage.” This message is now replaced with one 
	appropriate to the situation described above.
  • Bugfix: If a new menu was created and later restored after a regular 
    restart or an unexpected termination, the list of rows containing icons was 
	not restored. This meant that changes to icon paths and formats were no 
	longer monitored. (A “regular restart” here refers to the automatic restart 
	after changing the menu type or client decorations.)
  • Bugfix: All relevant global data is now stored in the undo stack files. 
    Restoring a menu now also restores the last save position in the stack and 
	whether the menu had already been edited. This prevents unintended changes 
	to toolbar button sensitivity — for example, the Save button becoming 
	active when no changes have been made.
  • Bugfix: If a new file was opened but could not be parsed for any reason, an 
    undo stack item was still being added. This incorrectly activated the Undo 
	toolbar button and menu item. This behavior has been fixed.
  • If the menu was altered during the loading process but no manual edit has 
    yet been made, the tooltip for the Save button now includes a note 
	explaining that the menu has already been changed (but not yet saved back) 
	— clarifying why the button is active.
  • All possible “loading process edit” statuses are now saved in the undo/redo 
    stack files, so they can be restored after an unexpected termination 
	(e.g., crashes).
  • More efficient processing of undo stack files.
  • For the randomly constructed fake quote: further expanded the main text.
  • Since g_autolist and g_autoslist were introduced in GLib 2.56 (2018), 
    conditional compilation has been added to allow building on systems with 
	older GLib versions.
  • Minor/cosmetic changes.

1.0.49 – 2021-07-19

  • The list of suggestions for entry field completion is now sorted 
    alphabetically.
  • For entry field completion: the words "Execute", "Exit", "Reconfigure", 
    "Restart", and "SessionLogout" (which designate actions), as well as 
    "command", "prompt", "startupnotify", "enabled", "name", "wmclass", and 
    "icon" (which designate options), are no longer included in the list of 
    suggestions if they appear in the context of an action or option, 
    respectively, and the currently focused entry field refers to a label.
    These designators are added internally by the program (not by the user), 
    are invisible, and do not represent labels. If the same words appear 
    outside of such contexts, they will still be included in the suggestion 
    list.
  • In addition to g_autofree and g_autoptr, now also using g_autolist and 
    g_autoslist where appropriate.
  • For the randomly constructed fake quote: added an additional random 
    element; also expanded the quote’s main text.
  • Minor changes.

1.0.48 – 2021-07-16

  • Entry fields in the entry grid now support completion, offering suggestions 
    based on existing text in the respective column.
  • The entry field for the "Find" grid has been changed from a generic 
    GtkEntry to the more specialized GtkSearchEntry.
  • Added more fictional cities to the pool used for generating the fake quote 
    constructed from random elements.
  • Expanded the Credits section and corrected a language error there.

1.0.47 – 2021-07-13

  • Reworded a menu item in the View menu. If the user had a previous version 
    of Kickshaw installed, launching this version for the first time requires a 
    reset of the user settings.
  • Added more fictional cities for the randomly constructed fake quote.
  • Added a randomly chosen phrase expressing doubt to accompany the quote.
  • README file:
    • Emphasized that the search functionality is based on UTF-8.
    • Added instructions for handling a harmless issue.

1.0.46 – 2021-07-10

  • Added const qualifiers in additional locations where appropriate.
  • If multiple resource files exist for a given category, they are now placed 
    in subfolders to facilitate operations such as file counting.
  • The number of fake quotes is no longer hardcoded—it is now dynamically 
    calculated, so adding or removing quotes no longer requires manually 
    updating a counter.
  • Minor changes.

1.0.45 – 2021-07-07

  • Various code improvements and rearrangements to enhance code style and 
    prevent false positives reported by the Clang Static Analyzer.
  • Previously, the random generator used for creating the fake quote 
    (constructed from random elements) only evaluated the first ten fictional 
    cities from the list.
  • Added two fictional cities from Saints Row to the list used for generating 
    the fake quote.

1.0.44 – 2021-06-29

  • Removed redundant code.

1.0.43 – 2021-02-24

  • Updates to the "Credits" section in the About window:
    • Additional credits added.
    • Correction: The menu editor that served as the original model for moving 
      nodes was the Xfce 4.4 menu editor, not its successor Alacarte.

1.0.42 – 2021-02-11

  • If the user chooses to quit the program and edits have been made but then 
    reverted (i.e., the menu is identical to either the initial state or the 
    last saved state), a different confirmation message is now shown—distinct 
    from the message used when the current menu differs from both the initial 
    and the last saved state.
  • Minor changes related to the confirmation dialog window mentioned above.

1.0.41 – 2021-02-06

  • Improved layout of the XML sample code shown in the menu file hints.
  • Introduced a helper function to streamline the code for displaying 
    notification dialogs.
  • Added keyboard mnemonics to several dialogs.

1.0.40 – 2021-02-03

  • Added two new options that affect how the menu is saved.
    The first allows users to choose the type of indentation: either four 
    spaces or a tab character.
    The second controls the structure of the saved menu:
    • either all entries are placed inside the root menu (without using links),
    • or menus are placed outside the root menu, with the root menu linking to 
      them.
    By default, tab characters are used for indentation, and menus are saved 
    separately (outside the root menu).
    If there are invisible orphaned menus and the menu is saved with the 
    "Keep Root Menu Separate in Saved Menu File" option disabled, these 
    orphaned menus will now become visible—provided they have a label—because 
    they are integrated into the root menu in that case.
  • Corrected invalid XML sample code in the hints files (e.g., incorrect 
    formatting and missing self-closing dashes in tags).
  • The saved menu file will no longer contain an unnecessary extra line break 
    after the <openbox_menu> tag when the root menu is saved separately (see 
    above) and no menus are listed above the root menu.

1.0.39 – 2021-01-23

  • When using client-side decorations, the title and subtitle are now assigned 
    fixed font sizes to ensure that the appearance of the headerbar remains 
    consistent across different themes. (If the fonts are too large, they may 
    appear disproportionate compared to the headerbar buttons.)
  • Minor/cosmetic changes.

1.0.38 – 2021-01-19

  • When the application is restarted due to a change in client decorations or 
    menu type, the menu data—including the editing history (for undo/redo)—is 
    now restored. It is therefore no longer necessary to ask the user whether 
    to save the menu if unsaved changes exist.
    If the program has been terminated irregularly, the editing history can 
    also be restored—as long as the temporary folder containing the undo stack 
    has not yet been deleted.
  • Fixed incorrect markup in an error message.
  • Minor/cosmetic changes.

1.0.37 – 2021-01-15

  • Replaced the remaining instances of unsafe const-qualification cast removal 
    with safer code.

1.0.36 – 2021-01-12

  • If a menu has been restored from an autosave, and it has never been saved 
    yet, a dialog now appears when the user attempts to quit the program. This 
    dialog, similar to the one for unsaved changes, asks the user whether to 
    abort quitting.

1.0.35 – 2021-01-09

  • Changed the shortcut for accessing the help window from Ctrl+F1 to F1, 
    since F1 is the standard for opening general help. Additionally, Ctrl+F1 
    may sometimes conflict with other system or application shortcuts.
  • Fixed memory leak when accessing resource texts.
  • Rewrote code to avoid repetition.
  • Minor/cosmetic changes.

1.0.34 – 2021-01-06

  • The app is now properly closed before a restart is initiated due to a 
    change in client-side decorations or menu type. This should prevent 
    occasional restart failures.
    (Note: This change was based on an erroneous assumption and was reverted in 
    version 1.0.38.)

1.0.33 – 2021-01-03

  • The date in the specially composed fake quote in the credits can now never 
    be later than the current date. (It doesn't really matter, but that’s how 
    it’s supposed to be.)
  • The English in the (fake) quotes is now more natural/native-like.
  • Minor/cosmetic changes.

1.0.32 – 2020-09-13

  • Minor grammar and punctuation improvements in the resource texts.

1.0.31 – 2020-07-19

  • Minor/cosmetic changes.

1.0.30 – 2020-07-09

  • Added autosave. The hint texts have been updated accordingly.
  • Removed the ability to save a new, unedited empty menu if its path was 
    passed as an argument. Previously, saving was allowed by setting the 
    change-monitoring variable to TRUE, even if no actual changes had been 
    made. This resulted in Kickshaw prompting the user about unsaved 
    changes—despite none having occurred—which made no sense in that context.
  • Small/cosmetic changes.

1.0.29 – 2020-07-07

  • When adding a new separator while a menu is selected, the program now asks 
    whether the separator should be inserted into the selected menu or at the 
    same level. This behavior was already implemented for new (pipe) menus and 
    items and has now been added for consistency.
  • Kickshaw now accepts the -h and --help arguments, which refer the user to 
    the hints window. Either argument can be combined with -v or --version.
    The hint texts have been updated to reflect these changes.
  • When started with a path as an argument, Kickshaw now correctly handles 
    paths containing a tilde and at least one space 
    (e.g., ~/test/test menus/testmenu.xml). For relative paths such as 
    ./menuname.xml, Kickshaw now displays a shortened version beginning with a 
    tilde in the title or header bar.
  • If the menu file is located directly in the home folder, the full path is 
    now shown in the title or header bar instead of just a tilde.
  • The const type qualifier is now used more consistently throughout the code.
  • Minor changes to the fake quotes in the credits.
  • Other small/cosmetic changes.

1.0.28 – 2020-06-26

  • Changes to the (fake) quotes code and to some of the (fake) quotes 
    themselves.
  • Fixed memory leak.

1.0.27 – 2020-06-21

  • The (fake) quotes in the About dialog credits are now randomly selected 
    from a pool of quotes. One of them is real. Additionally, one quote is 
    constructed dynamically from randomly chosen elements.
  • Fixed memory leak that occurred when the hints window was shown.

1.0.26 – 2020-06-12

  • Kickshaw now uses GResource to compress longer static texts and simplify 
    their editing. These texts are now stored as plain text files inside a 
    separate folder.

1.0.25 – 2020-06-06

  • When a dark theme is in use and a duplicate menu ID is typed inside the 
    “Enter Values” mask, the cursor color inside the entry field is now also 
    adjusted, in addition to the font color.
  • Bugfixes for the menubar (regressions):
    • When the decoration type was changed, the chosen type was not preserved 
      when the application was started anew (i.e., not restarted from within 
      the application).
    • The “Keep Highlighting” menu item is once again insensitive by default.
  • Small/cosmetic changes.

1.0.24 – 2020-06-01

  • Small/cosmetic changes.

1.0.23 – 2020-05-28

  • Improved presentation when using a dark theme or a theme with a gradient.

1.0.22 – 2020-05-26

  • Fixed crash when Glib ≥ 2.64 was installed and a new (pipe) menu or item 
    was added.
  • Small/cosmetic changes.

1.0.21 – 2020-05-24

  • When restarting after changing the decoration type or application menu 
    type, the old undo stack items folder is now removed.
  • Code restructuring to eliminate false positives issued by GCC and to group 
    related code and variables.
  • Small/cosmetic changes.

1.0.20 – 2020-05-22

  • In addition to --version, the -v argument is now also accepted to display 
    the installed version.
  • Fixed bug where the search path was not used when restarting the 
    application.
  • Resolved issue where Openbox was occasionally not reconfigured after 
    saving.
  • Small/cosmetic changes.

1.0.19 – 2020-05-20

  • To ensure compatibility with still-supported distributions such as Ubuntu 
    16.04 at the time of this release, the required GTK version to compile the 
    program has been lowered to 3.18.
  • Minor cosmetic changes.

1.0.18 – 2020-05-18

  • Now using GLib’s auto-cleanup macros where applicable.
  • When restarting the application after changing the decoration type or 
    application menu type, the previously opened menu is now reloaded instead 
    of always reverting to the default menu (if one exists).
  • The "Search and Replace" dialog can no longer be opened multiple times via 
    the application menu. If it is already open, the existing instance is 
    brought to the foreground.
  • Bugfix (regression): Fixed crash when saving a menu.
  • Bugfix (regression, applicable only when using the menu button): If 
    deprecated execute options were converted to command options and the 
    setting to always show a message about such conversions was active, this 
    setting was inadvertently deactivated—regardless of what the user had 
    selected in the dialog. This has been fixed.
  • Fixed:
    • Duplicate appearance of certain dialogs.
    • Missing reset of menu item status when the user had the traditional 
      menubar enabled, changed the decoration type, and then clicked “Cancel” 
      in the confirmation dialog.
  • Fixed memory leaks.
  • Minor cosmetic changes.

1.0.17 – 2020-05-10

  • Users can now switch between a menu button and a traditional menubar.
  • Minor cosmetic changes.

1.0.16 – 2020-05-06

  • When changing the decoration type, users are now prompted to apply the 
    change by allowing the application to restart itself or to cancel. 
    Previously, a manual restart was required.
  • Dialog button arrangement is now more consistent throughout the 
    application.
  • It is now possible to create a new menu when the current menu is empty.
  • Minor cosmetic changes.
  • Bugfix (regressions related to window title with server-side decorations):
    • The title is no longer set to “Unsaved Menu” on startup if no menu file 
      is found.
    • Fixed memory leak.

1.0.15 – 2020-05-04

  • Added an option to switch between server-side decorations and client-side 
    decorations. This can be selected from the application menu’s options 
    submenu. Server-side decorations are now set as the default. However, when 
    using this option, the application menu is accessed via a GtkMenuButton. 
    Since users likely won't need to access the application menu frequently, 
    using a GtkMenuButton seemed appropriate to eliminate one of the four top 
    bars.
  • Bugfix: When updating to 1.0.14, error messages appeared because the 
    version number of the settings file was not parsed correctly.
  • Minor cosmetic changes.

1.0.14 – 2020-05-03

  • The GUI now uses client-side decorations by default (this was made optional 
    in the next version). This reduces the number of visible bars from four to 
    two, as the former menu bar, toolbar, and title bar are now combined into a 
    single header bar. As a result of this change, support for older GTK 
    versions has been dropped, since GtkHeaderBar requires GTK ≥ 3.10. Given 
    that GTK3 is now only maintained and no longer actively developed, this 
    should not have negative consequences, as installations using older GTK3 
    versions have become rare.
  • Added shortcuts for visualizing orphaned menu elements.
  • Removed the option to show alternating row colors in the tree view. This 
    feature had already been deprecated for some time, as GTK no longer allows 
    it to be set programmatically (except via g_object). In most cases, the 
    option was effectively useless.
  • Minor cosmetic changes.

1.0.13 – 2020-04-25

  • An error message will now appear if the settings file contains invalid 
    keys.
  • Minor cosmetic changes.

1.0.12 – 2020-04-18

  • Further additions and adjustments to the text in the “Hints” window.
  • Replaced the use of the standard system() C library function with GLib 
    functions for running openbox --reconfigure.
  • Minor cosmetic changes.
  • Re-disabled the built-in interactive search for the tree view (this time 
    using gtk_tree_view_set_enable_search() instead of 
    gtk_tree_view_set_search_column()). As before, Kickshaw provides its own 
    search functionality, and the built-in GTK search does not work properly 
    within Kickshaw’s setup. This deactivation is now also documented in one of 
    the help files.

1.0.11 – 2020-04-11

  • Added "Report Issue" menu item inside the "Help" menu for reporting bugs. 
    This opens a dialog window from where the user is redirected to the 
    Kickshaw bug tracker webpage.
  • Additions and changes to the texts in the "Hints" window. The window can 
    now also be closed by pressing the escape key, in addition to <CTRL> + F1, 
    which is also the accelerator for opening the window. This was done to make 
    its behavior consistent with the "Shortcuts" and "Find & Replace" windows.
  • Miscellaneous code reworkings.
  • Bugfix (regression): After a change was made to the menu, an additional 
    change or a click on the treeview was required for the "Save" menu and 
    toolbar item to become sensitive.
  • Bugfix (for GTK versions < 3.4): The application window didn't show up.
  • Workaround (for a GTK bug in GTK versions < 3.1.4):
  • The functionalities of gtk_grid_set_column_homogeneous() and 
    gtk_grid_set_row_homogeneous() were flipped in these early GTK versions. 
    A GtkBox is now used instead of a GtkGrid to avoid this bug, since using a 
    GtkBox results in a visually equivalent layout.

1.0.10 – 2020-04-04

  • Added a hints window accessible from the "Help" menu.
  • The shortcut for opening the window is CTRL + F1 (this was later changed 
    to F1 in version 1.0.35; see the comments there).
  • Bugfix: The string comparison issue (see previous revision) has now also 
    been fixed for the settings file.

1.0.9 – 2020-03-28

  • The entry form for a new menu now alerts the user about duplicate menu IDs 
    as they are typed, not just when the "Done" button is pressed. Unlike the 
    "Done" button, this check does not trigger a popup window, but instead 
    highlights the entry field and shows a temporary label next to it.
  • The labeling of mandatory menu IDs has been clarified for the case of empty 
    string IDs (see below).
  • Like the "Find" grid, the "Find and Replace" dialog window can now be both 
    shown and hidden using the same shortcut (CTRL + H for "Find and Replace"). 
    Previously, the shortcut could only be used to show the dialog, not to hide 
    it. This change ensures consistent handling of "Find" and "Find and 
    Replace".
  • Added a "List of Shortcuts" window accessible from the "Help" menu.
    The shortcut for opening the window is CTRL + L. This widget was introduced 
    only in GTK 3.20, so if this or a higher version is not available on the 
    user's PC, the "Shortcuts" menu item will not be created or shown.
  • Regardless of the installed GTK3 version, the text of a menu file is now 
    always checked for UTF-8 validity. Since this change only affects the 
    oldest GTK3 versions, it is unlikely to impact most users.
  • Bugfix: A simple string comparison does not always work correctly when 
    comparing versions, as was done in the "About" window. For example, 1.0.9 
    would be incorrectly shown as newer than 1.0.10. Version comparison is now 
    done using glibc’s specialized strverscmp().

1.0.8 – 2020-03-21

  • Since an empty string is a valid menu ID, the entry form for creating a new 
    menu will now mark the menu ID field as mandatory if a menu with an empty 
    string as ID already exists.

1.0.7 – 2020-03-14

  • If there are duplicate or contradictory attribute values for a menu inside 
    and outside the root menu, Kickshaw will now handle this the same way 
    Openbox does.
  • Minor/cosmetic changes.

1.0.6 – 2020-03-07

  • Capitalization now follows standard spelling rules throughout the program.
  • Small/minor/cosmetic changes.

1.0.5 – 2020-02-26

  • Bugfix (regression): If a menu element with the label "Exit" or 
    "SessionLogout" was selected and a new menu element was added, the new 
    element would receive a "yes" value regardless of its type.
  • Code simplification.
  • Small/cosmetic changes.

1.0.4 – 2020-02-23

  • Bugfix: After adding a (pipe) menu, the sensitivity of the "Options" menu 
    bar item was not reset to sensitive.

1.0.3 – 2020-02-22

  • Bugfix (regression): Adding a menu or item with an icon and then adding a 
    separator directly afterward would result in the separator receiving the 
    icon of the previously added menu or item.
  • Changing an "enabled" or "prompt" option of an Exit or StartupNotify action 
    will now trigger the creation of a new undo stack item. This change is also 
    recorded internally, so the program will prompt for confirmation if the 
    user attempts to exit without saving.
  • If the value entered into one of the entry fields below the tree view 
    matches the currently stored value, no new undo stack item is written.
  • Addition to the credits in the About dialog.

1.0.2 – 2020-02-16

  • Fixed a memory leak in the About dialog and in the error message shown when 
    removing an undo stack item fails.
  • When adding (parent) nodes, they are now always selected before a new undo 
    item is created, ensuring selection states can be reliably restored.
  • Code optimizations.

1.0.1 – 2020-02-09

  • Fixed a discrepancy in how regular expressions were handled in "Find" and 
    "Find and Replace", which could result in non-functioning markup.
  • CSS definitions for markings are now properly terminated.
  • Improved centering of the main window after startup.
  • Added detailed credits list in the "About" dialog window.
  • Removed/replaced a previously overlooked chunk of redundant code.
  • Minor changes and optimizations.

1.0 – 2020-02-03

  • Bugfix (regression): Automatic reconfiguration of the menu after saving now 
    works again.
  • Bugfix: After undo/redo operations, selection states of nodes with a path 
    depth > 1 are now properly restored.
  • Bugfix: "Find and Replace" shared the same mnemonic as "Find". 
    (The shortcut Ctrl+H worked correctly, however.)
  • Bugfix: A "Find and Replace" operation that assigns a label to an unlabeled 
    (pipe) menu, item, or separator will assign this label to all previously 
    unlabeled menu elements, since the operation applies to the entire 
    "Menu Element" column. The operation now correctly sets the visibility 
    status of each affected (pipe) menu, item, and separator to "visible" after 
    replacement.
  • Fixed a memory leak triggered by errors during the menu file saving 
    process.
  • Missing mandatory fields are now highlighted regardless of theme or general 
    UI setup.
  • Code optimizations and minor/cosmetic changes.

0.7.3 – 2019-04-05

  • When starting the application from the command line, a menu file can be
    added as an argument (e.g., kickshaw new_menu.xml or
    kickshaw ~/.config/openbox/menu2.xml). If it exists, it will be
    loaded; if not, the program will start with an empty menu under that
    file name.
    This addition also enables the "open with" functionality for this program
    within a file manager.
  • In the case of a "Save As" operation, the user was always shown the
    ~/.config/openbox directory as the default, even if the current
    menu file wasn't located there.
    Now, for a new file ("Unsaved menu" in the window bar), the current
    working directory is used as the default. For an existing file, the
    file's directory is selected as the default.
    In many cases, this avoids the need to manually select a directory.
  • Minor changes.

0.7.2 – 2019-03-26

  • The "Find and Replace" dialog is now non-modal, allowing users to
    copy from the main window, check results, etc.
  • If separator labels are deleted via "Find and Replace", they will no
    longer appear in the saved menu file as an empty attribute
    (<separator label="">). Instead, the attribute is now omitted
    altogether (<separator />), since an empty label is generally
    undesirable for a separator.
  • The deletion of (pipe) menu labels via "Find and Replace" is no longer
    possible, as it would render the menus invisible.
  • Before a "Find and Replace" action takes place, the program now checks
    for the possibility of duplicate menu IDs in pipe menus.
  • If the user had the current version of Kickshaw, but the "latest" file
    on the server had not yet been propagated to mirror servers, the About
    dialog would incorrectly show an older version as the latest.
    The time delay is now taken into account.

0.7.1 – 2019-03-24

  • Bugfix – During a search, if one of the search options was changed and
    search results were found after a previously unsuccessful search,
    the program was supposed to scroll to the first result, but failed to do so
    when no cell in the tree view was selected.
    The first search result is now automatically selected by the program.
  • Minor changes.

0.7.0 – 2019-03-19

  • Added Find and Replace functionality, including validity check.
  • Added "Whole Word" option to the search options.
  • Bugfix – After an undo, for a menu without a label, the value was set
    to NULL instead of an empty string.
  • Minor/cosmetic changes.

0.6.5 – 2019-02-23

  • Minor/cosmetic changes.

0.6.4 – 2018-04-28

  • Minor/cosmetic changes.

0.6.3 – 2018-04-22

  • The displayed content in the window title now adheres more closely to
    standards; it shows either the menu file name with its corresponding path 
    or "Unsaved menu" in the case of a new unsaved menu.
  • Bugfix (regression): In a very unlikely situation, the program could crash 
    in case of an error during the saving process; most likely, the saving 
    process would already have been stopped before.
  • Fixed memory leaks.
  • Simplified and replaced gzwrite and gzread with GZLibCompressor inside the 
    save menu module.
  • Minor/cosmetic changes.

0.6.2 – 2018-04-15

  • Undo stack items are now directly written as compressed files via the use 
    of zlib.
    The data is also read directly from the compressed format, without the 
    detour of writing uncompressed data to a file and reading it from there.
    Compression of undo items is currently limited to variants using
    GTK versions ≥ 3, since zlib compression has been included in GIO only 
    since version 2.24, which means only from then on can one safely assume 
    that zlib is installed.
    Since a record separator is now used inside an undo stack item, tree store 
    data containing line breaks no longer disrupts the undo/redo process.
    If icon files have been changed, renamed, or deleted during runtime, 
    this is now also handled during undo/redo.
  • If a newer version than the installed one is available, this will now be 
    shown in the "About" dialog (this requires the ability to access the GNU 
    Savannah download server). If the installed version is the current one, 
    this is also indicated.
  • Replaced C file functions with GLib equivalents, as they enable stricter 
    error handling and include functionality such as automatic backup creation.
  • Bugfix: Read undo item was not closed.
  • Minor/cosmetic changes.

0.6.1 – 2018-04-10

  • Fixed minor regression.
  • Minor/cosmetic changes.

0.6.0 – 2018-04-08

  • Added undo/redo functionality.
  • Fixed a couple of minor issues.

0.5.26 – 2018-03-19

  • The locale for Kickshaw is now explicitly set to English to avoid, as much 
    as possible, a mix of languages appearing in certain widgets.
  • This has been done because the program does not yet support localization 
    (localization was added starting with version 1.1.0).
  • Fixed minor GUI inconsistencies in the GTK 2 variant.

0.5.25 – 2018-03-16

  • Introduced a version for GTK 4, based on the development version 3.93. This 
    version still has some quirks, which may be resolved in the coming months. 
    It is intended as a preview and not for use on live systems.
    (Development was later temporarily discontinued due to significant changes 
    in GTK up to version 4.0 — for example, GtkTreeView and GtkMenu were 
    deprecated. A new version will need to be rewritten from scratch.).
  • The required GTK version for the GTK 2 variant has been lowered to 2.6.
    The GTK 2 version is now also single-instance-only.
  • Minor/cosmetic changes in both the GTK 2 and GTK 3 versions.

0.5.24 – 2018-03-05

  • Reintroduced a GTK 2 version, currently requiring at least GTK 2.12.
    Functionality is identical to the GTK 3 version, except that it is not 
    single-instance-only.
  • When a drag and drop action is abandoned while a message is shown in the 
    status bar, the message is now removed.
  • Minor/cosmetic changes.

0.5.23 – 2018-02-20

  • If only one option (e.g., prompt, command, startupnotify, enabled, name, 
    wmclass, or icon) can be added, clicking the action/option button will now 
    always show the preset combo box along with the corresponding widgets for 
    setting the option’s values.
  • This was done to differentiate the button from the context menu. For both 
    the button and the context menu, it makes sense to allow editing the 
    option’s value directly at the place on the screen where the option was 
    selected, avoiding the need to move the mouse pointer long distances.
  • Minor changes.

0.5.22 – 2018-02-11

  • The New Action/Option combo box is now always recreated so that it doesn’t 
    take up unnecessary space when filled with items shorter than the previous 
    ones. This serves as a workaround for the lack of automatic shrinking in 
    repopulated GTK combo boxes.
  • Minor changes.

0.5.21 – 2018-02-07

  • Bugfix – The default behavior of allowing arrow-key navigation within the 
    tree view and selecting all rows with CTRL+A has been reinstated 
    (previously, the latter only worked when no row was selected).
  • Internal restructuring.
  • Minor/cosmetic changes.

0.5.20 – 2018-02-05

  • Bugfix – If a StartupNotify option block had been added and was the only 
    missing action in an “Execute” action, and the New Menu Element screen was 
    opened afterward to add a new item, the action combo box remained disabled.
  • Bugfix – If the action for an item was changed in the New Menu Element 
    screen, the "(•) = mandatory" label was hidden for all actions except 
    "Execute".
  • Minor changes.

0.5.19 – 2018-02-04

  • Fixed memory leak.

0.5.18 – 2018-02-03

  • Mnemonics are now consistently used in all buttons with text labels.
  • The "image-missing" icon is no longer shown in the About dialog. Since 
    Kickshaw does not yet provide its own icon file, this display has been 
    disabled (an image for the About dialog was finally added in version 
    1.1.9).
  • Minor/cosmetic changes.
  • Bugfix – If no “execute” value was entered for a new pipe menu in the New 
    Menu Element screen and the process was subsequently canceled, the red 
    border around the “execute” field was not removed.
  • Fixed memory leak.

0.5.17 – 2018-01-31

  • In the new menu element screen, deactivating the "StartupNotify"
    option will now reset all related fields. This prevents them from
    being added to the new "Execute" option if "StartupNotify" has
    been deactivated.
  • Bugfix – When adding new items with an "Exit" or "SessionLogout"
    action, the "Prompt" option was always set to "yes", regardless
    of the setting.
  • Fixed memory leaks.
  • Minor/cosmetic change.

0.5.16 – 2018-01-26

  • Added type casts to avoid compiler warnings on older GLib/compiler versions.
  • The “mandatory” status of the "Command" entry field for a new “Restart” 
    action has been removed; this requirement was mistakenly added. It has also 
    been removed when a “Restart” action is added together with an item.
  • Bugfixes (regressions): Fixed compilation issues on GTK versions < 3.12.
  • Bugfix: If the "new menu element" screen was open, it was still possible to 
    right-click outside the tree view, open the context menu, and select a new 
    menu element again. This caused non-critical errors with handler IDs of 
    check buttons. This behavior is now blocked.
  • Cosmetic changes.

0.5.15 – 2018-01-25

  • Entering a command for the "Execute" field of a new pipe menu is now 
    mandatory. Deleting such a command without providing a replacement is no 
    longer possible. This change was introduced because Openbox displays an 
    error if a pipe menu has no command.
  • Bugfix: If the addition of a new (pipe) menu was blocked due to a missing 
    label, the currently entered menu ID was still added to the list of 
    menu IDs—even though the (pipe) menu itself was not added.

0.5.14 – 2018-01-24

  • Mandatory fields are now always marked with an asterisk (•) in their 
    corresponding labels. A new label explains the meaning of the asterisk.
  • Entry fields that are mandatory and left unfilled no longer receive a red 
    background but instead a red border, to improve accessibility for 
    color-blind users. This also applies to icon path entry fields with invalid 
    paths.
  • When no column has been selected during a search, the color contrast of the 
    highlighted checkboxes has been increased for better visibility.
  • Filling out the “Command” field for a new “Restart” action is now mandatory.
  • Bugfix (partial regression): If a (pipe) menu or item with an incorrect 
    icon path was selected, the icon path field in the “new menu element” 
    screen incorrectly retained its red background from the reused entry field. 
    This coloration is now correctly removed.
  • Minor changes.

0.5.13 – 2018-01-20

  • Bugfix (partial regression): If an unlabeled (pipe) menu or item label was 
    selected, the label field in the screen for adding a new (pipe) menu or 
    item was deactivated, making it impossible to change the default label. 
    (Unlabeled menu elements can only appear in menus edited outside Kickshaw, 
    as the program prevents entering empty labels.)
  • Minor/cosmetic changes.

0.5.12 – 2018-01-18

  • When the regular expression option is enabled in the search screen, 
    expressions are now checked for syntax errors before executing the search.
  • Bugfix: During search, special characters like <, >, &, etc., are now 
    properly escaped in the markup of the matching string chunks. This ensures 
    matches with special characters are highlighted correctly and prevents GTK 
    warnings.
  • Bugfix: In certain themes, search matches were shown with black text on a 
    black background in the selected row.
  • Fixed memory leaks.
  • Cosmetic changes.

0.5.11 – 2018-01-10

  • Bugfix (regression): Under certain conditions, new items or (pipe) menus 
    were inserted into the currently selected menu element instead of being 
    placed after it.
  • Bugfix (regression): When mixing new menus and new items, deleting menus 
    often failed to remove the corresponding menu ID from the internal list.
  • Fixed memory leak.
  • Minor/cosmetic changes.

0.5.10 – 2018-01-08

  • Bugfix (regression): If a row containing an icon with an invalid icon path 
    is selected, the icon path entry field is now correctly highlighted again.
  • Cosmetic changes.

0.5.9 – 2018-01-07

  • It is now possible to add items together with an action.
  • An input screen has been added for creating new menus, pipe menus, and 
    items.
  • It includes the existing entry fields plus some additional buttons, 
    depending on the selected menu element.
  • Major internal restructuring.
  • Minor and cosmetic changes.

0.5.8 – 2017-12-26

  • Creating a backup file before overwriting a menu is now optional 
    (enabled by default; configurable via Options → Create backup before 
    overwriting menu).
  • Separators now use the default font if not set off explicitly.
  • The settings file (.kickshawrc) now includes version information.
  • Minor and cosmetic changes.

0.5.7 – 2017-12-24

  • In addition to being a single-instance-only application (see changelog for 
    version 0.5.5), Kickshaw now presents its main window when started a second 
    time if the window was hidden.
  • Minor changes.

0.5.6 – 2017-12-23

  • Added conditional compilation for compatibility with earlier GTK3 versions:
    some functions used from G(tk)Application were introduced later during GTK3 
    development.
  • Minor and cosmetic changes.

0.5.5 – 2017-12-22

  • To avoid potential conflicts during execution, Kickshaw is now a 
    single-instance-only application.

0.5.4 – 2017-12-16

  • Bugfix – If multiple rows were selected for drag & drop and clicked on 
    again before performing the action, it could happen that afterward, row 
    selection no longer worked.
  • Bugfix (regression) – Context menu headlines were not styled under certain 
    conditions.
  • Minor changes.

0.5.3 – 2017-12-13

  • Minor/cosmetic changes.

0.5.2 – 2017-12-11

  • The error message shown when no window system is running is now sent to 
    stderr.
  • Minor/cosmetic fixes/changes.

0.5.1 – 2017-12-10

  • Bugfix (regression) – If the column checkboxes in the find grid had a red 
    background because a search was performed without selecting at least one 
    column and the grid was then closed, the red background remained. The same 
    applied to the entry field.
  • Fixed memory leaks.

0.5.0 – 2017-12-09

  • Leading and trailing whitespace in option text is now removed.
  • The dialog texts for fixing invisible and orphaned menus no longer exceed 
    the requested width.
  • Corrected position of GNU macros.
  • Bugfix (regression) – Entries in single fields completed with "Return" 
    (instead of clicking "Done") now work properly again.
  • Bugfix (regression) – Visualization of labelless menus/items from the 
    dialog shown during the loading stage now works again.
  • Bugfix (regression) – Invalid attributes are once again correctly rejected.
  • Code optimization, minor cosmetic changes, and removal of redundant code.

0.5 RC3 – 2017-12-04

  • If an option with an invalid value is found during the loading process, the 
    error message now includes the line, line number, and the item to which the 
    #option belongs.
  • Indentation in the menu file is now done using tabulators.
  • The keyboard shortcuts for expanding and collapsing the treeview have been 
    changed to <Ctrl><Shift><X> and <Ctrl><Shift><C> to avoid conflict with the 
    standard <Ctrl><X> and <Ctrl><C> shortcuts. Shortcuts have also been added 
    for "Move Top", "Move Up", "Move Down", "Move Bottom", and "Remove".
  • If the column selection, case sensitivity setting, or regular expression 
    option is changed during a search, and the results include matches in 
    currently hidden columns, those columns are now shown — consistent with 
    behavior when a search term is first entered.
  • When the icon theme is changed, any system icons in the treeview that 
    indicate a missing icon path (the "question mark" icon) or an unrecognized 
    image format (the "missing image" icon) are now updated to reflect the new 
    icon theme.
  • Added conditional compilation to suppress compiler warnings caused by 
    deprecated GTK functions. Deprecation warnings should no longer appear, as 
    GTK3 development has ended in favor of GTK4.

  Bugfixes

  • (Regression) For certain editing actions, the list of search results was 
    reset after tool/menu bar sensitivity was updated. This could result in 
    incorrect sensitivity states for the back/forward buttons in the find grid.
  • (Regression) If an invalid value for an option was corrected during the 
    loading process, the menu could not be saved directly afterward; "Save As" 
    had to be used first unless another change was made.
  • Fixed a potential crash when the label of a separator was deleted.
  • During the loading process, pipe menus without labels were incorrectly 
    marked as "invisible item" even if they had no invisible parents. Their 
    menu IDs (when at top-level) were shown as "(null)" in dialogs warning 
    about missing labels. Similar incorrect behavior occurred:
    • when dragging a row with a descendant labelless pipe menu (if the pipe 
      menu had no invisible parent post-drag),
    • or when visualizing another menu element caused a labelless pipe menu 
      with an invisible ancestor to be indirectly affected as the ancestor 
      gained a label.
  • If an invalid value for an enabled or prompt field appeared inside a 
    labelless item, the error message displayed its label as "(null)" instead 
    of omitting it.
  • If an invalid icon path or unsupported image file was corrected during 
    loading, the menu can now be saved immediately afterward.
  • If multiple rows were selected and a right-click was performed on another 
    row with an icon, the context menu incorrectly displayed both "Remove icon" 
    and "Remove icons".
  • If an error occurred during icon creation and another invalid icon file was 
    then selected, the path displayed above the error message was not updated 
    correctly. The previous path is now only replaced if the new icon is 
    successfully created.
  • If a startupnotify field was left blank (turning its entry red), and a 
    value was later entered, the red highlighting would persist when the same 
    field was selected again. This has been fixed.
  • Fixed memory leaks.
  • Code optimization, minor cosmetic improvements, and removal of redundant 
    code.

0.5 RC2 – 2013-09-28

  • Added several global keyboard accelerators.
  • Entry of empty labels for menus, pipe menus, and items is now blocked, as 
    this would result in invisible menu elements. This also fixes a bug where 
    the visibility status was not updated after entering an empty label. Menus 
    with invisible elements can still be loaded.
  • New separators no longer receive a default label, as they are always 
    visible.
  • When fields or buttons for adding new actions or options are displayed, the 
    first input element now automatically receives focus.
  • If opening a new menu fails and a previous one is still in memory, the 
    previous menu is no longer cleared.
  • If deprecated execute options are detected and automatically converted to 
    command, the program now clearly indicates that the file has unsaved 
    changes. The "Save" button and menu item are activated so the user can save 
    immediately.
  • When the font size is changed, column widths are now automatically 
    adjusted. This ensures that any excess space between icons and text (e.g., 
    after reducing font size) is removed.
  • Empty strings are no longer treated as valid search matches.
  • Removed GTK version check. (Note: This was added back in the final 0.5 
    release due to actual GTK > 3.0 dependencies.)

  Bugfixes:

  • Fixed an issue where the “Visualise” and “Visualise recursively” menu bar 
    actions were inverted.
  • Fixed a bug where, if multiple rows were selected and another was 
    right-clicked, the context menu did not always display the full set of 
    expected options.
  • When a menu cannot be saved using "Save as" due to an error during the 
    saving process, the original file name is now preserved.
  • (Regression) If a submenu or item was dragged out of an invisible orphaned 
    menu to the top level, it was incorrectly marked as invisible, even if it 
    had a label.
  • Orphaned pipe menus were not saved — this has been fixed.
  • Empty icon paths were not preserved when saving a loaded menu.
  • When a row and at least one of its descendants were selected, the 
    descendant was incorrectly identified as a "child" regardless of actual 
    hierarchy. Additionally, if an option of a non-Execute action and a 
    startupnotify option were selected simultaneously, the status bar 
    incorrectly reported the action type as "Execute".
  • When the “New Action/Option” combo box was shown while search results were 
    still highlighted, the treeview now redraws immediately to remove 
    highlighting — previously, it only disappeared when hovering the mouse over 
    the affected rows.
  • If an icon path became invalid (causing the icon to be replaced with the 
    "invalid icon path" symbol), the internal modification date was not 
    cleared — this has been fixed.
  • After saving a menu, the "Save" item in the menu bar is now correctly 
    greyed out.
  • If at least one selected row supported recursive visualization and at least 
    one did not, the “Visualise recursively” menu item was enabled while 
    “Visualise” was not — this has been corrected.
  • If an invisible menu element (menu, pipe menu, item, or separator) was 
    visualized, the sensitivity of the corresponding menu bar item was not
    updated.
  • Fixed memory leaks.
  • Code optimization, cosmetic improvements, removal of redundant code, and 
    better inline documentation to improve source code readability.

0.5 RC – 2013-08-22

  New functionality:

  • Automatic reconfiguration of Openbox if the menu is saved to the standard 
    location (~/.config/openbox/menu.xml) and Kickshaw is currently running 
    under Openbox.
  • Added a timer function that checks for moved, deleted, or renamed icon
    files, as well as changes in font size.
    If an icon file is moved, deleted, or renamed during runtime, the
    corresponding icon inside the treestore is replaced with a broken icon 
    image. If the treestore contains a broken icon image but an external change 
    during runtime makes the icon path valid again, the proper icon is 
    restored.
    If the font size is changed during runtime, all icon images are recreated 
    to match the new font size.
  • The deprecated <execute> tag is now automatically converted to a
    <command> tag.
  • Passing --version as an argument now displays the program version.

  Misc improvements and changes

  • Switched to a real XML parser (GLib's Simple XML Subset Parser) for
    enhanced flexibility and reliability.
  • Menus defined directly inside the root menu are now supported as well;
    in previous versions, their sub-content had to be defined outside the
    root menu, as demonstrated by the sample menu provided by Openbox.
  • Duplicate menu IDs are now detected and prevented already at the loading 
    stage.
  • During saving, characters such as less than, greater than, ampersand,
    etc., are now replaced with their corresponding XML entities, so the user 
    no longer needs to handle this manually and the parser won’t misinterpret 
    the characters when loading menu files.
  • The display of found search matches has been improved: instead of
    highlighting the entire content of a cell containing a match, only the
    exact matched section is now highlighted.
  • Highlighting of invisible elements now applies not just to top-level
    menus, but to all menus, pipe menus, items, and separators regardless
    of their position in the menu hierarchy (highlighting can still be
    deactivated).
  • GTK's built-in interactive search has been disabled, since Kickshaw
    provides its own search functionality.
  • SVG image files are no longer filtered out by the “Add Icon” file
    chooser dialog, as support for SVG icons was added in Openbox 3.5.1.
  • There are now two different system icons to indicate icon creation
    failures—one for invalid icon paths and another for icon files that are 
    corrupted or otherwise unusable. Additionally, both are marked with two 
    red exclamation marks to make them easily distinguishable from normal 
    icons.
  • The program no longer exits when an error is detected in the menu file;
    instead, it now reverts to an initial state with an empty menu.
  • The display of section headlines in context menus is now limited to
    situations where two different types of options are available, resulting in 
    a cleaner interface. Exception: if the mouse is right-clicked outside the 
    tree, a headline is shown.
  • The key file is now compliant with the freedesktop.org standard.
  • Choosing an action no longer blocks the treeview. However, certain events
    and widgets are still deactivated while an action is selected, as they
    would conflict with the action (e.g., removing rows). If another row is
    selected, the action/option combo box is automatically closed, and the
    previous state is restored.
  • The initial focus is now set to the treeview, so the “New menu” tool button 
    is no longer focused when the program starts. Also, when the find box is 
    opened, its text entry field automatically grabs focus, allowing immediate 
    input.
  • To maintain default behavior consistent with Openbox, the “enabled”
    suboption of the “startupnotify” option is now set to “no” by default.
  • Saving empty menus is allowed again, since Openbox does not report them as 
    erroneous.
  • A note has been added for make uninstall indicating that the settings
    file must be removed manually. Additionally, messages regarding
    settings file issues (including the file location and whether the
    problem occurred during reading or writing) have been expanded.
  • Code optimizations, minor/cosmetic changes, and removal of redundant code.

  Bugfixes:

    Load menu functionality:

    • Corrected the misleading error message that appeared when an XML tag was 
      placed before the opening <openbox_menu> tag.
    • If a menu contained no top-level menus (i.e. only the root menu was 
      populated), and the first element of the root menu was a separator, the 
      separator was incorrectly reported to be at an invalid position.
    • A self-closing action tag placed after an action tag of the same kind was 
      wrongly reported to be at an invalid position.
    • When loading a completely empty menu (i.e. no content between the 
      <openbox_menu> tags), the correct error message is now shown: “Root Menu 
      not found!”.
    • An open find box is now closed when a new menu is loaded, since residual 
      search results from the previous menu could cause a crash when using the 
      result navigation buttons. This fix also applies when creating a new 
      menu.
  • If a subrow and a top-level row were dragged simultaneously, a crash 
    occurred when the subrow was dropped on top of the top-level row. This is 
    now prevented.
  • If an icon path marked as broken is replaced with a valid one during the 
    loading phase, the broken icon is now correctly updated to the valid icon 
    in both the treestore and the treeview.
  • During the saving process, the iterator of the selected row was modified. 
    This could result in undesired behavior or error messages if the row was 
    subsequently acted upon. This issue has now been resolved.
  • Regression – If dragging was disabled for one or more reasons displayed 
    in the status bar, selecting a new row would reset the drag status to 
    "draggable" before a new blocking check was applied. This behavior is now 
    fixed.
  • Removing all children of a node now works even if the node is currently 
    collapsed.
  • It was previously possible to drag a menu and one of its descendant items 
    at the same time, because only the first sublevel was checked for 
    conflicting selections. Now, all descendants of a selected row are also 
    checked to avoid such conflicts.
  • Several edge cases that allowed dragged rows to be dropped at invalid 
    positions have been resolved.
  • Font sizes are now parsed correctly even if the font name consists of 
    multiple words. (This bug previously resulted in incorrect icon sizes.).
  • If a menu ID was changed twice in succession via the entry field—without 
    selecting a different row in between—the program would crash. This is now 
    fixed.
  • If multiple rows were selected and one of their cells was edited directly 
    in the treeview, a crash occurred. This is now prevented.
  • During a drag and drop operation, all rows are now unselected after the 
    original source rows have been removed and before the dragged rows are 
    inserted at their new position. This prevents GTK’s default behavior of 
    automatically selecting an unrelated row after deletion, which could 
    otherwise result in an unintended extra row being highlighted alongside the 
    moved rows.
  • The icon Pixbuf was not reset to NULL after an icon was added to the menu. 
    This is now corrected.
  • After loading a new menu, the sensitivity of menu bar items and tool 
    buttons is now properly reset (e.g., “Collapse all nodes” is greyed out 
    when no collapsible nodes are present).
  • If a new Execute action was added below a selected Exit or SessionLogout 
    action, the prompt option of a startupnotify (if used) was not added to the 
    treeview and internal store. A similar issue occurred when adding a new 
    Execute action below a selected Restart action, where the command option of 
    startupnotify was not added.
    (Both cases are unlikely to affect typical users, as such combinations are 
    illogical, but since actions can be added freely, this has been fixed 
    nonetheless.)
  • If a new startupnotify option was added while its parent node was collapsed 
    and option autosorting was disabled, the newly added option was not 
    selected.
  • If autosorting was disabled and an option for an Execute action was added, 
    it was, in certain cases, appended as the last element instead of being 
    inserted directly after the selected position.
  • When a new icon is added by entering its path into the icon path entry 
    field, the “Remove icon” button is now correctly activated.
  • If all rows were deleted (not via the “New menu” button), the “Save as…” 
    button was not deactivated afterwards.
  • When multiple icons were removed at once, the internal variable tracking 
    applied changes was not updated, so the “Save” toolbutton was not enabled 
    even if a file name had been set.
  • If one of the columns “Menu ID” or “Execute” was hidden and a search found 
    a top-level match in one of these columns, the respective column was not 
    expanded to reveal the match.
  • If both the entry field and the column checkboxes in the search grid were 
    highlighted due to a missing input, and either the “Match case” or “Regular 
    expression” checkbox was then clicked, the column checkboxes were no longer 
    visually highlighted — this behavior has been corrected.
  • The settings file is now properly closed after being opened for reading.
  • Fixed memory leaks.
  • Solved the issue of unintended dragging that occurred when a row was 
    clicked but not dragged (more likely to happen on slower systems).

0.5 Beta 3 – 2011-12-18

  • Bugfix (regression) – Inserting a Reconfigure action via the context menu 
    now works again.
  • Bugfix – During parsing, if an empty item (closed with />) is followed by 
    another item, the position of the latter is no longer incorrectly reported 
    as an error.
  • Bugfix – Columns are now automatically resized when icons are activated or 
    deactivated, ensuring icons are properly shown even if they were initially 
    hidden.
  • Bugfix – If a search was started with an empty query (causing the entry 
    field to be marked as mandatory) and the “All columns” toggle was then 
    activated and deactivated again, all rows and columns were incorrectly 
    marked as hits. This behavior has been corrected — no rows or columns are
    now marked in this case.
  • Minor changes.

0.5 Beta 2 – 2011-12-11

  • Introduced a dedicated text layout for error messages related to invalid 
    menus.
  • Improved error reporting with more detailed and differentiated messages for 
    invalid menus.
  • Bugfix – Line numbers were not reset during the parsing phase for the root 
    menu.
  • Code optimizations, minor cosmetic changes, and removal of redundant code.

0.5 Beta – 2011-12-08

  • Ported the application to GTK 3.
  • Added search functionality, including support for regular expressions.
  • Added support for icons (first introduced in Openbox 3.5.0).
  • Added validation checks for XML syntax and Openbox menu format compliance.
  • XML tag elements inside a menu file can now appear in any order — no longer 
    restricted to a fixed sequence.
  • Added a Remove children option to the menu bar and context menu.
  • Added Move to top/bottom items to the menu bar.
  • The application window can now be resized to a smaller minimum size.
  • Bugfix – Improved XML parsing: the program can now correctly distinguish 
    when a < character inside an attribute value (e.g. <menu id="<separator ">) 
    does not open a new tag. Previously, this could confuse the parser.
  • If two rows are selected and a different third row is right-clicked, the 
    previous selection is now cleared, the new row is selected, and the context 
    menu for it is shown. Likewise, if a row is selected and the user 
    right-clicks on a blank area outside the tree view, the selection is 
    cleared and the appropriate context menu for an empty space is shown.
  • Bugfix – If the last visible row was clicked and had more associated entry 
    fields than the previously selected row, the new fields would visually 
    overlap the previous ones. This is now avoided by automatically scrolling 
    the tree view to the selected row before showing its entry fields.
  • Code optimizations, minor cosmetic changes, and removal of redundant code.

0.4.9 – 2011-12-08

  • Bugfix – During parsing, it is now only recorded internally that an action 
    is being processed if the action is not defined with a self-closing tag (as 
    is the case with the "Reconfigure" action). If a regular action followed a 
    self-closing one, a memory leak occurred. This has now been fixed.

0.4.8 – 2011-11-10

  • Bugfix – Pipe menus listed in the root menu are now parsed correctly.
  • Bugfix – Icon paths inside an <item> tag are now ignored and no longer 
    corrupt the label text (icon support is introduced in version 0.5).
  • Bugfix – Fixed memory leak.
  • Bugfix – Missing line break added in the list of unused root menus (only 
    affected the case when exactly one unused root menu was present).

0.4.7 – 2011-11-07

  • Bugfix (regression) – If the grid line display setting was changed, the 
    settings file was no longer updated.

0.4.6 – 2011-11-06

  • Bugfix (regression) – Fixed filename corruption issue.

0.4.5 – 2011-10-21

  • Bugfix – Fixed a memory leak that occurred when a file was already open and 
    a new one was opened afterward.

0.4.4 – 2011-10-10

  • Removal of redundant code.

0.4.3 – 2011-10-10

  • Bugfix – The layout table for entry fields (shown when a row is selected) 
    was defined with a redundant row; this had no effect on program behavior or 
    appearance.

0.4.2 – 2011-09-25

  • Bugfix – Sensitivity of the collapse/expand toolbar buttons and menu items 
    is now correctly updated when selecting rows in an expanded tree view.
  • If a required entry field was initially left empty but later filled in 
    correctly, its rose-colored background is now reset to the previous 
    theme-specific background color (instead of always white), ensuring visual 
    consistency with themes.

0.4.1 – 2011-09-24

  • Removal of redundant code.

0.4 – 2011-09-18

  • Boolean values are now displayed as toggle buttons in the tree view and can 
    be changed directly.
  • Added view option to (de)activate tree lines — tree lines are now shown by 
    default.
  • Rows can now be deleted using the Delete key.
  • When adding an action, mandatory fields must now be filled out. If Done is 
    pressed without filling them, the fields are highlighted with a rose 
    background. This also applies to startupnotify options chosen via the combo 
    box.
  • If a new menu element only requires one entry field, pressing Enter is now 
    sufficient to complete the input; clicking the Done button is no longer 
    necessary.
  • Safer check for missing root menus — the program no longer exits 
    immediately after displaying the error message.
  • During menu loading, Exit and SessionLogout actions with prompt values 
    other than "yes" or "no" are now rejected. The user is prompted to select a 
    valid value.
  • The Save menu option is now disabled when:
    • a menu is loaded (without changes made during loading),
    • a new menu is created,
    • or the tree view is empty.
    Save As is also deactivated under the same conditions.
  • It is now possible to insert new rows into unused menus. These menus are 
    automatically integrated into the structure.
  • Expand All / Collapse All toolbar and menu items are now disabled if:
    • the menu is empty, or
    • no subrows exist
    These buttons also update their enabled state depending on whether:
    • all nodes are collapsed,
    • some (but not all) nodes are expanded, or
    • all nodes are expanded.
  • New basic menu elements (menu, pipe menu, item, separator) are now labeled 
    uniformly as "New xxx" (where xxx is the type).
  • If a user attempts to create a new menu while the current one is empty, 
    the warning message now clearly states that empty menus cannot be saved.
  • Error messages are now displayed in bold.
  • Makefile updated to support BSD systems; includes options for optimization, 
    extra warnings, and pedantic checks for C99 compliance (including GNU 
    extensions).

  Bugfixes

  • Drag-and-drop: Submenu IDs were deleted from the internal list. Menu IDs of
    unused and invisible menus are now properly tracked, preventing duplicate 
    IDs.
  • Invisible menus: When deleted during loading, their associated Execute 
    action paths are now also removed from the internal list.
  • Saving bug: If the last menu element was an item and the penultimate one 
    was a menu, the menu file was not generated correctly.
  • Startupnotify: Now always inserted with an option block as its type always.
  • Context menu: f no row was explicitly selected but the user right-clicked 
    on a row in the tree view, the context menu creation function incorrectly 
    assumed zero selected rows. Since right-clicking selects the underlying 
    row, this led to invalid options being shown in the context menu.
  • Drag-and-drop status: After completing a drag-and-drop operation, internal 
    change status is now updated, and the Save button is activated if it was 
    the first action since loading. The selection status is now correctly 
    updated after drag and drop; previously, the menu options from the old 
    position were still shown at the new position, which could lead to a crash 
    when one of them was activated.
  • Label conflict: Assigning a label to a menu/item/separator that matched an 
    action/option type (e.g., "Execute" for an action or "wmclass" for an 
    option) led to crashes or severe malfunctions.
  • Top-level pipe menus: Now correctly assigned a regular status if not unused 
    or invisible.
  • Code hygiene: Added missing sentinel values in a few function calls.
  • UI cleanup: Removed the label shown in front of the combo box used for 
    inserting actions or options, as it was redundant and misleading — it 
    always displayed "Action", even when listing options of an action.
  • Memory handling: Various improvements to avoid memory leaks.
  • Code optimization, minor UI improvements, and redundant code removal.

0.4 RC 2 – 2011-07-31

  • Bugfix – If a menu ID was edited and a duplicate ID was entered, clicking 
    the same row afterward triggered a drag-and-drop action due to conflicting 
    code. This issue has now been resolved.
  • Bugfix – When (pipe) menus were moved via drag and drop, their menu IDs 
    were removed internally from the list but were not re-added after the menus 
    were recreated at the new position.
  • Code optimizations; minor cosmetic adjustments; removal of redundant code.

0.4 RC – 2011-07-30

  • Bugfix – If cell content was changed via the entry fields at the bottom, 
    the "Save" button is now correctly activated in all cases.
  • Bugfix – command and prompt options of an Execute action can no longer be 
    moved into another Execute action if an option of the same kind already 
    exists there.
  • Bugfix – If at least one unused or invisible menu was selected and the 
    context menu opened, the general label now correctly reads "Regularise menu 
    statuses" instead of "Generate empty menus".
  • A backup file is now created when overwriting an existing menu file. The 
    backup name consists of the original filename with a trailing tilde (~).
  • Options in the Edit menu (not just the corresponding toolbar items) are now 
    disabled when not applicable (e.g., "Move down" when the last row is 
    selected).
  • When rows that contain subnodes are moved via drag and drop, their 
    expansion states — including all subnodes — are now preserved.
  • When adding an action to an item, only further selection is blocked (not 
    the entire tree view), allowing the current selection to remain visible.
  • Actions and their options are now inserted consistently at the current 
    selection point, except when added directly to a parent node.
  • Recursive expansion of selected nodes is now always possible unless all s
    ubnodes are already expanded. Likewise, expanding all immediate children is 
    now available unless already active.
  • Improved handling of multiple-row drag selection to avoid interference with 
    editable cells, which previously made them harder to activate.
  • Code optimizations and removal of redundant code.

0.4 Beta 4 – 2011-07-23

  • Bugfix – The check that prevents menus from being dragged into themselves 
    now also applies when a menu is moved more than one level deeper in the 
    tree. (This bug had no repercussions in earlier versions, as the operation 
    was aborted beforehand.)
  • Bugfix (regression) – If an action or startupnotify was selected, toggling 
    the status of the "enabled" option afterward no longer worked. This now 
    functions as expected.
  • Added: Multi-row drag and drop support.
  • Added: Status bar displays information during drag and drop.
  • Added: GTK version check (the application requires GTK ≥ 2.18).
  • Code optimizations, redundant code removed, minor cosmetic changes.

0.4 Beta 3 – 2011-07-17

  • Bugfix – Freed memory allocated to the string disassembly array (was 
    previously not released).
  • Changed: Identifiers in .kickshawrc are now identical to the menu item 
    labels. Note: Any customized settings that differ from the defaults must be 
    reconfigured after this change.
  • Code rewriting, resulting in more compact and maintainable code.

0.4 Beta 2 – 2011-07-15

  • Bugfix – Moving an option to an action that already contains the same 
    option is now prevented.
  • Bugfix – Prevented prompt options with values other than "yes" or "no" from 
    being moved into an Exit or SessionLogout action.
  • Bugfix – Options are now automatically sorted after being moved via drag 
    and drop — if autosorting is enabled.
  • Bugfix – Unused or invisible menus are now correctly handled when included 
    in a drag-and-drop operation.
  • Bugfix – Prompt options can now be moved into SessionLogout actions. (Note: 
    This bug had no practical effect, as dropping onto empty rows wasn’t 
    implemented at the time.)
  • Bugfix – Freed memory of the string disassembly array (was previously not 
    released).
  • Added: Dropping a row onto another row now appends it as the last child of 
    that row.
  • Improved: After creating or loading a new file, tree view columns are now 
    autosized. This also applies after collapsing rows via the context menu.
  • Documentation fix: The README had not yet been updated with the 
    drag_and_drop file.
  • Minor code changes and optimizations; redundant code removed.

0.4 Beta – 2011-07-13

  • Bugfix – Addressed drag-and-drop issue where a row was dropped one position 
    above the intended zone if its upper half exceeded the highlighted drop 
    area.
  • Added: Expand/Collapse row options in the context menu for convenience.
  • Changed: Settings file has been moved from 
    ~/.config/openbox/menu_editor_settings to ~/.kickshawrc — since this file 
    is not managed by Openbox, the new location is easier to find.
  • Code optimizations and redundant code removed.

0.4 Alpha – 2011-07-11

  • Added: Initial drag and drop functionality. Limitation: When multiple 
    elements are selected, only the first is currently moved.
  • Renamed the application to Kickshaw.
  • Minor code restructuring and optimization.

0.3.14 – 2011-07-08

  • Bugfix – If not located at the top level, a separator without a label still 
    received 'label=""' in the XML file due to outdated code that had not been 
    removed until now.
  • Code optimization and removal of redundant code.

0.3.13 – 2011-07-07

  • Bugfix – Selecting a boolean field in the tree view incorrectly set the 
    internal “changed” status to true, even if no actual change occurred. As a 
    result, the user was prompted about unsaved changes when exiting the 
    program or opening another file. The same issue applied to text fields: 
    entering the same value now no longer triggers the "changed" status.

0.3.12 – 2011-07-06

  • Bugfix – Editing a menu ID cell directly in the tree view updated the 
    visible value, but the old value remained in the internal list of menu IDs, 
    potentially causing duplicates if new IDs were added afterward.
  • Code refactoring and optimization.

0.3.11 – 2010-12-06

  • Bugfix – When all empty root menus were selected for deletion during menu 
    loading, a second root menu positioned alongside the first was not deleted 
    because GTK row references were not used for this action.
  • If menus not referenced in the root menu and/or empty root menus have been 
    integrated or deleted during the loading process, the menu can now be saved 
    immediately using the Save button — no longer requiring the Save As button 
    as a workaround, since the menu is already marked as modified.
  • Minor and cosmetic changes.

0.3.10 – 2010-12-05

  • Improved performance when checking if a value exists in a list of strings 
    (streq_any function): now returns TRUE immediately upon a match.
  • More compact code for sorting Execute and startupnotify options.
  • Minor and cosmetic changes.

0.3.9 – 2010-11-28

  • Bugfix – When saving a menu a second time, the root menu was not written 
    correctly due to unreset variables after the first save.
  • Bugfix – Removal of the “(No label)” indicator was incomplete in one part 
    of the code, causing labelless separators to be written incorrectly.
  • Bugfix – After editing a cell, the entry fields are now updated 
    immediately. If this is the first modification after startup, the Save 
    button is now enabled as expected.

0.3.8 – 2010-11-20

  • Removed the “(No label)” indicator for separators without labels, for 
    consistency with other elements and because it's visually obvious in the 
    tree view.

0.3.7 – 2010-11-20

  • Cleaner appearance for the context menu.
  • Added support for integrating multiple unused or invisible top-level menus 
    via the context menu.
  • Minor code cleanup.

0.3.6 – 2010-11-18

  • Added option to label unused or invisible top-level menus via the context 
    menu.
  • Removed the ability to change a top-level menu’s status to invisible or 
    unused. While this can still be done manually in the XML file, it is not 
    considered a meaningful action within the program.
  • Bugfix – Menus inserted as sub-elements of a top-level menu no longer 
    receive an unnecessary value for the top-level menu status.
  • Minor and cosmetic changes; code cleanup.

0.3.5 – 2010-11-18

  • Labels of unused top-level menus can no longer be edited.
  • It is now also impossible to insert rows into unused top-level menus. 
    To enable editing or row insertion, the menu must first be explicitly 
    converted into a visible or invisible top-level menu.
  • Code cleanup.

0.3.4 – 2010-11-17

  • Added the option to draw rows in alternating colours (requires GTK theme 
    support). Note: This feature was discontinued in the GTK 3 version of the 
    application, as the original mechanism for alternating row colours from 
    GTK 2 was removed in GTK 3.
  • Added the ability to retain highlighting for unused and invisible top-level 
    menus when the top-level menu status column is visible.
  • Increased contrast between unused and invisible top-level menus when 
    highlighting is enabled.
  • Minor and cosmetic changes.

0.3.3 – 2010-11-17

  • Changed the "Show Grid" submenu to radio buttons, as there is always 
    exactly one selectable option.

0.3.2 – 2010-11-16

  • Bugfix – Deleting a row that had unselected child elements (e.g., menus or 
    pipe menus) no longer leaves their menu IDs in the internal list — they are 
    now properly removed.
  • Bugfix – When changing the statuses of multiple top-level menus to "unused" 
    via multi-selection, and at least one had children, the child deletion list 
    was not reset after processing the first top-level menu.
    The relevant code section has been rewritten and is now much more compact.
  • Bugfix (regression) – When selecting a new grid display option, the check 
    mark now correctly updates to reflect the new selection.
  • Bugfix – Allocated RAM for tree selections and row reference lists is now 
    properly freed across the program.
  • Minor and cosmetic changes; code cleanup.

0.3.1 – 2010-11-14

  • When deleting a menu element from a menu that has not yet been edited, the 
    Delete toolbar button is now deactivated afterward, as no active selection 
    remains.

0.3 – 2010-11-12

  • Code optimizations, including faster cell rendering.

0.3 Beta 2 – 2010-11-11

  • Empty Execute and startupnotify actions are now automatically expanded when 
    options are added.
  • Bugfix (regression) – Reinserted default dummy value for the action combo 
    box — inserting a Reconfigure action before first use of the combo box 
    previously caused a crash.
  • Bugfix (regression) – If one option of an Execute action was missing, 
    clicking the button to add the missing option would display an empty combo 
    box instead of inserting the option.

0.3 Beta – 2010-11-11

  • New feature: Editable cells.
  • Bugfix – If no menu was found at program start, right-clicking on the empty 
    tree view would result in a crash.

0.2.3 – 2010-11-10

  • Bugfix (regression) – Insertion of Execute options via combo box works 
    again.

0.2.2 – 2010-11-09

  • Bugfix (regression) – Check for duplicate menu IDs works again.

0.2.1 – 2010-11-09

  • Bugfix (regression) – Inserting pipe menus did not work — the previously 
    selected element was inserted again instead.

0.2 – 2010-11-07

  • Makefile now includes install and uninstall targets.

0.2 Beta 2 – 2010-11-06

  • Slightly improved Makefile, now supporting multiple jobs via the -j option 
    and including a clean target.
  • Switched to a much shorter method of checking whether X is running, which 
    also works on BSDs.
  • FreeBSD binaries for x86 and amd64 added
    (Note: The provision of binaries was discontinued shortly thereafter).

0.2 Beta – 2010-11-04

  • Added context menus.
  • Removed the ability to add menu elements at the top level when multiple 
    items are selected, as this is not a logical group action and could be 
    confusing.
  • Fixed several bugs.

0.1 – 2010-11-02

  • Minor optimization.

0.1 Beta 2 – 2010-10-31

  • Fixed incorrect selection after adding new actions.

0.1 Beta – 2010-10-29

  • Minor and cosmetic changes.

0.1 Alpha 2 Revised – 2010-10-27

  • Split the code into separate specialized modules for better readability.
  • Included a simple Makefile for easier compilation.

0.1 Alpha 2 – 2010-10-25

  • Fixed realloc crash when loading a menu on x86 systems.
  • Improved XML parsing performance.

0.1 Alpha – 2010-10-24

  • Initial release.
