OLD | NEW |
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> |
| 8 |
7 #include <vector> | 9 #include <vector> |
8 | 10 |
9 #include "app/l10n_util.h" | 11 #include "app/l10n_util.h" |
10 #include "base/gfx/gtk_util.h" | 12 #include "base/gfx/gtk_util.h" |
11 #include "base/logging.h" | 13 #include "base/logging.h" |
12 #include "chrome/browser/gtk/menu_gtk.h" | 14 #include "chrome/browser/gtk/menu_gtk.h" |
13 #include "chrome/common/gtk_util.h" | 15 #include "chrome/common/gtk_util.h" |
14 #include "grit/chromium_strings.h" | 16 #include "grit/chromium_strings.h" |
15 #include "grit/generated_resources.h" | 17 #include "grit/generated_resources.h" |
16 | 18 |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 void TaskManagerGtk::Init() { | 307 void TaskManagerGtk::Init() { |
306 dialog_ = gtk_dialog_new_with_buttons( | 308 dialog_ = gtk_dialog_new_with_buttons( |
307 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), | 309 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_TITLE).c_str(), |
308 // Task Manager window is shared between all browsers. | 310 // Task Manager window is shared between all browsers. |
309 NULL, | 311 NULL, |
310 GTK_DIALOG_NO_SEPARATOR, | 312 GTK_DIALOG_NO_SEPARATOR, |
311 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_KILL).c_str(), | 313 l10n_util::GetStringUTF8(IDS_TASK_MANAGER_KILL).c_str(), |
312 kTaskManagerResponseKill, | 314 kTaskManagerResponseKill, |
313 NULL); | 315 NULL); |
314 | 316 |
| 317 ConnectAccelerators(); |
| 318 |
315 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), | 319 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), |
316 gtk_util::kContentAreaSpacing); | 320 gtk_util::kContentAreaSpacing); |
317 | 321 |
318 g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this); | 322 g_signal_connect(G_OBJECT(dialog_), "response", G_CALLBACK(OnResponse), this); |
319 g_signal_connect(G_OBJECT(dialog_), "button-release-event", | 323 g_signal_connect(G_OBJECT(dialog_), "button-release-event", |
320 G_CALLBACK(OnButtonReleaseEvent), this); | 324 G_CALLBACK(OnButtonReleaseEvent), this); |
321 gtk_widget_add_events(dialog_, | 325 gtk_widget_add_events(dialog_, |
322 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); | 326 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); |
323 | 327 |
324 // Wrap the treeview widget in a scrolled window in order to have a frame. | 328 // Wrap the treeview widget in a scrolled window in order to have a frame. |
(...skipping 30 matching lines...) Expand all Loading... |
355 G_CALLBACK(OnSelectionChanged), this); | 359 G_CALLBACK(OnSelectionChanged), this); |
356 | 360 |
357 gtk_container_add(GTK_CONTAINER(scrolled), treeview_); | 361 gtk_container_add(GTK_CONTAINER(scrolled), treeview_); |
358 | 362 |
359 gtk_window_resize(GTK_WINDOW(dialog_), kDefaultWidth, kDefaultHeight); | 363 gtk_window_resize(GTK_WINDOW(dialog_), kDefaultWidth, kDefaultHeight); |
360 gtk_widget_show_all(dialog_); | 364 gtk_widget_show_all(dialog_); |
361 | 365 |
362 model_->SetObserver(this); | 366 model_->SetObserver(this); |
363 } | 367 } |
364 | 368 |
| 369 void TaskManagerGtk::ConnectAccelerators() { |
| 370 GtkAccelGroup* accel_group = gtk_accel_group_new(); |
| 371 gtk_window_add_accel_group(GTK_WINDOW(dialog_), accel_group); |
| 372 |
| 373 // Drop the initial ref on |accel_group| so |dialog_| will own it. |
| 374 g_object_unref(accel_group); |
| 375 |
| 376 gtk_accel_group_connect(accel_group, GDK_w, GDK_CONTROL_MASK, |
| 377 GtkAccelFlags(0), |
| 378 g_cclosure_new(G_CALLBACK(OnGtkAccelerator), this, |
| 379 NULL)); |
| 380 } |
| 381 |
365 void TaskManagerGtk::CreateTaskManagerTreeview() { | 382 void TaskManagerGtk::CreateTaskManagerTreeview() { |
366 treeview_ = gtk_tree_view_new(); | 383 treeview_ = gtk_tree_view_new(); |
367 | 384 |
368 TreeViewInsertColumnWithPixbuf(treeview_, IDS_TASK_MANAGER_PAGE_COLUMN); | 385 TreeViewInsertColumnWithPixbuf(treeview_, IDS_TASK_MANAGER_PAGE_COLUMN); |
369 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN); | 386 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN); |
370 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_SHARED_MEM_COLUMN); | 387 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_SHARED_MEM_COLUMN); |
371 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN); | 388 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN); |
372 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_CPU_COLUMN); | 389 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_CPU_COLUMN); |
373 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_NET_COLUMN); | 390 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_NET_COLUMN); |
374 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PROCESS_ID_COLUMN); | 391 TreeViewInsertColumn(treeview_, IDS_TASK_MANAGER_PROCESS_ID_COLUMN); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 TaskManagerGtk* task_manager) { | 554 TaskManagerGtk* task_manager) { |
538 // We don't want to open the context menu in the treeview. | 555 // We don't want to open the context menu in the treeview. |
539 if (widget == task_manager->treeview_) | 556 if (widget == task_manager->treeview_) |
540 return TRUE; | 557 return TRUE; |
541 | 558 |
542 if (event->button == 3) | 559 if (event->button == 3) |
543 task_manager->ShowContextMenu(); | 560 task_manager->ShowContextMenu(); |
544 | 561 |
545 return FALSE; | 562 return FALSE; |
546 } | 563 } |
| 564 |
| 565 // static |
| 566 gboolean TaskManagerGtk::OnGtkAccelerator(GtkAccelGroup* accel_group, |
| 567 GObject* acceleratable, |
| 568 guint keyval, |
| 569 GdkModifierType modifier, |
| 570 TaskManagerGtk* task_manager) { |
| 571 if (keyval == GDK_w && modifier == GDK_CONTROL_MASK) { |
| 572 // The GTK_RESPONSE_DELETE_EVENT response must be sent before the widget |
| 573 // is destroyed. The deleted object will receive gtk signals otherwise. |
| 574 gtk_dialog_response(GTK_DIALOG(task_manager->dialog_), |
| 575 GTK_RESPONSE_DELETE_EVENT); |
| 576 gtk_widget_destroy(task_manager->dialog_); |
| 577 } |
| 578 |
| 579 return TRUE; |
| 580 } |
OLD | NEW |