static void gedit_word_completion_view_activate (GeditViewActivatable *activatable) { GeditWordCompletionPluginPrivate *priv; GtkSourceCompletion *completion; GtkSourceCompletionProvider *provider; GtkTextBuffer *buf; gedit_debug (DEBUG_PLUGINS); priv = GEDIT_WORD_COMPLETION_PLUGIN (activatable)->priv; priv->window = gtk_widget_get_toplevel (GTK_WIDGET (priv->view)); /* We are disposing the window */ g_object_ref (priv->window); completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (priv->view)); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->view)); provider = g_object_get_data (G_OBJECT (priv->window), WINDOW_PROVIDER); if (provider == NULL) { /* Standalone provider */ provider = GTK_SOURCE_COMPLETION_PROVIDER (create_provider ()); } priv->provider = g_object_ref (provider); gtk_source_completion_add_provider (completion, provider, NULL); gtk_source_completion_words_register (GTK_SOURCE_COMPLETION_WORDS (provider), buf); }
static void remove_view (WindowData *data, GtkSourceView *view) { GtkSourceCompletion *completion; GtkTextBuffer *buf; completion = gtk_source_view_get_completion (view); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); gtk_source_completion_remove_provider (completion, GTK_SOURCE_COMPLETION_PROVIDER (data->provider), NULL); gtk_source_completion_words_unregister (data->provider, buf); }
SourceView::SourceView(): Gtk::ScrolledWindow(), source_view(GTK_SOURCE_VIEW(gtk_source_view_new())) { add(*Glib::wrap(GTK_WIDGET(source_view))); completion = gtk_source_view_get_completion(source_view); completion_words = gtk_source_completion_words_new("Suggestions", nullptr); gtk_source_completion_words_register(completion_words, gtk_text_view_get_buffer(GTK_TEXT_VIEW(source_view))); gtk_source_completion_add_provider(completion, GTK_SOURCE_COMPLETION_PROVIDER(completion_words), nullptr); gtk_source_buffer_set_highlight_matching_brackets(GetSourceBuffer(), TRUE); gtk_source_view_set_show_line_marks(source_view, TRUE); ShowLineNumbers(true); show_all(); }
static void ide_editor_frame_actions_replace_all (GSimpleAction *action, GVariant *state, gpointer user_data) { IdeEditorFrame *self = user_data; GtkSourceSearchContext *search_context; GtkSourceSearchSettings *search_settings; const gchar *replace_text; gchar *unescaped_replace_text; const gchar *search_text; GError *error = NULL; GtkSourceCompletion *completion; g_assert (IDE_IS_EDITOR_FRAME (self)); search_context = ide_source_view_get_search_context (self->source_view); g_assert (search_context != NULL); search_settings = gtk_source_search_context_get_settings (search_context); search_text = gtk_source_search_settings_get_search_text (search_settings); replace_text = gtk_entry_get_text (GTK_ENTRY (self->replace_entry)); if (ide_str_empty0 (search_text) || replace_text == NULL) return; /* Temporarily disabling auto completion makes replace more efficient. */ completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (self->source_view)); gtk_source_completion_block_interactive (completion); unescaped_replace_text = gtk_source_utils_unescape_search_text (replace_text); gtk_source_search_context_replace_all (search_context, unescaped_replace_text, -1, &error); gtk_source_completion_unblock_interactive (completion); if (error != NULL) { g_warning ("%s", error->message); g_clear_error (&error); } g_free (unescaped_replace_text); }
static void gedit_word_completion_view_deactivate (GeditViewActivatable *activatable) { GeditWordCompletionPluginPrivate *priv; GtkSourceCompletion *completion; GtkSourceCompletionProvider *provider; GtkTextBuffer *buf; gedit_debug (DEBUG_PLUGINS); priv = GEDIT_WORD_COMPLETION_PLUGIN (activatable)->priv; completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (priv->view)); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->view)); gtk_source_completion_remove_provider (completion, priv->provider, NULL); gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS (priv->provider), buf); }
static void on_notify_autocompletion (GSettings* settings, const gchar* key, gpointer user_data) { Sourceview *sv; sv = ANJUTA_SOURCEVIEW(user_data); GtkSourceCompletion* completion = gtk_source_view_get_completion(GTK_SOURCE_VIEW(sv->priv->view)); if (g_settings_get_boolean (settings, key)) { DEBUG_PRINT ("Register word completion provider"); GtkSourceCompletionWords *prov_words; prov_words = gtk_source_completion_words_new (NULL, NULL); gtk_source_completion_words_register (prov_words, gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view))); gtk_source_completion_add_provider (completion, GTK_SOURCE_COMPLETION_PROVIDER (prov_words), NULL); } else { GList* node; for (node = gtk_source_completion_get_providers(completion); node != NULL; node = g_list_next (node)) { if (GTK_IS_SOURCE_COMPLETION_WORDS(node->data)) { DEBUG_PRINT ("Unregister word completion provider"); gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS(node->data), gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view))); gtk_source_completion_remove_provider(completion, GTK_SOURCE_COMPLETION_PROVIDER(node->data), NULL); break; } } } }
static void process_communicate_utf8_cb (GObject *object, GAsyncResult *result, gpointer user_data) { g_autoptr (GSubprocess) process = (GSubprocess *)object; g_autoptr (GTask) task = (GTask *)user_data; g_autofree gchar *stdout_str = NULL; g_autofree gchar *stderr_str = NULL; g_autoptr(GError) error = NULL; GtkSourceCompletion *completion; GtkTextBuffer *buffer; GtkTextIter begin; GtkTextIter end; ProcessState *state; gboolean status; g_assert (G_IS_SUBPROCESS (process)); g_assert (G_IS_ASYNC_RESULT (result)); g_assert (G_IS_TASK (task)); if (!g_subprocess_communicate_utf8_finish (process, result, &stdout_str, &stderr_str, &error)) { g_task_return_error (task, g_steal_pointer (&error)); return; } if (g_task_return_error_if_cancelled (task)) return; state = (ProcessState *)g_task_get_task_data (task); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (state->source_view)); completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (state->source_view)); if (!ide_str_empty0 (stdout_str)) { gtk_source_completion_block_interactive (completion); gtk_text_buffer_begin_user_action (buffer); gtk_text_buffer_get_iter_at_mark (buffer, &begin, state->begin_mark); gtk_text_buffer_get_iter_at_mark (buffer, &end, state->end_mark); gtk_text_buffer_delete (buffer, &begin, &end); gtk_text_buffer_insert (buffer, &begin, stdout_str, -1); /* Get valid iters from marks */ gtk_text_buffer_get_iter_at_mark (buffer, &begin, state->begin_mark); gtk_text_buffer_get_iter_at_mark (buffer, &end, state->end_mark); gtk_text_buffer_select_range (buffer, &begin, &end); g_signal_emit_by_name (state->source_view, "selection-theatric", IDE_SOURCE_VIEW_THEATRIC_EXPAND); gtk_text_buffer_end_user_action (buffer); gtk_source_completion_unblock_interactive (completion); g_task_return_boolean (task, TRUE); } else g_warning ("beautify plugin: output empty"); if (g_subprocess_get_if_exited (process)) { status = g_subprocess_get_exit_status (process); if (status != 0 && stderr_str != NULL && !ide_str_empty0 (stderr_str)) { g_warning ("beautify plugin stderr:\n%s", stderr_str); } } }
static void gb_editor_tab_init (GbEditorTab *tab) { GtkSourceCompletion *completion; GbEditorTabPrivate *priv; priv = tab->priv = gb_editor_tab_get_instance_private(tab); priv->is_empty = TRUE; priv->document = gb_editor_document_new(); priv->first_change_handler = g_signal_connect_object (priv->document, "changed", G_CALLBACK (gb_editor_tab_handle_first_change), tab, G_CONNECT_SWAPPED); priv->search_settings = gtk_source_search_settings_new (); priv->search = gtk_source_search_context_new (GTK_SOURCE_BUFFER (priv->document), priv->search_settings); g_signal_connect_object (priv->document, "notify::file", G_CALLBACK (gb_editor_tab_update_title), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); priv->vbox = g_object_new (GTK_TYPE_BOX, "orientation", GTK_ORIENTATION_VERTICAL, "visible", TRUE, NULL); gtk_container_add (GTK_CONTAINER (tab), priv->vbox); priv->search_bar = g_object_new (GTK_TYPE_SEARCH_BAR, "search-mode-enabled", FALSE, "show-close-button", FALSE, "visible", TRUE, NULL); gtk_container_add (GTK_CONTAINER (priv->vbox), priv->search_bar); priv->search_entry = g_object_new (GTK_TYPE_SEARCH_ENTRY, "visible", TRUE, "width-chars", 32, NULL); g_object_bind_property (priv->search_entry, "text", priv->search_settings, "search-text", G_BINDING_SYNC_CREATE); g_signal_connect_object (priv->search_entry, "changed", G_CALLBACK (gb_editor_tab_search_entry_changed), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); gtk_container_add (GTK_CONTAINER (priv->search_bar), priv->search_entry); priv->overlay = g_object_new(GTK_TYPE_OVERLAY, "vexpand", TRUE, "visible", TRUE, NULL); gtk_container_add(GTK_CONTAINER(priv->vbox), priv->overlay); priv->scroller = g_object_new(GTK_TYPE_SCROLLED_WINDOW, "visible", TRUE, NULL); gtk_container_add(GTK_CONTAINER(priv->overlay), priv->scroller); priv->text_view = g_object_new(GB_TYPE_SOURCE_VIEW, "buffer", priv->document, "visible", TRUE, NULL); gtk_container_add(GTK_CONTAINER(priv->scroller), priv->text_view); completion = gtk_source_view_get_completion (GTK_SOURCE_VIEW (priv->text_view)); g_object_set (completion, "show-headers", FALSE, "select-on-show", TRUE, NULL); priv->snippets_provider = g_object_new (GB_TYPE_SOURCE_SNIPPET_COMPLETION_PROVIDER, "source-view", priv->text_view, NULL); gtk_source_completion_add_provider (completion, priv->snippets_provider, NULL); priv->search_overlay = g_object_new (GB_TYPE_SOURCE_OVERLAY, "hexpand", TRUE, "search-context", priv->search, "source-view", priv->text_view, "vexpand", TRUE, "visible", FALSE, NULL); gtk_overlay_add_overlay(GTK_OVERLAY(priv->overlay), priv->search_overlay); priv->progress_bar = g_object_new (GTK_TYPE_PROGRESS_BAR, "halign", GTK_ALIGN_FILL, "valign", GTK_ALIGN_START, NULL); gtk_style_context_add_class (gtk_widget_get_style_context (priv->progress_bar), GTK_STYLE_CLASS_OSD); gtk_overlay_add_overlay (GTK_OVERLAY (priv->overlay), priv->progress_bar); priv->floating_bar = g_object_new(NAUTILUS_TYPE_FLOATING_BAR, "halign", GTK_ALIGN_END, "valign", GTK_ALIGN_END, "visible", TRUE, NULL); gtk_overlay_add_overlay(GTK_OVERLAY(priv->overlay), priv->floating_bar); g_signal_connect_object (priv->text_view, "toggle-overwrite", G_CALLBACK (gb_editor_tab_update_location), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); g_signal_connect_object (priv->document, "notify::language", G_CALLBACK (gb_editor_tab_apply_settings), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); g_signal_connect_object (priv->document, "delete-range", G_CALLBACK (gb_editor_tab_update_location), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); g_signal_connect_object (priv->document, "insert-text", G_CALLBACK (gb_editor_tab_update_location), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); g_signal_connect_object (priv->document, "mark-set", G_CALLBACK (gb_editor_tab_update_location), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); g_signal_connect_object (priv->text_view, "grab-focus", G_CALLBACK (gb_editor_tab_emit_focused), tab, (G_CONNECT_AFTER | G_CONNECT_SWAPPED)); priv->shared_settings = g_settings_new ("org.gnome.builder.preferences.editor"); g_settings_bind (priv->shared_settings, "font", tab, "font", G_SETTINGS_BIND_GET); g_settings_bind (priv->shared_settings, "style-scheme", tab, "style-scheme-name", G_SETTINGS_BIND_GET); gb_editor_tab_update_location (tab); gb_editor_tab_apply_settings (tab); }
static void gtk_source_map_init (GtkSourceMap *map) { GtkSourceMapPrivate *priv; GtkSourceCompletion *completion; GtkStyleContext *context; priv = gtk_source_map_get_instance_private (map); priv->css_provider = gtk_css_provider_new (); context = gtk_widget_get_style_context (GTK_WIDGET (map)); gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (priv->css_provider), CSS_PRIORITY); priv->child_view = g_object_new (GTK_SOURCE_TYPE_VIEW, "auto-indent", FALSE, "can-focus", FALSE, "draw-spaces", 0, "editable", FALSE, "expand", FALSE, "monospace", TRUE, "show-line-numbers", FALSE, "show-line-marks", FALSE, "show-right-margin", FALSE, "visible", TRUE, NULL); context = gtk_widget_get_style_context (GTK_WIDGET (priv->child_view)); gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (priv->css_provider), CSS_PRIORITY); g_signal_connect_object (priv->child_view, "button-press-event", G_CALLBACK (child_view_button_press_event), map, G_CONNECT_SWAPPED); gtk_widget_add_events (GTK_WIDGET (priv->child_view), GDK_SCROLL_MASK); g_signal_connect_object (priv->child_view, "scroll-event", G_CALLBACK (child_view_scroll_event), map, G_CONNECT_SWAPPED); g_signal_connect_object (priv->child_view, "state-flags-changed", G_CALLBACK (child_view_state_flags_changed), map, G_CONNECT_SWAPPED | G_CONNECT_AFTER); g_signal_connect_object (priv->child_view, "realize", G_CALLBACK (child_view_realize_after), map, G_CONNECT_SWAPPED | G_CONNECT_AFTER); g_signal_connect_object (priv->child_view, "button-press-event", G_CALLBACK (child_view_button_press_event), map, G_CONNECT_SWAPPED); g_signal_connect_object (priv->child_view, "button-release-event", G_CALLBACK (child_view_button_release_event), map, G_CONNECT_SWAPPED); g_signal_connect_object (priv->child_view, "motion-notify-event", G_CALLBACK (child_view_motion_notify_event), map, G_CONNECT_SWAPPED); gtk_container_add (GTK_CONTAINER (map), GTK_WIDGET (priv->child_view)); completion = gtk_source_view_get_completion (priv->child_view); gtk_source_completion_block_interactive (completion); gtk_source_map_set_font_name (map, "Monospace 1"); }