Tue Jan 12 13:47:07 1999 Tim Janik <timj@gtk.org>
* reworked the redrawing heuristics somewhat, this fixed a bunch of
existing redrawing problems and majorly reduces overall redrawing needs
during normal operation. basically we now only queue redraws when
neccessary and much rely on the draw_area coalescing code in gtkwidget.c
to optimize the queued portions. widgets will now upon reallocation only
get redrawed if their allocation has changed. upon hide/show only the
area allocated by the child will be queued for the parent, this has the
side effect that parents which change their appearance in dependance on
the numer of visible children have to keep track of their children's
visiblity and eventually fully redraw themselves. this is a minor
constrain with great benefits in terms of redraw reduction, and only got
triggered by the notebook widget.
* gtk/gtkwidget.c:
(gtk_widget_queue_clear): don't bother if width and height == 0.
(gtk_widget_queue_clear_child): new static function to queue a redraw of
the area obscured by a child on a parent.
(gtk_widget_queue_resize): queue_clear the widget if it is drawable.
(gtk_widget_show): queue resize on the widget before showing.
(gtk_widget_hide): queue resize on the widget after hiding.
(gtk_widget_map): queue_draw the widget after mapping.
(gtk_widget_unmap): queue_clear_child the widget.
(gtk_widget_size_allocate): queue_clear_child and queue_draw if the
widget's allocation changed.
(gtk_widget_unparent): queue_clear_child so the parent redraws obscured
portions.
(gtk_widget_real_show):
(gtk_widget_real_hide):
(gtk_widget_real_map):
(gtk_widget_real_unmap):
(gtk_widget_real_size_allocate): don't bother with redraw queueing,
descendants that override these functions don't do either and we handle
all redrawing/resizing related stuff before or after the signal emission
now.
* gtk/gtkcontainer.c:
(gtk_container_resize_children): don't bother about redrawing anymore
since gtk_widget_size_allocate handles that for us now.
* gtk/gtknotebook.h:
* gtk/gtknotebook.c:
added a flag have_visible_child to indicate whether we need to draw
non child related portions at all, e.g. shadows etc.
(gtk_notebook_draw): if have_visible_child changed, do a full paint
instead of updating a small area only.
Mon Jan 11 20:44:35 1999 Tim Janik <timj@gtk.org>
* gtk/gtkstyle.c: changed gtk_style_apply_default_pixmap to
gtk_style_apply_default_background which takes an extra argument
copy_area to determine NO_WINDOW widget pixmap copying.
changed callers accordingly.
* gtk/gtktogglebutton.c:
(gtk_toggle_size_allocate):
(gtk_toggle_button_expose):
(gtk_toggle_button_paint): avoid messing with our parent's window if
toggle_button->draw_indicator == TRUE and we are a NO_WINDOW widget.
* gtk/gtkcheckbutton.c (gtk_real_check_button_draw_indicator): draw
the draw_indicator with GTK_STATE_ACTIVE if the toggle button is active.
* gtk/check-n.xpm:
* gtk/check-y.xpm:
* gtk/testgtkrc: set pixmaps for ACTIVE and NORMAL check button
bg_pixmaps.
Mon Jan 11 15:23:32 1999 Tim Janik <timj@gtk.org>
* gtk/gtktogglebutton.c: eliminated some queue_draws when invoking
gtk_widget_set_state, since that cares about redrawing already.
some code cleanups.
* gtk/gtktogglebutton.[hc]:
* gtk/gtkfontsel.c:
* gtkgamma.c:
s/gtk_toggle_button_set_state/gtk_toggle_button_set_active/ since
set_state is already taken by gtkwidget.h.
* gtk/gtkcompat.h: #define gtk_toggle_button_set_state
gtk_toggle_button_set_active.
* gtk/gtkstyle.c: some indentation cleanups.
I submitted this patch twice to gtk-devel-list, and received no comments, so
am committing it. Although not exhaustively tested, I have been using this
gtk+ for a week w/o problems, and I did read the code to ensure that nothing
ever writes to these data structures. If by chance people encounter SEGV's in
gtk+ code that is setting values in global data structures, this patch could
be a possible culprit.
1998-11-30 Elliot Lee <sopwith@cuc.ml.org>
* {gdk,gtk}/*.c: Make read-only data structures "static const" to
allow them to be shared, mainly including (but not limited to) the
GtkTypeInfo structures for each class.
* gtk/gtkfilesel.c: Add /net to the "leave me alone" directory listing.
Mon Jul 6 18:30:48 1998 Tim Janik <timj@gtk.org>
* gtk/gtkbutton.h:
* gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
GTK_BIN (button)->child to button->child to keep source compatibility.
* gtk/gtkoptionmenu.c:
* gtk/gtkclist.c:
* gtkcheckbutton.c: don't refer to button->child, but
GTK_BIN (button)->child instead.
Sat Jul 4 13:16:24 1998 Tim Janik <timj@gtk.org>
* gtk/*.c: changed reversed_[12] to reserved_[12] in gtk_*_get_type
functions.
* gdk/gdkwindow.c:
* gdk/gdkvisual.c: check for some pointer values to be != NULL, prior
to XFree() calls.
Sun Jun 28 04:29:10 1998 Tim Janik <timj@gtk.org>
* gtk/gtktypeutils.c (gtk_type_class_init): call the base class init
fucntions from all parent types upon class initialization.
* gtk/gtkcontainer.c:
(gtk_container_get_type): announce gtk_container_base_class_init to
the type system.
(gtk_container_base_class_init): new function to feature base class
initialization.
(gtk_container_get_child_arg):
(gtk_container_set_child_arg): call the GtkContainerClass get_child_arg
and set_child_arg methods of the class indicated through the argument
name.
* gtk/gtkobject.c:
(gtk_object_base_class_init): new function to feature base class
initialization.
(gtk_object_init_type): announce gtk_object_base_class_init to the type
system.
(gtk_object_class_init): setup the get_arg and set_arg pointers for
GtkObjectClass.
(gtk_object_setv):
(gtk_object_getv): call the GtkObjectClass get_arg and set_arg methods,
instead of bothering the type system with this.
* gtk/gtkaccellabel.c:
* gtk/gtkbutton.c:
* gtk/gtkradiobutton.c:
* gtk/gtktable.c:
* gtk/gtktogglebutton.c:
* gtk/gtktipsquery.c:
* gtk/gtkbox.c:
* gtk/gtkpacker.c:
* gtk/gtkwidget.c:
* gtk/gtkwindow.c:
* gtk/gtkframe.c:
* gtk/gtkmisc.c:
* gtk/gtklabel.c: set the object_class->{g|s}et_arg pointers to the
corresponding gtk_*_{g|s]et_arg functions and updated the gtk_*_get_type
functions wrt GtkTypeInfo initialization. changed a lot of the set/get
arg functions to take a GtkObject argument.
gtk/gtkadjustment.c:
gtk/gtkalignment.c:
gtk/gtkarrow.c:
gtk/gtkaspectframe.c:
gtk/gtkbbox.c:
gtk/gtkbin.c:
gtk/gtkcheckbutton.c:
gtk/gtkcheckmenuitem.c:
gtk/gtkclist.c:
gtk/gtkcolorsel.c:
gtk/gtkcombo.c:
gtk/gtkctree.c:
gtk/gtkcurve.c:
gtk/gtkdata.c:
gtk/gtkdialog.c:
gtk/gtkdrawingarea.c:
gtk/gtkeditable.c:
gtk/gtkentry.c:
gtk/gtkeventbox.c:
gtk/gtkfilesel.c:
gtk/gtkfixed.c:
gtk/gtkfontsel.c:
gtk/gtkgamma.c:
gtk/gtkhandlebox.c:
gtk/gtkhbbox.c:
gtk/gtkhbox.c:
gtk/gtkhpaned.c:
gtk/gtkhruler.c:
gtk/gtkhscale.c:
gtk/gtkhscrollbar.c:
gtk/gtkhseparator.c:
gtk/gtkimage.c:
gtk/gtkinputdialog.c:
gtk/gtkitem.c:
gtk/gtkitemfactory.c:
gtk/gtklist.c:
gtk/gtklistitem.c:
gtk/gtkmenu.c:
gtk/gtkmenubar.c:
gtk/gtkmenuitem.c:
gtk/gtkmenushell.c:
gtk/gtknotebook.c:
gtk/gtkoptionmenu.c:
gtk/gtkpaned.c:
gtk/gtkpixmap.c:
gtk/gtkpreview.c:
gtk/gtkprogressbar.c:
gtk/gtkradiomenuitem.c:
gtk/gtkrange.c:
gtk/gtkruler.c:
gtk/gtkscale.c:
gtk/gtkscrollbar.c:
gtk/gtkscrolledwindow.c:
gtk/gtkseparator.c:
gtk/gtkspinbutton.c:
gtk/gtkstatusbar.c:
gtk/gtktext.c:
gtk/gtktoolbar.c:
gtk/gtktooltips.c:
gtk/gtktree.c:
gtk/gtktreeitem.c:
gtk/gtkvbbox.c:
gtk/gtkvbox.c:
gtk/gtkviewport.c:
gtk/gtkvpaned.c:
gtk/gtkvruler.c:
gtk/gtkvscale.c:
gtk/gtkvscrollbar.c:
gtk/gtkvseparator.c: updated the GtkTypeInfo initialization code to
match the modified GtkTypeInfo structure.
Sun May 3 13:38:22 1998 Owen Taylor <otaylor@gtk.org>
* configure.in acheader.h gdk/gdkwindow.c
Check for Shape extension both on the client and server
side. (And, more importantly, check for the shape extension
so we may include -lXext even when compiling with --disable-xshm)
Don't set override_redirect on all shaped windows. It isn't
necessary.
* gdk/gdkwindow.c: Set ->colormap to NULL for root
and foreign windows. Use this to check if we
need to get the colormap from X.
Fri May 1 22:32:47 1998 Owen Taylor <otaylor@gtk.org>
* gtk/gtkbutton.c (gtk_button_paint): Draw the areas
between the default and the button always in GTK_STATE_NORMAL.
* gtk/gtkrange.c (gtk_range_style_set): Added a style_set
callback.
Fri May 1 16:40:57 1998 Owen Taylor <otaylor@gtk.org>
* gdk/gdkpixmap.c (gdk_pixmap_colormap_create_from_xpmp[_d]):
Fix a buffer overflow on pixmaps that claim to have
more than 31 characters per pixel.
(gdk_pixmap_read_string): Don't wrap around strings longer
than half of address space ;-)
* gtk/gtk[vh]ruler.c gtk/gtkinputdialog.c: Expand some buffers
that were used for printing integers.
* */* (almost):
Style: All
int foo () { ... }
changed to
int foo (void) { ... }
^^^^^^^ This is why some many files changed
Even where there were proper prototypes elsewhere.
* gdk/gxid.c (handle_claim_device): Some extra checks.
It isn't safe against being fed bad X id's, but at
least it should be safe against deleting all your
files.
Tue Apr 7 19:36:48 1998 Owen Taylor <owt1@cornell.edu>
* gutils.c (g_direct_compare): Removed, because that's what
a NULL comparison function means. And it wasn't 64 bit safe.
Tue Apr 7 19:14:03 1998 Owen Taylor <owt1@cornell.edu>
* gdk/gdkpixmap.c: Added maximum field widths to prevent
possible '%s' scanf overflows. Replaced scanf("%c")
with getc(), Don't interpret /*/ as a full comment. Use
g_realloc/g_new.
* gtk/gtkwidget.h gtk/gtkprivate.h: Changed all flag
tests to check for ((GTK_WIDGET_FLAGS(widget) & FLAG) != 0)
instead of (GTK_WIDGET_FLAGS(widget) & FLAG)
* gtk/gtkfilesel.c: Use getwd() instead of getcwd() on
SunOS, because getcwd() hangs up in a wait4().
(Found by David Monniaux <monniaux@clipper.ens.fr>)
- Check device/inode/mtime not just inode/mtime, when
caching scanned directories.
(From: scottk@ig.utexas.edu (Scott Kempf))
* gdk/gdkpixmap.c: Check for 0 width/height when
creating pixmaps.
* gtk/*.c: Global substitution of recently introduced
"MAX (0," for allocations to "MAX (1,", since
creating a backing pixmap with a zero width or height
fails.
* gdk/gdkwindow.c (gdk_window_new): Don't set all the
WM properties for child windows. Don't set the base
size, since the value we set will be taken as a minimum
size.
Fri Apr 3 17:14:55 1998 Owen Taylor <owt1@cornell.edu>
* gdk/gdk.c: More extensive debugging output
* gtk/gtkalignment.c gtk/gtkbutton.c gtk/gtkcheckbutton.c
gtk/gtkclist.c gtk/gtkeventbox.c gtk/gtkhandlebox.c
gtk/gtk[hv]box.c gtk/gtk[hv]paned.c gtk/gtklist.c
gtk/gtkmenu.c gtk/gtkmenubar.c gtk/gtkmenuitem.c
gtk/gtknotebook.c gtk/gtktable.c gtk/gtktree.c
gtk/gtktreeitem.c gtk/gtkviewport.c
Avoid assigning negative values to unsigned allocation.width and
height
* gtk/gtkwindow.c:
Instead of realizing the widget, then size allocating, (resulting
in XMoveResizeWindows for all children, do the size allocation
first, then realize.
In gtk_real_window_move_resize, combine move and resize
into a single GDK/X call when possible.
* gtk/gtkclist.c gtk/gtkdrawingarea.c:
Remove assumption that the widget will be size allocated _after_
it is realized.
* gtk/gtklist.c (gtk_list_motion_notify): Removed useless
debugging message.
Thu Mar 26 21:37:57 1998 Tim Janik <timj@gtk.org>
* gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always
display the correct active state.
* gtk/gtkcheckbutton.c (gtk_real_check_button_draw_indicator): always
display the correct active state.
* gtk/gtkwidget.c (gtk_widget_set_arg): CAN_FOCUS and CAN_DEFAULT flag
changes need to queue a resize.
* gtk/gtkbutton.c (gtk_button_paint): take border_width into
consideration for restrict area.
* gtk/gtktogglebutton.c (gtk_toggle_button_class_init): enable the
draw_default member of GtkButton, otherwise the diplay is messed up
for CAN_DEFAULT toggles.
(gtk_toggle_button_draw_focus): always display whether the toggle button
is active or not.
* gtk/gtkwidget.c (gtk_widget_set_state):
(gtk_widget_set_sensitive):
(gtk_widget_set_parent):
(gtk_widget_propagate_state): take into consideration, whether we really
want to change childrens states, or just restauration of old states.
Tue Feb 17 05:41:31 1998 Tim Janik <timj@gimp.org>
* gtk/gtkcheckbutton.c:
* gtk/gtkradiobutton.c:
* gtk/gtktogglebutton.c:
applied patch to fix draw_indicator behaviour from Lars Hamann
and Stefan Jeske.
* gtk/gtkmain.h:
* gtk/gtkmain.c (gtk_grab_get_current): new function
that returns the current grab widget or NULL.
* gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
shape mask if mask==NULL (provided by Stefan Wille).