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);
}
Esempio n. 3
0
	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();
	}
Esempio n. 4
0
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);
}
Esempio n. 6
0
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;
			}
		}
	}
}
Esempio n. 7
0
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);
        }
    }
}
Esempio n. 8
0
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);
}
Esempio n. 9
0
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");
}