Commit Graph

47173 Commits

Author SHA1 Message Date
Jonas Ådahl
044e4b15a6 wayland: Track orphaned dialogs per display
Don't track all orphaned dialogs globally, as mixing them up with each
other would in most cases trigger errors when we try to pass bogus
values to Wayland requests.

https://bugzilla.gnome.org/show_bug.cgi?id=765474
2016-05-05 15:03:59 -04:00
Matthias Clasen
f6a5dad12c Expand the drag widget testcase
This adds a testcase which reuses the drag widget for multiple
drags.
2016-05-05 15:03:59 -04:00
Matthias Clasen
b38e4e0ac0 notify test: Skip GtkFontButton::font-name
This is not freely settable.
2016-05-05 15:03:59 -04:00
Matthias Clasen
4b4533ef68 font button: Fix translation of font-name default
The default value should come out of regular translations, not
property translations.
2016-05-05 15:03:59 -04:00
Christian Hergert
113ce66151 wayland: avoid jitter in keyboard repeat
When synthesizing keyboard repeat, we can potentially drift further from
the mark depending on the timing of the frame callback and how long it
took to deliver the event.

This patch attempts to reduce this by tracking from a stable epoch the
time of our next keyboard repeat.

https://bugzilla.gnome.org/show_bug.cgi?id=765567
2016-05-05 15:03:59 -04:00
Timm Bäder
021d065a1f GtkLabel: Use g_clear_object
https://bugzilla.gnome.org/show_bug.cgi?id=765496
2016-05-05 15:03:58 -04:00
Timm Bäder
db17324d82 GtkLabel: Don't manually iterate over link list
There are various functions to access links based on their index for
a11y. We can spare quite a few lines of code by just using
g_list_nth_data instead of iterating over the list ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=765496
2016-05-05 15:03:58 -04:00
Christian Hergert
d505df90b0 builtinicon: avoid calculating font-metrics in vast majority of cases
We perform lots of gadget allocations that require allocating a
GtkBuiltinIcon. One notable example is the scrollbar for a scrolled
window.

In the process of doing this, we often calculate baseline information that
isn't necessary. With how much this code path gets exercised, its worth
catching the result for the common case, which is that the font-description
has not changed and we are using the default language the application
was started with.

This simply caches the previous result and verifies that we can reuse it
with pango_font_description_hash() and a simple language check.

Numbers below are scrolling through a textview with GDK_KEY_Down.

Before:
      SELF CUMULATIVE    FUNCTION
[   0.08%] [   9.26%]    gtk_builtin_icon_get_preferred_size
[   0.01%] [   8.82%]      pango_context_get_metrics
[   0.02%] [   0.16%]      gtk_widget_get_pango_context
[   0.06%] [   0.06%]      pango_context_get_language
[   0.01%] [   0.02%]      g_type_check_instance_cast
[   0.02%] [   0.02%]      strlen
[   0.02%] [   0.02%]      pango_context_get_font_description
[   0.02%] [   0.02%]      g_list_foreach
[   0.01%] [   0.01%]      gtk_css_style_get_value
[   0.01%] [   0.01%]      itemize_with_font
[   0.01%] [   0.01%]      pango_context_get_type
[   0.01%] [   0.01%]      get_base_metrics
[   0.00%] [   0.01%]      pango_font_metrics_unref
[   0.01%] [   0.01%]      g_list_free
[   0.01%] [   0.01%]      gtk_builtin_icon_get_type

After:
      SELF CUMULATIVE    FUNCTION
[   0.08%] [   0.18%]    gtk_builtin_icon_get_preferred_size
[   0.02%] [   0.02%]      pango_font_description_hash
[   0.00%] [   0.02%]      gtk_widget_get_pango_context
[   0.00%] [   0.02%]        g_object_get_qdata
[   0.00%] [   0.02%]          g_datalist_id_get_data
[   0.02%] [   0.02%]      gtk_builtin_icon_get_type
[   0.01%] [   0.01%]      pango_context_get_font_description
[   0.00%] [   0.01%]      - - kernel - -
[   0.01%] [   0.01%]      pango_context_get_language
[   0.00%] [   0.01%]      gtk_css_style_get_value
[   0.00%] [   0.01%]      gtk_css_gadget_get_style

https://bugzilla.gnome.org/show_bug.cgi?id=765486
2016-05-05 15:03:58 -04:00
Paolo Borelli
db326889f9 inspector: do not leak seat capabilities descriprion
Factor out an utility function for readability and free the string
with the list of capabilities
2016-05-05 15:03:58 -04:00
Christian Hergert
6be0f108b4 kineticscrolling: avoid stutter at tail of kinetic deceleration
When decelerating the kinetic scroll, we can get into a position where it
looks like we are stuttering. This happens because the amount we move is
so little that it takes multiple frames to make forward progress by one
pixel.

This prevents that by detecting when we have reached the slow stutter of
the deceleration and simply stops the deceleration phase immediately.

https://bugzilla.gnome.org/show_bug.cgi?id=765493
2016-05-05 15:03:58 -04:00
Paolo Borelli
136409b8cd textiter: add unit test for forward_to_line_end
Surprisingly we had no unit test for this method
2016-05-05 15:03:58 -04:00
Matthias Clasen
84e0bef150 Fix formatting
The previous change was not quite using the right coding style.
2016-05-05 15:03:58 -04:00
Timm Bäder
0e002cbef0 listbox: Make sure page down/up move at least one row
When the current cursor_row is taller than the page_size we get from the
GtkAdjustment, the previous code would not actually cause any scrolling,
so make sure we just take the row after or before the cursor_row in that
case.

https://bugzilla.gnome.org/show_bug.cgi?id=765261
2016-05-05 15:03:58 -04:00
Benjamin Otte
107b5d7397 cssshadowsvalue: Avoid allocating new value if not needed 2016-05-05 15:03:58 -04:00
Benjamin Otte
8efd10c9fd cssbordervalue: Avoid allocating new value if not needed 2016-05-05 15:03:58 -04:00
Benjamin Otte
758e10ad41 cssbgsizevalue: Avoid allocating new value if not needed 2016-05-05 15:03:58 -04:00
Matthias Clasen
5d5b7c9f7f Add a dnd test using a window as icon
This case is causing problems in firefox. Lets at least make
sure that it doesn't crash in GTK+.
2016-05-05 15:03:58 -04:00
Jonathan Matthew
761f19e7d7 gtkmenusectionbox: remove submenus when the parent item is removed
https://bugzilla.gnome.org/show_bug.cgi?id=749405
2016-05-05 15:03:58 -04:00
Matthias Clasen
c33d8c7005 widget: Don't show widget resizes in the inspector
Avoiding this sort of visual debugging in the inspector
is the main reason we have per-display debug flags now.
2016-05-05 15:03:57 -04:00
Matthias Clasen
4cf6141462 css gadget: Fix baseline debug
We were not using the baseline that we're computing.
2016-05-05 15:03:57 -04:00
Matthias Clasen
3376093058 Use qdata for debug flags
This avoids some overhead.
2016-05-05 15:03:57 -04:00
Matthias Clasen
11e8573d0e css gadget: Don't get display flags twice
This got more expensive now that we store them per-display,
so don't get them twice in the same function.
2016-05-05 15:03:57 -04:00
Christian Hergert
8653bb8122 debug: remove open-coded debug checks in gtktextsegment
These runtime checks were being performed whether or not we were in a
debug build. Using GTK_DEBUG_CHECK() will compile out of production
builds, as it will result in something like:

  if (G_UNLIKELY(0))

which the optimizer can prune.

https://bugzilla.gnome.org/show_bug.cgi?id=765284
2016-05-05 15:03:57 -04:00
Matthias Clasen
9e2d5b9064 Add some va marshallers to frequent signals
This makes us take the fast path in signal emission.
2016-05-05 15:03:57 -04:00
Matthias Clasen
bdda7d1fa8 magnifier: Only connect to ::draw when needed
This making us take the slow path in ::draw handling, so we
want to avoid it if we can.

https://bugzilla.gnome.org/show_bug.cgi?id=765238
2016-05-05 15:03:57 -04:00
Lapo Calamandrei
7dbe3d953d Adwaita: more flexible headerbar_fill mixin
adding an additional background layer as a parameter.
2016-05-05 18:07:55 +02:00
Kjartan Maraas
80a93be9e6 Updated Norwegian bokmål translation. 2016-05-03 23:22:42 +02:00
Olivier Fourdan
a537bdc1fe wayland: fix up/down mix up in discrete events
The wayland specification for discrete step information for scroll and
other axes reads:

| The discrete value carries the directional information. e.g. a
| value of -2 is two steps towards the negative direction of this axis.

mutter sets a value of 1 for SCROLL_DOWN events and -1 for SCROLL_UP
events.

gdkdevice Wayland backend does the opposite, it translates a positive
discrete value as SCROLL_UP and a negative value as SCROLL_DOWN, which
ends up inverting the scrolling direction.

Fix the logic in gdkdevice Wayland to use a positive value as
SCROLL_DOWN and a negative value as SCROLL_UP so that it matches mutter
and weston logic.

https://bugzilla.gnome.org/show_bug.cgi?id=765907
2016-05-03 10:50:50 +02:00
Carlos Soriano
848dd947ca testnotebookdnd: add one GtkListBox as tab content
To make sure we test regressions on widgets that bubble up motion
handling and can trigger the motion handling code path on GtkNotebook.

https://bugzilla.gnome.org/show_bug.cgi?id=764395
2016-05-02 13:21:41 +02:00
Carlos Soriano
d6187a3dc4 gtknotebook: avoid tab dnd from content
Before commit 6c1bee2377 we were setting an attribute of GtkNotebook
to track the pressed button if the pressed button happened on the
tab itself.
Later in the motion handling code we were checking whether the private
pressed button attribute was set or not in order to handle a tab dnd
or not.

In commit 6c1bee2377 the code changed and set the pressed button
variable unconditionally, which means, a motion event from within the
tab content triggered a tab reordering.

This happened only if the children hierarchy have a widget that bubbles
up both button press event, which sets the private pressed button
attribute; and motion events, which started the tab dnd checking the
private pressed button attribute.
A widget that experienced the regression was GtkListBox.

In order to fix it, set the button pressed variable only when it press
the tab itself, not the content.

https://bugzilla.gnome.org/show_bug.cgi?id=764395
2016-05-02 13:21:34 +02:00
Руслан Ижбулатов
96e1d7bfac W32: reword the error about required cairo version
1.14.x series does not contain the functionality needed by GTK+.
Advise to use 1.15.x (1.15.2 is available) or 1.16.x (yet to be released).

https://bugzilla.gnome.org/show_bug.cgi?id=765790
2016-04-29 07:07:29 +00:00
Lapo Calamandrei
0f28c2cd47 Adwaita: refactor levelbar styling. 2016-04-28 15:56:14 +02:00
Daniel Stone
8f9693e02c wayland: Ignore NoSymbol keys
NoSymbol is not a valid GDK symbol (it only has the concept of
VoidSymbol, for some reason, which is neither the same thing nor
produced by any sane keymap). Passing NoSymbol events through to GTK+
apps is unlikely to produce anything useful.

In particular, this meant VTE would scroll to the end of the buffer when
pressing Fn (required for Page Up/Down on Macs), as it was receiving a
keypress that wasn't a modifeir. This does not happen on X11, as the
KEY_FN keycode is above 255, so does not get sent to clients.

https://bugzilla.gnome.org/show_bug.cgi?id=764825
2016-04-27 14:08:11 +01:00
Carlos Garnacho
7dac519277 wayland: Perform seat grab focus checks on native windows
We don't care about the specific (possibly client-side) window that
requested the focus here, only the toplevel. Fixes mistakenly sent
focus events when the grab happens inside the current focus window.

https://bugzilla.gnome.org/show_bug.cgi?id=762756
2016-04-27 13:34:27 +02:00
Rūdolfs Mazurs
d0ad84c2a3 Update Latvian translation 2016-04-24 16:18:45 +03:00
Rui Matos
60ba261ed6 wayland: Leave existing mods on map_virtual_modifiers
map_virtual_modifiers() is supposed to add the necessary virtual mods
but otherwise leave the mods that are passed in.

https://bugzilla.gnome.org/show_bug.cgi?id=765270
2016-04-19 21:13:45 +02:00
Timm Bäder
ddde1a58a8 gtkcssimagebuiltin: Save/restore around cairo_clip
This was previously causing trouble in checkbuttons where the check node
didn't have an icon shadow set, e.g. in Raleigh.
2016-04-19 10:40:14 -04:00
Christian Hergert
373749649e frame-clock: avoid g_signal_emit_by_name()
These were showing up higher in Sysprof profiles.

The simple fix is to avoid the emit_by_name() and let the interface emit
the signals directly. No function preconditions are provided since these
are internal API.
2016-04-19 10:39:56 -04:00
Carlos Garnacho
9187677a78 wayland: Improve checks when flushing scroll events
If we get gdk_wayland_seat_flush_frame_event() with no previous event to be
flushed, we fallback into the scroll event checks. However, there's no check
performed there as to whether it really scrolled, so it'd always send a smooth
scroll event with 0/0 deltas in this case.

This should be mostly harmless, but still, we should only end up emitting scroll
events if those really happened.
2016-04-19 10:39:20 -04:00
Carlos Garnacho
b6402da864 wayland: Do not check the pointer focus when receiving wl_pointer.frame
The frame event is also meant to compress wl_pointer.leave events, at this
point the focus surface will be definitely NULL. In the end, wl_pointer.frame
should flush the last composed event despite the pointer focus.

https://bugzilla.gnome.org/show_bug.cgi?id=765065
2016-04-19 10:39:04 -04:00
Carlos Garnacho
32397f0b72 gdk: Make GDK_TOUCH_CANCEL be dealt with similarly to GDK_TOUCH_END
We must emit the cancel event with the same semantics, and towards the GdkWindow
that is currently under the touchpoint, so make proxy_button_event() deal with
GDK_TOUCH_CANCEL.

Fixes the GDK_TOUCH_CANCEL event being emitted only on the toplevel, which is
usually non-sufficient.
2016-04-19 10:37:34 -04:00
Matthias Clasen
6e00717079 menuitem: Fix some possible problems with arrow_gadget
https://bugzilla.gnome.org/show_bug.cgi?id=765134 shows
a stacktrace where we end up with arrow_gadget being NULL
despite the conditions for its presence being satisfied.

This commit makes sure we call update_arrow_gadget() whenever
any of the conditions changes. This should fix the reported
crash.
2016-04-19 10:36:23 -04:00
Matthias Clasen
e8863ece18 Add some more accelerator / modifier tests 2016-04-19 10:36:14 -04:00
Matthias Clasen
0100f08592 wayland: Make virtual modifier mapping more similar to X
Ignore virtual modifiers that are mapped to Mod1 (as Meta
often is), to avoid interfering with our fix interpretation
of Mod1 as Alt.
2016-04-19 10:36:14 -04:00
Matthias Clasen
49bddf48ad wayland: Fix the map_virtual_modifiers implementation
We were not stripping real modifiers out, and thus always
thought there's a conflict when the passed in modifiers
included any real modifiers.
2016-04-19 10:36:14 -04:00
Matthias Clasen
4018a32e0b wayland: Implement virtual modifiers
Since Wayland is using libxkbcommon, it inherits X unfortunate
real/virtual modifier distinction, so we have to do the same
gymnastics we do for X to map between the two.

This should fix matching of accelerators using virtual modifiers
(modulo gnome-shell bugs regarding the handling of Super).

https://bugzilla.gnome.org/show_bug.cgi?id=764424
2016-04-19 10:36:14 -04:00
Matthias Clasen
e530a0ecd1 Clarify docs a bit
The wording here was just awkward: TRUE is returned if... Note that
FALSE is also returned if...
2016-04-19 10:36:14 -04:00
Emmanuele Bassi
5e11b071a7 recent-manager: Emit ::changed on file deletion
This will clear out the list of recently used files, and will allow GVFS
to handle this case.

https://bugzilla.gnome.org/show_bug.cgi?id=693077
2016-04-19 10:30:59 -04:00
Emmanuele Bassi
1c449e8d4a Assign a recent manager if one is set
The GtkRecentAction implementation ignored a GtkRecentManager passed to
its :manager property.

https://bugzilla.gnome.org/show_bug.cgi?id=620065
2016-04-19 10:30:59 -04:00
Sébastien Wilmet
6144469d02 app: minor code improvements
- use GDK_EVENT_PROPAGATE
- pass better zero-values to gtk_init(), since the parameters are
  pointers.

https://bugzilla.gnome.org/show_bug.cgi?id=764846
2016-04-19 10:28:58 -04:00