static void impl_activate (GeditPlugin *plugin, GeditWindow *window) { WindowData *data; GList *views; GList *item; gedit_debug (DEBUG_PLUGINS); data = g_slice_new (WindowData); g_object_set_data_full (G_OBJECT (window), WINDOW_DATA_KEY, data, (GDestroyNotify) free_window_data); views = gedit_window_get_views (window); for (item = views; item != NULL; item = item->next) { enable_bookmarks (GEDIT_VIEW (item->data), plugin); load_bookmark_metadata (GEDIT_VIEW (item->data)); } g_list_free (views); g_signal_connect (window, "tab-added", G_CALLBACK (on_tab_added), plugin); g_signal_connect (window, "tab-removed", G_CALLBACK (on_tab_removed), plugin); install_menu (window); install_messages (window); }
static void impl_deactivate (GeditPlugin *plugin, GeditWindow *window) { WindowData *data; GList *views; GList *item; gedit_debug (DEBUG_PLUGINS); uninstall_menu (window); uninstall_messages (window); views = gedit_window_get_views (window); for (item = views; item != NULL; item = item->next) { disable_bookmarks (GEDIT_VIEW (item->data)); } g_list_free (views); data = BOOKMARKS_DATA (window); g_return_if_fail (data != NULL); g_signal_handlers_disconnect_by_func (window, on_tab_added, plugin); g_signal_handlers_disconnect_by_func (window, on_tab_removed, plugin); g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL); }
static void gedit_modeline_plugin_deactivate (GeditPlugin *plugin, GeditWindow *window) { WindowData *wdata; GList *views; GList *l; gedit_debug (DEBUG_PLUGINS); wdata = g_object_steal_data (G_OBJECT (window), WINDOW_DATA_KEY); g_signal_handler_disconnect (window, wdata->tab_added_handler_id); g_signal_handler_disconnect (window, wdata->tab_removed_handler_id); window_data_free (wdata); views = gedit_window_get_views (window); for (l = views; l != NULL; l = l->next) { disconnect_handlers (GEDIT_VIEW (l->data)); modeline_parser_deactivate (GTK_SOURCE_VIEW (l->data)); } g_list_free (views); }
GeditView * gedit_view_frame_get_view (GeditViewFrame *frame) { g_return_val_if_fail (GEDIT_IS_VIEW_FRAME (frame), NULL); return GEDIT_VIEW (frame->priv->view); }
static void gedit_modeline_plugin_activate (GeditPlugin *plugin, GeditWindow *window) { WindowData *wdata; GList *views; GList *l; gedit_debug (DEBUG_PLUGINS); views = gedit_window_get_views (window); for (l = views; l != NULL; l = l->next) { connect_handlers (GEDIT_VIEW (l->data)); modeline_parser_apply_modeline (GTK_SOURCE_VIEW (l->data)); } g_list_free (views); wdata = g_slice_new (WindowData); wdata->tab_added_handler_id = g_signal_connect (window, "tab-added", G_CALLBACK (on_window_tab_added), NULL); wdata->tab_removed_handler_id = g_signal_connect (window, "tab-removed", G_CALLBACK (on_window_tab_removed), NULL); g_object_set_data_full (G_OBJECT (window), WINDOW_DATA_KEY, wdata, (GDestroyNotify) window_data_free); }
static void hide_search_widget (GeditViewFrame *frame, gboolean cancel) { GtkTextBuffer *buffer; if (frame->priv->disable_popdown) { return; } g_signal_handler_block (frame->priv->search_entry, frame->priv->search_entry_focus_out_id); if (frame->priv->view_scroll_event_id != 0) { g_signal_handler_disconnect (frame->priv->view, frame->priv->view_scroll_event_id); frame->priv->view_scroll_event_id = 0; } if (frame->priv->typeselect_flush_timeout != 0) { g_source_remove (frame->priv->typeselect_flush_timeout); frame->priv->typeselect_flush_timeout = 0; } /* To hide the slider we just set the animation-state property */ g_object_set (G_OBJECT (frame->priv->slider), "animation-state", GEDIT_THEATRICS_ANIMATION_STATE_INTENDING_TO_GO, NULL); if (cancel) { GtkTextBuffer *buffer; GtkTextIter iter; buffer = GTK_TEXT_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (frame->priv->view))); gtk_text_buffer_get_iter_at_mark (buffer, &iter, frame->priv->start_mark); gtk_text_buffer_place_cursor (buffer, &iter); gedit_view_scroll_to_cursor (GEDIT_VIEW (frame->priv->view)); } buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (frame->priv->view)); gtk_text_buffer_delete_mark (buffer, frame->priv->start_mark); /* Make sure the view is the one who has the focus when we destroy the search widget */ gtk_widget_grab_focus (frame->priv->view); g_signal_handler_unblock (frame->priv->search_entry, frame->priv->search_entry_focus_out_id); }
static void on_document_loaded (GeditDocument *doc, GeditSpellPlugin *plugin) { GeditSpellChecker *spell; GeditView *view; spell = GEDIT_SPELL_CHECKER (g_object_get_qdata (G_OBJECT (doc), spell_checker_id)); if (spell != NULL) { set_language_from_metadata (spell, doc); } view = GEDIT_VIEW (g_object_get_data (G_OBJECT (doc), GEDIT_AUTOMATIC_SPELL_VIEW)); set_auto_spell_from_metadata (plugin, view); }
static void gedit_word_completion_plugin_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GeditWordCompletionPlugin *plugin = GEDIT_WORD_COMPLETION_PLUGIN (object); switch (prop_id) { case PROP_WINDOW: plugin->priv->window = g_value_dup_object (value); break; case PROP_VIEW: plugin->priv->view = GEDIT_VIEW (g_value_dup_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void gedit_spell_plugin_activate (GeditWindowActivatable *activatable) { GeditSpellPlugin *plugin; GeditSpellPluginPrivate *priv; GList *views, *l; gedit_debug (DEBUG_PLUGINS); plugin = GEDIT_SPELL_PLUGIN (activatable); priv = plugin->priv; g_action_map_add_action_entries (G_ACTION_MAP (priv->window), action_entries, G_N_ELEMENTS (action_entries), activatable); priv->message_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (gedit_window_get_statusbar (priv->window)), "spell_plugin_message"); update_ui (plugin); views = gedit_window_get_views (priv->window); for (l = views; l != NULL; l = g_list_next (l)) { GeditView *view = GEDIT_VIEW (l->data); set_auto_spell_from_metadata (plugin, view); } priv->tab_added_id = g_signal_connect (priv->window, "tab-added", G_CALLBACK (tab_added_cb), activatable); priv->tab_removed_id = g_signal_connect (priv->window, "tab-removed", G_CALLBACK (tab_removed_cb), activatable); }
static void gedit_automatic_spell_checker_free_internal (GeditAutomaticSpellChecker *spell) { GtkTextTagTable *table; GtkTextIter start, end; GSList *list; g_return_if_fail (spell != NULL); table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (spell->doc)); if (table != NULL && spell->tag_highlight != NULL) { gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (spell->doc), &start, &end); gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (spell->doc), spell->tag_highlight, &start, &end); g_signal_handlers_disconnect_matched (G_OBJECT (table), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, spell); gtk_text_tag_table_remove (table, spell->tag_highlight); } g_signal_handlers_disconnect_matched (G_OBJECT (spell->doc), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, spell); g_signal_handlers_disconnect_matched (G_OBJECT (spell->spell_checker), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, spell); g_object_unref (spell->spell_checker); list = spell->views; while (list != NULL) { GeditView *view = GEDIT_VIEW (list->data); g_signal_handlers_disconnect_matched (G_OBJECT (view), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, spell); g_signal_handlers_disconnect_matched (G_OBJECT (view), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, spell); list = g_slist_next (list); } g_slist_free (spell->views); g_free (spell); }
static void search_init (GtkWidget *entry, GeditViewFrame *frame) { const gchar *entry_text; /* renew the flush timeout */ if (frame->priv->typeselect_flush_timeout != 0) { g_source_remove (frame->priv->typeselect_flush_timeout); frame->priv->typeselect_flush_timeout = g_timeout_add (GEDIT_VIEW_FRAME_SEARCH_DIALOG_TIMEOUT, (GSourceFunc)search_entry_flush_timeout, frame); } entry_text = gtk_entry_get_text (GTK_ENTRY (entry)); if (frame->priv->search_mode == SEARCH) { update_search (frame); run_search (frame, entry_text, FALSE, frame->priv->wrap_around, TRUE); } else { if (*entry_text != '\0') { gboolean moved, moved_offset; gint line; gint offset_line = 0; gint line_offset = 0; gchar **split_text = NULL; const gchar *text; GtkTextIter iter; GeditDocument *doc; doc = gedit_view_frame_get_document (frame); gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER (doc), &iter, frame->priv->start_mark); split_text = g_strsplit (entry_text, ":", -1); if (g_strv_length (split_text) > 1) { text = split_text[0]; } else { text = entry_text; } if (*text == '-') { gint cur_line = gtk_text_iter_get_line (&iter); if (*(text + 1) != '\0') offset_line = MAX (atoi (text + 1), 0); line = MAX (cur_line - offset_line, 0); } else if (*entry_text == '+') { gint cur_line = gtk_text_iter_get_line (&iter); if (*(text + 1) != '\0') offset_line = MAX (atoi (text + 1), 0); line = cur_line + offset_line; } else { line = MAX (atoi (text) - 1, 0); } if (split_text[1] != NULL) { line_offset = atoi (split_text[1]); } g_strfreev (split_text); moved = gedit_document_goto_line (doc, line); moved_offset = gedit_document_goto_line_offset (doc, line, line_offset); gedit_view_scroll_to_cursor (GEDIT_VIEW (frame->priv->view)); if (!moved || !moved_offset) { set_entry_background (frame, frame->priv->search_entry, GEDIT_SEARCH_ENTRY_NOT_FOUND); } else { set_entry_background (frame, frame->priv->search_entry, GEDIT_SEARCH_ENTRY_NORMAL); } } } }
static gboolean run_search (GeditViewFrame *frame, const gchar *entry_text, gboolean search_backward, gboolean wrap_around, gboolean typing) { GtkTextIter start_iter; GtkTextIter match_start; GtkTextIter match_end; gboolean found = FALSE; GeditDocument *doc; g_return_val_if_fail (frame->priv->search_mode == SEARCH, FALSE); doc = gedit_view_frame_get_document (frame); gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER (doc), &start_iter, frame->priv->start_mark); if (*entry_text != '\0') { if (!search_backward) { if (!typing) { /* forward and _NOT_ typing */ gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc), &start_iter, &match_end); gtk_text_iter_order (&match_end, &start_iter); } /* run search */ found = gedit_document_search_forward (doc, &start_iter, NULL, &match_start, &match_end); } else if (!typing) { /* backward and not typing */ gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc), &start_iter, &match_end); /* run search */ found = gedit_document_search_backward (doc, NULL, &start_iter, &match_start, &match_end); } else { /* backward (while typing) */ g_return_val_if_reached (FALSE); } if (!found && wrap_around) { if (!search_backward) { found = gedit_document_search_forward (doc, NULL, NULL, /* FIXME: set the end_inter */ &match_start, &match_end); } else { found = gedit_document_search_backward (doc, NULL, /* FIXME: set the start_inter */ NULL, &match_start, &match_end); } } } else { gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc), &start_iter, NULL); } if (found) { gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &match_start); gtk_text_buffer_move_mark_by_name (GTK_TEXT_BUFFER (doc), "selection_bound", &match_end); } else if (typing) { gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER (doc), &start_iter, frame->priv->start_mark); gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &start_iter); } if (found || (*entry_text == '\0')) { gedit_view_scroll_to_cursor (GEDIT_VIEW (frame->priv->view)); set_entry_background (frame, frame->priv->search_entry, GEDIT_SEARCH_ENTRY_NORMAL); } else { set_entry_background (frame, frame->priv->search_entry, GEDIT_SEARCH_ENTRY_NOT_FOUND); } return found; }