31 Commits

Author SHA1 Message Date
Greg Spencer
bdadaad20d
Add delayed event delivery for Linux. (#22577)
This changes the text handling so that keyboard events are sent to the framework first for handling, and then passed to the text input plugin, so that the framework has a chance to handle keys before they get given to the text field.

This is complicated by the async nature of the interaction with the framework, since GTK wants a synchronous response. So, in this change, I always tell GTK that the event was handled, and if it wasn't, then I re-dispatch the event once we know one way or the other.
2020-12-03 15:00:37 -08:00
Omar Emara
092cbf519c
Fix Linux handling of window exposure events (#22268)
Currently, the Linux embedder does not handle window exposure events.
This is typically not a problem for users who use compositing window
managers, since they keep the display buffers even if the window is
completely covered. However, for users that don't use a compositor, the
window will not be redrawn by the engine if it was previously covered
until another event triggers the redraw.

This patch implements the GtkWidget draw callback to handle window
exposure events. The callback doesn't actually draw anything, it just
schedule a frame for drawing by the engine.

The engine doesn't support exposure events, so instead, we force redraw
by sending a window metrics event of the same geometry. Since the
geometry didn't change, only a frame will be scheduled.
2020-11-04 16:43:47 +13:00
Chris Bracken
bcc557f1ba
Add multi-step input method support for Linux (#21897)
This implements the Gtk hooks required to support multi-step input
methods on Linux. This builds on the support for composing regions
(preedit region in Gtk terminology) added to TextInputModel in
https://github.com/flutter/engine/pull/21682.

Specifically, the following changes are included:

1. Add handler for TextInput.setMarkedTextRegion framework messages: On
any change to the EditableText in the framework, this message is sent
which provides an updated rect (in the local co-ordinates of the
EditableText) for the composing region. If not in composing mode, the
cursor rect is sent.

2. Add handler for TextInput.setEditableSizeAndTransform framework messages:
On any change to the RenderObject underlying the EditableText, an
updated size for the full EditableText widget, as well as an affine
transform matrix from local co-ordinates to Flutter root co-ordinates is
sent.

3. On either of the above messages, we use the transformed composing
rect to compute the cursor position in Gtk window co-ordinates and
inform Gtk, so that it can position any system IM composing window
correctly for on-the-spot composing, such as is used when inputting
Japanese text.

4. Adds handlers for preedit-start, preedit-changed, and preedit-end
signals from Gtk. These are passed on to the TextInputModel.

5. Updates the preedit-commit handler to commit the composing region to
the text or, if not composing, insert new text at the cursor.

6. Updates the handler for TextInput.setEditingState framework messages
to extract the composing range base and extent and pass these on to
TextInputModel.

7. Updates update_editing_state function to set composing base and
extent on text input state updates sent to the framework.
2020-10-19 16:25:56 -07:00
Damian Wrobel
6634406889
Support Wayland only (without X11 support in gdk) (#21218)
Adds a support for compiling flutter engine when
gdk does not have X11 backend. In such a configuration
the generated gdkconfig.h header file looks like the following:

 /* gdkconfig.h
  *
  * This is a generated file.  Please modify `configure.ac'
  */

 #ifndef __GDKCONFIG_H__
 #define __GDKCONFIG_H__

 #if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
 #error "Only <gdk/gdk.h> can be included directly."
 #endif

 #include <glib.h>

 G_BEGIN_DECLS

 #define GDK_WINDOWING_WAYLAND

 G_END_DECLS

 #endif  /* __GDKCONFIG_H__ */

Additionally headers like <gdk/gdkx.h> are not available at all.

Above configuration can be found on the most of the embedded systems.

This patch enables compilation of X11 specific code only when gdk
defines GDK_WINDOWING_X11.

Signed-off-by: Damian Wrobel <dwrobel@ertelnet.rybnik.pl>
2020-10-13 15:54:44 +13:00
William Wold
dbab3fc553
Add Linux Wayland support (#20629) 2020-09-16 14:13:06 +12:00
Damian Wrobel
21fd8917c0
Add missing <cstring> header for (strcmp, strrchr) (#21176)
Fixes the following compilation errors:
../../flutter/shell/platform/linux/fl_platform_plugin.cc:89:7: error: use of undeclared identifier 'strcmp'
  if (strcmp(format, kTextPlainFormat) != 0) {
      ^
../../flutter/shell/platform/linux/fl_platform_plugin.cc:127:7: error: use of undeclared identifier 'strcmp'
  if (strcmp(method, kSetClipboardDataMethod) == 0)
      ^
../../flutter/shell/platform/linux/fl_platform_plugin.cc:129:12: error: use of undeclared identifier 'strcmp'
  else if (strcmp(method, kGetClipboardDataMethod) == 0)
           ^
../../flutter/shell/platform/linux/fl_platform_plugin.cc:131:12: error: use of undeclared identifier 'strcmp'
  else if (strcmp(method, kSystemNavigatorPopMethod) == 0)
           ^
../../flutter/shell/platform/linux/fl_view.cc:194:7: error: use of undeclared identifier 'strcmp'
  if (strcmp(pspec->name, "scale-factor") == 0) {
      ^
../../flutter/shell/platform/linux/fl_engine.cc:67:18: error: use of undeclared identifier 'strrchr'
  gchar* match = strrchr(l, '@');
                 ^
../../flutter/shell/platform/linux/fl_engine.cc:75:11: error: use of undeclared identifier 'strrchr'
  match = strrchr(l, '.');
          ^
../../flutter/shell/platform/linux/fl_engine.cc:83:11: error: use of undeclared identifier 'strrchr'
  match = strrchr(l, '_');
          ^

Signed-off-by: Damian Wrobel <dwrobel@ertelnet.rybnik.pl>
2020-09-15 08:05:12 -07:00
Chris Bracken
08dabe9601
Clean up C++ includes (#21127)
Cleans up header order/grouping for consistency: associated header, C/C++ system/standard library headers, library headers, platform-specific #includes.

Adds <cstring> where strlen, memcpy are being used: there are a bunch of places we use them transitively.

Applies linter-required cleanups. Disables linter on one file due to included RapidJson header. See https://github.com/flutter/flutter/issues/65676

This patch does not cover flutter/shell/platform/darwin. There's a separate, slightly more intensive cleanup for those in progress.
2020-09-11 21:18:35 -07:00
William Wold
dcb9244c38
Consolidate FlRenderer initialization into fl_renderer_start() (#20763) 2020-08-28 09:57:14 +12:00
William Wold
7a022774c2
Improve FlRenderer interface in preperation for Wayland on Linux (#20006) 2020-08-05 12:04:01 +12:00
Robert Ancell
ab23dc3a74 Update code style to pass clang-tidy checks 2020-08-05 10:35:03 +12:00
William Wold
4f647efd91 Change FlView::renderer from X11-specific to generic 2020-07-22 11:17:38 +12:00
Robert Ancell
acd026ed3f
Use the X visual from the EGL configuration when making an FlView. (#19438) 2020-07-03 09:37:51 +12:00
Robert Ancell
4bd6aea07c
Always send key events, even if they're used for text input. (#18991) 2020-06-12 10:59:23 +12:00
Robert Ancell
101e85491d
Add FlMouseCursorPlugin (#18888)
Fixes https://github.com/flutter/flutter/issues/57595
2020-06-10 14:16:42 +12:00
Robert Ancell
283cc2a536
Add FlPlatformPlugin (#18316)
Fixes https://github.com/flutter/flutter/issues/54857
2020-06-10 12:02:24 +12:00
Robert Ancell
91d520986e
Add scroll event support (#18885) 2020-06-09 12:20:06 +12:00
Robert Ancell
b0eee7675f
Support window scaling (#18891) 2020-06-09 11:08:42 +12:00
Robert Ancell
1b4d958f98
Add braces around multi-line branches to match code style (#18719) 2020-06-03 06:22:24 +12:00
Robert Ancell
6589dcb2d4
Add missing full stops on the end of comments. (#18634) 2020-06-03 06:21:46 +12:00
Robert Ancell
2bd95d9a4c
Add FlTextInputPlugin (#18314)
* Add FlTextInputPlugin
2020-05-28 13:11:16 +12:00
Robert Ancell
63ed5b1bbd
Add FlPluginRegistry and FlPluginRegistrar (#18453)
* Add FlPluginRegistry and FlPluginRegistrar
2020-05-27 13:39:48 +12:00
Robert Ancell
72f7a7c4ea
Add FlKeyEventPlugin (#18313) 2020-05-21 16:08:56 +12:00
Robert Ancell
784e5d7ded
Update comments for grammar and content to required style (#18491) 2020-05-20 09:14:28 +12:00
Robert Ancell
180a497ee5
Support platform messages in Linux shell (#17995) 2020-05-04 17:03:04 +12:00
Robert Ancell
34f516b016
Use g_warning instead of stderr (#17994) 2020-04-29 15:13:29 +12:00
Robert Ancell
9ece5ba789
Fix units used in Linux shell timestamps. (#17912)
GTK uses timestamps in milliseconds, Flutter wants them in microseconds.
2020-04-24 13:30:34 +12:00
Robert Ancell
12012f135c
Refactor FlutterEngine usage in Linux shell (#17363) 2020-04-24 10:30:41 +12:00
Robert Ancell
1dba1ef1f8
Add pointer events to the Linux shell (#17304) 2020-04-21 11:27:13 +12:00
Robert Ancell
b360eab6f7
Move Linux shell docstrings to headers (#17410)
Update docstrings for typos and grammar style specified in the style guide.
2020-04-14 15:41:23 +12:00
Robert Ancell
6befd4a804
Update FlDartProject to new path format (#17302)
Matches the structure used on Windows of assuming a directory format.
2020-03-31 15:25:44 -07:00
Robert Ancell
c93b67aa81
Add a Linux Shell that uses GTK for rendering. (#16977) 2020-03-24 13:26:02 -07:00