Added widgets/e-option-menu.lo.

2002-03-25  Christopher James Lahey  <clahey@ximian.com>

	* gal/Makefile.am (libgal_la_LIBADD): Added
	widgets/e-option-menu.lo.

	* gal/util/e-util.c, gal/util/e-util.h (e_strdupv): Copied this
	function from glib2.
	(GET_STRING_ARRAY_FROM_ELLIPSIS,
	GET_DUPLICATED_STRING_ARRAY_FROM_ELLIPSIS): Added these macros to
	automate getting a NULL terminated array off of the stack.

	* gal/widgets/Makefile.am (libwidgets_la_SOURCES): Added
	e-option-menu.c.
	(libwidgetsinclude_HEADERS): Added e-option-menu.h.

	* gal/widgets/e-canvas.c (e_canvas_class_init): Reformatted this
	function.

	* gal/widgets/e-gui-utils.c, gal/widgets/e-gui-utils.h
	(e_glade_xml_connect_widget, e_glade_xml_set_sensitive): Two new
	functions to automate pulling a widget from a GladeXML and either
	connecting a signal or setting the sensitivity.

	* gal/widgets/e-option-menu.c, gal/widgets/e-option-menu.h: New
	class to simplify the interface to GtkOptionMenu.

svn path=/trunk/; revision=16246
This commit is contained in:
Christopher James Lahey
2002-03-25 19:33:20 +00:00
committed by Chris Lahey
parent 660118fcbe
commit a020c2bd2f
5 changed files with 130 additions and 28 deletions

View File

@ -1592,3 +1592,29 @@ e_strdup_append_strings (gchar *first_string, ...)
return buffer;
}
gchar **
e_strdupv (const gchar **str_array)
{
if (str_array) {
gint i;
gchar **retval;
i = 0;
while (str_array[i])
i++;
retval = g_new (gchar*, i + 1);
i = 0;
while (str_array[i]) {
retval[i] = g_strdup (str_array[i]);
i++;
}
retval[i] = NULL;
return retval;
} else {
return NULL;
}
}

View File

@ -75,6 +75,40 @@ GtkType l##_get_type(void)\
return type;\
}
#define GET_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
{ \
va_list args; \
int i; \
char *s; \
\
va_start (args, (first_string)); \
\
i = 0; \
for (s = (first_string); s; s = va_arg (args, char *)) \
i++; \
va_end (args); \
\
(labels) = g_new (char *, i + 1); \
\
va_start (args, (first_string)); \
i = 0; \
for (s = (first_string); s; s = va_arg (args, char *)) \
(labels)[i++] = s; \
\
va_end (args); \
(labels)[i] = NULL; \
}
#define GET_DUPLICATED_STRING_ARRAY_FROM_ELLIPSIS(labels, first_string) \
{ \
int i; \
GET_STRING_ARRAY_FROM_ELLIPSIS ((labels), (first_string)); \
for (i = 0; labels[i]; i++) \
labels[i] = g_strdup (labels[i]); \
}
#if 1
# define E_OBJECT_CLASS_ADD_SIGNALS(oc,sigs,last) \
gtk_object_class_add_signals (oc, sigs, last)
@ -118,6 +152,7 @@ void e_filename_make_safe (gcha
gchar *e_format_number (gint number);
gchar *e_format_number_float (gfloat number);
gboolean e_create_directory (gchar *directory);
gchar **e_strdupv (const gchar **str_array);
typedef int (*ESortCompareFunc) (const void *first,

View File

@ -90,25 +90,25 @@ e_canvas_class_init (ECanvasClass *klass)
GnomeCanvasClass *canvas_class;
GtkWidgetClass *widget_class;
object_class = (GtkObjectClass*) klass;
canvas_class = (GnomeCanvasClass *) klass;
widget_class = (GtkWidgetClass *) klass;
object_class = (GtkObjectClass*) klass;
canvas_class = (GnomeCanvasClass *) klass;
widget_class = (GtkWidgetClass *) klass;
parent_class = gtk_type_class (gnome_canvas_get_type ());
parent_class = gtk_type_class (gnome_canvas_get_type ());
object_class->destroy = e_canvas_destroy;
object_class->destroy = e_canvas_destroy;
widget_class->key_press_event = e_canvas_key;
widget_class->key_release_event = e_canvas_key;
widget_class->button_press_event = e_canvas_button;
widget_class->key_press_event = e_canvas_key;
widget_class->key_release_event = e_canvas_key;
widget_class->button_press_event = e_canvas_button;
widget_class->button_release_event = e_canvas_button;
widget_class->focus_in_event = e_canvas_focus_in;
widget_class->focus_out_event = e_canvas_focus_out;
widget_class->style_set = e_canvas_style_set;
widget_class->realize = e_canvas_realize;
widget_class->unrealize = e_canvas_unrealize;
widget_class->focus_in_event = e_canvas_focus_in;
widget_class->focus_out_event = e_canvas_focus_out;
widget_class->style_set = e_canvas_style_set;
widget_class->realize = e_canvas_realize;
widget_class->unrealize = e_canvas_unrealize;
klass->reflow = NULL;
klass->reflow = NULL;
e_canvas_signals [REFLOW] =
gtk_signal_new ("reflow",

View File

@ -229,3 +229,34 @@ e_container_focus_nth_entry(GtkContainer *container, int n)
if (data.widget)
gtk_widget_grab_focus(data.widget);
}
gboolean
e_glade_xml_connect_widget (GladeXML *gui, char *name, char *signal, GtkSignalFunc cb, gpointer closure)
{
GtkWidget *widget;
widget = glade_xml_get_widget (gui, name);
if (widget) {
gtk_signal_connect (GTK_OBJECT (widget), signal,
cb, closure);
return TRUE;
}
return FALSE;
}
gboolean
e_glade_xml_set_sensitive (GladeXML *gui, char *name, gboolean sensitive)
{
GtkWidget *widget;
widget = glade_xml_get_widget (gui, name);
if (widget) {
gtk_widget_set_sensitive (widget, sensitive);
return TRUE;
}
return FALSE;
}

View File

@ -29,23 +29,33 @@
#include <libgnomeui/gnome-messagebox.h>
#include <libgnome/gnome-defs.h>
#include <glade/glade-xml.h>
BEGIN_GNOME_DECLS
void e_popup_menu (GtkMenu *menu,
GdkEvent *event);
void e_auto_kill_popup_menu_on_hide (GtkMenu *menu);
void e_notice (GtkWindow *window,
const char *type,
const char *format,
...);
void e_container_foreach_leaf (GtkContainer *container,
GtkCallback callback,
gpointer closure);
void e_container_focus_nth_entry (GtkContainer *container,
int n);
gint e_container_change_tab_order (GtkContainer *container,
GList *widgets);
void e_popup_menu (GtkMenu *menu,
GdkEvent *event);
void e_auto_kill_popup_menu_on_hide (GtkMenu *menu);
void e_notice (GtkWindow *window,
const char *type,
const char *format,
...);
void e_container_foreach_leaf (GtkContainer *container,
GtkCallback callback,
gpointer closure);
void e_container_focus_nth_entry (GtkContainer *container,
int n);
gint e_container_change_tab_order (GtkContainer *container,
GList *widgets);
/* Returns TRUE on success. */
gboolean e_glade_xml_connect_widget (GladeXML *gui,
char *name,
char *signal,
GtkSignalFunc cb,
gpointer closure);
gboolean e_glade_xml_set_sensitive (GladeXML *gui,
char *name,
gboolean sensitive);
END_GNOME_DECLS