Exemplo n.º 1
0
void
anjuta_save_prompt_add_item (AnjutaSavePrompt *save_prompt,
							 const gchar *item_name,
							 const gchar *item_detail,
							 gpointer item,
							 AnjutaSavePromptSaveFunc item_save_func,
							 gpointer user_data)
{
	GtkTreeModel *model;
	GtkTreeIter iter;
	gchar *label;
	const gchar *markup;
	gint items_count;
	
	g_return_if_fail (ANJUTA_IS_SAVE_PROMPT (save_prompt));
	g_return_if_fail (item_name != NULL);
	g_return_if_fail (item_save_func != NULL);
	
	if (item_detail)
		label = g_strdup_printf ("<b>%s</b>\n%s", item_name, item_detail);
	else
		label = g_strdup (item_name);
	
	model = gtk_tree_view_get_model (GTK_TREE_VIEW (save_prompt->priv->treeview));
	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
	gtk_list_store_set (GTK_LIST_STORE (model),
						&iter,
						COL_SAVE_ENABLE, TRUE,
						COL_LABEL, label,
						COL_ITEM, item,
						COL_ITEM_SAVE_FUNC, item_save_func,
						COL_ITEM_SAVE_FUNC_DATA, user_data,
						-1);
	g_free (label);
	
	items_count = anjuta_save_prompt_get_items_count (save_prompt);
	
	if (items_count > 1)
	{
		label = g_strdup_printf( 
			ngettext ("<b>There is %d item with unsaved changes. Save changes before closing?</b>",
					  "<b>There are %d items with unsaved changes. Save changes before closing?</b>",
					  items_count), items_count);
	}
	else
	{
		label = g_strdup_printf("<b>%s</b>", 
			_("There is an item with unsaved changes. Save changes before closing?"));
	}

	markup = label;
	gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (save_prompt), markup);
	g_free (label);
}
Exemplo n.º 2
0
static gboolean
on_anjuta_delete_event (AnjutaApp *app, GdkEvent *event, gpointer data)
{
	AnjutaPluginManager *plugin_manager;
	AnjutaProfileManager *profile_manager;
	AnjutaProfile *current_profile;
	AnjutaSavePrompt *save_prompt;
	gchar *remembered_plugins;

	DEBUG_PRINT ("%s", "AnjutaApp delete event");

	plugin_manager = anjuta_shell_get_plugin_manager (ANJUTA_SHELL (app), NULL);
	profile_manager = anjuta_shell_get_profile_manager (ANJUTA_SHELL (app), NULL);

	/* Save remembered plugins */
	remembered_plugins =
		anjuta_plugin_manager_get_remembered_plugins (plugin_manager);
	g_settings_set_string (app->settings,
	                       ANJUTA_REMEMBERED_PLUGINS,
	                       remembered_plugins);
	g_free (remembered_plugins);

	/* Check for unsaved data */
	save_prompt = anjuta_save_prompt_new (GTK_WINDOW (app));
	anjuta_shell_save_prompt (ANJUTA_SHELL (app), save_prompt, NULL);

	if (anjuta_save_prompt_get_items_count (save_prompt) > 0)
	{
		switch (gtk_dialog_run (GTK_DIALOG (save_prompt)))
		{
			case GTK_RESPONSE_DELETE_EVENT:
			case ANJUTA_SAVE_PROMPT_RESPONSE_CANCEL:
				gtk_widget_destroy (GTK_WIDGET (save_prompt));
				/* Do not exit now */
				return TRUE;
			case ANJUTA_SAVE_PROMPT_RESPONSE_DISCARD:
			case ANJUTA_SAVE_PROMPT_RESPONSE_SAVE_CLOSE:
				/* exit now */
				break;
		}
	}
	/* Wait for files to be really saved (asyncronous operation) */
	if (app->save_count > 0)
	{
		g_message ("Waiting for %d file(s) to be saved!", app->save_count);
		while (app->save_count > 0)
		{
			g_main_context_iteration (NULL, TRUE);
		}
	}

	/* If current active profile is "user", save current session as
	 * default session
	 */
	current_profile = anjuta_profile_manager_get_current (profile_manager);
	if (strcmp (anjuta_profile_get_name (current_profile), "user") == 0)
	{
		gchar *session_dir;
		session_dir = USER_SESSION_PATH_NEW;
		anjuta_shell_session_save (ANJUTA_SHELL (app), session_dir, NULL);
		g_free (session_dir);
	}

	anjuta_shell_notify_exit (ANJUTA_SHELL (app), NULL);

	gtk_widget_destroy (GTK_WIDGET (save_prompt));

	/* Shutdown */
	if (g_object_get_data (G_OBJECT (app), "__proper_shutdown"))
	{
		gtk_widget_hide (GTK_WIDGET (app));
		anjuta_plugin_manager_unload_all_plugins
			(anjuta_shell_get_plugin_manager (ANJUTA_SHELL (app), NULL));
	}
	return FALSE;
}