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); }
void gtr_close_tab (GtrTab * tab, GtrWindow * window) { g_object_set_data (G_OBJECT (window), GTR_IS_CLOSING_ALL, GINT_TO_POINTER (0)); if (!_gtr_tab_can_close (tab)) { GtkWidget *dlg; dlg = gtr_close_confirmation_dialog_new_single (GTK_WINDOW (window), gtr_tab_get_po (tab), FALSE); g_signal_connect (dlg, "response", G_CALLBACK (close_confirmation_dialog_response_handler), window); gtk_widget_show (dlg); } else _gtr_window_close_tab (window, tab); }
static GList * get_modified_documents (GtrWindow * window) { GtrNotebook *nb; GtrTab *tab; GtrPo *po; gint pages; GList *list = NULL; nb = gtr_window_get_notebook (window); pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb)); while (pages > 0) { tab = GTR_TAB (gtk_notebook_get_nth_page (GTK_NOTEBOOK (nb), pages - 1)); po = gtr_tab_get_po (tab); if (gtr_po_get_state (po) == GTR_PO_STATE_MODIFIED) list = g_list_prepend (list, po); pages--; } return list; }
/* * 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.")); }
static void gtr_message_table_selection_changed (GtkTreeSelection *selection, GtrMessageTable *table) { GtkTreeIter iter; GtkTreeModel *model; GtrMsg *msg; GList *current_msg = NULL; GtrMessageTablePrivate *priv; GtrPo *po; g_return_if_fail (selection != NULL); priv = gtr_message_table_get_instance_private (table); po = gtr_tab_get_po (priv->tab); current_msg = gtr_po_get_current_message (po); if (gtk_tree_selection_get_selected (selection, &model, &iter) == TRUE) { gtk_tree_model_get (model, &iter, GTR_MESSAGE_TABLE_MODEL_POINTER_COLUMN, &msg, -1); if (msg != NULL && g_utf8_collate (gtr_msg_get_msgid (msg), gtr_msg_get_msgid (current_msg->data))) { g_signal_handlers_block_by_func (priv->tab, showed_message_cb, table); gtr_tab_message_go_to (priv->tab, msg, FALSE, GTR_TAB_MOVE_NONE); g_signal_handlers_unblock_by_func (priv->tab, showed_message_cb, table); } } }
/* * "Save as" dialog. */ void gtr_save_file_as_dialog (GtkAction * action, GtrWindow * window) { GtkWidget *dialog = NULL; GtrTab *current_page; GtrPo *po; GFile *location; gchar *uri = NULL; if (dialog != NULL) { gtk_window_present (GTK_WINDOW (dialog)); return; } current_page = gtr_window_get_active_tab (window); po = gtr_tab_get_po (current_page); dialog = gtr_file_chooser_new (GTK_WINDOW (window), FILESEL_SAVE, _("Save file as..."), _gtr_application_get_last_dir (GTR_APP)); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); g_signal_connect (dialog, "confirm-overwrite", G_CALLBACK (confirm_overwrite_callback), NULL); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); /*Set the suggested file */ location = gtr_po_get_location (po); uri = g_file_get_uri (location); g_object_unref (location); if (uri) gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog), uri); g_free (uri); /* * FIXME: If we can't set the uri we should add a default path and name */ g_object_set_data (G_OBJECT (dialog), GTR_TAB_SAVE_AS, current_page); g_signal_connect (dialog, "response", G_CALLBACK (save_dialog_response_cb), window); gtk_widget_show (GTK_WIDGET (dialog)); }
void gtr_message_go_to_prev_fuzzy (GtkAction * action, GtrWindow * window) { GtrTab *current; GtrPo *po; current = gtr_window_get_active_tab (window); po = gtr_tab_get_po (current); if (gtr_tab_go_to_prev_fuzzy (current)) _gtr_window_set_sensitive_according_to_message (window, po); }
/* * Toggle the sticky status */ void gtr_message_status_toggle_fuzzy (GtkAction * action, GtrWindow * window) { GtrTab *current; GtrPo *po; GList *msg; current = gtr_window_get_active_tab (window); po = gtr_tab_get_po (current); msg = gtr_po_get_current_message (po); if (gtr_msg_is_fuzzy (msg->data)) gtr_msg_set_fuzzy (msg->data, FALSE); else gtr_msg_set_fuzzy (msg->data, TRUE); /* * Emit that message was changed. */ g_signal_emit_by_name (current, "message_changed", msg->data); }
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); }