Commit 4f3bb329 authored by Luca Bacci's avatar Luca Bacci

Use natural size in Gtk::ScrolledWindows for Gtk >= 3.22 (!39)

Before Gtk 3.22 GtkScrolledWindow propagated natural size to its child
and so on to descendants. In Gtk 3.22 this was changed to always
request the minimum size. This was done because it is believed to be
a safer default (gives a better behaviour) in case of dynamic content
inside the scrolled window, that is, content that may change allocated
size. [1][2]

When the scrolled window content is not dynamic the natural size is
preferable because it gives a better looking layout and without any
downside.

In the case of GParted content is not dynamic, so request the scrolled
windows to allocate children at natural sizes for Gtk >= 3.22.

The benefits of natural size allocation are evident in presence of
wrapping labels (for example inside the "Partition Info" dialog), that
with the minimum size request likely end up taking a very small width.

References:

[1] Gtk commit from 2016-08-31:
    GtkScrolledWindow: Make propagation of natural child sizes optional
    GNOME/gtk@0984d162
    "Making propagation of child natural sizes mandatory (or default, even) was
    evidently a mistake as this causes dynamic content in a scrolled window
    to resize it's parent when the scrolled window is competing for space
    with an adjacent widget."

[2] Gtk 3.22 Reference Documentation - gtk_scrolled_window_set_propagate_natural_width
    https://developer.gnome.org/gtk3/3.22/GtkScrolledWindow.html#gtk-scrolled-window-set-propagate-natural-width

[3] Gtkmm 3.21.6 NEWS
    https://gitlab.gnome.org/GNOME/gtkmm/blob/3.21.6/NEWS
    "ScrolledWindow: Added get/set_propagate_natural_height/width() and the properties."

Closes !39 - Always request natural size inside Gtk::ScrolledWindows
parent 00862a2f
Pipeline #79107 passed with stages
in 41 minutes and 26 seconds
......@@ -242,6 +242,17 @@ if test "x$need_cxx_compile_stdcxx_11" = xyes; then
fi
dnl Check for gtkmm >= 3.22 to determine availability of Gtk::ScrolledWindow::set_propagate_natural_width().
AC_MSG_CHECKING([for Gtk::ScrolledWindow::set_propagate_natural_width() method])
PKG_CHECK_EXISTS(
[gtkmm-3.0 >= 3.22.0],
[AC_DEFINE([GTKMM_HAVE_GTK_SCROLLED_WINDOW_SET_PROPAGATE_NATURAL_WIDTH], 1,
[Define to 1 if gtkmm provides Gtk::ScrolledWindow::set_propagate_natural_width() method.])
AC_MSG_RESULT([yes])
],
[AC_MSG_RESULT([no])]
)
dnl Definitions for building of and with gtest. Gets flags for pthread via earlier
dnl gthread package check.
......
......@@ -52,6 +52,9 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition ) : pa
info_msg_vbox.set_orientation(Gtk::ORIENTATION_VERTICAL);
info_msg_vbox .set_border_width( 6 ) ;
info_scrolled .set_policy( Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC ) ;
#if GTKMM_HAVE_GTK_SCROLLED_WINDOW_SET_PROPAGATE_NATURAL_WIDTH
info_scrolled.set_propagate_natural_width(true);
#endif
info_scrolled .add( info_msg_vbox ) ;
// As Gtk::Box widget info_msg_vbox doesn't have a native scrolling capability a
// Gtk::Viewport is automatically created to contain it when it is added to the
......
......@@ -658,6 +658,9 @@ void Win_GParted::init_hpaned_main()
scrollwindow = manage( new Gtk::ScrolledWindow() ) ;
scrollwindow ->set_shadow_type( Gtk::SHADOW_ETCHED_IN );
scrollwindow ->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC );
#if GTKMM_HAVE_GTK_SCROLLED_WINDOW_SET_PROPAGATE_NATURAL_WIDTH
scrollwindow->set_propagate_natural_width(true);
#endif
hpaned_main .pack1( *scrollwindow, true, true );
scrollwindow ->add( vbox_info );
......@@ -666,7 +669,10 @@ void Win_GParted::init_hpaned_main()
scrollwindow = manage( new Gtk::ScrolledWindow() ) ;
scrollwindow ->set_shadow_type( Gtk::SHADOW_ETCHED_IN );
scrollwindow ->set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC );
#if GTKMM_HAVE_GTK_SCROLLED_WINDOW_SET_PROPAGATE_NATURAL_WIDTH
scrollwindow->set_propagate_natural_width(true);
#endif
//connect signals and add treeview_detail
treeview_detail .signal_partition_selected .connect( sigc::mem_fun( this, &Win_GParted::on_partition_selected ) );
treeview_detail .signal_partition_activated .connect( sigc::mem_fun( this, &Win_GParted::on_partition_activated ) );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment