| Index: chrome/browser/chromeos/login/screen_locker.cc
|
| diff --git a/chrome/browser/chromeos/login/screen_locker.cc b/chrome/browser/chromeos/login/screen_locker.cc
|
| index 45f670d1f4fbc8d195abdbab7b20d951abda0a72..8d67d3b4db86c91c9a9715b5c90728c172ffe2c3 100644
|
| --- a/chrome/browser/chromeos/login/screen_locker.cc
|
| +++ b/chrome/browser/chromeos/login/screen_locker.cc
|
| @@ -16,17 +16,16 @@
|
| #include "chrome/browser/chromeos/login/login_utils.h"
|
| #include "chrome/browser/chromeos/login/message_bubble.h"
|
| #include "chrome/browser/chromeos/login/screen_lock_view.h"
|
| +#include "chrome/browser/chromeos/wm_ipc.h"
|
| #include "chrome/browser/metrics/user_metrics.h"
|
| #include "chrome/common/notification_service.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
| +#include "third_party/cros/chromeos_wm_ipc_enums.h"
|
| #include "views/screen.h"
|
| #include "views/widget/root_view.h"
|
| #include "views/widget/widget_gtk.h"
|
|
|
| -#include "chrome/browser/chromeos/wm_ipc.h"
|
| -#include "third_party/cros/chromeos_wm_ipc_enums.h"
|
| -
|
| namespace {
|
| // The maxium times that the screen locker should try to grab input,
|
| // and its interval. It has to be able to grab all inputs in 30 seconds,
|
| @@ -88,12 +87,15 @@ class GrabWidget : public views::WidgetGtk {
|
|
|
| virtual void Show() {
|
| views::WidgetGtk::Show();
|
| - GtkWidget* current_grab_window = gtk_grab_get_current();
|
| - if (current_grab_window)
|
| + GtkWidget* current_grab_window;
|
| + // Make sure there is no grab widget so that gtk simply propagates
|
| + // an event. This is necessary to allow message bubble and password
|
| + // field, button to process events simultaneously. GTK
|
| + // maintains grab widgets in a linked-list, so we need to remove
|
| + // until it's empty.
|
| + while ((current_grab_window = gtk_grab_get_current()) != NULL)
|
| gtk_grab_remove(current_grab_window);
|
|
|
| - gtk_grab_add(window_contents());
|
| -
|
| // Now steal all inputs.
|
| TryGrabAllInputs();
|
| }
|
| @@ -190,7 +192,6 @@ class MouseEventRelay : public MessageLoopForUI::Observer {
|
|
|
| virtual void DidProcessEvent(GdkEvent* event) {
|
| if (event->any.window != src_) {
|
| - DLOG(INFO) << "ignore event src non grab window: " << event->type;
|
| return;
|
| }
|
|
|
|
|