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

Side by Side Diff: chrome/browser/gtk/task_manager_gtk.cc

Issue 345031: Destroy the TaskManagerGtk singleton instance when its window is destroyed, o... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/gtk/task_manager_gtk.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/gtk/task_manager_gtk.h" 5 #include "chrome/browser/gtk/task_manager_gtk.h"
6 6
7 #include <gdk/gdkkeysyms.h> 7 #include <gdk/gdkkeysyms.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
11 11
12 #include "app/gfx/gtk_util.h" 12 #include "app/gfx/gtk_util.h"
13 #include "app/l10n_util.h" 13 #include "app/l10n_util.h"
14 #include "app/resource_bundle.h" 14 #include "app/resource_bundle.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "chrome/browser/browser_list.h"
17 #include "chrome/browser/browser_process.h" 16 #include "chrome/browser/browser_process.h"
18 #include "chrome/browser/browser_window.h"
19 #include "chrome/browser/gtk/gtk_chrome_link_button.h" 17 #include "chrome/browser/gtk/gtk_chrome_link_button.h"
20 #include "chrome/browser/gtk/gtk_theme_provider.h" 18 #include "chrome/browser/gtk/gtk_theme_provider.h"
21 #include "chrome/browser/gtk/menu_gtk.h" 19 #include "chrome/browser/gtk/menu_gtk.h"
22 #include "chrome/common/gtk_tree.h" 20 #include "chrome/common/gtk_tree.h"
23 #include "chrome/common/gtk_util.h" 21 #include "chrome/common/gtk_util.h"
24 #include "chrome/common/pref_names.h" 22 #include "chrome/common/pref_names.h"
25 #include "chrome/common/pref_service.h" 23 #include "chrome/common/pref_service.h"
26 #include "grit/app_resources.h" 24 #include "grit/app_resources.h"
27 #include "grit/chromium_strings.h" 25 #include "grit/chromium_strings.h"
28 26
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 258
261 TaskManagerGtk::~TaskManagerGtk() { 259 TaskManagerGtk::~TaskManagerGtk() {
262 task_manager_->OnWindowClosed(); 260 task_manager_->OnWindowClosed();
263 model_->RemoveObserver(this); 261 model_->RemoveObserver(this);
264 262
265 gtk_accel_group_disconnect_key(accel_group_, GDK_w, GDK_CONTROL_MASK); 263 gtk_accel_group_disconnect_key(accel_group_, GDK_w, GDK_CONTROL_MASK);
266 gtk_window_remove_accel_group(GTK_WINDOW(dialog_), accel_group_); 264 gtk_window_remove_accel_group(GTK_WINDOW(dialog_), accel_group_);
267 g_object_unref(accel_group_); 265 g_object_unref(accel_group_);
268 accel_group_ = NULL; 266 accel_group_ = NULL;
269 267
268 // Disconnect the destroy signal so it doesn't delete |this|.
269 g_signal_handler_disconnect(G_OBJECT(dialog_), destroy_handler_id_);
270 gtk_widget_destroy(dialog_); 270 gtk_widget_destroy(dialog_);
271 } 271 }
272 272
273 //////////////////////////////////////////////////////////////////////////////// 273 ////////////////////////////////////////////////////////////////////////////////
274 // TaskManagerGtk, TaskManagerModelObserver implementation: 274 // TaskManagerGtk, TaskManagerModelObserver implementation:
275 275
276 void TaskManagerGtk::OnModelChanged() { 276 void TaskManagerGtk::OnModelChanged() {
277 // Nothing to do. 277 // Nothing to do.
278 } 278 }
279 279
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 // Setting the link widget to secondary positions the button on the left side 368 // Setting the link widget to secondary positions the button on the left side
369 // of the action area (vice versa for RTL layout). 369 // of the action area (vice versa for RTL layout).
370 gtk_button_box_set_child_secondary( 370 gtk_button_box_set_child_secondary(
371 GTK_BUTTON_BOX(GTK_DIALOG(dialog_)->action_area), link, TRUE); 371 GTK_BUTTON_BOX(GTK_DIALOG(dialog_)->action_area), link, TRUE);
372 372
373 ConnectAccelerators(); 373 ConnectAccelerators();
374 374
375 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), 375 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox),
376 gtk_util::kContentAreaSpacing); 376 gtk_util::kContentAreaSpacing);
377 377
378 destroy_handler_id_ = g_signal_connect(G_OBJECT(dialog_), "destroy",
379 G_CALLBACK(OnDestroy), this);
378 g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this); 380 g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this);
379 g_signal_connect(G_OBJECT(dialog_), "button-release-event", 381 g_signal_connect(G_OBJECT(dialog_), "button-release-event",
380 G_CALLBACK(OnButtonReleaseEvent), this); 382 G_CALLBACK(OnButtonReleaseEvent), this);
381 gtk_widget_add_events(dialog_, 383 gtk_widget_add_events(dialog_,
382 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); 384 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
383 385
384 // Wrap the treeview widget in a scrolled window in order to have a frame. 386 // Wrap the treeview widget in a scrolled window in order to have a frame.
385 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL); 387 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
386 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), 388 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled),
387 GTK_SHADOW_ETCHED_IN); 389 GTK_SHADOW_ETCHED_IN);
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 } 667 }
666 668
667 gint TaskManagerGtk::CompareImpl(GtkTreeModel* model, GtkTreeIter* a, 669 gint TaskManagerGtk::CompareImpl(GtkTreeModel* model, GtkTreeIter* a,
668 GtkTreeIter* b, int id) { 670 GtkTreeIter* b, int id) {
669 int row1 = gtk_tree::GetRowNumForIter(model, a); 671 int row1 = gtk_tree::GetRowNumForIter(model, a);
670 int row2 = gtk_tree::GetRowNumForIter(model, b); 672 int row2 = gtk_tree::GetRowNumForIter(model, b);
671 return model_->CompareValues(row1, row2, id); 673 return model_->CompareValues(row1, row2, id);
672 } 674 }
673 675
674 // static 676 // static
677 void TaskManagerGtk::OnDestroy(GtkDialog* dialog,
678 TaskManagerGtk* task_manager) {
679 instance_ = NULL;
680 delete task_manager;
681 }
682
683 // static
675 void TaskManagerGtk::OnResponse(GtkDialog* dialog, gint response_id, 684 void TaskManagerGtk::OnResponse(GtkDialog* dialog, gint response_id,
676 TaskManagerGtk* task_manager) { 685 TaskManagerGtk* task_manager) {
677 if (response_id == GTK_RESPONSE_DELETE_EVENT) { 686 if (response_id == GTK_RESPONSE_DELETE_EVENT) {
678 // Store the dialog's size so we can restore it the next time it's opened. 687 // Store the dialog's size so we can restore it the next time it's opened.
679 if (g_browser_process->local_state()) { 688 if (g_browser_process->local_state()) {
680 gint x = 0, y = 0, width = 1, height = 1; 689 gint x = 0, y = 0, width = 1, height = 1;
681 gtk_window_get_position(GTK_WINDOW(dialog), &x, &y); 690 gtk_window_get_position(GTK_WINDOW(dialog), &x, &y);
682 gtk_window_get_size(GTK_WINDOW(dialog), &width, &height); 691 gtk_window_get_size(GTK_WINDOW(dialog), &width, &height);
683 692
684 DictionaryValue* placement_pref = 693 DictionaryValue* placement_pref =
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 TaskManagerGtk* task_manager) { 792 TaskManagerGtk* task_manager) {
784 if (keyval == GDK_w && modifier == GDK_CONTROL_MASK) { 793 if (keyval == GDK_w && modifier == GDK_CONTROL_MASK) {
785 // The GTK_RESPONSE_DELETE_EVENT response must be sent before the widget 794 // The GTK_RESPONSE_DELETE_EVENT response must be sent before the widget
786 // is destroyed. The deleted object will receive gtk signals otherwise. 795 // is destroyed. The deleted object will receive gtk signals otherwise.
787 gtk_dialog_response(GTK_DIALOG(task_manager->dialog_), 796 gtk_dialog_response(GTK_DIALOG(task_manager->dialog_),
788 GTK_RESPONSE_DELETE_EVENT); 797 GTK_RESPONSE_DELETE_EVENT);
789 } 798 }
790 799
791 return TRUE; 800 return TRUE;
792 } 801 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/task_manager_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698