summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArturo Espinosa <unammx@src.gnome.org>1997-12-23 00:35:48 +0000
committerArturo Espinosa <unammx@src.gnome.org>1997-12-23 00:35:48 +0000
commitb44565f3e4730ada4d9d238707fc0d882d197092 (patch)
treee381d0e26a433ffb582f607a021a8ba1fb7793d4
parent4da7b2f2efee93706132eb79a886fd78126787bf (diff)
downloadgtk+-b44565f3e4730ada4d9d238707fc0d882d197092.tar.gz
Demo works fine. I have to add the missing functions for setting the toolbar's
parameters on the fly. - Federico
-rw-r--r--gtk/gtktoolbar.c51
-rw-r--r--gtk/gtktoolbar.h14
-rw-r--r--gtk/testgtk.c76
-rw-r--r--tests/testgtk.c76
4 files changed, 211 insertions, 6 deletions
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index b295c0ce41..55c20480a1 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -46,6 +46,9 @@ static void gtk_toolbar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_toolbar_add (GtkContainer *container,
GtkWidget *widget);
+static void gtk_toolbar_foreach (GtkContainer *container,
+ GtkCallback callback,
+ gpointer callback_data);
static GtkContainerClass *parent_class;
@@ -93,6 +96,7 @@ gtk_toolbar_class_init(GtkToolbarClass *class)
widget_class->size_allocate = gtk_toolbar_size_allocate;
container_class->add = gtk_toolbar_add;
+ container_class->foreach = gtk_toolbar_foreach;
}
static void
@@ -105,6 +109,7 @@ gtk_toolbar_init(GtkToolbar *toolbar)
toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
toolbar->style = GTK_TOOLBAR_ICONS;
toolbar->space_size = DEFAULT_SPACE_SIZE;
+ toolbar->tooltips = gtk_tooltips_new();
}
GtkWidget *
@@ -134,6 +139,8 @@ gtk_toolbar_destroy(GtkObject *object)
toolbar = GTK_TOOLBAR(object);
+ gtk_tooltips_unref(toolbar->tooltips); /* XXX: do I have to unref the tooltips? */
+
for (children = toolbar->children; children; children = children->next) {
child = children->data;
@@ -313,22 +320,51 @@ gtk_toolbar_add(GtkContainer *container,
g_warning("gtk_toolbar_add: use gtk_toolbar_add_item() instead!");
}
+static void
+gtk_toolbar_foreach(GtkContainer *container,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ GtkToolbar *toolbar;
+ GList *children;
+ Child *child;
+
+ g_return_if_fail(container != NULL);
+ g_return_if_fail(GTK_IS_TOOLBAR(container));
+ g_return_if_fail(callback != NULL);
+
+ toolbar = GTK_TOOLBAR(container);
+
+ for (children = toolbar->children; children; children = children->next) {
+ child = children->data;
+
+ if (child)
+ (*callback) (child->button, callback_data);
+ }
+}
+
void
gtk_toolbar_append_item(GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
- GtkPixmap *icon)
+ GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data)
{
- gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, toolbar->num_children);
+ gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon,
+ callback, user_data, toolbar->num_children);
}
void
gtk_toolbar_prepend_item(GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
- GtkPixmap *icon)
+ GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data)
{
- gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon, 0);
+ gtk_toolbar_insert_item(toolbar, text, tooltip_text, icon,
+ callback, user_data, 0);
}
void
@@ -336,6 +372,8 @@ gtk_toolbar_insert_item(GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data,
gint position)
{
Child *child;
@@ -348,6 +386,10 @@ gtk_toolbar_insert_item(GtkToolbar *toolbar,
child->button = gtk_button_new();
+ if (callback)
+ gtk_signal_connect(GTK_OBJECT(child->button), "clicked",
+ callback, user_data);
+
if (text)
child->label = gtk_label_new(text);
else
@@ -432,6 +474,7 @@ gtk_toolbar_insert_space(GtkToolbar *toolbar,
/* NULL child means it is a space in the toolbar, rather than a button */
toolbar->children = g_list_insert(toolbar->children, NULL, position);
+ toolbar->num_children++;
if (GTK_WIDGET_VISIBLE(toolbar))
gtk_widget_queue_resize(GTK_WIDGET(toolbar));
diff --git a/gtk/gtktoolbar.h b/gtk/gtktoolbar.h
index abd7fcf21a..5b4bbf34e5 100644
--- a/gtk/gtktoolbar.h
+++ b/gtk/gtktoolbar.h
@@ -25,6 +25,8 @@
#include <gtk/gtkcontainer.h>
#include <gtk/gtkenums.h>
#include <gtk/gtkpixmap.h>
+#include <gtk/gtksignal.h>
+#include <gtk/gtktooltips.h>
#ifdef __cplusplus
@@ -50,6 +52,8 @@ struct _GtkToolbar
GtkToolbarStyle style;
gint space_size; /* big optional space between buttons */
+ GtkTooltips *tooltips;
+
gint child_maxw;
gint child_maxh;
};
@@ -67,15 +71,21 @@ GtkWidget *gtk_toolbar_new (GtkOrientation orientation,
void gtk_toolbar_append_item (GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
- GtkPixmap *icon);
+ GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data);
void gtk_toolbar_prepend_item (GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
- GtkPixmap *icon);
+ GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data);
void gtk_toolbar_insert_item (GtkToolbar *toolbar,
const char *text,
const char *tooltip_text,
GtkPixmap *icon,
+ GtkSignalFunc callback,
+ gpointer user_data,
gint position);
void gtk_toolbar_append_space (GtkToolbar *toolbar);
void gtk_toolbar_prepend_space (GtkToolbar *toolbar);
diff --git a/gtk/testgtk.c b/gtk/testgtk.c
index dfb7958c34..98ae0ad686 100644
--- a/gtk/testgtk.c
+++ b/gtk/testgtk.c
@@ -548,6 +548,81 @@ create_button_box ()
gtk_widget_destroy (window);
}
+GtkWidget *
+new_pixmap (char *filename, GdkWindow *window, GdkColor *background)
+{
+ GtkWidget *wpixmap;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+
+ pixmap = gdk_pixmap_create_from_xpm (window, &mask,
+ background,
+ "test.xpm");
+ wpixmap = gtk_pixmap_new (pixmap, mask);
+
+ return wpixmap;
+}
+
+void
+create_toolbar (void)
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *toolbar;
+
+ if (!window)
+ {
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC (destroy_window),
+ &window);
+ gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+ GTK_SIGNAL_FUNC (destroy_window),
+ &window);
+
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+ gtk_widget_realize (window);
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "New", "New document",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Open", "Open existing",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Close", "Close current document",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Undo", "Undo screw-up",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Redo", "Redo not-screwup-after-all",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+
+ gtk_container_add (GTK_CONTAINER (window), toolbar);
+ gtk_widget_show (toolbar);
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
+}
+
void
create_handle_box ()
{
@@ -3278,6 +3353,7 @@ create_main_window ()
{ "check buttons", create_check_buttons },
{ "radio buttons", create_radio_buttons },
{ "button box", create_button_box },
+ { "toolbar", create_toolbar },
{ "handle box", create_handle_box },
{ "reparent", create_reparent },
{ "pixmap", create_pixmap },
diff --git a/tests/testgtk.c b/tests/testgtk.c
index dfb7958c34..98ae0ad686 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -548,6 +548,81 @@ create_button_box ()
gtk_widget_destroy (window);
}
+GtkWidget *
+new_pixmap (char *filename, GdkWindow *window, GdkColor *background)
+{
+ GtkWidget *wpixmap;
+ GdkPixmap *pixmap;
+ GdkBitmap *mask;
+
+ pixmap = gdk_pixmap_create_from_xpm (window, &mask,
+ background,
+ "test.xpm");
+ wpixmap = gtk_pixmap_new (pixmap, mask);
+
+ return wpixmap;
+}
+
+void
+create_toolbar (void)
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *toolbar;
+
+ if (!window)
+ {
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC (destroy_window),
+ &window);
+ gtk_signal_connect (GTK_OBJECT (window), "delete_event",
+ GTK_SIGNAL_FUNC (destroy_window),
+ &window);
+
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+ gtk_widget_realize (window);
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "New", "New document",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Open", "Open existing",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Close", "Close current document",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Undo", "Undo screw-up",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar),
+ "Redo", "Redo not-screwup-after-all",
+ GTK_PIXMAP (new_pixmap ("test.xpm", window->window,
+ &window->style->bg[GTK_STATE_NORMAL])),
+ NULL, NULL);
+
+ gtk_container_add (GTK_CONTAINER (window), toolbar);
+ gtk_widget_show (toolbar);
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
+}
+
void
create_handle_box ()
{
@@ -3278,6 +3353,7 @@ create_main_window ()
{ "check buttons", create_check_buttons },
{ "radio buttons", create_radio_buttons },
{ "button box", create_button_box },
+ { "toolbar", create_toolbar },
{ "handle box", create_handle_box },
{ "reparent", create_reparent },
{ "pixmap", create_pixmap },