Mudanças na gtkmm 3

gtkmm-3.0 is an old version of the gtkmm API that installs in parallel with the still older gtkmm-2.4 API and the new gtkmm-4.0 API. The last version of the gtkmm-2.4 API was gtkmm 2.24. gtkmm 3 has no major fundamental differences to gtkmm 2 but does make several small changes that were not possible while maintaining binary compatibility. If you never used the gtkmm-2.4 API then you can safely ignore this chapter.

A biblioteca gtkmm 3 é chamada libgtkmm-3.0 em vez de libgtkmm-2.4 e instala seus cabeçalhos em um diretório com a mesma versão, assim sua verificação pkg-config, deve pedir por gtkmm-3.0 em vez de gtkmm-2.4.

gtkmm 3 adicionou algumas novas classes:

  1. Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog permite ao usuário selecionar uma aplicação instalada para abrir um determinado tipo de conteúdo.

  2. Gtk::Grid is a new container widget that will eventually replace Gtk::Box and Gtk::Table. It arranges its children according to properties of those children rather than its own layout details.

  3. Gtk::Switch displays On/Off states more explictly than Gtk::CheckButton. It may be useful, for instance, when allowing users to activate hardware.

gtkmm 3 também fez várias pequenas mudanças na API, que provavelmente você encontrará quando portar o código usado na gtkmm-2.4. Aqui está uma pequena lista:

  1. Gtk::CellLayout, utilizado pela Gtk::IconView, Gtk::TreeView::Column e Gtk::ComboBox, agora tem uma Gtk::CellArea que pode ser usado para especificar mais detalhes sobre como a CellRenderer são dispostos e alinhados.

  2. Gtk::ComboBox agora deriva de CellLayout, permitindo uma fácil distribuição e alinhamento das suas Gtk::CellRenderer.

  3. Gtk::Adjustment, IconSet e Gdk::Cursor agora são usados através de Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar e Gtk::Separator agora derivam de Gtk::Orientable, permitindo que sua orientação (vertical ou horizontal) seja especificado sem exigir o uso de uma classe derivada, tal como Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView e outros widgets derivam de Scrollable em vez de ter seus próprios métodos, como get_vadjustment() e ao invés de ter seu próprio sinal set_scroll_adjustments.

  6. Gtk::Style e Gtk::Rc foram removidos, substituídos por Gtk::StyleContext, e Gtk::StyleProvider, tal como Gtk::CssProvider.

  7. Widget::on_expose_event() foi substituido por Widget::on_draw(), que assume que cairomm é utilizado para desenho, por meio do Cairo::Context e não requer que você chame Cairo::Context::clip().

  8. Gdk::RGBA substitui Color, adicionando um componente alfa para a opacidade. Colormap foi removido, juntamente com o seu uso difícil de alocar cores.

  9. Gdk::Pixmap e Gdk::Bitmap foram removidos em favor de Gdk::Pixbuf.

  10. Gdk::Drawable foi removido, com seus método movidos para Gdk::Window.

  11. Agora usamos std::vector em vários métodos, em vez do tipo intermediário *Handle para fazer a API mais clara.

All deprecated API was removed in gtkmm 3.0, though there have been new deprecations in later gtkmm 3.x versions.

As a first step to porting your source code to gtkmm-3.0 you should probably ensure that your application builds with the deprecated gtkmm-2.4 API disabled, by defining macro such as GTKMM_DISABLE_DEPRECATED. There are some autotools macros that can help with this by defining them optionally at build time. See the gtkmm 3 porting wiki page for more details.