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:
committed by
Chris Lahey
parent
660118fcbe
commit
a020c2bd2f
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user