summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/config.vapi7
-rw-r--r--src/main.vala8
-rw-r--r--src/meson.build42
-rw-r--r--src/mm-application.vala50
-rw-r--r--src/mm-window.vala12
5 files changed, 119 insertions, 0 deletions
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");
+			}
+		}
+	}
+}