Cambios en 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.

La biblioteca de gtkmm 3 se llama libgtkmm-3.0, en vez de libgtkmm-2.4 e instala sus archivos de cabecera en una carpeta versionada similarmente, por lo que su verificación pkg-config debería buscar gtkmm-3.0 en vez de gtkmm-2.4.

gtkmm 3 añadió algunas clases nuevas:

  1. Gtk::AppChooser, Gtk::AppChooserButton, Gtk::AppChooserDialog permiten al usuario seleccionar una aplicación instalada para abrir un determinado tipo de contenido.

  2. Gtk::Grid es un widget contenedor nuevo que eventualmente reemplazará a Gtk::Box y a Gtk::Table. Ordena a sus hijos de acuerdo a sus propiedades en lugar de sus propios detalles de disposición.

  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 también hizo varios cambios pequeños a la API, que probablemente encontrará cuando porte código que usaba gtkmm-2.4. Aquí hay una lista corta:

  1. Gtk::CellLayout, usada por Gtk::IconView, Gtk::TreeView::Column y Gtk::ComboBox ahora tiene una Gtk::CellArea, que puede usarse para especificar más detalles acerca de cómo las CellRenderer se ordenan y alinean.

  2. Gtk::ComboBox ahora deriva de CellLayout, permitiendo una disposición y alineación más fácil de sus Gtk::CellRenderer.

  3. Gtk::Adjustment, IconSet y Gdk::Cursor se usan ahora a través de Glib::RefPtr.

  4. Gtk::Box, Gtk::ButtonBox, Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::Scrollbar y Gtk::Separator ahora derivan de Gtk::Orientable, permitiendo especificar su orientación (vertical u horizontal) sin requerir el uso de una clase derivada como Gtk::HBox.

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView y otros widgets derivan de Scrollable en vez de tener sus propios métodos como get_vadjustment() y su propia señal set_scroll_adjustments.

  6. Gtk::Style y Gtk::Rc se quitaron y se reemplazaron por Gtk::StyleContext, y Gtk::StyleProvider, así como Gtk::CssProvider.

  7. Widget::on_expose_event() se reemplazó por Widget::on_draw(), que asume que cairomm se usa para dibujar, a través del Cairo::Context provisto y no requiere que llame a Cairo::Context::clip().

  8. Gdk::RGBA reemplaza a Color, añadiendo un componente alfa para la opacidad. Colormap se eliminó, junto con su molesto uso para asignar colores.

  9. Gdk::Pixmap y Gdk::Bitmap se eliminaron en favor de Gdk::Pixbuf.

  10. Gdk::Drawable se quitó, y sus métodos se movieron a Gdk::Window.

  11. Ahora se usa std::vector en muchos métodos en vez de los tipos intermedios *Handle para hacer a la API más 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.