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

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

Issue 202035: Fix accel leak in task manager and bookmark manager by using (Closed)
Patch Set: null Created 11 years, 3 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 unified diff | Download patch
« 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>
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 process_count_(0) { 242 process_count_(0) {
243 Init(); 243 Init();
244 } 244 }
245 245
246 // static 246 // static
247 TaskManagerGtk* TaskManagerGtk::instance_ = NULL; 247 TaskManagerGtk* TaskManagerGtk::instance_ = NULL;
248 248
249 TaskManagerGtk::~TaskManagerGtk() { 249 TaskManagerGtk::~TaskManagerGtk() {
250 task_manager_->OnWindowClosed(); 250 task_manager_->OnWindowClosed();
251 model_->RemoveObserver(this); 251 model_->RemoveObserver(this);
252
253 gtk_accel_group_disconnect_key(accel_group_, GDK_w, GDK_CONTROL_MASK);
254 gtk_window_remove_accel_group(GTK_WINDOW(dialog_), accel_group_);
255 g_object_unref(accel_group_);
256 accel_group_ = NULL;
257
258 gtk_widget_destroy(dialog_);
252 } 259 }
253 260
254 //////////////////////////////////////////////////////////////////////////////// 261 ////////////////////////////////////////////////////////////////////////////////
255 // TaskManagerGtk, TaskManagerModelObserver implementation: 262 // TaskManagerGtk, TaskManagerModelObserver implementation:
256 263
257 void TaskManagerGtk::OnModelChanged() { 264 void TaskManagerGtk::OnModelChanged() {
258 // Nothing to do. 265 // Nothing to do.
259 } 266 }
260 267
261 void TaskManagerGtk::OnItemsChanged(int start, int length) { 268 void TaskManagerGtk::OnItemsChanged(int start, int length) {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 } 431 }
425 } 432 }
426 433
427 // Otherwise, just set a default size (GTK will override this if it's not 434 // Otherwise, just set a default size (GTK will override this if it's not
428 // large enough to hold the window's contents). 435 // large enough to hold the window's contents).
429 gtk_window_set_default_size( 436 gtk_window_set_default_size(
430 GTK_WINDOW(dialog_), kDefaultWidth, kDefaultHeight); 437 GTK_WINDOW(dialog_), kDefaultWidth, kDefaultHeight);
431 } 438 }
432 439
433 void TaskManagerGtk::ConnectAccelerators() { 440 void TaskManagerGtk::ConnectAccelerators() {
434 GtkAccelGroup* accel_group = gtk_accel_group_new(); 441 accel_group_ = gtk_accel_group_new();
435 gtk_window_add_accel_group(GTK_WINDOW(dialog_), accel_group); 442 gtk_window_add_accel_group(GTK_WINDOW(dialog_), accel_group_);
436 443
437 // Drop the initial ref on |accel_group| so |dialog_| will own it. 444 gtk_accel_group_connect(accel_group_,
438 g_object_unref(accel_group);
439
440 gtk_accel_group_connect(accel_group,
441 GDK_w, GDK_CONTROL_MASK, GtkAccelFlags(0), 445 GDK_w, GDK_CONTROL_MASK, GtkAccelFlags(0),
442 g_cclosure_new(G_CALLBACK(OnGtkAccelerator), 446 g_cclosure_new(G_CALLBACK(OnGtkAccelerator),
443 this, NULL)); 447 this, NULL));
444 } 448 }
445 449
446 void TaskManagerGtk::CreateTaskManagerTreeview() { 450 void TaskManagerGtk::CreateTaskManagerTreeview() {
447 treeview_ = gtk_tree_view_new(); 451 treeview_ = gtk_tree_view_new();
448 452
449 TreeViewInsertColumnWithPixbuf(treeview_, IDS_TASK_MANAGER_PAGE_COLUMN); 453 TreeViewInsertColumnWithPixbuf(treeview_, IDS_TASK_MANAGER_PAGE_COLUMN);
450 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN); 454 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN);
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 gboolean TaskManagerGtk::OnGtkAccelerator(GtkAccelGroup* accel_group, 714 gboolean TaskManagerGtk::OnGtkAccelerator(GtkAccelGroup* accel_group,
711 GObject* acceleratable, 715 GObject* acceleratable,
712 guint keyval, 716 guint keyval,
713 GdkModifierType modifier, 717 GdkModifierType modifier,
714 TaskManagerGtk* task_manager) { 718 TaskManagerGtk* task_manager) {
715 if (keyval == GDK_w && modifier == GDK_CONTROL_MASK) { 719 if (keyval == GDK_w && modifier == GDK_CONTROL_MASK) {
716 // The GTK_RESPONSE_DELETE_EVENT response must be sent before the widget 720 // The GTK_RESPONSE_DELETE_EVENT response must be sent before the widget
717 // is destroyed. The deleted object will receive gtk signals otherwise. 721 // is destroyed. The deleted object will receive gtk signals otherwise.
718 gtk_dialog_response(GTK_DIALOG(task_manager->dialog_), 722 gtk_dialog_response(GTK_DIALOG(task_manager->dialog_),
719 GTK_RESPONSE_DELETE_EVENT); 723 GTK_RESPONSE_DELETE_EVENT);
720 gtk_widget_destroy(task_manager->dialog_);
721 } 724 }
722 725
723 return TRUE; 726 return TRUE;
724 } 727 }
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