| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/ui/gtk/apps/native_app_window_gtk.h" | 5 #include "chrome/browser/ui/gtk/apps/native_app_window_gtk.h" |
| 6 | 6 |
| 7 #include <gdk/gdkx.h> | 7 #include <gdk/gdkx.h> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/message_loop/message_pump_gtk.h" | 10 #include "base/message_loop/message_pump_gtk.h" |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 gtk_window_util::UpdateWindowPosition(this, &bounds_, &restored_bounds_); | 448 gtk_window_util::UpdateWindowPosition(this, &bounds_, &restored_bounds_); |
| 449 shell_window_->OnNativeWindowChanged(); | 449 shell_window_->OnNativeWindowChanged(); |
| 450 | 450 |
| 451 FOR_EACH_OBSERVER(web_modal::ModalDialogHostObserver, | 451 FOR_EACH_OBSERVER(web_modal::ModalDialogHostObserver, |
| 452 observer_list_, | 452 observer_list_, |
| 453 OnPositionRequiresUpdate()); | 453 OnPositionRequiresUpdate()); |
| 454 | 454 |
| 455 // Fullscreen of non-resizable windows requires them to be made resizable | 455 // Fullscreen of non-resizable windows requires them to be made resizable |
| 456 // first. After that takes effect and OnConfigure is called we transition | 456 // first. After that takes effect and OnConfigure is called we transition |
| 457 // to fullscreen. | 457 // to fullscreen. |
| 458 if (!IsFullscreen() && IsFullscreenOrPending()) { | 458 if (!IsFullscreen() && content_thinks_its_fullscreen_) { |
| 459 gtk_window_fullscreen(window_); | 459 gtk_window_fullscreen(window_); |
| 460 } | 460 } |
| 461 | 461 |
| 462 // maximize_pending_ is the boolean that lets us know that the window is in | 462 // maximize_pending_ is the boolean that lets us know that the window is in |
| 463 // the process of being maximized but was set as not resizable. | 463 // the process of being maximized but was set as not resizable. |
| 464 // This function will be called twice during the maximization process: | 464 // This function will be called twice during the maximization process: |
| 465 // 1. gtk_window_maximize() is called to maximize the window; | 465 // 1. gtk_window_maximize() is called to maximize the window; |
| 466 // 2. gtk_set_resizable(, FALSE) is called to make the window no longer | 466 // 2. gtk_set_resizable(, FALSE) is called to make the window no longer |
| 467 // resizable. | 467 // resizable. |
| 468 // gtk_window_maximize() will cause ::OnConfigureDebounced to be called | 468 // gtk_window_maximize() will cause ::OnConfigureDebounced to be called |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 if (has_hit_titlebar || has_hit_edge) | 586 if (has_hit_titlebar || has_hit_edge) |
| 587 gdk_window_lower(gdk_window); | 587 gdk_window_lower(gdk_window); |
| 588 return TRUE; | 588 return TRUE; |
| 589 } | 589 } |
| 590 | 590 |
| 591 return FALSE; | 591 return FALSE; |
| 592 } | 592 } |
| 593 | 593 |
| 594 // NativeAppWindow implementation: | 594 // NativeAppWindow implementation: |
| 595 | 595 |
| 596 void NativeAppWindowGtk::SetFullscreen(bool fullscreen) { | 596 void NativeAppWindowGtk::SetFullscreen(ShellWindow::FullscreenType type) { |
| 597 bool fullscreen = (type != ShellWindow::FULLSCREEN_TYPE_NONE); |
| 597 content_thinks_its_fullscreen_ = fullscreen; | 598 content_thinks_its_fullscreen_ = fullscreen; |
| 598 if (fullscreen){ | 599 if (fullscreen) { |
| 599 if (resizable_) { | 600 if (resizable_) { |
| 600 gtk_window_fullscreen(window_); | 601 gtk_window_fullscreen(window_); |
| 601 } else { | 602 } else { |
| 602 // We must first make the window resizable. That won't take effect | 603 // We must first make the window resizable. That won't take effect |
| 603 // immediately, so OnConfigureDebounced completes the fullscreen call. | 604 // immediately, so OnConfigureDebounced completes the fullscreen call. |
| 604 gtk_window_set_resizable(window_, TRUE); | 605 gtk_window_set_resizable(window_, TRUE); |
| 605 } | 606 } |
| 606 } else { | 607 } else { |
| 607 gtk_window_unfullscreen(window_); | 608 gtk_window_unfullscreen(window_); |
| 608 if (!resizable_) | 609 if (!resizable_) |
| 609 gtk_window_set_resizable(window_, FALSE); | 610 gtk_window_set_resizable(window_, FALSE); |
| 610 } | 611 } |
| 611 } | 612 } |
| 612 | 613 |
| 613 bool NativeAppWindowGtk::IsFullscreenOrPending() const { | 614 bool NativeAppWindowGtk::SupportsImmersiveFullscreen() const { |
| 614 // |content_thinks_its_fullscreen_| is used when transitioning, and when | 615 return false; |
| 615 // the state change will not be made for some time. However, it is possible | |
| 616 // for a state update to be made before the final fullscreen state comes. | |
| 617 // In that case, |content_thinks_its_fullscreen_| will be cleared, but we | |
| 618 // will fall back to |IsFullscreen| which will soon have the correct state. | |
| 619 return content_thinks_its_fullscreen_ || IsFullscreen(); | |
| 620 } | 616 } |
| 621 | 617 |
| 622 bool NativeAppWindowGtk::IsDetached() const { | 618 bool NativeAppWindowGtk::IsDetached() const { |
| 623 return false; | 619 return false; |
| 624 } | 620 } |
| 625 | 621 |
| 626 void NativeAppWindowGtk::UpdateWindowIcon() { | 622 void NativeAppWindowGtk::UpdateWindowIcon() { |
| 627 Profile* profile = shell_window_->profile(); | 623 Profile* profile = shell_window_->profile(); |
| 628 gfx::Image app_icon = shell_window_->app_icon(); | 624 gfx::Image app_icon = shell_window_->app_icon(); |
| 629 if (!app_icon.IsEmpty()) | 625 if (!app_icon.IsEmpty()) |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 hints_mask |= GDK_HINT_MAX_SIZE; | 707 hints_mask |= GDK_HINT_MAX_SIZE; |
| 712 } | 708 } |
| 713 if (hints_mask) { | 709 if (hints_mask) { |
| 714 gtk_window_set_geometry_hints( | 710 gtk_window_set_geometry_hints( |
| 715 window_, | 711 window_, |
| 716 GTK_WIDGET(window_), | 712 GTK_WIDGET(window_), |
| 717 &hints, | 713 &hints, |
| 718 static_cast<GdkWindowHints>(hints_mask)); | 714 static_cast<GdkWindowHints>(hints_mask)); |
| 719 } | 715 } |
| 720 } | 716 } |
| OLD | NEW |