static void buffer_end_user_action (GtkTextBuffer *buffer, GtrContextPanel *panel) { GtkTextIter start, end; gchar *text; GtrContextPanelPrivate *priv; GtrPo *po; GtrPoState po_state; priv = gtr_context_panel_get_instance_private(panel); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->context)); gtk_text_buffer_get_bounds (buffer, &start, &end); text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); gtr_msg_set_comment (priv->current_msg, text); g_free (text); /* Update the po state if needed after adding a comment */ po = gtr_tab_get_po (priv->tab); po_state = gtr_po_get_state (po); if (po_state != GTR_PO_STATE_MODIFIED) gtr_po_set_state (po, GTR_PO_STATE_MODIFIED); }
/* * A callback for Save */ void gtr_save_current_file_dialog (GtkWidget * widget, GtrWindow * window) { GError *error = NULL; GtrTab *current; GtrPo *po; GtrStatusbar *status; current = gtr_window_get_active_tab (window); po = gtr_tab_get_po (current); gtr_po_save_file (po, &error); if (error) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_clear_error (&error); return; } /* We have to change the state of the tab */ gtr_po_set_state (po, GTR_PO_STATE_SAVED); /* Flash a message */ status = GTR_STATUSBAR (gtr_window_get_statusbar (window)); gtr_statusbar_flash_message (status, 0, _("File saved.")); }
void _gtr_actions_file_save_all (GtkAction * action, GtrWindow * window) { GList *list, *l; list = get_modified_documents (window); for (l = list; l != NULL; l = g_list_next (l)) { GError *error = NULL; GtrStatusbar *status; gtr_po_save_file (GTR_PO (l->data), &error); if (error) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_clear_error (&error); return; } /* We have to change the state of the tab */ gtr_po_set_state (GTR_PO (l->data), GTR_PO_STATE_SAVED); /* Flash a message */ status = GTR_STATUSBAR (gtr_window_get_statusbar (window)); gtr_statusbar_flash_message (status, 0, _("Files saved.")); } g_list_free (list); }
static void save_dialog_response_cb (GtkDialog * dialog, gint response_id, GtrWindow * window) { GError *error = NULL; GtrPo *po; GtrTab *tab; gchar *filename; GFile *location; GtrStatusbar *status; tab = GTR_TAB (g_object_get_data (G_OBJECT (dialog), GTR_TAB_SAVE_AS)); g_return_if_fail (GTK_IS_FILE_CHOOSER (dialog)); po = gtr_tab_get_po (tab); if (response_id != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy (GTK_WIDGET (dialog)); return; } filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); g_return_if_fail (filename != NULL); location = g_file_new_for_path (filename); g_free (filename); gtk_widget_destroy (GTK_WIDGET (dialog)); if (po != NULL) { gtr_po_set_location (po, location); g_object_unref (location); gtr_po_save_file (po, &error); if (error) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_clear_error (&error); return; } /* We have to change the state of the tab */ gtr_po_set_state (po, GTR_PO_STATE_SAVED); /* Flash a message */ status = GTR_STATUSBAR (gtr_window_get_statusbar (window)); gtr_statusbar_flash_message (status, 0, _("File saved.")); } g_object_unref (location); }
/** * gtr_po_save_file: * @po: a #GtrPo * @error: a GError to manage the exceptions * * It saves the po file and if there are any problem it stores the error * in @error. **/ void gtr_po_save_file (GtrPo * po, GError ** error) { struct po_xerror_handler handler; gchar *filename; gchar *msg_error; GtrHeader *header; GtrPoPrivate *priv = gtr_po_get_instance_private (po); /* * Initialice the handler error. */ handler.xerror = &on_gettext_po_xerror; handler.xerror2 = &on_gettext_po_xerror2; filename = g_file_get_path (priv->location); if (g_str_has_suffix (filename, ".pot")) { // Remove suffix filename[strlen (filename) - 4] = '\0'; g_set_error (error, GTR_PO_ERROR, GTR_PO_ERROR_FILENAME, _("You are saving a file with a .pot extension.\n" "Pot files are generated by the compilation process.\n" "Your file should likely be named “%s.po”."), filename); g_free (filename); return; } if (is_read_only (filename)) { g_set_error (error, GTR_PO_ERROR, GTR_PO_ERROR_READONLY, _("The file %s is read-only, and can not be overwritten"), filename); g_free (filename); return; } /* Save header fields into msg */ header = gtr_po_get_header (po); gtr_header_update_header (header); /* * Check if the file is right */ msg_error = gtr_po_check_po_file (po); if (msg_error != NULL) { g_set_error (error, GTR_PO_ERROR, GTR_PO_ERROR_GETTEXT, _("There is an error in the PO file: %s"), msg_error); g_free (msg_error); g_free (filename); return; } if (!po_file_write (gtr_po_get_po_file (po), filename, &handler)) { g_set_error (error, GTR_PO_ERROR, GTR_PO_ERROR_FILENAME, _("There was an error writing the PO file: %s"), message_error); g_free (message_error); g_free (filename); return; } g_free (filename); /* If we are here everything is ok and we can set the state as saved */ gtr_po_set_state (po, GTR_PO_STATE_SAVED); /* * If the warn if fuzzy option is enabled we have to show an error */ /*if (gtr_prefs_manager_get_warn_if_fuzzy () && priv->fuzzy) { g_set_error (error, GTR_PO_ERROR, GTR_PO_ERROR_OTHER, ngettext ("File %s\ncontains %d fuzzy message", "File %s\ncontains %d fuzzy messages", priv->fuzzy), priv->fuzzy); } */ }