| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ui/gtk/collected_cookies_gtk.h" | 5 #include "chrome/browser/ui/gtk/collected_cookies_gtk.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include "chrome/browser/browsing_data_appcache_helper.h" | 8 #include "chrome/browser/browsing_data_appcache_helper.h" |
| 9 #include "chrome/browser/browsing_data_cookie_helper.h" | 9 #include "chrome/browser/browsing_data_cookie_helper.h" |
| 10 #include "chrome/browser/browsing_data_database_helper.h" | 10 #include "chrome/browser/browsing_data_database_helper.h" |
| 11 #include "chrome/browser/browsing_data_file_system_helper.h" | 11 #include "chrome/browser/browsing_data_file_system_helper.h" |
| 12 #include "chrome/browser/browsing_data_indexed_db_helper.h" | 12 #include "chrome/browser/browsing_data_indexed_db_helper.h" |
| 13 #include "chrome/browser/browsing_data_local_storage_helper.h" | 13 #include "chrome/browser/browsing_data_local_storage_helper.h" |
| 14 #include "chrome/browser/browsing_data_server_bound_cert_helper.h" | 14 #include "chrome/browser/browsing_data_server_bound_cert_helper.h" |
| 15 #include "chrome/browser/content_settings/cookie_settings.h" | 15 #include "chrome/browser/content_settings/cookie_settings.h" |
| 16 #include "chrome/browser/content_settings/local_shared_objects_container.h" | 16 #include "chrome/browser/content_settings/local_shared_objects_container.h" |
| 17 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 17 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 18 #include "chrome/browser/cookies_tree_model.h" | 18 #include "chrome/browser/cookies_tree_model.h" |
| 19 #include "chrome/browser/infobars/infobar_tab_helper.h" | 19 #include "chrome/browser/infobars/infobar_tab_helper.h" |
| 20 #include "chrome/browser/prefs/pref_service.h" | 20 #include "chrome/browser/prefs/pref_service.h" |
| 21 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
| 22 #include "chrome/browser/ui/collected_cookies_infobar_delegate.h" | 22 #include "chrome/browser/ui/collected_cookies_infobar_delegate.h" |
| 23 #include "chrome/browser/ui/browser_dialogs.h" | 23 #include "chrome/browser/ui/browser_dialogs.h" |
| 24 #include "chrome/browser/ui/gtk/constrained_window_gtk.h" | 24 #include "chrome/browser/ui/gtk/constrained_window_gtk.h" |
| 25 #include "chrome/browser/ui/gtk/gtk_chrome_cookie_view.h" | 25 #include "chrome/browser/ui/gtk/gtk_chrome_cookie_view.h" |
| 26 #include "chrome/browser/ui/gtk/gtk_util.h" | 26 #include "chrome/browser/ui/gtk/gtk_util.h" |
| 27 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 27 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
| 28 #include "chrome/common/chrome_notification_types.h" | 28 #include "chrome/common/chrome_notification_types.h" |
| 29 #include "chrome/common/pref_names.h" | 29 #include "chrome/common/pref_names.h" |
| 30 #include "content/public/browser/notification_source.h" | 30 #include "content/public/browser/notification_source.h" |
| 31 #include "grit/generated_resources.h" | 31 #include "grit/generated_resources.h" |
| 32 #include "ui/base/gtk/gtk_hig_constants.h" | 32 #include "ui/base/gtk/gtk_hig_constants.h" |
| 33 #include "ui/base/l10n/l10n_util.h" | 33 #include "ui/base/l10n/l10n_util.h" |
| 34 | 34 |
| 35 namespace { | 35 namespace { |
| 36 // Width and height of the cookie tree view. | 36 // Width and height of the cookie tree view. |
| 37 const int kTreeViewWidth = 450; | 37 const int kTreeViewWidth = 450; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 return std::string(); | 87 return std::string(); |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 | 90 |
| 91 } // namespace | 91 } // namespace |
| 92 | 92 |
| 93 namespace browser { | 93 namespace browser { |
| 94 | 94 |
| 95 // Declared in browser_dialogs.h so others don't have to depend on our header. | 95 // Declared in browser_dialogs.h so others don't have to depend on our header. |
| 96 void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window, | 96 void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window, |
| 97 TabContentsWrapper* wrapper) { | 97 TabContents* tab_contents) { |
| 98 // Deletes itself on close. | 98 // Deletes itself on close. |
| 99 new CollectedCookiesGtk(parent_window, wrapper); | 99 new CollectedCookiesGtk(parent_window, tab_contents); |
| 100 } | 100 } |
| 101 | 101 |
| 102 } // namespace browser | 102 } // namespace browser |
| 103 | 103 |
| 104 CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent, | 104 CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent, |
| 105 TabContentsWrapper* wrapper) | 105 TabContents* tab_contents) |
| 106 : wrapper_(wrapper), | 106 : tab_contents_(tab_contents), |
| 107 status_changed_(false) { | 107 status_changed_(false) { |
| 108 registrar_.Add(this, chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, | 108 registrar_.Add(this, chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, |
| 109 content::Source<TabSpecificContentSettings>( | 109 content::Source<TabSpecificContentSettings>( |
| 110 wrapper->content_settings())); | 110 tab_contents->content_settings())); |
| 111 | 111 |
| 112 Init(); | 112 Init(); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void CollectedCookiesGtk::Init() { | 115 void CollectedCookiesGtk::Init() { |
| 116 dialog_ = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); | 116 dialog_ = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); |
| 117 gtk_box_set_spacing(GTK_BOX(dialog_), ui::kContentAreaSpacing); | 117 gtk_box_set_spacing(GTK_BOX(dialog_), ui::kContentAreaSpacing); |
| 118 | 118 |
| 119 GtkWidget* label = gtk_label_new( | 119 GtkWidget* label = gtk_label_new( |
| 120 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_DIALOG_TITLE).c_str()); | 120 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_DIALOG_TITLE).c_str()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 gtk_button_set_label(GTK_BUTTON(close_button_), | 177 gtk_button_set_label(GTK_BUTTON(close_button_), |
| 178 l10n_util::GetStringUTF8(IDS_CLOSE).c_str()); | 178 l10n_util::GetStringUTF8(IDS_CLOSE).c_str()); |
| 179 g_signal_connect(close_button_, "clicked", G_CALLBACK(OnCloseThunk), this); | 179 g_signal_connect(close_button_, "clicked", G_CALLBACK(OnCloseThunk), this); |
| 180 gtk_box_pack_end(GTK_BOX(button_box), close_button_, FALSE, TRUE, 0); | 180 gtk_box_pack_end(GTK_BOX(button_box), close_button_, FALSE, TRUE, 0); |
| 181 | 181 |
| 182 // Show the dialog. | 182 // Show the dialog. |
| 183 allowed_cookies_tree_adapter_->Init(); | 183 allowed_cookies_tree_adapter_->Init(); |
| 184 blocked_cookies_tree_adapter_->Init(); | 184 blocked_cookies_tree_adapter_->Init(); |
| 185 EnableControls(); | 185 EnableControls(); |
| 186 ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_))); | 186 ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_))); |
| 187 window_ = new ConstrainedWindowGtk(wrapper_, this); | 187 window_ = new ConstrainedWindowGtk(tab_contents_, this); |
| 188 } | 188 } |
| 189 | 189 |
| 190 GtkWidget* CollectedCookiesGtk::CreateAllowedPane() { | 190 GtkWidget* CollectedCookiesGtk::CreateAllowedPane() { |
| 191 GtkWidget* cookie_list_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 191 GtkWidget* cookie_list_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); |
| 192 | 192 |
| 193 GtkWidget* label = gtk_label_new( | 193 GtkWidget* label = gtk_label_new( |
| 194 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL). | 194 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL). |
| 195 c_str()); | 195 c_str()); |
| 196 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 196 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 197 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, FALSE, FALSE, | 197 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, FALSE, FALSE, |
| 198 ui::kControlSpacing); | 198 ui::kControlSpacing); |
| 199 | 199 |
| 200 GtkWidget* scroll_window = gtk_scrolled_window_new(NULL, NULL); | 200 GtkWidget* scroll_window = gtk_scrolled_window_new(NULL, NULL); |
| 201 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), | 201 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), |
| 202 GTK_POLICY_AUTOMATIC, | 202 GTK_POLICY_AUTOMATIC, |
| 203 GTK_POLICY_AUTOMATIC); | 203 GTK_POLICY_AUTOMATIC); |
| 204 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window), | 204 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window), |
| 205 GTK_SHADOW_ETCHED_IN); | 205 GTK_SHADOW_ETCHED_IN); |
| 206 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), scroll_window, TRUE, TRUE, 0); | 206 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), scroll_window, TRUE, TRUE, 0); |
| 207 | 207 |
| 208 TabSpecificContentSettings* content_settings = wrapper_->content_settings(); | 208 TabSpecificContentSettings* content_settings = |
| 209 tab_contents_->content_settings(); |
| 209 | 210 |
| 210 const LocalSharedObjectsContainer& allowed_lsos = | 211 const LocalSharedObjectsContainer& allowed_lsos = |
| 211 content_settings->allowed_local_shared_objects(); | 212 content_settings->allowed_local_shared_objects(); |
| 212 allowed_cookies_tree_model_.reset( | 213 allowed_cookies_tree_model_.reset( |
| 213 new CookiesTreeModel(allowed_lsos.cookies()->Clone(), | 214 new CookiesTreeModel(allowed_lsos.cookies()->Clone(), |
| 214 allowed_lsos.databases()->Clone(), | 215 allowed_lsos.databases()->Clone(), |
| 215 allowed_lsos.local_storages()->Clone(), | 216 allowed_lsos.local_storages()->Clone(), |
| 216 allowed_lsos.session_storages()->Clone(), | 217 allowed_lsos.session_storages()->Clone(), |
| 217 allowed_lsos.appcaches()->Clone(), | 218 allowed_lsos.appcaches()->Clone(), |
| 218 allowed_lsos.indexed_dbs()->Clone(), | 219 allowed_lsos.indexed_dbs()->Clone(), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 | 264 |
| 264 // Wrap the vbox inside an hbox so that we can specify padding along the | 265 // Wrap the vbox inside an hbox so that we can specify padding along the |
| 265 // horizontal axis. | 266 // horizontal axis. |
| 266 GtkWidget* box = gtk_hbox_new(FALSE, 0); | 267 GtkWidget* box = gtk_hbox_new(FALSE, 0); |
| 267 gtk_box_pack_start(GTK_BOX(box), cookie_list_vbox, TRUE, TRUE, | 268 gtk_box_pack_start(GTK_BOX(box), cookie_list_vbox, TRUE, TRUE, |
| 268 ui::kControlSpacing); | 269 ui::kControlSpacing); |
| 269 return box; | 270 return box; |
| 270 } | 271 } |
| 271 | 272 |
| 272 GtkWidget* CollectedCookiesGtk::CreateBlockedPane() { | 273 GtkWidget* CollectedCookiesGtk::CreateBlockedPane() { |
| 273 PrefService* prefs = wrapper_->profile()->GetPrefs(); | 274 PrefService* prefs = tab_contents_->profile()->GetPrefs(); |
| 274 | 275 |
| 275 GtkWidget* cookie_list_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 276 GtkWidget* cookie_list_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); |
| 276 | 277 |
| 277 GtkWidget* label = gtk_label_new( | 278 GtkWidget* label = gtk_label_new( |
| 278 l10n_util::GetStringUTF8( | 279 l10n_util::GetStringUTF8( |
| 279 prefs->GetBoolean(prefs::kBlockThirdPartyCookies) ? | 280 prefs->GetBoolean(prefs::kBlockThirdPartyCookies) ? |
| 280 IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED : | 281 IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED : |
| 281 IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL).c_str()); | 282 IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL).c_str()); |
| 282 gtk_widget_set_size_request(label, kTreeViewWidth, -1); | 283 gtk_widget_set_size_request(label, kTreeViewWidth, -1); |
| 283 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | 284 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
| 284 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | 285 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 285 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, TRUE, TRUE, | 286 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, TRUE, TRUE, |
| 286 ui::kControlSpacing); | 287 ui::kControlSpacing); |
| 287 | 288 |
| 288 GtkWidget* scroll_window = gtk_scrolled_window_new(NULL, NULL); | 289 GtkWidget* scroll_window = gtk_scrolled_window_new(NULL, NULL); |
| 289 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), | 290 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), |
| 290 GTK_POLICY_AUTOMATIC, | 291 GTK_POLICY_AUTOMATIC, |
| 291 GTK_POLICY_AUTOMATIC); | 292 GTK_POLICY_AUTOMATIC); |
| 292 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window), | 293 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll_window), |
| 293 GTK_SHADOW_ETCHED_IN); | 294 GTK_SHADOW_ETCHED_IN); |
| 294 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), scroll_window, TRUE, TRUE, 0); | 295 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), scroll_window, TRUE, TRUE, 0); |
| 295 | 296 |
| 296 TabSpecificContentSettings* content_settings = wrapper_->content_settings(); | 297 TabSpecificContentSettings* content_settings = |
| 298 tab_contents_->content_settings(); |
| 297 | 299 |
| 298 const LocalSharedObjectsContainer& blocked_lsos = | 300 const LocalSharedObjectsContainer& blocked_lsos = |
| 299 content_settings->blocked_local_shared_objects(); | 301 content_settings->blocked_local_shared_objects(); |
| 300 blocked_cookies_tree_model_.reset( | 302 blocked_cookies_tree_model_.reset( |
| 301 new CookiesTreeModel(blocked_lsos.cookies()->Clone(), | 303 new CookiesTreeModel(blocked_lsos.cookies()->Clone(), |
| 302 blocked_lsos.databases()->Clone(), | 304 blocked_lsos.databases()->Clone(), |
| 303 blocked_lsos.local_storages()->Clone(), | 305 blocked_lsos.local_storages()->Clone(), |
| 304 blocked_lsos.session_storages()->Clone(), | 306 blocked_lsos.session_storages()->Clone(), |
| 305 blocked_lsos.appcaches()->Clone(), | 307 blocked_lsos.appcaches()->Clone(), |
| 306 blocked_lsos.indexed_dbs()->Clone(), | 308 blocked_lsos.indexed_dbs()->Clone(), |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 | 465 |
| 464 void CollectedCookiesGtk::Observe(int type, | 466 void CollectedCookiesGtk::Observe(int type, |
| 465 const content::NotificationSource& source, | 467 const content::NotificationSource& source, |
| 466 const content::NotificationDetails& details) { | 468 const content::NotificationDetails& details) { |
| 467 DCHECK(type == chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN); | 469 DCHECK(type == chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN); |
| 468 window_->CloseConstrainedWindow(); | 470 window_->CloseConstrainedWindow(); |
| 469 } | 471 } |
| 470 | 472 |
| 471 void CollectedCookiesGtk::OnClose(GtkWidget* close_button) { | 473 void CollectedCookiesGtk::OnClose(GtkWidget* close_button) { |
| 472 if (status_changed_) { | 474 if (status_changed_) { |
| 473 InfoBarTabHelper* infobar_helper = wrapper_->infobar_tab_helper(); | 475 InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper(); |
| 474 infobar_helper->AddInfoBar( | 476 infobar_helper->AddInfoBar( |
| 475 new CollectedCookiesInfoBarDelegate(infobar_helper)); | 477 new CollectedCookiesInfoBarDelegate(infobar_helper)); |
| 476 } | 478 } |
| 477 window_->CloseConstrainedWindow(); | 479 window_->CloseConstrainedWindow(); |
| 478 } | 480 } |
| 479 | 481 |
| 480 void CollectedCookiesGtk::AddExceptions(GtkTreeSelection* selection, | 482 void CollectedCookiesGtk::AddExceptions(GtkTreeSelection* selection, |
| 481 gtk_tree::TreeAdapter* adapter, | 483 gtk_tree::TreeAdapter* adapter, |
| 482 ContentSetting setting) { | 484 ContentSetting setting) { |
| 483 GtkTreeModel* model; | 485 GtkTreeModel* model; |
| 484 GList* paths = | 486 GList* paths = |
| 485 gtk_tree_selection_get_selected_rows(selection, &model); | 487 gtk_tree_selection_get_selected_rows(selection, &model); |
| 486 string16 last_domain_name; | 488 string16 last_domain_name; |
| 487 bool multiple_domains_added = false; | 489 bool multiple_domains_added = false; |
| 488 for (GList* item = paths; item; item = item->next) { | 490 for (GList* item = paths; item; item = item->next) { |
| 489 GtkTreeIter iter; | 491 GtkTreeIter iter; |
| 490 gtk_tree_model_get_iter( | 492 gtk_tree_model_get_iter( |
| 491 model, &iter, reinterpret_cast<GtkTreePath*>(item->data)); | 493 model, &iter, reinterpret_cast<GtkTreePath*>(item->data)); |
| 492 CookieTreeNode* node = | 494 CookieTreeNode* node = |
| 493 static_cast<CookieTreeNode*>(adapter->GetNode(&iter)); | 495 static_cast<CookieTreeNode*>(adapter->GetNode(&iter)); |
| 494 if (node->GetDetailedInfo().node_type != | 496 if (node->GetDetailedInfo().node_type != |
| 495 CookieTreeNode::DetailedInfo::TYPE_ORIGIN) | 497 CookieTreeNode::DetailedInfo::TYPE_ORIGIN) |
| 496 continue; | 498 continue; |
| 497 CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>( | 499 CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>( |
| 498 node); | 500 node); |
| 499 if (origin_node->CanCreateContentException()) { | 501 if (origin_node->CanCreateContentException()) { |
| 500 if (!last_domain_name.empty()) | 502 if (!last_domain_name.empty()) |
| 501 multiple_domains_added = true; | 503 multiple_domains_added = true; |
| 502 last_domain_name = origin_node->GetTitle(); | 504 last_domain_name = origin_node->GetTitle(); |
| 503 Profile* profile = wrapper_->profile(); | 505 Profile* profile = tab_contents_->profile(); |
| 504 origin_node->CreateContentException( | 506 origin_node->CreateContentException( |
| 505 CookieSettings::Factory::GetForProfile(profile), setting); | 507 CookieSettings::Factory::GetForProfile(profile), setting); |
| 506 } | 508 } |
| 507 } | 509 } |
| 508 g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL); | 510 g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL); |
| 509 g_list_free(paths); | 511 g_list_free(paths); |
| 510 if (last_domain_name.empty()) { | 512 if (last_domain_name.empty()) { |
| 511 gtk_widget_hide(infobar_); | 513 gtk_widget_hide(infobar_); |
| 512 } else { | 514 } else { |
| 513 gtk_label_set_text( | 515 gtk_label_set_text( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); | 550 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); |
| 549 gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE); | 551 gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE); |
| 550 g_signal_handlers_unblock_by_func( | 552 g_signal_handlers_unblock_by_func( |
| 551 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); | 553 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); |
| 552 } | 554 } |
| 553 | 555 |
| 554 void CollectedCookiesGtk::OnTreeViewSelectionChange(GtkWidget* selection) { | 556 void CollectedCookiesGtk::OnTreeViewSelectionChange(GtkWidget* selection) { |
| 555 EnableControls(); | 557 EnableControls(); |
| 556 ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_))); | 558 ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_))); |
| 557 } | 559 } |
| OLD | NEW |