Merge lp:~osomon/oxide/non-ime-initiated-text-edit into lp:~oxide-developers/oxide/oxide.trunk

Proposed by Olivier Tilloy on 2015-06-15
Status: Needs review
Proposed branch: lp:~osomon/oxide/non-ime-initiated-text-edit
Merge into: lp:~oxide-developers/oxide/oxide.trunk
Diff against target: 418 lines (+207/-18)
14 files modified
patches/notify-text-updates.patch (+135/-0)
patches/series (+2/-0)
patches/update-selection-on-non-ime-text-change.patch (+20/-0)
qt/core/browser/oxide_qt_web_view.cc (+5/-1)
qt/core/browser/oxide_qt_web_view.h (+1/-1)
shared/browser/oxide_render_widget_host_view.cc (+24/-4)
shared/browser/oxide_render_widget_host_view.h (+2/-1)
shared/browser/oxide_render_widget_host_view_delegate.h (+2/-1)
shared/browser/oxide_web_view.cc (+5/-3)
shared/browser/oxide_web_view.h (+2/-1)
shared/browser/oxide_web_view_client.cc (+1/-1)
shared/browser/oxide_web_view_client.h (+1/-1)
shared/port/content/browser/render_widget_host_view_oxide.cc (+4/-2)
shared/port/content/browser/render_widget_host_view_oxide.h (+3/-2)
To merge this branch: bzr merge lp:~osomon/oxide/non-ime-initiated-text-edit
Reviewer Review Type Date Requested Status
Chris Coulson 2015-06-15 Needs Fixing on 2015-08-07
Review via email: mp+261971@code.launchpad.net

Commit message

Reset the input method and update the surrounding text reported to the keyboard if a non IME initiated edit was performed on the currently focused node.

To post a comment you must log in.
1030. By Olivier Tilloy on 2015-07-29

Merge the latest changes from trunk and resolve a conflict.

Chris Coulson (chrisccoulson) wrote :

Thanks, I've left a comment inline

review: Needs Fixing

Unmerged revisions

1030. By Olivier Tilloy on 2015-07-29

Merge the latest changes from trunk and resolve a conflict.

1029. By Michael Sheldon on 2015-06-15

Update the surrounding text reported to the keyboard when a text field is changed programmatically.

1028. By Olivier Tilloy on 2015-06-15

Merge the latest changes from trunk and resolve a conflict.

1027. By Olivier Tilloy on 2015-05-28

Refresh patch.

1026. By Olivier Tilloy on 2015-05-28

Merge the latest changes from trunk and resolve a few conflicts.

1025. By Olivier Tilloy on 2015-05-18

Merge the latest changes from trunk and resolve a couple of conflicts.

1024. By Olivier Tilloy on 2015-03-30

Reset the input method if a non IME initiated edit was performed on the currently focused node.

1023. By Olivier Tilloy on 2015-03-30

Add a patch to notify of text updates that were not triggered by user input in the focused element (e.g. programatically clearing a text field).

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'patches/notify-text-updates.patch'
--- patches/notify-text-updates.patch 1970-01-01 00:00:00 +0000
+++ patches/notify-text-updates.patch 2015-07-29 16:58:05 +0000
@@ -0,0 +1,135 @@
1# Description: notify of text updates in the focused element
2# by activating the Android code in Oxide builds
3# Bug: https://launchpad.net/bugs/1384357
4# Author: Olivier Tilloy <olivier.tilloy@canonical.com>
5
6diff -r 5e65632068c7 content/common/view_messages.h
7--- a/content/common/view_messages.h Thu May 28 20:58:31 2015 +0200
8+++ b/content/common/view_messages.h Thu May 28 21:02:38 2015 +0200
9@@ -945,11 +945,13 @@
10 bool /* animate */)
11
12 IPC_MESSAGE_ROUTED0(ViewMsg_ShowImeIfNeeded)
13+#endif
14
15 // Sent by the browser when an IME update that requires acknowledgement has been
16 // processed on the browser side.
17 IPC_MESSAGE_ROUTED0(ViewMsg_ImeEventAck)
18
19+#if defined(OS_ANDROID)
20 // Extracts the data at the given rect, returning it through the
21 // ViewHostMsg_SmartClipDataExtracted IPC.
22 IPC_MESSAGE_ROUTED1(ViewMsg_ExtractSmartClipData,
23diff -r 5e65632068c7 content/renderer/render_widget.cc
24--- a/content/renderer/render_widget.cc Thu May 28 20:58:31 2015 +0200
25+++ b/content/renderer/render_widget.cc Thu May 28 21:02:38 2015 +0200
26@@ -508,9 +508,9 @@
27 device_scale_factor_(screen_info_.deviceScaleFactor),
28 current_event_latency_info_(NULL),
29 next_output_surface_id_(0),
30-#if defined(OS_ANDROID)
31 text_field_is_dirty_(false),
32 outstanding_ime_acks_(0),
33+#if defined(OS_ANDROID)
34 body_background_color_(SK_ColorWHITE),
35 #endif
36 popup_origin_scale_for_emulation_(0.f),
37@@ -749,8 +749,8 @@
38 IPC_MESSAGE_HANDLER(ViewMsg_SetSurfaceIdNamespace, OnSetSurfaceIdNamespace)
39 #if defined(OS_ANDROID)
40 IPC_MESSAGE_HANDLER(ViewMsg_ShowImeIfNeeded, OnShowImeIfNeeded)
41+#endif
42 IPC_MESSAGE_HANDLER(ViewMsg_ImeEventAck, OnImeEventAck)
43-#endif
44 IPC_MESSAGE_UNHANDLED(handled = false)
45 IPC_END_MESSAGE_MAP()
46 return handled;
47@@ -1768,7 +1768,6 @@
48 #endif
49 }
50
51-#if defined(OS_ANDROID)
52 void RenderWidget::IncrementOutstandingImeEventAcks() {
53 ++outstanding_ime_acks_;
54 }
55@@ -1777,10 +1776,9 @@
56 --outstanding_ime_acks_;
57 DCHECK(outstanding_ime_acks_ >= 0);
58 }
59-#endif
60
61 bool RenderWidget::ShouldHandleImeEvent() {
62-#if defined(OS_ANDROID)
63+#if 1
64 return !!webwidget_ && outstanding_ime_acks_ == 0;
65 #else
66 return !!webwidget_;
67@@ -1976,9 +1974,7 @@
68 (text_input_type_ != new_type ||
69 text_input_info_ != new_info ||
70 can_compose_inline_ != new_can_compose_inline)
71-#if defined(OS_ANDROID)
72 || text_field_is_dirty_
73-#endif
74 ) {
75 ViewHostMsg_TextInputState_Params p;
76 p.type = new_type;
77@@ -1993,13 +1989,11 @@
78 #if defined(USE_AURA)
79 p.is_non_ime_change = true;
80 #endif
81-#if defined(OS_ANDROID)
82 p.is_non_ime_change = (change_source == FROM_NON_IME) ||
83 text_field_is_dirty_;
84 if (p.is_non_ime_change)
85 IncrementOutstandingImeEventAcks();
86 text_field_is_dirty_ = false;
87-#endif
88 #if defined(USE_AURA)
89 Send(new ViewHostMsg_TextInputTypeChanged(routing_id(),
90 new_type,
91@@ -2373,9 +2367,7 @@
92 }
93
94 void RenderWidget::didUpdateTextOfFocusedElementByNonUserInput() {
95-#if defined(OS_ANDROID)
96 text_field_is_dirty_ = true;
97-#endif
98 }
99
100 bool RenderWidget::HasTouchEventHandlersAt(const gfx::Point& point) const {
101diff -r 5e65632068c7 content/renderer/render_widget.h
102--- a/content/renderer/render_widget.h Thu May 28 20:58:31 2015 +0200
103+++ b/content/renderer/render_widget.h Thu May 28 21:02:38 2015 +0200
104@@ -444,7 +444,6 @@
105 void OnShowImeIfNeeded();
106 void OnSetSurfaceIdNamespace(uint32_t surface_id_namespace);
107
108-#if defined(OS_ANDROID)
109 // Whenever an IME event that needs an acknowledgement is sent to the browser,
110 // the number of outstanding IME events that needs acknowledgement should be
111 // incremented. All IME events will be dropped until we receive an ack from
112@@ -453,7 +452,6 @@
113
114 // Called by the browser process for every required IME acknowledgement.
115 void OnImeEventAck();
116-#endif
117
118 // Notify the compositor about a change in viewport size. This should be
119 // used only with auto resize mode WebWidgets, as normal WebWidgets should
120@@ -768,7 +766,6 @@
121
122 uint32 next_output_surface_id_;
123
124-#if defined(OS_ANDROID)
125 // Indicates value in the focused text field is in dirty state, i.e. modified
126 // by script etc., not by user input.
127 bool text_field_is_dirty_;
128@@ -778,6 +775,7 @@
129 // browser. If this value is not 0 IME events will be dropped.
130 int outstanding_ime_acks_;
131
132+#if defined(OS_ANDROID)
133 // The background color of the document body element. This is used as the
134 // default background color for filling the screen areas for which we don't
135 // have the actual content.
0136
=== modified file 'patches/series'
--- patches/series 2015-06-29 11:25:34 +0000
+++ patches/series 2015-07-29 16:58:05 +0000
@@ -34,3 +34,5 @@
34implement-webrtc-get-cpu-features-arm.patch34implement-webrtc-get-cpu-features-arm.patch
35enable-optional-neon-for-skia.patch35enable-optional-neon-for-skia.patch
36add-suggested-filename-to-download-starting-resource-delegate.patch36add-suggested-filename-to-download-starting-resource-delegate.patch
37notify-text-updates.patch
38update-selection-on-non-ime-text-change.patch
3739
=== added file 'patches/update-selection-on-non-ime-text-change.patch'
--- patches/update-selection-on-non-ime-text-change.patch 1970-01-01 00:00:00 +0000
+++ patches/update-selection-on-non-ime-text-change.patch 2015-07-29 16:58:05 +0000
@@ -0,0 +1,20 @@
1# Description: Update the surrounding text reported to the input method
2# framework when text has been changed programmatically
3# Bug: https://launchpad.net/bugs/1384357
4# Author: Michael Sheldon <michael.sheldon@canonical.com>
5diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
6--- a/content/renderer/render_widget.cc
7+++ b/content/renderer/render_widget.cc
8@@ -1986,8 +1986,11 @@ void RenderWidget::UpdateTextInputState(
9 #endif
10 p.is_non_ime_change = (change_source == FROM_NON_IME) ||
11 text_field_is_dirty_;
12- if (p.is_non_ime_change)
13+ if (p.is_non_ime_change) {
14 IncrementOutstandingImeEventAcks();
15+ FOR_EACH_OBSERVER(RenderFrameImpl, render_frames_,
16+ didChangeSelection(false));
17+ }
18 text_field_is_dirty_ = false;
19 #if defined(USE_AURA)
20 Send(new ViewHostMsg_TextInputTypeChanged(routing_id(),
021
=== modified file 'qt/core/browser/oxide_qt_web_view.cc'
--- qt/core/browser/oxide_qt_web_view.cc 2015-07-02 11:22:12 +0000
+++ qt/core/browser/oxide_qt_web_view.cc 2015-07-29 16:58:05 +0000
@@ -870,11 +870,15 @@
870 client_->EvictCurrentFrame();870 client_->EvictCurrentFrame();
871}871}
872872
873void WebView::TextInputStateChanged() {873void WebView::TextInputStateChanged(bool is_non_ime_change) {
874 if (!HasFocus()) {874 if (!HasFocus()) {
875 return;875 return;
876 }876 }
877877
878 if (is_non_ime_change) {
879 QGuiApplication::inputMethod()->reset();
880 }
881
878 if (view_->text_input_type() != ui::TEXT_INPUT_TYPE_NONE) {882 if (view_->text_input_type() != ui::TEXT_INPUT_TYPE_NONE) {
879 QGuiApplication::inputMethod()->update(883 QGuiApplication::inputMethod()->update(
880 static_cast<Qt::InputMethodQueries>(Qt::ImQueryInput | Qt::ImHints));884 static_cast<Qt::InputMethodQueries>(Qt::ImQueryInput | Qt::ImHints));
881885
=== modified file 'qt/core/browser/oxide_qt_web_view.h'
--- qt/core/browser/oxide_qt_web_view.h 2015-06-17 17:09:45 +0000
+++ qt/core/browser/oxide_qt_web_view.h 2015-07-29 16:58:05 +0000
@@ -158,7 +158,7 @@
158 oxide::FilePicker* CreateFilePicker(content::RenderViewHost* rvh) override;158 oxide::FilePicker* CreateFilePicker(content::RenderViewHost* rvh) override;
159 void SwapCompositorFrame() override;159 void SwapCompositorFrame() override;
160 void EvictCurrentFrame() override;160 void EvictCurrentFrame() override;
161 void TextInputStateChanged() override;161 void TextInputStateChanged(bool is_non_ime_change) override;
162 void FocusedNodeChanged() override;162 void FocusedNodeChanged() override;
163 void SelectionBoundsChanged() override;163 void SelectionBoundsChanged() override;
164 void ImeCancelComposition() override;164 void ImeCancelComposition() override;
165165
=== modified file 'shared/browser/oxide_render_widget_host_view.cc'
--- shared/browser/oxide_render_widget_host_view.cc 2015-05-28 23:51:39 +0000
+++ shared/browser/oxide_render_widget_host_view.cc 2015-07-29 16:58:05 +0000
@@ -18,6 +18,7 @@
18#include "oxide_render_widget_host_view.h"18#include "oxide_render_widget_host_view.h"
1919
20#include "base/bind.h"20#include "base/bind.h"
21#include "base/callback_helpers.h"
21#include "base/command_line.h"22#include "base/command_line.h"
22#include "base/logging.h"23#include "base/logging.h"
23#include "base/memory/scoped_vector.h"24#include "base/memory/scoped_vector.h"
@@ -29,6 +30,7 @@
29#include "cc/quads/render_pass.h"30#include "cc/quads/render_pass.h"
30#include "cc/trees/layer_tree_settings.h"31#include "cc/trees/layer_tree_settings.h"
31#include "content/browser/renderer_host/render_widget_host_impl.h"32#include "content/browser/renderer_host/render_widget_host_impl.h"
33#include "content/common/view_messages.h"
32#include "content/public/browser/browser_thread.h"34#include "content/public/browser/browser_thread.h"
33#include "content/public/browser/render_process_host.h"35#include "content/public/browser/render_process_host.h"
34#include "content/public/common/content_switches.h"36#include "content/public/common/content_switches.h"
@@ -48,6 +50,15 @@
48#include "oxide_renderer_frame_evictor.h"50#include "oxide_renderer_frame_evictor.h"
49#include "oxide_render_widget_host_view_delegate.h"51#include "oxide_render_widget_host_view_delegate.h"
5052
53namespace {
54
55// Sends an acknowledgement to the renderer of a processed IME event.
56void SendImeEventAck(content::RenderWidgetHostImpl* host) {
57 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID()));
58}
59
60}
61
51namespace oxide {62namespace oxide {
5263
53namespace {64namespace {
@@ -80,15 +91,23 @@
8091
81void RenderWidgetHostView::OnTextInputStateChanged(92void RenderWidgetHostView::OnTextInputStateChanged(
82 ui::TextInputType type,93 ui::TextInputType type,
83 bool show_ime_if_needed) {94 bool show_ime_if_needed,
95 bool is_non_ime_change) {
96 base::ScopedClosureRunner ack_caller;
97 if (is_non_ime_change) {
98 ack_caller.Reset(base::Bind(&SendImeEventAck, host_));
99 }
100
84 if (type != current_text_input_type_ ||101 if (type != current_text_input_type_ ||
85 show_ime_if_needed != show_ime_if_needed_) {102 show_ime_if_needed != show_ime_if_needed_ ||
103 is_non_ime_change) {
86 current_text_input_type_ = type;104 current_text_input_type_ = type;
87 show_ime_if_needed_ = show_ime_if_needed;105 show_ime_if_needed_ = show_ime_if_needed;
88106
89 if (delegate_) {107 if (delegate_) {
90 delegate_->TextInputStateChanged(current_text_input_type_,108 delegate_->TextInputStateChanged(current_text_input_type_,
91 show_ime_if_needed_);109 show_ime_if_needed_,
110 is_non_ime_change);
92 }111 }
93 }112 }
94}113}
@@ -661,7 +680,8 @@
661680
662 UpdateCursorOnWebView();681 UpdateCursorOnWebView();
663 delegate_->TextInputStateChanged(current_text_input_type_,682 delegate_->TextInputStateChanged(current_text_input_type_,
664 show_ime_if_needed_);683 show_ime_if_needed_,
684 true);
665 delegate_->FocusedNodeChanged(focused_node_is_editable_);685 delegate_->FocusedNodeChanged(focused_node_is_editable_);
666 delegate_->SelectionBoundsChanged(caret_rect_,686 delegate_->SelectionBoundsChanged(caret_rect_,
667 selection_cursor_position_,687 selection_cursor_position_,
668688
=== modified file 'shared/browser/oxide_render_widget_host_view.h'
--- shared/browser/oxide_render_widget_host_view.h 2015-05-27 20:56:59 +0000
+++ shared/browser/oxide_render_widget_host_view.h 2015-07-29 16:58:05 +0000
@@ -93,7 +93,8 @@
93 private:93 private:
94 // content::RenderWidgetHostViewOxide implementation94 // content::RenderWidgetHostViewOxide implementation
95 void OnTextInputStateChanged(ui::TextInputType type,95 void OnTextInputStateChanged(ui::TextInputType type,
96 bool show_ime_if_needed) final;96 bool show_ime_if_needed,
97 bool is_non_ime_change) final;
97 void OnSelectionBoundsChanged(const gfx::Rect& anchor_rect,98 void OnSelectionBoundsChanged(const gfx::Rect& anchor_rect,
98 const gfx::Rect& focus_rect,99 const gfx::Rect& focus_rect,
99 bool is_anchor_first) final;100 bool is_anchor_first) final;
100101
=== modified file 'shared/browser/oxide_render_widget_host_view_delegate.h'
--- shared/browser/oxide_render_widget_host_view_delegate.h 2015-05-14 15:37:57 +0000
+++ shared/browser/oxide_render_widget_host_view_delegate.h 2015-07-29 16:58:05 +0000
@@ -45,7 +45,8 @@
45 virtual void UpdateCursor(const content::WebCursor& cursor) = 0;45 virtual void UpdateCursor(const content::WebCursor& cursor) = 0;
4646
47 virtual void TextInputStateChanged(ui::TextInputType type,47 virtual void TextInputStateChanged(ui::TextInputType type,
48 bool show_ime_if_needed) = 0;48 bool show_ime_if_needed,
49 bool is_non_ime_change) = 0;
4950
50 virtual void FocusedNodeChanged(bool is_editable_node) = 0;51 virtual void FocusedNodeChanged(bool is_editable_node) = 0;
5152
5253
=== modified file 'shared/browser/oxide_web_view.cc'
--- shared/browser/oxide_web_view.cc 2015-07-28 16:16:53 +0000
+++ shared/browser/oxide_web_view.cc 2015-07-29 16:58:05 +0000
@@ -441,16 +441,18 @@
441}441}
442442
443void WebView::TextInputStateChanged(ui::TextInputType type,443void WebView::TextInputStateChanged(ui::TextInputType type,
444 bool show_ime_if_needed) {444 bool show_ime_if_needed,
445 bool is_non_ime_change) {
445 if (type == text_input_type_ &&446 if (type == text_input_type_ &&
446 show_ime_if_needed == show_ime_if_needed_) {447 show_ime_if_needed == show_ime_if_needed_ &&
448 !is_non_ime_change) {
447 return;449 return;
448 }450 }
449451
450 text_input_type_ = type;452 text_input_type_ = type;
451 show_ime_if_needed_ = show_ime_if_needed;453 show_ime_if_needed_ = show_ime_if_needed;
452454
453 client_->TextInputStateChanged();455 client_->TextInputStateChanged(is_non_ime_change);
454}456}
455457
456void WebView::FocusedNodeChanged(bool is_editable_node) {458void WebView::FocusedNodeChanged(bool is_editable_node) {
457459
=== modified file 'shared/browser/oxide_web_view.h'
--- shared/browser/oxide_web_view.h 2015-07-07 23:18:27 +0000
+++ shared/browser/oxide_web_view.h 2015-07-29 16:58:05 +0000
@@ -389,7 +389,8 @@
389 void EvictCurrentFrame() final;389 void EvictCurrentFrame() final;
390 void UpdateCursor(const content::WebCursor& cursor) final;390 void UpdateCursor(const content::WebCursor& cursor) final;
391 void TextInputStateChanged(ui::TextInputType type,391 void TextInputStateChanged(ui::TextInputType type,
392 bool show_ime_if_needed) final;392 bool show_ime_if_needed,
393 bool is_non_ime_change) final;
393 void FocusedNodeChanged(bool is_editable_node) final;394 void FocusedNodeChanged(bool is_editable_node) final;
394 void ImeCancelComposition() final;395 void ImeCancelComposition() final;
395 void SelectionBoundsChanged(const gfx::Rect& caret_rect,396 void SelectionBoundsChanged(const gfx::Rect& caret_rect,
396397
=== modified file 'shared/browser/oxide_web_view_client.cc'
--- shared/browser/oxide_web_view_client.cc 2015-06-17 17:09:45 +0000
+++ shared/browser/oxide_web_view_client.cc 2015-07-29 16:58:05 +0000
@@ -142,7 +142,7 @@
142142
143void WebViewClient::EvictCurrentFrame() {}143void WebViewClient::EvictCurrentFrame() {}
144144
145void WebViewClient::TextInputStateChanged() {}145void WebViewClient::TextInputStateChanged(bool is_non_ime_change) {}
146146
147void WebViewClient::FocusedNodeChanged() {}147void WebViewClient::FocusedNodeChanged() {}
148148
149149
=== modified file 'shared/browser/oxide_web_view_client.h'
--- shared/browser/oxide_web_view_client.h 2015-06-17 17:09:45 +0000
+++ shared/browser/oxide_web_view_client.h 2015-07-29 16:58:05 +0000
@@ -178,7 +178,7 @@
178 // - The implementations of some of these only touch process-global178 // - The implementations of some of these only touch process-global
179 // stuff - should we have an InputMethod singleton in shared/179 // stuff - should we have an InputMethod singleton in shared/
180 // rather than dumping it all in WebView?180 // rather than dumping it all in WebView?
181 virtual void TextInputStateChanged();181 virtual void TextInputStateChanged(bool is_non_ime_change);
182182
183 virtual void FocusedNodeChanged();183 virtual void FocusedNodeChanged();
184184
185185
=== modified file 'shared/port/content/browser/render_widget_host_view_oxide.cc'
--- shared/port/content/browser/render_widget_host_view_oxide.cc 2014-10-27 01:38:55 +0000
+++ shared/port/content/browser/render_widget_host_view_oxide.cc 2015-07-29 16:58:05 +0000
@@ -1,5 +1,5 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2013-2014 Canonical Ltd.2// Copyright (C) 2013-2015 Canonical Ltd.
33
4// This library is free software; you can redistribute it and/or4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public5// modify it under the terms of the GNU Lesser General Public
@@ -35,7 +35,9 @@
3535
36void RenderWidgetHostViewOxide::OnTextInputStateChangedThunk(36void RenderWidgetHostViewOxide::OnTextInputStateChangedThunk(
37 const ViewHostMsg_TextInputState_Params& params) {37 const ViewHostMsg_TextInputState_Params& params) {
38 OnTextInputStateChanged(params.type, params.show_ime_if_needed);38 OnTextInputStateChanged(params.type,
39 params.show_ime_if_needed,
40 params.is_non_ime_change);
39}41}
4042
41void RenderWidgetHostViewOxide::SelectionBoundsChanged(43void RenderWidgetHostViewOxide::SelectionBoundsChanged(
4244
=== modified file 'shared/port/content/browser/render_widget_host_view_oxide.h'
--- shared/port/content/browser/render_widget_host_view_oxide.h 2014-10-27 01:38:55 +0000
+++ shared/port/content/browser/render_widget_host_view_oxide.h 2015-07-29 16:58:05 +0000
@@ -1,5 +1,5 @@
1// vim:expandtab:shiftwidth=2:tabstop=2:1// vim:expandtab:shiftwidth=2:tabstop=2:
2// Copyright (C) 2013-2014 Canonical Ltd.2// Copyright (C) 2013-2015 Canonical Ltd.
33
4// This library is free software; you can redistribute it and/or4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public5// modify it under the terms of the GNU Lesser General Public
@@ -48,7 +48,8 @@
48 bool OnMessageReceived(const IPC::Message& msg) final;48 bool OnMessageReceived(const IPC::Message& msg) final;
4949
50 virtual void OnTextInputStateChanged(ui::TextInputType type,50 virtual void OnTextInputStateChanged(ui::TextInputType type,
51 bool show_ime_if_needed) = 0;51 bool show_ime_if_needed,
52 bool is_non_ime_change) = 0;
52 virtual void OnSelectionBoundsChanged(const gfx::Rect& anchor_rect,53 virtual void OnSelectionBoundsChanged(const gfx::Rect& anchor_rect,
53 const gfx::Rect& focus_rect,54 const gfx::Rect& focus_rect,
54 bool is_anchor_first) = 0;55 bool is_anchor_first) = 0;

Subscribers

People subscribed via source and target branches