static void message_get_view_iter (PlumaWindow *window, PlumaMessage *message, GtkSourceView **view, GtkTextIter *iter) { if (pluma_message_has_key (message, "view")) { pluma_message_get (message, "view", view, NULL); } else { *view = GTK_SOURCE_VIEW (pluma_window_get_active_view (window)); } if (!*view) { return; } if (pluma_message_has_key (message, "iter")) { pluma_message_get (message, "iter", iter, NULL); } else { GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (*view)); gtk_text_buffer_get_iter_at_mark (buffer, iter, gtk_text_buffer_get_insert (buffer)); } }
static void do_find (PlumaSearchDialog *dialog, PlumaWindow *window) { PlumaView *active_view; PlumaDocument *doc; gchar *search_text; const gchar *entry_text; gboolean match_case; gboolean entire_word; gboolean wrap_around; gboolean search_backwards; guint flags = 0; guint old_flags = 0; gboolean found; /* TODO: make the dialog insensitive when all the tabs are closed * and assert here that the view is not NULL */ active_view = pluma_window_get_active_view (window); if (active_view == NULL) return; doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view))); entry_text = pluma_search_dialog_get_search_text (dialog); match_case = pluma_search_dialog_get_match_case (dialog); entire_word = pluma_search_dialog_get_entire_word (dialog); search_backwards = pluma_search_dialog_get_backwards (dialog); wrap_around = pluma_search_dialog_get_wrap_around (dialog); PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case); PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word); search_text = pluma_document_get_search_text (doc, &old_flags); if ((search_text == NULL) || (strcmp (search_text, entry_text) != 0) || (flags != old_flags)) { pluma_document_set_search_text (doc, entry_text, flags); } g_free (search_text); found = run_search (active_view, wrap_around, search_backwards); if (found) text_found (window, 0); else text_not_found (window, entry_text); gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE, found); }
static void do_replace_all (PlumaSearchDialog *dialog, PlumaWindow *window) { PlumaView *active_view; PlumaDocument *doc; const gchar *search_entry_text; const gchar *replace_entry_text; gboolean match_case; gboolean entire_word; guint flags = 0; gint count; active_view = pluma_window_get_active_view (window); if (active_view == NULL) return; doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view))); search_entry_text = pluma_search_dialog_get_search_text (dialog); g_return_if_fail ((search_entry_text) != NULL); g_return_if_fail ((*search_entry_text) != '\0'); /* replace text may be "", we just delete all occurrencies */ replace_entry_text = pluma_search_dialog_get_replace_text (dialog); g_return_if_fail ((replace_entry_text) != NULL); match_case = pluma_search_dialog_get_match_case (dialog); entire_word = pluma_search_dialog_get_entire_word (dialog); PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case); PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word); count = pluma_document_replace_all (doc, search_entry_text, replace_entry_text, flags); if (count > 0) { text_found (window, count); } else { text_not_found (window, search_entry_text); } gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE, FALSE); }
static void update_ui (PlumaSpellPlugin *plugin) { PlumaSpellPluginPrivate *data; PlumaWindow *window; PlumaDocument *doc; PlumaView *view; gboolean autospell; GtkAction *action; pluma_debug (DEBUG_PLUGINS); data = plugin->priv; window = PLUMA_WINDOW (data->window); doc = pluma_window_get_active_document (window); view = pluma_window_get_active_view (window); autospell = (doc != NULL && pluma_automatic_spell_checker_get_from_document (doc) != NULL); if (doc != NULL) { PlumaTab *tab; PlumaTabState state; tab = pluma_window_get_active_tab (window); state = pluma_tab_get_state (tab); /* If the document is loading we can't get the metadata so we endup with an useless speller */ if (state == PLUMA_TAB_STATE_NORMAL) { action = gtk_action_group_get_action (data->action_group, "AutoSpell"); g_signal_handlers_block_by_func (action, auto_spell_cb, plugin); set_auto_spell (window, doc, autospell); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), autospell); g_signal_handlers_unblock_by_func (action, auto_spell_cb, plugin); } } gtk_action_group_set_sensitive (data->action_group, (view != NULL) && gtk_text_view_get_editable (GTK_TEXT_VIEW (view))); }
void _pluma_cmd_edit_cut (GtkAction *action, PlumaWindow *window) { PlumaView *active_view; pluma_debug (DEBUG_COMMANDS); active_view = pluma_window_get_active_view (window); g_return_if_fail (active_view); pluma_view_cut_clipboard (active_view); gtk_widget_grab_focus (GTK_WIDGET (active_view)); }
static void do_find_again (PlumaWindow *window, gboolean backward) { PlumaView *active_view; gboolean wrap_around = TRUE; gpointer data; active_view = pluma_window_get_active_view (window); g_return_if_fail (active_view != NULL); data = g_object_get_data (G_OBJECT (window), PLUMA_SEARCH_DIALOG_KEY); if (data != NULL) wrap_around = pluma_search_dialog_get_wrap_around (PLUMA_SEARCH_DIALOG (data)); run_search (active_view, wrap_around, backward); }
static void update_ui_real (PlumaWindow *window, WindowData *data) { PlumaView *view; pluma_debug (DEBUG_PLUGINS); view = pluma_window_get_active_view (window); gtk_action_group_set_sensitive (data->ui_action_group, (view != NULL)); if (data->dialog != NULL) { gtk_dialog_set_response_sensitive (GTK_DIALOG (data->dialog->dialog), GTK_RESPONSE_OK, (view != NULL)); } }
void _pluma_cmd_edit_redo (GtkAction *action, PlumaWindow *window) { PlumaView *active_view; GtkSourceBuffer *active_document; pluma_debug (DEBUG_COMMANDS); active_view = pluma_window_get_active_view (window); g_return_if_fail (active_view); active_document = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view))); gtk_source_buffer_redo (active_document); pluma_view_scroll_to_cursor (active_view); gtk_widget_grab_focus (GTK_WIDGET (active_view)); }
static void set_auto_spell (PlumaWindow *window, PlumaDocument *doc, gboolean active) { PlumaAutomaticSpellChecker *autospell; PlumaSpellChecker *spell; spell = get_spell_checker_from_document (doc); g_return_if_fail (spell != NULL); autospell = pluma_automatic_spell_checker_get_from_document (doc); if (active) { if (autospell == NULL) { PlumaView *active_view; active_view = pluma_window_get_active_view (window); g_return_if_fail (active_view != NULL); autospell = pluma_automatic_spell_checker_new (doc, spell); if (doc == pluma_window_get_active_document (window)) { pluma_automatic_spell_checker_attach_view (autospell, active_view); } pluma_automatic_spell_checker_recheck_all (autospell); } } else { if (autospell != NULL) pluma_automatic_spell_checker_free (autospell); } }
void _pluma_cmd_search_incremental_search (GtkAction *action, PlumaWindow *window) { PlumaView *active_view; pluma_debug (DEBUG_COMMANDS); active_view = pluma_window_get_active_view (window); if (active_view == NULL) return; /* Focus the view if needed: we need to focus the view otherwise activating the binding for incremental search has no effect */ gtk_widget_grab_focus (GTK_WIDGET (active_view)); /* incremental search is builtin in PlumaView, just activate * the corrisponding binding. */ gtk_bindings_activate (GTK_OBJECT (active_view), GDK_k, GDK_CONTROL_MASK); }
static void goto_bookmark (PlumaWindow *window, GtkSourceView *view, GtkTextIter *iter, IterSearchFunc func, CycleFunc cycle_func) { GtkTextBuffer *buffer; GtkTextIter at; GtkTextMark *insert; GtkTextIter end; if (view == NULL) { view = GTK_SOURCE_VIEW (pluma_window_get_active_view (window)); } if (view == NULL) { return; } buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); if (iter == NULL) { gtk_text_buffer_get_iter_at_mark (buffer, &at, gtk_text_buffer_get_insert (buffer)); } else { at = *iter; } /* Move the iter to the beginning of the line, where the bookmarks are */ gtk_text_iter_set_line_offset (&at, 0); /* Try to find the next bookmark */ if (!func (GTK_SOURCE_BUFFER (buffer), &at, BOOKMARK_CATEGORY)) { GSList *marks; /* cycle through */ cycle_func (buffer, &at); gtk_text_iter_set_line_offset (&at, 0); marks = gtk_source_buffer_get_source_marks_at_iter (GTK_SOURCE_BUFFER (buffer), &at, BOOKMARK_CATEGORY); if (!marks && !func (GTK_SOURCE_BUFFER (buffer), &at, BOOKMARK_CATEGORY)) { return; } g_slist_free (marks); } end = at; if (!gtk_text_iter_forward_visible_line (&end)) { gtk_text_buffer_get_end_iter (buffer, &end); } else { gtk_text_iter_backward_char (&end); } gtk_text_buffer_select_range (buffer, &at, &end); gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (view), &at, 0.3, FALSE, 0, 0); }
static void spell_cb (GtkAction *action, PlumaSpellPlugin *plugin) { PlumaSpellPluginPrivate *data; PlumaWindow *window; PlumaView *view; PlumaDocument *doc; PlumaSpellChecker *spell; GtkWidget *dlg; GtkTextIter start, end; gchar *word; gchar *data_dir; pluma_debug (DEBUG_PLUGINS); data = plugin->priv; window = PLUMA_WINDOW (data->window); view = pluma_window_get_active_view (window); g_return_if_fail (view != NULL); doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view))); g_return_if_fail (doc != NULL); spell = get_spell_checker_from_document (doc); g_return_if_fail (spell != NULL); if (gtk_text_buffer_get_char_count (GTK_TEXT_BUFFER (doc)) <= 0) { GtkWidget *statusbar; statusbar = pluma_window_get_statusbar (window); pluma_statusbar_flash_message (PLUMA_STATUSBAR (statusbar), data->message_cid, _("The document is empty.")); return; } if (!gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc), &start, &end)) { /* no selection, get the whole doc */ gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (doc), &start, &end); } set_check_range (doc, &start, &end); word = get_next_misspelled_word (view); if (word == NULL) { GtkWidget *statusbar; statusbar = pluma_window_get_statusbar (window); pluma_statusbar_flash_message (PLUMA_STATUSBAR (statusbar), data->message_cid, _("No misspelled words")); return; } data_dir = peas_extension_base_get_data_dir (PEAS_EXTENSION_BASE (plugin)); dlg = pluma_spell_checker_dialog_new_from_spell_checker (spell, data_dir); g_free (data_dir); gtk_window_set_modal (GTK_WINDOW (dlg), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (window)); g_signal_connect (dlg, "ignore", G_CALLBACK (ignore_cb), view); g_signal_connect (dlg, "ignore_all", G_CALLBACK (ignore_cb), view); g_signal_connect (dlg, "change", G_CALLBACK (change_cb), view); g_signal_connect (dlg, "change_all", G_CALLBACK (change_all_cb), view); g_signal_connect (dlg, "add_word_to_personal", G_CALLBACK (add_word_cb), view); pluma_spell_checker_dialog_set_misspelled_word (PLUMA_SPELL_CHECKER_DIALOG (dlg), word, -1); g_free (word); gtk_widget_show (dlg); }