Exemple #1
0
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);
	}
}
Exemple #2
0
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;
}