Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: views/widget/native_widget_gtk.cc

Issue 7729007: Focus/InputMethod fix. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | views/widget/widget.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/widget/native_widget_gtk.h" 5 #include "views/widget/native_widget_gtk.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 #include <gdk/gdkx.h> 8 #include <gdk/gdkx.h>
9 #include <X11/extensions/shape.h> 9 #include <X11/extensions/shape.h>
10 #include <X11/Xatom.h> 10 #include <X11/Xatom.h>
(...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 bool NativeWidgetGtk::HasMouseCapture() const { 959 bool NativeWidgetGtk::HasMouseCapture() const {
960 return GTK_WIDGET_HAS_GRAB(window_contents_) || has_pointer_grab_; 960 return GTK_WIDGET_HAS_GRAB(window_contents_) || has_pointer_grab_;
961 } 961 }
962 962
963 InputMethod* NativeWidgetGtk::CreateInputMethod() { 963 InputMethod* NativeWidgetGtk::CreateInputMethod() {
964 // Create input method when pure views is enabled. 964 // Create input method when pure views is enabled.
965 // TODO(suzhe): Always enable input method when we start to use 965 // TODO(suzhe): Always enable input method when we start to use
966 // RenderWidgetHostViewViews in normal ChromeOS. 966 // RenderWidgetHostViewViews in normal ChromeOS.
967 if (views::Widget::IsPureViews()) { 967 if (views::Widget::IsPureViews()) {
968 #if defined(HAVE_IBUS) 968 #if defined(HAVE_IBUS)
969 return InputMethodIBus::IsInputMethodIBusEnabled() ? 969 InputMethod* input_method =
970 InputMethodIBus::IsInputMethodIBusEnabled() ?
970 static_cast<InputMethod*>(new InputMethodIBus(this)) : 971 static_cast<InputMethod*>(new InputMethodIBus(this)) :
971 static_cast<InputMethod*>(new InputMethodGtk(this)); 972 static_cast<InputMethod*>(new InputMethodGtk(this));
972 #else 973 #else
973 return new InputMethodGtk(this); 974 InputMethod* input_method = new InputMethodGtk(this);
974 #endif 975 #endif
976 if (has_focus_)
977 input_method->OnFocus();
978 return input_method;
975 } 979 }
976 // GTK's textfield handles IME. 980 // GTK's textfield handles IME.
977 return NULL; 981 return NULL;
978 } 982 }
979 983
980 void NativeWidgetGtk::CenterWindow(const gfx::Size& size) { 984 void NativeWidgetGtk::CenterWindow(const gfx::Size& size) {
981 gfx::Rect center_rect; 985 gfx::Rect center_rect;
982 986
983 GtkWindow* parent = gtk_window_get_transient_for(GetNativeWindow()); 987 GtkWindow* parent = gtk_window_get_transient_for(GetNativeWindow());
984 if (parent) { 988 if (parent) {
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 GetWidget()->SetInitialFocus(); 1655 GetWidget()->SetInitialFocus();
1652 } 1656 }
1653 return false; 1657 return false;
1654 } 1658 }
1655 1659
1656 gboolean NativeWidgetGtk::OnFocusOut(GtkWidget* widget, GdkEventFocus* event) { 1660 gboolean NativeWidgetGtk::OnFocusOut(GtkWidget* widget, GdkEventFocus* event) {
1657 if (!has_focus_) 1661 if (!has_focus_)
1658 return false; // This is the second focus-out event in a row, ignore it. 1662 return false; // This is the second focus-out event in a row, ignore it.
1659 has_focus_ = false; 1663 has_focus_ = false;
1660 1664
1661 if (GetWidget()->is_top_level()) 1665 if (!GetWidget()->is_top_level())
1662 return false; 1666 return false;
1663 1667
1664 // Only top-level Widget should have an InputMethod instance. 1668 // Only top-level Widget should have an InputMethod instance.
1665 InputMethod* input_method = GetWidget()->GetInputMethodDirect(); 1669 InputMethod* input_method = GetWidget()->GetInputMethodDirect();
1666 if (input_method) 1670 if (input_method)
1667 input_method->OnBlur(); 1671 input_method->OnBlur();
1668 return false; 1672 return false;
1669 } 1673 }
1670 1674
1671 gboolean NativeWidgetGtk::OnEventKey(GtkWidget* widget, GdkEventKey* event) { 1675 gboolean NativeWidgetGtk::OnEventKey(GtkWidget* widget, GdkEventKey* event) {
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
2240 button_pressed = event->type == GDK_BUTTON_PRESS || 2244 button_pressed = event->type == GDK_BUTTON_PRESS ||
2241 event->type == GDK_2BUTTON_PRESS || 2245 event->type == GDK_2BUTTON_PRESS ||
2242 event->type == GDK_3BUTTON_PRESS; 2246 event->type == GDK_3BUTTON_PRESS;
2243 gdk_event_free(event); 2247 gdk_event_free(event);
2244 } 2248 }
2245 return button_pressed; 2249 return button_pressed;
2246 } 2250 }
2247 2251
2248 } // namespace internal 2252 } // namespace internal
2249 } // namespace views 2253 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | views/widget/widget.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698