im.pidgin.pidgin.2.1.0

Gabriel Schulhof nix at go-nix.ca
Mon May 28 16:14:02 EDT 2007


Hi!

On Mon, 2007-05-28 at 03:39 -0500, Richard Laager wrote:
> Gabriel: I know you're on this list... if you have any other changes
> that add public functions, please let me know so we can deal with those
> for 2.1.0 as well.

Well, there's the stuff about adding scrollbars to containers. It
currently looks like this:

#ifdef USE_HILDON
/**
 * Places a widget inside a GtkScrolledWindow. The function is defined
as a pass-through so as to be able to
 * accomodate different modifications to a container depending on need.
 *
 * In Hildon's case, its functionality is twofold:
 *
 * 1. It will at least place container inside a GtkScrolledWindow (with
policy set to @c GTK_POLICY_AUTOMATIC)
 *    and return the GtkScrolledWindow.
 *
 * 2. If toplevel is given, then it attempts to deal with the bug
whereby a GtkScrolledWindow
 *    with @c GTK_POLICY_AUTOMATIC, when placed inside a non-resizable
GtkWindow (such as a GtkDialog), tends to
 *    become squashed to its minimum size. This function compensates by
initially setting the policy to
 *    @c GTK_POLICY_NEVER, and overriding the GtkScrolledWindow size
request to include the size of the scrollbars
 *    and viewport borders. Upon showing the GtkScrolledWindow, the
policy is re-set to @c GTK_POLICY_AUTOMATIC.
 *
 *    This will only work on Maemo, because its window manager ensures
that no portion of a dialog is ever shown
 *    off-screen, whereas desktop window managers will give the dialog
all the size it asks for, even if that means
 *    that it won't fit on the screen.
 *
 * @param container The container to make scrollable.
 * @param toplevel  The toplevel widget (non-resizable window or
dialog), or @c NULL
 * @return a GtkScrolledWindow containing a GtkViewport with the widget
passed in.
 */
GtkWidget *pidgin_make_container_scrollable(GtkWidget
*container,GtkWidget *toplevel);
#else /* !USE_HILDON */
# define pidgin_make_container_scollable(container,toplevel) container
#endif /* USE_HILDON */

2 issues related to this:

1. I know you've asked me to come up with a more generic name for a
function that takes a container, modifies it, and spits out a (possible
different) container with the idea that it "prepares" it for being shown
as part of a larger set of widgets. I came up with
"pidgin_prepare_top_container", but it doesn't sound right.

2. This functionality might be too tablet-specific to warrant inclusion
in gtkutils.[ch], and we /did/ discuss the possibility of adding a .[ch]
pair containing functions of the form _pidgin_* (i.e., not public API)
which are tablet-specific. This might be a candidate for such a file.
Unfortunately, this would also mean re-introducing uglyness of the form

#ifdef USE_HILDON
gtk_box_pack_start(box, container, TRUE, TRUE, 0);
#else /* !USE_HILDON */
gtk_box_pack_start(box, _pidgin_make_container_scrollable(container,
dialog), TRUE, TRUE, 0);
#endif /* USE_HILDON */

everywhere there's a container full of widgets that needs scrolling on a
tablet, such as every gtkprefs notebook page, new/edit account details,
Add Buddy, Add Chat, plugin preferences, et. al.

Maybe someone can pitch in $0.02's worth of thoughts on how better to
deal with this.

TIA,



Gabriel




More information about the Devel mailing list