Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1031)

Unified Diff: chrome/browser/gtk/info_bubble_gtk.h

Issue 332022: GTK: Fix browser action bubble arrow positions. (Closed)
Patch Set: update comment Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/first_run_bubble.cc ('k') | chrome/browser/gtk/info_bubble_gtk.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/info_bubble_gtk.h
diff --git a/chrome/browser/gtk/info_bubble_gtk.h b/chrome/browser/gtk/info_bubble_gtk.h
index 876cb9ceedb9c07acec6a27acce3e565160540dc..0632e9d4e3229f11fbbccd1940edcab4a1ae94e4 100644
--- a/chrome/browser/gtk/info_bubble_gtk.h
+++ b/chrome/browser/gtk/info_bubble_gtk.h
@@ -39,16 +39,24 @@ class InfoBubbleGtkDelegate {
class InfoBubbleGtk : public NotificationObserver {
public:
+ // Where should the arrow be placed relative to the bubble?
+ enum ArrowLocationGtk {
+ // TODO(derat): Support placing arrows on the bottoms of the bubbles.
+ ARROW_LOCATION_TOP_LEFT,
+ ARROW_LOCATION_TOP_RIGHT,
+ };
+
// Show an InfoBubble, pointing at the area |rect| (in coordinates relative to
// |toplevel_window|'s origin). An info bubble will try to fit on the screen,
// so it can point to any edge of |rect|. The bubble will host the |content|
- // widget. 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.
- // TODO(derat): This implementation doesn't try to position itself onscreen.
+ // widget. Its arrow will be drawn at |arrow_location| if possible. 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 InfoBubbleGtk* Show(GtkWindow* toplevel_window,
const gfx::Rect& rect,
GtkWidget* content,
+ ArrowLocationGtk arrow_location,
GtkThemeProvider* provider,
InfoBubbleGtkDelegate* delegate);
@@ -72,13 +80,6 @@ class InfoBubbleGtk : public NotificationObserver {
void HandlePointerAndKeyboardUngrabbedByContent();
private:
- // Where should the arrow be placed relative to the bubble?
- enum ArrowLocationGtk {
- // TODO(derat): Support placing arrows on the bottoms of the bubbles.
- ARROW_LOCATION_TOP_LEFT,
- ARROW_LOCATION_TOP_RIGHT,
- };
-
enum FrameType {
FRAME_MASK,
FRAME_STROKE,
@@ -90,7 +91,8 @@ class InfoBubbleGtk : public NotificationObserver {
// Creates the InfoBubble.
void Init(GtkWindow* toplevel_window,
const gfx::Rect& rect,
- GtkWidget* content);
+ GtkWidget* content,
+ ArrowLocationGtk arrow_location);
// Make the points for our polygon frame, either for fill (the mask), or for
// when we stroke the border.
@@ -101,16 +103,17 @@ class InfoBubbleGtk : public NotificationObserver {
FrameType type);
// Get the location where the arrow should be placed (which is a function of
- // whether the user's language is LTR/RTL and of the direction that the bubble
- // should be facing to fit onscreen). |arrow_x| is the X component in screen
+ // the preferred location and of the direction that the bubble should be
+ // facing to fit onscreen). |arrow_x| is the X component in screen
// coordinates of the point at which the bubble's arrow should be aimed, and
// |width| is the bubble's width.
- static ArrowLocationGtk GetArrowLocation(int arrow_x, int width);
+ static ArrowLocationGtk GetArrowLocation(
+ ArrowLocationGtk preferred_location, int arrow_x, int width);
// Updates |arrow_location_| based on the toplevel window's current position
- // and the bubble's size. If the location changes, moves and reshapes the
- // window and returns true.
- bool UpdateArrowLocation();
+ // 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 UpdateArrowLocation(bool force_move_and_reshape);
// Reshapes the window and updates |mask_region_|.
void UpdateWindowShape();
@@ -218,8 +221,10 @@ class InfoBubbleGtk : public NotificationObserver {
// not).
GdkRegion* mask_region_;
- // Where should the arrow be drawn relative to the bubble?
- ArrowLocationGtk arrow_location_;
+ // Where would we prefer for the arrow be drawn relative to the bubble, and
+ // where is it currently drawn?
+ ArrowLocationGtk preferred_arrow_location_;
+ ArrowLocationGtk current_arrow_location_;
NotificationRegistrar registrar_;
« no previous file with comments | « chrome/browser/gtk/first_run_bubble.cc ('k') | chrome/browser/gtk/info_bubble_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698