diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 02:51:13 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-09 02:51:13 +0000 |
commit | 5af7608ac5748ad12cd27cd0e3a60901e62ea02f (patch) | |
tree | 4789d6c29a7598b97430f15d87b827f7f0660bfc /views/controls/menu | |
parent | 02a6aada51c3f4da232b60f7152a3fe64fd37e0c (diff) | |
download | chromium_src-5af7608ac5748ad12cd27cd0e3a60901e62ea02f.zip chromium_src-5af7608ac5748ad12cd27cd0e3a60901e62ea02f.tar.gz chromium_src-5af7608ac5748ad12cd27cd0e3a60901e62ea02f.tar.bz2 |
Do not send many requests to flimflam when network chagned.
Send sync request to flimflam only if new request didn't come in 50ms.
Network menu was updating menu twice when opening.
BUG=chromium-os:8435
TEST=manual: enable vlog (--vlog=1) and observe that chrome log reports
one "UpdateNetworkStatus" when network changes (disable, enable ethernet etc)
There may be two when wifi is enabled as different wifi source may be
recognized at different timing.
Review URL: http://codereview.chromium.org/4229005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65478 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/controls/menu')
-rw-r--r-- | views/controls/menu/native_menu_gtk.cc | 23 | ||||
-rw-r--r-- | views/controls/menu/native_menu_gtk.h | 4 |
2 files changed, 25 insertions, 2 deletions
diff --git a/views/controls/menu/native_menu_gtk.cc b/views/controls/menu/native_menu_gtk.cc index b648878..d570807 100644 --- a/views/controls/menu/native_menu_gtk.cc +++ b/views/controls/menu/native_menu_gtk.cc @@ -75,7 +75,8 @@ NativeMenuGtk::NativeMenuGtk(Menu2* menu) activate_factory_(this), host_menu_(menu), menu_action_(MENU_ACTION_NONE), - nested_dispatcher_(NULL) { + nested_dispatcher_(NULL), + ignore_button_release_(true) { } NativeMenuGtk::~NativeMenuGtk() { @@ -98,6 +99,8 @@ void NativeMenuGtk::RunMenuAt(const gfx::Point& point, int alignment) { activated_menu_ = NULL; activated_index_ = -1; menu_action_ = MENU_ACTION_NONE; + // ignore button release event unless mouse is pressed or moved. + ignore_button_release_ = true; UpdateStates(); Position position = { point, static_cast<Menu2::Alignment>(alignment) }; @@ -239,6 +242,7 @@ bool NativeMenuGtk::Dispatch(GdkEvent* event) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: { + ignore_button_release_ = true; gpointer data = NULL; gdk_window_get_user_data(((GdkEventAny*)event)->window, &data); GtkWidget* widget = reinterpret_cast<GtkWidget*>(data); @@ -258,6 +262,22 @@ bool NativeMenuGtk::Dispatch(GdkEvent* event) { } break; } + case GDK_MOTION_NOTIFY: { + ignore_button_release_ = false; + break; + } + case GDK_BUTTON_RELEASE: { + if (ignore_button_release_) { + // Ignore if a release event happened without press event. + // Normally, release event is eaten by gtk when menu is opened + // in response to mouse press event. Since the renderer opens + // the context menu asyncrhonous after press event is handled, + // gtk sometimes does not eat it, which causes the menu to be + // closed. + return true; + } + break; + } default: break; } @@ -287,7 +307,6 @@ void NativeMenuGtk::OnMenuMoveCurrent(GtkWidget* menu_widget, if (menu_item) { submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu_item)); } - if (focus_direction == GTK_MENU_DIR_CHILD && submenu == NULL) { GetAncestor()->menu_action_ = MENU_ACTION_NEXT; gtk_menu_popdown(GTK_MENU(menu_widget)); diff --git a/views/controls/menu/native_menu_gtk.h b/views/controls/menu/native_menu_gtk.h index 99d65cc..f15bc19 100644 --- a/views/controls/menu/native_menu_gtk.h +++ b/views/controls/menu/native_menu_gtk.h @@ -146,6 +146,10 @@ class NativeMenuGtk : public MenuWrapper, // message loop is handled. see http://crosbug.com/7228 . NestedDispatcherGtk* nested_dispatcher_; + // A flag used to detect a button release event without button press or move. + // see http://crosbug.com/8718. + bool ignore_button_release_; + DISALLOW_COPY_AND_ASSIGN(NativeMenuGtk); }; |