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

Unified Diff: chrome/views/widget/widget_gtk.h

Issue 113123: Fleshes out WidgetGTK and WindowGTK a bit more. This is still vary... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 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
Index: chrome/views/widget/widget_gtk.h
===================================================================
--- chrome/views/widget/widget_gtk.h (revision 15583)
+++ chrome/views/widget/widget_gtk.h (working copy)
@@ -17,22 +17,39 @@
namespace views {
class View;
+class WindowGtk;
+// Widget implementation for GTK.
class WidgetGtk : public Widget {
public:
- static WidgetGtk* Construct() {
- // This isn't used, but exists to force WidgetGtk to be instantiable.
- return new WidgetGtk;
- }
+ // Type of widget.
+ enum Type {
+ // Used for popup type windows (bubbles, menus ...).
+ TYPE_POPUP,
- WidgetGtk();
+ // A top level window.
+ TYPE_WINDOW,
+
+ // A child widget.
+ TYPE_CHILD
+ };
+
+ explicit WidgetGtk(Type type);
virtual ~WidgetGtk();
- // Initializes this widget and returns the gtk drawing area for the caller to
- // add to its hierarchy. (We can't pass in the parent to this method because
- // there are no standard adding semantics in gtk...)
+ // Initializes this widget.
void Init(const gfx::Rect& bounds, bool has_own_focus_manager);
+ void AddChild(GtkWidget* child);
+ void RemoveChild(GtkWidget* child);
+
+ // Positions a child GtkWidget at the specified location and bounds.
+ void PositionChild(GtkWidget* child, int x, int y, int w, int h);
+
+ // Parent GtkWidget all children are added to. This is not necessarily
+ // the same as returned by GetNativeView.
+ GtkWidget* child_widget_parent() const { return child_widget_parent_; }
+
virtual void SetContentsView(View* view);
// Overridden from Widget:
@@ -44,10 +61,12 @@
virtual bool IsActive() const;
virtual TooltipManager* GetTooltipManager();
virtual bool GetAccelerator(int cmd_id, Accelerator* accelerator);
+ virtual Window* GetWindow();
+ virtual const Window* GetWindow() const;
protected:
- virtual void OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) {}
- virtual gboolean OnPaint(GtkWidget* widget, GdkEventExpose* event);
+ virtual void OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation);
+ virtual void OnPaint(GtkWidget* widget, GdkEventExpose* event);
virtual gboolean OnEnterNotify(GtkWidget* widget, GdkEventCrossing* event);
virtual gboolean OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event);
virtual gboolean OnMotionNotify(GtkWidget* widget, GdkEventMotion* event);
@@ -69,6 +88,10 @@
return false;
}
+ // Sets and retrieves the WidgetGtk in the userdata section of the widget.
+ static WindowGtk* GetWindowForNative(GtkWidget* widget);
+ static void SetWindowForNative(GtkWidget* widget, WindowGtk* window);
+
private:
virtual RootView* CreateRootView();
@@ -99,8 +122,18 @@
static gboolean CallVisibilityNotify(GtkWidget* widget,
GdkEventVisibility* event);
- // Our native view.
+ static Window* GetWindowImpl(GtkWidget* widget);
+
+ // Creates the GtkWidget.
+ void CreateGtkWidget();
+
+ const Type type_;
+
+ // Our native views. If we're a window/popup, then widget_ is the window and
+ // child_widget_parent_ is a GtkFixed. If we're not a window/popup, then
+ // widget_ and child_widget_parent_ are a GtkFixed.
GtkWidget* widget_;
+ GtkWidget* child_widget_parent_;
// The root of the View hierarchy attached to this window.
scoped_ptr<RootView> root_view_;
@@ -118,6 +151,8 @@
// Coordinates of the last mouse move event, in screen coordinates.
int last_mouse_move_x_;
int last_mouse_move_y_;
+
+ DISALLOW_COPY_AND_ASSIGN(WidgetGtk);
};
} // namespace views

Powered by Google App Engine
This is Rietveld 408576698