/*
* File name: MdispGtk.cpp
* Location: See Matrox Example Launcher in the MIL Control Center
* 
*/
//
// Copyright (C) Matrox Electronic Systems Ltd., 1992-2020.
// All Rights Reserved
#include <mil.h>
#include <gtk/gtk.h>
#include <X11/Xlib.h>
#include <stdlib.h>
#include "mdispgtkapp.h"
#include "mainframe.h"


static void activate (GApplication *app, gpointer user_data)
   {
   GtkWidget *win;
   MdispGtkApp* dispApp = (MdispGtkApp *) user_data;
   dispApp->InitWindow();
   gtk_window_present (GTK_WINDOW (dispApp->GetMainFrame()->MainWindow()));
   }

static void shutdown (GApplication *app, gpointer user_data)
   {
   MdispGtkApp* dispApp = (MdispGtkApp *) user_data;
   if(dispApp)
      dispApp->GetMainFrame()->Quit(true);
   }

static void startup (GApplication *app, gpointer user_data)
   {
   GtkBuilder *builder;
   GMenuModel *menubar;
   
   builder = gtk_builder_new ();
   gtk_builder_add_from_resource (builder, "/images/menus.ui", NULL);
   menubar = (GMenuModel *)gtk_builder_get_object (builder, "menubar");
   gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
   g_object_unref (builder);
   }

int main(int argc, char *argv[])
   {
   GtkApplication *gtkApp;

   // Force X11 backend
   setenv("GDK_BACKEND","x11", 1);

   // init Xlib thread
   XInitThreads();

   // init Gtk
   gtk_init (NULL, NULL);

   gtkApp = gtk_application_new ("com.matrox.MdispGtk", G_APPLICATION_FLAGS_NONE);

   MdispGtkApp dispApp(gtkApp);
   //  g_action_map_add_action_entries (G_ACTION_MAP (app), app_entries, G_N_ELEMENTS (app_entries), app);

   g_signal_connect (gtkApp, "startup", G_CALLBACK (startup), &dispApp);
   g_signal_connect (gtkApp, "activate", G_CALLBACK (activate), &dispApp);
   g_signal_connect (gtkApp, "shutdown", G_CALLBACK (shutdown), &dispApp);
   
   g_application_run (G_APPLICATION (gtkApp), 0, NULL);

   return 0;
   }