aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog5
-rw-r--r--e-util/e-gtk-utils.c49
-rw-r--r--e-util/e-gtk-utils.h2
3 files changed, 56 insertions, 0 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index c7c91c1a27..fd727c9505 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-14 Not Zed <NotZed@Ximian.com>
+
+ * e-gtk-utils.c (e_gtk_button_new_with_icon): Utility function to
+ create a button with a stock icon.
+
2003-04-09 Jeffrey Stedfast <fejj@ximian.com>
* e-host-utils.c (e_gethostbyaddr_r): Change the 'len' argument to
diff --git a/e-util/e-gtk-utils.c b/e-util/e-gtk-utils.c
index 9b9c7f99b7..345f092e8d 100644
--- a/e-util/e-gtk-utils.c
+++ b/e-util/e-gtk-utils.c
@@ -28,6 +28,12 @@
#include <gtk/gtklayout.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwidget.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkalignment.h>
#include <gdk/gdkx.h>
@@ -167,3 +173,46 @@ e_make_widget_backing_stored (GtkWidget *widget)
{
g_signal_connect (widget, "realize", G_CALLBACK (widget_realize_callback_for_backing_store), NULL);
}
+
+
+/**
+ * e_gtk_button_new_with_icon:
+ * @text: The mnemonic text for the label.
+ * @stock: The name of the stock item to get the icon from.
+ *
+ * Create a gtk button with a custom label and a stock icon.
+ *
+ *
+ * Return value: The widget.
+ **/
+GtkWidget *
+e_gtk_button_new_with_icon(const char *text, const char *stock)
+{
+ GtkWidget *button, *label;
+ GtkStockItem item;
+
+ button = gtk_button_new();
+ label = gtk_label_new_with_mnemonic(text);
+ gtk_label_set_mnemonic_widget((GtkLabel *)label, button);
+
+ if (gtk_stock_lookup(stock, &item)) {
+ GtkWidget *image, *hbox, *align;
+
+ printf("new stock button '%s' label '%s'\n", stock, text);
+
+ image = gtk_image_new_from_stock(stock, GTK_ICON_SIZE_BUTTON);
+ hbox = gtk_hbox_new(FALSE, 2);
+ align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
+ gtk_box_pack_start((GtkBox *)hbox, image, FALSE, FALSE, 0);
+ gtk_box_pack_end((GtkBox *)hbox, label, FALSE, FALSE, 0);
+ gtk_container_add((GtkContainer *)align, hbox);
+ gtk_container_add((GtkContainer *)button, align);
+ gtk_widget_show_all(align);
+ } else {
+ gtk_misc_set_alignment((GtkMisc *)label, 0.5, 0.5);
+ gtk_container_add((GtkContainer *)button, label);
+ gtk_widget_show(label);
+ }
+
+ return button;
+}
diff --git a/e-util/e-gtk-utils.h b/e-util/e-gtk-utils.h
index 19d208ffec..cebb5b757d 100644
--- a/e-util/e-gtk-utils.h
+++ b/e-util/e-gtk-utils.h
@@ -44,4 +44,6 @@ void e_signal_connect_full_while_alive (void *instance,
void e_make_widget_backing_stored (GtkWidget *widget);
+GtkWidget *e_gtk_button_new_with_icon(const char *text, const char *stock);
+
#endif