| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" | 5 #include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 #include <gdk/gdkkeysyms.h> | 8 #include <gdk/gdkkeysyms.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 // Now the last thing is to prevent the content of omnibox from being changed | 885 // Now the last thing is to prevent the content of omnibox from being changed |
| 886 // by GtkTextView when Enter key is pressed. As OnBeforePossibleChange() and | 886 // by GtkTextView when Enter key is pressed. As OnBeforePossibleChange() and |
| 887 // OnAfterPossibleChange() will be called by GtkTextView before and after | 887 // OnAfterPossibleChange() will be called by GtkTextView before and after |
| 888 // changing the content, and the content is already saved in | 888 // changing the content, and the content is already saved in |
| 889 // OnBeforePossibleChange(), so if the Enter key press event was not handled | 889 // OnBeforePossibleChange(), so if the Enter key press event was not handled |
| 890 // by IME, it's easy to restore the content in OnAfterPossibleChange(), as if | 890 // by IME, it's easy to restore the content in OnAfterPossibleChange(), as if |
| 891 // it's not changed at all. | 891 // it's not changed at all. |
| 892 | 892 |
| 893 GtkWidgetClass* klass = GTK_WIDGET_GET_CLASS(widget); | 893 GtkWidgetClass* klass = GTK_WIDGET_GET_CLASS(widget); |
| 894 | 894 |
| 895 enter_was_pressed_ = event->keyval == GDK_Return || | 895 enter_was_pressed_ = (event->keyval == GDK_Return || |
| 896 event->keyval == GDK_ISO_Enter || | 896 event->keyval == GDK_ISO_Enter || |
| 897 event->keyval == GDK_KP_Enter; | 897 event->keyval == GDK_KP_Enter); |
| 898 | 898 |
| 899 // Set |tab_was_pressed_| to true if it's a Tab key press event, so that our | 899 // Set |tab_was_pressed_| to true if it's a Tab key press event, so that our |
| 900 // handler of "move-focus" signal can trigger Tab to search behavior when | 900 // handler of "move-focus" signal can trigger Tab to search behavior when |
| 901 // necessary. | 901 // necessary. |
| 902 tab_was_pressed_ = (event->keyval == GDK_Tab || | 902 tab_was_pressed_ = ((event->keyval == GDK_Tab || |
| 903 event->keyval == GDK_ISO_Left_Tab || | 903 event->keyval == GDK_ISO_Left_Tab || |
| 904 event->keyval == GDK_KP_Tab) && | 904 event->keyval == GDK_KP_Tab) && |
| 905 !(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)); | 905 !(event->state & GDK_CONTROL_MASK)); |
| 906 | 906 |
| 907 delete_was_pressed_ = event->keyval == GDK_Delete || | 907 delete_was_pressed_ = (event->keyval == GDK_Delete || |
| 908 event->keyval == GDK_KP_Delete; | 908 event->keyval == GDK_KP_Delete); |
| 909 | 909 |
| 910 // Reset |enter_was_inserted_|, which may be set in the "insert-text" signal | 910 // Reset |enter_was_inserted_|, which may be set in the "insert-text" signal |
| 911 // handler, so that we'll know if an Enter key event was handled by IME. | 911 // handler, so that we'll know if an Enter key event was handled by IME. |
| 912 enter_was_inserted_ = false; | 912 enter_was_inserted_ = false; |
| 913 | 913 |
| 914 // Reset |paste_clipboard_requested_| to make sure we won't misinterpret this | 914 // Reset |paste_clipboard_requested_| to make sure we won't misinterpret this |
| 915 // key input action as a paste action. | 915 // key input action as a paste action. |
| 916 paste_clipboard_requested_ = false; | 916 paste_clipboard_requested_ = false; |
| 917 | 917 |
| 918 // Reset |text_changed_| before passing the key event on to the text view. | 918 // Reset |text_changed_| before passing the key event on to the text view. |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1378 // of the text. Delete the selected keyword. | 1378 // of the text. Delete the selected keyword. |
| 1379 model_->ClearKeyword(GetText()); | 1379 model_->ClearKeyword(GetText()); |
| 1380 | 1380 |
| 1381 // Stop propagating the signal emission into GtkTextView. | 1381 // Stop propagating the signal emission into GtkTextView. |
| 1382 static guint signal_id = g_signal_lookup("backspace", GTK_TYPE_TEXT_VIEW); | 1382 static guint signal_id = g_signal_lookup("backspace", GTK_TYPE_TEXT_VIEW); |
| 1383 g_signal_stop_emission(text_view_, signal_id, 0); | 1383 g_signal_stop_emission(text_view_, signal_id, 0); |
| 1384 } | 1384 } |
| 1385 | 1385 |
| 1386 void AutocompleteEditViewGtk::HandleViewMoveFocus(GtkWidget* widget, | 1386 void AutocompleteEditViewGtk::HandleViewMoveFocus(GtkWidget* widget, |
| 1387 GtkDirectionType direction) { | 1387 GtkDirectionType direction) { |
| 1388 if (!tab_was_pressed_) | 1388 // Trigger Tab to search behavior only when Tab key is pressed. |
| 1389 return; | 1389 if (tab_was_pressed_ && enable_tab_to_search_ && |
| 1390 model_->is_keyword_hint() && !model_->keyword().empty()) { |
| 1391 model_->AcceptKeyword(); |
| 1390 | 1392 |
| 1391 // If special behavior is triggered, then stop the signal emission to | 1393 // If Tab to search behavior is triggered, then stop the signal emission to |
| 1392 // prevent the focus from being moved. | 1394 // prevent the focus from being moved. |
| 1393 bool handled = false; | |
| 1394 | |
| 1395 // Trigger Tab to search behavior only when Tab key is pressed. | |
| 1396 if (model_->is_keyword_hint() && !model_->keyword().empty()) { | |
| 1397 if (enable_tab_to_search_) { | |
| 1398 model_->AcceptKeyword(); | |
| 1399 handled = true; | |
| 1400 } | |
| 1401 } else { | |
| 1402 if (GTK_WIDGET_VISIBLE(instant_view_)) { | |
| 1403 controller_->OnCommitSuggestedText(GetText()); | |
| 1404 handled = true; | |
| 1405 } else { | |
| 1406 handled = controller_->AcceptCurrentInstantPreview(); | |
| 1407 } | |
| 1408 } | |
| 1409 | |
| 1410 if (handled) { | |
| 1411 static guint signal_id = g_signal_lookup("move-focus", GTK_TYPE_WIDGET); | 1395 static guint signal_id = g_signal_lookup("move-focus", GTK_TYPE_WIDGET); |
| 1412 g_signal_stop_emission(widget, signal_id, 0); | 1396 g_signal_stop_emission(widget, signal_id, 0); |
| 1413 } | 1397 } |
| 1398 |
| 1399 // Propagate the signal so that focus can be moved as normal. |
| 1414 } | 1400 } |
| 1415 | 1401 |
| 1416 void AutocompleteEditViewGtk::HandleCopyClipboard(GtkWidget* sender) { | 1402 void AutocompleteEditViewGtk::HandleCopyClipboard(GtkWidget* sender) { |
| 1417 HandleCopyOrCutClipboard(true); | 1403 HandleCopyOrCutClipboard(true); |
| 1418 } | 1404 } |
| 1419 | 1405 |
| 1420 void AutocompleteEditViewGtk::HandleCutClipboard(GtkWidget* sender) { | 1406 void AutocompleteEditViewGtk::HandleCutClipboard(GtkWidget* sender) { |
| 1421 HandleCopyOrCutClipboard(false); | 1407 HandleCopyOrCutClipboard(false); |
| 1422 } | 1408 } |
| 1423 | 1409 |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1972 // baseline, so we need to move the |instant_view_| down to make sure it | 1958 // baseline, so we need to move the |instant_view_| down to make sure it |
| 1973 // has the same baseline as the |text_view_|. | 1959 // has the same baseline as the |text_view_|. |
| 1974 PangoLayout* layout = gtk_label_get_layout(GTK_LABEL(instant_view_)); | 1960 PangoLayout* layout = gtk_label_get_layout(GTK_LABEL(instant_view_)); |
| 1975 int height; | 1961 int height; |
| 1976 pango_layout_get_size(layout, NULL, &height); | 1962 pango_layout_get_size(layout, NULL, &height); |
| 1977 PangoLayoutIter* iter = pango_layout_get_iter(layout); | 1963 PangoLayoutIter* iter = pango_layout_get_iter(layout); |
| 1978 int baseline = pango_layout_iter_get_baseline(iter); | 1964 int baseline = pango_layout_iter_get_baseline(iter); |
| 1979 pango_layout_iter_free(iter); | 1965 pango_layout_iter_free(iter); |
| 1980 g_object_set(instant_anchor_tag_, "rise", baseline - height, NULL); | 1966 g_object_set(instant_anchor_tag_, "rise", baseline - height, NULL); |
| 1981 } | 1967 } |
| OLD | NEW |