Owen Taylor [Thu, 15 Nov 2001 21:04:51 +0000 (21:04 +0000)]
Cal gdk_window_invalidate_maybe_recurse() for recursion. (Soeren Sandmann)
Thu Nov 15 14:19:34 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_invalidate_maybe_recurse): Cal
gdk_window_invalidate_maybe_recurse() for recursion.
(Soeren Sandmann)
* gtk/gtkviewport.c: Make !redraw_on_allocate. (Soeren Sandmann)
* gtk/gtkcontainer.c (gtk_container_expose): Call
gtk_container_forall() not _foreach() to propagate,
since we need to propagate exposes to internal children
as well.
* gtk/gtkwidget.c (gtk_widget_set_events, gtk_widget_add_events):
Remove the restriction of only being able to call these
on window widgets, since we have lots of NO_WINDOW widgets
with windows now; for add events, recurse over the children
of widget->window to find one owned by the widget.
* gtk/gtkbutton.[ch]: Make a NO_WINDOW widget, using an input-only
window to catch events.
* gtk/gtktogglebutton.[ch]: Remove the code for switching
between NO_WINDOW and WINDOW widgets based on the mode.
* gtk/gtkcheckbutton.c gtk/gtkoptionmenu.c gtk/gtkclist.c
gtk/gtktreeview.c: Adopt to NO_WINDOW change for GtkButton.
* gtk/gtkrange.[ch]: Make into a NO_WINDOW widget.
* gtk/gtkhscale.c, gtk/gtkvscale.c: Adopt to NO_WINDOW
change for range.
* gtk/gtknotebook.[ch]: Make into a NO_WINDOW widget.
* docs/Changes-2.0.txt: Add a note about the NO_WINDOW changes.
Havoc Pennington [Wed, 14 Nov 2001 18:58:26 +0000 (18:58 +0000)]
bulk of the tests were commented out, oops.
2001-11-14 Havoc Pennington <hp@redhat.com>
* tests/testtextbuffer.c (main): bulk of the tests were commented
out, oops.
* gtk/gtktextiter.c (find_paragraph_delimiter_for_line): make this
function work, should resolve #63426
(gtk_text_iter_ends_line): return TRUE for the end iterator
* gtk/gtktextiter.h: put padding back in GtkTextIter, I thought of
a couple things that might get cached in here.
Havoc Pennington [Wed, 14 Nov 2001 00:26:14 +0000 (00:26 +0000)]
docs including reference to bugzilla bug about how we should have a better
2001-11-13 Havoc Pennington <hp@redhat.com>
* gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
including reference to bugzilla bug about how we should have
a better way of positioning children
* gtk/gtktextview.h (struct _GtkTextViewClass): add some padding
* gtk/gtktextview.c (gtk_text_view_size_allocate): assign zero
size to side rects if they don't exist, #63438
Havoc Pennington [Tue, 13 Nov 2001 23:36:18 +0000 (23:36 +0000)]
add border width to requisition, request non-anchored children
2001-11-13 Havoc Pennington <hp@redhat.com>
* gtk/gtktextview.c (gtk_text_view_size_request): add border width
to requisition, request non-anchored children
(gtk_text_view_size_allocate): handle border width, allocate
non-anchored children
(text_view_child_new_window): set the child as object data
(gtk_text_view_move_child): allow children at negative
coordinates, no reason why not
(gtk_text_view_forall): make it copy the list of children before
walking it, to avoid reentrancy issues
(gtk_text_view_move_child): short-circuit if position is unchanged
(changed_handler): only queue_resize if requisition has changed
(gtk_text_view_init): don't redraw_on_allocate, since we can do
a better job of invalidation ourselves
* tests/testtext.c: add tests for the fixed-position children
Tim Janik [Tue, 13 Nov 2001 00:53:47 +0000 (00:53 +0000)]
added gtkaccelmap.sgml. other updates.
Mon Nov 12 23:06:38 2001 Tim Janik <timj@gtk.org>
* added gtkaccelmap.sgml. other updates.
Mon Nov 12 23:08:37 2001 Tim Janik <timj@gtk.org>
* gtk/maketypes.awk: fix type utils generation on unix.
* gtk/gtkaccelmap.[hc]: new files, implementing a global accelerator
registry.
* gtk/gtkaccelgroup.[hc]: major API/implementation revamp:
removed GTK_ACCEL_SIGNAL_VISIBLE, gtk_accel_group_get_default,
gtk_accel_group_get_entry, gtk_accel_group_(un)lock_entry,
gtk_accel_group_add/remove, gtk_accel_group_handle_add/remove,
gtk_accel_group_create_add/remove, gtk_accel_group_entries_from_object.
introduced ::accel_changed signal for change notification, and
gtk_accel_group_connect/disconnect to connect closures to accel groups.
made gtk_accel_group_attach/detach and gtk_accel_group_activate private
functions.
deprecated gtk_accel_group_ref/unref.
* gtk/gtkaccellabel.[hc]: changes to make accellabels pay attention
to accel group changed notification and basically operate on closures.
removed gtk_accel_label_get_accel_object and
gtk_accel_label_set_accel_object.
introduced gtk_accel_label_set_accel_closure, and for convenience,
gtk_accel_label_set_accel_widget.
* gtk/gtkitemfactory.[hc]: removed accelerator propagation code
which mostly moved into gtkaccelmap.[hc].
removed gtk_item_factory_parse_rc*, gtk_item_factory_dump_*
and gtk_item_factory_print_func.
* gtk/gtkmain.c: call _gtk_accel_map_init().
* gtk/gtkmenuitem.[hc]: introduced gtk_menu_item_set_accel_path(),
that associates an accelerator path with menu items, through which
persistent accelerator settings on menu items are enabled.
* gtk/gtkmenu.[hc]: added gtk_menu_set_accel_path() so accelerator
paths of menu item can be default constructed to allow installation
of accelerators on menu items that don't come with an accelerator
binding by default.
* gtk/gtksettings.c: fix STRING type rc settings by special casing
them appropriately in the parser.
* gtk/gtksignal.[hc]: allow a class function offset of 0 for
gtk_signal_newv().
* gtk/gtkwidget.[hc]: accelerator API revamp.
removed ::accelerator_add/remove signals, gtk_widget_accelerator_signal,
gtk_widget_accelerators_locked, gtk_widget_remove_accelerators and
gtk_widget_(un)lock_accelerators.
accelerators maintained through gtk_widget_add/remove_accelerator()
are not runtime changable now, the correct sequence to setup a
widget for runtime changable accelerators is now:
gtk_accel_map_add_entry(accel_path, key, mods);
_gtk_widget_set_accel_path(widget, accel_path, accel_group);
* gtk/gtkwindow.[hc]: accelerator changes, proxy and coalesce accel
group changes (as well as mnemonic changes) through the new signal
::accels_changed.
Matthias Clasen [Mon, 12 Nov 2001 22:50:58 +0000 (22:50 +0000)]
new files explaining where the code for rendering pixbufs lives. (#61151)
* gdk-pixbuf/gdk-pixbuf-rendering.sgml,
gdk-pixbuf/gdk-pixbuf-from-drawables.sgml: new files explaining
where the code for rendering pixbufs lives. (#61151)
Hans Breuer [Sat, 10 Nov 2001 13:23:36 +0000 (13:23 +0000)]
make sure we know what we are talking about when asked for MINMAXINFO.
2001-11-10 Hans Breuer <hans@breuer.org>
* gdk/win32/gdkevents-win32.c (gdk_event_translate) : make sure
we know what we are talking about when asked for MINMAXINFO.
Also some cleaning for !HAVE_DIMM_H etc.
Hans Breuer [Fri, 9 Nov 2001 21:52:52 +0000 (21:52 +0000)]
use g_strcasecmp(), some poor platforms don't have strcasecmp()
2001-10-28 Hans Breuer <hans@breuer.org>
* gtk/gtkfontsel.c : use g_strcasecmp(), some poor platforms
don't have strcasecmp()
* gtk/gtktextview.c : to fix crashing on e.g. TextView::find need
to remove the idle funcs in gtk_text_view_destroy (). To reduce
code duplication wrap it in its own function and use it in
gtk_text_view_unrealize () and gtk_text_view_destroy_layout ()
* gdk/win32/gdkdrawable-win32.c : implement the finalize
method like the X11 version does, allow to set_colormap NULL
* gdk/win32/gdkwindow-win32.c : adapt GdkWindowImplWin32::
set_colormap, also some adaption to X11 version :
(gdk_window_hide) call _gdk_window_clear_update_area
(gdk_window_reparent) call _gdk_window_init_position
* gdk/win32/gdkwindow-win32.c (gdk_window_set_geometry_hints) :
call gdk_window_resize() after all hints are set, because the
window resizing process (WM_GETMINMAXINFO) takes all of them into
account
* gdk/win32/gdkfont-win32.c : make gdk_font_equal return a gboolean
* gdk/win32/gdkvisual-win32.c : register GdkVisual with
sizeof (GdkVisualPrivate)
* gdk/gdk.def gtk/gtk.def : upated externals
* gdk/makefile.msc gdk/win32/makefile.msc gdk-pixbuf/makefile.msc
gdk-pixbuf/pixops/makefile.msc gtk/makefile.msc.in tests/makefile.msc :
from now on use make.msc from $(TOP)/glib/build/win32
Tor Lillqvist [Thu, 8 Nov 2001 20:57:18 +0000 (20:57 +0000)]
Add headers. Add section about ActiveIMM.
2001-11-08 Tor Lillqvist <tml@iki.fi>
* README.win32: Add headers. Add section about ActiveIMM.
* configure.in: Add --with-ie55 flag to specify the location of
the "IE55 libs and headers" package downloadable from Microsoft,
which contains, among other things, the Active IMM header dimm.h
and UUID library uuid.lib. Use test -f instead of AC_CHECK_FILE.
Require GLib 1.3.10.
* config.h.win32.in: New version, produced by merging two
configure-generated ones (for gcc and MSVC). Hopefully #defines
the same flags that the previous, hand-written one, did.
* gdk/Makefile.am
* gdk/win32/Makefile.am: Handle the uuid library from the IE55 lib.
* gdk/win32/surrogate-dimm.h: Remove, use real dimm.h instead (if
available).
* gdk/win32/libie55uuid.la: New file, handwritten libtool wrapper
for uuid.lib. (Does it really have to be this hard to use an
existing library with libtool? Probably I am missing something.)
Owen Taylor [Tue, 6 Nov 2001 19:10:03 +0000 (19:10 +0000)]
Add row_draggable() vfunc, and wrapper function.
Mon Nov 5 22:34:29 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtktreednd.[ch] (struct _GtkTreeDragSourceIface):
Add row_draggable() vfunc, and wrapper function.
* gtk/gtktreednd.[ch] (struct _GtkTreeDragDestIface): Make
row_drop_possible take a GtkSelectionData, rather than
model/row pair.
* gtk/gtktreestore.c gtk/gtkliststore.c: Update for
new DND interfaces.
* gtk/gtktreeview.[ch]: Remove the row_draggable_func
location_dropable_func from gtk_tree_view_set_rows_drag_source/dest.
and rename them to enable_model_drag_source/dest.
* gtk/treeviewcolumn.c: Add DND of columns between rows.
Still can't drop _to_ the left tree, but other places
work.
* gtk/gtktreeview.c (unset_reorderable): Unset the
reorderable property if unset/enable_model_drag_source/dest
are called manually.
* gtk/gtktreestore.c (gtk_tree_store_row_drop_possible):
Correct for change in depth count handling.
* gtk/gtktreeview.c (gtk_tree_view_create_row_drag_icon):
Pass in a expose area to gtk_tree_view_column_cell_render()
expose the child widgets in here (gtk_text_view_realize): set parent
2001-11-05 Havoc Pennington <hp@redhat.com>
* gtk/gtktextview.c (gtk_text_view_paint): expose the child
widgets in here
(gtk_text_view_realize): set parent window of child widgets
(gtk_text_view_size_request): use child req to decide whether
to invalidate layout, not widget->requisition
* gtk/gtktextdisplay.c (render_layout_line): set
shaped_width_pixels for NULL shape objects, so that we properly
draw the "missing pixbuf/widget" thing
(render_layout_line): don't draw the widget here
(gtk_text_layout_draw): pass out a list of widgets that need exposing
* demos/gtk-demo/textview.c (insert_text): add demo of child
widgets
Owen Taylor [Mon, 5 Nov 2001 17:48:58 +0000 (17:48 +0000)]
Redo Xft support to go directly to Picture objects instead of using
Mon Nov 5 12:46:44 2001 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkdrawable-x11.[ch] gdk/x11/gdkgc-x11.c
gdk/x11/gdkpixmap-x11.c gdk/x11/gdkprivate-x11.h
gdk/x11/gdkwindow-x11.c: Redo Xft support to go
directly to Picture objects instead of using XftDraw.
This fixes the problem where we weren't able to
properly destroy XftDraw objects before destroying
the accompanying windows, and probably improves
efficiency a bit too. (#50214)
Owen Taylor [Mon, 5 Nov 2001 15:56:50 +0000 (15:56 +0000)]
Clamp max window width/height to 32767, not 32768 since we have to be able
Mon Nov 5 10:01:49 2001 Owen Taylor <otaylor@redhat.com>
* gdk/x11/gdkgeometry-x11.c (gdk_window_compute_position):
Clamp max window width/height to 32767, not 32768 since
we have to be able to deal with a dx/y of -32768 without
getting a width of 65536 when guffaw scrolling.
* gdk/x11/gdkgeometry-x11.c: Implement gdk_window_scroll()
for the guffaw scrolling case, fixing some problems with
copy-area case as well. Fix BadValue bug with moving windows
by large amounts.
* gdk/x11/gdkgeometry-x11.c (gdk_window_clip_changed): Update
clip in window structue before calling gdk_window_invalidate_region
since that trims new invalidations to the window's visible
region.
* gdk/x11/gdkwindow-x11.c (gdk_window_set_static_gravities):
Really set the static window gravity on the children, not
repeatedly on the window.
* gtk/testgtk.c: Add a torture test for big windows and
gdk_window_scroll().
Owen Taylor [Sun, 4 Nov 2001 23:43:37 +0000 (23:43 +0000)]
queue_resize_on_group with both the old and new mode, not just the new
Sun Nov 4 18:39:43 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtksizegroup.c (gtk_size_group_set_mode):
queue_resize_on_group with both the old and new mode, not
just the new mode. (#60171, Nicolas Setton). Also, notify
the "mode" property.
Owen Taylor [Sun, 4 Nov 2001 22:57:03 +0000 (22:57 +0000)]
Add a function gdk_window_invalidate_maybe_recurse() for use in "shallow
Sun Nov 4 16:02:08 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.[ch]: Add a function gdk_window_invalidate_maybe_recurse()
for use in "shallow invalidation" of a widget. (Windows belonging
to the widget, but not to the widget's children)
* gtk/gtkprivate.h gtk/gtkwidget.c gtk/gtksizegroup.c: Add private
flags GTK_ALLOC_NEEDED, GTK_REQUEST_NEEDED. These flags are set
up on ancestors up to the resize container on queue_resize. Size
requests only actually take place if GTK_REQUEST_NEEDED, size
allocations only take place if GTK_ALLOC_NEEDED or the size
changed.
* gtk/gtkcontainer.c gtk/gtkwidget.c: Remove
container->resize_widgets and the RESIZE_NEEDED flag since the
above flags are sufficient to figure out what needs to be
resized/reallocated. Remove code manipulating
container->resize_widget.
* gtk/gtkwidget.[ch]: Add gtk_widget_set_redraw_on_alloc(); this
allows widgets to turn off being automatically invalidated is when
they are resized.
* gtk/gtkwidget.[ch] (gtk_widget_size_allocate): Invalidation when
a widget is resized or moved is "shallow" as described above -
only the windows that need to be invalidated are invalidated.
* gtk/gtkbox.c gtk/gtktable.c gtk/gtkalignment.c docs/Changes-2.0.txt:
Make these widget's init functions call
gtk_widget_set_redraw_on_allocate(widget,FALSE).
* gtk/gtkwindow.c (gtk_window_configure_event): Call
_gtk_container_queue_resize(), since we don't want
redrawing. (Probably could be done for other
calls to gtk_widget_queue_resize() in gtkwindow.c,
but this is the most important one.)
* gtk/gtkwindow.c (gtk_window_move_resize): Don't call
gtk_widget_queue_draw() - size_allocate() handles
that as appropriate.
* gtk/gtkframe.c (gtk_frame_size_allocate): Invalidate instead
of queue_clear() to avoid invalidating children.
Tor Lillqvist [Sat, 3 Nov 2001 23:26:03 +0000 (23:26 +0000)]
Can't include gtkprivate.h (I added the include yesterday, without really
2001-11-04 Tor Lillqvist <tml@iki.fi>
* gtk/gtkimmodule.c: Can't include gtkprivate.h (I added the
include yesterday, without really thinking), as that defeats the
working of correct_libdir_prefix() (it becomes a no-op.). Add
comment mentioning that. Thanks to Hans Breuer for noticing.
Hans Breuer [Sat, 3 Nov 2001 20:47:50 +0000 (20:47 +0000)]
chain finalize to parent class to get removed from the toplevel_list.
2001-11-03 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesel.c (gtk_file_selection_finalize) : chain
finalize to parent class to get removed from the toplevel_list.
Should fix 'random' crashes of #63474.
* gtk/gtktreemodelsort.c : chain finalize() to parent class
gdk_rgb_init() doesn't need to be called anymore. Use g_object_(un)_ref
2001-11-03 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* gdk-pixbuf/tmpl/refcounting.sgml,
gdk-pixbuf/porting-from-imlib.sgml, tmpl/creating.sgml:
gdk_rgb_init() doesn't need to be called anymore. Use
g_object_(un)_ref instead of gdk_pixbuf_(un)ref.
* tmpl/module_interface.sgml: Typo fix.
* gdk-pixbuf/gdk-pixbuf.sgml: Fixed jade complaining about '_' by
replacing it with '-'. Now builds again.
Tor Lillqvist [Sat, 3 Nov 2001 00:44:35 +0000 (00:44 +0000)]
Correct some renamed functions.
2001-11-03 Tor Lillqvist <tml@iki.fi>
* gtk/gtk.def: Correct some renamed functions.
* gtk/gtkimmodule.c (correct_libdir_prefix): New function, used on
Windows to turn build-time paths from a gtk.immodules distributed
as part of a binary package into runtime ones in the
end-user-chosen installation directory.
(gtk_im_module_init): Use it for module path and domain
directory.
Tor Lillqvist [Fri, 2 Nov 2001 22:56:59 +0000 (22:56 +0000)]
Use -no-undefined on Windows. Look for .dll or .so as appropriate as
2001-11-03 Tor Lillqvist <tml@iki.fi>
* modules/input/Makefile.am: Use -no-undefined on Windows. Look
for .dll or .so as appropriate as module suffix.
* gtk-zip.sh.in: Use correct import library names.
* gtk/gtk.def: Add a couple of missing entry points. (#63585)
2001-11-02 Tor Lillqvist <tml@iki.fi>
* gtk/gtkrc.c (gtk_rc_make_default_dir): Fix typo: extraneous
comma. Include gtkprivate.h for GTK_LIBDIR etc definitions on
Windows.
2001-10-30 Tor Lillqvist <tml@iki.fi>
* Makefile (install-data-hook): Use cp, not $(LN_S) on the .pc
files. Configure on Win32 (running on Cygwin) thinks symlinks
exist, but pkg-config is not necesarily a Cygwin program, and
doesn't understand them.
Owen Taylor [Fri, 2 Nov 2001 21:16:54 +0000 (21:16 +0000)]
Remove random + 5 for width and height. If people want padding, they
Fri Nov 2 16:14:15 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkviewport.c (gtk_viewport_size_request): Remove
random + 5 for width and height. If people want padding,
they should add padding. (Note the +5 isn't padding
that will always appear - it just appears in the case
where the widget is allocated it's requisition.)
(#51018, Janet Davis)
* gtk/modules/input/gtkimcontextxim.[ch]: If we have
to destroy the input context because we change the
client window or use_preedit, make sure we empty
the preedit string.
Owen Taylor [Fri, 2 Nov 2001 20:02:44 +0000 (20:02 +0000)]
Go to the GUP proposed ordering of buttons with [OK] in the lower right
Fri Nov 2 14:55:53 2001 Owen Taylor <otaylor@redhat.com>
* gtk/{gtkcolorseldialog.c,gtkfilesel.c,gtkfontsel.c,
gtkgamma.c,gtkmessagedialog.c}: Go to the GUP
proposed ordering of buttons with [OK] in the lower
right hand corner. Patch from Gregory Merchan,
#56331.
Owen Taylor [Thu, 1 Nov 2001 21:50:58 +0000 (21:50 +0000)]
Add: - A ::retrieve_surrounding signal that asks the widget for context
Thu Nov 1 16:20:56 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkimcontext.[ch]: Add:
- A ::retrieve_surrounding signal that asks the widget for
context around the insertion point.
- A ::delete_surrounding signal that asks the widget to
delete context aroudn the insertion point.
- gtk_im_context_set_context() for widgets to set context
around the insertion point in response to ::retrieve_context.
- gtk_im_context_get_context() for context to get context
around the insertion point
* gtkmarshal.list: Add BOOL:INT,INT
* gtk/gtkimmulticontext.c: Proxy the get_surrounding() /
set_surrounding() methods, and the ::retrieve_surrounding /
::delete_surrounding signals.
* gtk/gtkentry.c gtk/gtktreeview.c: Hook up to the
GtkIMContext::retrieve_surrounding / ::delete_surrounding
signals.
Owen Taylor [Wed, 31 Oct 2001 23:49:09 +0000 (23:49 +0000)]
Add a "menu" property and notify on it. (#62798, Padraig O'Briain)
Wed Oct 31 18:23:47 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkoptionmenu.c (gtk_option_menu_detacher):
Add a "menu" property and notify on it. (#62798,
Padraig O'Briain)
* gtk/gtkselection.[ch] gtk/{gtkentry.c, gtkfilesel.c,
gtkoldeditable.c, gtktextbuffer.c, gtktextview.c}:
Fix set_text to take a gchar, not a guchar, and to have
a len argument.
Matthias Clasen [Wed, 31 Oct 2001 22:07:13 +0000 (22:07 +0000)]
include initialization_versions.sgml, file-saving.sgml and
* gdk-pixbuf/gdk-pixbuf.sgml: include initialization_versions.sgml,
file-saving.sgml and module_interface.sgml.
* gdk-pixbuf/tmpl/module_interface.sgml: add short description.
* gtk/tmpl/gtkarg.sgml, gtk/tmpl/gtkdata.sgml,
gtk/tmpl/gtkcellrenderertextpixbuf.sgml: removed, since they described
no longer existent stuff and aren't included anymore.
* gdk/tmpl/color_contexts.sgml, gdk/tmpl/input_contexts.sgml,
gdk/tmpl/input_methods.sgml: removed, since they described no longer
existent stuff and aren't included anymore.
Owen Taylor [Wed, 31 Oct 2001 20:41:02 +0000 (20:41 +0000)]
Add a gtk_window_get_focus() getter to determine the currently focused
Wed Oct 31 15:38:14 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwindow.[ch] (gtk_window_get_focus): Add a
gtk_window_get_focus() getter to determine the currently
focused widget within the window. (#63145, request
from Damian Ivereigh)
Matt Wilson [Wed, 31 Oct 2001 18:54:20 +0000 (18:54 +0000)]
after allocating the treedatalist, zero it to make sure the values are
2001-10-31 Matt Wilson <msw@redhat.com>
* gtk/gtktreedatalist.c (_gtk_tree_data_list_alloc): after
allocating the treedatalist, zero it to make sure the values are
cleared from any garbage that was in this chunk.
massize rewrite. Static models now totally work. I'm not 100% sure about
Tue Oct 30 19:17:57 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_sort_level): massize
rewrite. Static models now totally work. I'm not 100% sure about
row_inserted and row_changed, but I'll get those later.