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

Unified Diff: chrome/browser/ui/gtk/panels/panel_stack_window_gtk.cc

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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/browser/ui/gtk/panels/panel_stack_window_gtk.cc
diff --git a/chrome/browser/ui/gtk/panels/panel_stack_window_gtk.cc b/chrome/browser/ui/gtk/panels/panel_stack_window_gtk.cc
deleted file mode 100644
index 09ff84d9b90416c5d0ac14b379ee8998b1252374..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/gtk/panels/panel_stack_window_gtk.cc
+++ /dev/null
@@ -1,255 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/ui/gtk/panels/panel_stack_window_gtk.h"
-
-#include <gdk/gdkkeysyms.h>
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/ui/panels/panel.h"
-#include "chrome/browser/ui/panels/stacked_panel_collection.h"
-#include "ui/base/x/active_window_watcher_x.h"
-
-// static
-NativePanelStackWindow* NativePanelStackWindow::Create(
- NativePanelStackWindowDelegate* delegate) {
- return new PanelStackWindowGtk(delegate);
-}
-
-PanelStackWindowGtk::PanelStackWindowGtk(
- NativePanelStackWindowDelegate* delegate)
- : delegate_(delegate),
- window_(NULL),
- is_minimized_(false),
- bounds_updates_started_(false) {
- ui::ActiveWindowWatcherX::AddObserver(this);
-}
-
-PanelStackWindowGtk::~PanelStackWindowGtk() {
- ui::ActiveWindowWatcherX::RemoveObserver(this);
-}
-
-void PanelStackWindowGtk::Close() {
- if (!window_)
- return;
- gtk_widget_destroy(GTK_WIDGET(window_));
- window_ = NULL;
-}
-
-void PanelStackWindowGtk::AddPanel(Panel* panel) {
- panels_.push_back(panel);
-
- EnsureWindowCreated();
- SetStackWindowBounds();
-
- // The panel being stacked should not appear on the taskbar.
- gtk_window_set_skip_taskbar_hint(panel->GetNativeWindow(), true);
-}
-
-void PanelStackWindowGtk::RemovePanel(Panel* panel) {
- panels_.remove(panel);
-
- SetStackWindowBounds();
-
- // The panel being unstacked should re-appear on the taskbar.
- // Note that the underlying gtk window is gone when the panel is being
- // closed.
- GtkWindow* gtk_window = panel->GetNativeWindow();
- if (gtk_window)
- gtk_window_set_skip_taskbar_hint(gtk_window, false);
-}
-
-void PanelStackWindowGtk::MergeWith(NativePanelStackWindow* another) {
- PanelStackWindowGtk* another_stack =
- static_cast<PanelStackWindowGtk*>(another);
- for (Panels::const_iterator iter = another_stack->panels_.begin();
- iter != another_stack->panels_.end(); ++iter) {
- Panel* panel = *iter;
- panels_.push_back(panel);
- }
- another_stack->panels_.clear();
-
- SetStackWindowBounds();
-}
-
-bool PanelStackWindowGtk::IsEmpty() const {
- return panels_.empty();
-}
-
-bool PanelStackWindowGtk::HasPanel(Panel* panel) const {
- return std::find(panels_.begin(), panels_.end(), panel) != panels_.end();
-}
-
-void PanelStackWindowGtk::MovePanelsBy(const gfx::Vector2d& delta) {
- for (Panels::const_iterator iter = panels_.begin();
- iter != panels_.end(); ++iter) {
- Panel* panel = *iter;
- gfx::Rect bounds = panel->GetBounds();
- bounds.Offset(delta);
- panel->SetPanelBoundsInstantly(bounds);
- }
-
- SetStackWindowBounds();
-}
-
-void PanelStackWindowGtk::BeginBatchUpdatePanelBounds(bool animate) {
- // Bounds animation is not supported on GTK.
- bounds_updates_started_ = true;
-}
-
-void PanelStackWindowGtk::AddPanelBoundsForBatchUpdate(
- Panel* panel, const gfx::Rect& new_bounds) {
- DCHECK(bounds_updates_started_);
-
- // No need to track it if no change is needed.
- if (panel->GetBounds() == new_bounds)
- return;
-
- // New bounds are stored as the map value.
- bounds_updates_[panel] = new_bounds;
-}
-
-void PanelStackWindowGtk::EndBatchUpdatePanelBounds() {
- DCHECK(bounds_updates_started_);
-
- bounds_updates_started_ = false;
-
- for (BoundsUpdates::const_iterator iter = bounds_updates_.begin();
- iter != bounds_updates_.end(); ++iter) {
- iter->first->SetPanelBoundsInstantly(iter->second);
- }
- bounds_updates_.clear();
-
- SetStackWindowBounds();
-
- delegate_->PanelBoundsBatchUpdateCompleted();
-}
-
-bool PanelStackWindowGtk::IsAnimatingPanelBounds() const {
- return bounds_updates_started_;
-}
-
-void PanelStackWindowGtk::Minimize() {
- gtk_window_iconify(window_);
-}
-
-bool PanelStackWindowGtk::IsMinimized() const {
- return is_minimized_;
-}
-
-void PanelStackWindowGtk::DrawSystemAttention(bool draw_attention) {
- gtk_window_set_urgency_hint(window_, draw_attention);
-}
-
-void PanelStackWindowGtk::OnPanelActivated(Panel* panel) {
- // If a panel in a stack is activated, make sure all other panels in the stack
- // are brought to the top in the z-order.
- for (Panels::const_iterator iter = panels_.begin();
- iter != panels_.end(); ++iter) {
- GtkWindow* gtk_window = (*iter)->GetNativeWindow();
- if (gtk_window) {
- GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(gtk_window));
- gdk_window_raise(gdk_window);
- }
- }
-}
-
-void PanelStackWindowGtk::ActiveWindowChanged(GdkWindow* active_window) {
- // Bail out if icewm is detected. This is because icewm always creates a
- // window as active and we do not want to perform the logic here to
- // activate a panel window when the background window is being created.
- if (ui::GuessWindowManager() == ui::WM_ICE_WM)
- return;
-
- if (!window_ || panels_.empty())
- return;
-
- // The background stack window is activated when its taskbar icon is clicked.
- // When this occurs, we need to activate the most recently active panel.
- if (gtk_widget_get_window(GTK_WIDGET(window_)) == active_window) {
- Panel* panel_to_focus =
- panels_.front()->stack()->most_recently_active_panel();
- if (panel_to_focus)
- panel_to_focus->Activate();
- }
-}
-
-gboolean PanelStackWindowGtk::OnWindowDeleteEvent(GtkWidget* widget,
- GdkEvent* event) {
- DCHECK(!panels_.empty());
-
- // Make a copy since closing a panel could modify the list.
- Panels panels_copy = panels_;
- for (Panels::const_iterator iter = panels_copy.begin();
- iter != panels_copy.end(); ++iter) {
- (*iter)->Close();
- }
-
- // Return true to prevent the gtk window from being destroyed. Close will
- // destroy it for us.
- return TRUE;
-}
-
-gboolean PanelStackWindowGtk::OnWindowState(GtkWidget* widget,
- GdkEventWindowState* event) {
- bool is_minimized = event->new_window_state & GDK_WINDOW_STATE_ICONIFIED;
- if (is_minimized_ == is_minimized)
- return FALSE;
- is_minimized_ = is_minimized;
-
- for (Panels::const_iterator iter = panels_.begin();
- iter != panels_.end(); ++iter) {
- GtkWindow* gtk_window = (*iter)->GetNativeWindow();
- if (is_minimized_)
- gtk_window_iconify(gtk_window);
- else
- gtk_window_deiconify(gtk_window);
- }
-
- return FALSE;
-}
-
-void PanelStackWindowGtk::EnsureWindowCreated() {
- if (window_)
- return;
-
- DCHECK(!panels_.empty());
- Panel* panel = panels_.front();
-
- // Create a small window that stays behinds the panels.
- window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
- gtk_window_set_decorated(window_, false);
- gtk_window_set_resizable(window_, false);
- gtk_window_set_focus_on_map(window_, false);
- gtk_widget_show(GTK_WIDGET(window_));
- gdk_window_move_resize(gtk_widget_get_window(GTK_WIDGET(window_)),
- panel->GetBounds().x(), panel->GetBounds().y(), 1, 1);
- gdk_window_lower(gtk_widget_get_window(GTK_WIDGET(window_)));
-
- // Connect signal handlers to the window.
- g_signal_connect(window_, "delete-event",
- G_CALLBACK(OnWindowDeleteEventThunk), this);
- g_signal_connect(window_, "window-state-event",
- G_CALLBACK(OnWindowStateThunk), this);
-
- // Should appear on the taskbar.
- gtk_window_set_skip_taskbar_hint(window_, false);
-
- // Set the window icon and title.
- base::string16 title = delegate_->GetTitle();
- gtk_window_set_title(window_, base::UTF16ToUTF8(title).c_str());
-
- gfx::Image app_icon = delegate_->GetIcon();
- if (!app_icon.IsEmpty())
- gtk_window_set_icon(window_, app_icon.ToGdkPixbuf());
-}
-
-void PanelStackWindowGtk::SetStackWindowBounds() {
- if (panels_.empty())
- return;
- Panel* panel = panels_.front();
- // Position the small background window a bit away from the left-top corner
- // such that it will be completely invisible.
- gdk_window_move_resize(gtk_widget_get_window(GTK_WIDGET(window_)),
- panel->GetBounds().x() + 5, panel->GetBounds().y() + 5, 1, 1);
-}

Powered by Google App Engine
This is Rietveld 408576698