diff options
Diffstat (limited to 'views')
-rw-r--r-- | views/controls/button/button.cc | 6 | ||||
-rw-r--r-- | views/controls/button/button.h | 5 | ||||
-rw-r--r-- | views/controls/button/custom_button.cc | 22 | ||||
-rw-r--r-- | views/controls/button/native_button.cc | 29 | ||||
-rw-r--r-- | views/controls/scrollbar/bitmap_scroll_bar.cc | 33 | ||||
-rw-r--r-- | views/controls/scrollbar/bitmap_scroll_bar.h | 2 | ||||
-rw-r--r-- | views/event.h | 10 | ||||
-rw-r--r-- | views/view_unittest.cc | 2 | ||||
-rw-r--r-- | views/window/custom_frame_view.cc | 2 | ||||
-rw-r--r-- | views/window/custom_frame_view.h | 2 | ||||
-rw-r--r-- | views/window/dialog_client_view.cc | 3 | ||||
-rw-r--r-- | views/window/dialog_client_view.h | 2 |
12 files changed, 92 insertions, 26 deletions
diff --git a/views/controls/button/button.cc b/views/controls/button/button.cc index cbb42bf..504a2f5 100644 --- a/views/controls/button/button.cc +++ b/views/controls/button/button.cc @@ -66,12 +66,12 @@ Button::Button(ButtonListener* listener) mouse_event_flags_(0) { } -void Button::NotifyClick(int mouse_event_flags) { - mouse_event_flags_ = mouse_event_flags; +void Button::NotifyClick(const views::Event& event) { + mouse_event_flags_ = event.IsMouseEvent() ? event.GetFlags() : 0; // We can be called when there is no listener, in cases like double clicks on // menu buttons etc. if (listener_) - listener_->ButtonPressed(this); + listener_->ButtonPressed(this, event); // NOTE: don't attempt to reset mouse_event_flags_ as the listener may have // deleted us. } diff --git a/views/controls/button/button.h b/views/controls/button/button.h index 514758f..9dd8b13 100644 --- a/views/controls/button/button.h +++ b/views/controls/button/button.h @@ -10,12 +10,13 @@ namespace views { class Button; +class Event; // An interface implemented by an object to let it know that a button was // pressed. class ButtonListener { public: - virtual void ButtonPressed(Button* sender) = 0; + virtual void ButtonPressed(Button* sender, const views::Event& event) = 0; }; // A View representing a button. Depending on the specific type, the button @@ -46,7 +47,7 @@ class Button : public View { explicit Button(ButtonListener* listener); // Cause the button to notify the listener that a click occurred. - virtual void NotifyClick(int mouse_event_flags); + virtual void NotifyClick(const views::Event& event); // The button's listener. Notified when clicked. ButtonListener* listener_; diff --git a/views/controls/button/custom_button.cc b/views/controls/button/custom_button.cc index 45482b8..69ac840 100644 --- a/views/controls/button/custom_button.cc +++ b/views/controls/button/custom_button.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -89,7 +89,19 @@ bool CustomButton::IsTriggerableEvent(const MouseEvent& e) { bool CustomButton::AcceleratorPressed(const Accelerator& accelerator) { if (enabled_) { SetState(BS_NORMAL); - NotifyClick(0); +#if defined(OS_WIN) + KeyEvent key_event(Event::ET_KEY_RELEASED, accelerator.GetKeyCode(), 0, 0); +#elif defined(OS_LINUX) + GdkEventKey gdk_key; + memset(&gdk_key, 0, sizeof(GdkEventKey)); + gdk_key.type = GDK_KEY_RELEASE; + gdk_key.keyval = accelerator.GetKeyCode(); + gdk_key.state = accelerator.IsAltDown() << 3 + + accelerator.IsCtrlDown() << 2 + + accelerator.IsShiftDown(); + KeyEvent key_event(&gdk_key, false); +#endif + NotifyClick(key_event); return true; } return false; @@ -128,7 +140,7 @@ void CustomButton::OnMouseReleased(const MouseEvent& e, bool canceled) { } else { SetState(BS_HOT); if (IsTriggerableEvent(e)) { - NotifyClick(e.GetFlags()); + NotifyClick(e); // We may be deleted at this point (by the listener's notification // handler) so no more doing anything, just return. return; @@ -168,7 +180,7 @@ bool CustomButton::OnKeyPressed(const KeyEvent& e) { return true; } else if (e.GetCharacter() == base::VKEY_RETURN) { SetState(BS_NORMAL); - NotifyClick(0); + NotifyClick(e); return true; } } @@ -179,7 +191,7 @@ bool CustomButton::OnKeyReleased(const KeyEvent& e) { if (state_ != BS_DISABLED) { if (e.GetCharacter() == base::VKEY_SPACE) { SetState(BS_NORMAL); - NotifyClick(0); + NotifyClick(e); return true; } } diff --git a/views/controls/button/native_button.cc b/views/controls/button/native_button.cc index 8a90aaa..f631bd8 100644 --- a/views/controls/button/native_button.cc +++ b/views/controls/button/native_button.cc @@ -4,8 +4,14 @@ #include "views/controls/button/native_button.h" +#if defined(OS_WIN) +#include <atlbase.h> +#include <atlapp.h> // for GET_X/Y_LPARAM +#endif + #if defined(OS_LINUX) #include <gdk/gdkkeysyms.h> +#include "views/screen.h" #endif #include "app/l10n_util.h" @@ -95,7 +101,17 @@ void NativeButton::ButtonPressed() { RequestFocus(); // TODO(beng): obtain mouse event flags for native buttons someday. - NotifyClick(mouse_event_flags()); +#if defined(OS_WIN) + DWORD pos = GetMessagePos(); + gfx::Point cursor_point(GET_X_LPARAM(pos), GET_Y_LPARAM(pos)); +#elif defined(OS_LINUX) + gfx::Point cursor_point = Screen::GetCursorScreenPoint(); +#endif + + views::MouseEvent event(views::Event::ET_MOUSE_RELEASED, + cursor_point.x(), cursor_point.y(), + views::Event::EF_LEFT_BUTTON_DOWN); + NotifyClick(event); } //////////////////////////////////////////////////////////////////////////////// @@ -162,7 +178,16 @@ std::string NativeButton::GetClassName() const { bool NativeButton::AcceleratorPressed(const Accelerator& accelerator) { if (IsEnabled()) { - NotifyClick(mouse_event_flags()); +#if defined(OS_WIN) + DWORD pos = GetMessagePos(); + gfx::Point cursor_point(GET_X_LPARAM(pos), GET_Y_LPARAM(pos)); +#elif defined(OS_LINUX) + gfx::Point cursor_point = Screen::GetCursorScreenPoint(); +#endif + views::MouseEvent event(views::Event::ET_MOUSE_RELEASED, + cursor_point.x(), cursor_point.y(), + views::Event::EF_LEFT_BUTTON_DOWN); + NotifyClick(event); return true; } return false; diff --git a/views/controls/scrollbar/bitmap_scroll_bar.cc b/views/controls/scrollbar/bitmap_scroll_bar.cc index 0736501..54f35ab 100644 --- a/views/controls/scrollbar/bitmap_scroll_bar.cc +++ b/views/controls/scrollbar/bitmap_scroll_bar.cc @@ -1,9 +1,16 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "views/controls/scrollbar/bitmap_scroll_bar.h" +#if defined(OS_WIN) +#include <atlbase.h> +#include <atlapp.h> // for GET_X/Y_LPARAM +#elif defined(OS_LINUX) +#include "views/screen.h" +#endif + #include "app/gfx/canvas.h" #include "app/l10n_util.h" #include "base/compiler_specific.h" @@ -13,6 +20,7 @@ #include "views/controls/menu/menu.h" #include "views/controls/scroll_view.h" #include "views/widget/widget.h" +#include "views/window/window.h" #undef min #undef max @@ -46,7 +54,7 @@ class AutorepeatButton : public ImageButton { protected: virtual bool OnMousePressed(const MouseEvent& event) { - Button::NotifyClick(event.GetFlags()); + Button::NotifyClick(event); repeater_.Start(); return true; } @@ -58,14 +66,23 @@ class AutorepeatButton : public ImageButton { private: void NotifyClick() { - Button::NotifyClick(0); +#if defined(OS_WIN) + DWORD pos = GetMessagePos(); + gfx::Point cursor_point(GET_X_LPARAM(pos), GET_Y_LPARAM(pos)); +#elif defined(OS_LINUX) + gfx::Point cursor_point = Screen::GetCursorScreenPoint(); +#endif + views::MouseEvent event(views::Event::ET_MOUSE_RELEASED, + cursor_point.x(), cursor_point.y(), + views::Event::EF_LEFT_BUTTON_DOWN); + Button::NotifyClick(event); } // The repeat controller that we use to repeatedly click the button when the // mouse button is down. RepeatController repeater_; - DISALLOW_EVIL_CONSTRUCTORS(AutorepeatButton); + DISALLOW_COPY_AND_ASSIGN(AutorepeatButton); }; /////////////////////////////////////////////////////////////////////////////// @@ -246,10 +263,10 @@ class BitmapScrollBarThumb : public View { // The current state of the thumb button. CustomButton::ButtonState state_; - DISALLOW_EVIL_CONSTRUCTORS(BitmapScrollBarThumb); + DISALLOW_COPY_AND_ASSIGN(BitmapScrollBarThumb); }; -} // anonymous namespace +} // anonymous namespace /////////////////////////////////////////////////////////////////////////////// // BitmapScrollBar, public: @@ -479,7 +496,7 @@ bool BitmapScrollBar::OnMouseWheel(const MouseWheelEvent& event) { bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) { ScrollAmount amount = SCROLL_NONE; - switch(event.GetCharacter()) { + switch (event.GetCharacter()) { case VK_UP: if (!IsHorizontal()) amount = SCROLL_PREV_LINE; @@ -629,7 +646,7 @@ void BitmapScrollBar::ExecuteCommand(int id) { /////////////////////////////////////////////////////////////////////////////// // BitmapScrollBar, ButtonListener implementation: -void BitmapScrollBar::ButtonPressed(Button* sender) { +void BitmapScrollBar::ButtonPressed(Button* sender, const views::Event& event) { if (sender == prev_button_) { ScrollByAmount(SCROLL_PREV_LINE); } else if (sender == next_button_) { diff --git a/views/controls/scrollbar/bitmap_scroll_bar.h b/views/controls/scrollbar/bitmap_scroll_bar.h index 904830e..1a3bc67 100644 --- a/views/controls/scrollbar/bitmap_scroll_bar.h +++ b/views/controls/scrollbar/bitmap_scroll_bar.h @@ -103,7 +103,7 @@ class BitmapScrollBar : public ScrollBar, virtual bool OnKeyPressed(const KeyEvent& event); // BaseButton::ButtonListener overrides: - virtual void ButtonPressed(Button* sender); + virtual void ButtonPressed(Button* sender, const views::Event& event); // ScrollBar overrides: virtual void Update(int viewport_size, diff --git a/views/event.h b/views/event.h index ee9a838..882f558 100644 --- a/views/event.h +++ b/views/event.h @@ -87,6 +87,16 @@ class Event { return (flags_ & EF_ALT_DOWN) != 0; } + bool IsMouseEvent() const { + return type_ == ET_MOUSE_PRESSED || + type_ == ET_MOUSE_DRAGGED || + type_ == ET_MOUSE_RELEASED || + type_ == ET_MOUSE_MOVED || + type_ == ET_MOUSE_ENTERED || + type_ == ET_MOUSE_EXITED || + type_ == ET_MOUSEWHEEL; + } + #if defined(OS_WIN) // Returns the EventFlags in terms of windows flags. int GetWindowsFlags() const; diff --git a/views/view_unittest.cc b/views/view_unittest.cc index 9d2fa87..e02afd73a 100644 --- a/views/view_unittest.cc +++ b/views/view_unittest.cc @@ -1045,7 +1045,7 @@ class TestDialogView : public views::View, } // views::ButtonListener implementation. - virtual void ButtonPressed(Button* sender) { + virtual void ButtonPressed(Button* sender, const views::Event& event) { last_pressed_button_ = sender; } diff --git a/views/window/custom_frame_view.cc b/views/window/custom_frame_view.cc index 3434485..d3fd085 100644 --- a/views/window/custom_frame_view.cc +++ b/views/window/custom_frame_view.cc @@ -236,7 +236,7 @@ gfx::Size CustomFrameView::GetPreferredSize() { /////////////////////////////////////////////////////////////////////////////// // CustomFrameView, ButtonListener implementation: -void CustomFrameView::ButtonPressed(Button* sender) { +void CustomFrameView::ButtonPressed(Button* sender, const views::Event& event) { if (sender == close_button_) frame_->Close(); else if (sender == minimize_button_) diff --git a/views/window/custom_frame_view.h b/views/window/custom_frame_view.h index bee9e62..0ae0050 100644 --- a/views/window/custom_frame_view.h +++ b/views/window/custom_frame_view.h @@ -50,7 +50,7 @@ class CustomFrameView : public NonClientFrameView, virtual gfx::Size GetPreferredSize(); // ButtonListener implementation: - virtual void ButtonPressed(Button* sender); + virtual void ButtonPressed(Button* sender, const views::Event& event); private: // Returns the thickness of the border that makes up the window frame edges. diff --git a/views/window/dialog_client_view.cc b/views/window/dialog_client_view.cc index 9c40b7f..98482a0 100644 --- a/views/window/dialog_client_view.cc +++ b/views/window/dialog_client_view.cc @@ -367,7 +367,8 @@ bool DialogClientView::AcceleratorPressed(const Accelerator& accelerator) { //////////////////////////////////////////////////////////////////////////////// // DialogClientView, ButtonListener implementation: -void DialogClientView::ButtonPressed(Button* sender) { +void DialogClientView::ButtonPressed( + Button* sender, const views::Event& event) { // We NULL check the delegate here since the buttons can receive WM_COMMAND // messages even after they (and the window containing us) are destroyed. if (!GetDialogDelegate()) diff --git a/views/window/dialog_client_view.h b/views/window/dialog_client_view.h index 5d1fa33..1c3d19f 100644 --- a/views/window/dialog_client_view.h +++ b/views/window/dialog_client_view.h @@ -69,7 +69,7 @@ class DialogClientView : public ClientView, virtual bool AcceleratorPressed(const Accelerator& accelerator); // ButtonListener implementation: - virtual void ButtonPressed(Button* sender); + virtual void ButtonPressed(Button* sender, const views::Event& event); private: // Paint the size box in the bottom right corner of the window if it is |