diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..edeca31
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,22 @@
+root = true
+
+[meson.build]
+indent_style = space
+indent_size = 2
+
+[*.vala]
+indent_style = tab
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.blp]
+indent_style = space
+indent_size = 2
+
+[*.css]
+indent_style = space
+indent_size = 2
+
+[*.json]
+indent_style = space
+indent_size = 2
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e256067
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,17 @@
+APP_ID := im.gzr.MunchMate.Devel
+
+build:
+ @meson setup --reconfigure --buildtype=debug build
+ @meson compile -C build
+
+clean:
+ @rm -rf ./build/
+
+run:
+ @env \
+ G_MESSAGES_DEBUG=$(APP_ID) \
+ ./build/src/munchmate
+
+.PHONY: build clean run
+
+include build-aux/flatpak.mk
diff --git a/build-aux/flatpak.mk b/build-aux/flatpak.mk
new file mode 100644
index 0000000..3379968
--- /dev/null
+++ b/build-aux/flatpak.mk
@@ -0,0 +1,29 @@
+APP_ID ?=
+
+flatpak-build:
+ @flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
+ @flatpak-builder \
+ --user \
+ --force-clean \
+ --disable-rofiles-fuse \
+ --install-deps-from=flathub \
+ --install \
+ --repo=./build/flatpak/repo \
+ --state-dir=./build/.flatpak-builder \
+ ./build/flatpak \
+ ./build-aux/$(APP_ID).json
+
+flatpak-uninstall:
+ @flatpak uninstall --delete-data --verbose \
+ $(APP_ID)
+
+flatpak-clean:
+ @rm -rf ./build/flatpak/
+ @rm -rf ./build/.flatpak-builder/
+
+flatpak-run: ARGS ?=
+flatpak-run:
+ @flatpak run --devel --verbose \
+ $(APP_ID) $(ARGS)
+
+.PHONY: flatpak-build flatpak-uninstall flatpak-clean flatpak-run
diff --git a/build-aux/im.gzr.MunchMate.Devel.json b/build-aux/im.gzr.MunchMate.Devel.json
new file mode 100644
index 0000000..e1c9e18
--- /dev/null
+++ b/build-aux/im.gzr.MunchMate.Devel.json
@@ -0,0 +1,45 @@
+{
+ "id": "im.gzr.MunchMate.Devel",
+ "runtime": "org.gnome.Platform",
+ "runtime-version": "50",
+ "sdk": "org.gnome.Sdk",
+ "command": "munchmate",
+ "finish-args": [
+ "--share=ipc",
+ "--socket=fallback-x11",
+ "--socket=wayland",
+ "--device=dri",
+ "--env=G_MESSAGES_DEBUG=im.gzr.MunchMate.Devel"
+ ],
+ "build-options" : {
+ "cflags" : "-O2 -g",
+ "env" : {}
+ },
+ "cleanup" : [
+ "/include",
+ "/lib/pkgconfig",
+ "/share/pkgconfig",
+ "/share/aclocal",
+ "/man",
+ "/share/man",
+ "/share/gtk-doc",
+ "*.la",
+ "*.a",
+ "/lib/girepository-1.0",
+ "/share/doc",
+ "/share/gir-1.0"
+ ],
+ "modules" : [
+ {
+ "name" : "munchmate",
+ "buildsystem" : "meson",
+ "builddir" : true,
+ "sources" : [
+ {
+ "type" : "dir",
+ "path" : ".."
+ }
+ ]
+ }
+ ]
+}
diff --git a/data/icons/scalable/apps/im.gzr.MunchMate.Devel.svg b/data/icons/scalable/apps/im.gzr.MunchMate.Devel.svg
new file mode 100644
index 0000000..4e02aed
--- /dev/null
+++ b/data/icons/scalable/apps/im.gzr.MunchMate.Devel.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+ height="128"
+ width="128"
+ version="1.1"
+ id="svg18"
+ sodipodi:docname="org.xfce.about.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata24">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs22" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1019"
+ id="namedview20"
+ showgrid="false"
+ inkscape:zoom="2.5243712"
+ inkscape:cx="107.92906"
+ inkscape:cy="-10.749463"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g16"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:pagecheckerboard="false">
+ <sodipodi:guide
+ position="115,35"
+ orientation="0,1"
+ id="guide1036"
+ inkscape:locked="false" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid860"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <g
+ stroke-width="4"
+ id="g16">
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#ad7702;fill-opacity:1;fill-rule:nonzero;stroke:#ad7702;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ id="path851"
+ d="m 63.999997,14.269911 c 3.81304,0 16.106204,30.672041 19.191022,32.910692 3.084813,2.238644 36.088361,4.438384 37.266671,8.060591 1.17829,3.622208 -24.227678,24.778304 -25.405971,28.400512 -1.178293,3.622206 6.925861,35.653754 3.841048,37.892404 -3.084823,2.23864 -31.07973,-15.35821 -34.892775,-15.35821 -3.813038,0 -31.807948,17.59685 -34.892766,15.35821 -3.084813,-2.23865 5.01934,-34.2702 3.841048,-37.892404 C 31.769982,80.019498 6.3640183,58.863397 7.5423132,55.241189 8.7206092,51.618987 41.724162,49.419247 44.808977,47.180603 47.893789,44.941952 60.186959,14.269911 63.999997,14.269911 Z"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 63.999997,10.269457 c 3.81304,0 16.106204,30.672041 19.191022,32.910692 3.084813,2.238644 36.088361,4.438384 37.266671,8.060591 1.17829,3.622208 -24.227678,24.778304 -25.405971,28.400512 -1.178293,3.622206 6.925861,35.653758 3.841048,37.892408 -3.084823,2.23864 -31.07973,-15.35821 -34.892775,-15.35821 -3.813038,0 -31.807948,17.59685 -34.892766,15.35821 -3.084813,-2.23865 5.01934,-34.270204 3.841048,-37.892408 C 31.769982,76.019044 6.3640183,54.862943 7.5423132,51.240735 8.7206092,47.618533 41.724162,45.418793 44.808977,43.180149 47.893789,40.941498 60.186959,10.269457 63.999997,10.269457 Z"
+ id="path1307"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9da02;fill-opacity:1;fill-rule:nonzero;stroke:#ad7702;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <g
+ transform="matrix(0.37475031,0,0,0.37475031,-29.420604,-75.627288)"
+ id="g23"
+ style="fill:#ad7702;fill-opacity:0.5;stroke:#ad7702;stroke-opacity:1">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 143.756,326.774 c 0.538,-0.09 13.953,6.991 22.97,9.438 16.079,4.109 30.756,16.476 37.85,23.58 0.526,0.608 6.093,-4.168 11.919,-3.824 7.958,0.482 32.582,7.406 35.872,2.691 1.995,-2.768 1.852,-6.164 4.341,-7.555 1.34,-0.375 -4.981,-11.936 1.737,-15.64 4.79,-2.394 8.849,11.009 10.079,12.511 0.551,0.672 3.474,0.836 3.128,-0.695 -0.375,-1.663 -5.103,-14.524 0.695,-16.682 9.417,-3.729 7.748,16.456 7.993,17.03 0.521,1.222 32.797,2.164 34.754,16.682 1.132,7.99 -25.858,18.317 -28.498,20.157 -2.639,1.84 -2.419,4.783 -1.39,6.604 1.183,1.975 9.046,8.641 7.994,11.816 -0.723,1.834 -15.398,-4.888 -16.335,-3.475 -2.137,2.699 10.683,9.455 6.256,14.249 -1.755,1.148 -21.947,-8.454 -21.896,-8.341 -0.542,0.206 -28.532,5.113 -50.046,-1.391 -0.758,-0.214 -13.808,12.606 -15.292,12.165 -2.029,-0.744 2.991,-11.15 2.433,-13.207 -0.912,-1.146 -9.251,4.653 -9.731,1.738 -0.574,-3.831 7.318,-8.235 6.951,-10.774 -2.035,-14.424 0.909,-22.847 5.908,-29.888 1.667,-2.592 -19.592,-18.646 -34.983,-24.982 -15.39,-6.336 -23.624,-11.706 -22.709,-12.207 z"
+ transform="translate(4.86564,17.0296)"
+ id="path14"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:1.00000003pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 286.934,392.031 c -0.169,-0.59 10.503,-7.045 12.048,-5.561 2.781,1.008 -11.95,6.31 -12.048,5.561 z"
+ id="path7"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 292.031,397.901 c -0.94,-0.568 6.389,-9.114 8.187,-8.187 2.625,2.608 -8.31,8.39 -8.187,8.187 z"
+ id="path8-3"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 320.916,358.358 c -0.891,-0.737 -7.878,10.287 -6.333,11.431 0.929,0.695 6.731,-11.038 6.333,-11.431 z"
+ id="path13"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <ellipse
+ cx="288.86475"
+ cy="374.58655"
+ rx="3.012037"
+ ry="3.398196"
+ transform="matrix(0.9253,0,0,0.933788,22.0283,24.352)"
+ id="ellipse17"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 320.916,358.358 c -0.441,-0.512 -2.781,11.368 -1.699,11.894 0.929,0.695 2.547,-11.276 1.699,-11.894 z"
+ transform="translate(-8.0321,-1.54463)"
+ id="path18"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 321.366,357.908 c -2.771,1.959 1.521,13.045 8.58,6.572 -5.546,0.163 -7.396,-1.461 -8.58,-6.572 z"
+ transform="translate(-38.3069,14.983)"
+ id="path21"
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ style="fill:#ad7702;fill-opacity:0.5;stroke:#ad7702;stroke-opacity:1"
+ id="g889"
+ transform="matrix(0.37475031,0,0,0.37475031,-29.420604,-75.627288)">
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:1.00000003pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path875"
+ transform="translate(4.86564,17.0296)"
+ d="m 143.756,326.774 c 0.538,-0.09 13.953,6.991 22.97,9.438 16.079,4.109 30.756,16.476 37.85,23.58 0.526,0.608 6.093,-4.168 11.919,-3.824 7.958,0.482 32.582,7.406 35.872,2.691 1.995,-2.768 1.852,-6.164 4.341,-7.555 1.34,-0.375 -4.981,-11.936 1.737,-15.64 4.79,-2.394 8.849,11.009 10.079,12.511 0.551,0.672 3.474,0.836 3.128,-0.695 -0.375,-1.663 -5.103,-14.524 0.695,-16.682 9.417,-3.729 7.748,16.456 7.993,17.03 0.521,1.222 32.797,2.164 34.754,16.682 1.132,7.99 -25.858,18.317 -28.498,20.157 -2.639,1.84 -2.419,4.783 -1.39,6.604 1.183,1.975 9.046,8.641 7.994,11.816 -0.723,1.834 -15.398,-4.888 -16.335,-3.475 -2.137,2.699 10.683,9.455 6.256,14.249 -1.755,1.148 -21.947,-8.454 -21.896,-8.341 -0.542,0.206 -28.532,5.113 -50.046,-1.391 -0.758,-0.214 -13.808,12.606 -15.292,12.165 -2.029,-0.744 2.991,-11.15 2.433,-13.207 -0.912,-1.146 -9.251,4.653 -9.731,1.738 -0.574,-3.831 7.318,-8.235 6.951,-10.774 -2.035,-14.424 0.909,-22.847 5.908,-29.888 1.667,-2.592 -19.592,-18.646 -34.983,-24.982 -15.39,-6.336 -23.624,-11.706 -22.709,-12.207 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path877"
+ d="m 286.934,392.031 c -0.169,-0.59 10.503,-7.045 12.048,-5.561 2.781,1.008 -11.95,6.31 -12.048,5.561 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path879"
+ d="m 292.031,397.901 c -0.94,-0.568 6.389,-9.114 8.187,-8.187 2.625,2.608 -8.31,8.39 -8.187,8.187 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path881"
+ d="m 320.916,358.358 c -0.891,-0.737 -7.878,10.287 -6.333,11.431 0.929,0.695 6.731,-11.038 6.333,-11.431 z"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="ellipse883"
+ transform="matrix(0.9253,0,0,0.933788,22.0283,24.352)"
+ ry="3.398196"
+ rx="3.012037"
+ cy="374.58655"
+ cx="288.86475" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path885"
+ transform="translate(-8.0321,-1.54463)"
+ d="m 320.916,358.358 c -0.441,-0.512 -2.781,11.368 -1.699,11.894 0.929,0.695 2.547,-11.276 1.699,-11.894 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path887"
+ transform="translate(-38.3069,14.983)"
+ d="m 321.366,357.908 c -2.771,1.959 1.521,13.045 8.58,6.572 -5.546,0.163 -7.396,-1.461 -8.58,-6.572 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="fill:#000000;fill-opacity:0.5;stroke:none"
+ id="g873"
+ transform="matrix(0.37475031,0,0,0.37475031,-14.024803,14.041819)">
+ <path
+ style="fill:#020202;fill-opacity:1;fill-rule:evenodd;stroke:#000002;stroke-width:1.00000003pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path859"
+ transform="translate(4.86564,17.0296)"
+ d="m 143.756,326.774 c 0.538,-0.09 13.953,6.991 22.97,9.438 16.079,4.109 30.756,16.476 37.85,23.58 0.526,0.608 6.093,-4.168 11.919,-3.824 7.958,0.482 32.582,7.406 35.872,2.691 1.995,-2.768 1.852,-6.164 4.341,-7.555 1.34,-0.375 -4.981,-11.936 1.737,-15.64 4.79,-2.394 8.849,11.009 10.079,12.511 0.551,0.672 3.474,0.836 3.128,-0.695 -0.375,-1.663 -5.103,-14.524 0.695,-16.682 9.417,-3.729 7.748,16.456 7.993,17.03 0.521,1.222 32.797,2.164 34.754,16.682 1.132,7.99 -25.858,18.317 -28.498,20.157 -2.639,1.84 -2.419,4.783 -1.39,6.604 1.183,1.975 9.046,8.641 7.994,11.816 -0.723,1.834 -15.398,-4.888 -16.335,-3.475 -2.137,2.699 10.683,9.455 6.256,14.249 -1.755,1.148 -21.947,-8.454 -21.896,-8.341 -0.542,0.206 -28.532,5.113 -50.046,-1.391 -0.758,-0.214 -13.808,12.606 -15.292,12.165 -2.029,-0.744 2.991,-11.15 2.433,-13.207 -0.912,-1.146 -9.251,4.653 -9.731,1.738 -0.574,-3.831 7.318,-8.235 6.951,-10.774 -2.035,-14.424 0.909,-22.847 5.908,-29.888 1.667,-2.592 -19.592,-18.646 -34.983,-24.982 -15.39,-6.336 -23.624,-11.706 -22.709,-12.207 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path861"
+ d="m 286.934,392.031 c -0.169,-0.59 10.503,-7.045 12.048,-5.561 2.781,1.008 -11.95,6.31 -12.048,5.561 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path863"
+ d="m 292.031,397.901 c -0.94,-0.568 6.389,-9.114 8.187,-8.187 2.625,2.608 -8.31,8.39 -8.187,8.187 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#020202;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path865"
+ d="m 320.916,358.358 c -0.891,-0.737 -7.878,10.287 -6.333,11.431 0.929,0.695 6.731,-11.038 6.333,-11.431 z"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="ellipse867"
+ transform="matrix(0.9253,0,0,0.933788,22.0283,24.352)"
+ ry="3.398196"
+ rx="3.012037"
+ cy="374.58655"
+ cx="288.86475" />
+ <path
+ style="fill:#020202;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path869"
+ transform="translate(-8.0321,-1.54463)"
+ d="m 320.916,358.358 c -0.441,-0.512 -2.781,11.368 -1.699,11.894 0.929,0.695 2.547,-11.276 1.699,-11.894 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path871"
+ transform="translate(-38.3069,14.983)"
+ d="m 321.366,357.908 c -2.771,1.959 1.521,13.045 8.58,6.572 -5.546,0.163 -7.396,-1.461 -8.58,-6.572 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ d="m 170.00371,58.195114 c 0.52669,0 2.22472,4.455409 2.65082,4.780597 0.4261,0.325196 4.98482,0.644718 5.14757,1.170878 0.16276,0.526161 -3.34652,3.599285 -3.50927,4.125447 -0.16276,0.526162 0.95665,5.17905 0.53055,5.504239 -0.4261,0.325195 -4.29298,-2.23093 -4.81967,-2.23093 -0.52668,0 -4.39357,2.556113 -4.81967,2.23093 -0.4261,-0.325197 0.69331,-4.978077 0.53056,-5.504239 -0.16276,-0.526162 -3.67203,-3.599289 -3.50928,-4.125447 0.16276,-0.52616 4.72148,-0.845694 5.14757,-1.170878 0.4261,-0.325188 2.12414,-4.780597 2.65082,-4.780597 z"
+ id="path1307-9"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9da02;fill-opacity:1;fill-rule:nonzero;stroke:#ad7702;stroke-width:0.39021698;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 170,6.4998158 c 1.38339,0 5.84342,11.1316432 6.96261,11.9441122 1.11919,0.81249 13.09307,1.610799 13.52056,2.925389 0.4275,1.314591 -8.78994,8.992659 -9.21743,10.307251 -0.42749,1.314592 2.51274,12.939634 1.39356,13.752105 -1.1192,0.812486 -11.27591,-5.573882 -12.6593,-5.573882 -1.3834,0 -11.54011,6.386338 -12.6593,5.573882 -1.11919,-0.812491 1.82104,-12.437513 1.39355,-13.752105 -0.42749,-1.314592 -9.64492,-8.992668 -9.21743,-10.307251 0.4275,-1.31459 12.40138,-2.11293 13.52056,-2.925389 C 164.15657,17.631459 168.61661,6.4998158 170,6.4998158 Z"
+ id="path1307-3"
+ style="display:inline;overflow:visible;visibility:visible;fill:#ad7702;fill-opacity:1;fill-rule:nonzero;stroke:#ad7702;stroke-width:0.99962765;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 170,5.4998138 c 1.38339,0 5.84342,11.1316452 6.96261,11.9441142 1.11919,0.81249 13.09307,1.610799 13.52056,2.925389 0.4275,1.314591 -8.78994,8.992659 -9.21743,10.307251 -0.42749,1.314592 2.51274,12.939634 1.39356,13.752105 -1.1192,0.812486 -11.27591,-5.573882 -12.6593,-5.573882 -1.3834,0 -11.54011,6.386338 -12.6593,5.573882 -1.11919,-0.812491 1.82104,-12.437513 1.39355,-13.752105 -0.42749,-1.314592 -9.64492,-8.992668 -9.21743,-10.307251 0.4275,-1.31459 12.40138,-2.11293 13.52056,-2.925389 C 164.15657,16.631459 168.61661,5.4998138 170,5.4998138 Z"
+ id="path1307-1"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f9da02;fill-opacity:1;fill-rule:nonzero;stroke:#ad7702;stroke-width:0.99962765;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" />
+ <g
+ style="display:inline;fill:#ad7702;fill-opacity:0.5;stroke:#ad7702;stroke-width:4;stroke-opacity:1;enable-background:new"
+ id="g889-2"
+ transform="matrix(0.13836934,0,0,0.13836934,135.53701,-26.02604)">
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:1.00000003pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path875-7"
+ transform="translate(4.86564,17.0296)"
+ d="m 143.756,326.774 c 0.538,-0.09 13.953,6.991 22.97,9.438 16.079,4.109 30.756,16.476 37.85,23.58 0.526,0.608 6.093,-4.168 11.919,-3.824 7.958,0.482 32.582,7.406 35.872,2.691 1.995,-2.768 1.852,-6.164 4.341,-7.555 1.34,-0.375 -4.981,-11.936 1.737,-15.64 4.79,-2.394 8.849,11.009 10.079,12.511 0.551,0.672 3.474,0.836 3.128,-0.695 -0.375,-1.663 -5.103,-14.524 0.695,-16.682 9.417,-3.729 7.748,16.456 7.993,17.03 0.521,1.222 32.797,2.164 34.754,16.682 1.132,7.99 -25.858,18.317 -28.498,20.157 -2.639,1.84 -2.419,4.783 -1.39,6.604 1.183,1.975 9.046,8.641 7.994,11.816 -0.723,1.834 -15.398,-4.888 -16.335,-3.475 -2.137,2.699 10.683,9.455 6.256,14.249 -1.755,1.148 -21.947,-8.454 -21.896,-8.341 -0.542,0.206 -28.532,5.113 -50.046,-1.391 -0.758,-0.214 -13.808,12.606 -15.292,12.165 -2.029,-0.744 2.991,-11.15 2.433,-13.207 -0.912,-1.146 -9.251,4.653 -9.731,1.738 -0.574,-3.831 7.318,-8.235 6.951,-10.774 -2.035,-14.424 0.909,-22.847 5.908,-29.888 1.667,-2.592 -19.592,-18.646 -34.983,-24.982 -15.39,-6.336 -23.624,-11.706 -22.709,-12.207 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path877-0"
+ d="m 286.934,392.031 c -0.169,-0.59 10.503,-7.045 12.048,-5.561 2.781,1.008 -11.95,6.31 -12.048,5.561 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path879-9"
+ d="m 292.031,397.901 c -0.94,-0.568 6.389,-9.114 8.187,-8.187 2.625,2.608 -8.31,8.39 -8.187,8.187 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path881-3"
+ d="m 320.916,358.358 c -0.891,-0.737 -7.878,10.287 -6.333,11.431 0.929,0.695 6.731,-11.038 6.333,-11.431 z"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="ellipse883-6"
+ transform="matrix(0.9253,0,0,0.933788,22.0283,24.352)"
+ ry="3.398196"
+ rx="3.012037"
+ cy="374.58655"
+ cx="288.86475" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path885-0"
+ transform="translate(-8.0321,-1.54463)"
+ d="m 320.916,358.358 c -0.441,-0.512 -2.781,11.368 -1.699,11.894 0.929,0.695 2.547,-11.276 1.699,-11.894 z"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ad7702;fill-opacity:1;fill-rule:evenodd;stroke:#ad7702;stroke-width:0.60000001pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path887-6"
+ transform="translate(-38.3069,14.983)"
+ d="m 321.366,357.908 c -2.771,1.959 1.521,13.045 8.58,6.572 -5.546,0.163 -7.396,-1.461 -8.58,-6.572 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/data/im.gzr.MunchMate.desktop b/data/im.gzr.MunchMate.desktop
new file mode 100644
index 0000000..095a0f8
--- /dev/null
+++ b/data/im.gzr.MunchMate.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=MunchMate
+TryExec=munchmate
+Exec=munchmate %U
+Icon=im.gzr.MunchMate
+Terminal=false
+Type=Application
+StartupNotify=false
diff --git a/data/im.gzr.MunchMate.gresource.xml b/data/im.gzr.MunchMate.gresource.xml
new file mode 100644
index 0000000..49c3f7c
--- /dev/null
+++ b/data/im.gzr.MunchMate.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/im/gzr/munchmate">
+ <file alias="mm-window.ui" preprocess="xml-stripblanks">ui/mm-window.ui</file>
+ <file compressed="true">style.css</file>
+ </gresource>
+</gresources>
diff --git a/data/im.gzr.MunchMate.gschema.xml b/data/im.gzr.MunchMate.gschema.xml
new file mode 100644
index 0000000..5eb38f2
--- /dev/null
+++ b/data/im.gzr.MunchMate.gschema.xml
@@ -0,0 +1,4 @@
+<schemalist gettext-domain="flipr">
+ <schema id="im.gzr.MunchMate" path="/im/gzr/munchmate/">
+ </schema>
+</schemalist>
diff --git a/data/im.gzr.MunchMate.metainfo.xml b/data/im.gzr.MunchMate.metainfo.xml
new file mode 100644
index 0000000..7d1a654
--- /dev/null
+++ b/data/im.gzr.MunchMate.metainfo.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+ <id>im.gzr.MunchMate</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-3.0+</project_license>
+ <name>MunchMate</name>
+ <developer_name>robertgzr</developer_name>
+ <launchable type="desktop-id">im.gzr.MunchMate.desktop</launchable>
+ <supports>
+ <control>touch</control>
+ <control>keyboard</control>
+ <control>pointing</control>
+ </supports>
+</component>
diff --git a/data/im.gzr.MunchMate.service.in b/data/im.gzr.MunchMate.service.in
new file mode 100644
index 0000000..08b3766
--- /dev/null
+++ b/data/im.gzr.MunchMate.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=im.gzr.MunchMate
+Exec=@bindir@/munchmate --gapplication-service
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..dea46c4
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,54 @@
+subdir('ui')
+
+resource_files = files('im.gzr.MunchMate.gresource.xml')
+resources = gnome.compile_resources(
+ 'im.gzr.MunchMate',
+ resource_files,
+ source_dir: meson.current_build_dir(),
+ dependencies: custom_target(
+ 'blueprints',
+ input: blueprints,
+ output: '.',
+ command: [ find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@' ],
+ ),
+ c_name: 'resources',
+)
+
+install_subdir('icons/',
+ install_dir: join_paths(get_option('datadir'), 'icons/hicolor'))
+
+desktop_file = files('im.gzr.MunchMate.desktop')
+install_data(
+ desktop_file,
+ install_dir: join_paths(get_option('datadir'), 'applications'),
+)
+
+metainfo_file = files('im.gzr.MunchMate.metainfo.xml')
+install_data(
+ metainfo_file,
+ install_dir: join_paths(get_option('datadir'), 'metainfo'),
+)
+
+# Validating app data
+appstreamcli = find_program('appstreamcli', required: false)
+if appstreamcli.found()
+ test(
+ 'validate-appdata', appstreamcli,
+ args: [ 'validate', '--no-net', '--explain', metainfo_file ],
+ )
+endif
+
+schema_file = files('im.gzr.MunchMate.gschema.xml')
+install_data(
+ schema_file,
+ install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')
+)
+
+configure_file(
+ input: 'im.gzr.MunchMate.service.in',
+ output: 'im.gzr.MunchMate.service',
+ configuration: configuration_data({
+ 'bindir': join_paths(get_option('prefix'), get_option('bindir')),
+ }),
+ install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services')
+)
diff --git a/data/style.css b/data/style.css
new file mode 100644
index 0000000..55c4483
--- /dev/null
+++ b/data/style.css
@@ -0,0 +1,9 @@
+/*
+window {
+}
+
+@media (prefers-color-scheme: dark) {
+ window {
+ }
+}
+*/
diff --git a/data/ui/meson.build b/data/ui/meson.build
new file mode 100644
index 0000000..a492bb7
--- /dev/null
+++ b/data/ui/meson.build
@@ -0,0 +1,3 @@
+blueprints = files(
+ 'mm-window.blp',
+)
diff --git a/data/ui/mm-window.blp b/data/ui/mm-window.blp
new file mode 100644
index 0000000..f1b4147
--- /dev/null
+++ b/data/ui/mm-window.blp
@@ -0,0 +1,17 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $MunchMateWindow : Adw.ApplicationWindow {
+ title: "Example";
+ default-width: 400;
+ default-height: 350;
+
+ Adw.ToolbarView {
+ [top]
+ Adw.HeaderBar {}
+
+ Adw.StatusPage {
+ title: "Let's go";
+ }
+ }
+}
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..859892e
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,41 @@
+project(
+ 'munchmate',
+ ['vala', 'c'],
+ license: 'GPL-3.0+',
+ version: '0.0+dev',
+)
+
+app_id = 'im.gzr.MunchMate'
+if get_option('buildtype') == 'debug'
+ app_id += '.Devel'
+endif
+
+config = configuration_data({
+ 'APP_ID': '"@0@"'.format(app_id),
+ 'VERSION': '"@0@"'.format(meson.project_version()),
+ 'BUILD_TYPE': '"@0@"'.format(get_option('buildtype')),
+})
+configure_file(output: 'config.h', configuration: config)
+config_h_dir = include_directories('.')
+
+add_project_arguments(
+ ['-w'],
+ language: 'c'
+)
+
+glib_dep = dependency('glib-2.0')
+gio_dep = dependency('gio-2.0', version: '>=2.40')
+gtk_dep = dependency('gtk4')
+adw_dep = dependency('libadwaita-1')
+dex_dep = dependency('libdex-1')
+
+gnome = import('gnome')
+
+gnome.post_install(
+ glib_compile_schemas: true,
+ gtk_update_icon_cache: true,
+ update_desktop_database: true,
+)
+
+subdir('data')
+subdir('src')
diff --git a/src/config.vapi b/src/config.vapi
new file mode 100644
index 0000000..bd04675
--- /dev/null
+++ b/src/config.vapi
@@ -0,0 +1,7 @@
+[CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "config.h")]
+namespace Config {
+ public const string VERSION;
+ public const string APP_ID;
+ public const string BUILD_TYPE;
+}
+
diff --git a/src/main.vala b/src/main.vala
new file mode 100644
index 0000000..865765f
--- /dev/null
+++ b/src/main.vala
@@ -0,0 +1,8 @@
+
+static int main(string[] args) {
+ Dex.init();
+ Dex.ThreadPoolScheduler.get_default();
+
+ var app = new MunchMate.Application();
+ return app.run(args);
+}
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..9ded894
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,42 @@
+mm_vapi_sources = files(
+ 'config.vapi',
+)
+
+mm_vala_sources = files(
+ 'mm-application.vala',
+ 'mm-window.vala',
+ 'main.vala',
+)
+
+mm_sources = [
+ mm_vapi_sources,
+ mm_vala_sources,
+ resources,
+]
+
+mm_deps = [
+ glib_dep,
+ gio_dep,
+ gtk_dep,
+ adw_dep,
+ dex_dep,
+]
+
+mm_vala_args = [
+ '--vapidir', meson.current_source_dir(),
+ '--gresources', resource_files,
+]
+
+mm_c_args = [
+ '-DG_LOG_DOMAIN="@0@"'.format(app_id),
+]
+
+executable(
+ meson.project_name(),
+ mm_sources,
+ include_directories: config_h_dir,
+ dependencies: mm_deps,
+ vala_args: mm_vala_args,
+ c_args: mm_c_args,
+ install: true,
+)
diff --git a/src/mm-application.vala b/src/mm-application.vala
new file mode 100644
index 0000000..193f16b
--- /dev/null
+++ b/src/mm-application.vala
@@ -0,0 +1,50 @@
+namespace MunchMate {
+ public class Application : Adw.Application {
+ private Window win;
+
+ private static bool print_version = false;
+
+ private const GLib.OptionEntry[] options = {
+ { "version", 'V', OptionFlags.NONE, OptionArg.NONE, ref print_version, "Display version number", null },
+ { null } // terminator
+ };
+
+ private const GLib.ActionEntry[] action_entries = {
+ { "quit", on_quit_activate },
+ };
+
+ public override int handle_local_options(VariantDict _) {
+ if (print_version) {
+ print("%s version %s\n", Config.APP_ID, Config.VERSION);
+ return 0;
+ }
+ return -1;
+ }
+
+ public override void activate() {
+ win = new Window(this);
+ win.present();
+ }
+
+ public override void startup() {
+ base.startup();
+
+ set_accels_for_action("app.quit", { "q" });
+ }
+
+ public Application() {
+ // why doesnt service binding work in flatpak
+ Object(application_id: Config.APP_ID, flags: ApplicationFlags.NON_UNIQUE);
+
+ set_resource_base_path("/im/gzr/munchmate/");
+
+ add_main_option_entries(options);
+
+ add_action_entries(action_entries, this);
+ }
+
+ void on_quit_activate() {
+ quit();
+ }
+ }
+}
diff --git a/src/mm-window.vala b/src/mm-window.vala
new file mode 100644
index 0000000..f8b9761
--- /dev/null
+++ b/src/mm-window.vala
@@ -0,0 +1,12 @@
+namespace MunchMate {
+ [GtkTemplate (ui = "/im/gzr/munchmate/mm-window.ui")]
+ public class Window : Adw.ApplicationWindow {
+ public Window(Gtk.Application app) {
+ Object(application: app);
+
+ if (Config.BUILD_TYPE == "debug") {
+ add_css_class("devel");
+ }
+ }
+ }
+}
|