Author: rpmcruz
Date: Thu Oct 25 17:06:52 2007
New Revision: 41574
URL: http://svn.opensuse.org/viewcvs/yast?rev=41574&view=rev
Log:
* src/ygtkratiobox.h/c, YGProgressBar.cc, YGWidget.cc: bug
fix 309049. A ratio box can request for a very big size when using weights
so that its children are all visible. Added a max_width/height property
to YGtkMinSize and renamed it to YGtkAdjSize. Set it for MultiProgressMeter.
* tests/MultiProgressMeterHuge.ycp: test case.
Added:
trunk/gtk/tests/MultiProgressMeterHuge.ycp
Modified:
trunk/gtk/ChangeLog
trunk/gtk/src/YGDumbTab.cc
trunk/gtk/src/YGPackageSelector.cc
trunk/gtk/src/YGProgressBar.cc
trunk/gtk/src/YGWidget.cc
trunk/gtk/src/YGWidget.h
trunk/gtk/src/ygtkratiobox.c
trunk/gtk/src/ygtkratiobox.h
Modified: trunk/gtk/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/ChangeLog?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/ChangeLog (original)
+++ trunk/gtk/ChangeLog Thu Oct 25 17:06:52 2007
@@ -1,3 +1,12 @@
+2007-10-25 Ricardo Cruz
+
+ * src/ygtkratiobox.h/c, YGProgressBar.cc, YGWidget.cc: bug
+ fix 309049. A ratio box can request for a very big size when using weights
+ so that its children are all visible. Added a max_width/height property
+ to YGtkMinSize and renamed it to YGtkAdjSize. Set it for MultiProgressMeter.
+
+ * tests/MultiProgressMeterHuge.ycp: test case.
+
2007-10-23 JP Rosevear
* src/YGPackageSelector.cc (class YGPatchSelector): Use the more
Modified: trunk/gtk/src/YGDumbTab.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGDumbTab.cc?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/YGDumbTab.cc (original)
+++ trunk/gtk/src/YGDumbTab.cc Thu Oct 25 17:06:52 2007
@@ -32,7 +32,7 @@
// GTK+ keeps the notebook size set to the biggset page. We can't
// do this since this is dynamic, but at least don't let the notebook
// reduce its size.
- ygtk_min_size_set_only_expand (YGTK_MIN_SIZE (m_min_size), TRUE);
+ ygtk_adj_size_set_only_expand (YGTK_ADJ_SIZE (m_adj_size), TRUE);
g_signal_connect (G_OBJECT (getWidget()), "switch-page",
G_CALLBACK (changed_tab_cb), this);
Modified: trunk/gtk/src/YGPackageSelector.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGPackageSelector.cc?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/YGPackageSelector.cc (original)
+++ trunk/gtk/src/YGPackageSelector.cc Thu Oct 25 17:06:52 2007
@@ -1144,9 +1144,9 @@
*remove_button;
selection_buttons_vbox = gtk_vbox_new (TRUE, 80);
// to avoid re-labeling glitches, let it only grow
- buttons_minsize = ygtk_min_size_new (0, 0);
+ buttons_minsize = ygtk_adj_size_new();
gtk_container_add (GTK_CONTAINER (buttons_minsize), selection_buttons_vbox);
- ygtk_min_size_set_only_expand (YGTK_MIN_SIZE (buttons_minsize), TRUE);
+ ygtk_adj_size_set_only_expand (YGTK_ADJ_SIZE (buttons_minsize), TRUE);
install_button = createArrowButton (_("_install"), GTK_ARROW_RIGHT, &m_install_label);
remove_button = createArrowButton (_("_remove"), GTK_ARROW_LEFT, &m_remove_label);
Modified: trunk/gtk/src/YGProgressBar.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGProgressBar.cc?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/YGProgressBar.cc (original)
+++ trunk/gtk/src/YGProgressBar.cc Thu Oct 25 17:06:52 2007
@@ -137,6 +137,8 @@
maxValue (i), TRUE, TRUE, 0);
}
+ ygtk_adj_size_set_max (YGTK_ADJ_SIZE (m_adj_size), horizontal ? 200 : 0,
+ horizontal ? 0 : 200);
gtk_widget_show_all (getWidget());
}
Modified: trunk/gtk/src/YGWidget.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGWidget.cc?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/YGWidget.cc (original)
+++ trunk/gtk/src/YGWidget.cc Thu Oct 25 17:06:52 2007
@@ -30,12 +30,12 @@
m_widget = GTK_WIDGET (g_object_new_valist (type, property_name, args));
if (type == GTK_TYPE_WINDOW)
- m_min_size = m_widget;
+ m_adj_size = m_widget;
else {
- m_min_size = ygtk_min_size_new (0, 0);
- g_object_ref_sink (G_OBJECT (m_min_size));
- gtk_widget_show (m_min_size);
- gtk_container_add (GTK_CONTAINER (m_min_size), m_widget);
+ m_adj_size = ygtk_adj_size_new();
+ g_object_ref_sink (G_OBJECT (m_adj_size));
+ gtk_widget_show (m_adj_size);
+ gtk_container_add (GTK_CONTAINER (m_adj_size), m_widget);
}
y_widget->setWidgetRep ((void *) this);
@@ -56,8 +56,8 @@
YGWidget::~YGWidget()
{
IMPL
- gtk_widget_destroy (m_min_size);
- g_object_unref (G_OBJECT (m_min_size));
+ gtk_widget_destroy (m_adj_size);
+ g_object_unref (G_OBJECT (m_adj_size));
}
void YGWidget::show()
@@ -121,16 +121,13 @@
void YGWidget::setBorder (unsigned int border)
{
IMPL
- gtk_container_set_border_width (GTK_CONTAINER (m_min_size), border);
+ gtk_container_set_border_width (GTK_CONTAINER (m_adj_size), border);
}
void YGWidget::setMinSize (unsigned int width, unsigned int height)
{
IMPL
- if (width)
- ygtk_min_size_set_width (YGTK_MIN_SIZE (m_min_size), width);
- if (height)
- ygtk_min_size_set_height (YGTK_MIN_SIZE (m_min_size), height);
+ ygtk_adj_size_set_min (YGTK_ADJ_SIZE (m_adj_size), width, height);
}
void YGWidget::setMinSizeInChars (unsigned int width, unsigned int height)
Modified: trunk/gtk/src/YGWidget.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/YGWidget.h?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/YGWidget.h (original)
+++ trunk/gtk/src/YGWidget.h Thu Oct 25 17:06:52 2007
@@ -28,7 +28,7 @@
void show();
// containers should use this call rather than getWidget()
- GtkWidget *getLayout() { return m_min_size; }
+ GtkWidget *getLayout() { return m_adj_size; }
// Get the YGWidget associated with a YWidget
static YGWidget *get (YWidget *y_widget);
@@ -41,7 +41,7 @@
void emitEvent(YEvent::EventReason reason, bool if_notify = true,
bool if_not_pending = false, bool immediate = true);
- // Aesthicts
+ // Aesthetics
void setBorder (unsigned int border); // in pixels
void setMinSize (unsigned int min_width, unsigned int min_height);
void setMinSizeInChars (unsigned int min_width, unsigned int min_height);
@@ -57,14 +57,11 @@
protected:
GtkWidget *m_widget; // associated GtkWidget -- use getWidget()
YWidget *m_y_widget; // associated YWidget
- GtkWidget *m_min_size; // installed on m_widget, allows setting a min size
+ GtkWidget *m_adj_size; // installed on m_widget, allows better size constrains
void construct (YWidget *y_widget, YGWidget *parent,
bool show, GType type,
const char *property_name, va_list args);
-
- // parameters to set the layout prettier
- int m_min_width, m_min_height;
};
/*
Modified: trunk/gtk/src/ygtkratiobox.c
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkratiobox.c?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/ygtkratiobox.c (original)
+++ trunk/gtk/src/ygtkratiobox.c Thu Oct 25 17:06:52 2007
@@ -433,17 +433,17 @@
widget_class->size_allocate = ygtk_ratio_vbox_size_allocate;
}
-//** YGtkMinSize
+//** YGtkAdjSize
-G_DEFINE_TYPE (YGtkMinSize, ygtk_min_size, GTK_TYPE_BIN)
+G_DEFINE_TYPE (YGtkAdjSize, ygtk_adj_size, GTK_TYPE_BIN)
-static void ygtk_min_size_init (YGtkMinSize *min_size)
+static void ygtk_adj_size_init (YGtkAdjSize *adj_size)
{
- GTK_WIDGET_SET_FLAGS (min_size, GTK_NO_WINDOW);
- gtk_widget_set_redraw_on_allocate (GTK_WIDGET (min_size), FALSE);
+ GTK_WIDGET_SET_FLAGS (adj_size, GTK_NO_WINDOW);
+ gtk_widget_set_redraw_on_allocate (GTK_WIDGET (adj_size), FALSE);
}
-static void ygtk_min_size_size_request (GtkWidget *widget,
+static void ygtk_adj_size_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
GtkWidget *child = GTK_BIN (widget)->child;
@@ -454,18 +454,23 @@
requisition->width += border * 2;
requisition->height += border * 2;
- YGtkMinSize *min_size = YGTK_MIN_SIZE (widget);
- requisition->width = MAX (requisition->width, min_size->min_width);
- requisition->height = MAX (requisition->height, min_size->min_height);
-
- if (min_size->only_expand) {
- min_size->min_width = requisition->width;
- min_size->min_height = requisition->height;
+ YGtkAdjSize *adj_size = YGTK_ADJ_SIZE (widget);
+ requisition->width = MAX (requisition->width, adj_size->min_width);
+ requisition->height = MAX (requisition->height, adj_size->min_height);
+
+ if (adj_size->max_width)
+ requisition->width = MIN (requisition->width, adj_size->max_width);
+ if (adj_size->max_height)
+ requisition->height = MIN (requisition->height, adj_size->max_height);
+
+ if (adj_size->only_expand) {
+ adj_size->min_width = requisition->width;
+ adj_size->min_height = requisition->height;
}
}
}
-static void ygtk_min_size_size_allocate (GtkWidget *widget,
+static void ygtk_adj_size_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkWidget *child = GTK_BIN (widget)->child;
@@ -478,39 +483,38 @@
child_alloc.height -= border * 2;
gtk_widget_size_allocate (child, &child_alloc);
}
- GTK_WIDGET_CLASS (ygtk_min_size_parent_class)->size_allocate (widget, allocation);
+ GTK_WIDGET_CLASS (ygtk_adj_size_parent_class)->size_allocate (widget, allocation);
}
-GtkWidget* ygtk_min_size_new(guint min_width, guint min_height)
+GtkWidget* ygtk_adj_size_new (void)
{
- YGtkMinSize *min_size = g_object_new (YGTK_TYPE_MIN_SIZE, NULL);
- ygtk_min_size_set_width (min_size, min_width);
- ygtk_min_size_set_height (min_size, min_height);
- return GTK_WIDGET (min_size);
+ return GTK_WIDGET (g_object_new (YGTK_TYPE_ADJ_SIZE, NULL));
}
-void ygtk_min_size_set_width (YGtkMinSize *min_size, guint min_width)
+void ygtk_adj_size_set_min (YGtkAdjSize *adj_size, guint min_width, guint min_height)
{
- min_size->min_width = min_width;
+ adj_size->min_width = min_width;
+ adj_size->min_height = min_height;
}
-void ygtk_min_size_set_height (YGtkMinSize *min_size, guint min_height)
+void ygtk_adj_size_set_max (YGtkAdjSize *adj_size, guint max_width, guint max_height)
{
- min_size->min_height = min_height;
+ adj_size->max_width = max_width;
+ adj_size->max_height = max_height;
}
-void ygtk_min_size_set_only_expand (YGtkMinSize *min_size, gboolean only_expand)
+void ygtk_adj_size_set_only_expand (YGtkAdjSize *adj_size, gboolean only_expand)
{
- min_size->only_expand = only_expand;
+ adj_size->only_expand = only_expand;
}
-static void ygtk_min_size_class_init (YGtkMinSizeClass *klass)
+static void ygtk_adj_size_class_init (YGtkAdjSizeClass *klass)
{
- ygtk_min_size_parent_class = g_type_class_peek_parent (klass);
+ ygtk_adj_size_parent_class = g_type_class_peek_parent (klass);
GtkWidgetClass* widget_class = GTK_WIDGET_CLASS (klass);
- widget_class->size_request = ygtk_min_size_size_request;
- widget_class->size_allocate = ygtk_min_size_size_allocate;
+ widget_class->size_request = ygtk_adj_size_size_request;
+ widget_class->size_allocate = ygtk_adj_size_size_allocate;
}
//** YGtkScrolledWindow
Modified: trunk/gtk/src/ygtkratiobox.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/src/ygtkratiobox.h?rev=41574&r1=41573&r2=41574&view=diff
==============================================================================
--- trunk/gtk/src/ygtkratiobox.h (original)
+++ trunk/gtk/src/ygtkratiobox.h Thu Oct 25 17:06:52 2007
@@ -153,50 +153,49 @@
G_END_DECLS
#endif /* YGTK_RATIO_BOX_H */
-/* YGtkMinSize is container where a widget may be installed so that one can
- set a minimum size to it. */
-#ifndef YGTK_MIN_SIZE_H
-#define YGTK_MIN_SIZE_H
+/* YGtkAdjSize container allows for better fine grained size constrains. */
+#ifndef YGTK_ADJ_SIZE_H
+#define YGTK_ADJ_SIZE_H
#include
G_BEGIN_DECLS
-#define YGTK_TYPE_MIN_SIZE (ygtk_min_size_get_type ())
-#define YGTK_MIN_SIZE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- YGTK_TYPE_MIN_SIZE, YGtkMinSize))
-#define YGTK_MIN_SIZE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
- YGTK_TYPE_MIN_SIZE, YGtkMinSizeClass))
-#define YGTK_IS_MIN_SIZE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- YGTK_TYPE_MIN_SIZE))
-#define YGTK_IS_MIN_SIZE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
- YGTK_TYPE_MIN_SIZE))
-#define YGTK_MIN_SIZE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- YGTK_TYPE_MIN_SIZE, YGtkMinSizeClass))
+#define YGTK_TYPE_ADJ_SIZE (ygtk_adj_size_get_type ())
+#define YGTK_ADJ_SIZE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ YGTK_TYPE_ADJ_SIZE, YGtkAdjSize))
+#define YGTK_ADJ_SIZE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ YGTK_TYPE_ADJ_SIZE, YGtkAdjSizeClass))
+#define YGTK_IS_ADJ_SIZE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ YGTK_TYPE_ADJ_SIZE))
+#define YGTK_IS_ADJ_SIZE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ YGTK_TYPE_ADJ_SIZE))
+#define YGTK_ADJ_SIZE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ YGTK_TYPE_ADJ_SIZE, YGtkAdjSizeClass))
-typedef struct _YGtkMinSize
+typedef struct _YGtkAdjSize
{
GtkBin parent;
// members
- guint min_width, min_height;
+ guint min_width, min_height, max_width, max_height;
gboolean only_expand;
-} YGtkMinSize;
+} YGtkAdjSize;
-typedef struct _YGtkMinSizeClass
+typedef struct _YGtkAdjSizeClass
{
GtkBinClass parent_class;
-} YGtkMinSizeClass;
+} YGtkAdjSizeClass;
-GType ygtk_min_size_get_type (void) G_GNUC_CONST;
-GtkWidget* ygtk_min_size_new (guint min_width, guint min_height);
+GType ygtk_adj_size_get_type (void) G_GNUC_CONST;
+GtkWidget* ygtk_adj_size_new (void);
-void ygtk_min_size_set_width (YGtkMinSize *min_size, guint min_width);
-void ygtk_min_size_set_height (YGtkMinSize *min_size, guint min_height);
+void ygtk_adj_size_set_min (YGtkAdjSize *adj_size, guint min_width, guint min_height);
+void ygtk_adj_size_set_max (YGtkAdjSize *adj_size, guint max_width, guint max_height);
/* Only allow the child to grow (ie. to ask for bigger sizes). */
-void ygtk_min_size_set_only_expand (YGtkMinSize *min_size, gboolean only_expand);
+void ygtk_adj_size_set_only_expand (YGtkAdjSize *adj_size, gboolean only_expand);
G_END_DECLS
-#endif /*YGTK_MIN_SIZE_H*/
+#endif /*YGTK_ADJ_SIZE_H*/
/* YGtkScrolledWindow gives some a more fine-grained automatic scroll policy.
It allows the user to specify from which size scrolling should be applied. */
Added: trunk/gtk/tests/MultiProgressMeterHuge.ycp
URL: http://svn.opensuse.org/viewcvs/yast/trunk/gtk/tests/MultiProgressMeterHuge.ycp?rev=41574&view=auto
==============================================================================
--- trunk/gtk/tests/MultiProgressMeterHuge.ycp (added)
+++ trunk/gtk/tests/MultiProgressMeterHuge.ycp Thu Oct 25 17:06:52 2007
@@ -0,0 +1,39 @@
+// Simple example for MultiProgressMeter
+{
+ if ( ! UI::HasSpecialWidget(`HMultiProgressMeter ) )
+ {
+ UI::OpenDialog(
+ `VBox(
+ `Label("Error: This UI doesn't support the MultiProgressMeter widget!"),
+ `PushButton(`opt(`default), "&OK")
+ )
+ );
+ UI::UserInput();
+ UI::CloseDialog();
+
+ return;
+ }
+
+
+ UI::OpenDialog(
+ `VBox(
+ `HMultiProgressMeter(`id(`prog), [ 10000, 200, 500, 20, 100 ] ),
+ `PushButton(`opt(`default), "&Ok" )
+ )
+ );
+
+ UI::ChangeWidget(`prog, `Values, [ 1000, 200, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 800, 200, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 500, 200, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 200, 200, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 200, 500, 20, 100 ] ); UI::UserInput();
+
+ UI::ChangeWidget(`prog, `Values, [ 0, 100, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 20, 500, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 0, 500, 20, 100 ] ); UI::UserInput();
+
+ UI::ChangeWidget(`prog, `Values, [ 0, 0, 400, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 0, 300, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 0, 200, 20, 100 ] ); UI::UserInput();
+ UI::ChangeWidget(`prog, `Values, [ 0, 0, 100, 20, 100 ] ); UI::UserInput();
+}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org