This is because focus in treeviews can be given to cells that cannot do anything
with activation (for better keynav), so we dissociate the concept of cell
activation and focusing.
This is still very much a work in progress, but it renders and more or
less works. I will be fixing up the details in the very near future.
Important: this commit breaks ABI as it modifies the GtkTreeViewColumn
structure in gtktreeviewcolumn.h. This is a sealed structure that needs
to be moved to an internal header file, most likely gtktreeprivate.h.
This should be implemented as propery height-for-width by
the treeview-refactor branch. This commit includes a FIXME
comment that scroll adjustments should not be updated from
inside size requests but only after receiving an allocation.
This patch adds the GtkScrollablePolicy type property to GtkScrollable
and implements it in all subclasses. GtkScrolledWindow observes this
property to make a good guess about when to show/hide scrollbars for
height-for-width content.
Most scrollable children do not do height-for-width *yet* but
most certainly will (toolpalette, treeview, iconview, textview
widgets all TODO), for scrollable widgets that do have a minimum
and natural size, it's important for them to observe the state
of this property in order to properly drive the scroll adjustments
according to the desired GtkScrollablePolicy. This patch makes
GtkViewport do this.
Patch also adds tests/testscrolledwindow.c to display the effects
of this property.
The scrollable patch removed set_scroll_adjustments (NULL, NULL) from
gtk_tree_view_init() which ensured the treeview would have adjustments
at all times, this patch adds set_v/hadjustment (NULL) to _init to ensure
the same thing (without it, there are crashes when trying to access the
adjustments notably from set_headers_visible() in gedit).
It is just too annoying to have to implement these properties in
every scrollable. Instead, we now have ::min-content-height/width
in GtkScrolledWindow.
We also add GtkScrollablePolicy to determine how to size the
scrollable content.
The GtkScrollable interface provides "hadjustment" and "vadjustment"
properties that are used by GtkScrolledWindow. It replaces
the ::set_scroll_adjustment signal. The scrollable interface
also has ::min-display-width/height properties that can be
used to control the minimally visible part inside a scrolled window.
The gtkprivate.h header contains GtkWidget-specific private symbols that
are not useful except in a handful of cases. Basically everything
includes gtkprivate.h for the GTK_PARAM_* macros.
https://bugzilla.gnome.org/show_bug.cgi?id=632539
The idea is that it is way more common to want to manipulate the
actual list, rather than the headers. Once you Tab into the treeview
(and the list part gets the focus), you can use Shift-Tab to focus
the headers.
This means that some hysteresis is added to the focus chain, but
it makes the treeview a lot more convenient to focus with the keyboard.
Signed-off-by: Federico Mena Quintero <federico@novell.com>
Because validate_visible_area() can modify the window size (and thus
the underlying surface), it should not be called from within the draw
method. Given that the presize handler is run with a higher priority
than redraw, and the presize handler will validate the visible area,
there should not be cases wherein the draw method is called and
validate_visible_area() has not been run yet.
However, one such a case was gdk_window_process_updates(), which would
trigger the draw method at some point. We now work around this
by factoring this in a new gtk_tree_view_bin_process_updates() function
that will run the presize handler first if needed.
Note: for other platforms, it might still be the case that the draw
method is called and validate_visible_area() has not been run yet.
(For example the Mac backend calls gdk_window_process_updates() from
the drawRect method, and the redraw-in-idle handling thus works
differently). This does not seem to be a problem now, if
it will be in the future we need to take care of that then.
It doesn't make sense to keep them separate as GtkSizeRequest requires a
GtkWidget and GtkWidget implements GtkSizeRequest, so you can never have
one without the other.
It also makes the code a lot easier because no casts are required when
calling functions.
Also, the names would translate to gtk_widget_get_width() and people
agreed that this would be a too generic name, so a "preferred" was added
to the names.
So this patch moves the functions:
gtk_size_request_get_request_mode() => gtk_widget_get_request_mode()
gtk_size_request_get_width() => gtk_widget_get_preferred_width()
gtk_size_request_get_height() => gtk_widget_get_preferred_height()
gtk_size_request_get_size() => gtk_widget_get_preferred_size()
gtk_size_request_get_width_for_height() =>
gtk_widget_get_preferred_width_for_height()
gtk_size_request_get_height_for_width() =>
gtk_widget_get_preferred_height_for_width()
... and moves the corresponding vfuncs to the GtkWidgetClass.
The patch also renames the implementations of the vfuncs in widgets to
include the word "preferrred".
validate_visible_area() can change the vertical adjustment and thus
trigger window moves/scrolls. This seems to change the surface for
which gtk_tree_view_bin_expose() just created a cairo context. Creating
the cairo context after the call to validate_visible_area() fixes
such crashes.
The keysyms create a lot of potential namespace conflicts for
C, and are especially problematic for introspection, where we take
constants into the namespace, so GDK_Display conflicts with GdkDisplay.
For C application compatiblity, add gdkkeysyms-compat.h which uses
the old names.
Just one user in GTK+ continues to use gdkkeysyms-compat.h, which is
the gtkimcontextsimple.c, since porting that requires porting more
custom Perl code.
Since we have a new mechanism for requesting sizes: GtkSizeRequestIface;
it makes no sense to maintain this cache on the GtkWidget structure...
removing the requisition cache however does not break the old "size-request"
signal which is there for backwards compatability reasons.
In any case widget->requisition should not have been accessed,
gtk_widget_get_child_requisition() would have been the correct way
to consult the cache.
This commit also deprecates the newly added gtk_widget_get_requisition()
API and makes it fallback on gtk_size_request_get_size().
This was a style property to let theme engines 'opt-in' to more
correct behaviour while maintaining compatibility with existing
themes. GTK+ 3 engines are expected to handle the more correct
behaviour.
gtk_window_get_group() never returns NULL; if the window isn't in a group,
a default window group is returned instead. Use gtk_window_has_group() instead.
This fixes some previous commits to use accessors to access GtkWindow.
Reported by Philip Withnall in bug
https://bugzilla.gnome.org/show_bug.cgi?id=627828
If a a treeview has frequent periodic additions and removals of
rows, it is possible that a page down keypress moves the cursor
out of the height of the treeview. In some of these cases, we
can be tricked into dereferencing a NULL pointer.
Bug 612919.
Includes fixing all callers to use the cairo region API instead. This is
usually just replacing the function names, the only difference is
gdk_region_get_rectangles() being replaced by
cairo_region_num_rectangles() and cairo_region_get_rectangle() which
required a bit more work.
https://bugzilla.gnome.org/show_bug.cgi?id=613284
The old version wasn't introspectable as it didn't have a length
return parameter. Also, delete gtk_tree_path_get_indices_with_depth,
since it's no longer needed.
In the early 2.14.x releases, GtkAdjustment was changed to enforce
that values are restricted to the range [lower, upper - page_size].
This has always been the documented behaviour, and the recommended
practice is to set page_size to 0 when using adjustments for simple
scalar values, like in a slider or spin button.
Due to the large number of applications that are affected by this
change, the behaviour has been reverted to the old behaviour in
2.14.3, with an explicit warning that this change will be
reintroduced in 2.90.
This reverts commit e6373738fc.
https://bugzilla.gnome.org/show_bug.cgi?id=619474
This commit was created using a script that searched for all docstrings
containing a parameter and the string 'or %NULL'.
Gdk backends and demos excluded as they are not part of a public API
https://bugzilla.gnome.org/show_bug.cgi?id=610474
This is exposed by overshooting in a HildonPannableArea. Leaking
a GtkTreeRowReference also means leaking the whole model, since
the GtkTreeModel reference count is increased for each row
reference.
Fixes bug #607770 - Leak in GtkTreeView with HildonPannableArea
Deprecate widget flag macros GTK_WIDGET_STATE, GTK_WIDGET_SAVED_STATE,
GTK_WIDGET_FLAGS, GTK_WIDGET_TOPLEVEL, GTK_WIDGET_NO_WINDOW and
GTK_WIDGET_COMPOSITE_CHILD.
Also deprecate the type macros GTK_WIDGET_TYPE, GTK_OBJECT_TYPE_NAME and
GTK_OBJECT_TYPE which have become redundant.
Instances of GTK_WIDGET_TOPLEVEL are replaced with gtk_widget_is_toplevel,
GTK_WIDGET_TYPE is replaced with G_OBJECT_TYPE, GTK_WIDGET_COMPOSITE_CHILD
is replaced with use of the "composite-child" property and uses of
GTK_WIDGET_NO_WINDOW are adjusted to use gtk_widget_get_has_window.
Uses of GTK_WIDGET_SAVED_STATE and GTK_WIDGET_FLAGS inside GtkWidget are
changed to direct flag usage.
Documentation is updated to refer to gtk_widget_set_has_window and
gtk_widget_get_has_window.
Gail and tests are updated as well.
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=69872
Initialize event_last_[xy] to out of range coordinates and also update
these values in enter and leave notify. Fix up calls to
update_prelight() from size allocate. Unconditionally doing these calls
caused problems with hover selection. Now we only do this call when
the "width before the expander column" has changed. (Which might be
awkward, but it is the best heuristic I could come up with so far).
Commit again after revert.
Store (x, y) of last motion event. From
gtk_tree_view_adjustment_changed(), call prelight_or_select() so that
the prelight is recalculated. We do the same from
gtk_tree_view_size_allocate() for the case that clicking on an expander
shows new rows that resize the column(s) left of the expander. This
means that the expander is moved horizontally, in such a case the
prelight also has to be reconsidered.
The Gtk-custom.c file in gir-repository contained a number of
introspection annotations. Merge those into the GTK source files.
Some documentation was moved from the tmpl/ files to accomodate
the addition of annotations.
Rework double click handling in GtkTreeView. We cannot blindly use
the 2BUTTON_PRESS and 3BUTTON_PRESS events. In case a user does two
fast double clicks, we receive a 3BUTTON_PRESS and BUTTON_PRESS. We
cannot easily deduce two double clicks from this.
We have removed the bookkeeping using row references of the last paths
clicked. Instead we monitor event time, (x, y) coordinates and compare
against double-click-time and double-click-distance ourselves.
Store (x, y) of last motion event. From
gtk_tree_view_adjustment_changed(), call prelight_or_select() so that
the prelight is recalculated. We do the same from
gtk_tree_view_size_allocate() for the case that clicking on an expander
shows new rows that resize the column(s) left of the expander. This
means that the expander is moved horizontally, in such a case the
prelight also has to be reconsidered.
Commit 3f306a4042 made it possible for
gtk_tree_view_top_row_to_dy() to be called recursively. (In a different
way than was already guarded for). This caused a single test case in
the scrolling test suite to fail. We now also guard for recursive calls at
the beginning of gtk_tree_view_top_row_to_dy().
This was removed long ago by the patch in bug 101235. On a hindsight,
all other scrollable widgets are processing exposes at this point, which
completely makes sense to me, so I am putting it back.
Such paths (eg. a child node that is collapsed) should be ignored. This
is fixed by checking the return value of _gtk_tree_view_find_node(),
which returns a partial return value (the parent node) when it returns
TRUE. Also added a unit test.
Reorder drawing in gtk_tree_view_bin_expose() so that the tree lines are
drawn after the cells have been drawn. This is because cell-background
is handled in the cell renderer, so the tree lines need to be drawn
after this.
Contrary to what was believed before, do_validate_rows() does need to
queue a normal resize (including a redraw) when it has to. The redraw
is required because of the size of the tree has changed because new
row(s) have been validated.
In validate_visible_area() it was assumed that gtk_tree_path_prev()
would always return the correct path of the preceding node. This is
obviously not true. The if-clause has been removed so that we now
always use _gtk_tree_view_find_path() to get the path from the tree,
node.
gtk_tree_view_enter_notify() now "ignores" the synthesized crossing
events. The synthesized crossing events always have (0, 0) as
coordinates, which messes things up. This patch does not fix all issues,
at least it makes the behavior much more reasonable again. Watch bug
555109 for further discussion on the issue.
Adapt gtk_tree_view_get_path_at_pos() and
gtk_tree_view_get_drag_dest_row() to just return FALSE when bin_window
is NULL and not hit a warning. Makes this case consistent with the tree
view not having a model. Documentation has been updated to clarify
this, unit test has been added.
Fixes bug 539377, based on a patch by Bjorn Lindqvist.
Instead of failing with warning on !tree_view->priv->tree, return
silently when tree_view->priv->model is NULL. Clarified in the
documentation that for invalid paths (and every path is invalid when no
model is set), the function will fail silently although the current
cursor will be unset.
Fixes bugs 498010 and 546005.
gtk_tree_view_discover_dirty_iter() and gtk_tree_view_discover_iter()
have been in the tree forever, but unused since 1.3.8 or so. I guess we
no longer need them, so removed them. Fixes a compiler warning as well.
Previously, do_validate_rows() validated 300 rows per iteration. While
this is usually not problematic, as the typical tree view contains less
than 100 rows. Tree views with a lot of columns or complex cell
renderers could take inacceptably long, like:
- Epiphany's location bar entry completion has multiline and marked up
text in every cell. Validating a single row took ~1.5ms here.
- In the list view in Nautilus, When enabling all columns, validating a
single row would take ~3ms.
With 300 rows per iteration, that made those examples take 500ms/1s in a
signle main loop callback, and this obviously caused responsiveness
problems.
Now the code uses a timer and limits the time for validating rows to
30ms. This can cause less lines to be invalidated per call, so the
function might be called more often, but generally results in more
responsive applications.
GtkFileChooserDefault actually implements a binding signal for
Backspace, to make it go to the parent directory. However,
GtkTreeView was eating our Backspace, and thus the file chooser was
not getting a chance to execute its binding signal.
GtkTreeView implements a Backspace binding itself, which it uses to
move to the parent node of the current cursor node. However, the
binding handler would return TRUE even if there was no parent to the
current node. Now the binding handler only returns TRUE if it
actually changed the cursor.
Additionally, gtk_tree_view_key_press() sees if no bindings handled a
key press; in that case, it re-sends the key press to the treeview's
search entry. However, sending a Backspace to an empty entry makes
the entry beep. Thus, we add a flag that gets set from GtkTreeView's
Backspace binding handler, to tell gtk_tree_view_key_press() when it
should *not* re-emit the key press on the search entry. Sort of,
"yeah, I didn't handle this key press, but I don't want you to send it
to the search entry, either!".
Signed-off-by: Federico Mena Quintero <federico@novell.com>
selecting a cell in a non-sortable column
* gtk/gtktreeview.c (gtk_tree_view_header_focus): Don't grab
focus to a header button if it is not focusable. Problem reported
by Joanmarie Diggs
svn path=/trunk/; revision=22316
2009-01-25 Claudio Saavedra <csaavedra@igalia.com>
* gtk/gtktreeview.c: Use gtk-doc syntax to refer to properties in
the docstrings.
svn path=/trunk/; revision=22213
2008-12-11 Sven Herzberg <sven@imendio.com>
Document the "set-scroll-adjustments" signal
Reviewed by Kristian Rietveld.
* gtk/gtkiconview.c,
* gtk/gtklayout.c,
* gtk/gtktextview.c,
* gtk/gtktreeview.c,
* gtk/gtkviewport.c: added proper documentation for the signal
svn path=/trunk/; revision=21871
2008-11-29 Matthias Clasen <mclasen@redhat.com>
Bug 554453 – "typeahead find" widget of GtkTreeView appears on
wrong monitor in a multi-head environment
* gtk/gtktreeview.c (gtk_tree_view_ensure_interactive_directory):
Make sure the typeahead window follows screen changes of the
treeview. Noticed by Rainer Stransky
svn path=/trunk/; revision=21835
2008-11-29 Federico Mena Quintero <federico@novell.com>
* gtk/gtktreeview.c (gtk_tree_view_bin_expose): If tree lines are
enabled, flip them around for the right-to-left case. Fixes
https://bugzilla.novell.com/show_bug.cgi?id=447004. Patch by
Ricardo Cruz <rpmcruz@alunos.dcc.fc.up.pt>
Signed-off-by: Federico Mena Quintero <federico@novell.com>
svn path=/trunk/; revision=21829
2008-08-12 Michael Natterer <mitch@imendio.com>
* gtk/*.c: consistently chain up using
GTK_FOO_CLASS(parent_class)->bar(instance) instead of
(*GTK_FOO_CLASS(parent_class))->bar(instance).
svn path=/trunk/; revision=21085
2008-08-06 Michael Natterer <mitch@imendio.com>
* gtk/gtkcombobox.c
* gtk/gtkiconview.c
* gtk/gtkrange.c
* gtk/gtkscrolledwindow.c
* gtk/gtktreeview.c: remove CLAMPing from values passed to
gtk_adjustment_set_value() since it does it right now.
svn path=/trunk/; revision=21021
2008-07-11 Kristian Rietveld <kris@gtk.org>
Bug 316087 - Resizing columns is chaotic
* gtk/gtktreeprivate.h: add new member fields.
* gtk/gtktreeview.c (gtk_tree_view_init), (validate_row): set post
validation flag,
(gtk_tree_view_size_allocate_columns): rework the size allocation
mechanism to only recalculate the expand values if the width of the
widget, content or the column configuration has changed,
(gtk_tree_view_size_allocate): move call to size_allocate_columns()
to before the adjustment updates so the proper width is used after
we updated it,
(gtk_tree_view_button_press), (gtk_tree_view_motion_resize_column):
use the column width minus the expand value for the resized width,
(gtk_tree_view_move_column_after): update call to
gtk_tree_view_size_allocate_columns().
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_expand): set use
resized width to FALSE.
* tests/Makefile.am:
* tests/testtreecolumnsizing.c: new interactive test program
for testing column resizing with different column configurations.
svn path=/trunk/; revision=20818
2008-06-19 Johan Dahlin <jdahlin@async.com.br>
* gtk/gtktreeview.c (gtk_tree_view_set_grid_lines),
(gtk_tree_view_set_enable_tree_lines):
gdk_gc_set_dashes expects a list of gint8, not guint8.
svn path=/trunk/; revision=20468
2008-06-08 Kristian Rietveld <kris@gtk.org>
Bug 536730 - memory corruption in gtktreeview
* gtk/gtktreeview.c (gtk_tree_view_real_collapse_row): first
remove the expand/collapse timeout and node, then free the rbtree.
svn path=/trunk/; revision=20334
2008-06-08 Kristian Rietveld <kris@gtk.org>
Bug 488119 - critical warnings from gtk_tree_view_get_visible_range
* gtk/gtktreeview.c (gtk_tree_view_get_visible_range): only try to
find path if we found valid nodes, return FALSE otherwise. (Patch
from Matthias Clasen).
svn path=/trunk/; revision=20333
2008-05-31 Kristian Rietveld <kris@imendio.com>
Bug 530146 - Setting non-string tooltip with
gtk_tree_view_set_tooltip_column() segfaults
* gtk/gtktreeview.c (gtk_tree_view_set_tooltip_query_cb): use
gtk_tree_model_get_value() and explicitly transform the value to a
string before setting it as tooltip.
svn path=/trunk/; revision=20261
2008-05-28 Kristian Rietveld <kris@imendio.com>
Bug 449625 - crash in gtk_tree_view_real_move_cursor at
gtktreeview.c:9641
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down):
cursor_offset *must* be larger than background height of the cursor
node, not just equal otherwise there is no guarantee there is a next
node.
svn path=/trunk/; revision=20219
2008-05-28 Kristian Rietveld <kris@imendio.com>
Refactor expand/collapse timeout handling (amendment to bug 511217).
* gtk/gtktreeview.c (add_expand_collapse_timeout),
(remove_expand_collapse_timeout): new functions, the remove function
also clears expanded_collapsed_node,
(cancel_arrow_animation): moved to be next to the add/remove timeout
functions,
(gtk_tree_view_unrealize),
(gtk_tree_view_row_deleted),
(gtk_tree_view_set_model),
(cancel_arrow_animation),
(gtk_tree_view_real_expand_row),
(gtk_tree_view_real_collapse_row): use the new add/remove functions.
svn path=/trunk/; revision=20205
* gtk/gtktreeview.c (cancel_arrow_animation): Reset
expanded_collapsed_node when canceling the animation.
Patch by Nicholas Setton.
svn path=/trunk/; revision=20201
2008-03-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_ensure_interactive_directory):
Set window type hint on the search popup. (#522279, Danny Baumann)
svn path=/trunk/; revision=19880
2008-02-13 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_stop_rubber_band): only
queue a redraw if the rubber banding has actually been active.
svn path=/trunk/; revision=19556
2008-02-12 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_real_select_cursor_row),
(gtk_tree_view_real_toggle_cursor_row): guard against people
deleting the row in question in the selection-changed callback.
(#514621, Andreas Koehler).
svn path=/trunk/; revision=19530
2008-02-12 Matthias Clasen <mclasen@redhat.com>
* gtk/*.c: Unify the handling of various "Enter" keysyms
all over the place. (#515047, Christian Persch)
svn path=/trunk/; revision=19528
2008-01-10 Kristian Rietveld <kris@imendio.com>
Fix#477175, reported by Juri Pakaste.
* gtk/gtktreeprivate.h:
* gtk/gtktreeview.c (gtk_tree_view_top_row_to_dy): do not set
tree_view->priv->dy here directly, just calculate the new value
and set it on the adjustment,
(gtk_tree_view_adjustment_changed): add guards to not call
gtk_tree_view_dy_to_top_row() if we are currently in
gtk_tree_view_top_row_to_dy(),
(gtk_tree_view_put): fix coordinate annotation: these are bin_window
coordinates, not tree coordinates,
(gtk_tree_view_real_start_editing): add cast.
* gtk/tests/treeview-scrolling.c: add an assertion for checking the
position of the editable in the "create new row and start editing"
tests.
svn path=/trunk/; revision=19331
2007-10-09 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): make
sure the new cursor node is visible when we are done. (Fixes#472965,
Carlos Garnacho).
svn path=/trunk/; revision=18899
2007-10-09 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): we should
only "don't move the cursor, but just select the current node" if the
cursor node is actually selectable. (Fixes#483730, reported by
Geoff Bache).
svn path=/trunk/; revision=18898
2007-09-14 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_get_property): the tooltip-column
property getter needs to set an integer, not a boolean. (#476689,
spotted and patch by Christian Persch).
svn path=/trunk/; revision=18818
2007-09-13 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_set_toooltip_cell): if cell
is set, always pass in path to gtk_tree_view_get_cell_area() whether
it is NULL or set. Added explanatory comment and added this
side case to the API documentation.
svn path=/trunk/; revision=18812
2007-09-10 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_key_press): only start
typeahead search if tree_view has focus (and not one of the column
buttons).
svn path=/trunk/; revision=18779
2007-09-09 Kristian Rietveld <kris@gtk.org>
Reverted r16699:
2006-10-30 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): change left/right
keybindings to collapse/expand rows instead of moving the focus
cursor. (#105895, Brian Bober and others).
svn path=/trunk/; revision=18768
2007-08-22 Kristian Rietveld <kris@imendio.com>
Do not allow the cursor to go to a separator row. Fixes#441219,
modified patch by Carlos Garnacho.
* gtk/gtktreeview.c (row_is_separator): new inline function
for calling the row-separator-func, made all of gtktreeview.c use
this function instead of calling the func themselves,
(gtk_tree_view_button_press): treat a click on a separator like
a click on empty space,
(gtk_tree_view_update_rubber_band_selection_rage): skip
non-selectable rows,
(search_first_focusable_path),
(gtk_tree_view_focus_to_cursor),
(gtk_tree_view_move_cursor_up_down),
(gtk_tree_view_move_cursor_page_up_down),
(gtk_tree_view_move_cursor_start_end): skip separators,
(gtk_tree_view_real_set_cursor): do not allow setting the cursor
on a separator.
svn path=/trunk/; revision=18672
2007-08-14 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): make
sure we fail keynav if the only item in the list is already selected.
(Fixes#465039, reported by Fernando Herrera).
svn path=/trunk/; revision=18610
2007-07-19 Kristian Rietveld <kris@imendio.com>
* gtk/gtk.symbols:
* gtk/gtktreeprivate.h:
* gtk/gtktreeview.[ch] (gtk_tree_view_get_tooltip_context),
(gtk_tree_view_[sg]et_tooltip_column): add more convenience API.
* tests/testtooltip.c (query_tooltip_tree_view_cb): use
gtk_tree_view_get_tooltip_context().
* demos/gtk-demo/demo.ui: add a tooltip column to the list store,
set tooltip-column on the tree view.
svn path=/trunk/; revision=18496
2007-07-18 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeview.c: Correct some mistakes in the
documentation of the test-expand/collapse-row signals.
(#457774, Olivier Andrieu)
svn path=/trunk/; revision=18489
2007-07-13 Kristian Rietveld <kris@imendio.com>
#408327, improve tooltip positioning.
* gtk/gtk.symbols: updated.
* gtk/gtktooltip.[ch] (gtk_tooltip_position): factor out
positioning code in here,
(gtk_tooltip_set_tip_area): new function to set the tooltip
area,
(gtk_tooltip_reset), (_gtk_tooltip_handle_event): hide tooltip
once the pointer leaves the tip area.
* gtk/gtktreeview.[ch] (gtk_tree_view_set_tooltip_row),
(gtk_tree_view_set_tooltip_cell): convenience functions to set
tip area for row/column/cell.
* tests/testtooltips.c (query_tooltip_tree_view_cb): use
gtk_tree_view_set_tooltip_row.
svn path=/trunk/; revision=18464
2007-07-11 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_*_to_*_coords): x should be
changed when converting widget <=> bin_window coordinates, not
when bin_window <=> tree_window.
svn path=/trunk/; revision=18446
2007-07-02 Kristian Rietveld <kris@gtk.org>
* gtk/gtk.symbols:
* gtk/gtktreeview.[ch] (gtk_tree_view_is_rubber_banding_active): new
function to check whether a rubber banding operation is currently
active. (#393579, Christian Neumair).
svn path=/trunk/; revision=18344
2007-06-13 Kristian Rietveld <kris@imendio.com>
Audit of GtkTreeView coordinate system usage. (#142494).
* gtk/gtktreeview.[ch]: general documentation updates,
(gtk_tree_view_scroll_to_cell), (gtk_tree_view_get_dest_row_at_pos):
update coordinate translations,
(gtk_tree_view_tree_to_widget_coords),
(gtk_tree_view_widget_to_tree_coords): Deprecated,
(gtk_tree_view_convert_.*_coords): 6 new functions for doing
transformations between coordinate systems.
* gtk/gtk.symbols: updated.
* tests/testtooltips.c (query_tooltip_tree_view_cb): fix testcase
with new gtk_tree_view_convert_widget_to_bin_window_coords().
* docs/reference/gtk/Makefile.am
* docs/reference/gtk/images/tree-view-coordinates.png: add new image.
* docs/reference/gtk/tmpl/gtktreeview.sgml: eloborate on the
different coordinate systems.
svn path=/trunk/; revision=18119
2007-06-06 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_unrealize): also remove the
auto expand timeout if it exists.
svn path=/trunk/; revision=18048
2007-05-02 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_grab_notify): stop the rubber band
if it's active.
svn path=/trunk/; revision=17770
2007-04-25 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_style_set): Set the background
of the header window again. (#431067, Benjamin Berg)
svn path=/trunk/; revision=17640
2007-03-20 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeviewcolumn.c:
* gtk/gtktreeprivate.h: add _gtk_tree_view_column_get_focus_area().
* gtk/gtktreeview.c (gtk_tree_view_clamp_column_visible): add
focus_to_cell parameter, rework to handle clamping columns which
are bigger than the available page size better,
(gtk_tree_view_key_press): remove code handling moving the focus
to other column headers,
(gtk_tree_view_header_focus): add clamp_column_visible parameter,
fix RTL support, don't wrap around when moving focus to other
column headers, call gtk_tree_view_clamp_column_visible() instead
of duplicating code,
(gtk_tree_view_focus): only clamp the column visible when we are
explicitly moving to another column header (fixes#399555, Charles
Kerr),
(gtk_tree_view_move_cursor_left_right): update call to
gtk_tree_view_clamp_column_visible().
svn path=/trunk/; revision=17546
2007-03-10 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_search_dialog_hide): only
hide the search dialog and send focus events if the search dialog
is currently visible.
svn path=/trunk/; revision=17464
2007-02-16 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeprivate.h: add cursor_offset field.
* gtk/gtktreeview.c (gtk_tree_view_init),
(gtk_tree_view_move_cursor_page_up_down): fix off by one error
in page up/down handling by memorizing the offset into the cursor
row. (Fixes#399809, reported by Bruce Bowler).
svn path=/trunk/; revision=17316
2007-02-16 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_search_dialog_hide): send
a focus-in event to the tree view after hiding the search dialog.
(#356515, Rich Burridge, Peter Parente).
svn path=/trunk/; revision=17314
2007-01-18 Michael Natterer <mitch@imendio.com>
* gtk/gtkcheckbutton.c
* gtk/gtkdnd.c
* gtk/gtkentry.c
* gtk/gtkmenu.c
* gtk/gtktreeview.c
* gtk/gtkviewport.c: pass more clip rectangles to gtk_paint_foo()
functions. Based on a patch from maemo-gtk (bug #398023).
svn path=/trunk/; revision=17183
2007-01-13 Hans Breuer <hans@breuer.org>
* gtk/gtkimmulticontext.c : don't include "gtkprivate.h" to avoid
differing definitions of GTK_LOCALEDIR (bug #396175).
* gtk/gtktreeview.c : use g_snprintf instead of snprintf, which is
not available everywhere
* gtk/makefile.msc.in : updated
svn path=/trunk/; revision=17137
2007-01-05 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): handle tree
== NULL. (Fixes#392259, reported by Christian Persch).
svn path=/trunk/; revision=17092
2007-01-05 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_row_changed): do allow for
invalidated nodes if the tree view is not realized. (#363147,
Carlos Garnacho, Miguel Cabrera).
svn path=/trunk/; revision=17089
2006-12-26 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_search_init): fix typo causing
the search dialog timeout never to be refreshed. (#389581,
Andrzej Szombierski).
2006-12-26 Kristian Rietveld <kris@gtk.org>
Lots of scrolling fixes. Made scrolling work properly in not fully
validated tree views; fixed a bunch of corner cases.
* gtk/gtktreeview.c (validate_visible_area): if a row's dy is past
upper - page_size, we know it is located at the end so the test for
dy + height has been dropped.
In the same case if area_below < 0, we know this is the last node
in the tree view so area_above is page_size - height of this row.
(validate_visible_area): got rid of subtracting new_height -
old_height from area_{below,above}, it didn't make any sense at
all and the full height of the row should be subtracted instead.
(validate_visible_area): when scrolling to a given path, set the
top row directly together with the dy offset, then sync that top_row
to the dy.
(gtk_tree_view_set_top_row): new function to directly set a top_row.
(gtk_tree_view_dy_to_top_row): refactored to use
gtk_tree_view_set_top_row().
(gtk_tree_view_top_row_to_dy): make sure dy >= 0 when done.
(gtk_tree_view_adjustment_changed): only update our dy and
top_row if the adjustment's dy actually changed.
2006-12-03 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (validate_visible_area): when not using an
explicit alignment, use the full area of the row (not just dy)
to determine how to implicitly align it. (Fixes#363191, reported
by Federico Mena Quintero).
2006-11-24 Michael Natterer <mitch@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): if we
can't go up/down, consult gtk_widget_keynav_failed() and leave the
widget if it returns FALSE (bug #322640).
2006-11-16 Michael Natterer <mitch@imendio.com>
Add new infrastructure for notifications of failed keyboard
navigation and navigation with restricted set of keys.
The patch handles configurable beeping, navigating the GUI with
cursor keys only (as in phone environments), and configurable
wrap-around. Fixes bugs #322640, #70986, #318827, #334726, #334742
and #309291.
* gtk/gtksettings.c: added properties gtk-keynav-cursor-only,
gtk-keynav-wrap-around and gtk-error-bell.
* gtk/gtkwidget.[ch]: added new signal "keynav-failed" and public
API to emit it. Added New function gtk_widget_error_bell() which
looks at the gtk-error-bell setting and calls gdk_window_beep()
accordingly.
* gtk/gtk.symbols: add the new widget symbols.
* gtk/gtkcellrendereraccel.c
* gtk/gtkimcontextsimple.c
* gtk/gtkmenu.c
* gtk/gtknotebook.c: use gtk_widget_error_bell() or look at the
gtk-error-bell setting instead of calling gdk_display_beep()
unconditionally.
* gtk/gtkcombobox.c
* gtk/gtkentry.c
* gtk/gtkiconview.c
* gtk/gtklabel.c
* gtk/gtkmenushell.c
* gtk/gtkspinbutton.c
* gtk/gtktextview.c
* gtk/gtktreeview.c: call gtk_widget_error_bell() on failed keynav.
* gtk/gtkentry.c
* gtk/gtklabel.c
* gtk/gtkrange.c
* gtk/gtktextview.c: consult gtk_widget_keynav_failed() on failed
cursor navigation and leave the widget if it returns FALSE.
* gtk/gtkmenushell.c
* gtk/gtknotebook.c: only wrap around if gtk-keynav-wrap-around
is TRUE.
* gtk/gtkradiobutton.c: ask gtk_widget_keynav_failed() to decide
whether to to wrap-around, and don't select active items on cursor
navigation if gtk-keynav-cursor-only is TRUE. Should look at
gtk-keynav-wrap-around too, will look into that.
2006-11-09 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): disable
don't move cursor case for SELECTION_NONE. (#371756, John Ellis).
2006-10-30 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): don't
forget to queue a draw for the new cursor node. (Fixes#366548,
reported by Sven Herzberg).
2006-10-30 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_class_init): change left/right
keybindings to collapse/expand rows instead of moving the focus
cursor. (#105895, Brian Bober and others).
2006-10-29 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_real_expand_row): guard against
child removal in row-expanded callback. (#366782, John Ellis).
2006-10-27 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (validate_visible_area): rework the area_above == 0
case to not overwrite the variables in the lower scope (which are
used later on ...), get the path correctly and bail out when there
isn't a node above us. (#359231).
2006-10-08 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch] (gtk_tree_view_set_property),
(gtk_tree_view_set_show_expanders),
(gtk_tree_view_get_show_expanders): add getter/setter for
show-expanders property, queue a redraw when this property
is toggled (#351167, Martin Ejdestig),
(gtk_tree_view_set_level_indentation),
(gtk_tree_view_get_level_indentation): also add getter/setter
and docs for level-indentation property.
2006-09-25 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): if the tree view
has already been realized; scroll to background area instead of
cell area. (Fixes#330683, Johan Dahlin, Tommi Komulainen).
2006-09-25 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_set_grid_lines): only attempt
to create the GCs if the widget is realized. (Fixes#357578).
2006-09-15 Michael Natterer <mitch@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_key_press): refactored column
header navigation/resizing/reordering to be more readable and lose
one level of nesting.
2006-09-15 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_key_press): actually directly
return after handling column button focus; we disable wrap around
with this (which actually happened via a really weird code path).
(Michael Natterer)
2006-09-15 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_key_press): make column resizing
code RTL aware, also break from the loops after we have seen the
focussed column button (Michael Natterer).
2006-08-06 Matthias Clasen <mclasen@redhat.com>
* gtk/gtktreeview.c (gtk_tree_view_set_grid_lines)
(gtk_tree_view_set_enable_tree_lines): Be more careful
when creating gcs, also emit change notification.
(gtk_tree_view_unrealize): Free the gcs here. (#349834,
Chris Wilson)
2006-07-18 Kristian Rietveld <kris@imendio.com>
Fix for #335012, reported by Matteo Nastasi.
* gtk/gtktreeview.c (gtk_tree_view_real_start_editing): if the
requested space of the editable is smaller than the cell area,
put it up above the middle of the cell area.
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing):
configure the inner border to cover the cell area if the
entry requisition is smaller than the cell_area.
2006-07-18 Kristian Rietveld <kris@imendio.com>
Another fix for #164884.
* gtk/gtktreeprivate.h: add in_grab field.
* gtk/gtktreeview.c (gtk_tree_view_button_press): only save press
to possibly begin a drag when there's no grab pending,
(gtk_tree_view_grab_notify): toggle in_grab field.
2006-07-18 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_realize): use MAX
priv->width, alloc.width when allocating the bin_window,
(gtk_tree_view_bin_expose): don't overrun bin_window when drawing
the flat box.
2006-07-17 Kristian Rietveld <kris@imendio.com>
* gtk/gtktreeview.c (gtk_tree_view_build_tree): check if the iter
still has children after running the test-expand-row func,
(gtk_tree_view_real_expand_row): ditto. (#302127, Billy Biggs).
2006-06-27 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_set_model): cancel the
expand collapse timeout when unsetting the model (Fixes#327164,
reported by Daichi Kawahata).
2006-06-21 Kristian Rietveld <kris@imendio.com>
Allocate space for the grid lines when they are enabled.
* gtk/gtktreeview.c (gtk_tree_view_bin_expose): make sure the cell
area does not overlap with the grid lines, also draw the line for
"the next cell" in the last loop iteration, make sure the cursor falls
in between the grid lines,
(validate_row): request extra space for the grid lines.
2006-06-02 Kristian Rietveld <kris@imendio.com>
Rubber banding for GtkTreeView, #80127. Uses same method as
GtkIconView.
* gtk/gtktreeview.c (gtk_tree_view_class_init),
(gtk_tree_view_init), (gtk_tree_view_get_property),
(gtk_tree_view_set_property), (gtk_tree_view_set_rubber_banding),
(gtk_tree_view_get_rubber_banding): add property,
(gtk_tree_view_button_press): start rubber banding if enabled and
press is on a non-selected node,
(gtk_tree_view_button_release): stop rubber banding,
(gtk_tree_view_motion_bin_window), (scrool_row_timeout): enable/update
the rubber band,
(gtk_tree_view_bin_expose): draw rubber band if active,
(gtk_tree_view_stop_rubberband),
(gtk_tree_view_update_rubber_band_selection_range),
(gtk_tree_view_update_rubber_band_selection),
(gtk_tree_view_update_rubber_band),
(gtk_tree_view_paint_rubber_band): new functions.
* gtk/gtktreeview.h: add new set/get function for rubber banding
property.
* gtk/gtktreeprivate.h: add a bunch of new private fields.