[gnome-builder/wip/gtk4-port: 1492/1774] libide/gtk: add accel dialog
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/gtk4-port: 1492/1774] libide/gtk: add accel dialog
- Date: Mon, 11 Jul 2022 22:31:47 +0000 (UTC)
commit b58a0a2fc27320554b84a04f379070483713710a
Author: Christian Hergert <chergert redhat com>
Date: Tue Jun 14 00:44:41 2022 -0700
libide/gtk: add accel dialog
We need this for shortcuts, so this is a minimal port from Dazzle.
src/libide/gtk/icons/enter-keyboard-shortcut.svg | 245 +++++++++++++
src/libide/gtk/ide-gtk-init.c | 2 +
src/libide/gtk/ide-shortcut-accel-dialog.c | 415 +++++++++++++++++++++++
src/libide/gtk/ide-shortcut-accel-dialog.h | 51 +++
src/libide/gtk/ide-shortcut-accel-dialog.ui | 118 +++++++
src/libide/gtk/libide-gtk.gresource.xml | 2 +
src/libide/gtk/libide-gtk.h | 1 +
src/libide/gtk/meson.build | 2 +
8 files changed, 836 insertions(+)
---
diff --git a/src/libide/gtk/icons/enter-keyboard-shortcut.svg
b/src/libide/gtk/icons/enter-keyboard-shortcut.svg
new file mode 100644
index 000000000..b7ce2e4cc
--- /dev/null
+++ b/src/libide/gtk/icons/enter-keyboard-shortcut.svg
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="256"
+ height="72"
+ viewBox="0 0 256 72.000001"
+ id="svg3611"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="enter-keyboard-shortcut.svg">
+ <defs
+ id="defs3613" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8"
+ inkscape:cx="137.98997"
+ inkscape:cy="34.663602"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1366"
+ inkscape:window-height="704"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata3616">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Camada 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-980.36216)">
+ <g
+ id="g3715"
+ transform="translate(-503.23415,689.94658)">
+ <path
+ d="m 509.66363,325.47627 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.80721,-0.19813
1.43306,0.67185 1.50029,1.50028 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287
1.33167,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.50028,-1.50028 z"
+ id="path27275"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 543.62146,325.47627 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19813 1.43308,0.67185
1.50029,1.50028 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287 1.33168,-8.70575
1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.5003,-1.50028 z"
+ id="path27277"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 577.57927,325.47627 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19813 1.43308,0.67185
1.50029,1.50028 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287 1.33168,-8.70575
1.99752,-13.05863 0.12564,-0.82161 0.6952,-1.70681 1.5003,-1.50028 z"
+ id="path27279"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 611.12326,325.47627 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.80721,-0.19813
1.43306,0.67185 1.50029,1.50028 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287
1.33167,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.50028,-1.50028 z"
+ id="path5218"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 645.08109,325.47627 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19813 1.43308,0.67185
1.50029,1.50028 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287 1.33168,-8.70575
1.99751,-13.05863 0.12565,-0.82161 0.69519,-1.70681 1.50031,-1.50028 z"
+ id="path5220"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 679.0389,325.47627 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19813 1.43308,0.67185
1.50029,1.50028 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287 1.33168,-8.70575
1.99751,-13.05863 0.12565,-0.82161 0.69521,-1.70681 1.50031,-1.50028 z"
+ id="path5222"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 712.58289,325.47627 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.80721,-0.19813
1.43306,0.67185 1.50029,1.50028 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35287
1.33167,-8.70575 1.99751,-13.05863 0.12565,-0.82161 0.69519,-1.70681 1.50029,-1.50028 z"
+ id="path4829"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 516.19044,335.26648 c 5.53002,1.41851 18.51389,1.41851 24.2936,0 0.8072,-0.19812
1.43306,0.67186 1.50028,1.50029 l 1.99752,13.05863 -1.50029,0 -28.28862,0 -1.50029,0 c 0.66584,-4.35288
1.33167,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.50028,-1.50029 z"
+ id="path3662"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 550.14827,335.26648 c 5.53,1.41851 18.51387,1.41851 24.29358,0 0.8072,-0.19812 1.43307,0.67186
1.50028,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66584,-4.35288 1.33168,-8.70575
1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.5003,-1.50029 z"
+ id="path3664"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 584.10608,335.26648 c 5.53,1.41851 18.51387,1.41851 24.29357,0 0.80721,-0.19812
1.43308,0.67186 1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66584,-4.35288
1.33168,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.6952,-1.70681 1.5003,-1.50029 z"
+ id="path3666"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 617.65007,335.26648 c 5.53002,1.41851 18.51389,1.41851 24.29359,0 0.80721,-0.19812
1.43306,0.67186 1.50029,1.50029 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66584,-4.35288
1.33167,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.50028,-1.50029 z"
+ id="path3668"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 651.6079,335.26648 c 5.53,1.41851 18.51387,1.41851 24.29357,0 0.80721,-0.19812 1.43308,0.67186
1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288 1.33168,-8.70575
1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.5003,-1.50029 z"
+ id="path3670"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 685.56571,335.26648 c 5.53,1.41851 18.51387,1.41851 24.29357,0 0.80721,-0.19812
1.43308,0.67186 1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288
1.33168,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.6952,-1.70681 1.5003,-1.50029 z"
+ id="path3672"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 719.1097,335.26648 c 5.53002,1.41851 18.51389,1.41851 24.29359,0 0.80721,-0.19812
1.43306,0.67186 1.50029,1.50029 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288
1.33167,-8.70575 1.99752,-13.05863 0.12564,-0.82161 0.69518,-1.70681 1.50028,-1.50029 z"
+ id="path3674"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 525.98066,345.0567 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.80721,-0.19812
1.43306,0.67185 1.50029,1.50029 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288
1.33167,-8.70576 1.99752,-13.05863 0.12564,-0.82162 0.69518,-1.70681 1.50028,-1.50029 z"
+ id="path3676"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 559.93849,345.0567 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19812 1.43308,0.67185
1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288 1.33168,-8.70576
1.99751,-13.05863 0.12565,-0.82162 0.69519,-1.70681 1.50031,-1.50029 z"
+ id="path3678"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 593.8963,345.0567 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19812 1.43308,0.67185
1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288 1.33168,-8.70576
1.99751,-13.05863 0.12565,-0.82162 0.69521,-1.70681 1.50031,-1.50029 z"
+ id="path3680"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 627.44029,345.0567 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.80721,-0.19812
1.43306,0.67185 1.50029,1.50029 l 1.99751,13.05863 -1.50028,0 -28.28862,0 -1.50029,0 c 0.66583,-4.35288
1.33167,-8.70576 1.99751,-13.05863 0.12565,-0.82162 0.69519,-1.70681 1.50029,-1.50029 z"
+ id="path3682"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 661.39812,345.0567 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.80721,-0.19812 1.43308,0.67185
1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28863,0 -1.50028,0 c 0.66583,-4.35288 1.33168,-8.70576
1.99751,-13.05863 0.12564,-0.82162 0.69519,-1.70681 1.50031,-1.50029 z"
+ id="path3684"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 695.35593,345.0567 c 5.53,1.4185 18.51387,1.4185 24.29357,0 0.8072,-0.19812 1.43308,0.67185
1.50029,1.50029 l 1.99753,13.05863 -1.5003,0 -28.28863,0 -1.50028,0 c 0.66583,-4.35288 1.33168,-8.70576
1.99751,-13.05863 0.12564,-0.82162 0.69521,-1.70681 1.50031,-1.50029 z"
+ id="path3686"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.59999979;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 728.89992,345.0567 c 5.53002,1.4185 18.51389,1.4185 24.29359,0 0.8072,-0.19812 1.43306,0.67185
1.50029,1.50029 l 1.99751,13.05863 -1.50028,0 -28.28863,0 -1.50028,0 c 0.66583,-4.35288 1.33166,-8.70576
1.99751,-13.05863 0.12564,-0.82162 0.69519,-1.70681 1.50029,-1.50029 z"
+ id="path3688"
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="sssccccss"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g3713"
+ transform="matrix(1.359752,0,0,1.359752,418.09336,-671.08525)">
+ <path
+ d="m 95.250257,715.10933 0,1.09089 c -1.31e-4,0.0113 -5.02e-4,0.0227 0,0.0341 0.01222,0.27812
0.140266,0.55621 0.340902,0.74999 l 5.693061,5.76124 5.65897,-5.76124 c 0.20529,-0.20532 0.30681,-0.49473
0.30681,-0.78413 l 0,-1.09089 -1.09088,0 c -0.28941,0 -0.57881,0.10156 -0.78408,0.30681 l -4.09082,4.15901
-4.124913,-4.15901 c -0.212319,-0.22989 -0.511898,-0.33071 -0.818164,-0.30681 l -1.090886,0 z"
+ id="path3715"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale
Mono';-inkscape-font-specification:'Andale
Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ height="11.999745"
+ id="rect3717"
+ rx="0"
+ ry="0"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ transform="scale(-1,1)"
+ width="2.1817718"
+ x="-102.34102"
+ y="708.92743" />
+ </g>
+ <g
+ id="g3740"
+ transform="matrix(1.359752,0,0,1.359752,492.12198,-661.29504)">
+ <path
+ d="m 95.250257,715.10933 0,1.09089 c -1.31e-4,0.0113 -5.02e-4,0.0227 0,0.0341 0.01222,0.27812
0.140266,0.55621 0.340902,0.74999 l 5.693061,5.76124 5.65897,-5.76124 c 0.20529,-0.20532 0.30681,-0.49473
0.30681,-0.78413 l 0,-1.09089 -1.09088,0 c -0.28941,0 -0.57881,0.10156 -0.78408,0.30681 l -4.09082,4.15901
-4.124913,-4.15901 c -0.212319,-0.22989 -0.511898,-0.33071 -0.818164,-0.30681 l -1.090886,0 z"
+ id="path3742"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale
Mono';-inkscape-font-specification:'Andale
Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ height="11.999745"
+ id="rect3744"
+ rx="0"
+ ry="0"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ transform="scale(-1,1)"
+ width="2.1817718"
+ x="-102.34102"
+ y="708.92743" />
+ </g>
+ <g
+ id="g3746"
+ transform="matrix(1.359752,0,0,1.359752,593.58161,-661.29504)">
+ <path
+ d="m 95.250257,715.10933 0,1.09089 c -1.31e-4,0.0113 -5.02e-4,0.0227 0,0.0341 0.01222,0.27812
0.140266,0.55621 0.340902,0.74999 l 5.693061,5.76124 5.65897,-5.76124 c 0.20529,-0.20532 0.30681,-0.49473
0.30681,-0.78413 l 0,-1.09089 -1.09088,0 c -0.28941,0 -0.57881,0.10156 -0.78408,0.30681 l -4.09082,4.15901
-4.124913,-4.15901 c -0.212319,-0.22989 -0.511898,-0.33071 -0.818164,-0.30681 l -1.090886,0 z"
+ id="path3748"
+
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale
Mono';-inkscape-font-specification:'Andale
Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ height="11.999745"
+ id="rect3750"
+ rx="0"
+ ry="0"
+
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#000100;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ transform="scale(-1,1)"
+ width="2.1817718"
+ x="-102.34102"
+ y="708.92743" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/src/libide/gtk/ide-gtk-init.c b/src/libide/gtk/ide-gtk-init.c
index 950bbf4ca..5aedb6af4 100644
--- a/src/libide/gtk/ide-gtk-init.c
+++ b/src/libide/gtk/ide-gtk-init.c
@@ -34,6 +34,7 @@
#include "ide-progress-icon.h"
#include "ide-radio-box.h"
#include "ide-search-entry.h"
+#include "ide-shortcut-accel-dialog.h"
#include "ide-three-grid.h"
#include "ide-truncate-model.h"
@@ -49,6 +50,7 @@ _ide_gtk_init (void)
g_type_ensure (IDE_TYPE_PROGRESS_ICON);
g_type_ensure (IDE_TYPE_RADIO_BOX);
g_type_ensure (IDE_TYPE_SEARCH_ENTRY);
+ g_type_ensure (IDE_TYPE_SHORTCUT_ACCEL_DIALOG);
g_type_ensure (IDE_TYPE_THREE_GRID);
g_type_ensure (IDE_TYPE_TRUNCATE_MODEL);
diff --git a/src/libide/gtk/ide-shortcut-accel-dialog.c b/src/libide/gtk/ide-shortcut-accel-dialog.c
new file mode 100644
index 000000000..f553a436b
--- /dev/null
+++ b/src/libide/gtk/ide-shortcut-accel-dialog.c
@@ -0,0 +1,415 @@
+/* ide-shortcut-accel-dialog.c
+ *
+ * Copyright (C) 2016 Endless, Inc
+ * (C) 2017 Christian Hergert
+ *
+ * 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Georges Basile Stavracas Neto <georges stavracas gmail com>
+ * Christian Hergert <chergert redhat com>
+ */
+
+#define G_LOG_DOMAIN "ide-shortcut-accel-dialog"
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "ide-shortcut-accel-dialog.h"
+
+struct _IdeShortcutAccelDialog
+{
+ GtkDialog parent_instance;
+
+ GtkStack *stack;
+ GtkLabel *display_label;
+ GtkShortcutLabel *display_shortcut;
+ GtkLabel *selection_label;
+
+ char *shortcut_title;
+
+ guint keyval;
+ GdkModifierType modifier;
+
+ guint first_modifier;
+
+ guint editing : 1;
+};
+
+enum {
+ PROP_0,
+ PROP_ACCELERATOR,
+ PROP_SHORTCUT_TITLE,
+ N_PROPS
+};
+
+G_DEFINE_FINAL_TYPE (IdeShortcutAccelDialog, ide_shortcut_accel_dialog, GTK_TYPE_DIALOG)
+
+static GParamSpec *properties[N_PROPS];
+
+static gboolean
+ide_shortcut_accel_dialog_is_editing (IdeShortcutAccelDialog *self)
+{
+ g_assert (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+
+ return self->editing;
+}
+
+static void
+ide_shortcut_accel_dialog_apply_state (IdeShortcutAccelDialog *self)
+{
+ g_assert (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+
+ if (self->editing)
+ {
+ gtk_stack_set_visible_child_name (self->stack, "selection");
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT, FALSE);
+ }
+ else
+ {
+ gtk_stack_set_visible_child_name (self->stack, "display");
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT, TRUE);
+ }
+}
+
+static GdkModifierType
+sanitize_modifier_mask (GdkModifierType mods)
+{
+ mods &= gtk_accelerator_get_default_mod_mask ();
+ mods &= ~GDK_LOCK_MASK;
+
+ return mods;
+}
+
+static gboolean
+ide_shortcut_accel_dialog_key_pressed (GtkWidget *widget,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkEventControllerKey *controller)
+{
+ IdeShortcutAccelDialog *self = (IdeShortcutAccelDialog *)widget;
+
+ g_assert (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+ g_assert (GTK_IS_EVENT_CONTROLLER_KEY (controller));
+
+ if (ide_shortcut_accel_dialog_is_editing (self))
+ {
+ GdkEvent *key = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller));
+ GdkModifierType real_mask;
+ guint keyval_lower;
+
+ if (gdk_key_event_is_modifier (key))
+ {
+ if (self->keyval == 0 && self->modifier == 0)
+ self->first_modifier = keyval;
+ return GDK_EVENT_PROPAGATE;
+ }
+
+ real_mask = state & gtk_accelerator_get_default_mod_mask ();
+ keyval_lower = gdk_keyval_to_lower (keyval);
+
+ /* Normalize <Tab> */
+ if (keyval_lower == GDK_KEY_ISO_Left_Tab)
+ keyval_lower = GDK_KEY_Tab;
+
+ /* Put shift back if it changed the case of the key */
+ if (keyval_lower != keyval)
+ real_mask |= GDK_SHIFT_MASK;
+
+ /* We don't want to use SysRq as a keybinding but we do
+ * want Alt+Print), so we avoid translation from Alt+Print to SysRq
+ */
+ if (keyval_lower == GDK_KEY_Sys_Req && (real_mask & GDK_ALT_MASK) != 0)
+ keyval_lower = GDK_KEY_Print;
+
+ /* A single Escape press cancels the editing */
+ if (!gdk_key_event_is_modifier (key) &&
+ real_mask == 0 &&
+ keyval_lower == GDK_KEY_Escape)
+ {
+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CANCEL);
+ return GDK_EVENT_STOP;
+ }
+
+ /* Backspace disables the current shortcut */
+ if (real_mask == 0 && keyval_lower == GDK_KEY_BackSpace)
+ {
+ ide_shortcut_accel_dialog_set_accelerator (self, NULL);
+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT);
+ return GDK_EVENT_STOP;
+ }
+
+ self->keyval = gdk_keyval_to_lower (keyval);
+ self->modifier = sanitize_modifier_mask (state);
+
+ if ((state & GDK_SHIFT_MASK) != 0 &&
+ self->keyval == keyval)
+ self->modifier &= ~GDK_SHIFT_MASK;
+
+ if ((state & GDK_LOCK_MASK) == 0 &&
+ self->keyval != keyval)
+ self->modifier |= GDK_SHIFT_MASK;
+
+ self->editing = FALSE;
+
+ ide_shortcut_accel_dialog_apply_state (self);
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ACCELERATOR]);
+
+ return GDK_EVENT_STOP;
+ }
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+static void
+ide_shortcut_accel_dialog_key_released (GtkWidget *widget,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkEventControllerKey *controller)
+{
+ IdeShortcutAccelDialog *self = (IdeShortcutAccelDialog *)widget;
+
+ g_assert (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+ g_assert (GTK_IS_EVENT_CONTROLLER_KEY (controller));
+
+ if (self->editing)
+ {
+ GdkEvent *key = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller));
+ /*
+ * If we have a chord defined and there was no modifier,
+ * then any key release should be enough for us to cancel
+ * our grab.
+ */
+ if (self->modifier == 0)
+ {
+ self->editing = FALSE;
+ ide_shortcut_accel_dialog_apply_state (self);
+ return;
+ }
+
+ /*
+ * If we started our sequence with a modifier, we want to
+ * release our grab when that modifier has been released.
+ */
+ if (gdk_key_event_is_modifier (key) &&
+ self->keyval != 0 &&
+ self->first_modifier != 0 &&
+ self->first_modifier == keyval)
+ {
+ self->editing = FALSE;
+ self->first_modifier = 0;
+ ide_shortcut_accel_dialog_apply_state (self);
+ return;
+ }
+ }
+}
+
+static void
+ide_shortcut_accel_dialog_constructed (GObject *object)
+{
+ IdeShortcutAccelDialog *self = (IdeShortcutAccelDialog *)object;
+
+ G_OBJECT_CLASS (ide_shortcut_accel_dialog_parent_class)->constructed (object);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT, FALSE);
+}
+
+static void
+ide_shortcut_accel_dialog_finalize (GObject *object)
+{
+ IdeShortcutAccelDialog *self = (IdeShortcutAccelDialog *)object;
+
+ g_clear_pointer (&self->shortcut_title, g_free);
+
+ G_OBJECT_CLASS (ide_shortcut_accel_dialog_parent_class)->finalize (object);
+}
+
+static void
+ide_shortcut_accel_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ IdeShortcutAccelDialog *self = IDE_SHORTCUT_ACCEL_DIALOG (object);
+
+ switch (prop_id)
+ {
+ case PROP_ACCELERATOR:
+ g_value_take_string (value, ide_shortcut_accel_dialog_get_accelerator (self));
+ break;
+
+ case PROP_SHORTCUT_TITLE:
+ g_value_set_string (value, ide_shortcut_accel_dialog_get_shortcut_title (self));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_shortcut_accel_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ IdeShortcutAccelDialog *self = IDE_SHORTCUT_ACCEL_DIALOG (object);
+
+ switch (prop_id)
+ {
+ case PROP_ACCELERATOR:
+ ide_shortcut_accel_dialog_set_accelerator (self, g_value_get_string (value));
+ break;
+
+ case PROP_SHORTCUT_TITLE:
+ ide_shortcut_accel_dialog_set_shortcut_title (self, g_value_get_string (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_shortcut_accel_dialog_class_init (IdeShortcutAccelDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->constructed = ide_shortcut_accel_dialog_constructed;
+ object_class->finalize = ide_shortcut_accel_dialog_finalize;
+ object_class->get_property = ide_shortcut_accel_dialog_get_property;
+ object_class->set_property = ide_shortcut_accel_dialog_set_property;
+
+ properties [PROP_ACCELERATOR] =
+ g_param_spec_string ("accelerator",
+ "Accelerator",
+ "Accelerator",
+ NULL,
+ (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+
+ properties [PROP_SHORTCUT_TITLE] =
+ g_param_spec_string ("shortcut-title",
+ "Title",
+ "Title",
+ NULL,
+ (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+
+ gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/libide-gtk/ide-shortcut-accel-dialog.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, IdeShortcutAccelDialog, stack);
+ gtk_widget_class_bind_template_child (widget_class, IdeShortcutAccelDialog, selection_label);
+ gtk_widget_class_bind_template_child (widget_class, IdeShortcutAccelDialog, display_label);
+ gtk_widget_class_bind_template_child (widget_class, IdeShortcutAccelDialog, display_shortcut);
+ gtk_widget_class_bind_template_callback (widget_class, ide_shortcut_accel_dialog_key_pressed);
+ gtk_widget_class_bind_template_callback (widget_class, ide_shortcut_accel_dialog_key_released);
+}
+
+static void
+ide_shortcut_accel_dialog_init (IdeShortcutAccelDialog *self)
+{
+ self->editing = TRUE;
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ g_object_bind_property (self, "accelerator",
+ self->display_shortcut, "accelerator",
+ G_BINDING_SYNC_CREATE);
+}
+
+gchar *
+ide_shortcut_accel_dialog_get_accelerator (IdeShortcutAccelDialog *self)
+{
+ g_return_val_if_fail (IDE_IS_SHORTCUT_ACCEL_DIALOG (self), NULL);
+
+ if (self->keyval == 0)
+ return NULL;
+
+ return gtk_accelerator_name (self->keyval, self->modifier);
+}
+
+void
+ide_shortcut_accel_dialog_set_accelerator (IdeShortcutAccelDialog *self,
+ const gchar *accelerator)
+{
+ guint keyval;
+ GdkModifierType state;
+
+ g_return_if_fail (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+
+ if (accelerator == NULL)
+ {
+ if (self->keyval != 0 || self->modifier != 0)
+ {
+ self->keyval = 0;
+ self->modifier = 0;
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ACCELERATOR]);
+ }
+ }
+ else if (gtk_accelerator_parse (accelerator, &keyval, &state))
+ {
+ if (keyval != self->keyval || state != self->modifier)
+ {
+ self->keyval = keyval;
+ self->modifier = state;
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ACCELERATOR]);
+ }
+ }
+}
+
+void
+ide_shortcut_accel_dialog_set_shortcut_title (IdeShortcutAccelDialog *self,
+ const gchar *shortcut_title)
+{
+ g_return_if_fail (IDE_IS_SHORTCUT_ACCEL_DIALOG (self));
+
+ if (g_strcmp0 (shortcut_title, self->shortcut_title) != 0)
+ {
+ g_autofree gchar *label = NULL;
+
+ if (shortcut_title != NULL)
+ {
+ /* Translators: <b>%s</b> is used to show the provided text in bold */
+ label = g_strdup_printf (_("Enter new shortcut to change <b>%s</b>."), shortcut_title);
+ }
+
+ gtk_label_set_label (self->selection_label, label);
+ gtk_label_set_label (self->display_label, label);
+
+ g_free (self->shortcut_title);
+ self->shortcut_title = g_strdup (shortcut_title);
+
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_SHORTCUT_TITLE]);
+ }
+}
+
+const gchar *
+ide_shortcut_accel_dialog_get_shortcut_title (IdeShortcutAccelDialog *self)
+{
+ g_return_val_if_fail (IDE_IS_SHORTCUT_ACCEL_DIALOG (self), NULL);
+
+ return self->shortcut_title;
+}
+
+GtkWidget *
+ide_shortcut_accel_dialog_new (void)
+{
+ return g_object_new (IDE_TYPE_SHORTCUT_ACCEL_DIALOG, NULL);
+}
diff --git a/src/libide/gtk/ide-shortcut-accel-dialog.h b/src/libide/gtk/ide-shortcut-accel-dialog.h
new file mode 100644
index 000000000..2503eb95e
--- /dev/null
+++ b/src/libide/gtk/ide-shortcut-accel-dialog.h
@@ -0,0 +1,51 @@
+/* ide-shortcut-accel-dialog.h
+ *
+ * Copyright 2017-2022 Christian Hergert <chergert redhat com>
+ *
+ * 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 3 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#if !defined (IDE_GTK_INSIDE) && !defined (IDE_GTK_COMPILATION)
+# error "Only <libide-gtk.h> can be included directly."
+#endif
+
+#include <gtk/gtk.h>
+
+#include <libide-core.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_SHORTCUT_ACCEL_DIALOG (ide_shortcut_accel_dialog_get_type())
+
+IDE_AVAILABLE_IN_ALL
+G_DECLARE_FINAL_TYPE (IdeShortcutAccelDialog, ide_shortcut_accel_dialog, IDE, SHORTCUT_ACCEL_DIALOG,
GtkDialog)
+
+IDE_AVAILABLE_IN_ALL
+GtkWidget *ide_shortcut_accel_dialog_new (void);
+IDE_AVAILABLE_IN_ALL
+char *ide_shortcut_accel_dialog_get_accelerator (IdeShortcutAccelDialog *self);
+IDE_AVAILABLE_IN_ALL
+void ide_shortcut_accel_dialog_set_accelerator (IdeShortcutAccelDialog *self,
+ const char *accelerator);
+IDE_AVAILABLE_IN_ALL
+const char *ide_shortcut_accel_dialog_get_shortcut_title (IdeShortcutAccelDialog *self);
+IDE_AVAILABLE_IN_ALL
+void ide_shortcut_accel_dialog_set_shortcut_title (IdeShortcutAccelDialog *self,
+ const char *title);
+
+G_END_DECLS
diff --git a/src/libide/gtk/ide-shortcut-accel-dialog.ui b/src/libide/gtk/ide-shortcut-accel-dialog.ui
new file mode 100644
index 000000000..1fe3a3d0d
--- /dev/null
+++ b/src/libide/gtk/ide-shortcut-accel-dialog.ui
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <requires lib="gtk" version="4.0"/>
+ <template class="IdeShortcutAccelDialog" parent="GtkDialog">
+ <property name="resizable">false</property>
+ <property name="modal">true</property>
+ <property name="width-request">400</property>
+ <property name="height-request">300</property>
+ <child>
+ <object class="GtkEventControllerKey">
+ <property name="propagation-phase">capture</property>
+ <signal name="key-pressed" handler="ide_shortcut_accel_dialog_key_pressed" swapped="true"
object="IdeShortcutAccelDialog"/>
+ <signal name="key-released" handler="ide_shortcut_accel_dialog_key_released" swapped="true"
object="IdeShortcutAccelDialog"/>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="GtkHeaderBar">
+ <property name="show-title-buttons">false</property>
+ <child type="start">
+ <object class="GtkButton" id="cancel_button">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use-underline">true</property>
+ </object>
+ </child>
+ <child type="end">
+ <object class="GtkButton" id="accept_button">
+ <property name="label" translatable="yes">_Set</property>
+ <property name="use-underline">true</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child internal-child="content_area">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="vexpand">true</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="hhomogeneous">true</property>
+ <property name="vhomogeneous">true</property>
+ <property name="margin-top">24</property>
+ <property name="margin-bottom">24</property>
+ <property name="margin-start">24</property>
+ <property name="margin-end">24</property>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">selection</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkLabel" id="selection_label">
+ <property name="xalign">0.5</property>
+ <property name="use-markup">true</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property
name="resource">/org/gnome/libide-gtk/icons/enter-keyboard-shortcut.svg</property>
+ <property name="hexpand">true</property>
+ <property name="vexpand">true</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="xalign">0.5</property>
+ <property name="label" translatable="yes">Press Escape to cancel or Backspace to
disable.</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">display</property>
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkLabel" id="display_label">
+ <property name="xalign">0.5</property>
+ <property name="use-markup">true</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutLabel" id="display_shortcut">
+ <property name="halign">center</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">cancel_button</action-widget>
+ <action-widget response="accept">accept_button</action-widget>
+ </action-widgets>
+ </template>
+ <object class="GtkSizeGroup">
+ <widgets>
+ <widget name="cancel_button"/>
+ <widget name="accept_button"/>
+ </widgets>
+ </object>
+</interface>
diff --git a/src/libide/gtk/libide-gtk.gresource.xml b/src/libide/gtk/libide-gtk.gresource.xml
index 8fd8a7c16..167fa8a18 100644
--- a/src/libide/gtk/libide-gtk.gresource.xml
+++ b/src/libide/gtk/libide-gtk.gresource.xml
@@ -3,5 +3,7 @@
<gresource prefix="/org/gnome/libide-gtk">
<file preprocess="xml-stripblanks">ide-entry-popover.ui</file>
<file preprocess="xml-stripblanks">ide-search-entry.ui</file>
+ <file preprocess="xml-stripblanks">ide-shortcut-accel-dialog.ui</file>
+ <file preprocess="xml-stripblanks">icons/enter-keyboard-shortcut.svg</file>
</gresource>
</gresources>
diff --git a/src/libide/gtk/libide-gtk.h b/src/libide/gtk/libide-gtk.h
index a1b13df38..0f0904871 100644
--- a/src/libide/gtk/libide-gtk.h
+++ b/src/libide/gtk/libide-gtk.h
@@ -36,6 +36,7 @@
# include "ide-progress-icon.h"
# include "ide-radio-box.h"
# include "ide-search-entry.h"
+# include "ide-shortcut-accel-dialog.h"
# include "ide-three-grid.h"
# include "ide-truncate-model.h"
#undef IDE_GTK_INSIDE
diff --git a/src/libide/gtk/meson.build b/src/libide/gtk/meson.build
index 67b72df22..f034bdb70 100644
--- a/src/libide/gtk/meson.build
+++ b/src/libide/gtk/meson.build
@@ -21,6 +21,7 @@ libide_gtk_public_headers = [
'ide-progress-icon.h',
'ide-radio-box.h',
'ide-search-entry.h',
+ 'ide-shortcut-accel-dialog.h',
'ide-three-grid.h',
'ide-truncate-model.h',
'libide-gtk.h',
@@ -52,6 +53,7 @@ libide_gtk_public_sources = [
'ide-progress-icon.c',
'ide-radio-box.c',
'ide-search-entry.c',
+ 'ide-shortcut-accel-dialog.c',
'ide-three-grid.c',
'ide-truncate-model.c',
]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]