| Index: chrome/browser/ui/gtk/task_manager_gtk.h
|
| diff --git a/chrome/browser/ui/gtk/task_manager_gtk.h b/chrome/browser/ui/gtk/task_manager_gtk.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..631526852b6d7369b0f58464083c8da3afa6cc62
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/gtk/task_manager_gtk.h
|
| @@ -0,0 +1,233 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +#ifndef CHROME_BROWSER_UI_GTK_TASK_MANAGER_GTK_H_
|
| +#define CHROME_BROWSER_UI_GTK_TASK_MANAGER_GTK_H_
|
| +#pragma once
|
| +
|
| +#include <gtk/gtk.h>
|
| +
|
| +#include <string>
|
| +
|
| +#include "app/gtk_signal.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "chrome/browser/task_manager/task_manager.h"
|
| +#include "grit/generated_resources.h"
|
| +
|
| +#if defined(TOOLKIT_VIEWS)
|
| +namespace gfx {
|
| +class Point;
|
| +}
|
| +#endif
|
| +
|
| +class TaskManagerGtk : public TaskManagerModelObserver {
|
| + public:
|
| + TaskManagerGtk();
|
| + virtual ~TaskManagerGtk();
|
| +
|
| + // TaskManagerModelObserver
|
| + virtual void OnModelChanged();
|
| + virtual void OnItemsChanged(int start, int length);
|
| + virtual void OnItemsAdded(int start, int length);
|
| + virtual void OnItemsRemoved(int start, int length);
|
| +
|
| + // Creates the task manager if it doesn't exist; otherwise, it activates the
|
| + // existing task manager window.
|
| + static void Show();
|
| +
|
| + private:
|
| + class ContextMenuController;
|
| + friend class ContextMenuController;
|
| +
|
| + // Initializes the task manager dialog.
|
| + void Init();
|
| +
|
| + // Set |dialog_|'s initial size, using its previous size if that was saved.
|
| + void SetInitialDialogSize();
|
| +
|
| + // Connects the ctrl-w accelerator to the dialog.
|
| + void ConnectAccelerators();
|
| +
|
| + // Sets up the treeview widget.
|
| + void CreateTaskManagerTreeview();
|
| +
|
| + // Returns the model data for a given |row| and |col_id|.
|
| + std::string GetModelText(int row, int col_id);
|
| +
|
| + // Retrieves the resource icon from the model for |row|.
|
| + GdkPixbuf* GetModelIcon(int row);
|
| +
|
| + // Sets the treeview row data. |row| is an index into the model and |iter|
|
| + // is the current position in the treeview.
|
| + void SetRowDataFromModel(int row, GtkTreeIter* iter);
|
| +
|
| + // Queries the treeview for the selected rows, and kills those processes.
|
| + void KillSelectedProcesses();
|
| +
|
| + // Opens the context menu used to select the task manager columns.
|
| +#if defined(TOOLKIT_VIEWS)
|
| + void ShowContextMenu(const gfx::Point& point);
|
| +#else
|
| + void ShowContextMenu();
|
| +#endif
|
| +
|
| + // Opens about:memory in a new foreground tab.
|
| + void OnLinkActivated();
|
| +
|
| + // Compare implementation used for sorting columns.
|
| + gint CompareImpl(GtkTreeModel* tree_model, GtkTreeIter* a,
|
| + GtkTreeIter* b, int id);
|
| +
|
| + // Response signal handler that notifies us of dialog destruction.
|
| + CHROMEGTK_CALLBACK_0(TaskManagerGtk, void, OnDestroy);
|
| +
|
| + // Response signal handler that notifies us of dialog responses.
|
| + CHROMEGTK_CALLBACK_1(TaskManagerGtk, void, OnResponse, gint);
|
| +
|
| + // Realize signal handler to set the page column's initial size.
|
| + CHROMEG_CALLBACK_0(TaskManagerGtk, void, OnTreeViewRealize, GtkTreeView*);
|
| +
|
| + // Changed signal handler that is sent when the treeview selection changes.
|
| + CHROMEG_CALLBACK_0(TaskManagerGtk, void, OnSelectionChanged,
|
| + GtkTreeSelection*);
|
| +
|
| + // row-activated handler that foregrounds a process on activation (e.g.,
|
| + // double-click).
|
| + CHROMEGTK_CALLBACK_2(TaskManagerGtk, void, OnRowActivated,
|
| + GtkTreePath*, GtkTreeViewColumn*);
|
| +
|
| + // button-release-event handler that opens the right-click context menu.
|
| + CHROMEGTK_CALLBACK_1(TaskManagerGtk, gboolean, OnButtonReleaseEvent,
|
| + GdkEventButton*);
|
| +
|
| + // Handles an accelerator being pressed.
|
| + CHROMEG_CALLBACK_3(TaskManagerGtk, gboolean, OnGtkAccelerator,
|
| + GtkAccelGroup*, GObject*, guint, GdkModifierType);
|
| +
|
| + // Page sorting callback.
|
| + static gint ComparePage(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_PAGE_COLUMN);
|
| + }
|
| +
|
| + // Shared memory sorting callback.
|
| + static gint CompareSharedMemory(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_SHARED_MEM_COLUMN);
|
| + }
|
| +
|
| + // Private memory sorting callback.
|
| + static gint ComparePrivateMemory(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN);
|
| + }
|
| +
|
| + // Javascript memory sorting callback.
|
| + static gint CompareV8Memory(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b,
|
| + IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN);
|
| + }
|
| +
|
| + // CPU sorting callback.
|
| + static gint CompareCPU(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_CPU_COLUMN);
|
| + }
|
| +
|
| + // Network sorting callback.
|
| + static gint CompareNetwork(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_NET_COLUMN);
|
| + }
|
| +
|
| + // Process ID sorting callback.
|
| + static gint CompareProcessID(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_PROCESS_ID_COLUMN);
|
| + }
|
| +
|
| + // WebCore Image Cache sorting callback.
|
| + static gint CompareWebCoreImageCache(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN);
|
| + }
|
| +
|
| + // WebCore Scripts Cache sorting callback.
|
| + static gint CompareWebCoreScriptsCache(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b,
|
| + gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN);
|
| + }
|
| +
|
| + // WebCore CSS Cache sorting callback.
|
| + static gint CompareWebCoreCssCache(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN);
|
| + }
|
| +
|
| + // Sqlite memory sorting callback.
|
| + static gint CompareSqliteMemoryUsed(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN);
|
| + }
|
| +
|
| + // Goats Teleported sorting callback.
|
| + static gint CompareGoatsTeleported(GtkTreeModel* model, GtkTreeIter* a,
|
| + GtkTreeIter* b, gpointer task_manager) {
|
| + return reinterpret_cast<TaskManagerGtk*>(task_manager)->
|
| + CompareImpl(model, a, b, IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN);
|
| + }
|
| +
|
| + // The task manager.
|
| + TaskManager* task_manager_;
|
| +
|
| + // Our model.
|
| + TaskManagerModel* model_;
|
| +
|
| + // The task manager dialog window.
|
| + GtkWidget* dialog_;
|
| +
|
| + // The treeview that contains the process list.
|
| + GtkWidget* treeview_;
|
| +
|
| + // The list of processes.
|
| + GtkListStore* process_list_;
|
| + GtkTreeModel* process_list_sort_;
|
| +
|
| + // The number of processes in |process_list_|.
|
| + int process_count_;
|
| +
|
| + // The id of the |dialog_| destroy signal handler.
|
| + gulong destroy_handler_id_;
|
| +
|
| + // The context menu controller.
|
| + scoped_ptr<ContextMenuController> menu_controller_;
|
| +
|
| + GtkAccelGroup* accel_group_;
|
| +
|
| + // An open task manager window. There can only be one open at a time. This
|
| + // is reset to NULL when the window is closed.
|
| + static TaskManagerGtk* instance_;
|
| +
|
| + // We edit the selection in the OnSelectionChanged handler, and we use this
|
| + // variable to prevent ourselves from handling further changes that we
|
| + // ourselves caused.
|
| + bool ignore_selection_changed_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TaskManagerGtk);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_UI_GTK_TASK_MANAGER_GTK_H_
|
|
|