LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Я всерьёз задумываюсь, что у разработчиков gtk3 течёт крыша.

Например.

Была такая функция gtk_widget_modify_font(), которая меняла шрифт для указанного виджета.

Пытаемся собрать под gtk3 код с этой функцией. Получаем:

info-window.c:79:5: предупреждение: неявная декларация функции «gtk_widget_modify_font»; имелось в виду «gtk_widget_override_font»? [-Wimplicit-function-declaration]
   79 |     gtk_widget_modify_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~
      |     gtk_widget_override_font

При этом код всё равно компилируется и работает.

То есть они убрали функцию из хидера, но оставили символ в библиотеке. И этот символ не заглушка, а рабочая функция.

Но мы хотим сделать по феншую. Открываем документацию:

gtk_widget_modify_font has been deprecated since version 3.0 and should not be used in newly-written code. Use gtk_widget_override_font() instead

То есть, парни, вы тупо переименовали функцию, ЧТОБЫ ЧТО? Эээээ… Ладно. Окей. Правим сорцы:

#if GTK_CHECK_VERSION(3, 0, 0)
    gtk_widget_override_font (text_view, font_desc);
#else
    gtk_widget_modify_font (text_view, font_desc);
#endif

Компилируем:

info-window.c:80:5: предупреждение: «gtk_widget_override_font» устарело [-Wdeprecated-declarations]
   80 |     gtk_widget_override_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~

Да м****ь! Смотрим документацию:

gtk_widget_override_font has been deprecated since version 3.16 and should not be used in newly-written code. This function is not useful in the context of CSS-based rendering. If you wish to change the font a widget uses to render its text you should use a custom CSS style, through an application-specific GtkStyleProvider and a CSS style class.

То есть, понятно, да?

В 3.0. они зачем-то переименовывают функцию, которая что под старым именем что под новым работает абсолютно одинаково.

В 3.16 они объявляют её deprecated, потому что прикладной программист слишком мало задолбался, когда переименовывал функции в своём коде. Пускай-ка теперь берёт и реализует an application-specific GtkStyleProvider! А то ишь, расслабился.

Ну и в gtk4, соответственно, этой функции уже не будет.

(Впрочем, чего не будет в gtk4 — это отдельный анекдот.)

Исходная версия wandrien, :

Я всерьёз задумываюсь, что у разработчиков gtk3 течёт крыша.

Например.

Была такая функция gtk_widget_modify_font(), которая меняла шрифт для указанного виджета.

Пытаемся собрать под gtk3 код с этой функцией. Получаем:

info-window.c:79:5: предупреждение: неявная декларация функции «gtk_widget_modify_font»; имелось в виду «gtk_widget_override_font»? [-Wimplicit-function-declaration]
   79 |     gtk_widget_modify_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~
      |     gtk_widget_override_font

При этом код всё равно компилируется и работает.

То есть они убрали функцию из хидера, но оставили символ в библиотеке. И этот символ не заглушка, а рабочая функция.

Но мы хотим сделать по-феншую. Открываем документацию:

gtk_widget_modify_font has been deprecated since version 3.0 and should not be used in newly-written code. Use gtk_widget_override_font() instead

То есть, парни, вы тупо переименовали функцию, ЧТОБЫ ЧТО? Ладно. Окей. Правим сорцы:

#if GTK_CHECK_VERSION(3, 0, 0)
    gtk_widget_override_font (text_view, font_desc);
#else
    gtk_widget_modify_font (text_view, font_desc);
#endif

Компилируем:

info-window.c:80:5: предупреждение: «gtk_widget_override_font» устарело [-Wdeprecated-declarations]
   80 |     gtk_widget_override_font (text_view, font_desc);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~

Да м****ь! Смотрим документацию:

gtk_widget_override_font has been deprecated since version 3.16 and should not be used in newly-written code. This function is not useful in the context of CSS-based rendering. If you wish to change the font a widget uses to render its text you should use a custom CSS style, through an application-specific GtkStyleProvider and a CSS style class.

То есть, понятно, да?

В 3.0. они зачем-то переименовывают функцию, которая что под старым именем что под новым работает абсолютно одинаково.

В 3.16 они объявляют её deprecated, потому что прикладной программист слишком мало задолбался, когда переименовывал функции в своём коде. Пускай-ка теперь берёт и реализует an application-specific GtkStyleProvider! А то ишь, расслабился.

Ну и в gtk4, соответственно, этой функции уже не будет.

(Впрочем, чего не будет в gtk4 — это отдельный анекдот.)