X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkfixed.c;h=14c35afc84e18048d95cba46ae9b00afb94cf23c;hb=3c8e1c92a85b2e41161698f141747ced2c574f32;hp=cf9fb20dfe8c5a63b65de1da8149fe54bbf80e9e;hpb=2f3e51389e485ecb888e3102f5bebc0086d5abc5;p=~andy%2Fgtk diff --git a/gtk/gtkfixed.c b/gtk/gtkfixed.c index cf9fb20df..14c35afc8 100644 --- a/gtk/gtkfixed.c +++ b/gtk/gtkfixed.c @@ -12,9 +12,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ /* @@ -24,6 +22,55 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ +/** + * SECTION:gtkfixed + * @Short_description: A container which allows you to position + * widgets at fixed coordinates + * @Title: GtkFixed + * + * The #GtkFixed widget is a container which can place child widgets + * at fixed positions and with fixed sizes, given in pixels. #GtkFixed + * performs no automatic layout management. + * + * For most applications, you should not use this container! It keeps + * you from having to learn about the other GTK+ containers, but it + * results in broken applications. With #GtkFixed, the following + * things will result in truncated text, overlapping widgets, and + * other display bugs: + * + * + * Themes, which may change widget sizes. + * + * + * Fonts other than the one you used to write the app will of course + * change the size of widgets containing text; keep in mind that + * users may use a larger font because of difficulty reading the + * default, or they may be using Windows or the framebuffer port of + * GTK+, where different fonts are available. + * + * + * Translation of text into other languages changes its size. Also, + * display of non-English text will use a different font in many + * cases. + * + * + * + * In addition, the fixed widget can't properly be mirrored in + * right-to-left languages such as Hebrew and Arabic. i.e. normally + * GTK+ will flip the interface to put labels to the right of the + * thing they label, but it can't do that with #GtkFixed. So your + * application will not be usable in right-to-left languages. + * + * Finally, fixed positioning makes it kind of annoying to add/remove + * GUI elements, since you have to reposition all the other + * elements. This is a long-term maintenance problem for your + * application. + * + * If you know none of these things are an issue for your application, + * and prefer the simplicity of #GtkFixed, by all means use the + * widget. But you should be aware of the tradeoffs. + */ + #include "config.h" #include "gtkfixed.h" @@ -132,6 +179,13 @@ gtk_fixed_init (GtkFixed *fixed) fixed->priv->children = NULL; } +/** + * gtk_fixed_new: + * + * Creates a new #GtkFixed. + * + * Returns: a new #GtkFixed. + */ GtkWidget* gtk_fixed_new (void) { @@ -158,6 +212,15 @@ get_child (GtkFixed *fixed, return NULL; } +/** + * gtk_fixed_put: + * @fixed: a #GtkFixed. + * @widget: the widget to add. + * @x: the horizontal position to place the widget at. + * @y: the vertical position to place the widget at. + * + * Adds a widget to a #GtkFixed container at the given position. + */ void gtk_fixed_put (GtkFixed *fixed, GtkWidget *widget, @@ -210,6 +273,15 @@ gtk_fixed_move_internal (GtkFixed *fixed, gtk_widget_queue_resize (GTK_WIDGET (fixed)); } +/** + * gtk_fixed_move: + * @fixed: a #GtkFixed. + * @widget: the child widget. + * @x: the horizontal position to move the widget to. + * @y: the vertical position to move the widget to. + * + * Moves a child of a #GtkFixed container to the given position. + */ void gtk_fixed_move (GtkFixed *fixed, GtkWidget *widget, @@ -307,10 +379,10 @@ gtk_fixed_realize (GtkWidget *widget) window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gtk_widget_set_window (widget, window); - gdk_window_set_user_data (window, widget); + gtk_widget_register_window (widget, window); - gtk_widget_style_attach (widget); - gtk_style_set_background (gtk_widget_get_style (widget), window, GTK_STATE_NORMAL); + gtk_style_context_set_background (gtk_widget_get_style_context (widget), + window); } } @@ -452,8 +524,6 @@ gtk_fixed_remove (GtkContainer *container, break; } - - children = children->next; } } @@ -468,9 +538,11 @@ gtk_fixed_forall (GtkContainer *container, GtkFixedChild *child; GList *children; - for (children = priv->children; children; children = children->next) + children = priv->children; + while (children) { child = children->data; + children = children->next; (* callback) (child->widget, callback_data); }