rendered paste body#include <gtk/gtk.h>static void scrolled_window_set_size (GtkScrolledWindow *sw, GtkWidget *rqWidget, double dcxMaxScreenPercent, double dcyMaxScreenPercent) ;int main (int argc, char **argv) { int Nix, Nix1 ; GtkWidget *tbl = NULL, *sw = NULL, *dialog = NULL ; char *lbl = NULL ; gtk_init (&argc, &argv) ; dialog = gtk_dialog_new () ; tbl = g_object_new (GTK_TYPE_TABLE, "visible", TRUE, NULL) ; for (Nix = 0 ; Nix < 16 ; Nix++) for (Nix1 = 0 ; Nix1 < 10 ; Nix1++, g_free (lbl)) gtk_table_attach (GTK_TABLE (tbl), g_object_new (GTK_TYPE_LABEL, "visible", TRUE, "label", lbl = g_strdup_printf ("Label[%d][%d]", Nix, Nix1), NULL), Nix1, Nix1 + 1, Nix, Nix + 1, GTK_FILL, GTK_FILL, 10, 10) ; sw = g_object_new (GTK_TYPE_SCROLLED_WINDOW, "visible", TRUE, "hscrollbar-policy", GTK_POLICY_AUTOMATIC, "vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL) ; gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), tbl) ; gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), sw) ; /* The hack */ scrolled_window_set_size (GTK_SCROLLED_WINDOW (sw), tbl, 0.95, 0.95) ; gtk_dialog_run (GTK_DIALOG (dialog)) ; return 0 ; }static void scrolled_window_set_size (GtkScrolledWindow *sw, GtkWidget *rqWidget, double dcxMaxScreenPercent, double dcyMaxScreenPercent) { GtkPolicyType hpol, vpol ; GList *llChildren = gtk_container_get_children (GTK_CONTAINER (sw)) ; int xScr, yScr, cxScr, cyScr, depth ; GtkRequisition rq = {-1, -1} ; if (NULL == llChildren) return ; gtk_scrolled_window_get_policy (sw, &hpol, &vpol) ; gtk_scrolled_window_set_policy (sw, GTK_POLICY_NEVER, GTK_POLICY_NEVER) ; gdk_window_get_geometry (gdk_get_default_root_window (), &xScr, &yScr, &cxScr, &cyScr, &depth) ; gtk_widget_size_request (rqWidget, &rq) ; gtk_widget_set_size_request (GTK_WIDGET (llChildren->data), MIN (cxScr * dcxMaxScreenPercent, rq.width), MIN (cyScr * dcyMaxScreenPercent, rq.height)) ; gtk_scrolled_window_set_policy (sw, hpol, vpol) ; }