| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 | 452 |
| 453 gboolean AutocompleteEditViewGtk::HandleKeyPress(GtkWidget* widget, | 453 gboolean AutocompleteEditViewGtk::HandleKeyPress(GtkWidget* widget, |
| 454 GdkEventKey* event) { | 454 GdkEventKey* event) { |
| 455 // This is very similar to the special casing of the return key in the | 455 // This is very similar to the special casing of the return key in the |
| 456 // GtkTextView key_press default handler. TODO(deanm): We do however omit | 456 // GtkTextView key_press default handler. TODO(deanm): We do however omit |
| 457 // some IME related code, this might become a problem if an IME wants to | 457 // some IME related code, this might become a problem if an IME wants to |
| 458 // handle enter. We can get at the im_context and do it ourselves if needed. | 458 // handle enter. We can get at the im_context and do it ourselves if needed. |
| 459 if (event->keyval == GDK_Return || | 459 if (event->keyval == GDK_Return || |
| 460 event->keyval == GDK_ISO_Enter || | 460 event->keyval == GDK_ISO_Enter || |
| 461 event->keyval == GDK_KP_Enter || | 461 event->keyval == GDK_KP_Enter || |
| 462 event->keyval == GDK_Tab || |
| 462 (event->keyval == GDK_Escape && event->state == 0)) { | 463 (event->keyval == GDK_Escape && event->state == 0)) { |
| 463 // Handle IME. This is basically taken from GtkTextView and reworked a bit. | 464 // Handle IME. This is basically taken from GtkTextView and reworked a bit. |
| 464 GtkTextIter iter; | 465 GtkTextIter iter; |
| 465 GtkTextView* text_view = GTK_TEXT_VIEW(text_view_); | 466 GtkTextView* text_view = GTK_TEXT_VIEW(text_view_); |
| 466 GtkTextMark* insert = gtk_text_buffer_get_insert(text_buffer_); | 467 GtkTextMark* insert = gtk_text_buffer_get_insert(text_buffer_); |
| 467 gtk_text_buffer_get_iter_at_mark(text_buffer_, &iter, insert); | 468 gtk_text_buffer_get_iter_at_mark(text_buffer_, &iter, insert); |
| 468 gboolean can_insert = gtk_text_iter_can_insert(&iter, text_view->editable); | 469 gboolean can_insert = gtk_text_iter_can_insert(&iter, text_view->editable); |
| 469 if (gtk_im_context_filter_keypress(text_view->im_context, event)) { | 470 if (gtk_im_context_filter_keypress(text_view->im_context, event)) { |
| 470 // The IME handled it, do the follow up IME handling. | 471 // The IME handled it, do the follow up IME handling. |
| 471 if (!can_insert) { | 472 if (!can_insert) { |
| 472 gtk_im_context_reset(text_view->im_context); | 473 gtk_im_context_reset(text_view->im_context); |
| 473 } else { | 474 } else { |
| 474 text_view->need_im_reset = TRUE; | 475 text_view->need_im_reset = TRUE; |
| 475 } | 476 } |
| 476 } else { | 477 } else { |
| 477 // Ok, not handled by the IME, we can handle it. | 478 // Ok, not handled by the IME, we can handle it. |
| 478 if (event->keyval == GDK_Escape) { | 479 if (event->keyval == GDK_Tab) { |
| 480 if (model_->is_keyword_hint() && !model_->keyword().empty()) { |
| 481 model_->AcceptKeyword(); |
| 482 } else { |
| 483 return FALSE; // Let GtkTextView handle the tab focus change. |
| 484 } |
| 485 } else if (event->keyval == GDK_Escape) { |
| 479 model_->OnEscapeKeyPressed(); | 486 model_->OnEscapeKeyPressed(); |
| 480 } else { | 487 } else { |
| 481 bool alt_held = (event->state & GDK_MOD1_MASK); | 488 bool alt_held = (event->state & GDK_MOD1_MASK); |
| 482 model_->AcceptInput(alt_held ? NEW_FOREGROUND_TAB : CURRENT_TAB, false); | 489 model_->AcceptInput(alt_held ? NEW_FOREGROUND_TAB : CURRENT_TAB, false); |
| 483 } | 490 } |
| 484 } | 491 } |
| 485 return TRUE; // Don't propagate into GtkTextView. | 492 return TRUE; // Don't propagate into GtkTextView. |
| 486 } | 493 } |
| 487 | 494 |
| 488 return FALSE; // Propagate into GtkTextView. | 495 return FALSE; // Propagate into GtkTextView. |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 const std::string& selected_text) { | 751 const std::string& selected_text) { |
| 745 GtkClipboard* clipboard = | 752 GtkClipboard* clipboard = |
| 746 gtk_widget_get_clipboard(text_view_, GDK_SELECTION_PRIMARY); | 753 gtk_widget_get_clipboard(text_view_, GDK_SELECTION_PRIMARY); |
| 747 DCHECK(clipboard); | 754 DCHECK(clipboard); |
| 748 if (!clipboard) | 755 if (!clipboard) |
| 749 return; | 756 return; |
| 750 | 757 |
| 751 gtk_clipboard_set_text( | 758 gtk_clipboard_set_text( |
| 752 clipboard, selected_text.data(), selected_text.size()); | 759 clipboard, selected_text.data(), selected_text.size()); |
| 753 } | 760 } |
| OLD | NEW |