diff --git a/glade/about.glade b/glade/about.glade new file mode 100644 index 0000000..f3d092f --- /dev/null +++ b/glade/about.glade @@ -0,0 +1,43 @@ + + + + + + False + dialog + GDS-Render Tool + Tool for rendering GDS(II) layout files into LaTeX/TikZ code or directly into a PDF file + https://git.shimatta.de/mhu/gds-render + Git Repository + Mario Hüttel <mario.huettel@gmx.net> + applications-graphics + gpl-2-0-only + + + + + + False + vertical + 2 + + + False + end + + + + + + False + False + 0 + + + + + + + + + diff --git a/glade/main.glade b/glade/main.glade index 3edb413..3708fe4 100644 --- a/glade/main.glade +++ b/glade/main.glade @@ -4,7 +4,6 @@ 250 - True False diff --git a/glade/resources.xml b/glade/resources.xml index 02b55cc..e33bed3 100644 --- a/glade/resources.xml +++ b/glade/resources.xml @@ -2,6 +2,7 @@ main.glade + about.glade layer-widget.glade dialog.glade diff --git a/main.c b/main.c index 4ca6839..f30c837 100644 --- a/main.c +++ b/main.c @@ -21,22 +21,78 @@ #include #include "main-window.h" +struct application_data { + GtkApplication *app; + GtkWindow *main_window; +}; + + +static void app_quit(GSimpleAction *action, GVariant *parameter, gpointer user_data) +{ + struct application_data *appdata = (struct application_data *)user_data; + gtk_widget_destroy(GTK_WIDGET(appdata->main_window)); +} + +static void app_about(GSimpleAction *action, GVariant *parameter, gpointer user_data) +{ + GtkBuilder *builder; + GtkDialog *dialog; + struct application_data *appdata = (struct application_data *)user_data; + + builder = gtk_builder_new_from_resource("/about.glade"); + dialog = GTK_DIALOG(gtk_builder_get_object(builder, "about-dialog")); + gtk_window_set_transient_for(GTK_WINDOW(dialog), appdata->main_window); + gtk_dialog_run(dialog); + + gtk_widget_destroy(dialog); + g_object_unref(builder); +} + +const GActionEntry app_actions[] = { + { "quit", app_quit }, + { "about", app_about } +}; static void gapp_activate(GApplication *app, gpointer user_data) { GtkWindow *main_window; + struct application_data *appdata = (struct application_data *)user_data; main_window = create_main_window(); + appdata->main_window = main_window; gtk_application_add_window(GTK_APPLICATION(app), main_window); + gtk_widget_show(GTK_WIDGET(main_window)); } int main(int argc, char **argv) { GtkApplication *gapp; int app_status; + struct application_data appdata; + GMenu *menu; + GMenu *m_quit; + GMenu *m_about; gapp = gtk_application_new("de.shimatta.gds-render", G_APPLICATION_FLAGS_NONE); - g_signal_connect (gapp, "activate", G_CALLBACK(gapp_activate), NULL); + g_application_register(G_APPLICATION(gapp), NULL, NULL); + //g_action_map_add_action_entries(G_ACTION_MAP(gapp), app_actions, G_N_ELEMENTS(app_actions), &appdata); + g_signal_connect (gapp, "activate", G_CALLBACK(gapp_activate), &appdata); + + + + menu = g_menu_new(); + m_quit = g_menu_new(); + m_about = g_menu_new(); + g_menu_append(m_quit, "Quit", "app.quit"); + g_menu_append(m_about, "About", "app.about"); + g_menu_append_section(menu, NULL, G_MENU_MODEL(m_about)); + g_menu_append_section(menu, NULL, G_MENU_MODEL(m_quit)); + g_action_map_add_action_entries(G_ACTION_MAP(gapp), app_actions, G_N_ELEMENTS(app_actions), &appdata); + gtk_application_set_app_menu(GTK_APPLICATION(gapp), G_MENU_MODEL(menu)); + + g_object_unref(m_quit); + g_object_unref(m_about); + g_object_unref(menu); app_status = g_application_run (G_APPLICATION(gapp), argc, argv);