void main_quit(GtkWidget *widget, struct Window *win_data) { #ifdef DETAIL g_debug("! Launch main_quit() with win_data = %p!", win_data); #endif // g_debug("Total window = %d", g_list_length(window_list)); if (g_list_length(window_list)==1) { #ifdef SAFEMODE // g_debug ("main_quit(): win_data==NULL, call gtk_main_quit()"); if (win_data==NULL) return quit_gtk(); #endif window_quit(win_data->window, NULL, win_data); } else { GString *all_process_list = g_string_new(NULL); GString *child_process_list; GList *win_list = window_list; struct Window *temp_win_data; gint i = 1; while (win_list) { temp_win_data = win_list->data; child_process_list = close_multi_tabs(temp_win_data, i); #ifdef SAFEMODE if (child_process_list) #endif g_string_append (all_process_list, child_process_list->str); g_string_free(child_process_list, TRUE); win_list = win_list->next; i++; } // g_debug("Got all_process_list =%s", all_process_list->str); #ifdef SAFEMODE if ((all_process_list==NULL) || (all_process_list->len==0) || (display_child_process_dialog (all_process_list, win_data, CONFIRM_TO_EXIT_WITH_CHILD_PROCESS))) #else if ((all_process_list->len==0) || (display_child_process_dialog (all_process_list, win_data, CONFIRM_TO_EXIT_WITH_CHILD_PROCESS))) #endif { force_to_quit = TRUE; // g_debug ("main_quit(): call gtk_main_quit()"); quit_gtk(); } g_string_free(all_process_list, TRUE); } }
int main(void) { bool ret = true; plist *cells = NULL; window *win = NULL; /* initialize random number generator */ srand(time(NULL)); /* initialize opengl window */ win = window_init("brownian tree", WINDOW_W, WINDOW_H, 32); if (win == NULL) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } else { win->refresh = update_screen; } /* initialize opengl stuff */ glPointSize(POINTSIZE); glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glfwSetWindowSizeCallback(win->enable2d); win->enable2d(WINDOW_W, WINDOW_H); /* initialize cells list */ cells = plist_init(particle_init()); for (int i = 0; i < FREE_CELLS_NUMBER; i++) { particle *pt = particle_init(); if (pt == NULL) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } pt->x = (GLfloat) randint((WINDOW_W - 1)); pt->y = (GLfloat) randint((WINDOW_H - 1)); if (!plist_push(cells, pt)) { fprintf(stderr, "FATAL: %s\n", strerror(errno)); ret = false; goto cleanup; } } /* initialize 2D grid */ for (int y = 0; y < WINDOW_H; y++) { for (int x = 0; x < WINDOW_W; x++) { grid[y][x] = CELL_EMPTY; } } /* initialize random freezed cells */ for (int i = 0; i < FREEZED_CELLS_NUMBER; i++) { int y = randint(WINDOW_H - 1); int x = (i * (WINDOW_W / FREEZED_CELLS_NUMBER)) + (FREEZED_CELLS_NUMBER / 2); grid[y][x] = CELL_FREEZED; } /* main loop */ do { win->clear(); win->refresh(win, &cells); move_cells(&cells); } while ( glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS && glfwGetWindowParam(GLFW_OPENED) ); goto cleanup; cleanup: /* free resources */ if (cells != NULL) plist_free(cells); if (win != NULL) { window_quit(); window_free(win); } /* exit error */ if (!ret) return EXIT_FAILURE; return EXIT_SUCCESS; }