| Index: views/window/native_window_gtk.cc
|
| ===================================================================
|
| --- views/window/native_window_gtk.cc (revision 88529)
|
| +++ views/window/native_window_gtk.cc (working copy)
|
| @@ -6,7 +6,6 @@
|
|
|
| #include "base/i18n/rtl.h"
|
| #include "base/utf_string_conversions.h"
|
| -#include "ui/gfx/gtk_util.h"
|
| #include "ui/gfx/path.h"
|
| #include "ui/gfx/rect.h"
|
| #include "views/events/event.h"
|
| @@ -15,71 +14,11 @@
|
| #include "views/window/non_client_view.h"
|
| #include "views/window/window_delegate.h"
|
|
|
| -namespace {
|
| -
|
| -// Converts a Windows-style hit test result code into a GDK window edge.
|
| -GdkWindowEdge HitTestCodeToGDKWindowEdge(int hittest_code) {
|
| - switch (hittest_code) {
|
| - case HTBOTTOM:
|
| - return GDK_WINDOW_EDGE_SOUTH;
|
| - case HTBOTTOMLEFT:
|
| - return GDK_WINDOW_EDGE_SOUTH_WEST;
|
| - case HTBOTTOMRIGHT:
|
| - case HTGROWBOX:
|
| - return GDK_WINDOW_EDGE_SOUTH_EAST;
|
| - case HTLEFT:
|
| - return GDK_WINDOW_EDGE_WEST;
|
| - case HTRIGHT:
|
| - return GDK_WINDOW_EDGE_EAST;
|
| - case HTTOP:
|
| - return GDK_WINDOW_EDGE_NORTH;
|
| - case HTTOPLEFT:
|
| - return GDK_WINDOW_EDGE_NORTH_WEST;
|
| - case HTTOPRIGHT:
|
| - return GDK_WINDOW_EDGE_NORTH_EAST;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - // Default to something defaultish.
|
| - return HitTestCodeToGDKWindowEdge(HTGROWBOX);
|
| -}
|
| -
|
| -// Converts a Windows-style hit test result code into a GDK cursor type.
|
| -GdkCursorType HitTestCodeToGdkCursorType(int hittest_code) {
|
| - switch (hittest_code) {
|
| - case HTBOTTOM:
|
| - return GDK_BOTTOM_SIDE;
|
| - case HTBOTTOMLEFT:
|
| - return GDK_BOTTOM_LEFT_CORNER;
|
| - case HTBOTTOMRIGHT:
|
| - case HTGROWBOX:
|
| - return GDK_BOTTOM_RIGHT_CORNER;
|
| - case HTLEFT:
|
| - return GDK_LEFT_SIDE;
|
| - case HTRIGHT:
|
| - return GDK_RIGHT_SIDE;
|
| - case HTTOP:
|
| - return GDK_TOP_SIDE;
|
| - case HTTOPLEFT:
|
| - return GDK_TOP_LEFT_CORNER;
|
| - case HTTOPRIGHT:
|
| - return GDK_TOP_RIGHT_CORNER;
|
| - default:
|
| - break;
|
| - }
|
| - // Default to something defaultish.
|
| - return GDK_LEFT_PTR;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| namespace views {
|
|
|
| NativeWindowGtk::NativeWindowGtk(internal::NativeWindowDelegate* delegate)
|
| : NativeWidgetGtk(delegate->AsNativeWidgetDelegate()),
|
| - delegate_(delegate),
|
| - window_closed_(false) {
|
| + delegate_(delegate) {
|
| is_window_ = true;
|
| }
|
|
|
| @@ -87,114 +26,6 @@
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// NativeWindowGtk, NativeWidgetGtk overrides:
|
| -
|
| -gboolean NativeWindowGtk::OnButtonPress(GtkWidget* widget,
|
| - GdkEventButton* event) {
|
| - GdkEventButton transformed_event = *event;
|
| - MouseEvent mouse_event(TransformEvent(&transformed_event));
|
| -
|
| - int hittest_code =
|
| - GetWindow()->non_client_view()->NonClientHitTest(mouse_event.location());
|
| - switch (hittest_code) {
|
| - case HTCAPTION: {
|
| - // Start dragging if the mouse event is a single click and *not* a right
|
| - // click. If it is a right click, then pass it through to
|
| - // NativeWidgetGtk::OnButtonPress so that View class can show ContextMenu
|
| - // upon a mouse release event. We only start drag on single clicks as we
|
| - // get a crash in Gtk on double/triple clicks.
|
| - if (event->type == GDK_BUTTON_PRESS &&
|
| - !mouse_event.IsOnlyRightMouseButton()) {
|
| - gfx::Point screen_point(event->x, event->y);
|
| - View::ConvertPointToScreen(GetWindow()->GetRootView(), &screen_point);
|
| - gtk_window_begin_move_drag(GetNativeWindow(), event->button,
|
| - screen_point.x(), screen_point.y(),
|
| - event->time);
|
| - return TRUE;
|
| - }
|
| - break;
|
| - }
|
| - case HTBOTTOM:
|
| - case HTBOTTOMLEFT:
|
| - case HTBOTTOMRIGHT:
|
| - case HTGROWBOX:
|
| - case HTLEFT:
|
| - case HTRIGHT:
|
| - case HTTOP:
|
| - case HTTOPLEFT:
|
| - case HTTOPRIGHT: {
|
| - gfx::Point screen_point(event->x, event->y);
|
| - View::ConvertPointToScreen(GetWindow()->GetRootView(), &screen_point);
|
| - // TODO(beng): figure out how to get a good minimum size.
|
| - gtk_widget_set_size_request(GetNativeView(), 100, 100);
|
| - gtk_window_begin_resize_drag(GetNativeWindow(),
|
| - HitTestCodeToGDKWindowEdge(hittest_code),
|
| - event->button, screen_point.x(),
|
| - screen_point.y(), event->time);
|
| - return TRUE;
|
| - }
|
| - default:
|
| - // Everything else falls into standard client event handling...
|
| - break;
|
| - }
|
| - return NativeWidgetGtk::OnButtonPress(widget, event);
|
| -}
|
| -
|
| -gboolean NativeWindowGtk::OnConfigureEvent(GtkWidget* widget,
|
| - GdkEventConfigure* event) {
|
| - SaveWindowPosition();
|
| - return FALSE;
|
| -}
|
| -
|
| -gboolean NativeWindowGtk::OnMotionNotify(GtkWidget* widget,
|
| - GdkEventMotion* event) {
|
| - GdkEventMotion transformed_event = *event;
|
| - TransformEvent(&transformed_event);
|
| - gfx::Point translated_location(transformed_event.x, transformed_event.y);
|
| -
|
| - // Update the cursor for the screen edge.
|
| - int hittest_code =
|
| - GetWindow()->non_client_view()->NonClientHitTest(translated_location);
|
| - if (hittest_code != HTCLIENT) {
|
| - GdkCursorType cursor_type = HitTestCodeToGdkCursorType(hittest_code);
|
| - gdk_window_set_cursor(widget->window, gfx::GetCursor(cursor_type));
|
| - }
|
| -
|
| - return NativeWidgetGtk::OnMotionNotify(widget, event);
|
| -}
|
| -
|
| -void NativeWindowGtk::OnSizeAllocate(GtkWidget* widget,
|
| - GtkAllocation* allocation) {
|
| - NativeWidgetGtk::OnSizeAllocate(widget, allocation);
|
| -
|
| - // The Window's NonClientView may provide a custom shape for the Window.
|
| - gfx::Path window_mask;
|
| - GetWindow()->non_client_view()->GetWindowMask(gfx::Size(allocation->width,
|
| - allocation->height),
|
| - &window_mask);
|
| - GdkRegion* mask_region = window_mask.CreateNativeRegion();
|
| - gdk_window_shape_combine_region(GetNativeView()->window, mask_region, 0, 0);
|
| - if (mask_region)
|
| - gdk_region_destroy(mask_region);
|
| -
|
| - SaveWindowPosition();
|
| -}
|
| -
|
| -gboolean NativeWindowGtk::OnLeaveNotify(GtkWidget* widget,
|
| - GdkEventCrossing* event) {
|
| - gdk_window_set_cursor(widget->window, gfx::GetCursor(GDK_LEFT_PTR));
|
| -
|
| - return NativeWidgetGtk::OnLeaveNotify(widget, event);
|
| -}
|
| -
|
| -void NativeWindowGtk::InitNativeWidget(const Widget::InitParams& params) {
|
| - NativeWidgetGtk::InitNativeWidget(params);
|
| -
|
| - g_signal_connect(G_OBJECT(GetNativeWindow()), "configure-event",
|
| - G_CALLBACK(CallConfigureEvent), this);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| // NativeWindowGtk, NativeWindow implementation:
|
|
|
| NativeWidget* NativeWindowGtk::AsNativeWidget() {
|
| @@ -205,10 +36,6 @@
|
| return this;
|
| }
|
|
|
| -void NativeWindowGtk::BecomeModal() {
|
| - gtk_window_set_modal(GetNativeWindow(), true);
|
| -}
|
| -
|
| Window* NativeWindowGtk::GetWindow() {
|
| return delegate_->AsWindow();
|
| }
|
| @@ -218,36 +45,8 @@
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// NativeWindowGtk, NativeWidgetGtk overrides:
|
| -
|
| -gboolean NativeWindowGtk::OnWindowStateEvent(GtkWidget* widget,
|
| - GdkEventWindowState* event) {
|
| - if (!(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN))
|
| - SaveWindowPosition();
|
| - return NativeWidgetGtk::OnWindowStateEvent(widget, event);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| // NativeWindowGtk, private:
|
|
|
| -// static
|
| -gboolean NativeWindowGtk::CallConfigureEvent(GtkWidget* widget,
|
| - GdkEventConfigure* event,
|
| - NativeWindowGtk* window_gtk) {
|
| - return window_gtk->OnConfigureEvent(widget, event);
|
| -}
|
| -
|
| -void NativeWindowGtk::SaveWindowPosition() {
|
| - // The delegate may have gone away on us.
|
| - if (!GetWindow()->window_delegate())
|
| - return;
|
| -
|
| - bool maximized = window_state_ & GDK_WINDOW_STATE_MAXIMIZED;
|
| - GetWindow()->window_delegate()->SaveWindowPlacement(
|
| - GetWidget()->GetWindowScreenBounds(),
|
| - maximized);
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // NativeWindow, public:
|
|
|
|
|