static void begin_print (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) { GdictPrintData *data = user_data; gchar *contents; gdouble height; height = gtk_print_context_get_height (context) - HEADER_HEIGHT (10) - HEADER_GAP (3); contents = gdict_defbox_get_text (data->defbox, NULL); data->lines = g_strsplit (contents, "\n", 0); data->n_lines = g_strv_length (data->lines); data->lines_per_page = floor (height / data->font_size); data->n_pages = (data->n_lines - 1) / data->lines_per_page + 1; gtk_print_operation_set_n_pages (operation, data->n_pages); g_free (contents); }
static void save_cb (GtkWidget *widget, GdictApplet *applet) { GdictAppletPrivate *priv = applet->priv; GtkWidget *dialog; if (!priv->defbox) return; dialog = gtk_file_chooser_dialog_new (_("Save a Copy"), GTK_WINDOW (priv->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); /* default to user's $HOME */ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_get_home_dir ()); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), _("Untitled document")); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { gchar *filename; gchar *text; gsize len; GError *write_error = NULL; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); text = gdict_defbox_get_text (GDICT_DEFBOX (priv->defbox), &len); g_file_set_contents (filename, text, len, &write_error); if (write_error) { gchar *message; message = g_strdup_printf (_("Error while writing to '%s'"), filename); gdict_show_error_dialog (GTK_WINDOW (priv->window), message, write_error->message); g_error_free (write_error); g_free (message); } g_free (text); g_free (filename); } gtk_widget_destroy (dialog); }