+static int
+mainwin_configure_event(GtkWindow *window, GdkEvent *event, gpointer data)
+{
+ cfg->win_width = event->configure.width;
+ cfg->win_height = event->configure.height;
+
+ /*
+ * Important:
+ * Returning false allows event to propagate to children. If not, they
+ * will not be resized when we resize the main window.
+ */
+ return FALSE;
+}
+
+static void
+hpaned_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
+{
+ GtkWidget *paned = data;
+
+ cfg->hpane_pos = gtk_paned_get_position(GTK_PANED(paned));
+}
+
+static void
+vpaned_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
+{
+ GtkWidget *paned = data;
+
+ cfg->vpane_pos = gtk_paned_get_position(GTK_PANED(paned));
+}
+
+static void
+main_paned_notify_event(GtkWindow *window, GdkEvent *event, gpointer data)
+{
+ GtkWidget *paned = data;
+
+ cfg->main_pane_pos = gtk_paned_get_position(GTK_PANED(paned));
+}
+
+void
+emugtk_restart_gui(void)
+{
+ emugtk_stop_running();
+
+ gtk_widget_destroy(mainwin);
+
+ restart_gui = true;
+}
+
+void
+emugtk_quit_gui(void)
+{
+ gtk_main_quit();
+
+ restart_gui = false;
+}
+
+static GtkWidget *
+emugtk_create_memory_paned(void)
+{
+ GtkWidget *vpaned;
+ GtkWidget *scrollwin;
+
+ /* Create vpaned (memory windows) only if necessary. */
+ if (cfg->view_int_memory || cfg->view_ext_memory) {
+ vpaned = gtk_vpaned_new();
+ gtk_paned_set_position(GTK_PANED(vpaned), cfg->vpane_pos);
+ g_signal_connect(G_OBJECT(vpaned), "notify::position",
+ G_CALLBACK(vpaned_notify_event), vpaned);
+
+ /* Internal memory dump frame. */
+ if (cfg->view_int_memory) {
+ scrollwin = memwin_init("Internal memory (IRAM)",
+ INT_MEM_ID);
+ gtk_paned_pack1(GTK_PANED(vpaned), scrollwin,
+ FALSE, FALSE);
+ }
+
+ /* External memory dump frame. */
+ if (cfg->view_ext_memory) {
+ scrollwin = memwin_init("External memory (XRAM)",
+ EXT_MEM_ID);
+ gtk_paned_pack2(GTK_PANED(vpaned), scrollwin,
+ TRUE, FALSE);
+ }
+
+ return vpaned;
+ } else
+ return NULL;
+}
+
+/*
+ * mainwin
+ * +---------------------------------------------------------------------+
+ * | |
+ * | vbox |
+ * | +---------------------------------------------------------------+ |
+ * | | | |
+ * | | menu_bar | |
+ * | | +----------------------+ | |
+ * | | | File View Help | | |
+ * | | +----------------------+ | |
+ * | | | |
+ * | |---------------------------------------------------------------| |
+ * | | | |
+ * | | buttons_bar | |
+ * | | +-----------------------+ | |
+ * | | | RST RUN STOP STEP | | |
+ * | | +-----------------------+ | |
+ * | | | |
+ * | |---------------------------------------------------------------| |
+ * | | | |
+ * | | main_paned | |
+ * | | +---------------------------------------------------------+ | |
+ * | | | | | |
+ * | | | hpaned | | |
+ * | | | +---------------------------------------------------+ | | |
+ * | | | | | | | | |
+ * | | | | scrollwin | scrollwin | | | |
+ * | | | | +------------------+ * +--------------------+ | | | |
+ * | | | | | REGISTERS window | * | Disassembly window | | | | |
+ * | | | | +------------------+ | +--------------------+ | | | |
+ * | | | | | | | | |
+ * | | | +---------------------------------------------------+ | | |
+ * | | | | | |
+ * | | |--------------------------***----------------------------- | |
+ * | | | | | |
+ * | | | vpaned | | |
+ * | | | +---------------------------------------------------+ | | |
+ * | | | | | | | |
+ * | | | | scrollwin | | | |
+ * | | | | +---------------------------------------------+ | | | |
+ * | | | | | Internal memory window | | | | |
+ * | | | | +---------------------------------------------+ | | | |
+ * | | | | | | | |
+ * | | | +-----------------------***-------------------------| | | |
+ * | | | | | | | |
+ * | | | | scrollwin | | | |
+ * | | | | +---------------------------------------------+ | | | |
+ * | | | | | External memory window | | | | |
+ * | | | | +---------------------------------------------+ | | | |
+ * | | | | | | | |
+ * | | | +---------------------------------------------------+ | | |
+ * | | | | | |
+ * | | +---------------------------------------------------------+ | |
+ * | | | |
+ * | | | |
+ * | +---------------------------------------------------------------+ |
+ * | |
+ * | |
+ * +---------------------------------------------------------------------+
+ */