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"?> <?xml version="1.0" encoding="utf-8"?>
<interface> <interface xmlns:xi="http://www.w3.org/2001/XInclude">
<menu id="/image-menubar"> <menu id="/image-menubar">
<!-- File menu --> <!-- File menu -->
<submenu> <submenu>
@ -797,42 +797,7 @@
</submenu> </submenu>
<submenu> <submenu>
<attribute name="label" translatable="yes" context="windows-action">_Dockable Dialogs</attribute> <attribute name="label" translatable="yes" context="windows-action">_Dockable Dialogs</attribute>
<section> <xi:include href="dialogs-menuitems.ui" />
<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>
</submenu> </submenu>
<item><attribute name="action">app.dialogs-toolbox</attribute></item> <item><attribute name="action">app.dialogs-toolbox</attribute></item>
</section> </section>

View File

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

View File

@ -39,14 +39,6 @@ install_data(menus_files,
install_dir: menus_dir, 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' ] unstable_menus_args = stable ? [] : [ '--stringparam', 'unstable-menus', 'yes' ]
menus_built_files = [] menus_built_files = []
@ -67,6 +59,24 @@ foreach menu_filegen : [ 'dockable-menu.xml', 'image-menu.xml', ]
) )
endforeach 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() if xmllint.found()
custom_target('validate_menus', custom_target('validate_menus',
command: [ command: [
@ -90,7 +100,7 @@ if xmllint.found()
xmllint, xmllint,
'--output', '@OUTPUT@', '--output', '@OUTPUT@',
'--path', meson.current_source_dir(), '--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 # The output file is only useful as a flag file, so that the command
# knows if it has been run already. # knows if it has been run already.