menus: add a dockable-menu with the new GtkBuilder format.

The dialogs-menuitems is shared between dockable-menu and image-menu, just as it
was with the old format. For this, we use XSL transformation with XInclude, then
drop the namespace (because GTK doesn't like the unknown namespace being defined
and crash immediately otherwise).
This commit is contained in:
Jehan 2023-02-22 21:29:08 +01:00
parent f9fec03751
commit 47ff65aa86
5 changed files with 111 additions and 46 deletions

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<section>
<item><attribute name="action">app.dialogs-tool-options</attribute></item>
<item><attribute name="action">app.dialogs-device-status</attribute></item>
<section>
<item><attribute name="action">app.dialogs-layers</attribute></item>
<item><attribute name="action">app.dialogs-channels</attribute></item>
<item><attribute name="action">app.dialogs-vectors</attribute></item>
<item><attribute name="action">app.dialogs-indexed-palette</attribute></item>
<item><attribute name="action">app.dialogs-histogram</attribute></item>
<item><attribute name="action">app.dialogs-selection-editor</attribute></item>
<item><attribute name="action">app.dialogs-navigation</attribute></item>
<item><attribute name="action">app.dialogs-undo-history</attribute></item>
<item><attribute name="action">app.dialogs-cursor</attribute></item>
<item><attribute name="action">app.dialogs-sample-points</attribute></item>
<item><attribute name="action">app.dialogs-symmetry</attribute></item>
</section>
<section>
<item><attribute name="action">app.dialogs-colors</attribute></item>
<item><attribute name="action">app.dialogs-brushes</attribute></item>
<item><attribute name="action">app.dialogs-dynamics</attribute></item>
<item><attribute name="action">app.dialogs-mypaint-brushes</attribute></item>
<item><attribute name="action">app.dialogs-patterns</attribute></item>
<item><attribute name="action">app.dialogs-gradients</attribute></item>
<item><attribute name="action">app.dialogs-palettes</attribute></item>
<item><attribute name="action">app.dialogs-fonts</attribute></item>
<item><attribute name="action">app.dialogs-tool-presets</attribute></item>
<item><attribute name="action">app.dialogs-buffers</attribute></item>
</section>
<item><attribute name="action">app.dialogs-images</attribute></item>
<item><attribute name="action">app.dialogs-document-history</attribute></item>
<item><attribute name="action">app.dialogs-templates</attribute></item>
<item><attribute name="action">app.dialogs-error-console</attribute></item>
<item><attribute name="action">app.dialogs-dashboard</attribute></item>
</section>

47
menus/dockable-menu.ui.in Normal file
View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<interface xmlns:xi="http://www.w3.org/2001/XInclude">
<menu id="/dockable-popup">
<submenu>
<attribute name="label" translatable="yes" context="file-action">_Add Tab</attribute>
<xi:include href="dialogs-menuitems.ui" />
</submenu>
<item><attribute name="action">app.dockable-close-tab</attribute></item>
<item><attribute name="action">app.dockable-detach-tab</attribute></item>
<item><attribute name="action">app.dockable-lock-tab</attribute></item>
<section>
<submenu>
<attribute name="label" translatable="yes" context="file-action">_Preview Size</attribute>
<item><attribute name="action">app.dockable-preview-size-tiny</attribute></item>
<item><attribute name="action">app.dockable-preview-size-extra-small</attribute></item>
<item><attribute name="action">app.dockable-preview-size-small</attribute></item>
<item><attribute name="action">app.dockable-preview-size-medium</attribute></item>
<item><attribute name="action">app.dockable-preview-size-large</attribute></item>
<item><attribute name="action">app.dockable-preview-size-extra-large</attribute></item>
<item><attribute name="action">app.dockable-preview-size-enormous</attribute></item>
<item><attribute name="action">app.dockable-preview-size-gigantic</attribute></item>
</submenu>
<submenu>
<attribute name="label" translatable="yes" context="file-action">_Tab Style</attribute>
<item><attribute name="action">app.dockable-tab-style-icon</attribute></item>
<item><attribute name="action">app.dockable-tab-style-preview</attribute></item>
<item><attribute name="action">app.dockable-tab-style-name</attribute></item>
<item><attribute name="action">app.dockable-tab-style-icon-name</attribute></item>
<item><attribute name="action">app.dockable-tab-style-preview-name</attribute></item>
</submenu>
<item><attribute name="action">app.dockable-view-type-list</attribute></item>
<item><attribute name="action">app.dockable-view-type-grid</attribute></item>
<item><attribute name="action">app.dockable-show-button-bar</attribute></item>
</section>
<section>
<item><attribute name="action">app.dock-show-image-menu</attribute></item>
<item><attribute name="action">app.dock-auto-follow-active</attribute></item>
</section>
<submenu>
<attribute name="label" translatable="yes" context="file-action">Move to Screen</attribute>
<section>
<item><attribute name="action">app.dock-open-display</attribute></item>
</section>
</submenu>
</menu>
</interface>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<interface>
<interface xmlns:xi="http://www.w3.org/2001/XInclude">
<menu id="/image-menubar">
<!-- File menu -->
<submenu>
@ -797,42 +797,7 @@
</submenu>
<submenu>
<attribute name="label" translatable="yes" context="windows-action">_Dockable Dialogs</attribute>
<section>
<item><attribute name="action">app.dialogs-tool-options</attribute></item>
<item><attribute name="action">app.dialogs-device-status</attribute></item>
</section>
<section>
<item><attribute name="action">app.dialogs-layers</attribute></item>
<item><attribute name="action">app.dialogs-channels</attribute></item>
<item><attribute name="action">app.dialogs-vectors</attribute></item>
<item><attribute name="action">app.dialogs-indexed-palette</attribute></item>
<item><attribute name="action">app.dialogs-histogram</attribute></item>
<item><attribute name="action">app.dialogs-selection-editor</attribute></item>
<item><attribute name="action">app.dialogs-navigation</attribute></item>
<item><attribute name="action">app.dialogs-undo-history</attribute></item>
<item><attribute name="action">app.dialogs-cursor</attribute></item>
<item><attribute name="action">app.dialogs-sample-points</attribute></item>
<item><attribute name="action">app.dialogs-symmetry</attribute></item>
</section>
<section>
<item><attribute name="action">app.dialogs-colors</attribute></item>
<item><attribute name="action">app.dialogs-brushes</attribute></item>
<item><attribute name="action">app.dialogs-dynamics</attribute></item>
<item><attribute name="action">app.dialogs-mypaint-brushes</attribute></item>
<item><attribute name="action">app.dialogs-patterns</attribute></item>
<item><attribute name="action">app.dialogs-gradients</attribute></item>
<item><attribute name="action">app.dialogs-palettes</attribute></item>
<item><attribute name="action">app.dialogs-fonts</attribute></item>
<item><attribute name="action">app.dialogs-tool-presets</attribute></item>
<item><attribute name="action">app.dialogs-buffers</attribute></item>
</section>
<section>
<item><attribute name="action">app.dialogs-images</attribute></item>
<item><attribute name="action">app.dialogs-document-history</attribute></item>
<item><attribute name="action">app.dialogs-templates</attribute></item>
<item><attribute name="action">app.dialogs-error-console</attribute></item>
<item><attribute name="action">app.dialogs-dashboard</attribute></item>
</section>
<xi:include href="dialogs-menuitems.ui" />
</submenu>
<item><attribute name="action">app.dialogs-toolbox</attribute></item>
</section>

View File

@ -38,6 +38,13 @@
<xsl:apply-templates />
</xsl:template>
<!-- Strip the XInclude namespace declaration from the interface element -->
<xsl:template match="interface">
<interface>
<xsl:apply-templates />
</interface>
</xsl:template>
<!-- need to strip the XInclude namespace declaration from the ui element -->
<xsl:template match="ui">
<ui>

View File

@ -39,14 +39,6 @@ install_data(menus_files,
install_dir: menus_dir,
)
ui_menus_files = files(
'image-menu.ui',
)
install_data(ui_menus_files,
install_dir: menus_dir,
)
unstable_menus_args = stable ? [] : [ '--stringparam', 'unstable-menus', 'yes' ]
menus_built_files = []
@ -67,6 +59,24 @@ foreach menu_filegen : [ 'dockable-menu.xml', 'image-menu.xml', ]
)
endforeach
menus_ui_built_files = []
foreach menu_filegen : [ 'dockable-menu.ui', 'image-menu.ui', ]
menus_ui_built_files += custom_target(menu_filegen,
input : [ menu_filegen +'.in', 'menus.xsl', ],
output: [ menu_filegen ],
command: [
xsltproc,
'--xinclude',
unstable_menus_args,
'--output', '@OUTPUT@',
'@INPUT1@',
'@INPUT0@',
],
install: true,
install_dir: menus_dir,
)
endforeach
if xmllint.found()
custom_target('validate_menus',
command: [
@ -90,7 +100,7 @@ if xmllint.found()
xmllint,
'--output', '@OUTPUT@',
'--path', meson.current_source_dir(),
ui_menus_files, menus_built_files
menus_ui_built_files
],
# The output file is only useful as a flag file, so that the command
# knows if it has been run already.