| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/widget/native_widget_gtk.h" | 5 #include "views/widget/native_widget_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
| 8 #include <gdk/gdkx.h> | 8 #include <gdk/gdkx.h> |
| 9 #include <X11/extensions/shape.h> | 9 #include <X11/extensions/shape.h> |
| 10 #include <X11/Xatom.h> | 10 #include <X11/Xatom.h> |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 //////////////////////////////////////////////////////////////////////////////// | 282 //////////////////////////////////////////////////////////////////////////////// |
| 283 // NativeWidgetGtk, public: | 283 // NativeWidgetGtk, public: |
| 284 | 284 |
| 285 NativeWidgetGtk::NativeWidgetGtk(internal::NativeWidgetDelegate* delegate) | 285 NativeWidgetGtk::NativeWidgetGtk(internal::NativeWidgetDelegate* delegate) |
| 286 : is_window_(false), | 286 : is_window_(false), |
| 287 delegate_(delegate), | 287 delegate_(delegate), |
| 288 widget_(NULL), | 288 widget_(NULL), |
| 289 window_contents_(NULL), | 289 window_contents_(NULL), |
| 290 child_(false), | 290 child_(false), |
| 291 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), | 291 ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), |
| 292 delete_on_destroy_(true), | 292 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), |
| 293 transparent_(false), | 293 transparent_(false), |
| 294 ignore_events_(false), | 294 ignore_events_(false), |
| 295 ignore_drag_leave_(false), | 295 ignore_drag_leave_(false), |
| 296 opacity_(255), | 296 opacity_(255), |
| 297 drag_data_(NULL), | 297 drag_data_(NULL), |
| 298 is_active_(false), | 298 is_active_(false), |
| 299 transient_to_parent_(false), | 299 transient_to_parent_(false), |
| 300 got_initial_focus_in_(false), | 300 got_initial_focus_in_(false), |
| 301 has_focus_(false), | 301 has_focus_(false), |
| 302 focus_on_creation_(true), | 302 focus_on_creation_(true), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 316 MessageLoopForUI* loop = MessageLoopForUI::current(); | 316 MessageLoopForUI* loop = MessageLoopForUI::current(); |
| 317 if (loop) | 317 if (loop) |
| 318 loop->AddObserver(DropObserver::GetInstance()); | 318 loop->AddObserver(DropObserver::GetInstance()); |
| 319 } | 319 } |
| 320 } | 320 } |
| 321 | 321 |
| 322 NativeWidgetGtk::~NativeWidgetGtk() { | 322 NativeWidgetGtk::~NativeWidgetGtk() { |
| 323 // We need to delete the input method before calling DestroyRootView(), | 323 // We need to delete the input method before calling DestroyRootView(), |
| 324 // because it'll set focus_manager_ to NULL. | 324 // because it'll set focus_manager_ to NULL. |
| 325 input_method_.reset(); | 325 input_method_.reset(); |
| 326 DCHECK(delete_on_destroy_ || widget_ == NULL); | 326 DCHECK(ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET || |
| 327 if (delete_on_destroy_) | 327 widget_ == NULL); |
| 328 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) |
| 328 delete delegate_; | 329 delete delegate_; |
| 329 // TODO(altimofeev): investigate why OnDestroy could not be called. | 330 // TODO(altimofeev): investigate why OnDestroy could not be called. |
| 330 if (!child_) | 331 if (!child_) |
| 331 ActiveWindowWatcherX::RemoveObserver(this); | 332 ActiveWindowWatcherX::RemoveObserver(this); |
| 332 } | 333 } |
| 333 | 334 |
| 334 GtkWindow* NativeWidgetGtk::GetTransientParent() const { | 335 GtkWindow* NativeWidgetGtk::GetTransientParent() const { |
| 335 return (!child_ && widget_) ? | 336 return (!child_ && widget_) ? |
| 336 gtk_window_get_transient_for(GTK_WINDOW(widget_)) : NULL; | 337 gtk_window_get_transient_for(GTK_WINDOW(widget_)) : NULL; |
| 337 } | 338 } |
| (...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1327 HandleGtkGrabBroke(); | 1328 HandleGtkGrabBroke(); |
| 1328 } | 1329 } |
| 1329 | 1330 |
| 1330 void NativeWidgetGtk::OnDestroy(GtkWidget* object) { | 1331 void NativeWidgetGtk::OnDestroy(GtkWidget* object) { |
| 1331 if (!child_) | 1332 if (!child_) |
| 1332 ActiveWindowWatcherX::RemoveObserver(this); | 1333 ActiveWindowWatcherX::RemoveObserver(this); |
| 1333 // Note that this handler is hooked to GtkObject::destroy. | 1334 // Note that this handler is hooked to GtkObject::destroy. |
| 1334 // NULL out pointers here since we might still be in an observer list | 1335 // NULL out pointers here since we might still be in an observer list |
| 1335 // until delstion happens. | 1336 // until delstion happens. |
| 1336 widget_ = window_contents_ = NULL; | 1337 widget_ = window_contents_ = NULL; |
| 1337 if (delete_on_destroy_) { | 1338 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) { |
| 1338 // Delays the deletion of this NativeWidgetGtk as we want its children to | 1339 // Delays the deletion of this NativeWidgetGtk as we want its children to |
| 1339 // have access to it when destroyed. | 1340 // have access to it when destroyed. |
| 1340 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 1341 MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 1341 } | 1342 } |
| 1342 } | 1343 } |
| 1343 | 1344 |
| 1344 void NativeWidgetGtk::OnShow(GtkWidget* widget) { | 1345 void NativeWidgetGtk::OnShow(GtkWidget* widget) { |
| 1345 } | 1346 } |
| 1346 | 1347 |
| 1347 void NativeWidgetGtk::OnMap(GtkWidget* widget) { | 1348 void NativeWidgetGtk::OnMap(GtkWidget* widget) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 handled = HandleKeyboardEvent(key); | 1409 handled = HandleKeyboardEvent(key); |
| 1409 | 1410 |
| 1410 // Dispatch the key event for bindings processing. | 1411 // Dispatch the key event for bindings processing. |
| 1411 if (!handled && event && GTK_IS_WINDOW(widget_)) | 1412 if (!handled && event && GTK_IS_WINDOW(widget_)) |
| 1412 gtk_bindings_activate_event(GTK_OBJECT(widget_), event); | 1413 gtk_bindings_activate_event(GTK_OBJECT(widget_), event); |
| 1413 } | 1414 } |
| 1414 | 1415 |
| 1415 void NativeWidgetGtk::SetInitParams(const Widget::InitParams& params) { | 1416 void NativeWidgetGtk::SetInitParams(const Widget::InitParams& params) { |
| 1416 DCHECK(!GetNativeView()); | 1417 DCHECK(!GetNativeView()); |
| 1417 | 1418 |
| 1418 delete_on_destroy_ = params.delete_on_destroy; | 1419 ownership_ = params.ownership; |
| 1419 child_ = params.child; | 1420 child_ = params.child; |
| 1420 | 1421 |
| 1421 // TODO(beng): The secondary checks here actually obviate the need for | 1422 // TODO(beng): The secondary checks here actually obviate the need for |
| 1422 // params.transient but that's only because NativeWidgetGtk | 1423 // params.transient but that's only because NativeWidgetGtk |
| 1423 // considers any top-level widget to be a transient widget. We | 1424 // considers any top-level widget to be a transient widget. We |
| 1424 // will probably want to ammend this assumption at some point. | 1425 // will probably want to ammend this assumption at some point. |
| 1425 if (params.transient || params.parent || params.parent_widget) | 1426 if (params.transient || params.parent || params.parent_widget) |
| 1426 transient_to_parent_ = true; | 1427 transient_to_parent_ = true; |
| 1427 if (params.transparent) | 1428 if (params.transparent) |
| 1428 MakeTransparent(); | 1429 MakeTransparent(); |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 | 1806 |
| 1806 // And now, notify them that they have a brand new parent. | 1807 // And now, notify them that they have a brand new parent. |
| 1807 for (NativeWidgets::iterator it = widgets.begin(); | 1808 for (NativeWidgets::iterator it = widgets.begin(); |
| 1808 it != widgets.end(); ++it) { | 1809 it != widgets.end(); ++it) { |
| 1809 (*it)->GetWidget()->NotifyNativeViewHierarchyChanged(true, | 1810 (*it)->GetWidget()->NotifyNativeViewHierarchyChanged(true, |
| 1810 new_parent); | 1811 new_parent); |
| 1811 } | 1812 } |
| 1812 } | 1813 } |
| 1813 | 1814 |
| 1814 } // namespace views | 1815 } // namespace views |
| OLD | NEW |