Commit Graph

106 Commits

Author SHA1 Message Date
Timm Bäder
1405bcb32d GtkListBox: Allow a NULL callback in bind_model
When unsetting the bound model, one can pass NULL, but in that case the
create_func parameter should also be NULL.
2015-09-03 16:12:15 +02:00
Benjamin Otte
207e593075 listbox: Mark activatable rows with a .activatable style class
Do not use .button anymore.

This is for 2 reasons:
1. The styling is seperate in our themes, so it doesn't make sense to
   share the style class.
2. Due to the shared styling of .buton, listbox rows inherit all the
   special case styles that exist for buttons - such as linked buttons,
   header buttons, entry buttons, spinbutton buttons, etc. This means
   that the code has to check all these special cases all the time and
   for listbox rows, this is very slow.
2015-08-26 15:46:07 +02:00
Matthias Clasen
808ea8645a list box: Document incompatible configurations
Explain in the docs that using a model is incompatible with
using filter or sort functions.

http://bugzilla.gnome.org/show_bug.cgi?id=752615
2015-08-25 15:54:58 -04:00
Matthias Clasen
a27309c6e4 list box: Warn for nonworking configurations
GtkListBox sort and filter functionality does not work with
models. Issue a warning in this case.

http://bugzilla.gnome.org/show_bug.cgi?id=752615
2015-08-25 15:54:58 -04:00
Matthias Clasen
1d2ff9a069 list box: Make focusable headers possible
Previously we were assuming that only list box rows could occur
as focus children of a list box, and would crash if that wasn't
the case. This commit handles this case, and integrates focusable
headers into directional keynav and the focus chain.

The typical case of using separators as headers is not affected
by this change.

https://bugzilla.gnome.org/show_bug.cgi?id=753694
2015-08-21 20:51:03 -04:00
Matthias Clasen
a6bb7a9a46 list box: Shorten some static function names 2015-08-16 18:12:16 -04:00
Kalev Lember
d6f51ef7b2 listbox: Avoid using show_all on rows
Don't use gtk_widget_show_all() on row widgets because that would
unconditionally show all of its children. This might be unwanted in case
the row implementation wants to keep some of its children hidden.

This commit changes it to use show() instead of show_all() and relies on
the row widget to control the visibility of its children itself as
appropriate.

https://bugzilla.gnome.org/show_bug.cgi?id=753392
2015-08-08 16:54:31 +02:00
Jasper St. Pierre
36c0c9d0b8 listbox: Don't queue draws on the entire widget
The set_state_flags code should already queue redraws when needed.
2015-08-02 12:57:31 -07:00
Matthias Clasen
58fa3d96a8 listbox: Fix shift-selection
Selecting a range of rows with Shift-click was accidentally broken
in e6e511eb46. Make it work again.
2015-07-26 02:40:26 -04:00
Matthias Clasen
1da92c2800 GtkListBox: Improve focus scrolling
We are trying to scroll the header in view together with the
focus row. The way this is implemented works fine when scrolling
up, but falls short when scrolling down. Fix this by making sure
that both the row and the header bar visible.
2015-07-19 22:18:58 -04:00
Matthias Clasen
52c4955d21 GtkListBox: Listen for adjustment changes
We automatically pick up an adjustment from our parent
scrollable, but we failed to update it when it changes.
This is happening in the places sidebar, and it was causing
the focus-tracking to fail there, letting the focus move
out of view. With this change, the focus remains visible.
2015-07-19 22:08:36 -04:00
Matthias Clasen
361915628d list box: Remove unnecessary checks
Again, coverity takes these as clues to complain.
2015-07-17 18:40:11 -04:00
Benjamin Otte
6e4f42f97e cssnode: Change API of some functions
gtk_css_node_set_after/before() are now called
gtk_css_node_insert_after/before().

This brings them in line with other similar APIs (ie GtkListStore). And
it allows easier usage of the API (see changes to gtkbox.c).
2015-07-16 06:15:13 +02:00
Cosimo Cecchi
db76eae41a listbox: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Carlos Soriano
e74d2b7564 gtklistboxrow: propagate in the draw vfunc
So objects connected by g_signal_connect_after actually get
the signal.
This was causing an issue in the dnd highlight, since there
a cairo rectangle is draw using g_signal_connect_after on the draw
signal.
2015-06-10 17:47:23 +02:00
Christian Hergert
aa07c40748 listbox: add support for :first-child, :last-child and others
This applies the proper CSS child ordering semantics using GtkCssNode to
GtkListBox. You can now use :first-child, :last-child, :nth-child(), and
:last-nth-child() selectors.

For example, this allows styling row separators using CSS while ignoring
the separator on the last row.

 GtkListBoxRow {
   border-bottom: 1px solid @borders;
 }
 GtkListBoxRow:last-child {
   border-bottom: none;
 }

When the sort ordering of the listbox changes, we also update the CSS
node ordering.
2015-05-29 20:03:11 -07:00
Ryan Lortie
6e03e7e80a GtkListBox: fix model binding refcount issue
As it is, GtkListBox model binding will work nicely as long as your
create_widget_func returns a floating reference on the newly-created
widget.

If you try to return a full reference (as any higher-level language
would do) then you will leak that reference.

Fix that up by converting any floating references into full references
and then unconditionally releasing the full reference after adding to
the box.

https://bugzilla.gnome.org/show_bug.cgi?id=746893
2015-03-27 12:07:17 -04:00
Rafal Luzynski
3ce3593ebf GtkListBoxRow: add g_return_if_fail to grab_focus, don't crash
Although gtk_list_box_row_grab_focus() is not a public function
it can be easily called by gtk_widget_grab_focus() with a row argument
which has been removed from the list box and has box == NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=744879
2015-02-27 06:31:06 -05:00
Philip Withnall
3d88899072 gtk: Fix various tiny typos in documentation comments
e.g. Invalid syntax in introspection annotations, typos in object names,
accidentally using a gtk-doc comment for an internal function.
2015-02-18 11:38:37 +00:00
Lars Uebernickel
d825249b42 gtklistbox: add bind_model()
gtk_list_box_bind_model() binds a GListModel to a GtkListBox.

This is a first step towards having GListModel support in Gtk. It's not
useful for large models, because GtkListBox always creates all widgets
for all rows.
2015-02-12 11:22:07 +01:00
Timm Bäder
9141eeb60e GtkListBoxRow: Update the listbox's cursor row when focusing
https://bugzilla.gnome.org/show_bug.cgi?id=708320
2015-02-12 09:58:29 +01:00
Carlos Garnacho
594de00cad listbox: Free the multipress gesture on finalize 2015-01-14 17:11:25 +01:00
Matthias Clasen
e6e511eb46 GtkListBox: Fix a bug in unselection
Ensure that gtk_list_box_get_selected_row returns NULL after
gtk_list_box_unselect_all. Add a testcase that detects this
problem.
2014-10-31 22:34:09 -04:00
Matthias Clasen
291e4e107d GtkListBox: Support placeholders in ui files
This makes the gtk_list_box_set_placeholder functionality
available from GtkBuilder

https://bugzilla.gnome.org/show_bug.cgi?id=738111
2014-10-12 18:54:44 -04:00
Benjamin Otte
b5a8b7ef3b widget: Make _gtk_set_simple_clip() take an optional content clip 2014-08-21 00:54:07 +02:00
Matthias Clasen
87ad4ec2c2 GtkListBox: fix up docs 2014-08-16 21:40:39 -04:00
Timm Bäder
f09573757d GtkListBoxRow: Set clip
https://bugzilla.gnome.org/show_bug.cgi?id=734709
2014-08-14 00:13:18 -04:00
Florian Müllner
6f857f87dc listbox: Add missing ::row-selected emissions
Rows are not necessarily selected via select_row_internal(), add
the missing signal emissions there. Also the signal should be emitted
when removing the selection altogether.

https://bugzilla.gnome.org/show_bug.cgi?id=729809
2014-08-03 23:17:01 +02:00
Matthias Clasen
fffd58fca8 GtkListBox: Mention activatable and selectable in the docs 2014-07-15 23:57:34 -04:00
Matthias Clasen
0bfad993ac GtkListBox: Implement non-selectable rows
This commit changes things so that we never mark non-selectable
rows as selected.
2014-07-15 23:57:33 -04:00
Matthias Clasen
7932370ef8 GtkListBox: Style selectable rows differently
We now apply the .button style class to rows that are either
activatable or selectable. Selectable rows only get the .button
if the listbox allows selection. This implies that we need to
update row styles when the selection mode changes, or when the
row gets added to a listbox.
2014-07-15 23:56:47 -04:00
Matthias Clasen
71f589c0b0 GtkListBox: Add a GtkListBoxRow:selectable property
Having an explicit property for this will make it easier
to have a hover style only for rows which are activatable
or selectable.

Rows are selectable by default, to preserve compatibility.
2014-07-15 23:56:47 -04:00
Matthias Clasen
880c6678eb Fix documentation typos 2014-07-15 23:56:47 -04:00
Matthias Clasen
83e9e0bd8f GtkListBox: Refactor ::activatable implementation
Store the value in the row struct, and split the style updating
out into a separate function.
2014-07-15 22:42:29 -04:00
Matthias Clasen
27244fb9d7 listbox: Update docs
Multiple selection is supported now.
2014-07-14 08:48:33 -04:00
Matthias Clasen
a67570b9e0 listbox: Avoid a warning
Don't try to set an adjustment value if we don't have an adjustment.
2014-07-13 15:51:03 -04:00
Matthias Clasen
a2ac9e1baa listbox: Scroll headers on screen
The listbox code relies on the container focus adjustment handling
to scroll the cursor row on screen. But GtkContainer has no idea
about row headers, so ensure that we scroll the header on screen too.
2014-07-13 13:00:37 -04:00
Paolo Borelli
808705327d list-box: fix typo in natural size computation 2014-07-13 15:47:03 +02:00
Matthias Clasen
2b9285e52e GtkListBox: Add an activatable property for rows
This will let us theme activatable rows differently.
We also avoid emitting the ::row-activated signal for
rows that are not activatable. For compatibility reasons,
rows are activatable by default.

https://bugzilla.gnome.org/show_bug.cgi?id=733112
2014-07-13 09:26:27 -04:00
Matthias Clasen
6f6cedcc66 Trivial typo fix 2014-07-12 14:47:48 -04:00
Matthias Clasen
e31056f9b3 GtkListBox: Animate keybindings 2014-07-02 20:58:16 -04:00
Matthias Clasen
6e03ac9958 GtkListBox: Use G_PARAM_EXPLICIT_NOTIFY 2014-06-09 13:30:50 -04:00
Carlos Garnacho
933ff62f66 listbox: Use multipress gesture for row selection/activation
This gesture replaces the button_press/release_event handlers.
2014-06-05 16:15:54 +02:00
Evan Nemerson
54ec42f035 gtk: port many nullability annotation fixes from Vala bindings
https://bugzilla.gnome.org/show_bug.cgi?id=730745
2014-05-30 13:24:20 -07:00
Cosimo Cecchi
9eb1e1b15e listbox: don't use focus-line-width 2014-05-09 11:02:46 -07:00
Cosimo Cecchi
241b4c0c75 listbox: don't use focus padding 2014-05-09 11:02:43 -07:00
Matthias Clasen
c813765430 GtkListBox: improve the docs
The documentation was not really clear about ::row-selected
not working for multi-selection.
2014-05-08 07:33:01 -04:00
Paolo Borelli
abf10a74b7 listbox: check gsequence end iter in get_row_at_index 2014-05-04 19:45:28 +02:00
Cosimo Cecchi
24fd96d837 listbox: fix a segfault
Don't dereference a NULL pointer.
2014-05-01 19:48:41 +02:00
Benjamin Otte
d7a3e67025 listbox: Remove unneeded checks
Size vfuncs always get non-null out variables passed, so no need to
check for NULL.
2014-05-01 14:51:28 +02:00