# Part II. API Breaks

Devhelp is a quite old piece of software (created in 2001), and as every software, the code evolves during its lifetime. So there are sometimes API breaks. We try to not break applications depending on the Devhelp API. But if we see that a certain API is used nowhere else than the Devhelp application itself (or is dead code), we don't hesitate to break the API to improve the code.

Currently we try to not break Anjuta and gnome-builder. If your application is not listed and depends on the Devhelp API and is Free Software, please speak up.

## 3.29.1 -> 3.29.2

- DhBookManager is now completely empty and entirely deprecated, the minimum amount of API is kept to not break Anjuta. It has been replaced by a more flexible infrastructure: DhProfile, DhSettings and DhBookList. If your application uses only the default libdevhelp widgets it will still work fine – even if you don't adapt the code of the application – because in that case it will use the default DhProfile, which contains the same content as how DhBookManager was implemented.

- Whether a DhBook is enabled/selected is now decoupled from DhBook: `dh_book_get_enabled()` and `dh_book_set_enabled()` have been removed, as well as the `DhBook::enabled` and `DhBook::disabled` signals. For a book to be enabled it now needs to be part of a DhBookList, which is more flexible because there can be several different DhBookList's in parallel.

- The last parameter of dh_keyword_model_filter() has been changed, it is no longer the language (a string, that parameter was deprecated), it is a nullable DhProfile.

- `dh_book_tree_get_selected_book()` has been replaced by dh_book_tree_get_selected_link().

## 3.28.0 -> 3.29.1

- The `DhBookManager:group-by-language` property has been replaced by the DhSettings:group-books-by-language property.

- dh_book_tree_new() now takes a DhProfile parameter.

## 3.27.1 -> 3.27.2

- `dh_book_cmp_by_path()` has been removed (dead code).

- The `DhBookManager::language-enabled` and `DhBookManager::language-disabled` signals have been removed (dead code).

- DhSidebar is now a subclass of GtkGrid, not GtkBox.

- `dh_sidebar_get_selected_book()` has been removed (it was used only inside DhSidebar).

- `dh_book_get_completions()` has been replaced by dh_book_get_completion().

## 3.26.0 -> 3.27.1

- dh_link_new() has been split in two, with dh_link_new_book() to create a DhLink of type DH_LINK_TYPE_BOOK.

- The `dh_link_get_file_name()` function has been removed.

- The `dh_book_get_path()` function has been replaced by dh_book_get_index_file().

- The dh_book_new() constructor now takes a `GFile` argument instead of a path.

- `dh_book_get_name()` has been renamed to dh_book_get_id().

- `dh_book_cmp_by_name()` has been renamed to dh_book_cmp_by_id().

- `dh_link_get_book_name()` has been renamed to dh_link_get_book_title().

- `dh_book_get_keywords()` has been renamed to dh_book_get_links().

- The ownership transfer of the return values of `dh_book_tree_get_selected_book()` and `dh_sidebar_get_selected_book()` have been changed from (transfer none) to (transfer full).

## 3.25.1 -> 3.25.2

- The `page` parameter of dh_link_new() has been removed because it was broken in `dh-parser.c`. The `book` parameter has also been moved, to group related parameters together.

- The `dh_link_get_page_name()` function has been removed because it was broken and used nowhere.

- The `dh_link_get_type_as_string()` function (which took a DhLink parameter) has been removed, it has been replaced by dh_link_type_to_string() which takes a DhLinkType parameter.

## 3.24 -> 3.25.1

- All deprecated APIs have been removed.

- dh-error.h is now private.

- The `DhApp`, `DhAssistant` and `DhWindow` classes are now private. `DhApp` is a subclass of `GtkApplication`, and an application can have only one `GtkApplication` instance, so as-is `DhApp` didn't make sense in the library (what if two different libraries have both a subclass of `GtkApplication`?). Since `DhAssistant` and `DhWindow` depend on `DhApp`, they are now also private.

- The `DhLanguage` class is now private, it's currently used only internally by DhBookManager.

- Due to DhBookManager being now a singleton, there has been the following API changes:

  - `dh_assistant_view_set_book_manager()` has been removed.

  - `dh_keyword_model_set_words()` has been removed.

  - The `DhBookTree:book-manager` property has been removed.

  - API break for dh_book_tree_new().

  - The `DhSidebar:book-manager` property has been removed.

  - The `book_manager` parameter of dh_sidebar_new() is now deprecated.