| 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/gtk_custom_menu_item.h" | 5 #include "chrome/browser/ui/gtk/gtk_custom_menu_item.h" |
| 6 | 6 |
| 7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
| 8 #include "chrome/browser/ui/gtk/gtk_custom_menu.h" | 8 #include "chrome/browser/ui/gtk/gtk_custom_menu.h" |
| 9 #include "ui/base/gtk/gtk_compat.h" | 9 #include "ui/base/gtk/gtk_compat.h" |
| 10 | 10 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 // When GtkButtons set the label text, they rebuild the widget hierarchy each | 88 // When GtkButtons set the label text, they rebuild the widget hierarchy each |
| 89 // and every time. Therefore, we can't just fish out the label from the button | 89 // and every time. Therefore, we can't just fish out the label from the button |
| 90 // and set some properties; we have to create this callback function that | 90 // and set some properties; we have to create this callback function that |
| 91 // listens on the button's "notify" signal, which is emitted right after the | 91 // listens on the button's "notify" signal, which is emitted right after the |
| 92 // label has been (re)created. (Label values can change dynamically.) | 92 // label has been (re)created. (Label values can change dynamically.) |
| 93 static void on_button_label_set(GObject* object) { | 93 static void on_button_label_set(GObject* object) { |
| 94 GtkButton* button = GTK_BUTTON(object); | 94 GtkButton* button = GTK_BUTTON(object); |
| 95 gtk_widget_set_sensitive(GTK_BIN(button)->child, FALSE); | 95 GtkWidget* child = gtk_bin_get_child(GTK_BIN(button)); |
| 96 gtk_misc_set_padding(GTK_MISC(GTK_BIN(button)->child), 2, 0); | 96 gtk_widget_set_sensitive(child, FALSE); |
| 97 gtk_misc_set_padding(GTK_MISC(child), 2, 0); |
| 97 } | 98 } |
| 98 | 99 |
| 99 static void gtk_custom_menu_item_finalize(GObject *object); | 100 static void gtk_custom_menu_item_finalize(GObject *object); |
| 100 static gint gtk_custom_menu_item_expose(GtkWidget* widget, | 101 static gint gtk_custom_menu_item_expose(GtkWidget* widget, |
| 101 GdkEventExpose* event); | 102 GdkEventExpose* event); |
| 102 static gboolean gtk_custom_menu_item_hbox_expose(GtkWidget* widget, | 103 static gboolean gtk_custom_menu_item_hbox_expose(GtkWidget* widget, |
| 103 GdkEventExpose* event, | 104 GdkEventExpose* event, |
| 104 GtkCustomMenuItem* menu_item); | 105 GtkCustomMenuItem* menu_item); |
| 105 static void gtk_custom_menu_item_select(GtkItem *item); | 106 static void gtk_custom_menu_item_select(GtkItem *item); |
| 106 static void gtk_custom_menu_item_deselect(GtkItem *item); | 107 static void gtk_custom_menu_item_deselect(GtkItem *item); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 if (GTK_IS_BUTTON(current_item->data)) { | 255 if (GTK_IS_BUTTON(current_item->data)) { |
| 255 // Check to see if this is the last button in a run. | 256 // Check to see if this is the last button in a run. |
| 256 GList* next_item = g_list_next(current_item); | 257 GList* next_item = g_list_next(current_item); |
| 257 if (next_item && GTK_IS_BUTTON(next_item->data)) { | 258 if (next_item && GTK_IS_BUTTON(next_item->data)) { |
| 258 GtkWidget* current_button = GTK_WIDGET(current_item->data); | 259 GtkWidget* current_button = GTK_WIDGET(current_item->data); |
| 259 GtkAllocation button_allocation; | 260 GtkAllocation button_allocation; |
| 260 gtk_widget_get_allocation(current_button, &button_allocation); | 261 gtk_widget_get_allocation(current_button, &button_allocation); |
| 261 GtkAllocation child_alloc; | 262 GtkAllocation child_alloc; |
| 262 gtk_widget_get_allocation(gtk_bin_get_child(GTK_BIN(current_button)), | 263 gtk_widget_get_allocation(gtk_bin_get_child(GTK_BIN(current_button)), |
| 263 &child_alloc); | 264 &child_alloc); |
| 264 int half_offset = widget->style->xthickness / 2; | 265 GtkStyle* style = gtk_widget_get_style(widget); |
| 265 gtk_paint_vline(gtk_widget_get_style(widget), | 266 int half_offset = style->xthickness / 2; |
| 267 gtk_paint_vline(style, |
| 266 gtk_widget_get_window(widget), | 268 gtk_widget_get_window(widget), |
| 267 gtk_widget_get_state(current_button), | 269 gtk_widget_get_state(current_button), |
| 268 &event->area, widget, "button", | 270 &event->area, widget, "button", |
| 269 child_alloc.y, | 271 child_alloc.y, |
| 270 child_alloc.y + child_alloc.height, | 272 child_alloc.y + child_alloc.height, |
| 271 button_allocation.x + | 273 button_allocation.x + |
| 272 button_allocation.width - half_offset); | 274 button_allocation.width - half_offset); |
| 273 } | 275 } |
| 274 } | 276 } |
| 275 } | 277 } |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 gpointer callback_data) { | 484 gpointer callback_data) { |
| 483 // Even though we're filtering |all_widgets| on GTK_IS_BUTTON(), this isn't | 485 // Even though we're filtering |all_widgets| on GTK_IS_BUTTON(), this isn't |
| 484 // equivalent to |button_widgets| because we also want the button-labels. | 486 // equivalent to |button_widgets| because we also want the button-labels. |
| 485 for (GList* i = menu_item->all_widgets; i && GTK_IS_BUTTON(i->data); | 487 for (GList* i = menu_item->all_widgets; i && GTK_IS_BUTTON(i->data); |
| 486 i = g_list_next(i)) { | 488 i = g_list_next(i)) { |
| 487 if (GTK_IS_BUTTON(i->data)) { | 489 if (GTK_IS_BUTTON(i->data)) { |
| 488 callback(GTK_WIDGET(i->data), callback_data); | 490 callback(GTK_WIDGET(i->data), callback_data); |
| 489 } | 491 } |
| 490 } | 492 } |
| 491 } | 493 } |
| OLD | NEW |