static void
enable_bookmarks (PlumaView   *view,
		  PlumaPlugin *plugin)
{
	GdkPixbuf *pixbuf;

	pixbuf = get_bookmark_pixbuf (plugin);

	/* Make sure the category pixbuf is set */
	if (pixbuf)
	{
		GtkSourceMarkAttributes *attrs;
		GtkTextBuffer *buffer;
		InsertData *data;

		attrs = gtk_source_mark_attributes_new ();
		buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));

		update_background_color (attrs, GTK_SOURCE_BUFFER(buffer));
		gtk_source_mark_attributes_set_pixbuf (attrs, pixbuf);
		g_object_unref (pixbuf);

		gtk_source_view_set_mark_attributes (GTK_SOURCE_VIEW (view),
						     BOOKMARK_CATEGORY,
						     attrs,
						     BOOKMARK_PRIORITY);

		gtk_source_view_set_show_line_marks (GTK_SOURCE_VIEW (view), TRUE);

		g_signal_connect (buffer,
				  "notify::style-scheme",
				  G_CALLBACK (on_style_scheme_notify),
				  view);

		g_signal_connect_after (buffer,
				        "delete-range",
				        G_CALLBACK (on_delete_range),
				        NULL);

		data = g_slice_new0 (InsertData);

		g_object_set_data_full (G_OBJECT (buffer),
					INSERT_DATA_KEY,
					data,
					(GDestroyNotify) free_insert_data);

		g_signal_connect (buffer,
				  "insert-text",
				  G_CALLBACK (on_insert_text_before),
				  data);

		g_signal_connect (buffer,
				  "begin-user-action",
				  G_CALLBACK (on_begin_user_action),
				  data);

		g_signal_connect (buffer,
				  "end-user-action",
				  G_CALLBACK (on_end_user_action),
				  data);

	}
	else
	{
		g_warning ("Could not set bookmark icon!");
	}
}
Example #2
0
GUIEditor *
gui_editor_new (void)
{
  GUIEditor *self;
  GPtrArray *dirs;
  const gchar * const *current_search_path;
  gchar **lang_spec_search_path;

  self = g_malloc0 (sizeof (GUIEditor));

  self->buffer = gtk_source_buffer_new (NULL);

  self->widget = gtk_source_view_new_with_buffer (self->buffer);

  self->scroll = gtk_scrolled_window_new (NULL, NULL);

  gtk_container_add (GTK_CONTAINER (self->scroll), self->widget);

  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (self->scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

  gui_editor_set_font (self, DEFAULT_EDITOR_FONT);

  self->hltag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER(self->buffer),
											HIGHLIGHT_TAG,
											"background", COLOUR_BG_HL,
											NULL);
	
  self->lang_manager = gtk_source_language_manager_new ();

  self->style_scheme_manager = gtk_source_style_scheme_manager_get_default ();

  dirs = g_ptr_array_new();

  current_search_path = gtk_source_language_manager_get_search_path(self->lang_manager);

  for (; current_search_path != NULL && *current_search_path != NULL; ++current_search_path)
    g_ptr_array_add(dirs, g_strdup(*current_search_path));

  // look for spec file in our own directory
  g_ptr_array_add(dirs, g_strdup(PACKAGE_DATA_DIR));
  // look for spec file in data directory when running from svn
  g_ptr_array_add(dirs, g_strdup("data"));
  // look for spec file in current directory, when running on windows
  g_ptr_array_add(dirs, g_strdup("."));
  g_ptr_array_add(dirs, g_strdup(NULL));

  lang_spec_search_path = (gchar **)g_ptr_array_free(dirs, FALSE);

  gtk_source_language_manager_set_search_path (self->lang_manager, lang_spec_search_path);
  
  gtk_source_style_scheme_manager_append_search_path (self->style_scheme_manager, "data");
  gtk_source_style_scheme_manager_append_search_path (self->style_scheme_manager, ".");

#if GTK_CHECK_VERSION(3, 0, 0)
  GtkSourceMarkAttributes *mark_attributes = gtk_source_mark_attributes_new ();
  gtk_source_mark_attributes_set_icon_name (mark_attributes, "gtk-no");
  gtk_source_view_set_mark_attributes (GTK_SOURCE_VIEW (self->widget), MARKER_BREAKPOINT, mark_attributes, 0);
#else
  GdkPixbuf *pixbuf;
  pixbuf = gui_editor_get_stock_icon (GTK_WIDGET(self->widget), GTK_STOCK_NO, GTK_ICON_SIZE_MENU);
  if (pixbuf)
	{
	  gtk_source_view_set_mark_category_icon_from_pixbuf (GTK_SOURCE_VIEW (self->widget), MARKER_BREAKPOINT, pixbuf);
	  g_object_unref (pixbuf);
	}
#endif

  return self;
}