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

Unified Diff: chrome/browser/gtk/browser_window_gtk.cc

Issue 164294: gtk: Disconnect the accelerator group keys when closing the browser window.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 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
« no previous file with comments | « chrome/browser/gtk/browser_window_gtk.h ('k') | tools/valgrind/memcheck/suppressions.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/browser_window_gtk.cc
===================================================================
--- chrome/browser/gtk/browser_window_gtk.cc (revision 22919)
+++ chrome/browser/gtk/browser_window_gtk.cc (working copy)
@@ -7,6 +7,8 @@
#include <gdk/gdkkeysyms.h>
#include <X11/XF86keysym.h>
+#include <string>
+
#include "app/resource_bundle.h"
#include "app/theme_provider.h"
#include "base/base_paths_linux.h"
@@ -390,7 +392,8 @@
#endif
frame_cursor_(NULL),
is_active_(true),
- last_click_time_(0) {
+ last_click_time_(0),
+ accel_group_(NULL) {
use_custom_frame_.Init(prefs::kUseCustomChromeFrame,
browser_->profile()->GetPrefs(), this);
@@ -664,6 +667,19 @@
SaveWindowPosition();
+ if (accel_group_) {
+ // Disconnecting the keys we connected to our accelerator group frees the
+ // closures allocated in ConnectAccelerators.
+ for (size_t i = 0; i < arraysize(kAcceleratorMap); ++i) {
+ gtk_accel_group_disconnect_key(accel_group_,
+ kAcceleratorMap[i].keyval,
+ kAcceleratorMap[i].modifier_type);
+ }
+ gtk_window_remove_accel_group(window_, accel_group_);
+ g_object_unref(accel_group_);
+ accel_group_ = NULL;
+ }
+
GtkWidget* window = GTK_WIDGET(window_);
// To help catch bugs in any event handlers that might get fired during the
// destruction, set window_ to NULL before any handlers will run.
@@ -1430,14 +1446,12 @@
}
void BrowserWindowGtk::ConnectAccelerators() {
- GtkAccelGroup* accel_group = gtk_accel_group_new();
- gtk_window_add_accel_group(window_, accel_group);
- // Drop the initial ref on |accel_group| so |window_| will own it.
- g_object_unref(accel_group);
+ accel_group_ = gtk_accel_group_new();
+ gtk_window_add_accel_group(window_, accel_group_);
for (size_t i = 0; i < arraysize(kAcceleratorMap); ++i) {
gtk_accel_group_connect(
- accel_group,
+ accel_group_,
kAcceleratorMap[i].keyval,
kAcceleratorMap[i].modifier_type,
GtkAccelFlags(0),
« no previous file with comments | « chrome/browser/gtk/browser_window_gtk.h ('k') | tools/valgrind/memcheck/suppressions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698