Commit Graph

137 Commits

Author SHA1 Message Date
Matthias Clasen
7860e2d5cd flowbox: don’t try to focus or draw NULL widgets
Rubberbanding over an empty area results in warnings, due to the code
trying to focus and queue a null pointer for drawing.

https://bugzilla.gnome.org/show_bug.cgi?id=780734
2017-04-05 20:15:32 -04:00
Timm Bäder
43cdeee3c4 widget: Save pointer to focus child
Do the same thing GtkContainer does.
2017-03-31 09:50:39 +02:00
Ernestas Kulik
fe1e53ad87 flowbox: don’t select when rubberbanding over nothing
When rubberbanding over an empty area, everything is selected on gesture
end, which is a bit counter-intuitive.

https://bugzilla.gnome.org/show_bug.cgi?id=780735
2017-03-31 07:24:15 +03:00
Timm Bäder
0675fce506 flowboxchild: Use gtk_widget_measure to measure widget sizes
GtkFlowBoxChild is a simple GtkBin, so measure the child widget size in
a simple way.
2017-02-17 18:23:10 +01:00
Timm Bäder
82e49952e5 flowbox: Measure child widget sizes using gtk_widget_measure 2017-01-22 15:01:40 +01:00
Benjamin Otte
6055028c96 snapshot: Rename append APIs
Instead of having gtk_snapshot_append_foo_node(), just have
gtk_snapshot_append_foo(). Nobody needs to know that this internally
uses nodes.
2017-01-13 04:46:09 +01:00
Benjamin Otte
c1f1dae997 viewport: Remove API to query GdkWindows 2017-01-08 00:48:13 +01:00
Debarshi Ray
2cbe057351 flowbox: Don't emit child-activated while dragging the pointer
https://bugzilla.gnome.org/show_bug.cgi?id=776306
2016-12-20 18:48:03 +01:00
Benjamin Otte
0dbdf0c428 gadget: Remove gtk_css_gadget_draw()
And with it, remove the draw func from custom gadgets, that has been
NULL everywhere.

All gadgets are snapshot now.
2016-12-20 18:01:12 +01:00
Debarshi Ray
7ea199c831 flowbox: Export gtk_flow_box_get_child_at_pos as public API
https://bugzilla.gnome.org/show_bug.cgi?id=776187
2016-12-20 00:35:17 +01:00
Debarshi Ray
7331735499 flowbox: Don't emit selected-children-changed during destruction
https://bugzilla.gnome.org/show_bug.cgi?id=776012
2016-12-19 18:05:59 +01:00
Debarshi Ray
9791641d43 flowbox: Rename gtk_flow_box_find_child_at_pos for consistency
... with gtk_list_box_get_row_at_y. It would be nice to avoid the
'find' versus 'get' discrepancy since we are planning to expose it as
public API.

https://bugzilla.gnome.org/show_bug.cgi?id=776187
2016-12-19 15:07:53 +01:00
Debarshi Ray
1f7b03bb2b flowbox: Fix get_child_at_index crash with an invalid index
https://bugzilla.gnome.org/show_bug.cgi?id=775525
2016-12-02 19:17:40 +01:00
Benjamin Otte
d12c81f177 flowbox: Size gadget realtive to widget->window
This fixes a few clipping issues and syncs code with GtkListBox.
2016-11-30 15:15:08 +01:00
Emmanuele Bassi
4cbe079767 Use Graphene init macros for compound literals
The Graphene init macros can now be used for compound literals, which
means we need to update our mixed uses.
2016-11-21 16:21:38 +00:00
Benjamin Otte
150f75af66 snapshot: Convert GtkFlowBox 2016-11-15 17:49:19 +01:00
Benjamin Otte
da207c9fdd snapshot: Add a snapshot function to GtkCssCustomGadget 2016-11-15 17:48:45 +01:00
Benjamin Otte
9006e697fb flowbox: children per line may not be 0 2016-11-15 17:48:45 +01:00
Benjamin Otte
2f8df5237f flowbox: Turn into no-window widget 2016-11-06 14:41:07 +01:00
Benjamin Otte
a0e63b8a07 rendernode: Require passing a renderer to get_draw_context()
This is in preparation of making render nodes independent of the
renderer, so that they can be rendered multiple times with different
renderers.
2016-11-01 16:32:26 +01:00
Timm Bäder
5c99f7a670 Fix clip of more windowed widgets 2016-10-28 19:33:47 +02:00
Alexander Larsson
70935f0952 Drop support for offscreen GdkWindows
These complicate a lot of GdkWindow internals to implement features
that not a lot of apps use, and will be better achieved using gsk.
So, we just drop it all.
2016-10-25 09:54:37 +02:00
Timm Bäder
9992a616ef widget: Use ::measure vfunc to measure size
Add a new ::measure vfunc similar to GtkCssGadget's that widget
implementations have to override instead of the old get_preferred_width,
get_preferred_height, get_preferred_width_for_height,
get_preferred_height_for_width and
get_preferred_height_and_baseline_for_width.
2016-10-22 19:05:47 +02:00
Matthias Clasen
f101ef7cd1 Convert GtkFlowBox to indirect rendering 2016-10-18 11:49:15 +01:00
Benjamin Otte
1c6a879e1c flowbox: Use gdk_window_new_child() 2016-10-18 00:22:35 +02:00
Benjamin Otte
4df6ddad54 API: container: Remove gtk_container_set_border_width() 2016-10-16 18:18:58 +02:00
Benjamin Otte
1518fe0a8f API: stylecontext: Remove state argument from getters
The argument must always be the current state.
2016-10-16 18:18:58 +02:00
Matthias Clasen
bbd94b5a9f gtk: Strip newlines from g_warning and g_error
g_logv adds one for us already.
2016-02-28 12:23:12 -05:00
Timm Bäder
c360b5fb49 Remove more unnecessary redraws
The call to gtk_widget_set_state_flags immediately before these already
queues a redraw/allocate/resize in case they have to be queued.
2016-02-07 19:16:26 +01:00
Matt Watson
11ad60d386 flowbox: remove unused prelight code
It was causing needless redraws

https://bugzilla.gnome.org/show_bug.cgi?id=759757
2015-12-21 14:52:11 -08:00
Matthias Clasen
2f544655f9 Revise CSS node documentation
Clarify the use of brackets in the CSS node diagrams:
[] means optional nodes or classes, <> means child widgets.
2015-12-16 10:58:47 -05:00
Matthias Clasen
06b28a610b flowbox: Don't render focus erroneously
The gadget render function should only return TRUE if the
widget has the focus, and wants it rendered.
2015-12-15 15:10:08 -05:00
Matthias Clasen
49e24b05b5 flowbox: convert to gadgets 2015-12-15 08:41:16 -05:00
Matthias Clasen
3b264ea555 flowbox: Convert child to gadgets 2015-12-15 08:41:16 -05:00
Timm Bäder
c3fd1b3b73 GtkFlowBox: Add missing nullable annotation 2015-12-12 09:29:08 +01:00
Timm Bäder
c02f68f0ba GtkFlowBox: Fix copy/paste mistake in docs 2015-12-12 09:29:08 +01:00
Timm Bäder
2182fe7d9d Don't pass widget state flags to GtkStyleContext API 2015-11-22 17:11:35 +01:00
Matthias Clasen
afc09d924e flowbox: Add a diagram to CSS documentation 2015-11-10 07:39:40 -05:00
Matthias Clasen
6c7f4b78b5 flowbox: Use a CSS node for rubberband drawing
Use a CSS node with name rubberband to draw the rubberband
selection.
2015-11-10 00:51:48 -05:00
Matthias Clasen
ec60bd889c flowbox: Add element names
The names used here are flowbox and flowboxchild.
2015-11-05 15:23:44 -05:00
Rafal Luzynski
3c253c46a5 flowbox: correct the behavior with "can-focus"==FALSE
In fact there were two issues:

1. GtkFlowBoxChild with "can-focus"==FALSE should pass the focus
to its child immediately.
2. GtkFlowBox with "can-focus"==FALSE should cease its custom keynav
implementation and fall back to the default GtkContainer behavior
which is more natural.

Thanks to these changes the flow box can act as a better replacement
for GtkGrid and similar containers.

https://bugzilla.gnome.org/show_bug.cgi?id=753371
2015-10-03 22:48:15 -04:00
Alexander Larsson
d5f1754981 gtk: Stop setting GDK_EXPOSURE_MASK on random widgets
These days exposure happens only on the native windows (generally the
toplevel window) and is propagated down recursively. The expose event
is only useful for backwards compat, and in fact, for double buffered
widgets we totally ignore the event (and non-double buffering breaks
on wayland).

So, by not setting the mask we avoid emitting these events and then
later ignoring them.

We still keep it on eventbox, fixed and layout as these are used
in weird ways that want backwards compat.
2015-09-14 11:01:13 +02:00
Matthias Clasen
66f0bdee0a Intern all signal names beforehand
This avoids pointless allocations
2015-09-12 12:50:39 -04:00
Rafal Luzynski
7a676cdc14 flow box: Fix bad children allocation with RTL locales
If the position of the children is always relative to the box
then we should not take the allocation of the box into account
when flipping the children for RTL text direction.

This patch also removes unused assignments to child_allocation.

https://bugzilla.gnome.org/show_bug.cgi?id=754559
2015-09-04 09:23:52 -04:00
Matthias Clasen
692f60ebb0 flow box: Avoid a critical in keynav
We were not taking into account that gtk_flow_box_get_next_focusable
can return NULL, in all callers. Fix that.
2015-08-26 20:00:40 -04:00
Matthias Clasen
9cc41307d1 flow box: Document incompatible configurations
Explain in the docs that using a model is incompatible with
using filter or sort functions.
2015-08-25 15:54:58 -04:00
Matthias Clasen
c099859872 flow box: Warn for nonworking configurations
GtkFlowBox sort and filter functionality does not work with
models. Issue a warning in this case.
2015-08-25 15:54:58 -04:00
Emmanuele Bassi
3de1bd383a flowbox: Sink the floating reference of model-based children
We don't want to leak references if the widget created to represent the
item in the model does not have a floating reference — which is usually
what happens in bindings, as they automatically sink references when
creating new instances.

See commit 6e03e7e8 for the similar change in GtkListBox.
2015-08-17 13:32:35 +01:00
Matthias Clasen
a777186785 Add gtk_flow_box_bind_model 2015-08-16 18:20:50 -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
9696d1b4bb flowbox: don't set gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Benjamin Otte
5984bc78ee flowbox: Fix compiler warnings
Introduced in e59e38b581
2015-05-30 06:00:14 +02:00
Matthias Clasen
e59e38b581 GtkFlowBox: support positional css selectors
As in the previous commit for GtkListBox, support :first-child,
:last-child, :nth-child() and :last-nth-child() selectors here.
2015-05-29 23:37:42 -04:00
Benjamin Otte
91467a45fc stylecontext: Deprecate functions
- gtk_style_context_get_background_color()
- gtk_style_context_get_border_color()

Those functions shouldn't be used anymore, because they don't represent
anything from the CSS styling we support. The background color often
isn't used due to background images and there are actually 4 different
border colors (1 for each side) - if there isn't also a border image in
use.
2014-10-03 06:18:06 +02:00
Matthias Clasen
04c4e1963f GtkFlowBox: Add a missing #include 2014-07-18 23:00:54 -04:00
Matthias Clasen
7ed133397a GtkFlowBox: Set orientable style classes initially
This was an omission, horizontal/vertical would only be set
when the orientation is changed.
2014-07-18 19:38:16 -04:00
Matthias Clasen
6877253e14 GtkFlowBox: Explicitly notify orientation 2014-06-09 13:31:01 -04:00
Matthias Clasen
51d17910a1 GtkFlowBox: Use G_PARAM_EXPLICIT_NOTIFY 2014-06-09 13:30:50 -04:00
Matthias Clasen
b549e52c2c GtkFlowBox: Convert to g_object_class_install_properties 2014-06-09 13:30:50 -04:00
Matthias Clasen
45801c8f2c GtkFlowBox: Move overridden prop ids to the end
This makes it easier to convert to g_object_class_install_properties
in the next commit.
2014-06-09 13:30:50 -04:00
Matthias Clasen
ac08d6a421 GtkFlowBox: Drop unused prop ids
No h/valign properties here.
2014-06-09 13:30:50 -04:00
Carlos Garnacho
3ffb4fa699 flowbox: Use gestures for event management
A multipress gesture takes care of item selection/activation, and
a drag gesture is used to manage events when rubberbanding selection
is performed.
2014-06-05 16:15:54 +02:00
Cosimo Cecchi
57f4d3d78a flowbox: don't use focus-line-width 2014-05-09 11:02:46 -07:00
Cosimo Cecchi
053b21cc1f flowbox: don't use focus padding 2014-05-09 11:02:43 -07:00
Juan Pablo Ugarte
35df3bc182 GtkFlowBox: fixed NULL dereferencing segfaults 2014-05-01 20:31:59 -03:00
Benjamin Otte
43e470dad1 flowbox: Remove unneeded checks
Size vfuncs always get non-null out variables passed, so no need to
check for NULL.
2014-05-01 14:51:27 +02:00
Benjamin Otte
73aa7bd2f5 widgets: Remove (GtkTickCallback) casts
Instead, make the functions conform to the prototype, so that casting
isn't needed.
2014-04-29 19:35:29 +02:00
Matthias Clasen
7ac684e9e3 flow box: Avoid excessive signals
We were emitting the a11y ::selection-changed signal much more
often than ::selected-children-changed. Thats not necessary.
2014-03-29 00:46:51 -04:00
Matthias Clasen
3d0b7314cd Trivial typo fix 2014-03-28 23:51:52 -04:00
William Jon McCann
469d333aa2 docs: use Returns: consistently
Instead of Return value:
2014-02-19 18:56:05 -05:00
Murray Cumming
a76bb2c177 docs: Fix tiny typo. 2014-02-10 12:44:52 +01:00
Juan R. García Blanco
dbf1521ad4 GtkFlowBox::child-activated: fix param type in g_signal_connect
Replace GTK_TYPE_WIDGET with more specific GTK_TYPE_FLOW_BOX_CHILD
for GtkFlowBox::child-activated. This matches signature of
child_activated slot in class struct.

https://bugzilla.gnome.org/show_bug.cgi?id=723716
2014-02-07 21:39:49 -05:00
William Jon McCann
326da2da58 docs: don't use <anchor> 2014-02-07 15:40:52 -05:00
William Jon McCann
e34bd4137d docs: use apostrophes in *n't 2014-02-07 13:32:47 -05:00
William Jon McCann
7a208fbbf3 docs: use proper apostrophe
https://wiki.gnome.org/Design/OS/Typography
2014-02-07 13:06:10 -05:00
William Jon McCann
0ce016650b docs: Use markup for links 2014-02-07 09:42:12 -05:00
Matthias Clasen
245c385ae7 Docs: Don't use note elements
In most cases, the text itself makes the message clear enough.
2014-02-02 01:22:14 -05:00
Matthias Clasen
30cc1512e6 Docs: Use markdown for lists
This greatly reduces the amount of xml in the docs.
2014-02-02 01:07:39 -05:00
Andika Triwidada
0a768d274d Changed obsolete FSF portal addresses to web address
Fixed https://bugzilla.gnome.org/show_bug.cgi?id=721530
2014-01-12 19:56:49 +07:00
Debarshi Ray
bcc6979f89 flowbox: Always return a NULL iter when we are at the end
The objective is simplify the semantics of the code so that we don't
need to check for "(iter != NULL && !g_sequence_iter_is_end (iter))"
in the callers.
2013-10-21 16:33:13 +02:00
Debarshi Ray
65dd26d3f3 flowbox: Be careful when the container is empty
Otherwise, showing an empty GtkFlowBox will lead to:
GLib-CRITICAL **: g_sequence_get: assertion '!is_end (iter)' failed
2013-10-21 16:21:11 +02:00
Jasper St. Pierre
fa6f83d89a gtkflowbox: Fix warning when realizing
set_background needs the widget's window to be set.
2013-10-17 15:14:57 -04:00
Chun-wei Fan
d47eac5ba5 gtk/gtkflowbox: Fix build warning/error
The newly-added gtk_flow_box_child_is_selected() needed to return a
gboolean, so use g_return_val_if_fail() to return FALSE when an invalid
GtkFlowBoxChild* is passed in.
2013-10-07 12:13:11 +08:00
Matthias Clasen
98e8505234 Tweak flowbox selection behaviour
Make flowbox selection more orthodox. Control and Shift now
modify the selection behaviour pretty much in the same way
they do in a tree view, and clicking without modifiers will
clear the selection.

When dealing with touch devices, we treat modifier-less events
as modifying the selection.

This commit also adds a few other selection necessities, such
as catching Escape key presses to cancel rubberband selection,
and handling grab notify.
2013-10-06 23:31:18 -04:00
Matthias Clasen
b937557d95 Make resetting a filter work properly
We need to make sure all children are marked as child-visible
again when the filter func is reset.
2013-10-06 23:31:18 -04:00
Matthias Clasen
f733903334 Fix wording in the docs 2013-10-06 23:31:17 -04:00
Matthias Clasen
943d575ec3 Add GtkFlowBox
GtkFlowBox is a container that its children in a reflowing
grid, which can be oriented horizontally or vertically.

It is similar to GtkListBox in that the children can
be sorted and filtered, and by requiring a dedicated child
widget type, GtkFlowBoxChild. It is similar to GtkTreeView
in that is supports a full set of selection modes, including
rubberband selection.

This is the culmination of work that has happened in the
egg-list-box module, and earlier in libegg. The origins of
this code are the EggSpreadTable in libegg, which was written
by Tristan van Berkom. It was moved to egg-list-box and
renamed EggFlowBox by Jon McCann, and I gave it some finishing
touched in the flowbox-improvements branch of that module.
2013-10-06 23:31:17 -04:00