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

Unified Diff: views/controls/native_view_host_gtk.cc

Issue 114059: Refactors HWNDView, NativeViewHostGtk and NativeViewHost so that they match t... (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
« no previous file with comments | « views/controls/native_view_host_gtk.h ('k') | views/controls/scrollbar/native_scroll_bar.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/controls/native_view_host_gtk.cc
===================================================================
--- views/controls/native_view_host_gtk.cc (revision 17161)
+++ views/controls/native_view_host_gtk.cc (working copy)
@@ -1,157 +0,0 @@
-// Copyright (c) 2009 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.
-
-#include "views/controls/native_view_host_gtk.h"
-
-#include <gtk/gtk.h>
-
-#include "base/logging.h"
-#include "views/widget/widget_gtk.h"
-
-namespace views {
-
-NativeViewHostGtk::NativeViewHostGtk()
- : NativeViewHost(),
- destroy_signal_id_(0) {
-}
-
-NativeViewHostGtk::~NativeViewHostGtk() {
-}
-
-// static
-View* NativeViewHostGtk::GetViewForNative(GtkWidget* widget) {
- gpointer user_data = g_object_get_data(G_OBJECT(widget), "chrome-view");
- return static_cast<View*>(user_data);
-}
-
-// static
-void NativeViewHostGtk::SetViewForNative(GtkWidget* widget, View* view) {
- g_object_set_data(G_OBJECT(widget), "chrome-view", view);
-}
-
-void NativeViewHostGtk::Attach(GtkWidget* widget) {
- DCHECK(native_view() == NULL);
- DCHECK(widget);
-
- // Adds a mapping between the GtkWidget and us.
- SetViewForNative(widget, this);
-
- destroy_signal_id_ = g_signal_connect(G_OBJECT(widget), "destroy",
- G_CALLBACK(CallDestroy), NULL);
-
- set_native_view(widget);
-
- // First hide the new window. We don't want anything to draw (like sub-hwnd
- // borders), when we change the parent below.
- gtk_widget_hide(widget);
-
- // Set the parent.
- static_cast<WidgetGtk*>(GetWidget())->AddChild(widget);
- Layout();
-
- // TODO: figure out focus.
- // FocusManager::InstallFocusSubclass(
- // hwnd, associated_focus_view()_ ? associated_focus_view() : this);
-}
-
-void NativeViewHostGtk::Detach() {
- DCHECK(native_view());
-
- g_signal_handler_disconnect(G_OBJECT(native_view()), destroy_signal_id_);
- destroy_signal_id_ = 0;
-
- // TODO: focus.
- // FocusManager::UninstallFocusSubclass(native_view());
- set_native_view(NULL);
- set_installed_clip(false);
-}
-
-void NativeViewHostGtk::ViewHierarchyChanged(bool is_add, View* parent,
- View* child) {
- if (!native_view())
- return;
-
- WidgetGtk* parent_widget = static_cast<WidgetGtk*>(GetWidget());
- if (is_add && parent_widget) {
- GtkWidget* widget_parent = gtk_widget_get_parent(native_view());
- GtkWidget* parent_widget_widget = parent_widget->child_widget_parent();
- if (widget_parent != parent_widget_widget) {
- g_object_ref(native_view());
- if (widget_parent)
- gtk_container_remove(GTK_CONTAINER(widget_parent), native_view());
- gtk_container_add(GTK_CONTAINER(parent_widget_widget), native_view());
- g_object_unref(native_view());
- }
- if (IsVisibleInRootView())
- gtk_widget_show(native_view());
- else
- gtk_widget_hide(native_view());
- Layout();
- } else if (!is_add) {
- gtk_widget_hide(native_view());
- if (parent_widget) {
- gtk_container_remove(GTK_CONTAINER(parent_widget->child_widget_parent()),
- native_view());
- }
- }
-}
-
-void NativeViewHostGtk::Focus() {
- NOTIMPLEMENTED();
-}
-
-void NativeViewHostGtk::InstallClip(int x, int y, int w, int h) {
- DCHECK(w > 0 && h > 0);
-
- bool has_window = (GTK_WIDGET_FLAGS(native_view()) & GTK_NO_WINDOW) == 0;
- if (!has_window) {
- // Clip is only supported on GtkWidgets that have windows. If this becomes
- // an issue (as it may be in the options dialog) we'll need to wrap the
- // widget in a GtkFixed with a window. We have to do this as not all widgets
- // support turning on GTK_NO_WINDOW (for example, buttons don't appear to
- // draw anything when they have a window).
- NOTREACHED();
- return;
- }
- DCHECK(has_window);
- // Unset the current region.
- gdk_window_shape_combine_region(native_view()->window, NULL, 0, 0);
-
- // Set a new region.
- // TODO: using shapes is a bit expensive. Should investigated if there is
- // another more efficient way to accomplish this.
- GdkRectangle clip_rect = { x, y, w, h };
- GdkRegion* clip_region = gdk_region_rectangle(&clip_rect);
- gdk_window_shape_combine_region(native_view()->window, clip_region, x, y);
- gdk_region_destroy(clip_region);
-}
-
-void NativeViewHostGtk::UninstallClip() {
- gtk_widget_shape_combine_mask(native_view(), NULL, 0, 0);
-}
-
-void NativeViewHostGtk::ShowWidget(int x, int y, int w, int h) {
- WidgetGtk* parent = static_cast<WidgetGtk*>(GetWidget());
- parent->PositionChild(native_view(), x, y, w, h);
- gtk_widget_show(native_view());
-}
-
-void NativeViewHostGtk::HideWidget() {
- gtk_widget_hide(native_view());
-}
-
-void NativeViewHostGtk::OnDestroy() {
- set_native_view(NULL);
-}
-
-// static
-void NativeViewHostGtk::CallDestroy(GtkObject* object) {
- View* view = GetViewForNative(GTK_WIDGET(object));
- if (!view)
- return;
-
- return static_cast<NativeViewHostGtk*>(view)->OnDestroy();
-}
-
-} // namespace views
« no previous file with comments | « views/controls/native_view_host_gtk.h ('k') | views/controls/scrollbar/native_scroll_bar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698