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

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

Issue 40139: Put the dropdown menu button on the linux download shelf.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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
Index: chrome/browser/gtk/download_item_gtk.cc
===================================================================
--- chrome/browser/gtk/download_item_gtk.cc (revision 10937)
+++ chrome/browser/gtk/download_item_gtk.cc (working copy)
@@ -12,10 +12,22 @@
#include "grit/theme_resources.h"
-NineBox* DownloadItemGtk::nine_box_normal_ = NULL;
-NineBox* DownloadItemGtk::nine_box_prelight_ = NULL;
-NineBox* DownloadItemGtk::nine_box_active_ = NULL;
+namespace {
+// The width of the |menu_button_| widget. It has to be at least as wide as the
+// bitmap that we use to draw it, i.e. 16, but can be more.
+const int kMenuButtonWidth = 16;
+
+}
Dean McNamee 2009/03/05 14:16:01 // namespace
+
+NineBox* DownloadItemGtk::body_nine_box_normal_ = NULL;
+NineBox* DownloadItemGtk::body_nine_box_prelight_ = NULL;
+NineBox* DownloadItemGtk::body_nine_box_active_ = NULL;
+
+NineBox* DownloadItemGtk::menu_nine_box_normal_ = NULL;
+NineBox* DownloadItemGtk::menu_nine_box_prelight_ = NULL;
+NineBox* DownloadItemGtk::menu_nine_box_active_ = NULL;
+
DownloadItemGtk::DownloadItemGtk(BaseDownloadItemModel* download_model,
GtkWidget* parent_shelf)
: download_model_(download_model),
@@ -25,21 +37,29 @@
body_ = gtk_button_new();
gtk_widget_set_app_paintable(body_, TRUE);
g_signal_connect(G_OBJECT(body_), "expose-event",
- G_CALLBACK(OnBodyExpose), this);
-
- GtkWidget* label = gtk_label_new(download_model->download()->file_name()
+ G_CALLBACK(OnExpose), this);
+ GTK_WIDGET_UNSET_FLAGS(body_, GTK_CAN_FOCUS);
+ GtkWidget* label = gtk_label_new(download_model->download()->GetFileName()
Dean McNamee 2009/03/05 14:16:01 I would have wrapped this at the first ( if it's p
.value().c_str());
gtk_container_add(GTK_CONTAINER(body_), label);
+ menu_button_ = gtk_button_new();
+ gtk_widget_set_app_paintable(menu_button_, TRUE);
+ GTK_WIDGET_UNSET_FLAGS(menu_button_, GTK_CAN_FOCUS);
+ g_signal_connect(G_OBJECT(menu_button_), "expose-event",
+ G_CALLBACK(OnExpose), this);
+ gtk_widget_set_size_request(menu_button_, kMenuButtonWidth, 0);
+
hbox_ = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_), body_, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox_), menu_button_, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(parent_shelf), hbox_, FALSE, FALSE, 0);
gtk_widget_show_all(hbox_);
}
// static
void DownloadItemGtk::InitNineBoxes() {
- if (nine_box_normal_)
+ if (body_nine_box_normal_)
return;
GdkPixbuf* images[9];
@@ -55,7 +75,7 @@
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM);
- nine_box_normal_ = new NineBox(images);
+ body_nine_box_normal_ = new NineBox(images);
i = 0;
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_H);
@@ -67,7 +87,7 @@
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_H);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_H);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_H);
- nine_box_prelight_ = new NineBox(images);
+ body_nine_box_prelight_ = new NineBox(images);
i = 0;
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_TOP_P);
@@ -79,19 +99,57 @@
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM_P);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM_P);
images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_P);
- nine_box_active_ = new NineBox(images);
+ body_nine_box_active_ = new NineBox(images);
+
+ i = 0;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ menu_nine_box_normal_ = new NineBox(images);
+
+ i = 0;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_H);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_H);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_H);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ menu_nine_box_prelight_ = new NineBox(images);
+
+ i = 0;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_TOP_P);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_P);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ images[i++] = rb.LoadPixbuf(IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_P);
+ images[i++] = NULL;
+ images[i++] = NULL;
+ menu_nine_box_active_ = new NineBox(images);
}
// static
-gboolean DownloadItemGtk::OnBodyExpose(GtkWidget* widget, GdkEventExpose* e,
- DownloadItemGtk* download_item) {
+gboolean DownloadItemGtk::OnExpose(GtkWidget* widget, GdkEventExpose* e,
+ DownloadItemGtk* download_item) {
NineBox* nine_box = NULL;
+ // If true, this widget is |body_|, otherwise it is |menu_button_|.
+ bool is_body = widget == download_item->body_;
if (GTK_WIDGET_STATE(widget) == GTK_STATE_PRELIGHT)
- nine_box = nine_box_prelight_;
+ nine_box = is_body ? body_nine_box_prelight_ : menu_nine_box_prelight_;
else if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
- nine_box = nine_box_active_;
+ nine_box = is_body ? body_nine_box_active_ : menu_nine_box_active_;
else
- nine_box = nine_box_normal_;
+ nine_box = is_body ? body_nine_box_normal_ : menu_nine_box_normal_;
GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
true, // alpha
@@ -110,11 +168,10 @@
gdk_pixbuf_unref(pixbuf);
- gtk_container_propagate_expose(GTK_CONTAINER(widget),
- gtk_bin_get_child(GTK_BIN(widget)),
- e);
+ GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
+ if (child)
+ gtk_container_propagate_expose(GTK_CONTAINER(widget), child, e);
return TRUE;
}
-

Powered by Google App Engine
This is Rietveld 408576698