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

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

Issue 160276: mole expand/collapse API (Closed)
Patch Set: fixed a couple of crashers 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 unified diff | Download patch
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/extension_shelf_gtk.h" 5 #include "chrome/browser/gtk/extension_shelf_gtk.h"
6 6
7 #include "chrome/browser/browser.h" 7 #include "chrome/browser/browser.h"
8 #include "chrome/browser/gtk/browser_window_gtk.h" 8 #include "chrome/browser/gtk/browser_window_gtk.h"
9 #include "chrome/browser/gtk/gtk_theme_provider.h" 9 #include "chrome/browser/gtk/gtk_theme_provider.h"
10 #include "chrome/browser/gtk/nine_box.h" 10 #include "chrome/browser/gtk/nine_box.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 } 60 }
61 61
62 void ExtensionShelfGtk::Toolstrip::Init() { 62 void ExtensionShelfGtk::Toolstrip::Init() {
63 label_.Own(gtk_label_new(extension_name_.c_str())); 63 label_.Own(gtk_label_new(extension_name_.c_str()));
64 gtk_widget_show_all(label_.get()); 64 gtk_widget_show_all(label_.get());
65 } 65 }
66 66
67 ExtensionShelfGtk::ExtensionShelfGtk(Profile* profile, Browser* browser) 67 ExtensionShelfGtk::ExtensionShelfGtk(Profile* profile, Browser* browser)
68 : browser_(browser), 68 : browser_(browser),
69 theme_provider_(GtkThemeProvider::GetFrom(profile)), 69 theme_provider_(GtkThemeProvider::GetFrom(profile)),
70 model_(new ExtensionShelfModel(browser)) { 70 model_(browser->extension_shelf_model()) {
71 Init(profile); 71 Init(profile);
72 72
73 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, 73 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED,
74 NotificationService::AllSources()); 74 NotificationService::AllSources());
75 } 75 }
76 76
77 ExtensionShelfGtk::~ExtensionShelfGtk() { 77 ExtensionShelfGtk::~ExtensionShelfGtk() {
78 model_->RemoveObserver(this); 78 if (model_)
79 model_->RemoveObserver(this);
79 event_box_.Destroy(); 80 event_box_.Destroy();
80 } 81 }
81 82
82 void ExtensionShelfGtk::AddShelfToBox(GtkWidget* box) { 83 void ExtensionShelfGtk::AddShelfToBox(GtkWidget* box) {
83 gtk_box_pack_end(GTK_BOX(box), event_box_.get(), FALSE, FALSE, 0); 84 gtk_box_pack_end(GTK_BOX(box), event_box_.get(), FALSE, FALSE, 0);
84 } 85 }
85 86
86 void ExtensionShelfGtk::Show() { 87 void ExtensionShelfGtk::Show() {
87 gtk_widget_show_all(event_box_.get()); 88 gtk_widget_show_all(event_box_.get());
88 } 89 }
(...skipping 23 matching lines...) Expand all
112 AdjustHeight(); 113 AdjustHeight();
113 } 114 }
114 115
115 void ExtensionShelfGtk::ToolstripMoved(ExtensionHost* host, 116 void ExtensionShelfGtk::ToolstripMoved(ExtensionHost* host,
116 int from_index, 117 int from_index,
117 int to_index) { 118 int to_index) {
118 // TODO(phajdan.jr): Implement reordering toolstrips. 119 // TODO(phajdan.jr): Implement reordering toolstrips.
119 AdjustHeight(); 120 AdjustHeight();
120 } 121 }
121 122
122 void ExtensionShelfGtk::ToolstripChangedAt(ExtensionHost* host, 123 void ExtensionShelfGtk::ToolstripChanged(
123 int index) { 124 ExtensionShelfModel::iterator toolstrip) {
124 // TODO(phajdan.jr): Implement changing toolstrips. 125 // TODO(phajdan.jr): Implement changing toolstrips.
125 AdjustHeight(); 126 AdjustHeight();
126 } 127 }
127 128
128 void ExtensionShelfGtk::ExtensionShelfEmpty() { 129 void ExtensionShelfGtk::ExtensionShelfEmpty() {
129 AdjustHeight(); 130 AdjustHeight();
130 } 131 }
131 132
132 void ExtensionShelfGtk::ShelfModelReloaded() { 133 void ExtensionShelfGtk::ShelfModelReloaded() {
133 for (std::set<Toolstrip*>::iterator iter = toolstrips_.begin(); 134 for (std::set<Toolstrip*>::iterator iter = toolstrips_.begin();
134 iter != toolstrips_.end(); ++iter) { 135 iter != toolstrips_.end(); ++iter) {
135 (*iter)->RemoveToolstripFromBox(shelf_hbox_); 136 (*iter)->RemoveToolstripFromBox(shelf_hbox_);
136 delete *iter; 137 delete *iter;
137 } 138 }
138 toolstrips_.clear(); 139 toolstrips_.clear();
139 LoadFromModel(); 140 LoadFromModel();
140 } 141 }
141 142
143 void ExtensionShelfGtk::ShelfModelDeleting() {
144 for (std::set<Toolstrip*>::iterator iter = toolstrips_.begin();
145 iter != toolstrips_.end(); ++iter) {
146 (*iter)->RemoveToolstripFromBox(shelf_hbox_);
147 delete *iter;
148 }
149 toolstrips_.clear();
150
151 model_->RemoveObserver(this);
152 model_ = NULL;
153 }
154
142 void ExtensionShelfGtk::Init(Profile* profile) { 155 void ExtensionShelfGtk::Init(Profile* profile) {
143 event_box_.Own(gtk_event_box_new()); 156 event_box_.Own(gtk_event_box_new());
144 157
145 shelf_hbox_ = gtk_hbox_new(FALSE, 0); 158 shelf_hbox_ = gtk_hbox_new(FALSE, 0);
146 gtk_widget_set_app_paintable(shelf_hbox_, TRUE); 159 gtk_widget_set_app_paintable(shelf_hbox_, TRUE);
147 g_signal_connect(G_OBJECT(shelf_hbox_), "expose-event", 160 g_signal_connect(G_OBJECT(shelf_hbox_), "expose-event",
148 G_CALLBACK(&OnHBoxExpose), this); 161 G_CALLBACK(&OnHBoxExpose), this);
149 gtk_container_add(GTK_CONTAINER(event_box_.get()), shelf_hbox_); 162 gtk_container_add(GTK_CONTAINER(event_box_.get()), shelf_hbox_);
150 163
151 LoadFromModel(); 164 LoadFromModel();
(...skipping 28 matching lines...) Expand all
180 } else { 193 } else {
181 gtk_widget_set_size_request(event_box_.get(), -1, kShelfHeight); 194 gtk_widget_set_size_request(event_box_.get(), -1, kShelfHeight);
182 Show(); 195 Show();
183 } 196 }
184 } 197 }
185 198
186 void ExtensionShelfGtk::LoadFromModel() { 199 void ExtensionShelfGtk::LoadFromModel() {
187 DCHECK(toolstrips_.empty()); 200 DCHECK(toolstrips_.empty());
188 int count = model_->count(); 201 int count = model_->count();
189 for (int i = 0; i < count; ++i) 202 for (int i = 0; i < count; ++i)
190 ToolstripInsertedAt(model_->ToolstripAt(i), i); 203 ToolstripInsertedAt(model_->ToolstripAt(i).host, i);
191 AdjustHeight(); 204 AdjustHeight();
192 } 205 }
193 206
194 ExtensionShelfGtk::Toolstrip* ExtensionShelfGtk::ToolstripAtIndex(int index) { 207 ExtensionShelfGtk::Toolstrip* ExtensionShelfGtk::ToolstripAtIndex(int index) {
195 return static_cast<Toolstrip*>(model_->ToolstripDataAt(index)); 208 return static_cast<Toolstrip*>(model_->ToolstripAt(index).data);
196 } 209 }
197 210
198 // static 211 // static
199 gboolean ExtensionShelfGtk::OnHBoxExpose(GtkWidget* widget, 212 gboolean ExtensionShelfGtk::OnHBoxExpose(GtkWidget* widget,
200 GdkEventExpose* event, 213 GdkEventExpose* event,
201 ExtensionShelfGtk* bar) { 214 ExtensionShelfGtk* bar) {
202 // Paint the background theme image. 215 // Paint the background theme image.
203 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); 216 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
204 cairo_rectangle(cr, event->area.x, event->area.y, 217 cairo_rectangle(cr, event->area.x, event->area.y,
205 event->area.width, event->area.height); 218 event->area.width, event->area.height);
206 cairo_clip(cr); 219 cairo_clip(cr);
207 bar->InitBackground(); 220 bar->InitBackground();
208 bar->background_ninebox_->RenderTopCenterStrip( 221 bar->background_ninebox_->RenderTopCenterStrip(
209 cr, event->area.x, event->area.y, 222 cr, event->area.x, event->area.y,
210 event->area.x + event->area.width); 223 event->area.x + event->area.width);
211 cairo_destroy(cr); 224 cairo_destroy(cr);
212 225
213 return FALSE; // Propagate expose to children. 226 return FALSE; // Propagate expose to children.
214 } 227 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/extension_shelf_gtk.h ('k') | chrome/browser/views/extensions/extension_shelf.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698