summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webpopupmenu_impl.h
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 05:11:05 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-16 05:11:05 +0000
commit05158051ea881677c03a22ddf38a3e6779cebb9e (patch)
tree95c6756227e0bbea55da3c4b19abdf99d7eb3ebe /webkit/glue/webpopupmenu_impl.h
parent6c14b76fede6abc592d9d65965fbdf4626e83efe (diff)
downloadchromium_src-05158051ea881677c03a22ddf38a3e6779cebb9e.zip
chromium_src-05158051ea881677c03a22ddf38a3e6779cebb9e.tar.gz
chromium_src-05158051ea881677c03a22ddf38a3e6779cebb9e.tar.bz2
Use WebWidget from the WebKit API. This change also makes
use of WebKitClient (replacing WebWidgetDelegate from glue). The ripple effects of this change are rather large, but most of the impact is mechanical. The more interesting changes include: 1- Removing the WebWidget parameter from WebWidgetClient methods. This didn't matter at all to RenderWidget or RenderView, but it did cause some changes to be made to TestWebViewDelegate. Now, it is not possible to share a delegate implementation for both the WebView and a popup menu, so I have a second instance of the delegate owned by TestShell for use with popup menus. 2- Plumbing WebNavigationPolicy in place of WindowOpenDisposition was getting to be a pretty large change, so I stopped short of deleting WindowOpenDisposition. That way the Chrome side can remain mostly unmodified. I then added a mapping function to convert from WebNavigationPolicy to WindowOpenDisposition. 3- The IME methods on WebWidget were renamed (reviewed separately by hbono), and there is now an enum to specify the composition command (WebCompositionCommand). 4- I added IPC serialization for WebCompositionCommand and WebTextDirection, which cleaned up some code that was just using ints in IPC messages. R=jam BUG=16234 TEST=none Review URL: http://codereview.chromium.org/149620 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20854 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webpopupmenu_impl.h')
-rw-r--r--webkit/glue/webpopupmenu_impl.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/webkit/glue/webpopupmenu_impl.h b/webkit/glue/webpopupmenu_impl.h
new file mode 100644
index 0000000..b6ef6ed
--- /dev/null
+++ b/webkit/glue/webpopupmenu_impl.h
@@ -0,0 +1,111 @@
+// Copyright (c) 2006-2008 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.
+
+#ifndef WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_
+#define WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "webkit/api/public/WebPoint.h"
+#include "webkit/api/public/WebPopupMenu.h"
+#include "webkit/api/public/WebSize.h"
+
+#include "FramelessScrollViewClient.h"
+
+namespace WebCore {
+class Frame;
+class FramelessScrollView;
+class KeyboardEvent;
+class Page;
+class PlatformKeyboardEvent;
+class Range;
+class Widget;
+}
+
+namespace WebKit {
+class WebKeyboardEvent;
+class WebMouseEvent;
+class WebMouseWheelEvent;
+struct WebRect;
+}
+
+struct MenuItem;
+
+class WebPopupMenuImpl : public WebKit::WebPopupMenu,
+ public WebCore::FramelessScrollViewClient,
+ public base::RefCounted<WebPopupMenuImpl> {
+ public:
+ // WebWidget
+ virtual void close();
+ virtual WebKit::WebSize size() { return size_; }
+ virtual void resize(const WebKit::WebSize& new_size);
+ virtual void layout();
+ virtual void paint(WebKit::WebCanvas* canvas,
+ const WebKit::WebRect& rect);
+ virtual bool handleInputEvent(const WebKit::WebInputEvent& input_event);
+ virtual void mouseCaptureLost();
+ virtual void setFocus(bool enable);
+ virtual bool handleCompositionEvent(WebKit::WebCompositionCommand command,
+ int cursor_position,
+ int target_start,
+ int target_end,
+ const WebKit::WebString& text);
+ virtual bool queryCompositionStatus(bool* enabled,
+ WebKit::WebRect* caret_rect);
+ virtual void setTextDirection(WebKit::WebTextDirection direction);
+
+ // WebPopupMenuImpl
+ void Init(WebCore::FramelessScrollView* widget,
+ const WebKit::WebRect& bounds);
+
+ WebKit::WebWidgetClient* client() {
+ return client_;
+ }
+
+ void MouseMove(const WebKit::WebMouseEvent& mouse_event);
+ void MouseLeave(const WebKit::WebMouseEvent& mouse_event);
+ void MouseDown(const WebKit::WebMouseEvent& mouse_event);
+ void MouseUp(const WebKit::WebMouseEvent& mouse_event);
+ void MouseDoubleClick(const WebKit::WebMouseEvent& mouse_event);
+ void MouseWheel(const WebKit::WebMouseWheelEvent& wheel_event);
+ bool KeyEvent(const WebKit::WebKeyboardEvent& key_event);
+
+ protected:
+ friend class WebKit::WebPopupMenu; // For WebPopupMenu::create
+ friend class base::RefCounted<WebPopupMenuImpl>;
+
+ WebPopupMenuImpl(WebKit::WebWidgetClient* client);
+ ~WebPopupMenuImpl();
+
+ // WebCore::HostWindow methods:
+ virtual void repaint(const WebCore::IntRect&,
+ bool content_changed,
+ bool immediate = false,
+ bool repaint_content_only = false);
+ virtual void scroll(const WebCore::IntSize& scroll_delta,
+ const WebCore::IntRect& scroll_rect,
+ const WebCore::IntRect& clip_rect);
+ virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const;
+ virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const;
+ virtual PlatformWidget platformWindow() const;
+ virtual void scrollRectIntoView(const WebCore::IntRect&,
+ const WebCore::ScrollView*) const;
+
+ // WebCore::FramelessScrollViewClient methods:
+ virtual void popupClosed(WebCore::FramelessScrollView* popup_view);
+
+ WebKit::WebWidgetClient* client_;
+ WebKit::WebSize size_;
+
+ WebKit::WebPoint last_mouse_position_;
+
+ // This is a non-owning ref. The popup will notify us via popupClosed()
+ // before it is destroyed.
+ WebCore::FramelessScrollView* widget_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(WebPopupMenuImpl);
+};
+
+#endif // WEBKIT_GLUE_WEBPOPUPMENU_IMPL_H_