Index: chrome/browser/ui/gtk/bubble/bubble_gtk.h |
diff --git a/chrome/browser/ui/gtk/bubble/bubble_gtk.h b/chrome/browser/ui/gtk/bubble/bubble_gtk.h |
deleted file mode 100644 |
index ecdbc49a163c622bb03703dae75a187c54d1e4dc..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/bubble/bubble_gtk.h |
+++ /dev/null |
@@ -1,256 +0,0 @@ |
-// Copyright (c) 2012 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 CHROME_BROWSER_UI_GTK_BUBBLE_BUBBLE_GTK_H_ |
-#define CHROME_BROWSER_UI_GTK_BUBBLE_BUBBLE_GTK_H_ |
- |
-#include <gtk/gtk.h> |
- |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
-#include "base/gtest_prod_util.h" |
-#include "base/memory/weak_ptr.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "ui/base/gtk/gtk_signal.h" |
-#include "ui/base/gtk/gtk_signal_registrar.h" |
-#include "ui/gfx/point.h" |
-#include "ui/gfx/rect.h" |
- |
-class BubbleGtk; |
-class GtkThemeService; |
- |
-namespace gfx { |
-class Rect; |
-} |
- |
-class BubbleDelegateGtk { |
- public: |
- // Called when the bubble is closing and is about to be deleted. |
- // |closed_by_escape| is true if the close is the result of pressing escape. |
- virtual void BubbleClosing(BubbleGtk* bubble, bool closed_by_escape) = 0; |
- |
- // NOTE: The Views interface has CloseOnEscape, except I can't find a place |
- // where it ever returns false, so we always allow you to close via escape. |
- |
- protected: |
- virtual ~BubbleDelegateGtk() {} |
-}; |
- |
-// This is the GTK implementation of Bubbles. Bubbles are like dialogs, but they |
-// can point to a given element on the screen. You should call BubbleGtk::Show, |
-// which will create and display a bubble. The object is self deleting, when the |
-// bubble is closed, you will be notified via |
-// BubbleDelegateGtk::BubbleClosing(). Then the widgets and the underlying |
-// object will be destroyed. You can also close and destroy the bubble by |
-// calling Close(). |
-class BubbleGtk : public content::NotificationObserver { |
- public: |
- // The style of the frame of the bubble (includes positioning and arrow). |
- enum FrameStyle { |
- ANCHOR_TOP_LEFT, |
- ANCHOR_TOP_MIDDLE, |
- ANCHOR_TOP_RIGHT, |
- ANCHOR_BOTTOM_LEFT, |
- ANCHOR_BOTTOM_MIDDLE, |
- ANCHOR_BOTTOM_RIGHT, |
- FLOAT_BELOW_RECT, // No arrow. Positioned under the supplied rect. |
- CENTER_OVER_RECT, // No arrow. Centered over the supplied rect. |
- FIXED_TOP_LEFT, // No arrow. Shown at top left of |toplevel_window_|. |
- FIXED_TOP_RIGHT, // No arrow. Shown at top right of |toplevel_window_|. |
- }; |
- |
- enum BubbleAttribute { |
- NONE = 0, |
- MATCH_SYSTEM_THEME = 1 << 0, // Matches system colors/themes when possible. |
- POPUP_WINDOW = 1 << 1, // Displays as popup instead of top-level window. |
- GRAB_INPUT = 1 << 2, // Causes bubble to grab keyboard/pointer input. |
- NO_ACCELERATORS = 1 << 3, // Does not register any of the default bubble |
- // accelerators. |
- }; |
- |
- // Show a bubble, pointing at the area |rect| (in coordinates relative to |
- // |anchor_widget|'s origin). A bubble will try to fit on the screen, so it |
- // can point to any edge of |rect|. If |rect| is NULL, the widget's entire |
- // area will be used. The bubble will host the |content| widget. Its arrow |
- // will be drawn according to |frame_style| if possible, and will be |
- // automatically flipped in RTL locales. The |delegate| will be notified when |
- // the bubble is closed. The bubble will perform an X grab of the pointer and |
- // keyboard, and will close itself if a click is received outside of the |
- // bubble. |
- static BubbleGtk* Show(GtkWidget* anchor_widget, |
- const gfx::Rect* rect, |
- GtkWidget* content, |
- FrameStyle frame_style, |
- int attribute_flags, |
- GtkThemeService* provider, |
- BubbleDelegateGtk* delegate); |
- |
- // Close the bubble if it's open. This will delete the widgets and object, |
- // so you shouldn't hold a BubbleGtk pointer after calling Close(). |
- void Close(); |
- |
- // Move the window to the new anchor rectangle. |
- void SetPositionRelativeToAnchor(const gfx::Rect* rect); |
- |
- // content::NotificationObserver implementation. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- // Change an input-grabbing bubble into a non-input-grabbing bubble. This |
- // allows a window to change from auto closing when it loses to focus to being |
- // a window that does not auto close, and is useful if an auto closing window |
- // starts being inspected. |
- void StopGrabbingInput(); |
- |
- GtkWindow* GetNativeWindow(); |
- |
- GtkWidget* anchor_widget() { return anchor_widget_; } |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(BubbleGtkTest, ArrowLocation); |
- FRIEND_TEST_ALL_PREFIXES(BubbleGtkTest, NoArrow); |
- |
- enum FrameType { |
- FRAME_MASK, |
- FRAME_STROKE, |
- }; |
- |
- BubbleGtk(GtkThemeService* provider, |
- FrameStyle frame_style, |
- int attribute_flags); |
- virtual ~BubbleGtk(); |
- |
- // Creates the Bubble. |
- void Init(GtkWidget* anchor_widget, |
- const gfx::Rect* rect, |
- GtkWidget* content, |
- int attribute_flags); |
- |
- // Make the points for our polygon frame, either for fill (the mask), or for |
- // when we stroke the border. |
- static std::vector<GdkPoint> MakeFramePolygonPoints( |
- FrameStyle frame_style, |
- int width, |
- int height, |
- FrameType type); |
- |
- // Get the allowed frame style (which is a function of the preferred style and |
- // of the direction that the bubble should be facing to fit onscreen). |
- // |arrow_x| (or |arrow_y|) is the X component (or Y component) in screen |
- // coordinates of the point at which the bubble's arrow should be aimed, |
- // respectively. |width| (or |height|) is the bubble's width (or height). |
- static FrameStyle GetAllowedFrameStyle(FrameStyle preferred_location, |
- int arrow_x, |
- int arrow_y, |
- int width, |
- int height); |
- |
- // Updates the frame style based on the toplevel window's current position and |
- // the bubble's size. If the |force_move_and_reshape| is true or the location |
- // changes, moves and reshapes the window and returns true. |
- bool UpdateFrameStyle(bool force_move_and_reshape); |
- |
- // Reshapes the window and updates |mask_region_|. |
- void UpdateWindowShape(); |
- |
- // Calculate the current screen position for the bubble's window (per |
- // |toplevel_window_|'s position as of its most-recent ConfigureNotify event |
- // and |rect_|) and move it there. |
- void MoveWindow(); |
- |
- // Restack the bubble's window directly above |toplevel_window_|. |
- void StackWindow(); |
- |
- // Sets the delegate. |
- void set_delegate(BubbleDelegateGtk* delegate) { delegate_ = delegate; } |
- |
- // Grab (in the X sense) the pointer and keyboard. This is needed to make |
- // sure that we have the input focus. |
- void GrabPointerAndKeyboard(); |
- |
- // Ungrab (in the X sense) the pointer and keyboard. This is needed to make |
- // sure that we release the input focus, e.g. when an extension popup |
- // is inspected by the DevTools. |
- void UngrabPointerAndKeyboard(); |
- |
- CHROMEG_CALLBACK_3(BubbleGtk, gboolean, OnGtkAccelerator, GtkAccelGroup*, |
- GObject*, guint, GdkModifierType); |
- |
- CHROMEGTK_CALLBACK_1(BubbleGtk, gboolean, OnExpose, GdkEventExpose*); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, void, OnSizeAllocate, GtkAllocation*); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, gboolean, OnButtonPress, GdkEventButton*); |
- CHROMEGTK_CALLBACK_0(BubbleGtk, gboolean, OnDestroy); |
- CHROMEGTK_CALLBACK_0(BubbleGtk, void, OnHide); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, gboolean, OnGrabBroken, GdkEventGrabBroken*); |
- CHROMEGTK_CALLBACK_0(BubbleGtk, void, OnForeshadowWidgetHide); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, gboolean, OnToplevelConfigure, |
- GdkEventConfigure*); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, gboolean, OnToplevelUnmap, GdkEvent*); |
- CHROMEGTK_CALLBACK_1(BubbleGtk, void, OnAnchorAllocate, GtkAllocation*); |
- CHROMEGTK_CALLBACK_0(BubbleGtk, void, OnAnchorDestroy); |
- |
- // The caller supplied delegate, can be NULL. |
- BubbleDelegateGtk* delegate_; |
- |
- // Our GtkWindow popup window, we don't technically "own" the widget, since |
- // it deletes us when it is destroyed. |
- GtkWidget* window_; |
- |
- // Provides colors and stuff. |
- GtkThemeService* theme_service_; |
- |
- // The accel group attached to |window_|, to handle closing with escape. |
- GtkAccelGroup* accel_group_; |
- |
- // The window for which we're being shown (and to which |rect_| is relative). |
- // Note that it's possible for |toplevel_window_| to be NULL if the |
- // window is destroyed before this object is destroyed, so it's important |
- // to check for that case. |
- GtkWidget* toplevel_window_; |
- |
- // The widget that we use to relatively position the popup window. |
- GtkWidget* anchor_widget_; |
- |
- // Provides an offset from |anchor_widget_|'s origin for MoveWindow() to |
- // use. |
- gfx::Rect rect_; |
- |
- // The current shape of |window_| (used to test whether clicks fall in it or |
- // not). |
- GdkRegion* mask_region_; |
- |
- // The frame style given to |Show()| that will attempt to be used. It will be |
- // flipped in RTL. If there's not enough screen space for the given |
- // FrameStyle, this may be changed and differ from |actual_frame_style_|. |
- FrameStyle requested_frame_style_; |
- |
- // The currently used frame style given screen size and directionality. |
- FrameStyle actual_frame_style_; |
- |
- // Whether the background should match the system theme, when the system theme |
- // is being used. For example, the bookmark bubble does, but extension popups |
- // do not. |
- bool match_system_theme_; |
- |
- // If true, the popup owns all X input for the duration of its existence. |
- // This will usually be true, the exception being when inspecting extension |
- // popups with dev tools. |
- bool grab_input_; |
- |
- bool closed_by_escape_; |
- |
- content::NotificationRegistrar registrar_; |
- |
- ui::GtkSignalRegistrar signals_; |
- |
- base::WeakPtrFactory<BubbleGtk> weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BubbleGtk); |
-}; |
- |
-#endif // CHROME_BROWSER_UI_GTK_BUBBLE_BUBBLE_GTK_H_ |