Mercurial > dwindows
diff gtk/dw.c @ 622:fb59f9eeeecd
SUpport for embedded mozilla/firefox widget
author | mhessling@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 07 Apr 2008 06:59:45 +0000 |
parents | c5e5671dec8f |
children | ad7a4335f1f1 |
line wrap: on
line diff
--- a/gtk/dw.c Sun Apr 06 10:25:36 2008 +0000 +++ b/gtk/dw.c Mon Apr 07 06:59:45 2008 +0000 @@ -43,6 +43,11 @@ #include "gtk/messagebox_information.xpm" #include "gtk/messagebox_question.xpm" +#ifdef USE_GTKMOZEMBED +extern gint mozilla_get_mouse_event_button(gpointer event); +extern gint mozilla_get_mouse_location( gpointer event, glong *x, glong *y); +#endif + /* These are used for resource management */ #if defined(DW_RESOURCES) && !defined(BUILD_DLL) extern DWResources _resources; @@ -50,22 +55,22 @@ GdkColor _colors[] = { - { 0, 0x0000, 0x0000, 0x0000 }, /* 0 black */ - { 0, 0xbbbb, 0x0000, 0x0000 }, /* 1 red */ - { 0, 0x0000, 0xbbbb, 0x0000 }, /* 2 green */ - { 0, 0xaaaa, 0xaaaa, 0x0000 }, /* 3 yellow */ - { 0, 0x0000, 0x0000, 0xcccc }, /* 4 blue */ - { 0, 0xbbbb, 0x0000, 0xbbbb }, /* 5 magenta */ - { 0, 0x0000, 0xbbbb, 0xbbbb }, /* 6 cyan */ - { 0, 0xbbbb, 0xbbbb, 0xbbbb }, /* 7 white */ - { 0, 0x7777, 0x7777, 0x7777 }, /* 8 grey */ - { 0, 0xffff, 0x0000, 0x0000 }, /* 9 bright red */ - { 0, 0x0000, 0xffff, 0x0000 }, /* 10 bright green */ - { 0, 0xeeee, 0xeeee, 0x0000 }, /* 11 bright yellow */ - { 0, 0x0000, 0x0000, 0xffff }, /* 12 bright blue */ - { 0, 0xffff, 0x0000, 0xffff }, /* 13 bright magenta */ - { 0, 0x0000, 0xeeee, 0xeeee }, /* 14 bright cyan */ - { 0, 0xffff, 0xffff, 0xffff }, /* 15 bright white */ + { 0, 0x0000, 0x0000, 0x0000 }, /* 0 black */ + { 0, 0xbbbb, 0x0000, 0x0000 }, /* 1 red */ + { 0, 0x0000, 0xbbbb, 0x0000 }, /* 2 green */ + { 0, 0xaaaa, 0xaaaa, 0x0000 }, /* 3 yellow */ + { 0, 0x0000, 0x0000, 0xcccc }, /* 4 blue */ + { 0, 0xbbbb, 0x0000, 0xbbbb }, /* 5 magenta */ + { 0, 0x0000, 0xbbbb, 0xbbbb }, /* 6 cyan */ + { 0, 0xbbbb, 0xbbbb, 0xbbbb }, /* 7 white */ + { 0, 0x7777, 0x7777, 0x7777 }, /* 8 grey */ + { 0, 0xffff, 0x0000, 0x0000 }, /* 9 bright red */ + { 0, 0x0000, 0xffff, 0x0000 }, /* 10 bright green */ + { 0, 0xeeee, 0xeeee, 0x0000 }, /* 11 bright yellow */ + { 0, 0x0000, 0x0000, 0xffff }, /* 12 bright blue */ + { 0, 0xffff, 0x0000, 0xffff }, /* 13 bright magenta */ + { 0, 0x0000, 0xeeee, 0xeeee }, /* 14 bright cyan */ + { 0, 0xffff, 0xffff, 0xffff }, /* 15 bright white */ }; #define NUM_EXTS 5 @@ -148,16 +153,18 @@ void (*_gtk_moz_embed_render_data)(GtkMozEmbed *, const char *, guint32, const char *, const char *) = NULL; GtkWidget *(*_gtk_moz_embed_new)(void) = NULL; GtkType (*_dw_moz_embed_get_type)(void) = NULL; +gboolean (*_gtk_moz_embed_can_go_back)(GtkMozEmbed *) = NULL; +gboolean (*_gtk_moz_embed_can_go_forward)(GtkMozEmbed *) = NULL; #endif typedef struct { - GdkPixmap *pixmap; - GdkBitmap *mask; - int used; - unsigned long width, height; -#if GTK_MAJOR_VERSION > 1 - GdkPixbuf *pixbuf; + GdkPixmap *pixmap; + GdkBitmap *mask; + int used; + unsigned long width, height; +#if GTK_MAJOR_VERSION > 1 + GdkPixbuf *pixbuf; #endif } DWPrivatePixmap; @@ -166,18 +173,18 @@ typedef struct { - void *func; - char name[30]; + void *func; + char name[30]; } SignalList; typedef struct { - HWND window; - void *func; - gpointer data; - gint cid; - void *intfunc; + HWND window; + void *func; + gpointer data; + gint cid; + void *intfunc; } SignalHandler; @@ -185,25 +192,25 @@ /* A list of signal forwarders, to account for paramater differences. */ static SignalList SignalTranslate[SIGNALMAX] = { - { _configure_event, DW_SIGNAL_CONFIGURE }, - { _key_press_event, DW_SIGNAL_KEY_PRESS }, - { _button_press_event, DW_SIGNAL_BUTTON_PRESS }, - { _button_release_event, DW_SIGNAL_BUTTON_RELEASE }, - { _motion_notify_event, DW_SIGNAL_MOTION_NOTIFY }, - { _delete_event, DW_SIGNAL_DELETE }, - { _expose_event, DW_SIGNAL_EXPOSE }, - { _activate_event, "activate" }, - { _generic_event, DW_SIGNAL_CLICKED }, - { _container_select_event, DW_SIGNAL_ITEM_ENTER }, - { _container_context_event, DW_SIGNAL_ITEM_CONTEXT }, - { _tree_context_event, "tree-context" }, - { _item_select_event, DW_SIGNAL_LIST_SELECT }, - { _tree_select_event, DW_SIGNAL_ITEM_SELECT }, - { _set_focus_event, DW_SIGNAL_SET_FOCUS }, - { _value_changed_event, DW_SIGNAL_VALUE_CHANGED }, - { _switch_page_event, DW_SIGNAL_SWITCH_PAGE }, - { _column_click_event, DW_SIGNAL_COLUMN_CLICK }, - { _tree_expand_event, DW_SIGNAL_TREE_EXPAND } + { _configure_event, DW_SIGNAL_CONFIGURE }, + { _key_press_event, DW_SIGNAL_KEY_PRESS }, + { _button_press_event, DW_SIGNAL_BUTTON_PRESS }, + { _button_release_event, DW_SIGNAL_BUTTON_RELEASE }, + { _motion_notify_event, DW_SIGNAL_MOTION_NOTIFY }, + { _delete_event, DW_SIGNAL_DELETE }, + { _expose_event, DW_SIGNAL_EXPOSE }, + { _activate_event, "activate" }, + { _generic_event, DW_SIGNAL_CLICKED }, + { _container_select_event, DW_SIGNAL_ITEM_ENTER }, + { _container_context_event, DW_SIGNAL_ITEM_CONTEXT }, + { _tree_context_event, "tree-context" }, + { _item_select_event, DW_SIGNAL_LIST_SELECT }, + { _tree_select_event, DW_SIGNAL_ITEM_SELECT }, + { _set_focus_event, DW_SIGNAL_SET_FOCUS }, + { _value_changed_event, DW_SIGNAL_VALUE_CHANGED }, + { _switch_page_event, DW_SIGNAL_SWITCH_PAGE }, + { _column_click_event, DW_SIGNAL_COLUMN_CLICK }, + { _tree_expand_event, DW_SIGNAL_TREE_EXPAND } }; /* Alignment flags */ @@ -224,25 +231,25 @@ enum _GtkMdiChildState { - CHILD_NORMAL, - CHILD_MAXIMIZED, - CHILD_ICONIFIED + CHILD_NORMAL, + CHILD_MAXIMIZED, + CHILD_ICONIFIED }; struct _GtkMdi { - GtkContainer container; - GList *children; - - GdkPoint drag_start; - gint drag_button; + GtkContainer container; + GList *children; + + GdkPoint drag_start; + gint drag_button; }; struct _GtkMdiClass { - GtkContainerClass parent_class; - - void (*mdi) (GtkMdi * mdi); + GtkContainerClass parent_class; + + void (*mdi) (GtkMdi * mdi); }; #include "gtk/maximize.xpm" @@ -261,17 +268,17 @@ struct _GtkMdiChild { - GtkWidget *widget; - - GtkWidget *child; - GtkMdi *mdi; - - gint x; - gint y; + GtkWidget *widget; + + GtkWidget *child; + GtkMdi *mdi; + + gint x; + gint y; gint width; - gint height; - - GtkMdiChildState state; + gint height; + + GtkMdiChildState state; }; static void gtk_mdi_class_init(GtkMdiClass *klass); @@ -297,28 +304,28 @@ static GtkType gtk_mdi_get_type(void) { - static GType mdi_type = 0; - - if (!mdi_type) - { - - static const GTypeInfo mdi_info = - { - sizeof (GtkMdiClass), - NULL, - NULL, - (GClassInitFunc) gtk_mdi_class_init, - NULL, - NULL, - sizeof (GtkMdi), - 0, - (GInstanceInitFunc) gtk_mdi_init, - }; - - mdi_type = g_type_register_static (GTK_TYPE_CONTAINER, "GtkMdi", &mdi_info, 0); - } - - return mdi_type; + static GType mdi_type = 0; + + if (!mdi_type) + { + + static const GTypeInfo mdi_info = + { + sizeof (GtkMdiClass), + NULL, + NULL, + (GClassInitFunc) gtk_mdi_class_init, + NULL, + NULL, + sizeof (GtkMdi), + 0, + (GInstanceInitFunc) gtk_mdi_init, + }; + + mdi_type = g_type_register_static (GTK_TYPE_CONTAINER, "GtkMdi", &mdi_info, 0); + } + + return mdi_type; } /* Local data */ @@ -326,1498 +333,1498 @@ static void gtk_mdi_class_init(GtkMdiClass *class) { - GObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - object_class = (GObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - container_class = (GtkContainerClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_CONTAINER); - - widget_class->realize = gtk_mdi_realize; - widget_class->expose_event = gtk_mdi_expose; - widget_class->size_request = gtk_mdi_size_request; - widget_class->size_allocate = gtk_mdi_size_allocate; - - container_class->add = gtk_mdi_add; - container_class->remove = gtk_mdi_remove_true; - container_class->forall = gtk_mdi_forall; - class->mdi = NULL; + GObjectClass *object_class; + GtkWidgetClass *widget_class; + GtkContainerClass *container_class; + + object_class = (GObjectClass *) class; + widget_class = (GtkWidgetClass *) class; + container_class = (GtkContainerClass *) class; + + parent_class = gtk_type_class (GTK_TYPE_CONTAINER); + + widget_class->realize = gtk_mdi_realize; + widget_class->expose_event = gtk_mdi_expose; + widget_class->size_request = gtk_mdi_size_request; + widget_class->size_allocate = gtk_mdi_size_allocate; + + container_class->add = gtk_mdi_add; + container_class->remove = gtk_mdi_remove_true; + container_class->forall = gtk_mdi_forall; + class->mdi = NULL; } static void gtk_mdi_init(GtkMdi *mdi) { - mdi->drag_button = -1; - mdi->children = NULL; + mdi->drag_button = -1; + mdi->children = NULL; } static GtkWidget *gtk_mdi_new(void) { - GtkWidget *mdi; - GdkColor background; - - mdi = GTK_WIDGET (g_object_new (gtk_mdi_get_type (), NULL)); - gdk_color_parse (GTK_MDI_BACKGROUND, &background); - gtk_widget_modify_bg (mdi, GTK_STATE_NORMAL, &background); - - return mdi; + GtkWidget *mdi; + GdkColor background; + + mdi = GTK_WIDGET (g_object_new (gtk_mdi_get_type (), NULL)); + gdk_color_parse (GTK_MDI_BACKGROUND, &background); + gtk_widget_modify_bg (mdi, GTK_STATE_NORMAL, &background); + + return mdi; } static void gtk_mdi_put(GtkMdi *mdi, GtkWidget *child_widget, gint x, gint y, GtkWidget *label) { - GtkMdiChild *child; - - GtkWidget *table; - GtkWidget *button[3]; - - GtkWidget *child_box; - GtkWidget *top_event_box; - GtkWidget *bottom_event_box; - GtkWidget *child_widget_box; - GtkWidget *image; - - GdkColor color; - gint i, j; - GdkCursor *cursor; - GdkColormap *colormap; - GdkPixmap *pixmap; - GdkBitmap *mask; - GtkStyle *style; - - child_box = gtk_event_box_new (); - child_widget_box = gtk_event_box_new (); - top_event_box = gtk_event_box_new (); - bottom_event_box = gtk_event_box_new (); - table = gtk_table_new (4, 7, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 1); - gtk_table_set_col_spacings (GTK_TABLE (table), 1); - gtk_table_set_row_spacing (GTK_TABLE (table), 3, 0); - gtk_table_set_col_spacing (GTK_TABLE (table), 6, 0); - gtk_table_set_row_spacing (GTK_TABLE (table), 2, 0); - gtk_table_set_col_spacing (GTK_TABLE (table), 5, 0); - - for (i = 0; i < 3; i++) - { - button[i] = gtk_event_box_new (); - gtk_widget_set_events (button[0], GDK_BUTTON_PRESS_MASK); - } - - gdk_color_parse (GTK_MDI_LABEL_BACKGROUND, &color); - - gtk_widget_modify_bg (top_event_box, GTK_STATE_NORMAL, &color); - gtk_widget_modify_bg (bottom_event_box, GTK_STATE_NORMAL, &color); - gtk_widget_modify_bg (child_box, GTK_STATE_NORMAL, &color); - for (i = GTK_STATE_NORMAL; i < GTK_STATE_ACTIVE; i++) - { - for (j = 0; j < 3; j++) - { - gtk_widget_modify_bg (button[j], i, &color); - } - } - gdk_color_parse (GTK_MDI_LABEL_FOREGROUND, &color); - gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - - gtk_container_add (GTK_CONTAINER (top_event_box), label); - gtk_container_add (GTK_CONTAINER (child_widget_box), child_widget); - gtk_widget_set_size_request (bottom_event_box, 2, 2); - - - style = gtk_widget_get_default_style (); - colormap = gdk_colormap_get_system (); - pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, - &style->bg[GTK_STATE_NORMAL], - (gchar **) minimize_xpm); - image = gtk_image_new_from_pixmap (pixmap, mask); - gtk_widget_show(image); - gtk_container_add (GTK_CONTAINER (button[0]), image); - pixmap = gdk_pixmap_colormap_create_from_xpm_d (GTK_WIDGET (mdi)->window, colormap, &mask, - &style->bg[GTK_STATE_NORMAL], - (gchar **) maximize_xpm); - image = gtk_image_new_from_pixmap (pixmap, mask); - gtk_widget_show(image); - gtk_container_add (GTK_CONTAINER (button[1]), image); - pixmap = gdk_pixmap_colormap_create_from_xpm_d (GTK_WIDGET (mdi)->window, colormap, &mask, - &style->bg[GTK_STATE_NORMAL], - (gchar **) kill_xpm); - image = gtk_image_new_from_pixmap (pixmap, mask); - gtk_widget_show(image); - gtk_container_add (GTK_CONTAINER (button[2]), image); - - gtk_table_attach (GTK_TABLE (table), child_widget_box, 1, 6, 2, 3, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - GTK_EXPAND | GTK_SHRINK | GTK_FILL, - 0, 0); - gtk_table_attach (GTK_TABLE (table), top_event_box, 1, 2, 1, 2, - GTK_FILL | GTK_EXPAND | GTK_SHRINK, - 0, - 0, 0); - gtk_table_attach (GTK_TABLE (table), bottom_event_box, 6, 7, 3, 4, - 0, - 0, - 0, 0); - gtk_table_attach (GTK_TABLE (table), button[0], 2, 3, 1, 2, - 0, - 0, - 0, 0); - gtk_table_attach (GTK_TABLE (table), button[1], 3, 4, 1, 2, - 0, - 0, - 0, 0); - gtk_table_attach (GTK_TABLE (table), button[2], 4, 5, 1, 2, - 0, - 0, - 0, 0); - - gtk_container_add (GTK_CONTAINER (child_box), table); - - child = g_new (GtkMdiChild, 1); - child->widget = child_box; - child->x = x; - child->y = y; - child->width = -1; - child->height = -1; - child->child = child_widget; - child->mdi = mdi; - child->state = CHILD_NORMAL; - - gtk_widget_set_parent (child_box, GTK_WIDGET (mdi)); - mdi->children = g_list_append (mdi->children, child); - - gtk_widget_show (child_box); - gtk_widget_show (table); - gtk_widget_show (top_event_box); - gtk_widget_show (bottom_event_box); - gtk_widget_show (child_widget_box); - for (i = 0; i < 3; i++) - { - gtk_widget_show (button[i]); - } - - cursor = gdk_cursor_new (GDK_HAND1); - gtk_widget_realize (top_event_box); - gdk_window_set_cursor (top_event_box->window, cursor); - cursor = gdk_cursor_new (GDK_BOTTOM_RIGHT_CORNER); - gtk_widget_realize (bottom_event_box); - gdk_window_set_cursor (bottom_event_box->window, cursor); - - g_signal_connect (G_OBJECT (top_event_box), "event", - G_CALLBACK (move_child_callback), - child); - g_signal_connect (G_OBJECT (bottom_event_box), "event", - G_CALLBACK (resize_child_callback), - child); - g_signal_connect (G_OBJECT (button[0]), "button_press_event", - G_CALLBACK (iconify_child_callback), - child); - g_signal_connect (G_OBJECT (button[1]), "button_press_event", - G_CALLBACK (maximize_child_callback), - child); - g_signal_connect (G_OBJECT (button[2]), "button_press_event", - G_CALLBACK (kill_child_callback), - child); + GtkMdiChild *child; + + GtkWidget *table; + GtkWidget *button[3]; + + GtkWidget *child_box; + GtkWidget *top_event_box; + GtkWidget *bottom_event_box; + GtkWidget *child_widget_box; + GtkWidget *image; + + GdkColor color; + gint i, j; + GdkCursor *cursor; + GdkColormap *colormap; + GdkPixmap *pixmap; + GdkBitmap *mask; + GtkStyle *style; + + child_box = gtk_event_box_new (); + child_widget_box = gtk_event_box_new (); + top_event_box = gtk_event_box_new (); + bottom_event_box = gtk_event_box_new (); + table = gtk_table_new (4, 7, FALSE); + gtk_table_set_row_spacings (GTK_TABLE (table), 1); + gtk_table_set_col_spacings (GTK_TABLE (table), 1); + gtk_table_set_row_spacing (GTK_TABLE (table), 3, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 6, 0); + gtk_table_set_row_spacing (GTK_TABLE (table), 2, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 5, 0); + + for (i = 0; i < 3; i++) + { + button[i] = gtk_event_box_new (); + gtk_widget_set_events (button[0], GDK_BUTTON_PRESS_MASK); + } + + gdk_color_parse (GTK_MDI_LABEL_BACKGROUND, &color); + + gtk_widget_modify_bg (top_event_box, GTK_STATE_NORMAL, &color); + gtk_widget_modify_bg (bottom_event_box, GTK_STATE_NORMAL, &color); + gtk_widget_modify_bg (child_box, GTK_STATE_NORMAL, &color); + for (i = GTK_STATE_NORMAL; i < GTK_STATE_ACTIVE; i++) + { + for (j = 0; j < 3; j++) + { + gtk_widget_modify_bg (button[j], i, &color); + } + } + gdk_color_parse (GTK_MDI_LABEL_FOREGROUND, &color); + gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + + gtk_container_add (GTK_CONTAINER (top_event_box), label); + gtk_container_add (GTK_CONTAINER (child_widget_box), child_widget); + gtk_widget_set_size_request (bottom_event_box, 2, 2); + + + style = gtk_widget_get_default_style (); + colormap = gdk_colormap_get_system (); + pixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) minimize_xpm); + image = gtk_image_new_from_pixmap (pixmap, mask); + gtk_widget_show(image); + gtk_container_add (GTK_CONTAINER (button[0]), image); + pixmap = gdk_pixmap_colormap_create_from_xpm_d (GTK_WIDGET (mdi)->window, colormap, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) maximize_xpm); + image = gtk_image_new_from_pixmap (pixmap, mask); + gtk_widget_show(image); + gtk_container_add (GTK_CONTAINER (button[1]), image); + pixmap = gdk_pixmap_colormap_create_from_xpm_d (GTK_WIDGET (mdi)->window, colormap, &mask, + &style->bg[GTK_STATE_NORMAL], + (gchar **) kill_xpm); + image = gtk_image_new_from_pixmap (pixmap, mask); + gtk_widget_show(image); + gtk_container_add (GTK_CONTAINER (button[2]), image); + + gtk_table_attach (GTK_TABLE (table), child_widget_box, 1, 6, 2, 3, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + 0, 0); + gtk_table_attach (GTK_TABLE (table), top_event_box, 1, 2, 1, 2, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, + 0, + 0, 0); + gtk_table_attach (GTK_TABLE (table), bottom_event_box, 6, 7, 3, 4, + 0, + 0, + 0, 0); + gtk_table_attach (GTK_TABLE (table), button[0], 2, 3, 1, 2, + 0, + 0, + 0, 0); + gtk_table_attach (GTK_TABLE (table), button[1], 3, 4, 1, 2, + 0, + 0, + 0, 0); + gtk_table_attach (GTK_TABLE (table), button[2], 4, 5, 1, 2, + 0, + 0, + 0, 0); + + gtk_container_add (GTK_CONTAINER (child_box), table); + + child = g_new (GtkMdiChild, 1); + child->widget = child_box; + child->x = x; + child->y = y; + child->width = -1; + child->height = -1; + child->child = child_widget; + child->mdi = mdi; + child->state = CHILD_NORMAL; + + gtk_widget_set_parent (child_box, GTK_WIDGET (mdi)); + mdi->children = g_list_append (mdi->children, child); + + gtk_widget_show (child_box); + gtk_widget_show (table); + gtk_widget_show (top_event_box); + gtk_widget_show (bottom_event_box); + gtk_widget_show (child_widget_box); + for (i = 0; i < 3; i++) + { + gtk_widget_show (button[i]); + } + + cursor = gdk_cursor_new (GDK_HAND1); + gtk_widget_realize (top_event_box); + gdk_window_set_cursor (top_event_box->window, cursor); + cursor = gdk_cursor_new (GDK_BOTTOM_RIGHT_CORNER); + gtk_widget_realize (bottom_event_box); + gdk_window_set_cursor (bottom_event_box->window, cursor); + + g_signal_connect (G_OBJECT (top_event_box), "event", + G_CALLBACK (move_child_callback), + child); + g_signal_connect (G_OBJECT (bottom_event_box), "event", + G_CALLBACK (resize_child_callback), + child); + g_signal_connect (G_OBJECT (button[0]), "button_press_event", + G_CALLBACK (iconify_child_callback), + child); + g_signal_connect (G_OBJECT (button[1]), "button_press_event", + G_CALLBACK (maximize_child_callback), + child); + g_signal_connect (G_OBJECT (button[2]), "button_press_event", + G_CALLBACK (kill_child_callback), + child); } static void gtk_mdi_move(GtkMdi *mdi, GtkWidget *widget, gint x, gint y) { - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - g_return_if_fail (GTK_IS_WIDGET (widget)); - - child = get_child (mdi, widget); - g_return_if_fail (child); - - child->x = x; - child->y = y; - if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (mdi)) - gtk_widget_queue_resize (GTK_WIDGET (widget)); + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + child = get_child (mdi, widget); + g_return_if_fail (child); + + child->x = x; + child->y = y; + if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (mdi)) + gtk_widget_queue_resize (GTK_WIDGET (widget)); } static void gtk_mdi_get_pos(GtkMdi *mdi, GtkWidget *widget, gint *x, gint *y) { - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - g_return_if_fail (GTK_IS_WIDGET (widget)); - - child = get_child (mdi, widget); - g_return_if_fail (child); - - *x = child->x; - *y = child->y; + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + child = get_child (mdi, widget); + g_return_if_fail (child); + + *x = child->x; + *y = child->y; } static void gtk_mdi_tile(GtkMdi *mdi) { - int i, n; - int width, height; - GList *children; - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - - children = mdi->children; - n = g_list_length (children); - width = GTK_WIDGET (mdi)->allocation.width; - height = GTK_WIDGET (mdi)->allocation.height / n; - for (i = 0; i < n; i++) - { - child = (GtkMdiChild *) children->data; - children = children->next; - child->x = 0; - child->y = i * height; - gtk_widget_set_size_request (child->widget, width, height); - child->state = CHILD_NORMAL; - child->width = -1; - child->height = -1; - } - if (GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) - gtk_widget_queue_resize (GTK_WIDGET (mdi)); - return; + int i, n; + int width, height; + GList *children; + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + + children = mdi->children; + n = g_list_length (children); + width = GTK_WIDGET (mdi)->allocation.width; + height = GTK_WIDGET (mdi)->allocation.height / n; + for (i = 0; i < n; i++) + { + child = (GtkMdiChild *) children->data; + children = children->next; + child->x = 0; + child->y = i * height; + gtk_widget_set_size_request (child->widget, width, height); + child->state = CHILD_NORMAL; + child->width = -1; + child->height = -1; + } + if (GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) + gtk_widget_queue_resize (GTK_WIDGET (mdi)); + return; } static void gtk_mdi_cascade(GtkMdi *mdi) { - int i, n; - int width, height; - GList *children; - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - if (!GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) - return; - - children = mdi->children; - n = g_list_length (children); - width = GTK_WIDGET (mdi)->allocation.width / (2 * n - 1); - height = GTK_WIDGET (mdi)->allocation.height / (2 * n - 1); - for (i = 0; i < n; i++) - { - child = (GtkMdiChild *) children->data; - children = children->next; - child->x = i * width; - child->y = i * height; - gtk_widget_set_size_request (child->widget, width * n, height * n); - child->state = CHILD_NORMAL; - child->width = -1; - child->height = -1; - } - if (GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) - gtk_widget_queue_resize (GTK_WIDGET (mdi)); - return; + int i, n; + int width, height; + GList *children; + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + if (!GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) + return; + + children = mdi->children; + n = g_list_length (children); + width = GTK_WIDGET (mdi)->allocation.width / (2 * n - 1); + height = GTK_WIDGET (mdi)->allocation.height / (2 * n - 1); + for (i = 0; i < n; i++) + { + child = (GtkMdiChild *) children->data; + children = children->next; + child->x = i * width; + child->y = i * height; + gtk_widget_set_size_request (child->widget, width * n, height * n); + child->state = CHILD_NORMAL; + child->width = -1; + child->height = -1; + } + if (GTK_WIDGET_VISIBLE (GTK_WIDGET (mdi))) + gtk_widget_queue_resize (GTK_WIDGET (mdi)); + return; } static GtkMdiChildState gtk_mdi_get_state(GtkMdi *mdi, GtkWidget *widget) { - GtkMdiChild *child; - - g_return_val_if_fail (GTK_IS_MDI (mdi), CHILD_NORMAL); - g_return_val_if_fail (GTK_IS_WIDGET (widget), CHILD_NORMAL); - - child = get_child (mdi, widget); - g_return_val_if_fail (child, CHILD_NORMAL); - - return child->state; + GtkMdiChild *child; + + g_return_val_if_fail (GTK_IS_MDI (mdi), CHILD_NORMAL); + g_return_val_if_fail (GTK_IS_WIDGET (widget), CHILD_NORMAL); + + child = get_child (mdi, widget); + g_return_val_if_fail (child, CHILD_NORMAL); + + return child->state; } static void gtk_mdi_set_state(GtkMdi *mdi, GtkWidget *widget, GtkMdiChildState state) { - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - g_return_if_fail (GTK_IS_WIDGET (widget)); - - child = get_child (mdi, widget); - g_return_if_fail (child); - - child->state = state; - if (GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_VISIBLE (mdi)) - gtk_widget_queue_resize (GTK_WIDGET (child->widget)); + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + child = get_child (mdi, widget); + g_return_if_fail (child); + + child->state = state; + if (GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_VISIBLE (mdi)) + gtk_widget_queue_resize (GTK_WIDGET (child->widget)); } static void gtk_mdi_remove(GtkMdi *mdi, GtkWidget *widget) { - GtkMdiChild *child; - - g_return_if_fail (GTK_IS_MDI (mdi)); - child = get_child (mdi, widget); - g_return_if_fail (child); - gtk_mdi_remove_true (GTK_CONTAINER (mdi), child->widget); + GtkMdiChild *child; + + g_return_if_fail (GTK_IS_MDI (mdi)); + child = get_child (mdi, widget); + g_return_if_fail (child); + gtk_mdi_remove_true (GTK_CONTAINER (mdi), child->widget); } static void gtk_mdi_realize(GtkWidget *widget) { - GtkMdi *mdi; - GdkWindowAttr attributes; - gint attributes_mask; - - mdi = GTK_MDI (widget); - - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_MDI (mdi)); - - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); - - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.event_mask = gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); - - widget->style = gtk_style_attach (widget->style, widget->window); - - gdk_window_set_user_data (widget->window, widget); - - gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); + GtkMdi *mdi; + GdkWindowAttr attributes; + gint attributes_mask; + + mdi = GTK_MDI (widget); + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_MDI (mdi)); + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.window_type = GDK_WINDOW_CHILD; + attributes.event_mask = gtk_widget_get_events (widget) | + GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | + GDK_POINTER_MOTION_HINT_MASK; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); + + widget->style = gtk_style_attach (widget->style, widget->window); + + gdk_window_set_user_data (widget->window, widget); + + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); } static void gtk_mdi_size_request (GtkWidget *widget, GtkRequisition *requisition) { - GtkMdi *mdi; - GtkMdiChild *child; - GList *children; - GtkRequisition child_requisition; - - mdi = GTK_MDI (widget); - requisition->width = GTK_MDI_DEFAULT_WIDTH; - requisition->height = GTK_MDI_DEFAULT_HEIGHT; - - children = mdi->children; - while (children) - { - child = children->data; - children = children->next; - - if (GTK_WIDGET_VISIBLE (child->widget)) - { - gtk_widget_size_request (child->widget, &child_requisition); - } - } + GtkMdi *mdi; + GtkMdiChild *child; + GList *children; + GtkRequisition child_requisition; + + mdi = GTK_MDI (widget); + requisition->width = GTK_MDI_DEFAULT_WIDTH; + requisition->height = GTK_MDI_DEFAULT_HEIGHT; + + children = mdi->children; + while (children) + { + child = children->data; + children = children->next; + + if (GTK_WIDGET_VISIBLE (child->widget)) + { + gtk_widget_size_request (child->widget, &child_requisition); + } + } } static void gtk_mdi_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { - GtkMdi *mdi; - GtkMdiChild *child; - GtkAllocation child_allocation; - GtkRequisition child_requisition; - GList *children; - - mdi = GTK_MDI (widget); - - widget->allocation = *allocation; - - if (GTK_WIDGET_REALIZED (widget)) - gdk_window_move_resize (widget->window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); - - - children = mdi->children; - while (children) - { - child = children->data; - children = children->next; - - if (GTK_WIDGET_VISIBLE (child->widget)) - { - gtk_widget_get_child_requisition (child->widget, &child_requisition); - child_allocation.x = 0; - child_allocation.y = 0; - switch (child->state) - { - case CHILD_NORMAL: - { - if ((child->width < 0) && (child->height < 0)) - { - child_allocation.width = child_requisition.width; - child_allocation.height = child_requisition.height; - } - else - { - child_allocation.width = child->width; - child_allocation.height = child->height; - child->width = -1; - child->height = -1; - } - child_allocation.x += child->x; - child_allocation.y += child->y; - break; - } - case CHILD_MAXIMIZED: - { - if ((child->width < 0) && (child->height < 0)) - { - child->width = child_requisition.width; - child->height = child_requisition.height; - } - child_allocation.width = allocation->width; - child_allocation.height = allocation->height; - } - break; - case CHILD_ICONIFIED: - { - if ((child->width < 0) && (child->height < 0)) - { - child->width = child_requisition.width; - child->height = child_requisition.height; - } - child_allocation.x += child->x; - child_allocation.y += child->y; - child_allocation.width = child_requisition.width; - child_allocation.height = GTK_MDI_MIN_HEIGHT; - break; - } - } - gtk_widget_size_allocate (child->widget, &child_allocation); - } - } + GtkMdi *mdi; + GtkMdiChild *child; + GtkAllocation child_allocation; + GtkRequisition child_requisition; + GList *children; + + mdi = GTK_MDI (widget); + + widget->allocation = *allocation; + + if (GTK_WIDGET_REALIZED (widget)) + gdk_window_move_resize (widget->window, + allocation->x, + allocation->y, + allocation->width, + allocation->height); + + + children = mdi->children; + while (children) + { + child = children->data; + children = children->next; + + if (GTK_WIDGET_VISIBLE (child->widget)) + { + gtk_widget_get_child_requisition (child->widget, &child_requisition); + child_allocation.x = 0; + child_allocation.y = 0; + switch (child->state) + { + case CHILD_NORMAL: + { + if ((child->width < 0) && (child->height < 0)) + { + child_allocation.width = child_requisition.width; + child_allocation.height = child_requisition.height; + } + else + { + child_allocation.width = child->width; + child_allocation.height = child->height; + child->width = -1; + child->height = -1; + } + child_allocation.x += child->x; + child_allocation.y += child->y; + break; + } + case CHILD_MAXIMIZED: + { + if ((child->width < 0) && (child->height < 0)) + { + child->width = child_requisition.width; + child->height = child_requisition.height; + } + child_allocation.width = allocation->width; + child_allocation.height = allocation->height; + } + break; + case CHILD_ICONIFIED: + { + if ((child->width < 0) && (child->height < 0)) + { + child->width = child_requisition.width; + child->height = child_requisition.height; + } + child_allocation.x += child->x; + child_allocation.y += child->y; + child_allocation.width = child_requisition.width; + child_allocation.height = GTK_MDI_MIN_HEIGHT; + break; + } + } + gtk_widget_size_allocate (child->widget, &child_allocation); + } + } } static gint gtk_mdi_expose(GtkWidget *widget, GdkEventExpose *event) { - GtkMdiChild *child; - GList *children; - GtkMdi *mdi; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_MDI (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - mdi = GTK_MDI (widget); - for (children = mdi->children; children; children = children->next) - { - child = (GtkMdiChild *) children->data; - gtk_container_propagate_expose (GTK_CONTAINER (mdi), - child->widget, - event); - } - return FALSE; + GtkMdiChild *child; + GList *children; + GtkMdi *mdi; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_MDI (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + mdi = GTK_MDI (widget); + for (children = mdi->children; children; children = children->next) + { + child = (GtkMdiChild *) children->data; + gtk_container_propagate_expose (GTK_CONTAINER (mdi), + child->widget, + event); + } + return FALSE; } static void gtk_mdi_add(GtkContainer *container, GtkWidget *widget) { - GtkWidget *label; - label = gtk_label_new (""); - gtk_mdi_put (GTK_MDI (container), widget, 0, 0, label); + GtkWidget *label; + label = gtk_label_new (""); + gtk_mdi_put (GTK_MDI (container), widget, 0, 0, label); } static void gtk_mdi_remove_true(GtkContainer *container, GtkWidget *widget) { - GtkMdi *mdi; - GtkMdiChild *child = NULL; - GList *children; - - mdi = GTK_MDI (container); - - children = mdi->children; - while (children) - { - child = children->data; - if (child->widget == widget) - break; - - children = children->next; - } - - if(child) - { - gtk_widget_unparent (child->widget); - g_free (child); - } - mdi->children = g_list_remove_link (mdi->children, children); - g_list_free (children); + GtkMdi *mdi; + GtkMdiChild *child = NULL; + GList *children; + + mdi = GTK_MDI (container); + + children = mdi->children; + while (children) + { + child = children->data; + if (child->widget == widget) + break; + + children = children->next; + } + + if(child) + { + gtk_widget_unparent (child->widget); + g_free (child); + } + mdi->children = g_list_remove_link (mdi->children, children); + g_list_free (children); } static void gtk_mdi_forall(GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data) { - GtkMdi *mdi; - GtkMdiChild *child; - GList *children; - - g_return_if_fail (callback != NULL); - - mdi = GTK_MDI (container); - - children = mdi->children; - while (children) - { - child = children->data; - children = children->next; - - (*callback) (child->widget, callback_data); - } + GtkMdi *mdi; + GtkMdiChild *child; + GList *children; + + g_return_if_fail (callback != NULL); + + mdi = GTK_MDI (container); + + children = mdi->children; + while (children) + { + child = children->data; + children = children->next; + + (*callback) (child->widget, callback_data); + } } static gboolean move_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data) { - GtkMdi *mdi; - GtkMdiChild *child; - - child = (GtkMdiChild *) data; - mdi = child->mdi; - - g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); - g_return_val_if_fail (GTK_IS_EVENT_BOX (widget), FALSE); - - - switch (event->type) - { - case GDK_2BUTTON_PRESS: - { - gdk_window_raise (child->widget->window); - } - case GDK_BUTTON_PRESS: - if (child->state == CHILD_MAXIMIZED) - return FALSE; - if (mdi->drag_button < 0) - { - if (gdk_pointer_grab (event->button.window, - FALSE, - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, - NULL, - event->button.time) != GDK_GRAB_SUCCESS) - return FALSE; - - mdi->drag_button = event->button.button; - - mdi->drag_start.x = event->button.x; - mdi->drag_start.y = event->button.y; - } - break; - - case GDK_BUTTON_RELEASE: - if (mdi->drag_button < 0) - return FALSE; - - if (mdi->drag_button == event->button.button) - { - int x, y; - - gdk_pointer_ungrab (event->button.time); - mdi->drag_button = -1; - - x = event->button.x + child->x - mdi->drag_start.x; - y = event->button.y + child->y - mdi->drag_start.y; - - gtk_mdi_move (mdi, child->child, x, y); - } - break; - - case GDK_MOTION_NOTIFY: - { - int x, y; - - if (mdi->drag_button < 0) - return FALSE; - - gdk_window_get_pointer (widget->window, &x, &y, NULL); - - - x = x - mdi->drag_start.x + child->x; - y = y - mdi->drag_start.y + child->y; - - - gtk_mdi_move (mdi, child->child, x, y); - } - break; - - default: - break; - } - - return FALSE; + GtkMdi *mdi; + GtkMdiChild *child; + + child = (GtkMdiChild *) data; + mdi = child->mdi; + + g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); + g_return_val_if_fail (GTK_IS_EVENT_BOX (widget), FALSE); + + + switch (event->type) + { + case GDK_2BUTTON_PRESS: + { + gdk_window_raise (child->widget->window); + } + case GDK_BUTTON_PRESS: + if (child->state == CHILD_MAXIMIZED) + return FALSE; + if (mdi->drag_button < 0) + { + if (gdk_pointer_grab (event->button.window, + FALSE, + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + NULL, + event->button.time) != GDK_GRAB_SUCCESS) + return FALSE; + + mdi->drag_button = event->button.button; + + mdi->drag_start.x = event->button.x; + mdi->drag_start.y = event->button.y; + } + break; + + case GDK_BUTTON_RELEASE: + if (mdi->drag_button < 0) + return FALSE; + + if (mdi->drag_button == event->button.button) + { + int x, y; + + gdk_pointer_ungrab (event->button.time); + mdi->drag_button = -1; + + x = event->button.x + child->x - mdi->drag_start.x; + y = event->button.y + child->y - mdi->drag_start.y; + + gtk_mdi_move (mdi, child->child, x, y); + } + break; + + case GDK_MOTION_NOTIFY: + { + int x, y; + + if (mdi->drag_button < 0) + return FALSE; + + gdk_window_get_pointer (widget->window, &x, &y, NULL); + + + x = x - mdi->drag_start.x + child->x; + y = y - mdi->drag_start.y + child->y; + + + gtk_mdi_move (mdi, child->child, x, y); + } + break; + + default: + break; + } + + return FALSE; } static gboolean resize_child_callback(GtkWidget *widget, GdkEvent *event, gpointer data) { - GtkMdi *mdi; - GtkMdiChild *child; - - child = (GtkMdiChild *) data; - mdi = child->mdi; - - g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); - g_return_val_if_fail (GTK_IS_EVENT_BOX (widget), FALSE); - - switch (event->type) - { - case GDK_BUTTON_PRESS: - if (mdi->drag_button < 0) - { - if (gdk_pointer_grab (event->button.window, - FALSE, - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, - NULL, - event->button.time) != GDK_GRAB_SUCCESS) - return FALSE; - - mdi->drag_button = event->button.button; - if ((child->state == CHILD_MAXIMIZED) || (child->state == CHILD_ICONIFIED)) - { - child->state = CHILD_NORMAL; - child->x = child->widget->allocation.x; - child->y = child->widget->allocation.y; - child->width = child->widget->allocation.width; - child->height = child->widget->allocation.height; - } - - } - break; - - case GDK_BUTTON_RELEASE: - if (mdi->drag_button < 0) - return FALSE; - - if (mdi->drag_button == event->button.button) - { - int width, height; - - gdk_pointer_ungrab (event->button.time); - mdi->drag_button = -1; - - width = event->button.x + widget->allocation.x; - height = event->button.y + widget->allocation.y; - - width = MAX (width, GTK_MDI_MIN_WIDTH); - height = MAX (height, GTK_MDI_MIN_HEIGHT); - - gtk_widget_set_size_request (child->widget, width, height); - gtk_widget_queue_resize (child->widget); - } - break; - - case GDK_MOTION_NOTIFY: - { - int x, y; - int width, height; - - if (mdi->drag_button < 0) - return FALSE; - - gdk_window_get_pointer (widget->window, &x, &y, NULL); - - width = x + widget->allocation.x; - height = y + widget->allocation.y; - - width = MAX (width, GTK_MDI_MIN_WIDTH); - height = MAX (height, GTK_MDI_MIN_HEIGHT); - - gtk_widget_set_size_request (child->widget, width, height); - gtk_widget_queue_resize (child->widget); - } - break; - - default: - break; - } - - return FALSE; + GtkMdi *mdi; + GtkMdiChild *child; + + child = (GtkMdiChild *) data; + mdi = child->mdi; + + g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); + g_return_val_if_fail (GTK_IS_EVENT_BOX (widget), FALSE); + + switch (event->type) + { + case GDK_BUTTON_PRESS: + if (mdi->drag_button < 0) + { + if (gdk_pointer_grab (event->button.window, + FALSE, + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, + NULL, + event->button.time) != GDK_GRAB_SUCCESS) + return FALSE; + + mdi->drag_button = event->button.button; + if ((child->state == CHILD_MAXIMIZED) || (child->state == CHILD_ICONIFIED)) + { + child->state = CHILD_NORMAL; + child->x = child->widget->allocation.x; + child->y = child->widget->allocation.y; + child->width = child->widget->allocation.width; + child->height = child->widget->allocation.height; + } + + } + break; + + case GDK_BUTTON_RELEASE: + if (mdi->drag_button < 0) + return FALSE; + + if (mdi->drag_button == event->button.button) + { + int width, height; + + gdk_pointer_ungrab (event->button.time); + mdi->drag_button = -1; + + width = event->button.x + widget->allocation.x; + height = event->button.y + widget->allocation.y; + + width = MAX (width, GTK_MDI_MIN_WIDTH); + height = MAX (height, GTK_MDI_MIN_HEIGHT); + + gtk_widget_set_size_request (child->widget, width, height); + gtk_widget_queue_resize (child->widget); + } + break; + + case GDK_MOTION_NOTIFY: + { + int x, y; + int width, height; + + if (mdi->drag_button < 0) + return FALSE; + + gdk_window_get_pointer (widget->window, &x, &y, NULL); + + width = x + widget->allocation.x; + height = y + widget->allocation.y; + + width = MAX (width, GTK_MDI_MIN_WIDTH); + height = MAX (height, GTK_MDI_MIN_HEIGHT); + + gtk_widget_set_size_request (child->widget, width, height); + gtk_widget_queue_resize (child->widget); + } + break; + + default: + break; + } + + return FALSE; } static gboolean iconify_child_callback (GtkWidget *widget, GdkEvent *event, gpointer data) { - GtkMdiChild *child; - child = (GtkMdiChild *) data; - if (child->state == CHILD_ICONIFIED) - { - child->state = CHILD_NORMAL; - } - else - { - child->state = CHILD_ICONIFIED; - } - if (GTK_WIDGET_VISIBLE (child->widget)) - gtk_widget_queue_resize (GTK_WIDGET (child->widget)); - return FALSE; + GtkMdiChild *child; + child = (GtkMdiChild *) data; + if (child->state == CHILD_ICONIFIED) + { + child->state = CHILD_NORMAL; + } + else + { + child->state = CHILD_ICONIFIED; + } + if (GTK_WIDGET_VISIBLE (child->widget)) + gtk_widget_queue_resize (GTK_WIDGET (child->widget)); + return FALSE; } static gboolean maximize_child_callback (GtkWidget *widget, GdkEvent * event, gpointer data) { - GtkMdiChild *child; - child = (GtkMdiChild *) data; - if (child->state == CHILD_MAXIMIZED) - { - child->state = CHILD_NORMAL; - } - else - { - child->state = CHILD_MAXIMIZED; - } - if (GTK_WIDGET_VISIBLE (child->widget)) - gtk_widget_queue_resize (GTK_WIDGET (child->widget)); - return FALSE; + GtkMdiChild *child; + child = (GtkMdiChild *) data; + if (child->state == CHILD_MAXIMIZED) + { + child->state = CHILD_NORMAL; + } + else + { + child->state = CHILD_MAXIMIZED; + } + if (GTK_WIDGET_VISIBLE (child->widget)) + gtk_widget_queue_resize (GTK_WIDGET (child->widget)); + return FALSE; } static gboolean kill_child_callback (GtkWidget *widget, GdkEvent *event, gpointer data) { - GtkMdiChild *child; - GtkMdi *mdi; - - child = (GtkMdiChild *) data; - mdi = child->mdi; - - g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); - - gtk_mdi_remove_true (GTK_CONTAINER (mdi), child->widget); - return FALSE; + GtkMdiChild *child; + GtkMdi *mdi; + + child = (GtkMdiChild *) data; + mdi = child->mdi; + + g_return_val_if_fail (GTK_IS_MDI (mdi), FALSE); + + gtk_mdi_remove_true (GTK_CONTAINER (mdi), child->widget); + return FALSE; } static GtkMdiChild *get_child (GtkMdi *mdi, GtkWidget *widget) { - GList *children; - - children = mdi->children; - while (children) - { - GtkMdiChild *child; - - child = children->data; - children = children->next; - - if (child->child == widget) - return child; - } - - return NULL; + GList *children; + + children = mdi->children; + while (children) + { + GtkMdiChild *child; + + child = children->data; + children = children->next; + + if (child->child == widget) + return child; + } + + return NULL; } #endif static void _dw_msleep(long period) { #ifdef __sun__ - /* usleep() isn't threadsafe on Solaris */ - struct timespec req; - - req.tv_sec = 0; - req.tv_nsec = period * 10000000; - - nanosleep(&req, NULL); + /* usleep() isn't threadsafe on Solaris */ + struct timespec req; + + req.tv_sec = 0; + req.tv_nsec = period * 10000000; + + nanosleep(&req, NULL); #else - usleep(period * 1000); + usleep(period * 1000); #endif } /* Finds the translation function for a given signal name */ static void *_findsigfunc(char *signame) { - int z; - - for(z=0;z<SIGNALMAX;z++) - { - if(strcasecmp(signame, SignalTranslate[z].name) == 0) - return SignalTranslate[z].func; - } - return NULL; + int z; + + for(z=0;z<SIGNALMAX;z++) + { + if(strcasecmp(signame, SignalTranslate[z].name) == 0) + return SignalTranslate[z].func; + } + return NULL; } static SignalHandler _get_signal_handler(GtkWidget *widget, gpointer data) { - int counter = (int)data; - SignalHandler sh; - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); - sh.window = (HWND)gtk_object_get_data(GTK_OBJECT(widget), text); - sprintf(text, "_dw_sigfunc%d", counter); - sh.func = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); - sprintf(text, "_dw_intfunc%d", counter); - sh.intfunc = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); - sprintf(text, "_dw_sigdata%d", counter); - sh.data = gtk_object_get_data(GTK_OBJECT(widget), text); - sprintf(text, "_dw_sigcid%d", counter); - sh.cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); - - return sh; + int counter = (int)data; + SignalHandler sh; + char text[100]; + + sprintf(text, "_dw_sigwindow%d", counter); + sh.window = (HWND)gtk_object_get_data(GTK_OBJECT(widget), text); + sprintf(text, "_dw_sigfunc%d", counter); + sh.func = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); + sprintf(text, "_dw_intfunc%d", counter); + sh.intfunc = (void *)gtk_object_get_data(GTK_OBJECT(widget), text); + sprintf(text, "_dw_sigdata%d", counter); + sh.data = gtk_object_get_data(GTK_OBJECT(widget), text); + sprintf(text, "_dw_sigcid%d", counter); + sh.cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); + + return sh; } static void _remove_signal_handler(GtkWidget *widget, int counter) { - char text[100]; - gint cid; - - sprintf(text, "_dw_sigcid%d", counter); - cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); - gtk_signal_disconnect(GTK_OBJECT(widget), cid); - gtk_object_set_data(GTK_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigwindow%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigfunc%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, NULL); - sprintf(text, "_dw_intfunc%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigdata%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, NULL); + char text[100]; + gint cid; + + sprintf(text, "_dw_sigcid%d", counter); + cid = (gint)gtk_object_get_data(GTK_OBJECT(widget), text); + gtk_signal_disconnect(GTK_OBJECT(widget), cid); + gtk_object_set_data(GTK_OBJECT(widget), text, NULL); + sprintf(text, "_dw_sigwindow%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, NULL); + sprintf(text, "_dw_sigfunc%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, NULL); + sprintf(text, "_dw_intfunc%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, NULL); + sprintf(text, "_dw_sigdata%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, NULL); } static int _set_signal_handler(GtkWidget *widget, HWND window, void *func, gpointer data, void *intfunc) { - int counter = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_sigcounter"); - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)window); - sprintf(text, "_dw_sigfunc%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)func); - sprintf(text, "_dw_intfunc%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)intfunc); - sprintf(text, "_dw_sigdata%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)data); - - counter++; - gtk_object_set_data(GTK_OBJECT(widget), "_dw_sigcounter", (gpointer)counter); - - return counter - 1; + int counter = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_sigcounter"); + char text[100]; + + sprintf(text, "_dw_sigwindow%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)window); + sprintf(text, "_dw_sigfunc%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)func); + sprintf(text, "_dw_intfunc%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)intfunc); + sprintf(text, "_dw_sigdata%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)data); + + counter++; + gtk_object_set_data(GTK_OBJECT(widget), "_dw_sigcounter", GINT_TO_POINTER(counter)); + + return counter - 1; } static void _set_signal_handler_id(GtkWidget *widget, int counter, gint cid) { - char text[100]; - - sprintf(text, "_dw_sigcid%d", counter); - gtk_object_set_data(GTK_OBJECT(widget), text, (gpointer)cid); + char text[100]; + + sprintf(text, "_dw_sigcid%d", counter); + gtk_object_set_data(GTK_OBJECT(widget), text, GINT_TO_POINTER(cid)); } static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) { - SignalHandler work = _get_signal_handler((GtkWidget *)window, data); - int retval = FALSE; - - if(work.window) - { - int (*setfocusfunc)(HWND, void *) = work.func; - - retval = setfocusfunc(work.window, work.data); - } - return retval; + SignalHandler work = _get_signal_handler((GtkWidget *)window, data); + int retval = FALSE; + + if(work.window) + { + int (*setfocusfunc)(HWND, void *) = work.func; + + retval = setfocusfunc(work.window, work.data); + } + return retval; } static gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*buttonfunc)(HWND, int, int, int, void *) = work.func; - int mybutton = event->button; - - if(event->button == 3) - mybutton = 2; - else if(event->button == 2) - mybutton = 3; - - retval = buttonfunc(work.window, event->x, event->y, mybutton, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*buttonfunc)(HWND, int, int, int, void *) = work.func; + int mybutton = event->button; + + if(event->button == 3) + mybutton = 2; + else if(event->button == 2) + mybutton = 3; + + retval = buttonfunc(work.window, event->x, event->y, mybutton, work.data); + } + return retval; } static gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*buttonfunc)(HWND, int, int, int, void *) = work.func; - int mybutton = event->button; - - if(event->button == 3) - mybutton = 2; - else if(event->button == 2) - mybutton = 3; - - retval = buttonfunc(work.window, event->x, event->y, mybutton, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*buttonfunc)(HWND, int, int, int, void *) = work.func; + int mybutton = event->button; + + if(event->button == 3) + mybutton = 2; + else if(event->button == 2) + mybutton = 3; + + retval = buttonfunc(work.window, event->x, event->y, mybutton, work.data); + } + return retval; } static gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*motionfunc)(HWND, int, int, int, void *) = work.func; - int keys = 0, x, y; - GdkModifierType state; - - if (event->is_hint) - gdk_window_get_pointer (event->window, &x, &y, &state); - else - { - x = event->x; - y = event->y; - state = event->state; - } - - if (state & GDK_BUTTON1_MASK) - keys = DW_BUTTON1_MASK; - if (state & GDK_BUTTON3_MASK) - keys |= DW_BUTTON2_MASK; - if (state & GDK_BUTTON2_MASK) - keys |= DW_BUTTON3_MASK; - - retval = motionfunc(work.window, x, y, keys, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*motionfunc)(HWND, int, int, int, void *) = work.func; + int keys = 0, x, y; + GdkModifierType state; + + if (event->is_hint) + gdk_window_get_pointer (event->window, &x, &y, &state); + else + { + x = event->x; + y = event->y; + state = event->state; + } + + if (state & GDK_BUTTON1_MASK) + keys = DW_BUTTON1_MASK; + if (state & GDK_BUTTON3_MASK) + keys |= DW_BUTTON2_MASK; + if (state & GDK_BUTTON2_MASK) + keys |= DW_BUTTON3_MASK; + + retval = motionfunc(work.window, x, y, keys, work.data); + } + return retval; } static gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*closefunc)(HWND, void *) = work.func; - - retval = closefunc(work.window, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*closefunc)(HWND, void *) = work.func; + + retval = closefunc(work.window, work.data); + } + return retval; } static gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*keypressfunc)(HWND, char, int, int, void *) = work.func; - - retval = keypressfunc(work.window, *event->string, event->keyval, - event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK), work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*keypressfunc)(HWND, char, int, int, void *) = work.func; + + retval = keypressfunc(work.window, *event->string, event->keyval, + event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK), work.data); + } + return retval; } static gint _generic_event(GtkWidget *widget, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*genericfunc)(HWND, void *) = work.func; - - retval = genericfunc(work.window, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*genericfunc)(HWND, void *) = work.func; + + retval = genericfunc(work.window, work.data); + } + return retval; } static gint _activate_event(GtkWidget *widget, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window && !_dw_ignore_click) - { - int (*activatefunc)(HWND, void *) = work.func; - - retval = activatefunc(popup ? popup : work.window, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window && !_dw_ignore_click) + { + int (*activatefunc)(HWND, void *) = work.func; + + retval = activatefunc(popup ? popup : work.window, work.data); + } + return retval; } static gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*sizefunc)(HWND, int, int, void *) = work.func; - - retval = sizefunc(work.window, event->width, event->height, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*sizefunc)(HWND, int, int, void *) = work.func; + + retval = sizefunc(work.window, event->width, event->height, work.data); + } + return retval; } static gint _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - DWExpose exp; - int (*exposefunc)(HWND, DWExpose *, void *) = work.func; - - exp.x = event->area.x; - exp.y = event->area.y; - exp.width = event->area.width; - exp.height = event->area.height; - retval = exposefunc(work.window, &exp, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + DWExpose exp; + int (*exposefunc)(HWND, DWExpose *, void *) = work.func; + + exp.x = event->area.x; + exp.y = event->area.y; + exp.width = event->area.width; + exp.height = event->area.height; + retval = exposefunc(work.window, &exp, work.data); + } + return retval; } static gint _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - static int _dw_recursing = 0; - int retval = FALSE; - - if(_dw_recursing) - return FALSE; - - if(work.window) - { - int (*selectfunc)(HWND, int, void *) = work.func; - GList *list; - int item = 0; - - _dw_recursing = 1; - - if(GTK_IS_COMBO(work.window)) - list = GTK_LIST(GTK_COMBO(work.window)->list)->children; - else if(GTK_IS_LIST(widget)) - list = GTK_LIST(widget)->children; - else - return FALSE; - - while(list) - { - if(list->data == (gpointer)child) - { - if(!gtk_object_get_data(GTK_OBJECT(work.window), "_dw_appending")) - { - gtk_object_set_data(GTK_OBJECT(work.window), "_dw_item", (gpointer)item); - if(selectfunc) - retval = selectfunc(work.window, item, work.data); - } - break; - } - item++; - list = list->next; - } - _dw_recursing = 0; - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + static int _dw_recursing = 0; + int retval = FALSE; + + if(_dw_recursing) + return FALSE; + + if(work.window) + { + int (*selectfunc)(HWND, int, void *) = work.func; + GList *list; + int item = 0; + + _dw_recursing = 1; + + if(GTK_IS_COMBO(work.window)) + list = GTK_LIST(GTK_COMBO(work.window)->list)->children; + else if(GTK_IS_LIST(widget)) + list = GTK_LIST(widget)->children; + else + return FALSE; + + while(list) + { + if(list->data == (gpointer)child) + { + if(!gtk_object_get_data(GTK_OBJECT(work.window), "_dw_appending")) + { + gtk_object_set_data(GTK_OBJECT(work.window), "_dw_item", GINT_TO_POINTER(item)); + if(selectfunc) + retval = selectfunc(work.window, item, work.data); + } + break; + } + item++; + list = list->next; + } + _dw_recursing = 0; + } + return retval; } static gint _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - if(event->button == 3) - { - int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; - char *text; - int row, col; - - gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); - - text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); - retval = contextfunc(work.window, text, event->x, event->y, work.data, NULL); - } - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + if(event->button == 3) + { + int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; + char *text; + int row, col; + + gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); + + text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); + retval = contextfunc(work.window, text, event->x, event->y, work.data, NULL); + } + } + return retval; } static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - if(event->button == 3) - { -#if GTK_MAJOR_VERSION > 1 - int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; - char *text = NULL; - void *itemdata = NULL; - - if(widget && GTK_IS_TREE_VIEW(widget)) - { - GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); - GtkTreeIter iter; - - if(sel && gtk_tree_selection_get_selected(sel, NULL, &iter)) - { - GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); - gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, -1); - } - } - - retval = contextfunc(work.window, text, event->x, event->y, work.data, itemdata); + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + if(event->button == 3) + { +#if GTK_MAJOR_VERSION > 1 + int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; + char *text = NULL; + void *itemdata = NULL; + + if(widget && GTK_IS_TREE_VIEW(widget)) + { + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); + GtkTreeIter iter; + + if(sel && gtk_tree_selection_get_selected(sel, NULL, &iter)) + { + GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); + gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, -1); + } + } + + retval = contextfunc(work.window, text, event->x, event->y, work.data, itemdata); #else - int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; - char *text = (char *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_text"); - void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_itemdata"); - - if(widget != work.window) - { - GtkWidget *tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(work.window)); - - if(tree && GTK_IS_TREE(tree)) - { - GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); - - if(lastselect && GTK_IS_TREE_ITEM(lastselect)) - { - text = (char *)gtk_object_get_data(GTK_OBJECT(lastselect), "_dw_text"); - itemdata = (void *)gtk_object_get_data(GTK_OBJECT(lastselect), "_dw_itemdata"); - } - } - } - - retval = contextfunc(work.window, text, event->x, event->y, work.data, itemdata); -#endif - } - } - return retval; + int (*contextfunc)(HWND, char *, int, int, void *, void *) = work.func; + char *text = (char *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_text"); + void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_itemdata"); + + if(widget != work.window) + { + GtkWidget *tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(work.window)); + + if(tree && GTK_IS_TREE(tree)) + { + GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); + + if(lastselect && GTK_IS_TREE_ITEM(lastselect)) + { + text = (char *)gtk_object_get_data(GTK_OBJECT(lastselect), "_dw_text"); + itemdata = (void *)gtk_object_get_data(GTK_OBJECT(lastselect), "_dw_itemdata"); + } + } + } + + retval = contextfunc(work.window, text, event->x, event->y, work.data, itemdata); +#endif + } + } + return retval; } #if GTK_MAJOR_VERSION > 1 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data) { - GtkWidget *item, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); - int retval = FALSE; - - if(widget) - { - SignalHandler work = _get_signal_handler(widget, data); - - if(work.window) - { - int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; - GtkTreeIter iter; - char *text = NULL; - void *itemdata = NULL; - - if(gtk_tree_selection_get_selected(sel, NULL, &iter)) - { - GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); - gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, 3, &item, -1); - retval = treeselectfunc(work.window, (HTREEITEM)item, text, work.data, itemdata); - } - } - } - return retval; + GtkWidget *item, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); + int retval = FALSE; + + if(widget) + { + SignalHandler work = _get_signal_handler(widget, data); + + if(work.window) + { + int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; + GtkTreeIter iter; + char *text = NULL; + void *itemdata = NULL; + + if(gtk_tree_selection_get_selected(sel, NULL, &iter)) + { + GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); + gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, 3, &item, -1); + retval = treeselectfunc(work.window, (HTREEITEM)item, text, work.data, itemdata); + } + } + } + return retval; } static gint _tree_expand_event(GtkTreeView *widget, GtkTreeIter *iter, GtkTreePath *path, gpointer data) { - SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); - int retval = FALSE; - - if(!_dw_ignore_expand && work.window) - { - int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; - retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data); - } - return retval; + SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); + int retval = FALSE; + + if(!_dw_ignore_expand && work.window) + { + int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; + retval = treeexpandfunc(work.window, (HTREEITEM)iter, work.data); + } + return retval; } #else static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) { - SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); - GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); - int retval = FALSE; - - if(treeroot && GTK_IS_TREE(treeroot)) - { - GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "_dw_lastselect"); - if(lastselect && GTK_IS_TREE_ITEM(lastselect)) - gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); - gtk_object_set_data(GTK_OBJECT(treeroot), "_dw_lastselect", (gpointer)child); - } - - if(work.window) - { - int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; - char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "_dw_text"); - void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(child), "_dw_itemdata"); - retval = treeselectfunc(work.window, (HTREEITEM)child, text, work.data, itemdata); - } - return retval; + SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); + GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); + int retval = FALSE; + + if(treeroot && GTK_IS_TREE(treeroot)) + { + GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "_dw_lastselect"); + if(lastselect && GTK_IS_TREE_ITEM(lastselect)) + gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); + gtk_object_set_data(GTK_OBJECT(treeroot), "_dw_lastselect", (gpointer)child); + } + + if(work.window) + { + int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; + char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "_dw_text"); + void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(child), "_dw_itemdata"); + retval = treeselectfunc(work.window, (HTREEITEM)child, text, work.data, itemdata); + } + return retval; } static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data) { - SignalHandler work = _get_signal_handler((GtkWidget *)treeitem, data); - int retval = FALSE; - - if(!_dw_ignore_expand && work.window) - { - int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; - retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); - } - return retval; + SignalHandler work = _get_signal_handler((GtkWidget *)treeitem, data); + int retval = FALSE; + + if(!_dw_ignore_expand && work.window) + { + int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; + retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); + } + return retval; } #endif static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) - { - int (*contextfunc)(HWND, char *, void *) = work.func; - char *text; - int row, col; - - gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); - - text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); - retval = contextfunc(work.window, text, work.data); - gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", (gpointer)1); - } - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) + { + int (*contextfunc)(HWND, char *, void *) = work.func; + char *text; + int row, col; + + gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); + + text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); + retval = contextfunc(work.window, text, work.data); + gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", GINT_TO_POINTER(1)); + } + } + return retval; } static gint _container_enter_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window && event->keyval == VK_RETURN) - { - int (*contextfunc)(HWND, char *, void *) = work.func; - char *text; - - text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), GTK_CLIST(widget)->focus_row); - retval = contextfunc(work.window, text, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window && event->keyval == VK_RETURN) + { + int (*contextfunc)(HWND, char *, void *) = work.func; + char *text; + + text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), GTK_CLIST(widget)->focus_row); + retval = contextfunc(work.window, text, work.data); + } + return retval; } /* Return the logical page id from the physical page id */ int _get_logical_page(HWND handle, unsigned long pageid) { - int z; - GtkWidget **pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); - GtkWidget *thispage = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), pageid); - - if(pagearray && thispage) - { - for(z=0;z<256;z++) - { - if(thispage == pagearray[z]) - return z; - } - } - return 256; + int z; + GtkWidget **pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); + GtkWidget *thispage = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), pageid); + + if(pagearray && thispage) + { + for(z=0;z<256;z++) + { + if(thispage == pagearray[z]) + return z; + } + } + return 256; } static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data) { - SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); - int retval = FALSE; - - if(work.window) - { - int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; - retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data); - } - return retval; + SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); + int retval = FALSE; + + if(work.window) + { + int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; + retval = switchpagefunc(work.window, _get_logical_page(GTK_WIDGET(notebook), page_num), work.data); + } + return retval; } static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - int retval = FALSE; - - if(work.window) - { - int (*clickcolumnfunc)(HWND, int, void *) = work.func; - retval = clickcolumnfunc(work.window, column_num, work.data); - } - return retval; + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*clickcolumnfunc)(HWND, int, void *) = work.func; + retval = clickcolumnfunc(work.window, column_num, work.data); + } + return retval; } static gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) { - SignalHandler work = _get_signal_handler(widget, data); - char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); - int (*contextfunc)(HWND, HWND, char *, void *, void *) = work.func; - - if(!work.window) - return TRUE; - - if(gtk_object_get_data(GTK_OBJECT(widget), "_dw_double_click")) - { - gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", (gpointer)0); - return TRUE; - } - return contextfunc(work.window, 0, rowdata, work.data, 0);; + SignalHandler work = _get_signal_handler(widget, data); + char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); + int (*contextfunc)(HWND, HWND, char *, void *, void *) = work.func; + + if(!work.window) + return TRUE; + + if(gtk_object_get_data(GTK_OBJECT(widget), "_dw_double_click")) + { + gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", GINT_TO_POINTER(0)); + return TRUE; + } + return contextfunc(work.window, 0, rowdata, work.data, 0);; } static int _round_value(gfloat val) { - int newval = (int)val; - - if(val >= 0.5 + (gfloat)newval) - newval++; - - return newval; + int newval = (int)val; + + if(val >= 0.5 + (gfloat)newval) + newval++; + + return newval; } static gint _value_changed_event(GtkAdjustment *adjustment, gpointer data) { - int max = _round_value(adjustment->upper); - int val = _round_value(adjustment->value); - GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); - GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); - GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); - - if(slider) - { - SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); - - if(work.window) - { - int (*valuechangedfunc)(HWND, int, void *) = work.func; - - if(GTK_IS_VSCALE(slider)) - valuechangedfunc(work.window, (max - val) - 1, work.data); - else - valuechangedfunc(work.window, val, work.data); - } - } - else if(scrollbar || spinbutton) - { - SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); - - if(work.window) - { - int (*valuechangedfunc)(HWND, int, void *) = work.func; - - valuechangedfunc(work.window, val, work.data); - } - } - return FALSE; + int max = _round_value(adjustment->upper); + int val = _round_value(adjustment->value); + GtkWidget *slider = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_slider"); + GtkWidget *spinbutton = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_spinbutton"); + GtkWidget *scrollbar = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(adjustment), "_dw_scrollbar"); + + if(slider) + { + SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); + + if(work.window) + { + int (*valuechangedfunc)(HWND, int, void *) = work.func; + + if(GTK_IS_VSCALE(slider)) + valuechangedfunc(work.window, (max - val) - 1, work.data); + else + valuechangedfunc(work.window, val, work.data); + } + } + else if(scrollbar || spinbutton) + { + SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); + + if(work.window) + { + int (*valuechangedfunc)(HWND, int, void *) = work.func; + + valuechangedfunc(work.window, val, work.data); + } + } + return FALSE; } static gint _default_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) { - GtkWidget *next = (GtkWidget *)data; - - if(next) - { - if(event->keyval == GDK_Return) - { - if(GTK_IS_BUTTON(next)) - gtk_signal_emit_by_name(GTK_OBJECT(next), "clicked"); - else - gtk_widget_grab_focus(next); - } - } - return FALSE; + GtkWidget *next = (GtkWidget *)data; + + if(next) + { + if(event->keyval == GDK_Return) + { + if(GTK_IS_BUTTON(next)) + gtk_signal_emit_by_name(GTK_OBJECT(next), "clicked"); + else + gtk_widget_grab_focus(next); + } + } + return FALSE; } static GdkPixmap *_find_private_pixmap(GdkBitmap **bitmap, long id, unsigned long *userwidth, unsigned long *userheight) { - if(id < _PixmapCount && _PixmapArray[id].used) - { - *bitmap = _PixmapArray[id].mask; - if(userwidth) - *userwidth = _PixmapArray[id].width; - if(userheight) - *userheight = _PixmapArray[id].height; - return _PixmapArray[id].pixmap; - } - return NULL; + if(id < _PixmapCount && _PixmapArray[id].used) + { + *bitmap = _PixmapArray[id].mask; + if(userwidth) + *userwidth = _PixmapArray[id].width; + if(userheight) + *userheight = _PixmapArray[id].height; + return _PixmapArray[id].pixmap; + } + return NULL; } static GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle, unsigned long *userwidth, unsigned long *userheight) { - char *data = NULL; - int z; - - if(id & (1 << 31)) - return _find_private_pixmap(bitmap, (id & 0xFFFFFF), userwidth, userheight); - - for(z=0;z<_resources.resource_max;z++) - { - if(_resources.resource_id[z] == id) - { - data = _resources.resource_data[z]; - break; - } - } - - if(data) - { - GdkPixmap *icon_pixmap = NULL; -#if GTK_MAJOR_VERSION > 1 - GdkPixbuf *icon_pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)data); - - if(userwidth) - *userwidth = gdk_pixbuf_get_width(icon_pixbuf); - if(userheight) - *userheight = gdk_pixbuf_get_height(icon_pixbuf); - - gdk_pixbuf_render_pixmap_and_mask(icon_pixbuf, &icon_pixmap, bitmap, 1); - g_object_unref(icon_pixbuf); + char *data = NULL; + int z; + + if(id & (1 << 31)) + return _find_private_pixmap(bitmap, (id & 0xFFFFFF), userwidth, userheight); + + for(z=0;z<_resources.resource_max;z++) + { + if(_resources.resource_id[z] == id) + { + data = _resources.resource_data[z]; + break; + } + } + + if(data) + { + GdkPixmap *icon_pixmap = NULL; +#if GTK_MAJOR_VERSION > 1 + GdkPixbuf *icon_pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)data); + + if(userwidth) + *userwidth = gdk_pixbuf_get_width(icon_pixbuf); + if(userheight) + *userheight = gdk_pixbuf_get_height(icon_pixbuf); + + gdk_pixbuf_render_pixmap_and_mask(icon_pixbuf, &icon_pixmap, bitmap, 1); + g_object_unref(icon_pixbuf); #elif defined(USE_IMLIB) - gdk_imlib_data_to_pixmap((char **)data, &icon_pixmap, bitmap); + gdk_imlib_data_to_pixmap((char **)data, &icon_pixmap, bitmap); #else - icon_pixmap = gdk_pixmap_create_from_xpm_d(handle->window, bitmap, &_colors[DW_CLR_PALEGRAY], (char **)data); -#endif - return icon_pixmap; - } - return NULL; + icon_pixmap = gdk_pixmap_create_from_xpm_d(handle->window, bitmap, &_colors[DW_CLR_PALEGRAY], (char **)data); +#endif + return icon_pixmap; + } + return NULL; } #if GTK_MAJOR_VERSION > 1 static GdkPixbuf *_find_private_pixbuf(long id) { - if(id < _PixmapCount && _PixmapArray[id].used) - return _PixmapArray[id].pixbuf; - return NULL; + if(id < _PixmapCount && _PixmapArray[id].used) + return _PixmapArray[id].pixbuf; + return NULL; } static GdkPixbuf *_find_pixbuf(long id) { - char *data = NULL; - int z; - - if(id & (1 << 31)) - return _find_private_pixbuf((id & 0xFFFFFF)); - - for(z=0;z<_resources.resource_max;z++) - { - if(_resources.resource_id[z] == id) - { - data = _resources.resource_data[z]; - break; - } - } - - if(data) - return gdk_pixbuf_new_from_xpm_data((const char **)data); - return NULL; + char *data = NULL; + int z; + + if(id & (1 << 31)) + return _find_private_pixbuf((id & 0xFFFFFF)); + + for(z=0;z<_resources.resource_max;z++) + { + if(_resources.resource_id[z] == id) + { + data = _resources.resource_data[z]; + break; + } + } + + if(data) + return gdk_pixbuf_new_from_xpm_data((const char **)data); + return NULL; } #endif @@ -1835,137 +1842,102 @@ sizehints.flags = (PBaseSize|PMinSize|PResizeInc); XSetWMNormalHints (GDK_DISPLAY(), - GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window), - &sizehints); + GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window), + &sizehints); gdk_flush (); } /* Find the index of a given thread */ static int _find_thread_index(DWTID tid) { - int z; - - for(z=0;z<DW_THREAD_LIMIT;z++) - { - if(_dw_thread_list[z] == tid) - return z; - } - return 0; + int z; + + for(z=0;z<DW_THREAD_LIMIT;z++) + { + if(_dw_thread_list[z] == tid) + return z; + } + return 0; } /* Add a thread id to the thread list */ static void _dw_thread_add(DWTID tid) { - int z; - - for(z=0;z<DW_THREAD_LIMIT;z++) - { - if(_dw_thread_list[z] == tid) - return; - - if(_dw_thread_list[z] == (DWTID)-1) - { - _dw_thread_list[z] = tid; - _foreground[z].pixel = _foreground[z].red =_foreground[z].green = _foreground[z].blue = 0; - _background[z].pixel = 1; - _background[z].red = _background[z].green = _background[z].blue = 0; - _transparent[z] = 1; - _clipboard_contents[z] = NULL; - _clipboard_object[z] = NULL; - return; - } - } + int z; + + for(z=0;z<DW_THREAD_LIMIT;z++) + { + if(_dw_thread_list[z] == tid) + return; + + if(_dw_thread_list[z] == (DWTID)-1) + { + _dw_thread_list[z] = tid; + _foreground[z].pixel = _foreground[z].red =_foreground[z].green = _foreground[z].blue = 0; + _background[z].pixel = 1; + _background[z].red = _background[z].green = _background[z].blue = 0; + _transparent[z] = 1; + _clipboard_contents[z] = NULL; + _clipboard_object[z] = NULL; + return; + } + } } /* Remove a thread id to the thread list */ static void _dw_thread_remove(DWTID tid) { - int z; - - for(z=0;z<DW_THREAD_LIMIT;z++) - { - if(_dw_thread_list[z] == (DWTID)tid) - { - _dw_thread_list[z] = (DWTID)-1; - if ( _clipboard_contents[z] != NULL ) - { - g_free( _clipboard_contents[z] ); - _clipboard_contents[z] = NULL;; - } - _clipboard_object[z] = NULL;; - } - } + int z; + + for(z=0;z<DW_THREAD_LIMIT;z++) + { + if(_dw_thread_list[z] == (DWTID)tid) + { + _dw_thread_list[z] = (DWTID)-1; + if ( _clipboard_contents[z] != NULL ) + { + g_free( _clipboard_contents[z] ); + _clipboard_contents[z] = NULL;; + } + _clipboard_object[z] = NULL;; + } + } } /* Try to load the mozilla embed shared libary */ #ifdef USE_GTKMOZEMBED #include <ctype.h> -static char _dw_mozdir[1024]; - void init_mozembed(void) { - void *handle = NULL; - FILE *fp = popen("pkg-config --libs-only-L mozilla-gtkmozembed", "r"); - - /* First we try to get the correct location - * from pkg-config. - */ - if(fp) - { - fgets(_dw_mozdir, 1024, fp); - - if(_dw_mozdir[0] == '-' && _dw_mozdir[1] == 'L') - { - int x, len = strlen(_dw_mozdir); - - for(x=len;x>0;x--) - { - if(!isalpha(_dw_mozdir[x]) && !isdigit(_dw_mozdir[x]) && _dw_mozdir[x] != '/') - _dw_mozdir[x] = 0; - } - strncat(_dw_mozdir, "/libgtkembedmoz.so", 1024); - handle = dlopen(&_dw_mozdir[2], RTLD_NOW); - } - fclose(fp); - } - /* Try the default path */ - if(!handle) - { - strncpy(_dw_mozdir, "libgtkembedmoz.so", 1024); - handle = dlopen(_dw_mozdir, RTLD_NOW); - } - /* Finally try some common locations */ - if(!handle) - { - strncpy(_dw_mozdir, "/usr/X11R6/lib/mozilla/libgtkembedmoz.so", 1024); - handle = dlopen(_dw_mozdir, RTLD_NOW); - } - if(!handle) - { - strncpy(_dw_mozdir, "/usr/lib/mozilla/libgtkembedmoz.so", 1024); - handle = dlopen(_dw_mozdir, RTLD_NOW); - } - if(!handle) - { - strncpy(_dw_mozdir, "/usr/local/lib/mozilla/libgtkembedmoz.so", 1024); - handle = dlopen(_dw_mozdir, RTLD_NOW); - } - - /* If we loaded it, grab the symbols we want */ - if(handle) - { - _gtk_moz_embed_go_back = dlsym(handle, "gtk_moz_embed_go_back"); - _gtk_moz_embed_go_forward = dlsym(handle, "gtk_moz_embed_go_forward"); - _gtk_moz_embed_load_url = dlsym(handle, "gtk_moz_embed_load_url"); - _gtk_moz_embed_reload = dlsym(handle, "gtk_moz_embed_reload"); - _gtk_moz_embed_stop_load = dlsym(handle, "gtk_moz_embed_stop_load"); - _gtk_moz_embed_render_data = dlsym(handle, "gtk_moz_embed_render_data"); - _dw_moz_embed_get_type = dlsym(handle, "gtk_moz_embed_get_type"); - _gtk_moz_embed_new = dlsym(handle, "gtk_moz_embed_new"); - } - else - _dw_mozdir[0] = 0; + void *handle = NULL; + gchar *profile; + handle = dlopen( "libgtkembedmoz.so", RTLD_LAZY ); + + /* If we loaded it, grab the symbols we want */ + if ( handle ) + { + _gtk_moz_embed_go_back = dlsym(handle, "gtk_moz_embed_go_back"); + _gtk_moz_embed_go_forward = dlsym(handle, "gtk_moz_embed_go_forward"); + _gtk_moz_embed_load_url = dlsym(handle, "gtk_moz_embed_load_url"); + _gtk_moz_embed_reload = dlsym(handle, "gtk_moz_embed_reload"); + _gtk_moz_embed_stop_load = dlsym(handle, "gtk_moz_embed_stop_load"); + _gtk_moz_embed_render_data = dlsym(handle, "gtk_moz_embed_render_data"); + _dw_moz_embed_get_type = dlsym(handle, "gtk_moz_embed_get_type"); + _gtk_moz_embed_new = dlsym(handle, "gtk_moz_embed_new"); + _gtk_moz_embed_can_go_back = dlsym(handle, "gtk_moz_embed_can_go_back"); + _gtk_moz_embed_can_go_forward = dlsym(handle, "gtk_moz_embed_can_go_forward"); + gtk_moz_embed_set_comp_path( "/usr/lib/mozilla"); + gtk_moz_embed_set_comp_path( "/usr/lib/firefox"); + profile = g_build_filename(g_get_home_dir(), ".dwindows/mozilla", NULL); + + /* initialize profile */ + gtk_moz_embed_set_profile_path(profile, "dwindows"); + g_free(profile); + + /* startup done */ + gtk_moz_embed_push_startup(); + } } #endif @@ -1977,47 +1949,47 @@ */ int dw_int_init(DWResources *res, int newthread, int *argc, char **argv[]) { - int z; - char *tmp; - - if(res) - { - _resources.resource_max = res->resource_max; - _resources.resource_id = res->resource_id; - _resources.resource_data = res->resource_data; - } - gtk_set_locale(); - g_thread_init(NULL); -#if GTK_MAJOR_VERSION > 1 - gdk_threads_init(); -#endif - - gtk_init(argc, argv); + int z; + char *tmp; + + if(res) + { + _resources.resource_max = res->resource_max; + _resources.resource_id = res->resource_id; + _resources.resource_data = res->resource_data; + } + gtk_set_locale(); + g_thread_init(NULL); +#if GTK_MAJOR_VERSION > 1 + gdk_threads_init(); +#endif + + gtk_init(argc, argv); #ifdef USE_IMLIB - gdk_imlib_init(); -#endif - /* Add colors to the system colormap */ - _dw_cmap = gdk_colormap_get_system(); - for(z=0;z<16;z++) - gdk_color_alloc(_dw_cmap, &_colors[z]); - - tmp = getenv("DW_BORDER_WIDTH"); - if(tmp) - _dw_border_width = atoi(tmp); - tmp = getenv("DW_BORDER_HEIGHT"); - if(tmp) - _dw_border_height = atoi(tmp); - - for(z=0;z<DW_THREAD_LIMIT;z++) - _dw_thread_list[z] = (DWTID)-1; - - gtk_rc_parse_string("style \"gtk-tooltips-style\" { bg[NORMAL] = \"#eeee00\" } widget \"gtk-tooltips\" style \"gtk-tooltips-style\""); + gdk_imlib_init(); +#endif + /* Add colors to the system colormap */ + _dw_cmap = gdk_colormap_get_system(); + for(z=0;z<16;z++) + gdk_color_alloc(_dw_cmap, &_colors[z]); + + tmp = getenv("DW_BORDER_WIDTH"); + if(tmp) + _dw_border_width = atoi(tmp); + tmp = getenv("DW_BORDER_HEIGHT"); + if(tmp) + _dw_border_height = atoi(tmp); + + for(z=0;z<DW_THREAD_LIMIT;z++) + _dw_thread_list[z] = (DWTID)-1; + + gtk_rc_parse_string("style \"gtk-tooltips-style\" { bg[NORMAL] = \"#eeee00\" } widget \"gtk-tooltips\" style \"gtk-tooltips-style\""); #ifdef USE_GTKMOZEMBED - init_mozembed(); -#endif - - return TRUE; + init_mozembed(); +#endif + + return TRUE; } /* @@ -2025,12 +1997,12 @@ */ void dw_main(void) { - gdk_threads_enter(); - _dw_thread = pthread_self(); - _dw_thread_add(_dw_thread); - gtk_main(); - _dw_thread = (pthread_t)-1; - gdk_threads_leave(); + gdk_threads_enter(); + _dw_thread = pthread_self(); + _dw_thread_add(_dw_thread); + gtk_main(); + _dw_thread = (pthread_t)-1; + gdk_threads_leave(); } /* @@ -2040,38 +2012,38 @@ */ void dw_main_sleep(int milliseconds) { - struct timeval tv, start; - pthread_t curr = pthread_self(); - - gettimeofday(&start, NULL); - - if(_dw_thread == (pthread_t)-1 || _dw_thread == curr) - { - pthread_t orig = _dw_thread; - - gettimeofday(&tv, NULL); - - while(((tv.tv_sec - start.tv_sec)*1000) + ((tv.tv_usec - start.tv_usec)/1000) <= milliseconds) - { - if(orig == (pthread_t)-1) - { - gdk_threads_enter(); - _dw_thread = curr; - } - if(gtk_events_pending()) - gtk_main_iteration(); - else - _dw_msleep(1); - if(orig == (pthread_t)-1) - { - _dw_thread = orig; - gdk_threads_leave(); - } - gettimeofday(&tv, NULL); - } - } - else - _dw_msleep(milliseconds); + struct timeval tv, start; + pthread_t curr = pthread_self(); + + gettimeofday(&start, NULL); + + if(_dw_thread == (pthread_t)-1 || _dw_thread == curr) + { + pthread_t orig = _dw_thread; + + gettimeofday(&tv, NULL); + + while(((tv.tv_sec - start.tv_sec)*1000) + ((tv.tv_usec - start.tv_usec)/1000) <= milliseconds) + { + if(orig == (pthread_t)-1) + { + gdk_threads_enter(); + _dw_thread = curr; + } + if(gtk_events_pending()) + gtk_main_iteration(); + else + _dw_msleep(1); + if(orig == (pthread_t)-1) + { + _dw_thread = orig; + gdk_threads_leave(); + } + gettimeofday(&tv, NULL); + } + } + else + _dw_msleep(milliseconds); } /* @@ -2079,12 +2051,12 @@ */ void dw_main_iteration(void) { - gdk_threads_enter(); - _dw_thread = pthread_self(); - _dw_thread_add(_dw_thread); - gtk_main_iteration(); - _dw_thread = (pthread_t)-1; - gdk_threads_leave(); + gdk_threads_enter(); + _dw_thread = pthread_self(); + _dw_thread_add(_dw_thread); + gtk_main_iteration(); + _dw_thread = (pthread_t)-1; + gdk_threads_leave(); } /* @@ -2095,7 +2067,7 @@ */ void dw_free(void *ptr) { - free(ptr); + free(ptr); } /* @@ -2105,14 +2077,14 @@ */ DWDialog *dw_dialog_new(void *data) { - DWDialog *tmp = malloc(sizeof(DWDialog)); - - tmp->eve = dw_event_new(); - dw_event_reset(tmp->eve); - tmp->data = data; - tmp->done = FALSE; - tmp->method = FALSE; - tmp->result = NULL; + DWDialog *tmp = malloc(sizeof(DWDialog)); + + tmp->eve = dw_event_new(); + dw_event_reset(tmp->eve); + tmp->data = data; + tmp->done = FALSE; + tmp->method = FALSE; + tmp->result = NULL; return tmp; } @@ -2126,13 +2098,13 @@ */ int dw_dialog_dismiss(DWDialog *dialog, void *result) { - dialog->result = result; - if(dialog->method) - gtk_main_quit(); - else - dw_event_post(dialog->eve); - dialog->done = TRUE; - return 0; + dialog->result = result; + if(dialog->method) + gtk_main_quit(); + else + dw_event_post(dialog->eve); + dialog->done = TRUE; + return 0; } /* @@ -2143,86 +2115,86 @@ */ void *dw_dialog_wait(DWDialog *dialog) { - void *tmp; - int newprocess = 0; - - /* _dw_thread will be -1 if dw_main hasn't been run yet. */ - if(_dw_thread == (pthread_t)-1) - { - _dw_thread = pthread_self(); - newprocess = 1; - gdk_threads_enter(); - } - - if(pthread_self() == _dw_thread) - { - dialog->method = TRUE; - gtk_main(); - } - else - { - dialog->method = FALSE; - dw_event_wait(dialog->eve, -1); - } - - if(newprocess) - { - _dw_thread = (pthread_t)-1; - gdk_threads_leave(); - } - - dw_event_close(&dialog->eve); - tmp = dialog->result; - free(dialog); - return tmp; + void *tmp; + int newprocess = 0; + + /* _dw_thread will be -1 if dw_main hasn't been run yet. */ + if(_dw_thread == (pthread_t)-1) + { + _dw_thread = pthread_self(); + newprocess = 1; + gdk_threads_enter(); + } + + if(pthread_self() == _dw_thread) + { + dialog->method = TRUE; + gtk_main(); + } + else + { + dialog->method = FALSE; + dw_event_wait(dialog->eve, -1); + } + + if(newprocess) + { + _dw_thread = (pthread_t)-1; + gdk_threads_leave(); + } + + dw_event_close(&dialog->eve); + tmp = dialog->result; + free(dialog); + return tmp; } static int _dw_ok_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - - if(!dwwait) - return FALSE; - - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_OK); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + + if(!dwwait) + return FALSE; + + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_OK); + return FALSE; } int _dw_yes_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - - if(!dwwait) - return FALSE; - - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_YES); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + + if(!dwwait) + return FALSE; + + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_YES); + return FALSE; } int _dw_no_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - - if(!dwwait) - return FALSE; - - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_NO); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + + if(!dwwait) + return FALSE; + + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_NO); + return FALSE; } int _dw_cancel_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - - if(!dwwait) - return FALSE; - - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_CANCEL); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + + if(!dwwait) + return FALSE; + + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss((DWDialog *)data, (void *)DW_MB_RETURN_CANCEL); + return FALSE; } /* @@ -2235,147 +2207,147 @@ */ int dw_messagebox(char *title, int flags, char *format, ...) { - HWND entrywindow, texttargetbox, imagetextbox, mainbox, okbutton, nobutton, yesbutton, cancelbutton, buttonbox, stext; - ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_DLGBORDER; - DWDialog *dwwait; - va_list args; - char outbuf[1000]; - char **xpm_data = NULL; - int x, y, extra_width=0,text_width,text_height; - int width,height; - - va_start(args, format); - vsprintf(outbuf, format, args); - va_end(args); - - entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle); - mainbox = dw_box_new(DW_VERT, 10); - dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); - - /* determine if an icon is to be used - if so we need another HORZ box */ - if((flags & DW_MB_ERROR) | (flags & DW_MB_WARNING) | (flags & DW_MB_INFORMATION) | (flags & DW_MB_QUESTION)) - { - imagetextbox = dw_box_new(DW_HORZ, 0); - dw_box_pack_start(mainbox, imagetextbox, 0, 0, TRUE, TRUE, 2); - texttargetbox = imagetextbox; - } - else - { - imagetextbox = NULL; - texttargetbox = mainbox; - } - - if(flags & DW_MB_ERROR) - xpm_data = (char **)_dw_messagebox_error; - else if(flags & DW_MB_WARNING) - xpm_data = (char **)_dw_messagebox_warning; - else if(flags & DW_MB_INFORMATION) - xpm_data = (char **)_dw_messagebox_information; - else if(flags & DW_MB_QUESTION) - xpm_data = (char **)_dw_messagebox_question; - - if(xpm_data) - extra_width = 32; - - if(texttargetbox == imagetextbox) - { - GdkPixmap *icon_pixmap = NULL; - GdkBitmap *bitmap = NULL; - HWND handle = dw_bitmap_new( 100 ); -#if GTK_MAJOR_VERSION > 1 - GdkPixbuf *icon_pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)xpm_data); - - gdk_pixbuf_render_pixmap_and_mask(icon_pixbuf, &icon_pixmap, &bitmap, 1); - g_object_unref(icon_pixbuf); + HWND entrywindow, texttargetbox, imagetextbox, mainbox, okbutton, nobutton, yesbutton, cancelbutton, buttonbox, stext; + ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_DLGBORDER; + DWDialog *dwwait; + va_list args; + char outbuf[1000]; + char **xpm_data = NULL; + int x, y, extra_width=0,text_width,text_height; + int width,height; + + va_start(args, format); + vsprintf(outbuf, format, args); + va_end(args); + + entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle); + mainbox = dw_box_new(DW_VERT, 10); + dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); + + /* determine if an icon is to be used - if so we need another HORZ box */ + if((flags & DW_MB_ERROR) | (flags & DW_MB_WARNING) | (flags & DW_MB_INFORMATION) | (flags & DW_MB_QUESTION)) + { + imagetextbox = dw_box_new(DW_HORZ, 0); + dw_box_pack_start(mainbox, imagetextbox, 0, 0, TRUE, TRUE, 2); + texttargetbox = imagetextbox; + } + else + { + imagetextbox = NULL; + texttargetbox = mainbox; + } + + if(flags & DW_MB_ERROR) + xpm_data = (char **)_dw_messagebox_error; + else if(flags & DW_MB_WARNING) + xpm_data = (char **)_dw_messagebox_warning; + else if(flags & DW_MB_INFORMATION) + xpm_data = (char **)_dw_messagebox_information; + else if(flags & DW_MB_QUESTION) + xpm_data = (char **)_dw_messagebox_question; + + if(xpm_data) + extra_width = 32; + + if(texttargetbox == imagetextbox) + { + GdkPixmap *icon_pixmap = NULL; + GdkBitmap *bitmap = NULL; + HWND handle = dw_bitmap_new( 100 ); +#if GTK_MAJOR_VERSION > 1 + GdkPixbuf *icon_pixbuf = gdk_pixbuf_new_from_xpm_data((const char **)xpm_data); + + gdk_pixbuf_render_pixmap_and_mask(icon_pixbuf, &icon_pixmap, &bitmap, 1); + g_object_unref(icon_pixbuf); #elif defined(USE_IMLIB) - gdk_imlib_data_to_pixmap((char **)xpm_data, &icon_pixmap, &bitmap); + gdk_imlib_data_to_pixmap((char **)xpm_data, &icon_pixmap, &bitmap); #else - icon_pixmap = gdk_pixmap_create_from_xpm_d(handle->window, &bitmap, &_colors[DW_CLR_PALEGRAY], (char **)xpm_data); -#endif - -#if GTK_MAJOR_VERSION > 1 - gtk_image_set_from_pixmap(GTK_IMAGE(handle), icon_pixmap, bitmap); + icon_pixmap = gdk_pixmap_create_from_xpm_d(handle->window, &bitmap, &_colors[DW_CLR_PALEGRAY], (char **)xpm_data); +#endif + +#if GTK_MAJOR_VERSION > 1 + gtk_image_set_from_pixmap(GTK_IMAGE(handle), icon_pixmap, bitmap); #else - gtk_pixmap_set(GTK_PIXMAP(handle), icon_pixmap, bitmap); -#endif - - dw_box_pack_start( texttargetbox, handle, 32, 32, FALSE, FALSE, 2); - } - - /* Create text */ - text_width = 240; - text_height = 0; - stext = dw_text_new(outbuf, 0); - dw_window_set_style(stext, DW_DT_WORDBREAK, DW_DT_WORDBREAK); - dw_font_text_extents_get(stext, NULL, outbuf, &width, &height); - height = height+3; - if(width < text_width) - text_height = height*2; - else if(width < text_width*2) - text_height = height*3; - else if(width < text_width*3) - text_height = height*4; - else /* width > (3*text_width) */ - { - text_width = (width / 3) + 60; - text_height = height*4; - } - dw_box_pack_start(texttargetbox, stext, text_width, text_height, TRUE, TRUE, 2); - - /* Buttons */ - buttonbox = dw_box_new(DW_HORZ, 10); - - dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, FALSE, 0); - - dwwait = dw_dialog_new((void *)entrywindow); - - /* which buttons ? */ - if(flags & DW_MB_OK) - { - okbutton = dw_button_new("Ok", 1001L); - dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); - } - else if(flags & DW_MB_OKCANCEL) - { - okbutton = dw_button_new("Ok", 1001L); - dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); - cancelbutton = dw_button_new("Cancel", 1002L); - dw_box_pack_start(buttonbox, cancelbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); - } - else if(flags & DW_MB_YESNO) - { - yesbutton = dw_button_new("Yes", 1001L); - dw_box_pack_start(buttonbox, yesbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(yesbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); - nobutton = dw_button_new("No", 1002L); - dw_box_pack_start(buttonbox, nobutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(nobutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); - } - else if(flags & DW_MB_YESNOCANCEL) - { - yesbutton = dw_button_new("Yes", 1001L); - dw_box_pack_start(buttonbox, yesbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(yesbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); - nobutton = dw_button_new("No", 1002L); - dw_box_pack_start(buttonbox, nobutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(nobutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); - cancelbutton = dw_button_new("Cancel", 1003L); - dw_box_pack_start(buttonbox, cancelbutton, 50, 30, TRUE, FALSE, 2); - dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); - } - - height = max(50,text_height)+100; - x = (dw_screen_width() - (text_width+60+extra_width))/2; - y = (dw_screen_height() - height)/2; - - dw_window_set_pos_size(entrywindow, x, y, (text_width+60+extra_width), height); - - dw_window_show(entrywindow); - - return (int)dw_dialog_wait(dwwait); + gtk_pixmap_set(GTK_PIXMAP(handle), icon_pixmap, bitmap); +#endif + + dw_box_pack_start( texttargetbox, handle, 32, 32, FALSE, FALSE, 2); + } + + /* Create text */ + text_width = 240; + text_height = 0; + stext = dw_text_new(outbuf, 0); + dw_window_set_style(stext, DW_DT_WORDBREAK, DW_DT_WORDBREAK); + dw_font_text_extents_get(stext, NULL, outbuf, &width, &height); + height = height+3; + if(width < text_width) + text_height = height*2; + else if(width < text_width*2) + text_height = height*3; + else if(width < text_width*3) + text_height = height*4; + else /* width > (3*text_width) */ + { + text_width = (width / 3) + 60; + text_height = height*4; + } + dw_box_pack_start(texttargetbox, stext, text_width, text_height, TRUE, TRUE, 2); + + /* Buttons */ + buttonbox = dw_box_new(DW_HORZ, 10); + + dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, FALSE, 0); + + dwwait = dw_dialog_new((void *)entrywindow); + + /* which buttons ? */ + if(flags & DW_MB_OK) + { + okbutton = dw_button_new("Ok", 1001L); + dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); + } + else if(flags & DW_MB_OKCANCEL) + { + okbutton = dw_button_new("Ok", 1001L); + dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_ok_func), (void *)dwwait); + cancelbutton = dw_button_new("Cancel", 1002L); + dw_box_pack_start(buttonbox, cancelbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); + } + else if(flags & DW_MB_YESNO) + { + yesbutton = dw_button_new("Yes", 1001L); + dw_box_pack_start(buttonbox, yesbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(yesbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); + nobutton = dw_button_new("No", 1002L); + dw_box_pack_start(buttonbox, nobutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(nobutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); + } + else if(flags & DW_MB_YESNOCANCEL) + { + yesbutton = dw_button_new("Yes", 1001L); + dw_box_pack_start(buttonbox, yesbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(yesbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); + nobutton = dw_button_new("No", 1002L); + dw_box_pack_start(buttonbox, nobutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(nobutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); + cancelbutton = dw_button_new("Cancel", 1003L); + dw_box_pack_start(buttonbox, cancelbutton, 50, 30, TRUE, FALSE, 2); + dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_cancel_func), (void *)dwwait); + } + + height = max(50,text_height)+100; + x = (dw_screen_width() - (text_width+60+extra_width))/2; + y = (dw_screen_height() - height)/2; + + dw_window_set_pos_size(entrywindow, x, y, (text_width+60+extra_width), height); + + dw_window_show(entrywindow); + + return (int)dw_dialog_wait(dwwait); } /* @@ -2385,29 +2357,29 @@ */ int dw_window_minimize(HWND handle) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi = NULL; -#endif - - if(!handle) - return 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED); - } - else -#endif - { - XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window), - GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window), - DefaultScreen (GDK_DISPLAY ())); - } - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi = NULL; +#endif + + if(!handle) + return 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED); + } + else +#endif + { + XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window), + GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window), + DefaultScreen (GDK_DISPLAY ())); + } + DW_MUTEX_UNLOCK; + return 0; } /* @@ -2417,15 +2389,15 @@ */ int dw_window_raise(HWND handle) { - int _locked_by_me = FALSE; - - if(!handle) - return 0; - - DW_MUTEX_LOCK; - gdk_window_raise(GTK_WIDGET(handle)->window); - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; + + if(!handle) + return 0; + + DW_MUTEX_LOCK; + gdk_window_raise(GTK_WIDGET(handle)->window); + DW_MUTEX_UNLOCK; + return 0; } /* @@ -2435,15 +2407,15 @@ */ int dw_window_lower(HWND handle) { - int _locked_by_me = FALSE; - - if(!handle) - return 0; - - DW_MUTEX_LOCK; - gdk_window_lower(GTK_WIDGET(handle)->window); - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; + + if(!handle) + return 0; + + DW_MUTEX_LOCK; + gdk_window_lower(GTK_WIDGET(handle)->window); + DW_MUTEX_UNLOCK; + return 0; } /* @@ -2453,48 +2425,48 @@ */ int dw_window_show(HWND handle) { - int _locked_by_me = FALSE; - GtkWidget *defaultitem; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi; -#endif - - if(!handle) - return 0; - - DW_MUTEX_LOCK; - gtk_widget_show(handle); -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_NORMAL); - } - else -#endif - { - if(GTK_WIDGET(handle)->window) - { - int width = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_width"); - int height = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_height"); - - if(width && height) - { - gtk_widget_set_usize(handle, width, height); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", 0); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", 0); - } - - gdk_window_raise(GTK_WIDGET(handle)->window); - gdk_flush(); - gdk_window_show(GTK_WIDGET(handle)->window); - gdk_flush(); - } - defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_defaultitem"); - if(defaultitem) - gtk_widget_grab_focus(defaultitem); - } - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; + GtkWidget *defaultitem; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi; +#endif + + if (!handle) + return 0; + + DW_MUTEX_LOCK; + gtk_widget_show(handle); +#if GTK_MAJOR_VERSION > 1 + if ((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_NORMAL); + } + else +#endif + { + if (GTK_WIDGET(handle)->window) + { + int width = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_width"); + int height = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_height"); + + if (width && height) + { + gtk_widget_set_usize(handle, width, height); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", GINT_TO_POINTER(0)); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", GINT_TO_POINTER(0)); + } + + gdk_window_raise(GTK_WIDGET(handle)->window); + gdk_flush(); + gdk_window_show(GTK_WIDGET(handle)->window); + gdk_flush(); + } + defaultitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_defaultitem"); + if (defaultitem) + gtk_widget_grab_focus(defaultitem); + } + DW_MUTEX_UNLOCK; + return 0; } /* @@ -2504,25 +2476,25 @@ */ int dw_window_hide(HWND handle) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi = NULL; -#endif - - if(!handle) - return 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED); - } - else -#endif - gtk_widget_hide(handle); - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi = NULL; +#endif + + if(!handle) + return 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_ICONIFIED); + } + else +#endif + gtk_widget_hide(handle); + DW_MUTEX_UNLOCK; + return 0; } /* @@ -2532,32 +2504,32 @@ */ int dw_window_destroy(HWND handle) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi = NULL; -#endif - - if(!handle) - return 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_remove(GTK_MDI(mdi), handle); - } -#endif - if(GTK_IS_WIDGET(handle)) - { - GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_eventbox"); - - if(eventbox && GTK_IS_WIDGET(eventbox)) - gtk_widget_destroy(eventbox); - else - gtk_widget_destroy(handle); - } - DW_MUTEX_UNLOCK; - return 0; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi = NULL; +#endif + + if(!handle) + return 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_remove(GTK_MDI(mdi), handle); + } +#endif + if(GTK_IS_WIDGET(handle)) + { + GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_eventbox"); + + if(eventbox && GTK_IS_WIDGET(eventbox)) + gtk_widget_destroy(eventbox); + else + gtk_widget_destroy(handle); + } + DW_MUTEX_UNLOCK; + return 0; } /* Causes entire window to be invalidated and redrawn. @@ -2576,39 +2548,39 @@ */ void dw_window_reparent(HWND handle, HWND newparent) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_window_reparent(GTK_WIDGET(handle)->window, newparent ? GTK_WIDGET(newparent)->window : GDK_ROOT_PARENT(), 0, 0); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_window_reparent(GTK_WIDGET(handle)->window, newparent ? GTK_WIDGET(newparent)->window : GDK_ROOT_PARENT(), 0, 0); + DW_MUTEX_UNLOCK; } static int _set_font(HWND handle, char *fontname) { - int retval = FALSE; + int retval = FALSE; #if GTK_MAJOR_VERSION < 2 - GtkStyle *style; - GdkFont *font = NULL; - - font = gdk_font_load(fontname); - - if(font) - { - style = gtk_widget_get_style(handle); - style->font = font; - gtk_widget_set_style(handle, style); - retval = TRUE; - } + GtkStyle *style; + GdkFont *font = NULL; + + font = gdk_font_load(fontname); + + if(font) + { + style = gtk_widget_get_style(handle); + style->font = font; + gtk_widget_set_style(handle, style); + retval = TRUE; + } #else - PangoFontDescription *font = pango_font_description_from_string(fontname); - - if(font) - { - gtk_widget_modify_font(handle, font); - pango_font_description_free(font); - } -#endif - return retval; + PangoFontDescription *font = pango_font_description_from_string(fontname); + + if(font) + { + gtk_widget_modify_font(handle, font); + pango_font_description_free(font); + } +#endif + return retval; } /* @@ -2620,180 +2592,180 @@ int dw_window_set_font(HWND handle, char *fontname) { #if GTK_MAJOR_VERSION > 1 - PangoFontDescription *pfont; + PangoFontDescription *pfont; #else - GdkFont *gdkfont; -#endif - GtkWidget *handle2 = handle; - char *font; - int _locked_by_me = FALSE; - gpointer data; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - font = strdup(fontname); + GdkFont *gdkfont; +#endif + GtkWidget *handle2 = handle; + char *font; + int _locked_by_me = FALSE; + gpointer data; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + font = strdup(fontname); #if GTK_MAJOR_VERSION < 2 - /* Free old font if it exists */ - gdkfont = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_gdkfont"); - if(gdkfont) - gdk_font_unref(gdkfont); - gdkfont = gdk_font_load(fontname); - if(!gdkfont) - gdkfont = gdk_font_load("fixed"); - gtk_object_set_data(GTK_OBJECT(handle2), "_dw_gdkfont", (gpointer)gdkfont); -#endif - - /* Free old font name if one is allocated */ - data = gtk_object_get_data(GTK_OBJECT(handle2), "_dw_fontname"); - if(data) - free(data); - - gtk_object_set_data(GTK_OBJECT(handle2), "_dw_fontname", (gpointer)font); -#if GTK_MAJOR_VERSION > 1 - pfont = pango_font_description_from_string(fontname); - - if(pfont) - { - gtk_widget_modify_font(handle2, pfont); - pango_font_description_free(pfont); - } -#endif - DW_MUTEX_UNLOCK; - return TRUE; + /* Free old font if it exists */ + gdkfont = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_gdkfont"); + if(gdkfont) + gdk_font_unref(gdkfont); + gdkfont = gdk_font_load(fontname); + if(!gdkfont) + gdkfont = gdk_font_load("fixed"); + gtk_object_set_data(GTK_OBJECT(handle2), "_dw_gdkfont", (gpointer)gdkfont); +#endif + + /* Free old font name if one is allocated */ + data = gtk_object_get_data(GTK_OBJECT(handle2), "_dw_fontname"); + if(data) + free(data); + + gtk_object_set_data(GTK_OBJECT(handle2), "_dw_fontname", (gpointer)font); +#if GTK_MAJOR_VERSION > 1 + pfont = pango_font_description_from_string(fontname); + + if(pfont) + { + gtk_widget_modify_font(handle2, pfont); + pango_font_description_free(pfont); + } +#endif + DW_MUTEX_UNLOCK; + return TRUE; } void _free_gdk_colors(HWND handle) { - GdkColor *old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_foregdk"); - - if(old) - free(old); - - old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_backgdk"); - - if(old) - free(old); + GdkColor *old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_foregdk"); + + if(old) + free(old); + + old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_backgdk"); + + if(old) + free(old); } /* Free old color pointers and allocate new ones */ static void _save_gdk_colors(HWND handle, GdkColor fore, GdkColor back) { - GdkColor *foregdk = malloc(sizeof(GdkColor)); - GdkColor *backgdk = malloc(sizeof(GdkColor)); - - _free_gdk_colors(handle); - - *foregdk = fore; - *backgdk = back; - - gtk_object_set_data(GTK_OBJECT(handle), "_dw_foregdk", (gpointer)foregdk); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_backgdk", (gpointer)backgdk); + GdkColor *foregdk = malloc(sizeof(GdkColor)); + GdkColor *backgdk = malloc(sizeof(GdkColor)); + + _free_gdk_colors(handle); + + *foregdk = fore; + *backgdk = back; + + gtk_object_set_data(GTK_OBJECT(handle), "_dw_foregdk", (gpointer)foregdk); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_backgdk", (gpointer)backgdk); } static int _set_color(HWND handle, unsigned long fore, unsigned long back) { - /* Remember that each color component in X11 use 16 bit no matter - * what the destination display supports. (and thus GDK) - */ - GdkColor forecolor, backcolor; + /* Remember that each color component in X11 use 16 bit no matter + * what the destination display supports. (and thus GDK) + */ + GdkColor forecolor, backcolor; #if GTK_MAJOR_VERSION < 2 - GtkStyle *style = gtk_style_copy(gtk_widget_get_style(handle)); -#endif - - if(fore & DW_RGB_COLOR) - { - forecolor.pixel = 0; - forecolor.red = DW_RED_VALUE(fore) << 8; - forecolor.green = DW_GREEN_VALUE(fore) << 8; - forecolor.blue = DW_BLUE_VALUE(fore) << 8; - - gdk_color_alloc(_dw_cmap, &forecolor); - -#if GTK_MAJOR_VERSION > 1 - gtk_widget_modify_text(handle, 0, &forecolor); - gtk_widget_modify_text(handle, 1, &forecolor); - gtk_widget_modify_fg(handle, 0, &forecolor); - gtk_widget_modify_fg(handle, 1, &forecolor); + GtkStyle *style = gtk_style_copy(gtk_widget_get_style(handle)); +#endif + + if(fore & DW_RGB_COLOR) + { + forecolor.pixel = 0; + forecolor.red = DW_RED_VALUE(fore) << 8; + forecolor.green = DW_GREEN_VALUE(fore) << 8; + forecolor.blue = DW_BLUE_VALUE(fore) << 8; + + gdk_color_alloc(_dw_cmap, &forecolor); + +#if GTK_MAJOR_VERSION > 1 + gtk_widget_modify_text(handle, 0, &forecolor); + gtk_widget_modify_text(handle, 1, &forecolor); + gtk_widget_modify_fg(handle, 0, &forecolor); + gtk_widget_modify_fg(handle, 1, &forecolor); #else - if(style) - style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor; -#endif - } - else if(fore != DW_CLR_DEFAULT) - { - forecolor = _colors[fore]; - -#if GTK_MAJOR_VERSION > 1 - gtk_widget_modify_text(handle, 0, &_colors[fore]); - gtk_widget_modify_text(handle, 1, &_colors[fore]); - gtk_widget_modify_fg(handle, 0, &_colors[fore]); - gtk_widget_modify_fg(handle, 1, &_colors[fore]); + if(style) + style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor; +#endif + } + else if(fore != DW_CLR_DEFAULT) + { + forecolor = _colors[fore]; + +#if GTK_MAJOR_VERSION > 1 + gtk_widget_modify_text(handle, 0, &_colors[fore]); + gtk_widget_modify_text(handle, 1, &_colors[fore]); + gtk_widget_modify_fg(handle, 0, &_colors[fore]); + gtk_widget_modify_fg(handle, 1, &_colors[fore]); #else - if(style) - style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = _colors[fore]; -#endif - } - if(back & DW_RGB_COLOR) - { - backcolor.pixel = 0; - backcolor.red = DW_RED_VALUE(back) << 8; - backcolor.green = DW_GREEN_VALUE(back) << 8; - backcolor.blue = DW_BLUE_VALUE(back) << 8; - - gdk_color_alloc(_dw_cmap, &backcolor); - -#if GTK_MAJOR_VERSION > 1 - gtk_widget_modify_base(handle, 0, &backcolor); - gtk_widget_modify_base(handle, 1, &backcolor); - gtk_widget_modify_bg(handle, 0, &backcolor); - gtk_widget_modify_bg(handle, 1, &backcolor); + if(style) + style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = _colors[fore]; +#endif + } + if(back & DW_RGB_COLOR) + { + backcolor.pixel = 0; + backcolor.red = DW_RED_VALUE(back) << 8; + backcolor.green = DW_GREEN_VALUE(back) << 8; + backcolor.blue = DW_BLUE_VALUE(back) << 8; + + gdk_color_alloc(_dw_cmap, &backcolor); + +#if GTK_MAJOR_VERSION > 1 + gtk_widget_modify_base(handle, 0, &backcolor); + gtk_widget_modify_base(handle, 1, &backcolor); + gtk_widget_modify_bg(handle, 0, &backcolor); + gtk_widget_modify_bg(handle, 1, &backcolor); #else - if(style) - style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor; -#endif - } - else if(back != DW_CLR_DEFAULT) - { - backcolor = _colors[back]; - -#if GTK_MAJOR_VERSION > 1 - gtk_widget_modify_base(handle, 0, &_colors[back]); - gtk_widget_modify_base(handle, 1, &_colors[back]); - gtk_widget_modify_bg(handle, 0, &_colors[back]); - gtk_widget_modify_bg(handle, 1, &_colors[back]); + if(style) + style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor; +#endif + } + else if(back != DW_CLR_DEFAULT) + { + backcolor = _colors[back]; + +#if GTK_MAJOR_VERSION > 1 + gtk_widget_modify_base(handle, 0, &_colors[back]); + gtk_widget_modify_base(handle, 1, &_colors[back]); + gtk_widget_modify_bg(handle, 0, &_colors[back]); + gtk_widget_modify_bg(handle, 1, &_colors[back]); #else - if(style) - style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = _colors[back]; -#endif - } - - _save_gdk_colors(handle, forecolor, backcolor); - - if(GTK_IS_CLIST(handle)) - { - int z, rowcount = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_rowcount"); - - for(z=0;z<rowcount;z++) - { - gtk_clist_set_foreground(GTK_CLIST(handle), z, &forecolor); - gtk_clist_set_background(GTK_CLIST(handle), z, &backcolor); - } - } + if(style) + style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = _colors[back]; +#endif + } + + _save_gdk_colors(handle, forecolor, backcolor); + + if(GTK_IS_CLIST(handle)) + { + int z, rowcount = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_rowcount"); + + for(z=0;z<rowcount;z++) + { + gtk_clist_set_foreground(GTK_CLIST(handle), z, &forecolor); + gtk_clist_set_background(GTK_CLIST(handle), z, &backcolor); + } + } #if GTK_MAJOR_VERSION < 2 - if(style) - { - gtk_widget_set_style(handle, style); - gtk_style_unref(style); - } -#endif - return TRUE; + if(style) + { + gtk_widget_set_style(handle, style); + gtk_style_unref(style); + } +#endif + return TRUE; } /* * Sets the colors used by a specified window (widget) handle. @@ -2804,28 +2776,28 @@ */ int dw_window_set_color(HWND handle, unsigned long fore, unsigned long back) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - - if(GTK_IS_SCROLLED_WINDOW(handle) || GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_TABLE(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_eventbox"); - if(tmp) - handle2 = tmp; - } - - _set_color(handle2, fore, back); - - DW_MUTEX_UNLOCK; - return TRUE; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + + if(GTK_IS_SCROLLED_WINDOW(handle) || GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_TABLE(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_eventbox"); + if(tmp) + handle2 = tmp; + } + + _set_color(handle2, fore, back); + + DW_MUTEX_UNLOCK; + return TRUE; } /* @@ -2836,8 +2808,8 @@ */ int dw_window_set_border(HWND handle, int border) { - /* TODO */ - return 0; + /* TODO */ + return 0; } /* @@ -2847,11 +2819,11 @@ */ void dw_window_capture(HWND handle) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_pointer_grab(handle->window, TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK, NULL, NULL, GDK_CURRENT_TIME); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_pointer_grab(handle->window, TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK, NULL, NULL, GDK_CURRENT_TIME); + DW_MUTEX_UNLOCK; } /* @@ -2862,25 +2834,25 @@ */ void dw_window_set_pointer(HWND handle, int pointertype) { - int _locked_by_me = FALSE; - GdkCursor *cursor; - - DW_MUTEX_LOCK; - if(pointertype & (1 << 31)) - { - GdkBitmap *bitmap = NULL; - GdkPixmap *pixmap = _find_private_pixmap(&bitmap, (pointertype & 0xFFFFFF), NULL, NULL); - cursor = gdk_cursor_new_from_pixmap(pixmap, (GdkPixmap *)bitmap, &_colors[DW_CLR_WHITE], &_colors[DW_CLR_BLACK], 8, 8); - } - else if(!pointertype) - cursor = NULL; - else - cursor = gdk_cursor_new(pointertype); - if(handle && handle->window) - gdk_window_set_cursor(handle->window, cursor); - if(cursor) - gdk_cursor_destroy(cursor); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GdkCursor *cursor; + + DW_MUTEX_LOCK; + if(pointertype & (1 << 31)) + { + GdkBitmap *bitmap = NULL; + GdkPixmap *pixmap = _find_private_pixmap(&bitmap, (pointertype & 0xFFFFFF), NULL, NULL); + cursor = gdk_cursor_new_from_pixmap(pixmap, (GdkPixmap *)bitmap, &_colors[DW_CLR_WHITE], &_colors[DW_CLR_BLACK], 8, 8); + } + else if(!pointertype) + cursor = NULL; + else + cursor = gdk_cursor_new(pointertype); + if(handle && handle->window) + gdk_window_set_cursor(handle->window, cursor); + if(cursor) + gdk_cursor_destroy(cursor); + DW_MUTEX_UNLOCK; } /* @@ -2888,11 +2860,11 @@ */ void dw_window_release(void) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_pointer_ungrab(GDK_CURRENT_TIME); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_pointer_ungrab(GDK_CURRENT_TIME); + DW_MUTEX_UNLOCK; } /* @@ -2904,75 +2876,75 @@ */ HWND dw_window_new(HWND hwndOwner, char *title, unsigned long flStyle) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - int flags = 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(hwndOwner && GTK_IS_MDI(hwndOwner)) - { - GtkWidget *label; - - tmp = dw_box_new(DW_VERT, 0); - - label = gtk_label_new(title); - gtk_widget_show(label); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_child", (gpointer)1); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_title", (gpointer)label); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi", (gpointer)hwndOwner); - - gtk_mdi_put(GTK_MDI(hwndOwner), tmp, 100, 75, label); - } - else -#endif - { - last_window = tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL); - - gtk_window_set_title(GTK_WINDOW(tmp), title); - if(!(flStyle & DW_FCF_SIZEBORDER)) - gtk_window_set_policy(GTK_WINDOW(tmp), FALSE, FALSE, TRUE); - - gtk_widget_realize(tmp); - - if(flStyle & DW_FCF_TITLEBAR) - flags |= GDK_DECOR_TITLE; - - if(flStyle & DW_FCF_MINMAX) - flags |= GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE; - - if(flStyle & DW_FCF_SIZEBORDER) - flags |= GDK_DECOR_RESIZEH | GDK_DECOR_BORDER; - - if(flStyle & DW_FCF_BORDER || flStyle & DW_FCF_DLGBORDER) - flags |= GDK_DECOR_BORDER; - - if(flStyle & DW_FCF_MAXIMIZE) - { - flags &= ~DW_FCF_MAXIMIZE; -#if GTK_MAJOR_VERSION > 1 - gtk_window_maximize(GTK_WINDOW(tmp)); -#endif - } - if(flStyle & DW_FCF_MINIMIZE) - { - flags &= ~DW_FCF_MINIMIZE; -#if GTK_MAJOR_VERSION > 1 - gtk_window_iconify(GTK_WINDOW(tmp)); -#endif - } - - gdk_window_set_decorations(tmp->window, flags); - - if(hwndOwner) - gdk_window_reparent(GTK_WIDGET(tmp)->window, GTK_WIDGET(hwndOwner)->window, 0, 0); - - if(flStyle & DW_FCF_SIZEBORDER) - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_size", (gpointer)1); - } - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_style", (gpointer)flStyle); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + int flags = 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(hwndOwner && GTK_IS_MDI(hwndOwner)) + { + GtkWidget *label; + + tmp = dw_box_new(DW_VERT, 0); + + label = gtk_label_new(title); + gtk_widget_show(label); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_child", GINT_TO_POINTER(1)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi_title", (gpointer)label); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_mdi", (gpointer)hwndOwner); + + gtk_mdi_put(GTK_MDI(hwndOwner), tmp, 100, 75, label); + } + else +#endif + { + last_window = tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + gtk_window_set_title(GTK_WINDOW(tmp), title); + if(!(flStyle & DW_FCF_SIZEBORDER)) + gtk_window_set_policy(GTK_WINDOW(tmp), FALSE, FALSE, TRUE); + + gtk_widget_realize(tmp); + + if(flStyle & DW_FCF_TITLEBAR) + flags |= GDK_DECOR_TITLE; + + if(flStyle & DW_FCF_MINMAX) + flags |= GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE; + + if(flStyle & DW_FCF_SIZEBORDER) + flags |= GDK_DECOR_RESIZEH | GDK_DECOR_BORDER; + + if(flStyle & DW_FCF_BORDER || flStyle & DW_FCF_DLGBORDER) + flags |= GDK_DECOR_BORDER; + + if(flStyle & DW_FCF_MAXIMIZE) + { + flags &= ~DW_FCF_MAXIMIZE; +#if GTK_MAJOR_VERSION > 1 + gtk_window_maximize(GTK_WINDOW(tmp)); +#endif + } + if(flStyle & DW_FCF_MINIMIZE) + { + flags &= ~DW_FCF_MINIMIZE; +#if GTK_MAJOR_VERSION > 1 + gtk_window_iconify(GTK_WINDOW(tmp)); +#endif + } + + gdk_window_set_decorations(tmp->window, flags); + + if(hwndOwner) + gdk_window_reparent(GTK_WIDGET(tmp)->window, GTK_WIDGET(hwndOwner)->window, 0, 0); + + if(flStyle & DW_FCF_SIZEBORDER) + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_size", GINT_TO_POINTER(1)); + } + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_style", GINT_TO_POINTER(flStyle)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -2983,20 +2955,20 @@ */ HWND dw_box_new(int type, int pad) { - GtkWidget *tmp, *eventbox; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_table_new(1, 1, FALSE); - eventbox = gtk_event_box_new(); - - gtk_widget_show(eventbox); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_eventbox", (gpointer)eventbox); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxtype", (gpointer)type); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxpad", (gpointer)pad); - gtk_widget_show(tmp); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp, *eventbox; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_table_new(1, 1, FALSE); + eventbox = gtk_event_box_new(); + + gtk_widget_show(eventbox); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_eventbox", (gpointer)eventbox); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxtype", GINT_TO_POINTER(type)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxpad", GINT_TO_POINTER(pad)); + gtk_widget_show(tmp); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3008,23 +2980,23 @@ */ HWND dw_groupbox_new(int type, int pad, char *title) { - GtkWidget *tmp, *frame; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); - gtk_frame_set_label(GTK_FRAME(frame), title && *title ? title : NULL); - tmp = gtk_table_new(1, 1, FALSE); - gtk_container_border_width(GTK_CONTAINER(tmp), pad); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxtype", (gpointer)type); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxpad", (gpointer)pad); - gtk_object_set_data(GTK_OBJECT(frame), "_dw_boxhandle", (gpointer)tmp); - gtk_container_add(GTK_CONTAINER(frame), tmp); - gtk_widget_show(tmp); - gtk_widget_show(frame); - DW_MUTEX_UNLOCK; - return frame; + GtkWidget *tmp, *frame; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_frame_set_label(GTK_FRAME(frame), title && *title ? title : NULL); + tmp = gtk_table_new(1, 1, FALSE); + gtk_container_border_width(GTK_CONTAINER(tmp), pad); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxtype", GINT_TO_POINTER(type)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxpad", GINT_TO_POINTER(pad)); + gtk_object_set_data(GTK_OBJECT(frame), "_dw_boxhandle", (gpointer)tmp); + gtk_container_add(GTK_CONTAINER(frame), tmp); + gtk_widget_show(tmp); + gtk_widget_show(frame); + DW_MUTEX_UNLOCK; + return frame; } /* @@ -3034,18 +3006,18 @@ */ HWND dw_mdi_new(unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - tmp = gtk_mdi_new(); + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + tmp = gtk_mdi_new(); #else - tmp = gtk_vbox_new(FALSE, 0); -#endif - gtk_widget_show(tmp); - DW_MUTEX_UNLOCK; - return tmp; + tmp = gtk_vbox_new(FALSE, 0); +#endif + gtk_widget_show(tmp); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3056,35 +3028,35 @@ HWND dw_bitmap_new(unsigned long id) { #if GTK_MAJOR_VERSION < 2 - GdkPixmap *pixmap = NULL; - GdkBitmap *bitmap = NULL; - static char * test_xpm[] = { - "1 1 2 1", - " c None", - ". c #FFFFFF", - "."}; -#endif - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - tmp = gtk_image_new(); + GdkPixmap *pixmap = NULL; + GdkBitmap *bitmap = NULL; + static char * test_xpm[] = { + "1 1 2 1", + " c None", + ". c #FFFFFF", + "."}; +#endif + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + tmp = gtk_image_new(); #elif defined(USE_IMLIB) - gdk_imlib_data_to_pixmap(test_xpm, &pixmap, &bitmap); + gdk_imlib_data_to_pixmap(test_xpm, &pixmap, &bitmap); #else - gtk_widget_realize(last_window); - - if(last_window) - pixmap = gdk_pixmap_create_from_xpm_d(last_window->window, &bitmap, &_colors[DW_CLR_PALEGRAY], test_xpm); + gtk_widget_realize(last_window); + + if(last_window) + pixmap = gdk_pixmap_create_from_xpm_d(last_window->window, &bitmap, &_colors[DW_CLR_PALEGRAY], test_xpm); #endif #if GTK_MAJOR_VERSION < 2 - tmp = gtk_pixmap_new(pixmap, bitmap); -#endif - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + tmp = gtk_pixmap_new(pixmap, bitmap); +#endif + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3095,24 +3067,24 @@ */ HWND dw_notebook_new(unsigned long id, int top) { - GtkWidget *tmp, **pagearray = calloc(sizeof(GtkWidget *), 256); - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_notebook_new(); - if(top) - gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_TOP); - else - gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_BOTTOM); - gtk_notebook_set_scrollable(GTK_NOTEBOOK(tmp), TRUE); + GtkWidget *tmp, **pagearray = calloc(sizeof(GtkWidget *), 256); + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_notebook_new(); + if(top) + gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_TOP); + else + gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_BOTTOM); + gtk_notebook_set_scrollable(GTK_NOTEBOOK(tmp), TRUE); #if 0 - gtk_notebook_popup_enable(GTK_NOTEBOOK(tmp)); -#endif - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_pagearray", (gpointer)pagearray); - DW_MUTEX_UNLOCK; - return tmp; + gtk_notebook_popup_enable(GTK_NOTEBOOK(tmp)); +#endif + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_pagearray", (gpointer)pagearray); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3123,44 +3095,48 @@ */ HMENUI dw_menu_new(unsigned long id) { - int _locked_by_me = FALSE; - GtkAccelGroup *accel_group; - HMENUI tmp; - - DW_MUTEX_LOCK; - tmp = gtk_menu_new(); - gtk_widget_show(tmp); - accel_group = gtk_accel_group_new(); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_accel", (gpointer)accel_group); - DW_MUTEX_UNLOCK; - return tmp; + int _locked_by_me = FALSE; + GtkAccelGroup *accel_group; + HMENUI tmp; + + DW_MUTEX_LOCK; + tmp = gtk_menu_new(); + gtk_widget_show(tmp); + accel_group = gtk_accel_group_new(); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_accel", (gpointer)accel_group); + DW_MUTEX_UNLOCK; + return tmp; } /* * Create a menubar on a window. * Parameters: * location: Handle of a window frame to be attached to. + * If there is no box already packed into the "location", the menu will not appear + * so tell the user. */ HMENUI dw_menubar_new(HWND location) { - GtkWidget *box; - int _locked_by_me = FALSE; - GtkAccelGroup *accel_group; - HMENUI tmp; - - DW_MUTEX_LOCK; - tmp = gtk_menu_bar_new(); - box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); - gtk_widget_show(tmp); - accel_group = gtk_accel_group_new(); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_accel", (gpointer)accel_group); - - if(box) - gtk_box_pack_end(GTK_BOX(box), tmp, FALSE, FALSE, 0); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *box; + int _locked_by_me = FALSE; + GtkAccelGroup *accel_group; + HMENUI tmp; + + DW_MUTEX_LOCK; + tmp = gtk_menu_bar_new(); + box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); + gtk_widget_show(tmp); + accel_group = gtk_accel_group_new(); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_accel", (gpointer)accel_group); + + if (box) + gtk_box_pack_end(GTK_BOX(box), tmp, FALSE, FALSE, 0); + else + fprintf(stderr,"dw_menubar_new(): Coding error: You MUST pack a box into the window in which this menubar is to be added BEFORE calling this function.\n"); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3170,38 +3146,38 @@ */ void dw_menu_destroy(HMENUI *menu) { - if(menu && *menu) - { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_widget_destroy(*menu); - *menu = NULL; - DW_MUTEX_UNLOCK; - } + if(menu && *menu) + { + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_widget_destroy(*menu); + *menu = NULL; + DW_MUTEX_UNLOCK; + } } char _removetilde(char *dest, char *src) { - int z, cur=0; - char accel = '\0'; - - for(z=0;z<strlen(src);z++) - { - if(src[z] != '~') - { - dest[cur] = src[z]; - cur++; - } - else - { - dest[cur] = '_'; - accel = src[z+1]; - cur++; - } - } - dest[cur] = 0; - return accel; + int z, cur=0; + char accel = '\0'; + + for(z=0;z<strlen(src);z++) + { + if(src[z] != '~') + { + dest[cur] = src[z]; + cur++; + } + else + { + dest[cur] = '_'; + accel = src[z+1]; + cur++; + } + } + dest[cur] = 0; + return accel; } /* @@ -3217,106 +3193,122 @@ */ HWND dw_menu_append_item(HMENUI menu, char *title, unsigned long id, unsigned long flags, int end, int check, HMENUI submenu) { - GtkWidget *tmphandle; - char accel, *tempbuf = malloc(strlen(title)+1); - int _locked_by_me = FALSE, submenucount; - guint tmp_key; - GtkAccelGroup *accel_group; - - if(!menu) - { - free(tempbuf); - return NULL; - } - - DW_MUTEX_LOCK; - accel = _removetilde(tempbuf, title); - - accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu), "_dw_accel"); - submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu), "_dw_submenucount"); - - if(strlen(tempbuf) == 0) - tmphandle=gtk_menu_item_new(); - else - { - if(check) - { - char numbuf[10]; - if(accel && accel_group) - { - tmphandle=gtk_check_menu_item_new_with_label(""); - tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); + GtkWidget *tmphandle; + char accel, *tempbuf = malloc(strlen(title)+1); + int _locked_by_me = FALSE, submenucount; + guint tmp_key; + GtkAccelGroup *accel_group; + + if (!menu) + { + free(tempbuf); + return NULL; + } + + DW_MUTEX_LOCK; + accel = _removetilde(tempbuf, title); + + accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu), "_dw_accel"); + submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu), "_dw_submenucount"); + + if (strlen(tempbuf) == 0) + tmphandle=gtk_menu_item_new(); + else + { + if (check) + { + char numbuf[10]; + if (accel && accel_group) + { + tmphandle = gtk_check_menu_item_new_with_label(""); + tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); #if 0 /* This isn't working right */ - gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); -#endif - } - else - tmphandle=gtk_check_menu_item_new_with_label(tempbuf); - gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); - sprintf(numbuf, "%lu", id); - gtk_object_set_data(GTK_OBJECT(menu), numbuf, (gpointer)tmphandle); - } - else - { - if(accel && accel_group) - { - tmphandle=gtk_menu_item_new_with_label(""); - tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); + gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); +#endif + } + else + tmphandle = gtk_check_menu_item_new_with_label(tempbuf); + gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); + sprintf(numbuf, "%lu", id); + gtk_object_set_data(GTK_OBJECT(menu), numbuf, (gpointer)tmphandle); + } + else + { + char numbuf[10]; + if (accel && accel_group) + { + tmphandle=gtk_menu_item_new_with_label(""); + tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); #if 0 /* This isn't working right */ - gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); -#endif - } - else - tmphandle=gtk_menu_item_new_with_label(tempbuf); - } - } - - gtk_widget_show(tmphandle); - - if(submenu) - { - char tempbuf[100]; - - sprintf(tempbuf, "_dw_submenu%d", submenucount); - submenucount++; - gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu); - gtk_object_set_data(GTK_OBJECT(menu), tempbuf, (gpointer)submenu); - gtk_object_set_data(GTK_OBJECT(menu), "_dw_submenucount", (gpointer)submenucount); - } - - if(GTK_IS_MENU_BAR(menu)) - gtk_menu_bar_append(GTK_MENU_BAR(menu), tmphandle); - else - gtk_menu_append(GTK_MENU(menu), tmphandle); - - gtk_object_set_data(GTK_OBJECT(tmphandle), "_dw_id", (gpointer)id); - free(tempbuf); - DW_MUTEX_UNLOCK; - return tmphandle; + gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); +#endif + } + else + tmphandle=gtk_menu_item_new_with_label(tempbuf); + sprintf(numbuf, "%lu", id); + gtk_object_set_data(GTK_OBJECT(menu), numbuf, (gpointer)tmphandle); + } + } + + gtk_widget_show(tmphandle); + + if (submenu) + { + char tempbuf[100]; + + sprintf(tempbuf, "_dw_submenu%d", submenucount); + submenucount++; + gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu); + gtk_object_set_data(GTK_OBJECT(menu), tempbuf, (gpointer)submenu); + gtk_object_set_data(GTK_OBJECT(menu), "_dw_submenucount", (gpointer)submenucount); + } + + if (GTK_IS_MENU_BAR(menu)) + gtk_menu_bar_append(GTK_MENU_BAR(menu), tmphandle); + else + gtk_menu_append(GTK_MENU(menu), tmphandle); + + gtk_object_set_data(GTK_OBJECT(tmphandle), "_dw_id", GINT_TO_POINTER(id)); + free(tempbuf); + /* + * Set flags + */ + if ( check && (flags & DW_MIS_CHECKED) ) + { + _dw_ignore_click = 1; + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), 1); + _dw_ignore_click = 0; + } + + if ( flags & DW_MIS_DISABLED ) + gtk_widget_set_sensitive( tmphandle, FALSE ); + + DW_MUTEX_UNLOCK; + return tmphandle; } GtkWidget *_find_submenu_id(GtkWidget *start, char *name) { - GtkWidget *tmp; - int z, submenucount = (int)gtk_object_get_data(GTK_OBJECT(start), "_dw_submenucount"); - - if((tmp = gtk_object_get_data(GTK_OBJECT(start), name))) - return tmp; - - for(z=0;z<submenucount;z++) - { - char tempbuf[100]; - GtkWidget *submenu, *menuitem; - - sprintf(tempbuf, "_dw_submenu%d", z); - - if((submenu = gtk_object_get_data(GTK_OBJECT(start), tempbuf))) - { - if((menuitem = _find_submenu_id(submenu, name))) - return menuitem; - } - } - return NULL; + GtkWidget *tmp; + int z, submenucount = (int)gtk_object_get_data(GTK_OBJECT(start), "_dw_submenucount"); + + if((tmp = gtk_object_get_data(GTK_OBJECT(start), name))) + return tmp; + + for(z=0;z<submenucount;z++) + { + char tempbuf[100]; + GtkWidget *submenu, *menuitem; + + sprintf(tempbuf, "_dw_submenu%d", z); + + if((submenu = gtk_object_get_data(GTK_OBJECT(start), tempbuf))) + { + if((menuitem = _find_submenu_id(submenu, name))) + return menuitem; + } + } + return NULL; } /* @@ -3328,25 +3320,76 @@ */ void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) { - char numbuf[10]; - GtkWidget *tmphandle; - int _locked_by_me = FALSE; - - if(!menu) - return; - - DW_MUTEX_LOCK; - sprintf(numbuf, "%lu", id); - tmphandle = _find_submenu_id(menu, numbuf); - - if(tmphandle) - { - _dw_ignore_click = 1; - if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check) - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check); - _dw_ignore_click = 0; - } - DW_MUTEX_UNLOCK; + char numbuf[10]; + GtkWidget *tmphandle; + int _locked_by_me = FALSE; + + if(!menu) + return; + + DW_MUTEX_LOCK; + sprintf(numbuf, "%lu", id); + tmphandle = _find_submenu_id(menu, numbuf); + + if(tmphandle) + { + _dw_ignore_click = 1; + if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check); + _dw_ignore_click = 0; + } + DW_MUTEX_UNLOCK; +} + +/* + * Sets the state of a menu item. + * Parameters: + * menu: The handle the the existing menu. + * id: Menuitem id. + * state: TRUE for checked FALSE for not checked. + */ +void dw_menu_item_set_state(HMENUI menu, unsigned long id, unsigned long state) +{ + char numbuf[10]; + GtkWidget *tmphandle; + int check; + int _locked_by_me = FALSE; + + if(!menu) + return; + + DW_MUTEX_LOCK; + sprintf(numbuf, "%lu", id); + tmphandle = _find_submenu_id(menu, numbuf); + + if ( (state & DW_MIS_CHECKED) || (state & DW_MIS_UNCHECKED) ) + { + if ( state & DW_MIS_CHECKED ) + check = 1; + else + check = 0; + + if (tmphandle) + { + _dw_ignore_click = 1; + if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check); + _dw_ignore_click = 0; + } + } + if ( (state & DW_MIS_ENABLED) || (state & DW_MIS_DISABLED) ) + { + if (tmphandle ) + { + _dw_ignore_click = 1; + if ( state & DW_MIS_ENABLED ) + gtk_widget_set_sensitive( tmphandle, TRUE ); + else + gtk_widget_set_sensitive( tmphandle, FALSE ); + _dw_ignore_click = 0; + } + } + DW_MUTEX_UNLOCK; } /* @@ -3359,17 +3402,17 @@ */ void dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) { - int _locked_by_me = FALSE; - - if(!menu || !*menu) - return; - - popup = parent; - - DW_MUTEX_LOCK; - gtk_menu_popup(GTK_MENU(*menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); - *menu = NULL; - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!menu || !*menu) + return; + + popup = parent; + + DW_MUTEX_LOCK; + gtk_menu_popup(GTK_MENU(*menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); + *menu = NULL; + DW_MUTEX_UNLOCK; } @@ -3381,15 +3424,15 @@ */ void dw_pointer_query_pos(long *x, long *y) { - GdkModifierType state; - int gx, gy; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_window_get_pointer (GDK_ROOT_PARENT(), &gx, &gy, &state); - *x = gx; - *y = gy; - DW_MUTEX_UNLOCK; + GdkModifierType state; + int gx, gy; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_window_get_pointer (GDK_ROOT_PARENT(), &gx, &gy, &state); + *x = gx; + *y = gy; + DW_MUTEX_UNLOCK; } /* @@ -3400,11 +3443,11 @@ */ void dw_pointer_set_pos(long x, long y) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); + DW_MUTEX_UNLOCK; } /* @@ -3415,20 +3458,20 @@ */ HWND dw_container_new(unsigned long id, int multi) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tmp), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_multi", (gpointer)multi); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_widget_show(tmp); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tmp), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_multi", GINT_TO_POINTER(multi)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_widget_show(tmp); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3439,62 +3482,62 @@ */ HWND dw_tree_new(ULONG id) { - GtkWidget *tmp, *tree; -#if GTK_MAJOR_VERSION > 1 - GtkTreeStore *store; - GtkTreeViewColumn *col; - GtkCellRenderer *rend; - GtkTreeSelection *sel; -#endif - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_widget_show(tmp); -#if GTK_MAJOR_VERSION > 1 - store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER); - tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store); - col = gtk_tree_view_column_new(); - - rend = gtk_cell_renderer_pixbuf_new(); - gtk_tree_view_column_pack_start(col, rend, FALSE); - gtk_tree_view_column_add_attribute(col, rend, "pixbuf", 1); - rend = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(col, rend, TRUE); - gtk_tree_view_column_add_attribute(col, rend, "text", 0); - - gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); - gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); - - sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); - gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); + GtkWidget *tmp, *tree; +#if GTK_MAJOR_VERSION > 1 + GtkTreeStore *store; + GtkTreeViewColumn *col; + GtkCellRenderer *rend; + GtkTreeSelection *sel; +#endif + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_widget_show(tmp); +#if GTK_MAJOR_VERSION > 1 + store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER); + tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store); + col = gtk_tree_view_column_new(); + + rend = gtk_cell_renderer_pixbuf_new(); + gtk_tree_view_column_pack_start(col, rend, FALSE); + gtk_tree_view_column_add_attribute(col, rend, "pixbuf", 1); + rend = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(col, rend, TRUE); + gtk_tree_view_column_add_attribute(col, rend, "text", 0); + + gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); + gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE); #else - tree = gtk_tree_new(); -#endif - if(!tree) - { - gtk_widget_destroy(tmp); - DW_MUTEX_UNLOCK; - return FALSE; - } - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); + tree = gtk_tree_new(); +#endif + if(!tree) + { + gtk_widget_destroy(tmp); + DW_MUTEX_UNLOCK; + return FALSE; + } + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); #if GTK_MAJOR_VERSION < 2 - /* Set the selection mode */ - gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); - gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM); -#endif - - gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); - gtk_widget_show(tree); - - DW_MUTEX_UNLOCK; - return tmp; + /* Set the selection mode */ + gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); + gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM); +#endif + + gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); + gtk_widget_show(tree); + + DW_MUTEX_UNLOCK; + return tmp; } @@ -3506,19 +3549,19 @@ */ HWND dw_text_new(char *text, unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_label_new(text); - - /* Left and centered */ - gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_misc_set_alignment(GTK_MISC(tmp), DW_LEFT, DW_LEFT); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_label_new(text); + + /* Left and centered */ + gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_misc_set_alignment(GTK_MISC(tmp), DW_LEFT, DW_LEFT); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3529,23 +3572,23 @@ */ HWND dw_status_text_new(char *text, ULONG id) { - GtkWidget *tmp, *frame; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); - tmp = gtk_label_new(text); - gtk_container_add(GTK_CONTAINER(frame), tmp); - gtk_widget_show(tmp); - gtk_widget_show(frame); - - /* Left and centered */ - gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f); - gtk_object_set_data(GTK_OBJECT(frame), "_dw_id", (gpointer)id); - gtk_object_set_data(GTK_OBJECT(frame), "_dw_label", (gpointer)tmp); - DW_MUTEX_UNLOCK; - return frame; + GtkWidget *tmp, *frame; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + tmp = gtk_label_new(text); + gtk_container_add(GTK_CONTAINER(frame), tmp); + gtk_widget_show(tmp); + gtk_widget_show(frame); + + /* Left and centered */ + gtk_misc_set_alignment(GTK_MISC(tmp), 0.0f, 0.5f); + gtk_object_set_data(GTK_OBJECT(frame), "_dw_id", GINT_TO_POINTER(id)); + gtk_object_set_data(GTK_OBJECT(frame), "_dw_label", (gpointer)tmp); + DW_MUTEX_UNLOCK; + return frame; } /* @@ -3555,37 +3598,37 @@ */ HWND dw_mle_new(unsigned long id) { - GtkWidget *tmp, *tmpbox, *scroller; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - tmpbox = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(tmpbox), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN); - tmp = gtk_text_view_new(); - gtk_container_add (GTK_CONTAINER(tmpbox), tmp); - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE); - - scroller = NULL; + GtkWidget *tmp, *tmpbox, *scroller; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + tmpbox = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(tmpbox), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN); + tmp = gtk_text_view_new(); + gtk_container_add (GTK_CONTAINER(tmpbox), tmp); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE); + + scroller = NULL; #else - tmpbox = gtk_hbox_new(FALSE, 0); - tmp = gtk_text_new(NULL, NULL); - gtk_text_set_word_wrap(GTK_TEXT(tmp), FALSE); - gtk_text_set_line_wrap(GTK_TEXT(tmp), FALSE); - scroller = gtk_vscrollbar_new(GTK_TEXT(tmp)->vadj); - GTK_WIDGET_UNSET_FLAGS(scroller, GTK_CAN_FOCUS); - gtk_box_pack_start(GTK_BOX(tmpbox), tmp, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(tmpbox), scroller, FALSE, TRUE, 0); - gtk_widget_show(scroller); -#endif - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_object_set_user_data(GTK_OBJECT(tmpbox), (gpointer)tmp); - gtk_widget_show(tmp); - gtk_widget_show(tmpbox); - DW_MUTEX_UNLOCK; - return tmpbox; + tmpbox = gtk_hbox_new(FALSE, 0); + tmp = gtk_text_new(NULL, NULL); + gtk_text_set_word_wrap(GTK_TEXT(tmp), FALSE); + gtk_text_set_line_wrap(GTK_TEXT(tmp), FALSE); + scroller = gtk_vscrollbar_new(GTK_TEXT(tmp)->vadj); + GTK_WIDGET_UNSET_FLAGS(scroller, GTK_CAN_FOCUS); + gtk_box_pack_start(GTK_BOX(tmpbox), tmp, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(tmpbox), scroller, FALSE, TRUE, 0); + gtk_widget_show(scroller); +#endif + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_object_set_user_data(GTK_OBJECT(tmpbox), (gpointer)tmp); + gtk_widget_show(tmp); + gtk_widget_show(tmpbox); + DW_MUTEX_UNLOCK; + return tmpbox; } /* @@ -3596,19 +3639,19 @@ */ HWND dw_entryfield_new(char *text, unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_entry_new(); - - gtk_entry_set_text(GTK_ENTRY(tmp), text); - - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_entry_new(); + + gtk_entry_set_text(GTK_ENTRY(tmp), text); + + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3619,20 +3662,20 @@ */ HWND dw_entryfield_password_new(char *text, ULONG id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_entry_new(); - - gtk_entry_set_visibility(GTK_ENTRY(tmp), FALSE); - gtk_entry_set_text(GTK_ENTRY(tmp), text); - - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_entry_new(); + + gtk_entry_set_visibility(GTK_ENTRY(tmp), FALSE); + gtk_entry_set_text(GTK_ENTRY(tmp), text); + + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3643,23 +3686,23 @@ */ HWND dw_combobox_new(char *text, unsigned long id) { - GtkWidget *tmp; - int sigid, _locked_by_me = FALSE; - gint cid; - - DW_MUTEX_LOCK; - tmp = gtk_combo_new(); - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(tmp)->entry), text); - gtk_combo_set_use_arrows(GTK_COMBO(tmp), TRUE); - gtk_object_set_user_data(GTK_OBJECT(tmp), NULL); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - - sigid = _set_signal_handler(GTK_COMBO(tmp)->list, tmp, NULL, NULL, NULL); - cid = gtk_signal_connect(GTK_OBJECT(GTK_COMBO(tmp)->list), "select_child", GTK_SIGNAL_FUNC(_item_select_event), (gpointer)sigid); - _set_signal_handler_id(GTK_COMBO(tmp)->list, sigid, cid); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int sigid, _locked_by_me = FALSE; + gint cid; + + DW_MUTEX_LOCK; + tmp = gtk_combo_new(); + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(tmp)->entry), text); + gtk_combo_set_use_arrows(GTK_COMBO(tmp), TRUE); + gtk_object_set_user_data(GTK_OBJECT(tmp), NULL); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + + sigid = _set_signal_handler(GTK_COMBO(tmp)->list, tmp, NULL, NULL, NULL); + cid = gtk_signal_connect(GTK_OBJECT(GTK_COMBO(tmp)->list), "select_child", GTK_SIGNAL_FUNC(_item_select_event), (gpointer)sigid); + _set_signal_handler_id(GTK_COMBO(tmp)->list, sigid, cid); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3670,15 +3713,15 @@ */ HWND dw_button_new(char *text, unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_button_new_with_label(text); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_button_new_with_label(text); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3689,30 +3732,30 @@ */ HWND dw_bitmapbutton_new(char *text, unsigned long id) { - GtkWidget *tmp; - GtkWidget *bitmap; + GtkWidget *tmp; + GtkWidget *bitmap; GtkTooltips *tooltips; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_button_new(); - bitmap = dw_bitmap_new(id); - - if(bitmap) - { - dw_window_set_bitmap(bitmap, id, NULL); - gtk_container_add (GTK_CONTAINER(tmp), bitmap); - } - gtk_widget_show(tmp); - if(text) - { - tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(tooltips, tmp, text, NULL); - gtk_object_set_data(GTK_OBJECT(tmp), "tooltip", (gpointer)tooltips); - } - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_button_new(); + bitmap = dw_bitmap_new(id); + + if(bitmap) + { + dw_window_set_bitmap(bitmap, id, NULL); + gtk_container_add (GTK_CONTAINER(tmp), bitmap); + } + gtk_widget_show(tmp); + if(text) + { + tooltips = gtk_tooltips_new(); + gtk_tooltips_set_tip(tooltips, tmp, text, NULL); + gtk_object_set_data(GTK_OBJECT(tmp), "tooltip", (gpointer)tooltips); + } + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3737,9 +3780,9 @@ DW_MUTEX_LOCK; - /* Create box for image and label */ - box = gtk_hbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (box), 2); + /* Create box for image and label */ + box = gtk_hbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (box), 2); /* Now on to the image stuff */ bitmap = dw_bitmap_new(id); @@ -3771,7 +3814,7 @@ gtk_tooltips_set_tip( tooltips, button, text, NULL ); gtk_object_set_data( GTK_OBJECT(button), "tooltip", (gpointer)tooltips ); } - gtk_object_set_data( GTK_OBJECT(button), "_dw_id", (gpointer)id ); + gtk_object_set_data( GTK_OBJECT(button), "_dw_id", GINT_TO_POINTER(id) ); DW_MUTEX_UNLOCK; return button; } @@ -3808,7 +3851,7 @@ gtk_tooltips_set_tip(tooltips, tmp, text, NULL); gtk_object_set_data(GTK_OBJECT(tmp), "tooltip", (gpointer)tooltips); } - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); DW_MUTEX_UNLOCK; return tmp; } @@ -3821,21 +3864,21 @@ */ HWND dw_spinbutton_new(char *text, unsigned long id) { - GtkAdjustment *adj; - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - adj = (GtkAdjustment *)gtk_adjustment_new (1.0, 0.0, 100.0, 1.0, 5.0, 0.0); - tmp = gtk_spin_button_new (adj, 0, 0); - gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(tmp), TRUE); - gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(tmp), TRUE); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adj); - gtk_object_set_data(GTK_OBJECT(adj), "_dw_spinbutton", (gpointer)tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkAdjustment *adj; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + adj = (GtkAdjustment *)gtk_adjustment_new (1.0, 0.0, 100.0, 1.0, 5.0, 0.0); + tmp = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(tmp), TRUE); + gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(tmp), TRUE); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adj); + gtk_object_set_data(GTK_OBJECT(adj), "_dw_spinbutton", (gpointer)tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3846,17 +3889,17 @@ */ HWND dw_radiobutton_new(char *text, ULONG id) { - /* This will have to be fixed in the future. */ - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_radio_button_new_with_label(NULL, text); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - gtk_widget_show(tmp); - - DW_MUTEX_UNLOCK; - return tmp; + /* This will have to be fixed in the future. */ + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_radio_button_new_with_label(NULL, text); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + gtk_widget_show(tmp); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3868,24 +3911,24 @@ */ HWND dw_slider_new(int vertical, int increments, ULONG id) { - GtkWidget *tmp; - GtkAdjustment *adjustment; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_adjustment_new(0, 0, (gfloat)increments, 1, 1, 1); - if(vertical) - tmp = gtk_vscale_new(adjustment); - else - tmp = gtk_hscale_new(adjustment); - gtk_widget_show(tmp); - gtk_scale_set_draw_value(GTK_SCALE(tmp), 0); - gtk_scale_set_digits(GTK_SCALE(tmp), 0); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adjustment); - gtk_object_set_data(GTK_OBJECT(adjustment), "_dw_slider", (gpointer)tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + GtkAdjustment *adjustment; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_adjustment_new(0, 0, (gfloat)increments, 1, 1, 1); + if(vertical) + tmp = gtk_vscale_new(adjustment); + else + tmp = gtk_hscale_new(adjustment); + gtk_widget_show(tmp); + gtk_scale_set_draw_value(GTK_SCALE(tmp), 0); + gtk_scale_set_digits(GTK_SCALE(tmp), 0); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adjustment); + gtk_object_set_data(GTK_OBJECT(adjustment), "_dw_slider", (gpointer)tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3897,23 +3940,23 @@ */ HWND dw_scrollbar_new(int vertical, ULONG id) { - GtkWidget *tmp; - GtkAdjustment *adjustment; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_adjustment_new(0, 0, 0, 1, 1, 1); - if(vertical) - tmp = gtk_vscrollbar_new(adjustment); - else - tmp = gtk_hscrollbar_new(adjustment); - GTK_WIDGET_UNSET_FLAGS(tmp, GTK_CAN_FOCUS); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adjustment); - gtk_object_set_data(GTK_OBJECT(adjustment), "_dw_scrollbar", (gpointer)tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + GtkAdjustment *adjustment; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_adjustment_new(0, 0, 0, 1, 1, 1); + if(vertical) + tmp = gtk_vscrollbar_new(adjustment); + else + tmp = gtk_hscrollbar_new(adjustment); + GTK_WIDGET_UNSET_FLAGS(tmp, GTK_CAN_FOCUS); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_adjustment", (gpointer)adjustment); + gtk_object_set_data(GTK_OBJECT(adjustment), "_dw_scrollbar", (gpointer)tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3923,15 +3966,15 @@ */ HWND dw_percent_new(unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_progress_bar_new(); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_progress_bar_new(); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3942,15 +3985,15 @@ */ HWND dw_checkbox_new(char *text, unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_check_button_new_with_label(text); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_check_button_new_with_label(text); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3961,26 +4004,26 @@ */ HWND dw_listbox_new(unsigned long id, int multi) { - GtkWidget *tmp, *list; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tmp = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - - list = gtk_list_new(); - gtk_list_set_selection_mode(GTK_LIST(list), multi ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), - list); - gtk_object_set_user_data(GTK_OBJECT(tmp), list); - gtk_widget_show(list); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp, *list; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tmp = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), + GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); + + list = gtk_list_new(); + gtk_list_set_selection_mode(GTK_LIST(list), multi ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); + + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), + list); + gtk_object_set_user_data(GTK_OBJECT(tmp), list); + gtk_widget_show(list); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -3991,17 +4034,17 @@ */ void dw_window_set_icon(HWND handle, unsigned long id) { - GdkBitmap *bitmap = NULL; - GdkPixmap *icon_pixmap; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - icon_pixmap = _find_pixmap(&bitmap, id, handle, NULL, NULL); - - if(handle->window && icon_pixmap) - gdk_window_set_icon(handle->window, NULL, icon_pixmap, bitmap); - - DW_MUTEX_UNLOCK; + GdkBitmap *bitmap = NULL; + GdkPixmap *icon_pixmap; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + icon_pixmap = _find_pixmap(&bitmap, id, handle, NULL, NULL); + + if(handle->window && icon_pixmap) + gdk_window_set_icon(handle->window, NULL, icon_pixmap, bitmap); + + DW_MUTEX_UNLOCK; } /* @@ -4180,38 +4223,38 @@ */ void dw_window_set_text(HWND handle, char *text) { - int _locked_by_me = FALSE; - GtkWidget *tmp; - - DW_MUTEX_LOCK; - if((tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi_title"))) - handle = tmp; - if(GTK_IS_ENTRY(handle)) - gtk_entry_set_text(GTK_ENTRY(handle), text); - else if(GTK_IS_COMBO(handle)) - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(handle)->entry), text); - else if(GTK_IS_LABEL(handle)) - gtk_label_set_text(GTK_LABEL(handle), text); - else if(GTK_IS_BUTTON(handle)) - { + int _locked_by_me = FALSE; + GtkWidget *tmp; + + DW_MUTEX_LOCK; + if((tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi_title"))) + handle = tmp; + if(GTK_IS_ENTRY(handle)) + gtk_entry_set_text(GTK_ENTRY(handle), text); + else if(GTK_IS_COMBO(handle)) + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(handle)->entry), text); + else if(GTK_IS_LABEL(handle)) + gtk_label_set_text(GTK_LABEL(handle), text); + else if(GTK_IS_BUTTON(handle)) + { #if GTK_MAJOR_VERSION < 2 - GtkWidget *label = GTK_BUTTON(handle)->child; - - if(GTK_IS_LABEL(label)) - gtk_label_set_text(GTK_LABEL(label), text); + GtkWidget *label = GTK_BUTTON(handle)->child; + + if(GTK_IS_LABEL(label)) + gtk_label_set_text(GTK_LABEL(label), text); #else - gtk_button_set_label(GTK_BUTTON(handle), text); -#endif - } - else if(GTK_WIDGET_TOPLEVEL(handle)) - gtk_window_set_title(GTK_WINDOW(handle), text); - else if(GTK_IS_FRAME(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); - if(tmp && GTK_IS_LABEL(tmp)) - gtk_label_set_text(GTK_LABEL(tmp), text); - } - DW_MUTEX_UNLOCK; + gtk_button_set_label(GTK_BUTTON(handle), text); +#endif + } + else if(GTK_WIDGET_TOPLEVEL(handle)) + gtk_window_set_title(GTK_WINDOW(handle), text); + else if(GTK_IS_FRAME(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); + if(tmp && GTK_IS_LABEL(tmp)) + gtk_label_set_text(GTK_LABEL(tmp), text); + } + DW_MUTEX_UNLOCK; } /* @@ -4224,20 +4267,20 @@ char *dw_window_get_text(HWND handle) { #if GTK_MAJOR_VERSION > 1 - const char *possible = ""; + const char *possible = ""; #else - char *possible = ""; -#endif - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_ENTRY(handle)) - possible = gtk_entry_get_text(GTK_ENTRY(handle)); - else if(GTK_IS_COMBO(handle)) - possible = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(handle)->entry)); - - DW_MUTEX_UNLOCK; - return strdup(possible); + char *possible = ""; +#endif + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_ENTRY(handle)) + possible = gtk_entry_get_text(GTK_ENTRY(handle)); + else if(GTK_IS_COMBO(handle)) + possible = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(handle)->entry)); + + DW_MUTEX_UNLOCK; + return strdup(possible); } /* @@ -4247,11 +4290,11 @@ */ void dw_window_disable(HWND handle) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_widget_set_sensitive(handle, FALSE); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_widget_set_sensitive(handle, FALSE); + DW_MUTEX_UNLOCK; } /* @@ -4261,11 +4304,11 @@ */ void dw_window_enable(HWND handle) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_widget_set_sensitive(handle, TRUE); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_widget_set_sensitive(handle, TRUE); + DW_MUTEX_UNLOCK; } /* @@ -4276,51 +4319,51 @@ */ HWND API dw_window_from_id(HWND handle, int id) { - GList *orig = NULL, *list = NULL; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(handle && GTK_IS_CONTAINER(handle)) - { -#if GTK_MAJOR_VERSION > 1 - orig = list = gtk_container_get_children(GTK_CONTAINER(handle)); + GList *orig = NULL, *list = NULL; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(handle && GTK_IS_CONTAINER(handle)) + { +#if GTK_MAJOR_VERSION > 1 + orig = list = gtk_container_get_children(GTK_CONTAINER(handle)); #else - orig = list = gtk_container_children(GTK_CONTAINER(handle)); -#endif - } - while(list) - { - if(GTK_IS_WIDGET(list->data)) - { - if(id == (int)gtk_object_get_data(GTK_OBJECT(list->data), "_dw_id")) - { - HWND ret = (HWND)list->data; - g_list_free(orig); - DW_MUTEX_UNLOCK; - return ret; - } - } - list = list->next; - } - if(orig) - g_list_free(orig); - DW_MUTEX_UNLOCK; + orig = list = gtk_container_children(GTK_CONTAINER(handle)); +#endif + } + while(list) + { + if(GTK_IS_WIDGET(list->data)) + { + if(id == (int)gtk_object_get_data(GTK_OBJECT(list->data), "_dw_id")) + { + HWND ret = (HWND)list->data; + g_list_free(orig); + DW_MUTEX_UNLOCK; + return ret; + } + } + list = list->next; + } + if(orig) + g_list_free(orig); + DW_MUTEX_UNLOCK; return 0L; } void _strip_cr(char *dest, char *src) { - int z, x = 0; - - for(z=0;z<strlen(src);z++) - { - if(src[z] != '\r') - { - dest[x] = src[z]; - x++; - } - } - dest[x] = 0; + int z, x = 0; + + for(z=0;z<strlen(src);z++) + { + if(src[z] != '\r') + { + dest[x] = src[z]; + x++; + } + } + dest[x] = 0; } /* @@ -4332,54 +4375,54 @@ */ unsigned int dw_mle_import(HWND handle, char *buffer, int startpoint) { - unsigned int tmppoint = startpoint; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) + unsigned int tmppoint = startpoint; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) #else - if(GTK_IS_BOX(handle)) -#endif - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - -#if GTK_MAJOR_VERSION > 1 - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - char *impbuf = malloc(strlen(buffer)+1); - GtkTextBuffer *tbuffer; - GtkTextIter iter; - - _strip_cr(impbuf, buffer); - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, startpoint); - gtk_text_buffer_place_cursor(tbuffer, &iter); - gtk_text_buffer_insert_at_cursor(tbuffer, impbuf, -1); - tmppoint = (startpoint > -1 ? startpoint : 0) + strlen(impbuf); - free(impbuf); - } + if(GTK_IS_BOX(handle)) +#endif + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + +#if GTK_MAJOR_VERSION > 1 + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + char *impbuf = malloc(strlen(buffer)+1); + GtkTextBuffer *tbuffer; + GtkTextIter iter; + + _strip_cr(impbuf, buffer); + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, startpoint); + gtk_text_buffer_place_cursor(tbuffer, &iter); + gtk_text_buffer_insert_at_cursor(tbuffer, impbuf, -1); + tmppoint = (startpoint > -1 ? startpoint : 0) + strlen(impbuf); + free(impbuf); + } #else - GdkFont *font = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_gdkfont"); - - if(tmp && GTK_IS_TEXT(tmp)) - { - GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_foregdk"); - GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_backgdk"); - char *impbuf = malloc(strlen(buffer)+1); - - _strip_cr(impbuf, buffer); - - gtk_text_set_point(GTK_TEXT(tmp), startpoint < 0 ? 0 : startpoint); - gtk_text_insert(GTK_TEXT(tmp), font, fore, back, impbuf, -1); - tmppoint = gtk_text_get_point(GTK_TEXT(tmp)); - free(impbuf); - } -#endif - } - DW_MUTEX_UNLOCK; - return tmppoint; + GdkFont *font = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_gdkfont"); + + if(tmp && GTK_IS_TEXT(tmp)) + { + GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_foregdk"); + GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_backgdk"); + char *impbuf = malloc(strlen(buffer)+1); + + _strip_cr(impbuf, buffer); + + gtk_text_set_point(GTK_TEXT(tmp), startpoint < 0 ? 0 : startpoint); + gtk_text_insert(GTK_TEXT(tmp), font, fore, back, impbuf, -1); + tmppoint = gtk_text_get_point(GTK_TEXT(tmp)); + free(impbuf); + } +#endif + } + DW_MUTEX_UNLOCK; + return tmppoint; } /* @@ -4392,59 +4435,59 @@ */ void dw_mle_export(HWND handle, char *buffer, int startpoint, int length) { - int _locked_by_me = FALSE; - gchar *text; - - DW_MUTEX_LOCK; - /* force the return value to nul in case the following tests fail */ - if(buffer) - buffer[0] = '\0'; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) + int _locked_by_me = FALSE; + gchar *text; + + DW_MUTEX_LOCK; + /* force the return value to nul in case the following tests fail */ + if(buffer) + buffer[0] = '\0'; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) #else - if(GTK_IS_BOX(handle)) -#endif - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - -#if GTK_MAJOR_VERSION > 1 - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *tbuffer; - GtkTextIter start, end; - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &start, startpoint); - gtk_text_buffer_get_iter_at_offset(tbuffer, &end, startpoint + length); - text = gtk_text_iter_get_text(&start, &end); - if(text) /* Should this get freed? */ - { - if(buffer) - strcpy(buffer, text); - } - } + if(GTK_IS_BOX(handle)) +#endif + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + +#if GTK_MAJOR_VERSION > 1 + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *tbuffer; + GtkTextIter start, end; + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &start, startpoint); + gtk_text_buffer_get_iter_at_offset(tbuffer, &end, startpoint + length); + text = gtk_text_iter_get_text(&start, &end); + if(text) /* Should this get freed? */ + { + if(buffer) + strcpy(buffer, text); + } + } #else - if(tmp && GTK_IS_TEXT(tmp)) - { - text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, -1); /* get the complete contents */ - if(text) - { - if(buffer) - { - len = strlen(text); - if(startpoint < len) - { - max = min(length, len - startpoint); - memcpy(buffer, &text[startpoint], max); - buffer[max] = '\0'; - } - } - g_free(text); - } - } -#endif - } - DW_MUTEX_UNLOCK; + if(tmp && GTK_IS_TEXT(tmp)) + { + text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, -1); /* get the complete contents */ + if(text) + { + if(buffer) + { + len = strlen(text); + if(startpoint < len) + { + max = min(length, len - startpoint); + memcpy(buffer, &text[startpoint], max); + buffer[max] = '\0'; + } + } + g_free(text); + } + } +#endif + } + DW_MUTEX_UNLOCK; } /* @@ -4456,61 +4499,61 @@ */ void dw_mle_get_size(HWND handle, unsigned long *bytes, unsigned long *lines) { - int _locked_by_me = FALSE; - - if(bytes) - *bytes = 0; - if(lines) - *lines = 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); - - if(bytes) - *bytes = gtk_text_buffer_get_char_count(buffer) + 1; - if(lines) - *lines = gtk_text_buffer_get_line_count(buffer) + 1; - } - } + int _locked_by_me = FALSE; + + if(bytes) + *bytes = 0; + if(lines) + *lines = 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); + + if(bytes) + *bytes = gtk_text_buffer_get_char_count(buffer) + 1; + if(lines) + *lines = gtk_text_buffer_get_line_count(buffer) + 1; + } + } #else - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - if(bytes) - *bytes = gtk_text_get_length(GTK_TEXT(tmp)) + 1; - if(lines) - { - gchar *text; - - *lines = 0; - text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, gtk_text_get_length(GTK_TEXT(tmp))); - - if(text) - { - int z, len = strlen(text); - - for(z=0;z<len;z++) - { - if(text[z] == '\n') - (*lines)++; - } - g_free(text); - } - } - } - } -#endif - DW_MUTEX_UNLOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + if(bytes) + *bytes = gtk_text_get_length(GTK_TEXT(tmp)) + 1; + if(lines) + { + gchar *text; + + *lines = 0; + text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, gtk_text_get_length(GTK_TEXT(tmp))); + + if(text) + { + int z, len = strlen(text); + + for(z=0;z<len;z++) + { + if(text[z] == '\n') + (*lines)++; + } + g_free(text); + } + } + } + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -4522,37 +4565,37 @@ */ void dw_mle_delete(HWND handle, int startpoint, int length) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) #else - if(GTK_IS_BOX(handle)) -#endif - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - -#if GTK_MAJOR_VERSION > 1 - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *tbuffer; - GtkTextIter start, end; - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &start, startpoint); - gtk_text_buffer_get_iter_at_offset(tbuffer, &end, startpoint + length); - gtk_text_buffer_delete(tbuffer, &start, &end); - } + if(GTK_IS_BOX(handle)) +#endif + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + +#if GTK_MAJOR_VERSION > 1 + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *tbuffer; + GtkTextIter start, end; + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &start, startpoint); + gtk_text_buffer_get_iter_at_offset(tbuffer, &end, startpoint + length); + gtk_text_buffer_delete(tbuffer, &start, &end); + } #else - if(tmp && GTK_IS_TEXT(tmp)) - { - gtk_text_set_point(GTK_TEXT(tmp), startpoint); - gtk_text_forward_delete(GTK_TEXT(tmp), length); - } -#endif - } - DW_MUTEX_UNLOCK; + if(tmp && GTK_IS_TEXT(tmp)) + { + gtk_text_set_point(GTK_TEXT(tmp), startpoint); + gtk_text_forward_delete(GTK_TEXT(tmp), length); + } +#endif + } + DW_MUTEX_UNLOCK; } /* @@ -4562,36 +4605,36 @@ */ void dw_mle_clear(HWND handle) { - int length, _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); - - length = -1; - gtk_text_buffer_set_text(buffer, "", length); - } - } + int length, _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); + + length = -1; + gtk_text_buffer_set_text(buffer, "", length); + } + } #else - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - length = gtk_text_get_length(GTK_TEXT(tmp)); - gtk_text_set_point(GTK_TEXT(tmp), 0); - gtk_text_forward_delete(GTK_TEXT(tmp), length); - } - } -#endif - DW_MUTEX_UNLOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + length = gtk_text_get_length(GTK_TEXT(tmp)); + gtk_text_set_point(GTK_TEXT(tmp), 0); + gtk_text_forward_delete(GTK_TEXT(tmp), length); + } + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -4602,58 +4645,58 @@ */ void dw_mle_set_visible(HWND handle, int line) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *tbuffer; - GtkTextIter iter; - GtkTextMark *mark = (GtkTextMark *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mark"); - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, 0); - gtk_text_iter_set_line(&iter, line); - if(!mark) - { - mark = gtk_text_buffer_create_mark(tbuffer, NULL, &iter, FALSE); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_mark", (gpointer)mark); - } - else - gtk_text_buffer_move_mark(tbuffer, mark, &iter); - gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(tmp), mark, - 0, FALSE, 0, 0); - } - } + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *tbuffer; + GtkTextIter iter; + GtkTextMark *mark = (GtkTextMark *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mark"); + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, 0); + gtk_text_iter_set_line(&iter, line); + if(!mark) + { + mark = gtk_text_buffer_create_mark(tbuffer, NULL, &iter, FALSE); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_mark", (gpointer)mark); + } + else + gtk_text_buffer_move_mark(tbuffer, mark, &iter); + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(tmp), mark, + 0, FALSE, 0, 0); + } + } #else - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - unsigned long lines; - float pos, ratio; - - dw_mle_get_size(handle, NULL, &lines); - - if(lines) - { - ratio = (float)line/(float)lines; - - pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; - - gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); - } - } - } -#endif - DW_MUTEX_UNLOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + unsigned long lines; + float pos, ratio; + + dw_mle_get_size(handle, NULL, &lines); + + if(lines) + { + ratio = (float)line/(float)lines; + + pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; + + gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); + } + } + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -4664,27 +4707,27 @@ */ void dw_mle_set_editable(HWND handle, int state) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - gtk_text_view_set_editable(GTK_TEXT_VIEW(tmp), state); - } + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + gtk_text_view_set_editable(GTK_TEXT_VIEW(tmp), state); + } #else - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - gtk_text_set_editable(GTK_TEXT(tmp), state); - } -#endif - DW_MUTEX_UNLOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + gtk_text_set_editable(GTK_TEXT(tmp), state); + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -4695,30 +4738,30 @@ */ void dw_mle_set_word_wrap(HWND handle, int state) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD); - } + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD); + } #else - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - gtk_text_set_word_wrap(GTK_TEXT(tmp), state); - gtk_text_set_line_wrap(GTK_TEXT(tmp), state); - } - } -#endif - DW_MUTEX_UNLOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + gtk_text_set_word_wrap(GTK_TEXT(tmp), state); + gtk_text_set_line_wrap(GTK_TEXT(tmp), state); + } + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -4729,58 +4772,58 @@ */ void dw_mle_set_cursor(HWND handle, int point) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) #else - if(GTK_IS_BOX(handle)) -#endif - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - -#if GTK_MAJOR_VERSION > 1 - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *tbuffer; - GtkTextIter iter; - GtkTextMark *mark = (GtkTextMark *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mark"); - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, point); - if(!mark) - { - mark = gtk_text_buffer_create_mark(tbuffer, NULL, &iter, FALSE); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_mark", (gpointer)mark); - } - else - gtk_text_buffer_move_mark(tbuffer, mark, &iter); - gtk_text_buffer_place_cursor(tbuffer, &iter); - gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(tmp), mark, - 0, FALSE, 0, 0); - } + if(GTK_IS_BOX(handle)) +#endif + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + +#if GTK_MAJOR_VERSION > 1 + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *tbuffer; + GtkTextIter iter; + GtkTextMark *mark = (GtkTextMark *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mark"); + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, point); + if(!mark) + { + mark = gtk_text_buffer_create_mark(tbuffer, NULL, &iter, FALSE); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_mark", (gpointer)mark); + } + else + gtk_text_buffer_move_mark(tbuffer, mark, &iter); + gtk_text_buffer_place_cursor(tbuffer, &iter); + gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(tmp), mark, + 0, FALSE, 0, 0); + } #else - if(tmp && GTK_IS_TEXT(tmp)) - { - unsigned long chars; - float pos, ratio; - - dw_mle_get_size(handle, &chars, NULL); - - if(chars) - { - ratio = (float)point/(float)chars; - - pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; - - gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); - } - gtk_text_set_point(GTK_TEXT(tmp), point); - } -#endif - } - DW_MUTEX_UNLOCK; + if(tmp && GTK_IS_TEXT(tmp)) + { + unsigned long chars; + float pos, ratio; + + dw_mle_get_size(handle, &chars, NULL); + + if(chars) + { + ratio = (float)point/(float)chars; + + pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; + + gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); + } + gtk_text_set_point(GTK_TEXT(tmp), point); + } +#endif + } + DW_MUTEX_UNLOCK; } /* @@ -4793,71 +4836,71 @@ */ int dw_mle_search(HWND handle, char *text, int point, unsigned long flags) { - int _locked_by_me = FALSE, retval = 0; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if(GTK_IS_SCROLLED_WINDOW(handle)) + int _locked_by_me = FALSE, retval = 0; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if(GTK_IS_SCROLLED_WINDOW(handle)) #else - if(GTK_IS_BOX(handle)) -#endif - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - -#if GTK_MAJOR_VERSION > 1 - if(tmp && GTK_IS_TEXT_VIEW(tmp)) - { - GtkTextBuffer *tbuffer; - GtkTextIter iter, found; - - tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); - gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, point); - gtk_text_iter_forward_search(&iter, text, GTK_TEXT_SEARCH_TEXT_ONLY, &found, NULL, NULL); - retval = gtk_text_iter_get_offset(&found); - } + if(GTK_IS_BOX(handle)) +#endif + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + +#if GTK_MAJOR_VERSION > 1 + if(tmp && GTK_IS_TEXT_VIEW(tmp)) + { + GtkTextBuffer *tbuffer; + GtkTextIter iter, found; + + tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); + gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, point); + gtk_text_iter_forward_search(&iter, text, GTK_TEXT_SEARCH_TEXT_ONLY, &found, NULL, NULL); + retval = gtk_text_iter_get_offset(&found); + } #else - if(tmp && GTK_IS_TEXT(tmp)) - { - int len = gtk_text_get_length(GTK_TEXT(tmp)); - gchar *tmpbuf; - - tmpbuf = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, len); - if(tmpbuf) - { - int z, textlen; - - textlen = strlen(text); - - if(flags & DW_MLE_CASESENSITIVE) - { - for(z=point;z<(len-textlen) && !retval;z++) - { - if(strncmp(&tmpbuf[z], text, textlen) == 0) - retval = z + textlen; - } - } - else - { - for(z=point;z<(len-textlen) && !retval;z++) - { - if(strncasecmp(&tmpbuf[z], text, textlen) == 0) - retval = z + textlen; - } - } - - if(retval) - { - gtk_text_set_point(GTK_TEXT(tmp), retval - textlen); - gtk_editable_select_region(&(GTK_TEXT(tmp)->editable), retval - textlen, retval); - } - - g_free(tmpbuf); - } - } -#endif - } - DW_MUTEX_UNLOCK; - return retval; + if(tmp && GTK_IS_TEXT(tmp)) + { + int len = gtk_text_get_length(GTK_TEXT(tmp)); + gchar *tmpbuf; + + tmpbuf = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, len); + if(tmpbuf) + { + int z, textlen; + + textlen = strlen(text); + + if(flags & DW_MLE_CASESENSITIVE) + { + for(z=point;z<(len-textlen) && !retval;z++) + { + if(strncmp(&tmpbuf[z], text, textlen) == 0) + retval = z + textlen; + } + } + else + { + for(z=point;z<(len-textlen) && !retval;z++) + { + if(strncasecmp(&tmpbuf[z], text, textlen) == 0) + retval = z + textlen; + } + } + + if(retval) + { + gtk_text_set_point(GTK_TEXT(tmp), retval - textlen); + gtk_editable_select_region(&(GTK_TEXT(tmp)->editable), retval - textlen, retval); + } + + g_free(tmpbuf); + } + } +#endif + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -4868,19 +4911,19 @@ void dw_mle_freeze(HWND handle) { #if GTK_MAJOR_VERSION < 2 - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - gtk_text_freeze(GTK_TEXT(tmp)); - } - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + gtk_text_freeze(GTK_TEXT(tmp)); + } + } + DW_MUTEX_UNLOCK; #endif } @@ -4892,19 +4935,19 @@ void dw_mle_thaw(HWND handle) { #if GTK_MAJOR_VERSION < 2 - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_BOX(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tmp && GTK_IS_TEXT(tmp)) - { - gtk_text_thaw(GTK_TEXT(tmp)); - } - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_BOX(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tmp && GTK_IS_TEXT(tmp)) + { + gtk_text_thaw(GTK_TEXT(tmp)); + } + } + DW_MUTEX_UNLOCK; #endif } @@ -4916,11 +4959,11 @@ */ void dw_percent_set_pos(HWND handle, unsigned int position) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_progress_bar_update(GTK_PROGRESS_BAR(handle), (gfloat)position/100); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_progress_bar_update(GTK_PROGRESS_BAR(handle), (gfloat)position/100); + DW_MUTEX_UNLOCK; } /* @@ -4930,26 +4973,26 @@ */ unsigned int dw_slider_get_pos(HWND handle) { - int val = 0, _locked_by_me = FALSE; - GtkAdjustment *adjustment; - - if(!handle) - return 0; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); - if(adjustment) - { - int max = _round_value(adjustment->upper) - 1; - int thisval = _round_value(adjustment->value); - - if(GTK_IS_VSCALE(handle)) - val = max - thisval; + int val = 0, _locked_by_me = FALSE; + GtkAdjustment *adjustment; + + if(!handle) + return 0; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); + if(adjustment) + { + int max = _round_value(adjustment->upper) - 1; + int thisval = _round_value(adjustment->value); + + if(GTK_IS_VSCALE(handle)) + val = max - thisval; else - val = thisval; - } - DW_MUTEX_UNLOCK; - return val; + val = thisval; + } + DW_MUTEX_UNLOCK; + return val; } /* @@ -4960,24 +5003,24 @@ */ void dw_slider_set_pos(HWND handle, unsigned int position) { - int _locked_by_me = FALSE; - GtkAdjustment *adjustment; - - if(!handle) - return; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); - if(adjustment) - { - int max = _round_value(adjustment->upper) - 1; - - if(GTK_IS_VSCALE(handle)) - gtk_adjustment_set_value(adjustment, (gfloat)(max - position)); + int _locked_by_me = FALSE; + GtkAdjustment *adjustment; + + if(!handle) + return; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); + if(adjustment) + { + int max = _round_value(adjustment->upper) - 1; + + if(GTK_IS_VSCALE(handle)) + gtk_adjustment_set_value(adjustment, (gfloat)(max - position)); else - gtk_adjustment_set_value(adjustment, (gfloat)position); - } - DW_MUTEX_UNLOCK; + gtk_adjustment_set_value(adjustment, (gfloat)position); + } + DW_MUTEX_UNLOCK; } /* @@ -4987,18 +5030,18 @@ */ unsigned int dw_scrollbar_get_pos(HWND handle) { - int val = 0, _locked_by_me = FALSE; - GtkAdjustment *adjustment; - - if(!handle) - return 0; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); - if(adjustment) - val = _round_value(adjustment->value); - DW_MUTEX_UNLOCK; - return val; + int val = 0, _locked_by_me = FALSE; + GtkAdjustment *adjustment; + + if(!handle) + return 0; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); + if(adjustment) + val = _round_value(adjustment->value); + DW_MUTEX_UNLOCK; + return val; } /* @@ -5009,17 +5052,17 @@ */ void dw_scrollbar_set_pos(HWND handle, unsigned int position) { - int _locked_by_me = FALSE; - GtkAdjustment *adjustment; - - if(!handle) - return; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); - if(adjustment) - gtk_adjustment_set_value(adjustment, (gfloat)position); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GtkAdjustment *adjustment; + + if(!handle) + return; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); + if(adjustment) + gtk_adjustment_set_value(adjustment, (gfloat)position); + DW_MUTEX_UNLOCK; } /* @@ -5031,20 +5074,20 @@ */ void API dw_scrollbar_set_range(HWND handle, unsigned int range, unsigned int visible) { - int _locked_by_me = FALSE; - GtkAdjustment *adjustment; - - if(!handle) - return; - - DW_MUTEX_LOCK; - adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); - if(adjustment) - { - adjustment->upper = (gdouble)range; - adjustment->page_increment = adjustment->page_size = (gdouble)visible; - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GtkAdjustment *adjustment; + + if(!handle) + return; + + DW_MUTEX_LOCK; + adjustment = (GtkAdjustment *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_adjustment"); + if(adjustment) + { + adjustment->upper = (gdouble)range; + adjustment->page_increment = adjustment->page_size = (gdouble)visible; + } + DW_MUTEX_UNLOCK; } /* @@ -5055,11 +5098,11 @@ */ void dw_spinbutton_set_pos(HWND handle, long position) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_spin_button_set_value(GTK_SPIN_BUTTON(handle), (gfloat)position); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_spin_button_set_value(GTK_SPIN_BUTTON(handle), (gfloat)position); + DW_MUTEX_UNLOCK; } /* @@ -5071,15 +5114,15 @@ */ void dw_spinbutton_set_limits(HWND handle, long upper, long lower) { - long curval; - GtkAdjustment *adj; - int _locked_by_me = FALSE; - - curval = dw_spinbutton_get_pos(handle); - DW_MUTEX_LOCK; - adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); - gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj); - DW_MUTEX_UNLOCK; + long curval; + GtkAdjustment *adj; + int _locked_by_me = FALSE; + + curval = dw_spinbutton_get_pos(handle); + DW_MUTEX_LOCK; + adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); + gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(handle), adj); + DW_MUTEX_UNLOCK; } /* @@ -5090,11 +5133,11 @@ */ void dw_entryfield_set_limit(HWND handle, ULONG limit) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_entry_set_max_length(GTK_ENTRY(handle), limit); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_entry_set_max_length(GTK_ENTRY(handle), limit); + DW_MUTEX_UNLOCK; } /* @@ -5104,14 +5147,14 @@ */ long dw_spinbutton_get_pos(HWND handle) { - long retval; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - retval = (long)gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(handle)); - DW_MUTEX_UNLOCK; - - return retval; + long retval; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + retval = (long)gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(handle)); + DW_MUTEX_UNLOCK; + + return retval; } /* @@ -5121,14 +5164,14 @@ */ int dw_checkbox_get(HWND handle) { - int retval; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - retval = GTK_TOGGLE_BUTTON(handle)->active; - DW_MUTEX_UNLOCK; - - return retval; + int retval; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + retval = GTK_TOGGLE_BUTTON(handle)->active; + DW_MUTEX_UNLOCK; + + return retval; } /* @@ -5139,11 +5182,11 @@ */ void dw_checkbox_set(HWND handle, int value) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(handle), value); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(handle), value); + DW_MUTEX_UNLOCK; } /* @@ -5159,144 +5202,144 @@ HTREEITEM dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, unsigned long icon, HTREEITEM parent, void *itemdata) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeIter *iter; - GtkTreeStore *store; - GdkPixbuf *pixbuf; - HTREEITEM retval = 0; - int _locked_by_me = FALSE; - - if(!handle) - return NULL; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); - - pixbuf = _find_pixbuf(icon); - - gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); - gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); - if(pixbuf && !(icon & (1 << 31))) - g_object_unref(pixbuf); - retval = (HTREEITEM)iter; - } - DW_MUTEX_UNLOCK; - - return retval; + GtkWidget *tree; + GtkTreeIter *iter; + GtkTreeStore *store; + GdkPixbuf *pixbuf; + HTREEITEM retval = 0; + int _locked_by_me = FALSE; + + if(!handle) + return NULL; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); + + pixbuf = _find_pixbuf(icon); + + gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); + gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); + if(pixbuf && !(icon & (1 << 31))) + g_object_unref(pixbuf); + retval = (HTREEITEM)iter; + } + DW_MUTEX_UNLOCK; + + return retval; #else - GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap; - GdkPixmap *gdkpix; - GdkBitmap *gdkbmp = NULL; - int position = -1; - int _locked_by_me = FALSE; - - if(!handle) - return NULL; - - DW_MUTEX_LOCK; - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!tree || !GTK_IS_TREE(tree)) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - if(item && GTK_IS_TREE_ITEM(item)) - position = gtk_tree_child_position(GTK_TREE(tree), item); - - position++; - - newitem = gtk_tree_item_new(); - label = gtk_label_new(title); - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_text", (gpointer)strdup(title)); - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_itemdata", (gpointer)itemdata); - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_tree", (gpointer)tree); - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parent", (gpointer)parent); - hbox = gtk_hbox_new(FALSE, 2); - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_hbox", (gpointer)hbox); - gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); - gtk_container_add(GTK_CONTAINER(newitem), hbox); - if(gdkpix) - { - pixmap = gtk_pixmap_new(gdkpix, gdkbmp); - gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); - gtk_widget_show(pixmap); - } - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); - gtk_widget_show(label); - gtk_widget_show(hbox); - - { - void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); - void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); - SignalHandler work = _get_signal_handler(tree, mydata); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(newitem, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(newitem), "expand", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(newitem, sigid, cid); - } - } - - _dw_ignore_expand = 1; - if(parent) - { - subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); - if(!subtree || !GTK_IS_TREE(subtree)) - { - void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_func"); - void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_data"); - SignalHandler work = _get_signal_handler(tree, mydata); - - subtree = gtk_tree_new(); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(subtree, sigid, cid); - } - - thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); - mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); - work = _get_signal_handler(tree, mydata); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(subtree, sigid, cid); - } - - gtk_object_set_user_data(GTK_OBJECT(parent), subtree); - gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); - gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); - gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); - gtk_object_set_data(GTK_OBJECT(subtree), "_dw_parentitem", (gpointer)parent); - gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); - gtk_widget_show(subtree); - gtk_tree_item_expand(GTK_TREE_ITEM(parent)); - gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); - } - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parenttree", (gpointer)subtree); - gtk_tree_insert(GTK_TREE(subtree), newitem, position); - } - else - { - gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parenttree", (gpointer)tree); - gtk_tree_insert(GTK_TREE(tree), newitem, position); - } - gtk_tree_item_expand(GTK_TREE_ITEM(newitem)); - gtk_tree_item_collapse(GTK_TREE_ITEM(newitem)); - gtk_widget_show(newitem); - _dw_ignore_expand = 0; - DW_MUTEX_UNLOCK; - return (HTREEITEM)newitem; + GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap; + GdkPixmap *gdkpix; + GdkBitmap *gdkbmp = NULL; + int position = -1; + int _locked_by_me = FALSE; + + if(!handle) + return NULL; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + if(item && GTK_IS_TREE_ITEM(item)) + position = gtk_tree_child_position(GTK_TREE(tree), item); + + position++; + + newitem = gtk_tree_item_new(); + label = gtk_label_new(title); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_text", (gpointer)strdup(title)); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_itemdata", (gpointer)itemdata); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_tree", (gpointer)tree); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parent", (gpointer)parent); + hbox = gtk_hbox_new(FALSE, 2); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_hbox", (gpointer)hbox); + gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); + gtk_container_add(GTK_CONTAINER(newitem), hbox); + if(gdkpix) + { + pixmap = gtk_pixmap_new(gdkpix, gdkbmp); + gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); + gtk_widget_show(pixmap); + } + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_show(hbox); + + { + void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); + void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); + SignalHandler work = _get_signal_handler(tree, mydata); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(newitem, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(newitem), "expand", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(newitem, sigid, cid); + } + } + + _dw_ignore_expand = 1; + if(parent) + { + subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); + if(!subtree || !GTK_IS_TREE(subtree)) + { + void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_func"); + void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_data"); + SignalHandler work = _get_signal_handler(tree, mydata); + + subtree = gtk_tree_new(); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(subtree, sigid, cid); + } + + thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); + mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); + work = _get_signal_handler(tree, mydata); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(subtree, sigid, cid); + } + + gtk_object_set_user_data(GTK_OBJECT(parent), subtree); + gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); + gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); + gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); + gtk_object_set_data(GTK_OBJECT(subtree), "_dw_parentitem", (gpointer)parent); + gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); + gtk_widget_show(subtree); + gtk_tree_item_expand(GTK_TREE_ITEM(parent)); + gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); + } + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parenttree", (gpointer)subtree); + gtk_tree_insert(GTK_TREE(subtree), newitem, position); + } + else + { + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parenttree", (gpointer)tree); + gtk_tree_insert(GTK_TREE(tree), newitem, position); + } + gtk_tree_item_expand(GTK_TREE_ITEM(newitem)); + gtk_tree_item_collapse(GTK_TREE_ITEM(newitem)); + gtk_widget_show(newitem); + _dw_ignore_expand = 0; + DW_MUTEX_UNLOCK; + return (HTREEITEM)newitem; #endif } @@ -5312,137 +5355,137 @@ HTREEITEM dw_tree_insert(HWND handle, char *title, unsigned long icon, HTREEITEM parent, void *itemdata) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeIter *iter; - GtkTreeStore *store; - GdkPixbuf *pixbuf; - HTREEITEM retval = 0; - int _locked_by_me = FALSE; - - if(!handle) - return NULL; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); - - pixbuf = _find_pixbuf(icon); - - gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); - gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); - if(pixbuf && !(icon & (1 << 31))) - g_object_unref(pixbuf); - retval = (HTREEITEM)iter; - } - DW_MUTEX_UNLOCK; - - return retval; + GtkWidget *tree; + GtkTreeIter *iter; + GtkTreeStore *store; + GdkPixbuf *pixbuf; + HTREEITEM retval = 0; + int _locked_by_me = FALSE; + + if(!handle) + return NULL; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); + + pixbuf = _find_pixbuf(icon); + + gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); + gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); + if(pixbuf && !(icon & (1 << 31))) + g_object_unref(pixbuf); + retval = (HTREEITEM)iter; + } + DW_MUTEX_UNLOCK; + + return retval; #else - GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; - GdkPixmap *gdkpix; - GdkBitmap *gdkbmp = NULL; - int _locked_by_me = FALSE; - - if(!handle) - return NULL; - - DW_MUTEX_LOCK; - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!tree || !GTK_IS_TREE(tree)) - { - DW_MUTEX_UNLOCK; - return NULL; - } - item = gtk_tree_item_new(); - label = gtk_label_new(title); - gtk_object_set_data(GTK_OBJECT(item), "_dw_text", (gpointer)strdup(title)); - gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); - gtk_object_set_data(GTK_OBJECT(item), "_dw_tree", (gpointer)tree); - gtk_object_set_data(GTK_OBJECT(item), "_dw_parent", (gpointer)parent); - hbox = gtk_hbox_new(FALSE, 2); - gtk_object_set_data(GTK_OBJECT(item), "_dw_hbox", (gpointer)hbox); - gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); - gtk_container_add(GTK_CONTAINER(item), hbox); - if(gdkpix) - { - pixmap = gtk_pixmap_new(gdkpix, gdkbmp); - gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); - gtk_widget_show(pixmap); - } - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); - gtk_widget_show(label); - gtk_widget_show(hbox); - - { - void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); - void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); - SignalHandler work = _get_signal_handler(tree, mydata); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(item, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(item), "expand", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(item, sigid, cid); - } - } - - _dw_ignore_expand = 1; - if(parent) - { - subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); - if(!subtree || !GTK_IS_TREE(subtree)) - { - void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_func"); - void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_data"); - SignalHandler work = _get_signal_handler(tree, mydata); - - subtree = gtk_tree_new(); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(subtree, sigid, cid); - } - - thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); - mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); - work = _get_signal_handler(tree, mydata); - - if(thisfunc && work.window) - { - int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); - gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(subtree, sigid, cid); - } - - gtk_object_set_user_data(GTK_OBJECT(parent), subtree); - gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); - gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); - gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); - gtk_object_set_data(GTK_OBJECT(subtree), "_dw_parentitem", (gpointer)parent); - gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); - gtk_widget_show(subtree); - gtk_tree_item_expand(GTK_TREE_ITEM(parent)); - gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); - } - gtk_object_set_data(GTK_OBJECT(item), "_dw_parenttree", (gpointer)subtree); - gtk_tree_append(GTK_TREE(subtree), item); - } - else - { - gtk_object_set_data(GTK_OBJECT(item), "_dw_parenttree", (gpointer)tree); - gtk_tree_append(GTK_TREE(tree), item); - } - gtk_tree_item_expand(GTK_TREE_ITEM(item)); - gtk_tree_item_collapse(GTK_TREE_ITEM(item)); - gtk_widget_show(item); - _dw_ignore_expand = 0; - DW_MUTEX_UNLOCK; - return (HTREEITEM)item; + GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; + GdkPixmap *gdkpix; + GdkBitmap *gdkbmp = NULL; + int _locked_by_me = FALSE; + + if(!handle) + return NULL; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return NULL; + } + item = gtk_tree_item_new(); + label = gtk_label_new(title); + gtk_object_set_data(GTK_OBJECT(item), "_dw_text", (gpointer)strdup(title)); + gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); + gtk_object_set_data(GTK_OBJECT(item), "_dw_tree", (gpointer)tree); + gtk_object_set_data(GTK_OBJECT(item), "_dw_parent", (gpointer)parent); + hbox = gtk_hbox_new(FALSE, 2); + gtk_object_set_data(GTK_OBJECT(item), "_dw_hbox", (gpointer)hbox); + gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); + gtk_container_add(GTK_CONTAINER(item), hbox); + if(gdkpix) + { + pixmap = gtk_pixmap_new(gdkpix, gdkbmp); + gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); + gtk_widget_show(pixmap); + } + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_show(hbox); + + { + void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_func"); + void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_item_expand_data"); + SignalHandler work = _get_signal_handler(tree, mydata); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(item, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(item), "expand", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(item, sigid, cid); + } + } + + _dw_ignore_expand = 1; + if(parent) + { + subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); + if(!subtree || !GTK_IS_TREE(subtree)) + { + void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_func"); + void *mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_select_child_data"); + SignalHandler work = _get_signal_handler(tree, mydata); + + subtree = gtk_tree_new(); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(subtree, sigid, cid); + } + + thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_func"); + mydata = (void *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_container_context_data"); + work = _get_signal_handler(tree, mydata); + + if(thisfunc && work.window) + { + int sigid = _set_signal_handler(subtree, work.window, work.func, work.data, thisfunc); + gint cid =gtk_signal_connect(GTK_OBJECT(subtree), "button_press_event", GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(subtree, sigid, cid); + } + + gtk_object_set_user_data(GTK_OBJECT(parent), subtree); + gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); + gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); + gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); + gtk_object_set_data(GTK_OBJECT(subtree), "_dw_parentitem", (gpointer)parent); + gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); + gtk_widget_show(subtree); + gtk_tree_item_expand(GTK_TREE_ITEM(parent)); + gtk_tree_item_collapse(GTK_TREE_ITEM(parent)); + } + gtk_object_set_data(GTK_OBJECT(item), "_dw_parenttree", (gpointer)subtree); + gtk_tree_append(GTK_TREE(subtree), item); + } + else + { + gtk_object_set_data(GTK_OBJECT(item), "_dw_parenttree", (gpointer)tree); + gtk_tree_append(GTK_TREE(tree), item); + } + gtk_tree_item_expand(GTK_TREE_ITEM(item)); + gtk_tree_item_collapse(GTK_TREE_ITEM(item)); + gtk_widget_show(item); + _dw_ignore_expand = 0; + DW_MUTEX_UNLOCK; + return (HTREEITEM)item; #endif } @@ -5457,58 +5500,58 @@ void dw_tree_item_change(HWND handle, HTREEITEM item, char *title, unsigned long icon) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - GdkPixbuf *pixbuf; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - pixbuf = _find_pixbuf(icon); - - gtk_tree_store_set(store, (GtkTreeIter *)item, 0, title, 1, pixbuf, -1); - if(pixbuf && !(icon & (1 << 31))) - g_object_unref(pixbuf); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + GdkPixbuf *pixbuf; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + pixbuf = _find_pixbuf(icon); + + gtk_tree_store_set(store, (GtkTreeIter *)item, 0, title, 1, pixbuf, -1); + if(pixbuf && !(icon & (1 << 31))) + g_object_unref(pixbuf); + } + DW_MUTEX_UNLOCK; #else - GtkWidget *label, *hbox, *pixmap; - GdkPixmap *gdkpix; - GdkBitmap *gdkbmp = NULL; - char *oldtext; - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - oldtext = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); - if(oldtext) - free(oldtext); - label = gtk_label_new(title); - gtk_object_set_data(GTK_OBJECT(item), "_dw_text", (gpointer)strdup(title)); - hbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_hbox"); - gtk_widget_destroy(hbox); - hbox = gtk_hbox_new(FALSE, 2); - gtk_object_set_data(GTK_OBJECT(item), "_dw_hbox", (gpointer)hbox); - gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); - gtk_container_add(GTK_CONTAINER(item), hbox); - if(gdkpix) - { - pixmap = gtk_pixmap_new(gdkpix, gdkbmp); - gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); - gtk_widget_show(pixmap); - } - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); - gtk_widget_show(label); - gtk_widget_show(hbox); - DW_MUTEX_UNLOCK; + GtkWidget *label, *hbox, *pixmap; + GdkPixmap *gdkpix; + GdkBitmap *gdkbmp = NULL; + char *oldtext; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + oldtext = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); + if(oldtext) + free(oldtext); + label = gtk_label_new(title); + gtk_object_set_data(GTK_OBJECT(item), "_dw_text", (gpointer)strdup(title)); + hbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_hbox"); + gtk_widget_destroy(hbox); + hbox = gtk_hbox_new(FALSE, 2); + gtk_object_set_data(GTK_OBJECT(item), "_dw_hbox", (gpointer)hbox); + gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); + gtk_container_add(GTK_CONTAINER(item), hbox); + if(gdkpix) + { + pixmap = gtk_pixmap_new(gdkpix, gdkbmp); + gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); + gtk_widget_show(pixmap); + } + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_show(hbox); + DW_MUTEX_UNLOCK; #endif } @@ -5522,28 +5565,28 @@ void dw_tree_item_set_data(HWND handle, HTREEITEM item, void *itemdata) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - gtk_tree_store_set(store, (GtkTreeIter *)item, 2, itemdata, -1); - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + gtk_tree_store_set(store, (GtkTreeIter *)item, 2, itemdata, -1); + DW_MUTEX_UNLOCK; #else - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); + DW_MUTEX_UNLOCK; #endif } @@ -5555,28 +5598,28 @@ */ char * API dw_tree_get_title(HWND handle, HTREEITEM item) { - int _locked_by_me = FALSE; - char *text = NULL; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeModel *store; -#endif - - if(!handle || !item) - return text; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tree && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - gtk_tree_model_get(store, (GtkTreeIter *)item, 0, &text, -1); + int _locked_by_me = FALSE; + char *text = NULL; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *tree; + GtkTreeModel *store; +#endif + + if(!handle || !item) + return text; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tree && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + gtk_tree_model_get(store, (GtkTreeIter *)item, 0, &text, -1); #else - text = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); -#endif - DW_MUTEX_UNLOCK; - return text; + text = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); +#endif + DW_MUTEX_UNLOCK; + return text; } /* @@ -5587,35 +5630,35 @@ */ HTREEITEM API dw_tree_get_parent(HWND handle, HTREEITEM item) { - int _locked_by_me = FALSE; - HTREEITEM parent = (HTREEITEM)0; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeModel *store; -#endif - - if(!handle || !item) - return parent; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(tree && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - GtkTreeIter *p = malloc(sizeof(GtkTreeIter)); - - if(gtk_tree_model_iter_parent(store, p, (GtkTreeIter *)item)) - parent = p; - else - free(p); - } + int _locked_by_me = FALSE; + HTREEITEM parent = (HTREEITEM)0; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *tree; + GtkTreeModel *store; +#endif + + if(!handle || !item) + return parent; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(tree && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + GtkTreeIter *p = malloc(sizeof(GtkTreeIter)); + + if(gtk_tree_model_iter_parent(store, p, (GtkTreeIter *)item)) + parent = p; + else + free(p); + } #else - parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); -#endif - DW_MUTEX_UNLOCK; - return parent; + parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); +#endif + DW_MUTEX_UNLOCK; + return parent; } /* @@ -5626,32 +5669,32 @@ */ void *dw_tree_item_get_data(HWND handle, HTREEITEM item) { - void *ret = NULL; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeModel *store; - int _locked_by_me = FALSE; - - if(!handle || !item) - return NULL; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - gtk_tree_model_get(store, (GtkTreeIter *)item, 2, &ret, -1); - DW_MUTEX_UNLOCK; + void *ret = NULL; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *tree; + GtkTreeModel *store; + int _locked_by_me = FALSE; + + if(!handle || !item) + return NULL; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + gtk_tree_model_get(store, (GtkTreeIter *)item, 2, &ret, -1); + DW_MUTEX_UNLOCK; #else - int _locked_by_me = FALSE; - - if(!handle || !item) - return NULL; - - DW_MUTEX_LOCK; - ret = (void *)gtk_object_get_data(GTK_OBJECT(item), "_dw_itemdata"); - DW_MUTEX_UNLOCK; -#endif - return ret; + int _locked_by_me = FALSE; + + if(!handle || !item) + return NULL; + + DW_MUTEX_LOCK; + ret = (void *)gtk_object_get_data(GTK_OBJECT(item), "_dw_itemdata"); + DW_MUTEX_UNLOCK; +#endif + return ret; } /* @@ -5663,61 +5706,61 @@ void dw_tree_item_select(HWND handle, HTREEITEM item) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); - GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); - - gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree), path, NULL, FALSE); - gtk_tree_selection_select_iter(sel, (GtkTreeIter *)item); - gtk_tree_path_free(path); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); + + gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree), path, NULL, FALSE); + gtk_tree_selection_select_iter(sel, (GtkTreeIter *)item); + gtk_tree_path_free(path); + } + DW_MUTEX_UNLOCK; #else - GtkWidget *lastselect, *tree; - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); - if(lastselect && GTK_IS_TREE_ITEM(lastselect)) - gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); - gtk_tree_item_select(GTK_TREE_ITEM(item)); - gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", (gpointer)item); - DW_MUTEX_UNLOCK; + GtkWidget *lastselect, *tree; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); + if(lastselect && GTK_IS_TREE_ITEM(lastselect)) + gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); + gtk_tree_item_select(GTK_TREE_ITEM(item)); + gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", (gpointer)item); + DW_MUTEX_UNLOCK; #endif } #if GTK_MAJOR_VERSION > 1 static void _dw_recursive_free(GtkTreeModel *store, GtkTreeIter parent) { - void *data; - GtkTreeIter iter; - - gtk_tree_model_get(store, &parent, 3, &data, -1); - if(data) - free(data); - gtk_tree_store_set(GTK_TREE_STORE(store), &parent, 3, NULL, -1); - - if(gtk_tree_model_iter_children(store, &iter, &parent)) - { - do { - _dw_recursive_free(GTK_TREE_MODEL(store), iter); - } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); - } + void *data; + GtkTreeIter iter; + + gtk_tree_model_get(store, &parent, 3, &data, -1); + if(data) + free(data); + gtk_tree_store_set(GTK_TREE_STORE(store), &parent, 3, NULL, -1); + + if(gtk_tree_model_iter_children(store, &iter, &parent)) + { + do { + _dw_recursive_free(GTK_TREE_MODEL(store), iter); + } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); + } } #endif @@ -5729,46 +5772,46 @@ void dw_tree_clear(HWND handle) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - GtkTreeIter iter; - - if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) - { - do { - _dw_recursive_free(GTK_TREE_MODEL(store), iter); - } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); - } - gtk_tree_store_clear(store); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + GtkTreeIter iter; + + if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) + { + do { + _dw_recursive_free(GTK_TREE_MODEL(store), iter); + } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); + } + gtk_tree_store_clear(store); + } + DW_MUTEX_UNLOCK; #else - GtkWidget *tree; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!tree || !GTK_IS_TREE(tree)) - { - DW_MUTEX_UNLOCK; - return; - } - gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", NULL); - gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); - DW_MUTEX_UNLOCK; + GtkWidget *tree; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return; + } + gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", NULL); + gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); + DW_MUTEX_UNLOCK; #endif } @@ -5781,35 +5824,35 @@ void dw_tree_item_expand(HWND handle, HTREEITEM item) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); - gtk_tree_view_expand_row(GTK_TREE_VIEW(tree), path, FALSE); - gtk_tree_path_free(path); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); + gtk_tree_view_expand_row(GTK_TREE_VIEW(tree), path, FALSE); + gtk_tree_path_free(path); + } + DW_MUTEX_UNLOCK; #else - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - _dw_ignore_expand = 1; - if(GTK_IS_TREE_ITEM(item)) - gtk_tree_item_expand(GTK_TREE_ITEM(item)); - _dw_ignore_expand = 0; - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + _dw_ignore_expand = 1; + if(GTK_IS_TREE_ITEM(item)) + gtk_tree_item_expand(GTK_TREE_ITEM(item)); + _dw_ignore_expand = 0; + DW_MUTEX_UNLOCK; #endif } @@ -5822,33 +5865,33 @@ void dw_tree_item_collapse(HWND handle, HTREEITEM item) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); - gtk_tree_view_collapse_row(GTK_TREE_VIEW(tree), path); - gtk_tree_path_free(path); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), (GtkTreeIter *)item); + gtk_tree_view_collapse_row(GTK_TREE_VIEW(tree), path); + gtk_tree_path_free(path); + } + DW_MUTEX_UNLOCK; #else - int _locked_by_me = FALSE; - - if(!handle || !item) - return; - - DW_MUTEX_LOCK; - if(GTK_IS_TREE_ITEM(item)) - gtk_tree_item_collapse(GTK_TREE_ITEM(item)); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; + if(GTK_IS_TREE_ITEM(item)) + gtk_tree_item_collapse(GTK_TREE_ITEM(item)); + DW_MUTEX_UNLOCK; #endif } @@ -5861,101 +5904,101 @@ void dw_tree_item_delete(HWND handle, HTREEITEM item) { #if GTK_MAJOR_VERSION > 1 - GtkWidget *tree; - GtkTreeStore *store; - int _locked_by_me = FALSE; - - if(!handle) - return; - - DW_MUTEX_LOCK; - if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) - && GTK_IS_TREE_VIEW(tree) && - (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) - { - gtk_tree_store_remove(store, (GtkTreeIter *)item); - free(item); - } - DW_MUTEX_UNLOCK; + GtkWidget *tree; + GtkTreeStore *store; + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) + && GTK_IS_TREE_VIEW(tree) && + (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) + { + gtk_tree_store_remove(store, (GtkTreeIter *)item); + free(item); + } + DW_MUTEX_UNLOCK; #else - GtkWidget *tree, *lastselect, *parenttree; - int _locked_by_me = FALSE; - - if(!handle || !item || !GTK_IS_WIDGET(handle) || !GTK_IS_WIDGET(item)) - return; - - DW_MUTEX_LOCK; - tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!tree || !GTK_IS_TREE(tree)) - { - DW_MUTEX_UNLOCK; - return; - } - - lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); - - parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_parenttree"); - - if(lastselect == item) - { - gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); - gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", NULL); - } - - if(parenttree && GTK_IS_WIDGET(parenttree)) - gtk_container_remove(GTK_CONTAINER(parenttree), item); - DW_MUTEX_UNLOCK; + GtkWidget *tree, *lastselect, *parenttree; + int _locked_by_me = FALSE; + + if(!handle || !item || !GTK_IS_WIDGET(handle) || !GTK_IS_WIDGET(item)) + return; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return; + } + + lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_lastselect"); + + parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_parenttree"); + + if(lastselect == item) + { + gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); + gtk_object_set_data(GTK_OBJECT(tree), "_dw_lastselect", NULL); + } + + if(parenttree && GTK_IS_WIDGET(parenttree)) + gtk_container_remove(GTK_CONTAINER(parenttree), item); + DW_MUTEX_UNLOCK; #endif } static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) { - GtkWidget *clist; - char numbuf[10]; - int z, multi; - int _locked_by_me = FALSE; - GtkJustification justification; - - DW_MUTEX_LOCK; + GtkWidget *clist; + char numbuf[10]; + int z, multi; + int _locked_by_me = FALSE; + GtkJustification justification; + + DW_MUTEX_LOCK; clist = gtk_clist_new_with_titles(count, (gchar **)titles); - if(!clist) - { - DW_MUTEX_UNLOCK; - return FALSE; - } - multi = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_multi"); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_multi", (gpointer)multi); - - gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); - if(multi) - gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED); - else - gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE); - gtk_container_add(GTK_CONTAINER(handle), clist); - gtk_object_set_user_data(GTK_OBJECT(handle), (gpointer)clist); - gtk_widget_show(clist); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_colcount", (gpointer)count); + if(!clist) + { + DW_MUTEX_UNLOCK; + return FALSE; + } + multi = (int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_multi"); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_multi", GINT_TO_POINTER(multi)); + + gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); + if(multi) + gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED); + else + gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE); + gtk_container_add(GTK_CONTAINER(handle), clist); + gtk_object_set_user_data(GTK_OBJECT(handle), (gpointer)clist); + gtk_widget_show(clist); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_colcount", GINT_TO_POINTER(count)); if(extra) - gtk_clist_set_column_width(GTK_CLIST(clist), 1, 120); - - for(z=0;z<count;z++) - { - if(!extra || z > 1) - gtk_clist_set_column_width(GTK_CLIST(clist), z, 50); - sprintf(numbuf, "%d", z); - gtk_object_set_data(GTK_OBJECT(clist), numbuf, (gpointer)flags[z]); - if(flags[z]&DW_CFA_RIGHT) - justification = GTK_JUSTIFY_RIGHT; - else if(flags[z]&DW_CFA_CENTER) - justification = GTK_JUSTIFY_CENTER; - else - justification = GTK_JUSTIFY_LEFT; - gtk_clist_set_column_justification(GTK_CLIST(clist),z,justification); - } - - DW_MUTEX_UNLOCK; - return TRUE; + gtk_clist_set_column_width(GTK_CLIST(clist), 1, 120); + + for(z=0;z<count;z++) + { + if(!extra || z > 1) + gtk_clist_set_column_width(GTK_CLIST(clist), z, 50); + sprintf(numbuf, "%d", z); + gtk_object_set_data(GTK_OBJECT(clist), numbuf, GINT_TO_POINTER(flags[z])); + if(flags[z]&DW_CFA_RIGHT) + justification = GTK_JUSTIFY_RIGHT; + else if(flags[z]&DW_CFA_CENTER) + justification = GTK_JUSTIFY_CENTER; + else + justification = GTK_JUSTIFY_LEFT; + gtk_clist_set_column_justification(GTK_CLIST(clist),z,justification); + } + + DW_MUTEX_UNLOCK; + return TRUE; } /* @@ -5970,7 +6013,7 @@ */ int dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator) { - return _dw_container_setup(handle, flags, titles, count, separator, 0); + return _dw_container_setup(handle, flags, titles, count, separator, 0); } /* @@ -5983,21 +6026,21 @@ */ int dw_filesystem_setup(HWND handle, unsigned long *flags, char **titles, int count) { - char **newtitles = malloc(sizeof(char *) * (count + 1)); - unsigned long *newflags = malloc(sizeof(unsigned long) * (count + 1)); - - newtitles[0] = "Filename"; - - newflags[0] = DW_CFA_STRINGANDICON | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR; - - memcpy(&newtitles[1], titles, sizeof(char *) * count); - memcpy(&newflags[1], flags, sizeof(unsigned long) * count); - - _dw_container_setup(handle, newflags, newtitles, count + 1, 1, 1); - - free(newtitles); - free(newflags); - return TRUE; + char **newtitles = malloc(sizeof(char *) * (count + 1)); + unsigned long *newflags = malloc(sizeof(unsigned long) * (count + 1)); + + newtitles[0] = "Filename"; + + newflags[0] = DW_CFA_STRINGANDICON | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR; + + memcpy(&newtitles[1], titles, sizeof(char *) * count); + memcpy(&newflags[1], flags, sizeof(unsigned long) * count); + + _dw_container_setup(handle, newflags, newtitles, count + 1, 1, 1); + + free(newtitles); + free(newflags); + return TRUE; } /* @@ -6010,7 +6053,7 @@ */ unsigned long dw_icon_load(unsigned long module, unsigned long id) { - return id; + return id; } /* @@ -6223,42 +6266,42 @@ */ void dw_icon_free(unsigned long handle) { - /* If it is a private icon, find the item - * free the associated structures and set - * the entry to unused. - */ - if(handle & (1 << 31)) - { - unsigned long id = handle & 0xFFFFFF; - - if(id < _PixmapCount && _PixmapArray[id].used) - { -#if GTK_MAJOR_VERSION > 1 - if(_PixmapArray[id].pixbuf) - { - g_object_unref(_PixmapArray[id].pixbuf); - _PixmapArray[id].pixbuf = NULL; - } -#endif - if(_PixmapArray[id].mask) - { - gdk_bitmap_unref(_PixmapArray[id].mask); - _PixmapArray[id].mask = NULL; - } - if(_PixmapArray[id].pixmap) - { - gdk_pixmap_unref(_PixmapArray[id].pixmap); - _PixmapArray[id].pixmap = NULL; - } - _PixmapArray[id].used = 0; - } - } + /* If it is a private icon, find the item + * free the associated structures and set + * the entry to unused. + */ + if(handle & (1 << 31)) + { + unsigned long id = handle & 0xFFFFFF; + + if(id < _PixmapCount && _PixmapArray[id].used) + { +#if GTK_MAJOR_VERSION > 1 + if(_PixmapArray[id].pixbuf) + { + g_object_unref(_PixmapArray[id].pixbuf); + _PixmapArray[id].pixbuf = NULL; + } +#endif + if(_PixmapArray[id].mask) + { + gdk_bitmap_unref(_PixmapArray[id].mask); + _PixmapArray[id].mask = NULL; + } + if(_PixmapArray[id].pixmap) + { + gdk_pixmap_unref(_PixmapArray[id].pixmap); + _PixmapArray[id].pixmap = NULL; + } + _PixmapArray[id].used = 0; + } + } } /* Clears a CList selection and associated selection list */ void _dw_unselect(GtkWidget *clist) { - gtk_clist_unselect_all(GTK_CLIST(clist)); + gtk_clist_unselect_all(GTK_CLIST(clist)); } /* @@ -6269,48 +6312,48 @@ */ void *dw_container_alloc(HWND handle, int rowcount) { - int z, count = 0, prevrowcount = 0; - GtkWidget *clist; - GdkColor *fore, *back; - char **blah; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!clist) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - count = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_colcount"); - prevrowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); - - if(!count) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - blah = malloc(sizeof(char *) * count); - memset(blah, 0, sizeof(char *) * count); - - fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "_dw_foregdk"); - back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "_dw_backgdk"); - gtk_clist_freeze(GTK_CLIST(clist)); - for(z=0;z<rowcount;z++) - { - gtk_clist_append(GTK_CLIST(clist), blah); - if(fore) - gtk_clist_set_foreground(GTK_CLIST(clist), z + prevrowcount, fore); - if(back) - gtk_clist_set_background(GTK_CLIST(clist), z + prevrowcount, back); - } - gtk_object_set_data(GTK_OBJECT(clist), "_dw_insertpos", (gpointer)prevrowcount); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", (gpointer)(rowcount + prevrowcount)); - free(blah); - DW_MUTEX_UNLOCK; - return (void *)handle; + int z, count = 0, prevrowcount = 0; + GtkWidget *clist; + GdkColor *fore, *back; + char **blah; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!clist) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + count = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_colcount"); + prevrowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); + + if(!count) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + blah = malloc(sizeof(char *) * count); + memset(blah, 0, sizeof(char *) * count); + + fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "_dw_foregdk"); + back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "_dw_backgdk"); + gtk_clist_freeze(GTK_CLIST(clist)); + for(z=0;z<rowcount;z++) + { + gtk_clist_append(GTK_CLIST(clist), blah); + if(fore) + gtk_clist_set_foreground(GTK_CLIST(clist), z + prevrowcount, fore); + if(back) + gtk_clist_set_background(GTK_CLIST(clist), z + prevrowcount, back); + } + gtk_object_set_data(GTK_OBJECT(clist), "_dw_insertpos", GINT_TO_POINTER(prevrowcount)); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", GINT_TO_POINTER(rowcount + prevrowcount)); + free(blah); + DW_MUTEX_UNLOCK; + return (void *)handle; } /* @@ -6319,81 +6362,81 @@ */ void _dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data, char *text) { - char numbuf[10], textbuffer[100]; - int flag = 0; - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!clist) - { - DW_MUTEX_UNLOCK; - return; - } - - sprintf(numbuf, "%d", column); - flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); - row += (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_insertpos"); - - if(flag & DW_CFA_BITMAPORICON) - { - long hicon = *((long *)data); - GdkBitmap *bitmap = NULL; - GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); - - if(pixmap) - gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap); - } - else if(flag & DW_CFA_STRINGANDICON) - { - long hicon = *((long *)data); - GdkBitmap *bitmap = NULL; - GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); - - if(pixmap) - gtk_clist_set_pixtext(GTK_CLIST(clist), row, column, text, 2, pixmap, bitmap); - } - else if(flag & DW_CFA_STRING) - { - char *tmp = *((char **)data); - gtk_clist_set_text(GTK_CLIST(clist), row, column, tmp); - } - else if(flag & DW_CFA_ULONG) - { - ULONG tmp = *((ULONG *)data); - - sprintf(textbuffer, "%lu", tmp); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - else if(flag & DW_CFA_DATE) - { - struct tm curtm; - CDATE cdate = *((CDATE *)data); - - curtm.tm_mday = cdate.day; - curtm.tm_mon = cdate.month - 1; - curtm.tm_year = cdate.year - 1900; - - strftime(textbuffer, 100, "%x", &curtm); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - else if(flag & DW_CFA_TIME) - { - struct tm curtm; - CTIME ctime = *((CTIME *)data); - - curtm.tm_hour = ctime.hours; - curtm.tm_min = ctime.minutes; - curtm.tm_sec = ctime.seconds; - - strftime(textbuffer, 100, "%X", &curtm); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - DW_MUTEX_UNLOCK; + char numbuf[10], textbuffer[100]; + int flag = 0; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!clist) + { + DW_MUTEX_UNLOCK; + return; + } + + sprintf(numbuf, "%d", column); + flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); + row += (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_insertpos"); + + if(flag & DW_CFA_BITMAPORICON) + { + long hicon = *((long *)data); + GdkBitmap *bitmap = NULL; + GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); + + if(pixmap) + gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap); + } + else if(flag & DW_CFA_STRINGANDICON) + { + long hicon = *((long *)data); + GdkBitmap *bitmap = NULL; + GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); + + if(pixmap) + gtk_clist_set_pixtext(GTK_CLIST(clist), row, column, text, 2, pixmap, bitmap); + } + else if(flag & DW_CFA_STRING) + { + char *tmp = *((char **)data); + gtk_clist_set_text(GTK_CLIST(clist), row, column, tmp); + } + else if(flag & DW_CFA_ULONG) + { + ULONG tmp = *((ULONG *)data); + + sprintf(textbuffer, "%lu", tmp); + + gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); + } + else if(flag & DW_CFA_DATE) + { + struct tm curtm; + CDATE cdate = *((CDATE *)data); + + curtm.tm_mday = cdate.day; + curtm.tm_mon = cdate.month - 1; + curtm.tm_year = cdate.year - 1900; + + strftime(textbuffer, 100, "%x", &curtm); + + gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); + } + else if(flag & DW_CFA_TIME) + { + struct tm curtm; + CTIME ctime = *((CTIME *)data); + + curtm.tm_hour = ctime.hours; + curtm.tm_min = ctime.minutes; + curtm.tm_sec = ctime.seconds; + + strftime(textbuffer, 100, "%X", &curtm); + + gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); + } + DW_MUTEX_UNLOCK; } /* @@ -6407,7 +6450,7 @@ */ void dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) { - _dw_container_set_item(handle, NULL, column, row, data, NULL); + _dw_container_set_item(handle, NULL, column, row, data, NULL); } /* @@ -6420,7 +6463,7 @@ */ void dw_container_change_item(HWND handle, int column, int row, void *data) { - _dw_container_set_item(handle, NULL, column, row, data, NULL); + _dw_container_set_item(handle, NULL, column, row, data, NULL); } /* @@ -6433,7 +6476,7 @@ */ void API dw_filesystem_change_item(HWND handle, int column, int row, void *data) { - dw_filesystem_set_item(handle, NULL, column, row, data); + dw_filesystem_set_item(handle, NULL, column, row, data); } /* @@ -6447,7 +6490,7 @@ */ void API dw_filesystem_change_file(HWND handle, int row, char *filename, unsigned long icon) { - dw_filesystem_set_file(handle, NULL, row, filename, icon); + dw_filesystem_set_file(handle, NULL, row, filename, icon); } /* @@ -6461,7 +6504,7 @@ */ void dw_filesystem_set_file(HWND handle, void *pointer, int row, char *filename, unsigned long icon) { - _dw_container_set_item(handle, pointer, 0, row, (void *)&icon, filename); + _dw_container_set_item(handle, pointer, 0, row, (void *)&icon, filename); } /* @@ -6475,7 +6518,7 @@ */ void dw_filesystem_set_item(HWND handle, void *pointer, int column, int row, void *data) { - _dw_container_set_item(handle, pointer, column + 1, row, data, NULL); + _dw_container_set_item(handle, pointer, column + 1, row, data, NULL); } /* @@ -6486,36 +6529,36 @@ */ int dw_container_get_column_type(HWND handle, int column) { - char numbuf[10]; - int flag, rc; - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(!clist) - { - DW_MUTEX_UNLOCK; - return 0; - } - - sprintf(numbuf, "%d", column); - flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); - - if(flag & DW_CFA_BITMAPORICON) - rc = DW_CFA_BITMAPORICON; - else if(flag & DW_CFA_STRING) - rc = DW_CFA_STRING; - else if(flag & DW_CFA_ULONG) - rc = DW_CFA_ULONG; - else if(flag & DW_CFA_DATE) - rc = DW_CFA_DATE; - else if(flag & DW_CFA_TIME) - rc = DW_CFA_TIME; - else - rc = 0; - DW_MUTEX_UNLOCK; - return rc; + char numbuf[10]; + int flag, rc; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!clist) + { + DW_MUTEX_UNLOCK; + return 0; + } + + sprintf(numbuf, "%d", column); + flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); + + if(flag & DW_CFA_BITMAPORICON) + rc = DW_CFA_BITMAPORICON; + else if(flag & DW_CFA_STRING) + rc = DW_CFA_STRING; + else if(flag & DW_CFA_ULONG) + rc = DW_CFA_ULONG; + else if(flag & DW_CFA_DATE) + rc = DW_CFA_DATE; + else if(flag & DW_CFA_TIME) + rc = DW_CFA_TIME; + else + rc = 0; + DW_MUTEX_UNLOCK; + return rc; } /* @@ -6526,7 +6569,7 @@ */ int API dw_filesystem_get_column_type(HWND handle, int column) { - return dw_container_get_column_type( handle, column + 1 ); + return dw_container_get_column_type( handle, column + 1 ); } /* @@ -6538,15 +6581,15 @@ */ void dw_container_set_column_width(HWND handle, int column, int width) { - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(clist && GTK_IS_CLIST(clist)) - gtk_clist_set_column_width(GTK_CLIST(clist), column, width); - DW_MUTEX_UNLOCK; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(clist && GTK_IS_CLIST(clist)) + gtk_clist_set_column_width(GTK_CLIST(clist), column, width); + DW_MUTEX_UNLOCK; } /* @@ -6558,16 +6601,16 @@ */ void dw_container_set_row_title(void *pointer, int row, char *title) { - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(pointer)); - row += (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_insertpos"); - - if(clist) - gtk_clist_set_row_data(GTK_CLIST(clist), row, (gpointer)title); - DW_MUTEX_UNLOCK; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(pointer)); + row += (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_insertpos"); + + if(clist) + gtk_clist_set_row_data(GTK_CLIST(clist), row, (gpointer)title); + DW_MUTEX_UNLOCK; } /* @@ -6579,15 +6622,15 @@ */ void dw_container_insert(HWND handle, void *pointer, int rowcount) { - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(clist && GTK_IS_CLIST(clist)) - gtk_clist_thaw(GTK_CLIST(clist)); - DW_MUTEX_UNLOCK; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(clist && GTK_IS_CLIST(clist)) + gtk_clist_thaw(GTK_CLIST(clist)); + DW_MUTEX_UNLOCK; } /* @@ -6598,30 +6641,30 @@ */ void dw_container_delete(HWND handle, int rowcount) { - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(clist && GTK_IS_CLIST(clist)) - { - int rows, z; - - rows = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); - - _dw_unselect(clist); - - for(z=0;z<rowcount;z++) - gtk_clist_remove(GTK_CLIST(clist), 0); - - if(rows - rowcount < 0) - rows = 0; - else - rows -= rowcount; - - gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", (gpointer)rows); - } - DW_MUTEX_UNLOCK; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(clist && GTK_IS_CLIST(clist)) + { + int rows, z; + + rows = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); + + _dw_unselect(clist); + + for(z=0;z<rowcount;z++) + gtk_clist_remove(GTK_CLIST(clist), 0); + + if(rows - rowcount < 0) + rows = 0; + else + rows -= rowcount; + + gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", GINT_TO_POINTER(rows)); + } + DW_MUTEX_UNLOCK; } /* @@ -6632,18 +6675,18 @@ */ void dw_container_clear(HWND handle, int redraw) { - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(clist && GTK_IS_CLIST(clist)) - { - _dw_unselect(clist); - gtk_clist_clear(GTK_CLIST(clist)); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", (gpointer)0); - } - DW_MUTEX_UNLOCK; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(clist && GTK_IS_CLIST(clist)) + { + _dw_unselect(clist); + gtk_clist_clear(GTK_CLIST(clist)); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", GINT_TO_POINTER(0)); + } + DW_MUTEX_UNLOCK; } /* @@ -6656,30 +6699,30 @@ */ void dw_container_scroll(HWND handle, int direction, long rows) { - GtkAdjustment *adj; - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(clist && GTK_IS_CLIST(clist)) - { - adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); - if(adj) - { - switch(direction) - { - case DW_SCROLL_TOP: - adj->value = adj->lower; - break; - case DW_SCROLL_BOTTOM: - adj->value = adj->upper; - break; - } - gtk_clist_set_vadjustment(GTK_CLIST(clist), adj); - } - } - DW_MUTEX_UNLOCK; + GtkAdjustment *adj; + GtkWidget *clist; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(clist && GTK_IS_CLIST(clist)) + { + adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); + if(adj) + { + switch(direction) + { + case DW_SCROLL_TOP: + adj->value = adj->lower; + break; + case DW_SCROLL_BOTTOM: + adj->value = adj->upper; + break; + } + gtk_clist_set_vadjustment(GTK_CLIST(clist), adj); + } + } + DW_MUTEX_UNLOCK; } /* @@ -6692,42 +6735,42 @@ */ char *dw_container_query_start(HWND handle, unsigned long flags) { - GtkWidget *clist; - GList *list; - char *retval = NULL; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(!clist) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - /* These should be separate but right now this will work */ - if(flags & DW_CRA_SELECTED) - { - list = GTK_CLIST(clist)->selection; - - if(list) - { - gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", (gpointer)1); - retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); - } - } - else if(flags & DW_CRA_CURSORED) - { - retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GTK_CLIST(clist)->focus_row); - } - else - { - retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), 0); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", (gpointer)1); - } - DW_MUTEX_UNLOCK; - return retval; + GtkWidget *clist; + GList *list; + char *retval = NULL; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(!clist) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + /* These should be separate but right now this will work */ + if(flags & DW_CRA_SELECTED) + { + list = GTK_CLIST(clist)->selection; + + if(list) + { + gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", GINT_TO_POINTER(1)); + retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); + } + } + else if(flags & DW_CRA_CURSORED) + { + retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GTK_CLIST(clist)->focus_row); + } + else + { + retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), 0); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", GINT_TO_POINTER(1)); + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -6740,56 +6783,56 @@ */ char *dw_container_query_next(HWND handle, unsigned long flags) { - GtkWidget *clist; - GList *list; - char *retval = NULL; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(!clist) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - /* These should be separate but right now this will work */ - if(flags & DW_CRA_SELECTED) - { - list = GTK_CLIST(clist)->selection; - - if(list) - { - int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_querypos"); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", (gpointer)pos+1); - - while(list && counter < pos) - { - list = list->next; - counter++; - } - - if(list) - retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); - } - } - else if(flags & DW_CRA_CURSORED) - { - /* There will only be one item cursored, - * retrieve it with dw_container_query_start() - */ - retval = NULL; - } - else - { - int pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_querypos"); - - retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), pos); - gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", (gpointer)pos+1); - } - DW_MUTEX_UNLOCK; - return retval; + GtkWidget *clist; + GList *list; + char *retval = NULL; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(!clist) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + /* These should be separate but right now this will work */ + if(flags & DW_CRA_SELECTED) + { + list = GTK_CLIST(clist)->selection; + + if(list) + { + int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_querypos"); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", GINT_TO_POINTER(pos+1)); + + while(list && counter < pos) + { + list = list->next; + counter++; + } + + if(list) + retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); + } + } + else if(flags & DW_CRA_CURSORED) + { + /* There will only be one item cursored, + * retrieve it with dw_container_query_start() + */ + retval = NULL; + } + else + { + int pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_querypos"); + + retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), pos); + gtk_object_set_data(GTK_OBJECT(clist), "_dw_querypos", GINT_TO_POINTER(pos+1)); + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -6800,41 +6843,41 @@ */ void dw_container_cursor(HWND handle, char *text) { - int _locked_by_me = FALSE; - GtkWidget *clist; - int rowcount, z; - char *rowdata; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(!clist) - { - DW_MUTEX_UNLOCK; - return; - } - rowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); - - for(z=0;z<rowcount;z++) - { - rowdata = gtk_clist_get_row_data(GTK_CLIST(clist), z); - if(rowdata == text) - { - gfloat pos; - GtkAdjustment *adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); - - _dw_unselect(clist); - - gtk_clist_select_row(GTK_CLIST(clist), z, 0); - - pos = ((adj->upper - adj->lower) * ((gfloat)z/(gfloat)rowcount)) + adj->lower; - gtk_adjustment_set_value(adj, pos); - DW_MUTEX_UNLOCK; - return; - } - } - - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GtkWidget *clist; + int rowcount, z; + char *rowdata; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(!clist) + { + DW_MUTEX_UNLOCK; + return; + } + rowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); + + for(z=0;z<rowcount;z++) + { + rowdata = gtk_clist_get_row_data(GTK_CLIST(clist), z); + if(rowdata == text) + { + gfloat pos; + GtkAdjustment *adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); + + _dw_unselect(clist); + + gtk_clist_select_row(GTK_CLIST(clist), z, 0); + + pos = ((adj->upper - adj->lower) * ((gfloat)z/(gfloat)rowcount)) + adj->lower; + gtk_adjustment_set_value(adj, pos); + DW_MUTEX_UNLOCK; + return; + } + } + + DW_MUTEX_UNLOCK; } /* @@ -6845,39 +6888,39 @@ */ void dw_container_delete_row(HWND handle, char *text) { - int _locked_by_me = FALSE; - GtkWidget *clist; - int rowcount, z; - char *rowdata; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(!clist) - { - DW_MUTEX_UNLOCK; - return; - } - rowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); - - for(z=0;z<rowcount;z++) - { - rowdata = gtk_clist_get_row_data(GTK_CLIST(clist), z); - if(rowdata == text) - { - _dw_unselect(clist); - - gtk_clist_remove(GTK_CLIST(clist), z); - - rowcount--; - - gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", (gpointer)rowcount); - DW_MUTEX_UNLOCK; - return; - } - } - - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GtkWidget *clist; + int rowcount, z; + char *rowdata; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(!clist) + { + DW_MUTEX_UNLOCK; + return; + } + rowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_rowcount"); + + for(z=0;z<rowcount;z++) + { + rowdata = gtk_clist_get_row_data(GTK_CLIST(clist), z); + if(rowdata == text) + { + _dw_unselect(clist); + + gtk_clist_remove(GTK_CLIST(clist), z); + + rowcount--; + + gtk_object_set_data(GTK_OBJECT(clist), "_dw_rowcount", GINT_TO_POINTER(rowcount)); + DW_MUTEX_UNLOCK; + return; + } + } + + DW_MUTEX_UNLOCK; } /* @@ -6887,25 +6930,25 @@ */ void dw_container_optimize(HWND handle) { - int _locked_by_me = FALSE; - GtkWidget *clist; - int colcount, z; - - DW_MUTEX_LOCK; - clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); - - if(!clist) - { - DW_MUTEX_UNLOCK; - return; - } - colcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_colcount"); - for(z=0;z<colcount;z++) - { - int width = gtk_clist_optimal_column_width(GTK_CLIST(clist), z); - gtk_clist_set_column_width(GTK_CLIST(clist), z, width); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GtkWidget *clist; + int colcount, z; + + DW_MUTEX_LOCK; + clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); + + if(!clist) + { + DW_MUTEX_UNLOCK; + return; + } + colcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "_dw_colcount"); + for(z=0;z<colcount;z++) + { + int width = gtk_clist_optimal_column_width(GTK_CLIST(clist), z); + gtk_clist_set_column_width(GTK_CLIST(clist), z, width); + } + DW_MUTEX_UNLOCK; } /* @@ -6917,7 +6960,7 @@ */ void dw_taskbar_insert(HWND handle, unsigned long icon, char *bubbletext) { - /* TODO */ + /* TODO */ } /* @@ -6928,7 +6971,7 @@ */ void dw_taskbar_delete(HWND handle, unsigned long icon) { - /* TODO */ + /* TODO */ } /* @@ -6940,35 +6983,35 @@ */ HWND dw_render_new(unsigned long id) { - int _locked_by_me = FALSE; - GtkWidget *tmp; - - DW_MUTEX_LOCK; - tmp = gtk_drawing_area_new(); - gtk_widget_set_events(tmp, GDK_EXPOSURE_MASK - | GDK_LEAVE_NOTIFY_MASK - | GDK_BUTTON_PRESS_MASK - | GDK_KEY_PRESS_MASK - | GDK_POINTER_MOTION_MASK - | GDK_POINTER_MOTION_HINT_MASK); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - GTK_WIDGET_SET_FLAGS(tmp, GTK_CAN_FOCUS); - gtk_widget_show(tmp); - DW_MUTEX_UNLOCK; - return tmp; + int _locked_by_me = FALSE; + GtkWidget *tmp; + + DW_MUTEX_LOCK; + tmp = gtk_drawing_area_new(); + gtk_widget_set_events(tmp, GDK_EXPOSURE_MASK + | GDK_LEAVE_NOTIFY_MASK + | GDK_BUTTON_PRESS_MASK + | GDK_KEY_PRESS_MASK + | GDK_POINTER_MOTION_MASK + | GDK_POINTER_MOTION_HINT_MASK); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + GTK_WIDGET_SET_FLAGS(tmp, GTK_CAN_FOCUS); + gtk_widget_show(tmp); + DW_MUTEX_UNLOCK; + return tmp; } /* Returns a GdkColor from a DW color */ static GdkColor _internal_color(unsigned long value) { - if(DW_RGB_COLOR & value) - { - GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 }; - return color; - } - if (value < 16) - return _colors[value]; - return _colors[0]; + if(DW_RGB_COLOR & value) + { + GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 }; + return color; + } + if (value < 16) + return _colors[value]; + return _colors[0]; } /* Sets the current foreground drawing color. @@ -6979,13 +7022,13 @@ */ void dw_color_foreground_set(unsigned long value) { - int _locked_by_me = FALSE, index = _find_thread_index(dw_thread_id()); - GdkColor color = _internal_color(value); - - DW_MUTEX_LOCK; - gdk_color_alloc(_dw_cmap, &color); - _foreground[index] = color; - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE, index = _find_thread_index(dw_thread_id()); + GdkColor color = _internal_color(value); + + DW_MUTEX_LOCK; + gdk_color_alloc(_dw_cmap, &color); + _foreground[index] = color; + DW_MUTEX_UNLOCK; } /* Sets the current background drawing color. @@ -6996,61 +7039,61 @@ */ void dw_color_background_set(unsigned long value) { - int _locked_by_me = FALSE, index = _find_thread_index(dw_thread_id()); - GdkColor color = _internal_color(value); - - DW_MUTEX_LOCK; - gdk_color_alloc(_dw_cmap, &color); - if(value == DW_CLR_DEFAULT) - _transparent[index] = 1; - else - _transparent[index] = 0; - - _background[index] = color; - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE, index = _find_thread_index(dw_thread_id()); + GdkColor color = _internal_color(value); + + DW_MUTEX_LOCK; + gdk_color_alloc(_dw_cmap, &color); + if(value == DW_CLR_DEFAULT) + _transparent[index] = 1; + else + _transparent[index] = 0; + + _background[index] = color; + DW_MUTEX_UNLOCK; } /* Internal function to handle the color OK press */ static gint _gtk_color_ok(GtkWidget *widget, DWDialog *dwwait) { #if GTK_MAJOR_VERSION > 1 - GdkColor color; + GdkColor color; #else - gdouble colors[4]; -#endif - unsigned long dw_color; - GtkColorSelection *colorsel; - - if(!dwwait) - return FALSE; - - colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dwwait->data)->colorsel); -#if GTK_MAJOR_VERSION > 1 - gtk_color_selection_get_current_color(colorsel, &color); + gdouble colors[4]; +#endif + unsigned long dw_color; + GtkColorSelection *colorsel; + + if(!dwwait) + return FALSE; + + colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dwwait->data)->colorsel); +#if GTK_MAJOR_VERSION > 1 + gtk_color_selection_get_current_color(colorsel, &color); #else - gtk_color_selection_get_color(colorsel, colors); -#endif - gtk_widget_destroy(GTK_WIDGET(dwwait->data)); - _dw_color_active = 0; -#if GTK_MAJOR_VERSION > 1 - dw_color = DW_RGB( (color.red & 0xFF), (color.green & 0xFF), (color.blue & 0xFF)); + gtk_color_selection_get_color(colorsel, colors); +#endif + gtk_widget_destroy(GTK_WIDGET(dwwait->data)); + _dw_color_active = 0; +#if GTK_MAJOR_VERSION > 1 + dw_color = DW_RGB( (color.red & 0xFF), (color.green & 0xFF), (color.blue & 0xFF)); #else - dw_color = DW_RGB( (int)(colors[0] * 255), (int)(colors[1] * 255), (int)(colors[2] * 255)); -#endif - dw_dialog_dismiss(dwwait, (void *)dw_color); - return FALSE; + dw_color = DW_RGB( (int)(colors[0] * 255), (int)(colors[1] * 255), (int)(colors[2] * 255)); +#endif + dw_dialog_dismiss(dwwait, (void *)dw_color); + return FALSE; } /* Internal function to handle the color Cancel press */ static gint _gtk_color_cancel(GtkWidget *widget, DWDialog *dwwait) { - if(!dwwait) - return FALSE; - - gtk_widget_destroy(GTK_WIDGET(dwwait->data)); - _dw_color_active = 0; - dw_dialog_dismiss(dwwait, (void *)-1); - return FALSE; + if(!dwwait) + return FALSE; + + gtk_widget_destroy(GTK_WIDGET(dwwait->data)); + _dw_color_active = 0; + dw_dialog_dismiss(dwwait, (void *)-1); + return FALSE; } /* Allows the user to choose a color using the system's color chooser dialog. @@ -7061,76 +7104,76 @@ */ unsigned long API dw_color_choose(unsigned long value) { - GtkWidget *colorw; - int _locked_by_me = FALSE; - DWDialog *dwwait; - GtkColorSelection *colorsel; -#if GTK_MAJOR_VERSION > 1 - GdkColor color = _internal_color(value); + GtkWidget *colorw; + int _locked_by_me = FALSE; + DWDialog *dwwait; + GtkColorSelection *colorsel; +#if GTK_MAJOR_VERSION > 1 + GdkColor color = _internal_color(value); #else - gdouble colors[4]; -#endif - unsigned long dw_color; - - DW_MUTEX_LOCK; - - /* The DW mutex should be sufficient for - * insuring no thread changes this unknowingly. - */ - if(_dw_color_active) - { - DW_MUTEX_UNLOCK; - return value; - } - - _dw_color_active = 1; - - colorw = gtk_color_selection_dialog_new("Select Color"); - - dwwait = dw_dialog_new((void *)colorw); - - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colorw)->ok_button), "clicked", (GtkSignalFunc) _gtk_color_ok, dwwait); - gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colorw)->cancel_button), "clicked", (GtkSignalFunc) _gtk_color_cancel, dwwait); - - colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorw)->colorsel); -#if GTK_MAJOR_VERSION > 1 - gtk_color_selection_set_previous_color(colorsel,&color); - gtk_color_selection_set_current_color(colorsel,&color); - gtk_color_selection_set_has_palette(colorsel,TRUE); + gdouble colors[4]; +#endif + unsigned long dw_color; + + DW_MUTEX_LOCK; + + /* The DW mutex should be sufficient for + * insuring no thread changes this unknowingly. + */ + if(_dw_color_active) + { + DW_MUTEX_UNLOCK; + return value; + } + + _dw_color_active = 1; + + colorw = gtk_color_selection_dialog_new("Select Color"); + + dwwait = dw_dialog_new((void *)colorw); + + gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colorw)->ok_button), "clicked", (GtkSignalFunc) _gtk_color_ok, dwwait); + gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(colorw)->cancel_button), "clicked", (GtkSignalFunc) _gtk_color_cancel, dwwait); + + colorsel = GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(colorw)->colorsel); +#if GTK_MAJOR_VERSION > 1 + gtk_color_selection_set_previous_color(colorsel,&color); + gtk_color_selection_set_current_color(colorsel,&color); + gtk_color_selection_set_has_palette(colorsel,TRUE); #else - colors[0] = ((gdouble)DW_RED_VALUE(value) / (gdouble)255); - colors[1] = ((gdouble)DW_GREEN_VALUE(value) / (gdouble)255); - colors[2] = ((gdouble)DW_BLUE_VALUE(value) / (gdouble)255); - gtk_color_selection_set_color(colorsel, colors); -#endif - - gtk_widget_show(colorw); - - dw_color = (unsigned long)dw_dialog_wait(dwwait); - if ((unsigned long)dw_color == -1) - dw_color = value; - DW_MUTEX_UNLOCK; - return (unsigned long)dw_color; -/* - dw_messagebox("Not implemented", DW_MB_OK|DW_MB_INFORMATION, "This feature not yet supported."); - return value; + colors[0] = ((gdouble)DW_RED_VALUE(value) / (gdouble)255); + colors[1] = ((gdouble)DW_GREEN_VALUE(value) / (gdouble)255); + colors[2] = ((gdouble)DW_BLUE_VALUE(value) / (gdouble)255); + gtk_color_selection_set_color(colorsel, colors); +#endif + + gtk_widget_show(colorw); + + dw_color = (unsigned long)dw_dialog_wait(dwwait); + if ((unsigned long)dw_color == -1) + dw_color = value; + DW_MUTEX_UNLOCK; + return (unsigned long)dw_color; +/* + dw_messagebox("Not implemented", DW_MB_OK|DW_MB_INFORMATION, "This feature not yet supported."); + return value; */ } GdkGC *_set_colors(GdkWindow *window) { - GdkGC *gc = NULL; - int index = _find_thread_index(dw_thread_id()); - - if(!window) - return NULL; - gc = gdk_gc_new(window); - if(gc) - { - gdk_gc_set_foreground(gc, &_foreground[index]); - gdk_gc_set_background(gc, &_background[index]); - } - return gc; + GdkGC *gc = NULL; + int index = _find_thread_index(dw_thread_id()); + + if(!window) + return NULL; + gc = gdk_gc_new(window); + if(gc) + { + gdk_gc_set_foreground(gc, &_foreground[index]); + gdk_gc_set_background(gc, &_background[index]); + } + return gc; } /* Draw a point on a window (preferably a render window). @@ -7142,20 +7185,20 @@ */ void dw_draw_point(HWND handle, HPIXMAP pixmap, int x, int y) { - int _locked_by_me = FALSE; - GdkGC *gc = NULL; - - DW_MUTEX_LOCK; - if(handle) - gc = _set_colors(handle->window); - else if(pixmap) - gc = _set_colors(pixmap->pixmap); - if(gc) - { - gdk_draw_point(handle ? handle->window : pixmap->pixmap, gc, x, y); - gdk_gc_unref(gc); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GdkGC *gc = NULL; + + DW_MUTEX_LOCK; + if(handle) + gc = _set_colors(handle->window); + else if(pixmap) + gc = _set_colors(pixmap->pixmap); + if(gc) + { + gdk_draw_point(handle ? handle->window : pixmap->pixmap, gc, x, y); + gdk_gc_unref(gc); + } + DW_MUTEX_UNLOCK; } /* Draw a line on a window (preferably a render window). @@ -7169,20 +7212,20 @@ */ void dw_draw_line(HWND handle, HPIXMAP pixmap, int x1, int y1, int x2, int y2) { - int _locked_by_me = FALSE; - GdkGC *gc = NULL; - - DW_MUTEX_LOCK; - if(handle) - gc = _set_colors(handle->window); - else if(pixmap) - gc = _set_colors(pixmap->pixmap); - if(gc) - { - gdk_draw_line(handle ? handle->window : pixmap->pixmap, gc, x1, y1, x2, y2); - gdk_gc_unref(gc); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GdkGC *gc = NULL; + + DW_MUTEX_LOCK; + if(handle) + gc = _set_colors(handle->window); + else if(pixmap) + gc = _set_colors(pixmap->pixmap); + if(gc) + { + gdk_draw_line(handle ? handle->window : pixmap->pixmap, gc, x1, y1, x2, y2); + gdk_gc_unref(gc); + } + DW_MUTEX_UNLOCK; } /* Draw a rectangle on a window (preferably a render window). @@ -7196,20 +7239,20 @@ */ void dw_draw_rect(HWND handle, HPIXMAP pixmap, int fill, int x, int y, int width, int height) { - int _locked_by_me = FALSE; - GdkGC *gc = NULL; - - DW_MUTEX_LOCK; - if(handle) - gc = _set_colors(handle->window); - else if(pixmap) - gc = _set_colors(pixmap->pixmap); - if(gc) - { - gdk_draw_rectangle(handle ? handle->window : pixmap->pixmap, gc, fill, x, y, width, height); - gdk_gc_unref(gc); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + GdkGC *gc = NULL; + + DW_MUTEX_LOCK; + if(handle) + gc = _set_colors(handle->window); + else if(pixmap) + gc = _set_colors(pixmap->pixmap); + if(gc) + { + gdk_draw_rectangle(handle ? handle->window : pixmap->pixmap, gc, fill, x, y, width, height); + gdk_gc_unref(gc); + } + DW_MUTEX_UNLOCK; } /* Draw text on a window (preferably a render window). @@ -7222,96 +7265,96 @@ */ void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) { - int _locked_by_me = FALSE; - GdkGC *gc = NULL; -#if GTK_MAJOR_VERSION > 1 - PangoFontDescription *font; + int _locked_by_me = FALSE; + GdkGC *gc = NULL; +#if GTK_MAJOR_VERSION > 1 + PangoFontDescription *font; #else - GdkFont *font; -#endif - char *fontname = "fixed"; - - if(!text) - return; - - DW_MUTEX_LOCK; - if(handle) - { - fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"); - gc = _set_colors(handle->window); - } - else if(pixmap) - { - fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"); - gc = _set_colors(pixmap->pixmap); - } - if(gc) - { -#if GTK_MAJOR_VERSION > 1 - font = pango_font_description_from_string(fontname); - if(font) - { - PangoContext *context = gdk_pango_context_get(); - - if(context) - { - PangoLayout *layout = pango_layout_new(context); - - if(layout) - { - int index = _find_thread_index(dw_thread_id()); - - gdk_pango_context_set_colormap(context, _dw_cmap); - pango_layout_set_font_description(layout, font); - pango_layout_set_text(layout, text, strlen(text)); - - if(_transparent[index]) - gdk_draw_layout(handle ? handle->window : pixmap->pixmap, gc, x, y, layout); - else - gdk_draw_layout_with_colors(handle ? handle->window : pixmap->pixmap, gc, x, y, layout, &_foreground[index], &_background[index]); - - g_object_unref(layout); - } - g_object_unref(context); - } - pango_font_description_free(font); - } + GdkFont *font; +#endif + char *fontname = "fixed"; + + if(!text) + return; + + DW_MUTEX_LOCK; + if(handle) + { + fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"); + gc = _set_colors(handle->window); + } + else if(pixmap) + { + fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"); + gc = _set_colors(pixmap->pixmap); + } + if(gc) + { +#if GTK_MAJOR_VERSION > 1 + font = pango_font_description_from_string(fontname); + if(font) + { + PangoContext *context = gdk_pango_context_get(); + + if(context) + { + PangoLayout *layout = pango_layout_new(context); + + if(layout) + { + int index = _find_thread_index(dw_thread_id()); + + gdk_pango_context_set_colormap(context, _dw_cmap); + pango_layout_set_font_description(layout, font); + pango_layout_set_text(layout, text, strlen(text)); + + if(_transparent[index]) + gdk_draw_layout(handle ? handle->window : pixmap->pixmap, gc, x, y, layout); + else + gdk_draw_layout_with_colors(handle ? handle->window : pixmap->pixmap, gc, x, y, layout, &_foreground[index], &_background[index]); + + g_object_unref(layout); + } + g_object_unref(context); + } + pango_font_description_free(font); + } #else - font = gdk_font_load(fontname); - if(!font) - font = gdk_font_load("fixed"); - if(font) - { - gint ascent, descent, width, junk_ascent, junk_descent, junk_width; - int index = _find_thread_index(dw_thread_id()); - - /* gdk_text_extents() calculates ascent and descent based on the string, so - * a string without a character with a descent or without an ascent will have - * incorrect ascent/descent values - */ - gdk_text_extents(font, text, strlen(text), NULL, NULL, &width, &junk_ascent, &junk_descent); - /* force ascent/descent to be maximum values */ - gdk_text_extents(font, "(g", 2, NULL, NULL, &junk_width, &ascent, &descent); - if(!_transparent[index]) - { - GdkGC *gc2 = NULL; - - gc2 = gdk_gc_new(handle ? handle->window : pixmap->pixmap); - if(gc2) - { - gdk_gc_set_foreground(gc2, &_background[index]); - gdk_gc_set_background(gc2, &_background[index]); - } - gdk_draw_rectangle(handle ? handle->window : pixmap->pixmap, gc2, TRUE, x, y, width, ascent + descent + 1); - gdk_gc_unref(gc2); - } - gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent + 1, text, strlen(text)); - gdk_font_unref(font); - } -#endif - gdk_gc_unref(gc); - } - DW_MUTEX_UNLOCK; + font = gdk_font_load(fontname); + if(!font) + font = gdk_font_load("fixed"); + if(font) + { + gint ascent, descent, width, junk_ascent, junk_descent, junk_width; + int index = _find_thread_index(dw_thread_id()); + + /* gdk_text_extents() calculates ascent and descent based on the string, so + * a string without a character with a descent or without an ascent will have + * incorrect ascent/descent values + */ + gdk_text_extents(font, text, strlen(text), NULL, NULL, &width, &junk_ascent, &junk_descent); + /* force ascent/descent to be maximum values */ + gdk_text_extents(font, "(g", 2, NULL, NULL, &junk_width, &ascent, &descent); + if(!_transparent[index]) + { + GdkGC *gc2 = NULL; + + gc2 = gdk_gc_new(handle ? handle->window : pixmap->pixmap); + if(gc2) + { + gdk_gc_set_foreground(gc2, &_background[index]); + gdk_gc_set_background(gc2, &_background[index]); + } + gdk_draw_rectangle(handle ? handle->window : pixmap->pixmap, gc2, TRUE, x, y, width, ascent + descent + 1); + gdk_gc_unref(gc2); + } + gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent + 1, text, strlen(text)); + gdk_font_unref(font); + } +#endif + gdk_gc_unref(gc); + } + DW_MUTEX_UNLOCK; } /* Query the width and height of a text string. @@ -7324,67 +7367,67 @@ */ void dw_font_text_extents_get(HWND handle, HPIXMAP pixmap, char *text, int *width, int *height) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - PangoFontDescription *font; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + PangoFontDescription *font; #else - GdkFont *font; -#endif - char *fontname = NULL; - - if(!text) - return; - - DW_MUTEX_LOCK; - if(handle) - fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"); - else if(pixmap) - fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"); - -#if GTK_MAJOR_VERSION > 1 - font = pango_font_description_from_string(fontname ? fontname : "monospace 10"); - if(font) - { - PangoContext *context = gdk_pango_context_get(); - - if(context) - { - PangoLayout *layout = pango_layout_new(context); - - if(layout) - { - PangoRectangle rect; - - pango_layout_set_font_description(layout, font); - pango_layout_set_text(layout, text, -1); - pango_layout_get_pixel_extents(layout, NULL, &rect); - - if(width) - *width = rect.width; - if(height) - *height = rect.height; - - g_object_unref(layout); - } - g_object_unref(context); - } - pango_font_description_free(font); - } + GdkFont *font; +#endif + char *fontname = NULL; + + if(!text) + return; + + DW_MUTEX_LOCK; + if(handle) + fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"); + else if(pixmap) + fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"); + +#if GTK_MAJOR_VERSION > 1 + font = pango_font_description_from_string(fontname ? fontname : "monospace 10"); + if(font) + { + PangoContext *context = gdk_pango_context_get(); + + if(context) + { + PangoLayout *layout = pango_layout_new(context); + + if(layout) + { + PangoRectangle rect; + + pango_layout_set_font_description(layout, font); + pango_layout_set_text(layout, text, -1); + pango_layout_get_pixel_extents(layout, NULL, &rect); + + if(width) + *width = rect.width; + if(height) + *height = rect.height; + + g_object_unref(layout); + } + g_object_unref(context); + } + pango_font_description_free(font); + } #else - font = gdk_font_load(fontname ? fontname : "fixed"); - if(!font) - font = gdk_font_load("fixed"); - if(font) - { - if(width) - *width = gdk_string_width(font, text); - if(height) - *height = gdk_string_height(font, text); - gdk_font_unref(font); - } -#endif - DW_MUTEX_UNLOCK; + font = gdk_font_load(fontname ? fontname : "fixed"); + if(!font) + font = gdk_font_load("fixed"); + if(font) + { + if(width) + *width = gdk_string_width(font, text); + if(height) + *height = gdk_string_height(font, text); + gdk_font_unref(font); + } +#endif + DW_MUTEX_UNLOCK; } /* @@ -7399,23 +7442,23 @@ */ HPIXMAP dw_pixmap_new(HWND handle, unsigned long width, unsigned long height, int depth) { - int _locked_by_me = FALSE; - HPIXMAP pixmap; - - if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) - return NULL; - - if (!depth) - depth = -1; - - pixmap->width = width; pixmap->height = height; - - - DW_MUTEX_LOCK; - pixmap->handle = handle; - pixmap->pixmap = gdk_pixmap_new(handle->window, width, height, depth); - DW_MUTEX_UNLOCK; - return pixmap; + int _locked_by_me = FALSE; + HPIXMAP pixmap; + + if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) + return NULL; + + if (!depth) + depth = -1; + + pixmap->width = width; pixmap->height = height; + + + DW_MUTEX_LOCK; + pixmap->handle = handle; + pixmap->pixmap = gdk_pixmap_new(handle->window, width, height, depth); + DW_MUTEX_UNLOCK; + return pixmap; } /* @@ -7563,25 +7606,25 @@ */ HPIXMAP dw_pixmap_grab(HWND handle, ULONG id) { - GdkBitmap *bitmap = NULL; - HPIXMAP pixmap; - int _locked_by_me = FALSE; - - if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) - return NULL; - - - DW_MUTEX_LOCK; - pixmap->pixmap = _find_pixmap(&bitmap, id, handle, &pixmap->width, &pixmap->height); - if(pixmap->pixmap) - { + GdkBitmap *bitmap = NULL; + HPIXMAP pixmap; + int _locked_by_me = FALSE; + + if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) + return NULL; + + + DW_MUTEX_LOCK; + pixmap->pixmap = _find_pixmap(&bitmap, id, handle, &pixmap->width, &pixmap->height); + if(pixmap->pixmap) + { #if GTK_MAJOR_VERSION < 2 - GdkPixmapPrivate *pvt = (GdkPixmapPrivate *)pixmap->pixmap; - pixmap->width = pvt->width; pixmap->height = pvt->height; -#endif - } - DW_MUTEX_UNLOCK; - return pixmap; + GdkPixmapPrivate *pvt = (GdkPixmapPrivate *)pixmap->pixmap; + pixmap->width = pvt->width; pixmap->height = pvt->height; +#endif + } + DW_MUTEX_UNLOCK; + return pixmap; } /* Call this after drawing to the screen to make sure @@ -7590,11 +7633,11 @@ void dw_flush(void) { #if GTK_MAJOR_VERSION < 2 - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_flush(); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_flush(); + DW_MUTEX_UNLOCK; #endif } @@ -7606,12 +7649,12 @@ */ void dw_pixmap_destroy(HPIXMAP pixmap) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_pixmap_unref(pixmap->pixmap); - free(pixmap); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_pixmap_unref(pixmap->pixmap); + free(pixmap); + DW_MUTEX_UNLOCK; } /* @@ -7630,33 +7673,33 @@ */ void dw_pixmap_bitblt(HWND dest, HPIXMAP destp, int xdest, int ydest, int width, int height, HWND src, HPIXMAP srcp, int xsrc, int ysrc) { - /* Ok, these #ifdefs are going to get a bit confusing because - * when using gdk-pixbuf, pixmaps are really pixbufs, so we - * have to use the pixbuf functions on them, and thus convoluting - * the code here a bit. -Brian - */ - int _locked_by_me = FALSE; - GdkGC *gc = NULL; - - if((!dest && (!destp || !destp->pixmap)) || (!src && (!srcp || !srcp->pixmap))) - return; - - DW_MUTEX_LOCK; - if(dest) - gc = _set_colors(dest->window); - else if(src) - gc = _set_colors(src->window); - else if(destp) - gc = gdk_gc_new(destp->pixmap); - else if(srcp) - gc = gdk_gc_new(srcp->pixmap); - - if(gc) - { - gdk_draw_pixmap(dest ? dest->window : destp->pixmap, gc, src ? src->window : srcp->pixmap, xsrc, ysrc, xdest, ydest, width, height); - gdk_gc_unref(gc); - } - DW_MUTEX_UNLOCK; + /* Ok, these #ifdefs are going to get a bit confusing because + * when using gdk-pixbuf, pixmaps are really pixbufs, so we + * have to use the pixbuf functions on them, and thus convoluting + * the code here a bit. -Brian + */ + int _locked_by_me = FALSE; + GdkGC *gc = NULL; + + if((!dest && (!destp || !destp->pixmap)) || (!src && (!srcp || !srcp->pixmap))) + return; + + DW_MUTEX_LOCK; + if(dest) + gc = _set_colors(dest->window); + else if(src) + gc = _set_colors(src->window); + else if(destp) + gc = gdk_gc_new(destp->pixmap); + else if(srcp) + gc = gdk_gc_new(srcp->pixmap); + + if(gc) + { + gdk_draw_pixmap(dest ? dest->window : destp->pixmap, gc, src ? src->window : srcp->pixmap, xsrc, ysrc, xdest, ydest, width, height); + gdk_gc_unref(gc); + } + DW_MUTEX_UNLOCK; } /* @@ -7667,22 +7710,22 @@ */ void dw_beep(int freq, int dur) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gdk_beep(); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gdk_beep(); + DW_MUTEX_UNLOCK; } void _my_strlwr(char *buf) { - int z, len = strlen(buf); - - for(z=0;z<len;z++) - { - if(buf[z] >= 'A' && buf[z] <= 'Z') - buf[z] -= 'A' - 'a'; - } + int z, len = strlen(buf); + + for(z=0;z<len;z++) + { + if(buf[z] >= 'A' && buf[z] <= 'Z') + buf[z] -= 'A' - 'a'; + } } /* Open a shared library and return a handle. @@ -7693,38 +7736,38 @@ */ int dw_module_load(char *name, HMOD *handle) { - int len; - char *newname; - char errorbuf[1024]; - - - if(!handle) - return -1; - - if((len = strlen(name)) == 0) - return -1; - - /* Lenth + "lib" + ".so" + NULL */ - newname = malloc(len + 7); - - if(!newname) - return -1; - - sprintf(newname, "lib%s.so", name); - _my_strlwr(newname); - - *handle = dlopen(newname, RTLD_NOW); - if(*handle == NULL) - { - strncpy(errorbuf, dlerror(), 1024); - printf("%s\n", errorbuf); - sprintf(newname, "lib%s.so", name); - *handle = dlopen(newname, RTLD_NOW); - } - - free(newname); - - return (NULL == *handle) ? -1 : 0; + int len; + char *newname; + char errorbuf[1024]; + + + if(!handle) + return -1; + + if((len = strlen(name)) == 0) + return -1; + + /* Lenth + "lib" + ".so" + NULL */ + newname = malloc(len + 7); + + if(!newname) + return -1; + + sprintf(newname, "lib%s.so", name); + _my_strlwr(newname); + + *handle = dlopen(newname, RTLD_NOW); + if(*handle == NULL) + { + strncpy(errorbuf, dlerror(), 1024); + printf("%s\n", errorbuf); + sprintf(newname, "lib%s.so", name); + *handle = dlopen(newname, RTLD_NOW); + } + + free(newname); + + return (NULL == *handle) ? -1 : 0; } /* Queries the address of a symbol within open handle. @@ -7736,14 +7779,14 @@ */ int dw_module_symbol(HMOD handle, char *name, void**func) { - if(!func || !name) - return -1; - - if(strlen(name) == 0) - return -1; - - *func = (void*)dlsym(handle, name); - return (NULL == *func); + if(!func || !name) + return -1; + + if(strlen(name) == 0) + return -1; + + *func = (void*)dlsym(handle, name); + return (NULL == *func); } /* Frees the shared library previously opened. @@ -7752,9 +7795,9 @@ */ int dw_module_close(HMOD handle) { - if(handle) - return dlclose(handle); - return 0; + if(handle) + return dlclose(handle); + return 0; } /* @@ -7762,10 +7805,10 @@ */ HMTX dw_mutex_new(void) { - HMTX mutex = malloc(sizeof(pthread_mutex_t)); - - pthread_mutex_init(mutex, NULL); - return mutex; + HMTX mutex = malloc(sizeof(pthread_mutex_t)); + + pthread_mutex_init(mutex, NULL); + return mutex; } /* @@ -7775,11 +7818,11 @@ */ void dw_mutex_close(HMTX mutex) { - if(mutex) - { - pthread_mutex_destroy(mutex); - free(mutex); - } + if(mutex) + { + pthread_mutex_destroy(mutex); + free(mutex); + } } /* @@ -7789,17 +7832,17 @@ */ void dw_mutex_lock(HMTX mutex) { - /* If we are being called from an event handler we must release - * the GTK mutex so we don't deadlock. - */ - if(pthread_self() == _dw_thread) - gdk_threads_leave(); - - pthread_mutex_lock(mutex); - - /* And of course relock it when we have acquired the mutext */ - if(pthread_self() == _dw_thread) - gdk_threads_enter(); + /* If we are being called from an event handler we must release + * the GTK mutex so we don't deadlock. + */ + if(pthread_self() == _dw_thread) + gdk_threads_leave(); + + pthread_mutex_lock(mutex); + + /* And of course relock it when we have acquired the mutext */ + if(pthread_self() == _dw_thread) + gdk_threads_enter(); } /* @@ -7809,7 +7852,7 @@ */ void dw_mutex_unlock(HMTX mutex) { - pthread_mutex_unlock(mutex); + pthread_mutex_unlock(mutex); } /* @@ -7817,24 +7860,24 @@ */ HEV dw_event_new(void) { - HEV eve = (HEV)malloc(sizeof(struct _dw_unix_event)); - - if(!eve) - return NULL; - - /* We need to be careful here, mutexes on Linux are - * FAST by default but are error checking on other - * systems such as FreeBSD and OS/2, perhaps others. - */ - pthread_mutex_init (&(eve->mutex), NULL); - pthread_mutex_lock (&(eve->mutex)); - pthread_cond_init (&(eve->event), NULL); - - pthread_mutex_unlock (&(eve->mutex)); - eve->alive = 1; - eve->posted = 0; - - return eve; + HEV eve = (HEV)malloc(sizeof(struct _dw_unix_event)); + + if(!eve) + return NULL; + + /* We need to be careful here, mutexes on Linux are + * FAST by default but are error checking on other + * systems such as FreeBSD and OS/2, perhaps others. + */ + pthread_mutex_init (&(eve->mutex), NULL); + pthread_mutex_lock (&(eve->mutex)); + pthread_cond_init (&(eve->event), NULL); + + pthread_mutex_unlock (&(eve->mutex)); + eve->alive = 1; + eve->posted = 0; + + return eve; } /* @@ -7844,15 +7887,15 @@ */ int dw_event_reset (HEV eve) { - if(!eve) - return FALSE; - - pthread_mutex_lock (&(eve->mutex)); - pthread_cond_broadcast (&(eve->event)); - pthread_cond_init (&(eve->event), NULL); - eve->posted = 0; - pthread_mutex_unlock (&(eve->mutex)); - return 0; + if(!eve) + return FALSE; + + pthread_mutex_lock (&(eve->mutex)); + pthread_cond_broadcast (&(eve->event)); + pthread_cond_init (&(eve->event), NULL); + eve->posted = 0; + pthread_mutex_unlock (&(eve->mutex)); + return 0; } /* @@ -7863,14 +7906,14 @@ */ int dw_event_post (HEV eve) { - if(!eve) - return FALSE; - - pthread_mutex_lock (&(eve->mutex)); - pthread_cond_broadcast (&(eve->event)); - eve->posted = 1; - pthread_mutex_unlock (&(eve->mutex)); - return 0; + if(!eve) + return FALSE; + + pthread_mutex_lock (&(eve->mutex)); + pthread_cond_broadcast (&(eve->event)); + eve->posted = 1; + pthread_mutex_unlock (&(eve->mutex)); + return 0; } /* @@ -7881,27 +7924,27 @@ */ int dw_event_wait(HEV eve, unsigned long timeout) { - int rc; - struct timeval now; - struct timespec timeo; - - if(!eve) - return FALSE; - - if(eve->posted) - return 0; - - pthread_mutex_lock (&(eve->mutex)); - gettimeofday(&now, 0); - timeo.tv_sec = now.tv_sec + (timeout / 1000); - timeo.tv_nsec = now.tv_usec * 1000; - rc = pthread_cond_timedwait (&(eve->event), &(eve->mutex), &timeo); - pthread_mutex_unlock (&(eve->mutex)); - if(!rc) - return 1; - if(rc == ETIMEDOUT) - return -1; - return 0; + int rc; + struct timeval now; + struct timespec timeo; + + if(!eve) + return FALSE; + + if(eve->posted) + return 0; + + pthread_mutex_lock (&(eve->mutex)); + gettimeofday(&now, 0); + timeo.tv_sec = now.tv_sec + (timeout / 1000); + timeo.tv_nsec = now.tv_usec * 1000; + rc = pthread_cond_timedwait (&(eve->event), &(eve->mutex), &timeo); + pthread_mutex_unlock (&(eve->mutex)); + if(!rc) + return 1; + if(rc == ETIMEDOUT) + return -1; + return 0; } /* @@ -7911,168 +7954,168 @@ */ int dw_event_close(HEV *eve) { - if(!eve || !(*eve)) - return FALSE; - - pthread_mutex_lock (&((*eve)->mutex)); - pthread_cond_destroy (&((*eve)->event)); - pthread_mutex_unlock (&((*eve)->mutex)); - pthread_mutex_destroy (&((*eve)->mutex)); - free(*eve); - *eve = NULL; - - return TRUE; + if(!eve || !(*eve)) + return FALSE; + + pthread_mutex_lock (&((*eve)->mutex)); + pthread_cond_destroy (&((*eve)->event)); + pthread_mutex_unlock (&((*eve)->mutex)); + pthread_mutex_destroy (&((*eve)->mutex)); + free(*eve); + *eve = NULL; + + return TRUE; } struct _seminfo { - int fd; - int waiting; + int fd; + int waiting; }; static void _handle_sem(int *tmpsock) { - fd_set rd; - struct _seminfo *array = (struct _seminfo *)malloc(sizeof(struct _seminfo)); - int listenfd = tmpsock[0]; - int bytesread, connectcount = 1, maxfd, z, posted = 0; - char command; - sigset_t mask; - - sigfillset(&mask); /* Mask all allowed signals */ - pthread_sigmask(SIG_BLOCK, &mask, NULL); - - /* problems */ - if(tmpsock[1] == -1) - { - free(array); - return; - } - - array[0].fd = tmpsock[1]; - array[0].waiting = 0; - - /* Free the memory allocated in dw_named_event_new. */ - free(tmpsock); - - while(1) - { - FD_ZERO(&rd); - FD_SET(listenfd, &rd); - - maxfd = listenfd; - - /* Added any connections to the named event semaphore */ - for(z=0;z<connectcount;z++) - { - if(array[z].fd > maxfd) - maxfd = array[z].fd; - - FD_SET(array[z].fd, &rd); - } - - if(select(maxfd+1, &rd, NULL, NULL, NULL) == -1) - return; - - if(FD_ISSET(listenfd, &rd)) - { - struct _seminfo *newarray; + fd_set rd; + struct _seminfo *array = (struct _seminfo *)malloc(sizeof(struct _seminfo)); + int listenfd = tmpsock[0]; + int bytesread, connectcount = 1, maxfd, z, posted = 0; + char command; + sigset_t mask; + + sigfillset(&mask); /* Mask all allowed signals */ + pthread_sigmask(SIG_BLOCK, &mask, NULL); + + /* problems */ + if(tmpsock[1] == -1) + { + free(array); + return; + } + + array[0].fd = tmpsock[1]; + array[0].waiting = 0; + + /* Free the memory allocated in dw_named_event_new. */ + free(tmpsock); + + while(1) + { + FD_ZERO(&rd); + FD_SET(listenfd, &rd); + + maxfd = listenfd; + + /* Added any connections to the named event semaphore */ + for(z=0;z<connectcount;z++) + { + if(array[z].fd > maxfd) + maxfd = array[z].fd; + + FD_SET(array[z].fd, &rd); + } + + if(select(maxfd+1, &rd, NULL, NULL, NULL) == -1) + return; + + if(FD_ISSET(listenfd, &rd)) + { + struct _seminfo *newarray; int newfd = accept(listenfd, 0, 0); - if(newfd > -1) - { - /* Add new connections to the set */ - newarray = (struct _seminfo *)malloc(sizeof(struct _seminfo)*(connectcount+1)); - memcpy(newarray, array, sizeof(struct _seminfo)*(connectcount)); - - newarray[connectcount].fd = newfd; - newarray[connectcount].waiting = 0; - - connectcount++; - - /* Replace old array with new one */ - free(array); - array = newarray; - } - } - - /* Handle any events posted to the semaphore */ - for(z=0;z<connectcount;z++) - { - if(FD_ISSET(array[z].fd, &rd)) - { - if((bytesread = read(array[z].fd, &command, 1)) < 1) - { - struct _seminfo *newarray; - - /* Remove this connection from the set */ - newarray = (struct _seminfo *)malloc(sizeof(struct _seminfo)*(connectcount-1)); - if(!z) - memcpy(newarray, &array[1], sizeof(struct _seminfo)*(connectcount-1)); - else - { - memcpy(newarray, array, sizeof(struct _seminfo)*z); - if(z!=(connectcount-1)) - memcpy(&newarray[z], &array[z+1], sizeof(struct _seminfo)*(z-connectcount-1)); - } - connectcount--; - - /* Replace old array with new one */ - free(array); - array = newarray; - } - else if(bytesread == 1) - { - switch(command) - { - case 0: - { - /* Reset */ - posted = 0; - } - break; - case 1: - /* Post */ - { - int s; - char tmp = (char)0; - - posted = 1; - - for(s=0;s<connectcount;s++) - { - /* The semaphore has been posted so - * we tell all the waiting threads to - * continue. - */ - if(array[s].waiting) - write(array[s].fd, &tmp, 1); - } - } - break; - case 2: - /* Wait */ - { - char tmp = (char)0; - - array[z].waiting = 1; - - /* If we are posted exit immeditately */ - if(posted) - write(array[z].fd, &tmp, 1); - } - break; - case 3: - { - /* Done Waiting */ - array[z].waiting = 0; - } - break; - } - } - } - } - - } + if(newfd > -1) + { + /* Add new connections to the set */ + newarray = (struct _seminfo *)malloc(sizeof(struct _seminfo)*(connectcount+1)); + memcpy(newarray, array, sizeof(struct _seminfo)*(connectcount)); + + newarray[connectcount].fd = newfd; + newarray[connectcount].waiting = 0; + + connectcount++; + + /* Replace old array with new one */ + free(array); + array = newarray; + } + } + + /* Handle any events posted to the semaphore */ + for(z=0;z<connectcount;z++) + { + if(FD_ISSET(array[z].fd, &rd)) + { + if((bytesread = read(array[z].fd, &command, 1)) < 1) + { + struct _seminfo *newarray; + + /* Remove this connection from the set */ + newarray = (struct _seminfo *)malloc(sizeof(struct _seminfo)*(connectcount-1)); + if(!z) + memcpy(newarray, &array[1], sizeof(struct _seminfo)*(connectcount-1)); + else + { + memcpy(newarray, array, sizeof(struct _seminfo)*z); + if(z!=(connectcount-1)) + memcpy(&newarray[z], &array[z+1], sizeof(struct _seminfo)*(z-connectcount-1)); + } + connectcount--; + + /* Replace old array with new one */ + free(array); + array = newarray; + } + else if(bytesread == 1) + { + switch(command) + { + case 0: + { + /* Reset */ + posted = 0; + } + break; + case 1: + /* Post */ + { + int s; + char tmp = (char)0; + + posted = 1; + + for(s=0;s<connectcount;s++) + { + /* The semaphore has been posted so + * we tell all the waiting threads to + * continue. + */ + if(array[s].waiting) + write(array[s].fd, &tmp, 1); + } + } + break; + case 2: + /* Wait */ + { + char tmp = (char)0; + + array[z].waiting = 1; + + /* If we are posted exit immeditately */ + if(posted) + write(array[z].fd, &tmp, 1); + } + break; + case 3: + { + /* Done Waiting */ + array[z].waiting = 0; + } + break; + } + } + } + } + + } } @@ -8086,46 +8129,46 @@ */ HEV dw_named_event_new(char *name) { - struct sockaddr_un un; - int ev, *tmpsock = (int *)malloc(sizeof(int)*2); - DWTID dwthread; - - if(!tmpsock) - return NULL; - - tmpsock[0] = socket(AF_UNIX, SOCK_STREAM, 0); - ev = socket(AF_UNIX, SOCK_STREAM, 0); - memset(&un, 0, sizeof(un)); - un.sun_family=AF_UNIX; - mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); - strcpy(un.sun_path, "/tmp/.dw/"); - strcat(un.sun_path, name); - - /* just to be safe, this should be changed - * to support multiple instances. - */ - remove(un.sun_path); - - bind(tmpsock[0], (struct sockaddr *)&un, sizeof(un)); - listen(tmpsock[0], 0); - connect(ev, (struct sockaddr *)&un, sizeof(un)); - tmpsock[1] = accept(tmpsock[0], 0, 0); - - if(tmpsock[0] < 0 || tmpsock[1] < 0 || ev < 0) - { - if(tmpsock[0] > -1) - close(tmpsock[0]); - if(tmpsock[1] > -1) - close(tmpsock[1]); - if(ev > -1) - close(ev); - free(tmpsock); - return NULL; - } - - /* Create a thread to handle this event semaphore */ - pthread_create(&dwthread, NULL, (void *)_handle_sem, (void *)tmpsock); - return (HEV)ev; + struct sockaddr_un un; + int ev, *tmpsock = (int *)malloc(sizeof(int)*2); + DWTID dwthread; + + if(!tmpsock) + return NULL; + + tmpsock[0] = socket(AF_UNIX, SOCK_STREAM, 0); + ev = socket(AF_UNIX, SOCK_STREAM, 0); + memset(&un, 0, sizeof(un)); + un.sun_family=AF_UNIX; + mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); + strcpy(un.sun_path, "/tmp/.dw/"); + strcat(un.sun_path, name); + + /* just to be safe, this should be changed + * to support multiple instances. + */ + remove(un.sun_path); + + bind(tmpsock[0], (struct sockaddr *)&un, sizeof(un)); + listen(tmpsock[0], 0); + connect(ev, (struct sockaddr *)&un, sizeof(un)); + tmpsock[1] = accept(tmpsock[0], 0, 0); + + if(tmpsock[0] < 0 || tmpsock[1] < 0 || ev < 0) + { + if(tmpsock[0] > -1) + close(tmpsock[0]); + if(tmpsock[1] > -1) + close(tmpsock[1]); + if(ev > -1) + close(ev); + free(tmpsock); + return NULL; + } + + /* Create a thread to handle this event semaphore */ + pthread_create(&dwthread, NULL, (void *)_handle_sem, (void *)tmpsock); + return (HEV)ev; } /* Open an already existing named event semaphore. @@ -8136,17 +8179,17 @@ */ HEV dw_named_event_get(char *name) { - struct sockaddr_un un; - int ev = socket(AF_UNIX, SOCK_STREAM, 0); - if(ev < 0) - return NULL; - - un.sun_family=AF_UNIX; - mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); - strcpy(un.sun_path, "/tmp/.dw/"); - strcat(un.sun_path, name); - connect(ev, (struct sockaddr *)&un, sizeof(un)); - return (HEV)ev; + struct sockaddr_un un; + int ev = socket(AF_UNIX, SOCK_STREAM, 0); + if(ev < 0) + return NULL; + + un.sun_family=AF_UNIX; + mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); + strcpy(un.sun_path, "/tmp/.dw/"); + strcat(un.sun_path, name); + connect(ev, (struct sockaddr *)&un, sizeof(un)); + return (HEV)ev; } /* Resets the event semaphore so threads who call wait @@ -8157,15 +8200,15 @@ */ int dw_named_event_reset(HEV eve) { - /* signal reset */ - char tmp = (char)0; - - if((int)eve < 0) - return 0; - - if(write((int)eve, &tmp, 1) == 1) - return 0; - return 1; + /* signal reset */ + char tmp = (char)0; + + if((int)eve < 0) + return 0; + + if(write((int)eve, &tmp, 1) == 1) + return 0; + return 1; } /* Sets the posted state of an event semaphore, any threads @@ -8177,15 +8220,15 @@ int dw_named_event_post(HEV eve) { - /* signal post */ - char tmp = (char)1; - - if((int)eve < 0) - return 0; - - if(write((int)eve, &tmp, 1) == 1) - return 0; - return 1; + /* signal post */ + char tmp = (char)1; + + if((int)eve < 0) + return 0; + + if(write((int)eve, &tmp, 1) == 1) + return 0; + return 1; } /* Waits on the specified semaphore until it becomes @@ -8198,48 +8241,48 @@ */ int dw_named_event_wait(HEV eve, unsigned long timeout) { - fd_set rd; - struct timeval tv, *useme; - int retval = 0; - char tmp; - - if((int)eve < 0) - return DW_ERROR_NON_INIT; - - /* Set the timout or infinite */ - if(timeout == -1) - useme = NULL; - else - { - tv.tv_sec = timeout / 1000; - tv.tv_usec = timeout % 1000; - - useme = &tv; - } - - FD_ZERO(&rd); - FD_SET((int)eve, &rd); - - /* Signal wait */ - tmp = (char)2; - write((int)eve, &tmp, 1); - - retval = select((int)eve+1, &rd, NULL, NULL, useme); - - /* Signal done waiting. */ - tmp = (char)3; - write((int)eve, &tmp, 1); - - if(retval == 0) - return DW_ERROR_TIMEOUT; - else if(retval == -1) - return DW_ERROR_INTERRUPT; - - /* Clear the entry from the pipe so - * we don't loop endlessly. :) - */ - read((int)eve, &tmp, 1); - return 0; + fd_set rd; + struct timeval tv, *useme; + int retval = 0; + char tmp; + + if((int)eve < 0) + return DW_ERROR_NON_INIT; + + /* Set the timout or infinite */ + if(timeout == -1) + useme = NULL; + else + { + tv.tv_sec = timeout / 1000; + tv.tv_usec = timeout % 1000; + + useme = &tv; + } + + FD_ZERO(&rd); + FD_SET((int)eve, &rd); + + /* Signal wait */ + tmp = (char)2; + write((int)eve, &tmp, 1); + + retval = select((int)eve+1, &rd, NULL, NULL, useme); + + /* Signal done waiting. */ + tmp = (char)3; + write((int)eve, &tmp, 1); + + if(retval == 0) + return DW_ERROR_TIMEOUT; + else if(retval == -1) + return DW_ERROR_INTERRUPT; + + /* Clear the entry from the pipe so + * we don't loop endlessly. :) + */ + read((int)eve, &tmp, 1); + return 0; } /* Release this semaphore, if there are no more open @@ -8250,11 +8293,11 @@ */ int dw_named_event_close(HEV eve) { - /* Finally close the domain socket, - * cleanup will continue in _handle_sem. - */ - close((int)eve); - return 0; + /* Finally close the domain socket, + * cleanup will continue in _handle_sem. + */ + close((int)eve); + return 0; } /* @@ -8262,15 +8305,15 @@ */ void _dwthreadstart(void *data) { - void (*threadfunc)(void *) = NULL; - void **tmp = (void **)data; - - threadfunc = (void (*)(void *))tmp[0]; - - _dw_thread_add(dw_thread_id()); - threadfunc(tmp[1]); - _dw_thread_remove(dw_thread_id()); - free(tmp); + void (*threadfunc)(void *) = NULL; + void **tmp = (void **)data; + + threadfunc = (void (*)(void *))tmp[0]; + + _dw_thread_add(dw_thread_id()); + threadfunc(tmp[1]); + _dw_thread_remove(dw_thread_id()); + free(tmp); } /* @@ -8283,36 +8326,36 @@ */ HSHM dw_named_memory_new(void **dest, int size, char *name) { - char namebuf[1024]; - struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); - - mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); - sprintf(namebuf, "/tmp/.dw/%s", name); - - if((handle->fd = open(namebuf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) - { - free(handle); - return NULL; - } - - ftruncate(handle->fd, size); - - /* attach the shared memory segment to our process's address space. */ - *dest = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, 0); - - if(*dest == MAP_FAILED) - { - close(handle->fd); - *dest = NULL; - free(handle); - return NULL; - } - - handle->size = size; - handle->sid = getsid(0); - handle->path = strdup(namebuf); - - return handle; + char namebuf[1024]; + struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); + + mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); + sprintf(namebuf, "/tmp/.dw/%s", name); + + if((handle->fd = open(namebuf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) + { + free(handle); + return NULL; + } + + ftruncate(handle->fd, size); + + /* attach the shared memory segment to our process's address space. */ + *dest = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, 0); + + if(*dest == MAP_FAILED) + { + close(handle->fd); + *dest = NULL; + free(handle); + return NULL; + } + + handle->size = size; + handle->sid = getsid(0); + handle->path = strdup(namebuf); + + return handle; } /* @@ -8324,34 +8367,34 @@ */ HSHM dw_named_memory_get(void **dest, int size, char *name) { - char namebuf[1024]; - struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); - - mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); - sprintf(namebuf, "/tmp/.dw/%s", name); - - if((handle->fd = open(namebuf, O_RDWR)) < 0) - { - free(handle); - return NULL; - } - - /* attach the shared memory segment to our process's address space. */ - *dest = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, 0); - - if(*dest == MAP_FAILED) - { - close(handle->fd); - *dest = NULL; - free(handle); - return NULL; - } - - handle->size = size; - handle->sid = -1; - handle->path = NULL; - - return handle; + char namebuf[1024]; + struct _dw_unix_shm *handle = malloc(sizeof(struct _dw_unix_shm)); + + mkdir("/tmp/.dw", S_IWGRP|S_IWOTH); + sprintf(namebuf, "/tmp/.dw/%s", name); + + if((handle->fd = open(namebuf, O_RDWR)) < 0) + { + free(handle); + return NULL; + } + + /* attach the shared memory segment to our process's address space. */ + *dest = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, 0); + + if(*dest == MAP_FAILED) + { + close(handle->fd); + *dest = NULL; + free(handle); + return NULL; + } + + handle->size = size; + handle->sid = -1; + handle->path = NULL; + + return handle; } /* @@ -8362,20 +8405,20 @@ */ int dw_named_memory_free(HSHM handle, void *ptr) { - struct _dw_unix_shm *h = handle; - int rc = munmap(ptr, h->size); - - close(h->fd); - if(h->path) - { - /* Only remove the actual file if we are the - * creator of the file. - */ - if(h->sid != -1 && h->sid == getsid(0)) - remove(h->path); - free(h->path); - } - return rc; + struct _dw_unix_shm *h = handle; + int rc = munmap(ptr, h->size); + + close(h->fd); + if(h->path) + { + /* Only remove the actual file if we are the + * creator of the file. + */ + if(h->sid != -1 && h->sid == getsid(0)) + remove(h->path); + free(h->path); + } + return rc; } /* * Creates a new thread with a starting point of func. @@ -8386,14 +8429,14 @@ */ DWTID dw_thread_new(void *func, void *data, int stack) { - DWTID gtkthread; - void **tmp = malloc(sizeof(void *) * 2); - - tmp[0] = func; - tmp[1] = data; - - pthread_create(>kthread, NULL, (void *)_dwthreadstart, (void *)tmp); - return gtkthread; + DWTID gtkthread; + void **tmp = malloc(sizeof(void *) * 2); + + tmp[0] = func; + tmp[1] = data; + + pthread_create(>kthread, NULL, (void *)_dwthreadstart, (void *)tmp); + return gtkthread; } /* @@ -8401,7 +8444,7 @@ */ void dw_thread_end(void) { - pthread_exit(NULL); + pthread_exit(NULL); } /* @@ -8409,7 +8452,7 @@ */ DWTID dw_thread_id(void) { - return (DWTID)pthread_self(); + return (DWTID)pthread_self(); } /* @@ -8419,7 +8462,7 @@ */ void dw_exit(int exitcode) { - exit(exitcode); + exit(exitcode); } #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL) @@ -8437,134 +8480,134 @@ */ void dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { - int warn = FALSE, _locked_by_me = FALSE; - GtkWidget *tmp, *tmpitem; - - if(!box) - return; - - /* - * If you try and pack an item into itself VERY bad things can happen; like at least an - * infinite loop on GTK! Lets be safe! - */ - if(box == item) - { - dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); - return; - } - - DW_MUTEX_LOCK; - - if((tmp = gtk_object_get_data(GTK_OBJECT(box), "_dw_boxhandle"))) - box = tmp; - - if(!item) - { - item = gtk_label_new(""); - gtk_widget_show_all(item); - } - - tmpitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxhandle"); - - if(GTK_IS_TABLE(box)) - { - int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxcount"); - int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxtype"); - - /* If the item being packed is a box, then we use it's padding - * instead of the padding specified on the pack line, this is - * due to a bug in the OS/2 and Win32 renderer and a limitation - * of the GtkTable class. - */ - if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) - { - GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); - - /* NOTE: I left in the ability to pack boxes with a size, - * this eliminates that by forcing the size to 0. - */ - height = width = 0; - - if(eventbox) - { - int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); - gtk_container_add(GTK_CONTAINER(eventbox), item); - gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); - item = eventbox; - } - } - else - { - /* Only show warning if item is not a box */ - warn = TRUE; - } - - if(boxtype == DW_VERT) - gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1); - else - gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); - - gtk_table_attach(GTK_TABLE(box), item, 0, 1, 0, 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); - gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", (gpointer)boxcount + 1); - gtk_widget_set_usize(item, width, height); - if(GTK_IS_RADIO_BUTTON(item)) - { - GSList *group; - GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "_dw_group"); - - if(groupstart) - { - group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); - gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); - } - else - gtk_object_set_data(GTK_OBJECT(box), "_dw_group", (gpointer)item); - } - } - else - { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); - - if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) - { - GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); - - /* NOTE: I left in the ability to pack boxes with a size, - * this eliminates that by forcing the size to 0. - */ - height = width = 0; - - if(eventbox) - { - int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); - gtk_container_add(GTK_CONTAINER(eventbox), item); - gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); - item = eventbox; - } - } - else - { - /* Only show warning if item is not a box */ - warn = TRUE; - } - - gtk_container_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); - gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); - - gtk_widget_set_usize(item, width, height); - gtk_object_set_user_data(GTK_OBJECT(box), vbox); - } - DW_MUTEX_UNLOCK; - - if(warn) - { - if ( width == 0 && hsize == FALSE ) - dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); - if ( height == 0 && vsize == FALSE ) - dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); - } + int warn = FALSE, _locked_by_me = FALSE; + GtkWidget *tmp, *tmpitem; + + if(!box) + return; + + /* + * If you try and pack an item into itself VERY bad things can happen; like at least an + * infinite loop on GTK! Lets be safe! + */ + if(box == item) + { + dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); + return; + } + + DW_MUTEX_LOCK; + + if((tmp = gtk_object_get_data(GTK_OBJECT(box), "_dw_boxhandle"))) + box = tmp; + + if(!item) + { + item = gtk_label_new(""); + gtk_widget_show_all(item); + } + + tmpitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxhandle"); + + if(GTK_IS_TABLE(box)) + { + int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxcount"); + int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxtype"); + + /* If the item being packed is a box, then we use it's padding + * instead of the padding specified on the pack line, this is + * due to a bug in the OS/2 and Win32 renderer and a limitation + * of the GtkTable class. + */ + if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) + { + GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); + + /* NOTE: I left in the ability to pack boxes with a size, + * this eliminates that by forcing the size to 0. + */ + height = width = 0; + + if(eventbox) + { + int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); + gtk_container_add(GTK_CONTAINER(eventbox), item); + gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); + item = eventbox; + } + } + else + { + /* Only show warning if item is not a box */ + warn = TRUE; + } + + if(boxtype == DW_VERT) + gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1); + else + gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); + + gtk_table_attach(GTK_TABLE(box), item, 0, 1, 0, 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); + gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); + gtk_widget_set_usize(item, width, height); + if(GTK_IS_RADIO_BUTTON(item)) + { + GSList *group; + GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "_dw_group"); + + if(groupstart) + { + group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); + gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); + } + else + gtk_object_set_data(GTK_OBJECT(box), "_dw_group", (gpointer)item); + } + } + else + { + GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + + if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) + { + GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); + + /* NOTE: I left in the ability to pack boxes with a size, + * this eliminates that by forcing the size to 0. + */ + height = width = 0; + + if(eventbox) + { + int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); + gtk_container_add(GTK_CONTAINER(eventbox), item); + gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); + item = eventbox; + } + } + else + { + /* Only show warning if item is not a box */ + warn = TRUE; + } + + gtk_container_border_width(GTK_CONTAINER(box), pad); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + gtk_widget_set_usize(item, width, height); + gtk_object_set_user_data(GTK_OBJECT(box), vbox); + } + DW_MUTEX_UNLOCK; + + if(warn) + { + if ( width == 0 && hsize == FALSE ) + dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); + if ( height == 0 && vsize == FALSE ) + dw_messagebox("dw_box_pack_end()", DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); + } } /* @@ -8596,8 +8639,8 @@ gtk_window_set_default_size(GTK_WINDOW(handle), default_width , default_height ); if(!gtk_object_get_data(GTK_OBJECT(handle), "_dw_size")) { - gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", (gpointer)default_width ); - gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", (gpointer)default_height ); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_width", GINT_TO_POINTER(default_width) ); + gtk_object_set_data(GTK_OBJECT(handle), "_dw_height", GINT_TO_POINTER(default_height) ); } } else @@ -8610,13 +8653,13 @@ */ int dw_screen_width(void) { - int retval; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - retval = gdk_screen_width(); - DW_MUTEX_UNLOCK; - return retval; + int retval; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + retval = gdk_screen_width(); + DW_MUTEX_UNLOCK; + return retval; } /* @@ -8624,27 +8667,27 @@ */ int dw_screen_height(void) { - int retval; - int _locked_by_me = FALSE; - - DW_MUTEX_UNLOCK; - retval = gdk_screen_height(); - DW_MUTEX_UNLOCK; - return retval; + int retval; + int _locked_by_me = FALSE; + + DW_MUTEX_UNLOCK; + retval = gdk_screen_height(); + DW_MUTEX_UNLOCK; + return retval; } /* This should return the current color depth */ unsigned long dw_color_depth_get(void) { - int retval; - GdkVisual *vis; - int _locked_by_me = FALSE; - - DW_MUTEX_UNLOCK; - vis = gdk_visual_get_system(); - retval = vis->depth; - DW_MUTEX_UNLOCK; - return retval; + int retval; + GdkVisual *vis; + int _locked_by_me = FALSE; + + DW_MUTEX_UNLOCK; + vis = gdk_visual_get_system(); + retval = vis->depth; + DW_MUTEX_UNLOCK; + return retval; } /* @@ -8656,24 +8699,24 @@ */ void dw_window_set_pos(HWND handle, unsigned long x, unsigned long y) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi; -#endif - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_move(GTK_MDI(mdi), handle, x, y); - } - else -#endif - { - if(handle && handle->window) - gdk_window_move(handle->window, x, y); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi; +#endif + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_move(GTK_MDI(mdi), handle, x, y); + } + else +#endif + { + if(handle && handle->window) + gdk_window_move(handle->window, x, y); + } + DW_MUTEX_UNLOCK; } /* @@ -8687,35 +8730,35 @@ */ void dw_window_set_pos_size(HWND handle, unsigned long x, unsigned long y, unsigned long width, unsigned long height) { - int _locked_by_me = FALSE; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi; -#endif - - if(!handle) - return; - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gtk_mdi_move(GTK_MDI(mdi), handle, x, y); - } - else -#endif - { - if(GTK_IS_WINDOW(handle)) - { - dw_window_set_size(handle, width, height); - gtk_widget_set_uposition(handle, x, y); - } - else if(handle->window) - { - gdk_window_resize(handle->window, width, height); - gdk_window_move(handle->window, x, y); - } - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi; +#endif + + if(!handle) + return; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gtk_mdi_move(GTK_MDI(mdi), handle, x, y); + } + else +#endif + { + if(GTK_IS_WINDOW(handle)) + { + dw_window_set_size(handle, width, height); + gtk_widget_set_uposition(handle, x, y); + } + else if(handle->window) + { + gdk_window_resize(handle->window, width, height); + gdk_window_move(handle->window, x, y); + } + } + DW_MUTEX_UNLOCK; } /* @@ -8729,51 +8772,51 @@ */ void dw_window_get_pos_size(HWND handle, ULONG *x, ULONG *y, ULONG *width, ULONG *height) { - int _locked_by_me = FALSE; - gint gx, gy, gwidth, gheight, gdepth; -#if GTK_MAJOR_VERSION > 1 - GtkWidget *mdi; -#endif - - DW_MUTEX_LOCK; -#if GTK_MAJOR_VERSION > 1 - if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) - { - gint myx=0, myy=0; - - gtk_mdi_get_pos(GTK_MDI(mdi), handle, &myx, &myy); - *x = myx; - *y = myy; - } - else -#endif - { - if(handle && handle->window) - { - - gdk_window_get_geometry(handle->window, &gx, &gy, &gwidth, &gheight, &gdepth); - gdk_window_get_root_origin(handle->window, &gx, &gy); - if(x) - *x = gx; - if(y) - *y = gy; - if(GTK_IS_WINDOW(handle)) - { - if(width) - *width = gwidth + _dw_border_width; - if(height) - *height = gheight + _dw_border_height; - } - else - { - if(width) - *width = gwidth; - if(height) - *height = gheight; - } - } - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + gint gx, gy, gwidth, gheight, gdepth; +#if GTK_MAJOR_VERSION > 1 + GtkWidget *mdi; +#endif + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + if((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) + { + gint myx=0, myy=0; + + gtk_mdi_get_pos(GTK_MDI(mdi), handle, &myx, &myy); + *x = myx; + *y = myy; + } + else +#endif + { + if(handle && handle->window) + { + + gdk_window_get_geometry(handle->window, &gx, &gy, &gwidth, &gheight, &gdepth); + gdk_window_get_root_origin(handle->window, &gx, &gy); + if(x) + *x = gx; + if(y) + *y = gy; + if(GTK_IS_WINDOW(handle)) + { + if(width) + *width = gwidth + _dw_border_width; + if(height) + *height = gheight + _dw_border_height; + } + else + { + if(width) + *width = gwidth; + if(height) + *height = gheight; + } + } + } + DW_MUTEX_UNLOCK; } /* @@ -8785,42 +8828,42 @@ */ void dw_window_set_style(HWND handle, unsigned long style, unsigned long mask) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_FRAME(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); - if(tmp && GTK_IS_LABEL(tmp)) - handle2 = tmp; - } - if(GTK_IS_LABEL(handle2)) - { - if(style & DW_DT_CENTER || style & DW_DT_VCENTER) - { - gfloat x, y; - - x = y = DW_LEFT; - - if(style & DW_DT_CENTER) - x = DW_CENTER; - - if(style & DW_DT_VCENTER) - y = DW_CENTER; - - gtk_misc_set_alignment(GTK_MISC(handle2), x, y); - } - if(style & DW_DT_WORDBREAK) - gtk_label_set_line_wrap(GTK_LABEL(handle), TRUE); - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_FRAME(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); + if(tmp && GTK_IS_LABEL(tmp)) + handle2 = tmp; + } + if(GTK_IS_LABEL(handle2)) + { + if(style & DW_DT_CENTER || style & DW_DT_VCENTER) + { + gfloat x, y; + + x = y = DW_LEFT; + + if(style & DW_DT_CENTER) + x = DW_CENTER; + + if(style & DW_DT_VCENTER) + y = DW_CENTER; + + gtk_misc_set_alignment(GTK_MISC(handle2), x, y); + } + if(style & DW_DT_WORDBREAK) + gtk_label_set_line_wrap(GTK_LABEL(handle), TRUE); + } + DW_MUTEX_UNLOCK; } /* @@ -8832,57 +8875,57 @@ */ unsigned long dw_notebook_page_new(HWND handle, unsigned long flags, int front) { - int z; - int _locked_by_me = FALSE; - GtkWidget **pagearray; - - DW_MUTEX_LOCK; - pagearray = (GtkWidget **)gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); - - if(pagearray) - { - for(z=0;z<256;z++) - { - if(!pagearray[z]) - { - char text[100]; - int num = z; - - if(front) - num |= 1 << 16; - - sprintf(text, "_dw_page%d", z); - /* Save the real id and the creation flags */ - gtk_object_set_data(GTK_OBJECT(handle), text, (gpointer)num); - DW_MUTEX_UNLOCK; - return z; - } - } - } - DW_MUTEX_UNLOCK; - - /* Hopefully this won't happen. */ - return 256; + int z; + int _locked_by_me = FALSE; + GtkWidget **pagearray; + + DW_MUTEX_LOCK; + pagearray = (GtkWidget **)gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); + + if(pagearray) + { + for(z=0;z<256;z++) + { + if(!pagearray[z]) + { + char text[100]; + int num = z; + + if(front) + num |= 1 << 16; + + sprintf(text, "_dw_page%d", z); + /* Save the real id and the creation flags */ + gtk_object_set_data(GTK_OBJECT(handle), text, GINT_TO_POINTER(num)); + DW_MUTEX_UNLOCK; + return z; + } + } + } + DW_MUTEX_UNLOCK; + + /* Hopefully this won't happen. */ + return 256; } /* Return the physical page id from the logical page id */ int _get_physical_page(HWND handle, unsigned long pageid) { - int z; - GtkWidget *thispage, **pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); - - if(pagearray) - { - for(z=0;z<256;z++) - { - if((thispage = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), z))) - { - if(thispage == pagearray[pageid]) - return z; - } - } - } - return 256; + int z; + GtkWidget *thispage, **pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); + + if(pagearray) + { + for(z=0;z<256;z++) + { + if((thispage = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), z))) + { + if(thispage == pagearray[pageid]) + return z; + } + } + } + return 256; } /* @@ -8893,18 +8936,18 @@ */ void dw_notebook_page_destroy(HWND handle, unsigned int pageid) { - int realpage, _locked_by_me = FALSE; - GtkWidget **pagearray; - - DW_MUTEX_LOCK; - realpage = _get_physical_page(handle, pageid); - if(realpage > -1 && realpage < 256) - { - gtk_notebook_remove_page(GTK_NOTEBOOK(handle), realpage); - if((pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"))) - pagearray[pageid] = NULL; - } - DW_MUTEX_UNLOCK; + int realpage, _locked_by_me = FALSE; + GtkWidget **pagearray; + + DW_MUTEX_LOCK; + realpage = _get_physical_page(handle, pageid); + if(realpage > -1 && realpage < 256) + { + gtk_notebook_remove_page(GTK_NOTEBOOK(handle), realpage); + if((pagearray = gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"))) + pagearray[pageid] = NULL; + } + DW_MUTEX_UNLOCK; } /* @@ -8914,14 +8957,14 @@ */ unsigned long dw_notebook_page_get(HWND handle) { - int retval, phys; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - phys = gtk_notebook_get_current_page(GTK_NOTEBOOK(handle)); - retval = _get_logical_page(handle, phys); - DW_MUTEX_UNLOCK; - return retval; + int retval, phys; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + phys = gtk_notebook_get_current_page(GTK_NOTEBOOK(handle)); + retval = _get_logical_page(handle, phys); + DW_MUTEX_UNLOCK; + return retval; } /* @@ -8932,13 +8975,13 @@ */ void dw_notebook_page_set(HWND handle, unsigned int pageid) { - int realpage, _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - realpage = _get_physical_page(handle, pageid); - if(realpage > -1 && realpage < 256) - gtk_notebook_set_page(GTK_NOTEBOOK(handle), pageid); - DW_MUTEX_UNLOCK; + int realpage, _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + realpage = _get_physical_page(handle, pageid); + if(realpage > -1 && realpage < 256) + gtk_notebook_set_page(GTK_NOTEBOOK(handle), pageid); + DW_MUTEX_UNLOCK; } @@ -8951,28 +8994,28 @@ */ void dw_notebook_page_set_text(HWND handle, unsigned long pageid, char *text) { - GtkWidget *child; - int realpage, _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - realpage = _get_physical_page(handle, pageid); - if(realpage < 0 || realpage > 255) - { - char ptext[100]; - int num; - - sprintf(ptext, "_dw_page%d", (int)pageid); - num = (int)gtk_object_get_data(GTK_OBJECT(handle), ptext); - realpage = 0xFF & num; - } - - if(realpage > -1 && realpage < 256) - { - child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), realpage); - if(child) - gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(handle), child, text); - } - DW_MUTEX_UNLOCK; + GtkWidget *child; + int realpage, _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + realpage = _get_physical_page(handle, pageid); + if(realpage < 0 || realpage > 255) + { + char ptext[100]; + int num; + + sprintf(ptext, "_dw_page%d", (int)pageid); + num = (int)gtk_object_get_data(GTK_OBJECT(handle), ptext); + realpage = 0xFF & num; + } + + if(realpage > -1 && realpage < 256) + { + child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), realpage); + if(child) + gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(handle), child, text); + } + DW_MUTEX_UNLOCK; } /* @@ -8984,7 +9027,7 @@ */ void dw_notebook_page_set_status_text(HWND handle, unsigned long pageid, char *text) { - /* TODO (if possible) */ + /* TODO (if possible) */ } /* @@ -8996,58 +9039,58 @@ */ void dw_notebook_pack(HWND handle, unsigned long pageid, HWND page) { - GtkWidget *label, *child, *oldlabel, **pagearray; - gchar *text = NULL; - int num, z, realpage = -1, pad, _locked_by_me = FALSE; - char ptext[100]; - - DW_MUTEX_LOCK; - sprintf(ptext, "_dw_page%d", (int)pageid); - num = (int)gtk_object_get_data(GTK_OBJECT(handle), ptext); - gtk_object_set_data(GTK_OBJECT(handle), ptext, NULL); - pagearray = (GtkWidget **)gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); - - if(!pagearray) - { - DW_MUTEX_UNLOCK; - return; - } - - /* The page already exists... so get it's current page */ - if(pagearray[pageid]) - { - for(z=0;z<256;z++) - { - child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), z); - if(child == pagearray[pageid]) - { - oldlabel = gtk_notebook_get_tab_label(GTK_NOTEBOOK(handle), child); - if(oldlabel) - gtk_label_get(GTK_LABEL(oldlabel), &text); - gtk_notebook_remove_page(GTK_NOTEBOOK(handle), z); - realpage = z; - break; - } - } - } - - pagearray[pageid] = page; - - label = gtk_label_new(text ? text : ""); - - if(GTK_IS_TABLE(page)) - { - pad = (int)gtk_object_get_data(GTK_OBJECT(page), "_dw_boxpad"); - gtk_container_border_width(GTK_CONTAINER(page), pad); - } - - if(realpage != -1) - gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, realpage); - else if(num & ~(0xFF)) - gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, 0); - else - gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, 256); - DW_MUTEX_UNLOCK; + GtkWidget *label, *child, *oldlabel, **pagearray; + gchar *text = NULL; + int num, z, realpage = -1, pad, _locked_by_me = FALSE; + char ptext[100]; + + DW_MUTEX_LOCK; + sprintf(ptext, "_dw_page%d", (int)pageid); + num = (int)gtk_object_get_data(GTK_OBJECT(handle), ptext); + gtk_object_set_data(GTK_OBJECT(handle), ptext, NULL); + pagearray = (GtkWidget **)gtk_object_get_data(GTK_OBJECT(handle), "_dw_pagearray"); + + if(!pagearray) + { + DW_MUTEX_UNLOCK; + return; + } + + /* The page already exists... so get it's current page */ + if(pagearray[pageid]) + { + for(z=0;z<256;z++) + { + child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), z); + if(child == pagearray[pageid]) + { + oldlabel = gtk_notebook_get_tab_label(GTK_NOTEBOOK(handle), child); + if(oldlabel) + gtk_label_get(GTK_LABEL(oldlabel), &text); + gtk_notebook_remove_page(GTK_NOTEBOOK(handle), z); + realpage = z; + break; + } + } + } + + pagearray[pageid] = page; + + label = gtk_label_new(text ? text : ""); + + if(GTK_IS_TABLE(page)) + { + pad = (int)gtk_object_get_data(GTK_OBJECT(page), "_dw_boxpad"); + gtk_container_border_width(GTK_CONTAINER(page), pad); + } + + if(realpage != -1) + gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, realpage); + else if(num & ~(0xFF)) + gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, 0); + else + gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, 256); + DW_MUTEX_UNLOCK; } /* @@ -9058,52 +9101,52 @@ */ void dw_listbox_append(HWND handle, char *text) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", (gpointer)1); - if(GTK_IS_LIST(handle2)) - { - GtkWidget *list_item; - GList *tmp; - char *font = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_font"); - GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_foregdk"); - GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_backgdk"); - - list_item=gtk_list_item_new_with_label(text); - - if(font) - _set_font(GTK_LIST_ITEM(list_item)->item.bin.child, font); - if(fore && back) - _set_color(GTK_LIST_ITEM(list_item)->item.bin.child, - DW_RGB(fore->red, fore->green, fore->blue), - DW_RGB(back->red, back->green, back->blue)); - - tmp = g_list_append(NULL, list_item); - gtk_widget_show(list_item); - gtk_list_append_items(GTK_LIST(handle2),tmp); - } - else if(GTK_IS_COMBO(handle2)) - { - GList *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); - char *addtext = strdup(text); - - if(addtext) - { - tmp = g_list_append(tmp, addtext); - gtk_object_set_user_data(GTK_OBJECT(handle2), tmp); - gtk_combo_set_popdown_strings(GTK_COMBO(handle2), tmp); - } - } - gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", NULL); - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", GINT_TO_POINTER(1)); + if(GTK_IS_LIST(handle2)) + { + GtkWidget *list_item; + GList *tmp; + char *font = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_font"); + GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_foregdk"); + GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_backgdk"); + + list_item=gtk_list_item_new_with_label(text); + + if(font) + _set_font(GTK_LIST_ITEM(list_item)->item.bin.child, font); + if(fore && back) + _set_color(GTK_LIST_ITEM(list_item)->item.bin.child, + DW_RGB(fore->red, fore->green, fore->blue), + DW_RGB(back->red, back->green, back->blue)); + + tmp = g_list_append(NULL, list_item); + gtk_widget_show(list_item); + gtk_list_append_items(GTK_LIST(handle2),tmp); + } + else if(GTK_IS_COMBO(handle2)) + { + GList *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); + char *addtext = strdup(text); + + if(addtext) + { + tmp = g_list_append(tmp, addtext); + gtk_object_set_user_data(GTK_OBJECT(handle2), tmp); + gtk_combo_set_popdown_strings(GTK_COMBO(handle2), tmp); + } + } + gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", NULL); + DW_MUTEX_UNLOCK; } /* @@ -9115,54 +9158,54 @@ */ void dw_listbox_list_append(HWND handle, char **text, int count) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", (gpointer)1); - if(GTK_IS_LIST(handle2)) - { - GtkWidget *list_item; - GList *tmp; - char *font = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_font"); - GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_foregdk"); - GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_backgdk"); - - list_item=gtk_list_item_new_with_label(*text); - - if(font) - _set_font(GTK_LIST_ITEM(list_item)->item.bin.child, font); - if(fore && back) - _set_color(GTK_LIST_ITEM(list_item)->item.bin.child, - DW_RGB(fore->red, fore->green, fore->blue), - DW_RGB(back->red, back->green, back->blue)); - - tmp = g_list_append(NULL, list_item); - gtk_widget_show(list_item); - gtk_list_append_items(GTK_LIST(handle2),tmp); - } - else if(GTK_IS_COMBO(handle2)) - { - GList *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); - char *addtext; - int i; - - for (i=0;i<count;i++) - { - addtext = strdup(text[i]); - tmp = g_list_append(tmp, addtext); - } - gtk_object_set_user_data(GTK_OBJECT(handle2), tmp); - gtk_combo_set_popdown_strings(GTK_COMBO(handle2), tmp); - } - gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", NULL); - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", GINT_TO_POINTER(1)); + if(GTK_IS_LIST(handle2)) + { + GtkWidget *list_item; + GList *tmp; + char *font = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_font"); + GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_foregdk"); + GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "_dw_backgdk"); + + list_item=gtk_list_item_new_with_label(*text); + + if(font) + _set_font(GTK_LIST_ITEM(list_item)->item.bin.child, font); + if(fore && back) + _set_color(GTK_LIST_ITEM(list_item)->item.bin.child, + DW_RGB(fore->red, fore->green, fore->blue), + DW_RGB(back->red, back->green, back->blue)); + + tmp = g_list_append(NULL, list_item); + gtk_widget_show(list_item); + gtk_list_append_items(GTK_LIST(handle2),tmp); + } + else if(GTK_IS_COMBO(handle2)) + { + GList *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); + char *addtext; + int i; + + for (i=0;i<count;i++) + { + addtext = strdup(text[i]); + tmp = g_list_append(tmp, addtext); + } + gtk_object_set_user_data(GTK_OBJECT(handle2), tmp); + gtk_combo_set_popdown_strings(GTK_COMBO(handle2), tmp); + } + gtk_object_set_data(GTK_OBJECT(handle), "_dw_appending", NULL); + DW_MUTEX_UNLOCK; } /* @@ -9172,40 +9215,40 @@ */ void dw_listbox_clear(HWND handle) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - if(GTK_IS_COMBO(handle2)) - { - GList *list, *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); - - if(tmp) - { - list = tmp; - while(list) - { - if(list->data) - free(list->data); - list=list->next; - } - g_list_free(tmp); - } - gtk_object_set_user_data(GTK_OBJECT(handle2), NULL); - } - else if(GTK_IS_LIST(handle2)) - { - int count = dw_listbox_count(handle); - - gtk_list_clear_items(GTK_LIST(handle2), 0, count - 1); - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + if(GTK_IS_COMBO(handle2)) + { + GList *list, *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); + + if(tmp) + { + list = tmp; + while(list) + { + if(list->data) + free(list->data); + list=list->next; + } + g_list_free(tmp); + } + gtk_object_set_user_data(GTK_OBJECT(handle2), NULL); + } + else if(GTK_IS_LIST(handle2)) + { + int count = dw_listbox_count(handle); + + gtk_list_clear_items(GTK_LIST(handle2), 0, count - 1); + } + DW_MUTEX_UNLOCK; } /* @@ -9215,32 +9258,32 @@ */ int dw_listbox_count(HWND handle) { - GtkWidget *handle2 = handle; + GtkWidget *handle2 = handle; int retval = 0; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - handle2 = GTK_COMBO(handle)->list; - } - if(GTK_IS_LIST(handle2)) - { - GList *list = GTK_LIST(handle2)->children; - while(list) - { - list = list->next; - retval++; - } - } - DW_MUTEX_UNLOCK; - return retval; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + handle2 = GTK_COMBO(handle)->list; + } + if(GTK_IS_LIST(handle2)) + { + GList *list = GTK_LIST(handle2)->children; + while(list) + { + list = list->next; + retval++; + } + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -9251,32 +9294,32 @@ */ void dw_listbox_set_top(HWND handle, int top) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - if(GTK_IS_LIST(handle2)) - { - int count = dw_listbox_count(handle); - GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(handle)); - float pos, ratio; - - if(count) - { - ratio = (float)top/(float)count; - - pos = (ratio * (float)(adj->upper - adj->lower)) + adj->lower; - - gtk_adjustment_set_value(adj, pos); - } - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + if(GTK_IS_LIST(handle2)) + { + int count = dw_listbox_count(handle); + GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(handle)); + float pos, ratio; + + if(count) + { + ratio = (float)top/(float)count; + + pos = (ratio * (float)(adj->upper - adj->lower)) + adj->lower; + + gtk_adjustment_set_value(adj, pos); + } + } + DW_MUTEX_UNLOCK; } /* @@ -9289,59 +9332,59 @@ */ void dw_listbox_get_text(HWND handle, unsigned int index, char *buffer, unsigned int length) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - handle2 = GTK_COMBO(handle)->list; - } - if(GTK_IS_LIST(handle2)) - { - int counter = 0; - GList *list = GTK_LIST(handle2)->children; - - while(list) - { - if(counter == index) - { - gchar *text = ""; - - if(GTK_IS_LIST_ITEM(list->data)) - { - GtkListItem *li = GTK_LIST_ITEM(list->data); - - if(GTK_IS_ITEM(&(li->item))) - { - GtkItem *i = &(li->item); - - if(GTK_IS_BIN(&(i->bin))) - { - GtkBin *b = &(i->bin); - - if(GTK_IS_LABEL(b->child)) - gtk_label_get(GTK_LABEL(b->child), &text); - } - } - } - else if(GTK_IS_COMBO(handle) && list->data) - text = (gchar *)list->data; - - strncpy(buffer, (char *)text, length); - break; - } - list = list->next; - counter++; - } - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + handle2 = GTK_COMBO(handle)->list; + } + if(GTK_IS_LIST(handle2)) + { + int counter = 0; + GList *list = GTK_LIST(handle2)->children; + + while(list) + { + if(counter == index) + { + gchar *text = ""; + + if(GTK_IS_LIST_ITEM(list->data)) + { + GtkListItem *li = GTK_LIST_ITEM(list->data); + + if(GTK_IS_ITEM(&(li->item))) + { + GtkItem *i = &(li->item); + + if(GTK_IS_BIN(&(i->bin))) + { + GtkBin *b = &(i->bin); + + if(GTK_IS_LABEL(b->child)) + gtk_label_get(GTK_LABEL(b->child), &text); + } + } + } + else if(GTK_IS_COMBO(handle) && list->data) + text = (gchar *)list->data; + + strncpy(buffer, (char *)text, length); + break; + } + list = list->next; + counter++; + } + } + DW_MUTEX_UNLOCK; } /* @@ -9353,74 +9396,74 @@ */ void dw_listbox_set_text(HWND handle, unsigned int index, char *buffer) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - handle2 = GTK_COMBO(handle)->list; - } - if(GTK_IS_LIST(handle2)) - { - int counter = 0; - GList *list = GTK_LIST(handle2)->children; - - while(list) - { - if(counter == index) - { - - if(GTK_IS_LIST_ITEM(list->data)) - { - GtkListItem *li = GTK_LIST_ITEM(list->data); - - if(GTK_IS_ITEM(&(li->item))) - { - GtkItem *i = &(li->item); - - if(GTK_IS_BIN(&(i->bin))) - { - GtkBin *b = &(i->bin); - - if(GTK_IS_LABEL(b->child)) - gtk_label_set_text(GTK_LABEL(b->child), buffer); - } - } - } - else if(GTK_IS_COMBO(handle)) - { - if(list->data) - g_free(list->data); - list->data = g_strdup(buffer); - } - break; - } - list = list->next; - counter++; - } - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + handle2 = GTK_COMBO(handle)->list; + } + if(GTK_IS_LIST(handle2)) + { + int counter = 0; + GList *list = GTK_LIST(handle2)->children; + + while(list) + { + if(counter == index) + { + + if(GTK_IS_LIST_ITEM(list->data)) + { + GtkListItem *li = GTK_LIST_ITEM(list->data); + + if(GTK_IS_ITEM(&(li->item))) + { + GtkItem *i = &(li->item); + + if(GTK_IS_BIN(&(i->bin))) + { + GtkBin *b = &(i->bin); + + if(GTK_IS_LABEL(b->child)) + gtk_label_set_text(GTK_LABEL(b->child), buffer); + } + } + } + else if(GTK_IS_COMBO(handle)) + { + if(list->data) + g_free(list->data); + list->data = g_strdup(buffer); + } + break; + } + list = list->next; + counter++; + } + } + DW_MUTEX_UNLOCK; } #if GTK_MAJOR_VERSION < 2 /* Check if a GList item is in another GList */ static int _dw_in_list(GList *item, GList *list) { - while(list) - { - if(list->data == item->data) - return TRUE; - - list = list->next; - } - return FALSE; + while(list) + { + if(list->data == item->data) + return TRUE; + + list = list->next; + } + return FALSE; } #endif @@ -9432,58 +9475,58 @@ */ int dw_listbox_selected_multi(HWND handle, int where) { - GtkWidget *handle2 = handle; - int retval = DW_LIT_NONE; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - if(GTK_IS_LIST(handle2)) - { -#if GTK_MAJOR_VERSION > 1 - int counter = 0; - GList *list = GTK_LIST(handle2)->children; - - while(list) - { - GtkItem *item = (GtkItem *)list->data; - - if(item && - item->bin.container.widget.state == GTK_STATE_SELECTED - && counter > where) - { - retval = counter; - break; - } - - - list = list->next; - counter++; - } + GtkWidget *handle2 = handle; + int retval = DW_LIT_NONE; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + if(GTK_IS_LIST(handle2)) + { +#if GTK_MAJOR_VERSION > 1 + int counter = 0; + GList *list = GTK_LIST(handle2)->children; + + while(list) + { + GtkItem *item = (GtkItem *)list->data; + + if(item && + item->bin.container.widget.state == GTK_STATE_SELECTED + && counter > where) + { + retval = counter; + break; + } + + + list = list->next; + counter++; + } #else - int counter = 0; - GList *list = GTK_LIST(handle2)->children; - - while(list) - { - if(counter > where && _dw_in_list(list, GTK_LIST(handle2)->selection)) - { - retval = counter; - break; - } - - list = list->next; - counter++; - } -#endif - } - DW_MUTEX_UNLOCK; - return retval; + int counter = 0; + GList *list = GTK_LIST(handle2)->children; + + while(list) + { + if(counter > where && _dw_in_list(list, GTK_LIST(handle2)->selection)) + { + retval = counter; + break; + } + + list = list->next; + counter++; + } +#endif + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -9493,63 +9536,63 @@ */ unsigned int dw_listbox_selected(HWND handle) { - GtkWidget *handle2 = handle; - int retval = DW_LIT_NONE; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - retval = (unsigned int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_item"); - DW_MUTEX_UNLOCK; - return retval; - } - if(GTK_IS_LIST(handle2)) - { - int counter = 0; - GList *list = GTK_LIST(handle2)->children; -#if GTK_MAJOR_VERSION > 1 - - while(list) - { - GtkItem *item = (GtkItem *)list->data; - - if(item && item->bin.container.widget.state == GTK_STATE_SELECTED) - { - retval = counter; - break; - } - - list = list->next; - counter++; - } + GtkWidget *handle2 = handle; + int retval = DW_LIT_NONE; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + retval = (unsigned int)gtk_object_get_data(GTK_OBJECT(handle), "_dw_item"); + DW_MUTEX_UNLOCK; + return retval; + } + if(GTK_IS_LIST(handle2)) + { + int counter = 0; + GList *list = GTK_LIST(handle2)->children; +#if GTK_MAJOR_VERSION > 1 + + while(list) + { + GtkItem *item = (GtkItem *)list->data; + + if(item && item->bin.container.widget.state == GTK_STATE_SELECTED) + { + retval = counter; + break; + } + + list = list->next; + counter++; + } #else - GList *selection = GTK_LIST(handle2)->selection; - - if(selection) - { - while(list) - { - if(list->data == selection->data) - { - retval = counter; - break; - } - - list = list->next; - counter++; - } - } -#endif - } - DW_MUTEX_UNLOCK; - return retval; + GList *selection = GTK_LIST(handle2)->selection; + + if(selection) + { + while(list) + { + if(list->data == selection->data) + { + retval = counter; + break; + } + + list = list->next; + counter++; + } + } +#endif + } + DW_MUTEX_UNLOCK; + return retval; } /* @@ -9561,28 +9604,28 @@ */ void dw_listbox_select(HWND handle, int index, int state) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - handle2 = GTK_COMBO(handle)->list; - } - if(GTK_IS_LIST(handle2)) - { - if(state) - gtk_list_select_item(GTK_LIST(handle2), index); - else - gtk_list_unselect_item(GTK_LIST(handle2), index); - } - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + handle2 = GTK_COMBO(handle)->list; + } + if(GTK_IS_LIST(handle2)) + { + if(state) + gtk_list_select_item(GTK_LIST(handle2), index); + else + gtk_list_unselect_item(GTK_LIST(handle2), index); + } + DW_MUTEX_UNLOCK; } /* @@ -9593,69 +9636,69 @@ */ void dw_listbox_delete(HWND handle, int index) { - GtkWidget *handle2 = handle; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_SCROLLED_WINDOW(handle)) - { - GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); - if(tmp) - handle2 = tmp; - } - else if(GTK_IS_COMBO(handle)) - { - handle2 = GTK_COMBO(handle)->list; - } - if(GTK_IS_LIST(handle2)) -{ - gtk_list_clear_items(GTK_LIST(handle2), index, index+1); -} - DW_MUTEX_UNLOCK; + GtkWidget *handle2 = handle; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_SCROLLED_WINDOW(handle)) + { + GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(tmp) + handle2 = tmp; + } + else if(GTK_IS_COMBO(handle)) + { + handle2 = GTK_COMBO(handle)->list; + } + if(GTK_IS_LIST(handle2)) +{ + gtk_list_clear_items(GTK_LIST(handle2), index, index+1); +} + DW_MUTEX_UNLOCK; } /* Reposition the bar according to the percentage */ static gint _splitbar_size_allocate(GtkWidget *widget, GtkAllocation *event, gpointer data) { - float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); - int lastwidth = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastwidth"); - int lastheight = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastheight"); - - /* Prevent infinite recursion ;) */ - if(!percent || (lastwidth == event->width && lastheight == event->height)) - return FALSE; - - lastwidth = event->width; lastheight = event->height; - - gtk_object_set_data(GTK_OBJECT(widget), "_dw_lastwidth", (gpointer)lastwidth); - gtk_object_set_data(GTK_OBJECT(widget), "_dw_lastheight", (gpointer)lastheight); - - if(GTK_IS_HPANED(widget)) - gtk_paned_set_position(GTK_PANED(widget), (int)(event->width * (*percent / 100.0))); - if(GTK_IS_VPANED(widget)) - gtk_paned_set_position(GTK_PANED(widget), (int)(event->height * (*percent / 100.0))); - gtk_object_set_data(GTK_OBJECT(widget), "_dw_waiting", NULL); - return FALSE; + float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); + int lastwidth = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastwidth"); + int lastheight = (int)gtk_object_get_data(GTK_OBJECT(widget), "_dw_lastheight"); + + /* Prevent infinite recursion ;) */ + if(!percent || (lastwidth == event->width && lastheight == event->height)) + return FALSE; + + lastwidth = event->width; lastheight = event->height; + + gtk_object_set_data(GTK_OBJECT(widget), "_dw_lastwidth", GINT_TO_POINTER(lastwidth)); + gtk_object_set_data(GTK_OBJECT(widget), "_dw_lastheight", GINT_TO_POINTER(lastheight)); + + if(GTK_IS_HPANED(widget)) + gtk_paned_set_position(GTK_PANED(widget), (int)(event->width * (*percent / 100.0))); + if(GTK_IS_VPANED(widget)) + gtk_paned_set_position(GTK_PANED(widget), (int)(event->height * (*percent / 100.0))); + gtk_object_set_data(GTK_OBJECT(widget), "_dw_waiting", NULL); + return FALSE; } #if GTK_MAJOR_VERSION > 1 /* Figure out the new percentage */ static void _splitbar_accept_position(GObject *object, GParamSpec *pspec, gpointer data) { - GtkWidget *widget = (GtkWidget *)data; - float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); - int size = 0, position = gtk_paned_get_position(GTK_PANED(widget)); - - if(!percent || gtk_object_get_data(GTK_OBJECT(widget), "_dw_waiting")) - return; - - if(GTK_IS_VPANED(widget)) - size = widget->allocation.height; - else if(GTK_IS_HPANED(widget)) - size = widget->allocation.width; - - if(size > 0) - *percent = ((float)(position * 100) / (float)size); + GtkWidget *widget = (GtkWidget *)data; + float *percent = (float *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_percent"); + int size = 0, position = gtk_paned_get_position(GTK_PANED(widget)); + + if(!percent || gtk_object_get_data(GTK_OBJECT(widget), "_dw_waiting")) + return; + + if(GTK_IS_VPANED(widget)) + size = widget->allocation.height; + else if(GTK_IS_HPANED(widget)) + size = widget->allocation.width; + + if(size > 0) + *percent = ((float)(position * 100) / (float)size); } #endif @@ -9670,30 +9713,30 @@ */ HWND dw_splitbar_new(int type, HWND topleft, HWND bottomright, unsigned long id) { - GtkWidget *tmp = NULL; - int _locked_by_me = FALSE; - float *percent = malloc(sizeof(float)); - - DW_MUTEX_LOCK; - if(type == DW_HORZ) - tmp = gtk_hpaned_new(); - else - tmp = gtk_vpaned_new(); - gtk_paned_add1(GTK_PANED(tmp), topleft); - gtk_paned_add2(GTK_PANED(tmp), bottomright); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - *percent = 50.0; - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_percent", (gpointer)percent); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_waiting", (gpointer)1); - gtk_signal_connect(GTK_OBJECT(tmp), "size-allocate", GTK_SIGNAL_FUNC(_splitbar_size_allocate), NULL); -#if GTK_MAJOR_VERSION > 1 - g_signal_connect(G_OBJECT(tmp), "notify::position", (GCallback)_splitbar_accept_position, (gpointer)tmp); + GtkWidget *tmp = NULL; + int _locked_by_me = FALSE; + float *percent = malloc(sizeof(float)); + + DW_MUTEX_LOCK; + if(type == DW_HORZ) + tmp = gtk_hpaned_new(); + else + tmp = gtk_vpaned_new(); + gtk_paned_add1(GTK_PANED(tmp), topleft); + gtk_paned_add2(GTK_PANED(tmp), bottomright); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + *percent = 50.0; + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_percent", (gpointer)percent); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_waiting", GINT_TO_POINTER(1)); + gtk_signal_connect(GTK_OBJECT(tmp), "size-allocate", GTK_SIGNAL_FUNC(_splitbar_size_allocate), NULL); +#if GTK_MAJOR_VERSION > 1 + g_signal_connect(G_OBJECT(tmp), "notify::position", (GCallback)_splitbar_accept_position, (gpointer)tmp); #else - gtk_paned_set_handle_size(GTK_PANED(tmp), 3); -#endif - gtk_widget_show(tmp); - DW_MUTEX_UNLOCK; - return tmp; + gtk_paned_set_handle_size(GTK_PANED(tmp), 3); +#endif + gtk_widget_show(tmp); + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -9703,23 +9746,23 @@ */ void dw_splitbar_set(HWND handle, float percent) { - float *mypercent = (float *)dw_window_get_data(handle, "_dw_percent"); - int size = 0, position; - - if(GTK_IS_VPANED(handle)) - size = handle->allocation.height; - else if(GTK_IS_HPANED(handle)) - size = handle->allocation.width; - - if(mypercent) - *mypercent = percent; - - if(size > 10) - { - position = (int)((float)size * (percent / 100.0)); - - gtk_paned_set_position(GTK_PANED(handle), position); - } + float *mypercent = (float *)dw_window_get_data(handle, "_dw_percent"); + int size = 0, position; + + if(GTK_IS_VPANED(handle)) + size = handle->allocation.height; + else if(GTK_IS_HPANED(handle)) + size = handle->allocation.width; + + if(mypercent) + *mypercent = percent; + + if(size > 10) + { + position = (int)((float)size * (percent / 100.0)); + + gtk_paned_set_position(GTK_PANED(handle), position); + } } /* @@ -9729,11 +9772,11 @@ */ float dw_splitbar_get(HWND handle) { - float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); - - if(percent) - return *percent; - return 0.0; + float *percent = (float *)dw_window_get_data(handle, "_dw_percent"); + + if(percent) + return *percent; + return 0.0; } /* @@ -9745,26 +9788,26 @@ */ HWND dw_calendar_new(unsigned long id) { - GtkWidget *tmp; - int _locked_by_me = FALSE; - GtkCalendarDisplayOptions flags; - time_t now; - struct tm *tmdata; - - DW_MUTEX_LOCK; - tmp = gtk_calendar_new(); - gtk_widget_show(tmp); - gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", (gpointer)id); - /* select today */ - flags = GTK_CALENDAR_WEEK_START_MONDAY|GTK_CALENDAR_SHOW_HEADING|GTK_CALENDAR_SHOW_DAY_NAMES; - gtk_calendar_display_options( GTK_CALENDAR(tmp), flags ); - now = time( NULL ); - tmdata = localtime( & now ); - gtk_calendar_select_month( GTK_CALENDAR(tmp), tmdata->tm_mon, 1900+tmdata->tm_year ); - gtk_calendar_select_day( GTK_CALENDAR(tmp), tmdata->tm_mday ); - - DW_MUTEX_UNLOCK; - return tmp; + GtkWidget *tmp; + int _locked_by_me = FALSE; + GtkCalendarDisplayOptions flags; + time_t now; + struct tm *tmdata; + + DW_MUTEX_LOCK; + tmp = gtk_calendar_new(); + gtk_widget_show(tmp); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); + /* select today */ + flags = GTK_CALENDAR_WEEK_START_MONDAY|GTK_CALENDAR_SHOW_HEADING|GTK_CALENDAR_SHOW_DAY_NAMES; + gtk_calendar_display_options( GTK_CALENDAR(tmp), flags ); + now = time( NULL ); + tmdata = localtime( & now ); + gtk_calendar_select_month( GTK_CALENDAR(tmp), tmdata->tm_mon, 1900+tmdata->tm_year ); + gtk_calendar_select_day( GTK_CALENDAR(tmp), tmdata->tm_mday ); + + DW_MUTEX_UNLOCK; + return tmp; } /* @@ -9775,16 +9818,16 @@ */ void dw_calendar_set_date(HWND handle, unsigned int year, unsigned int month, unsigned int day) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_CALENDAR(handle)) - { - gtk_calendar_select_month(GTK_CALENDAR(handle),month-1,year); - gtk_calendar_select_day(GTK_CALENDAR(handle), day); - } - DW_MUTEX_UNLOCK; - return; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_CALENDAR(handle)) + { + gtk_calendar_select_month(GTK_CALENDAR(handle),month-1,year); + gtk_calendar_select_day(GTK_CALENDAR(handle), day); + } + DW_MUTEX_UNLOCK; + return; } /* @@ -9794,16 +9837,16 @@ */ void dw_calendar_get_date(HWND handle, unsigned int *year, unsigned int *month, unsigned int *day) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - if(GTK_IS_CALENDAR(handle)) - { - gtk_calendar_get_date(GTK_CALENDAR(handle),year,month,day); - *month = *month + 1; - } - DW_MUTEX_UNLOCK; - return; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + if(GTK_IS_CALENDAR(handle)) + { + gtk_calendar_get_date(GTK_CALENDAR(handle),year,month,day); + *month = *month + 1; + } + DW_MUTEX_UNLOCK; + return; } /* @@ -9819,143 +9862,145 @@ */ void dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) { - int warn = FALSE, _locked_by_me = FALSE; - GtkWidget *tmp, *tmpitem; - - if(!box) - return; - - /* - * If you try and pack an item into itself VERY bad things can happen; like at least an - * infinite loop on GTK! Lets be safe! - */ - if(box == item) - { - dw_messagebox("dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!"); - return; - } - - DW_MUTEX_LOCK; - - if((tmp = gtk_object_get_data(GTK_OBJECT(box), "_dw_boxhandle"))) - box = tmp; - - if(!item) - { - item = gtk_label_new(""); - gtk_widget_show_all(item); - } - - tmpitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxhandle"); - - if(GTK_IS_TABLE(box)) - { - int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxcount"); - int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxtype"); - int x, y; - - /* If the item being packed is a box, then we use it's padding - * instead of the padding specified on the pack line, this is - * due to a bug in the OS/2 and Win32 renderer and a limitation - * of the GtkTable class. - */ - if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) - { - GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); - - /* NOTE: I left in the ability to pack boxes with a size, - * this eliminates that by forcing the size to 0. - */ - height = width = 0; - - if(eventbox) - { - int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); - gtk_container_add(GTK_CONTAINER(eventbox), item); - gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); - item = eventbox; - } - } - else - { - /* Only show warning if item is not a box */ - warn = TRUE; - } - - if(boxtype == DW_VERT) - { - x = 0; - y = boxcount; - gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1); - } - else - { - x = boxcount; - y = 0; - gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); - } - - gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); - gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", (gpointer)boxcount + 1); - gtk_widget_set_usize(item, width, height); - if(GTK_IS_RADIO_BUTTON(item)) - { - GSList *group; - GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "_dw_group"); - - if(groupstart) - { - group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); - gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); - } - else - gtk_object_set_data(GTK_OBJECT(box), "_dw_group", (gpointer)item); - } - } - else - { - GtkWidget *vbox = gtk_vbox_new(FALSE, 0); - - if(GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) - { - GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); - - /* NOTE: I left in the ability to pack boxes with a size, - * this eliminates that by forcing the size to 0. - */ - height = width = 0; - - if(eventbox) - { - int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); - gtk_container_add(GTK_CONTAINER(eventbox), item); - gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); - item = eventbox; - } - } - else - { - /* Only show warning if item is not a box */ - warn = TRUE; - } - - gtk_container_border_width(GTK_CONTAINER(box), pad); - gtk_container_add(GTK_CONTAINER(box), vbox); - gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); - gtk_widget_show(vbox); - - gtk_widget_set_usize(item, width, height); - gtk_object_set_user_data(GTK_OBJECT(box), vbox); - } - DW_MUTEX_UNLOCK; - - if(warn) - { - if ( width == 0 && hsize == FALSE ) - dw_messagebox("dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); - if ( height == 0 && vsize == FALSE ) - dw_messagebox("dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); - } + int warn = FALSE, _locked_by_me = FALSE; + GtkWidget *tmp, *tmpitem; + + if ( !box ) + return; + + /* + * If you try and pack an item into itself VERY bad things can happen; like at least an + * infinite loop on GTK! Lets be safe! + */ + if ( box == item ) + { + dw_messagebox( "dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Danger! Danger! Will Robinson; box and item are the same!" ); + return; + } + + DW_MUTEX_LOCK; + + if ((tmp = gtk_object_get_data(GTK_OBJECT(box), "_dw_boxhandle"))) + box = tmp; + + if (!item) + { + item = gtk_label_new(""); + gtk_widget_show_all(item); + } + + tmpitem = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxhandle"); + + if (GTK_IS_TABLE(box)) + { + int boxcount = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxcount"); + int boxtype = (int)gtk_object_get_data(GTK_OBJECT(box), "_dw_boxtype"); + int x, y; + + /* If the item being packed is a box, then we use it's padding + * instead of the padding specified on the pack line, this is + * due to a bug in the OS/2 and Win32 renderer and a limitation + * of the GtkTable class. + */ + if (GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) + { + GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); + + /* NOTE: I left in the ability to pack boxes with a size, + * this eliminates that by forcing the size to 0. + */ + height = width = 0; + + if (eventbox) + { + int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); + gtk_container_add(GTK_CONTAINER(eventbox), item); + gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); + item = eventbox; + } + } + else + { + /* Only show warning if item is not a box */ + warn = TRUE; + } + + if (boxtype == DW_VERT) + { + x = 0; + y = boxcount; + gtk_table_resize(GTK_TABLE(box), boxcount + 1, 1); + } + else + { + x = boxcount; + y = 0; + gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1); + } + + gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad); + gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1)); + gtk_widget_set_usize(item, width, height); + if (GTK_IS_RADIO_BUTTON(item)) + { + GSList *group; + GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "_dw_group"); + + if (groupstart) + { + group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); + gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); + } + else + { + gtk_object_set_data(GTK_OBJECT(box), "_dw_group", (gpointer)item); + } + } + } + else + { + GtkWidget *vbox = gtk_vbox_new(FALSE, 0); + + if (GTK_IS_TABLE(item) || (tmpitem && GTK_IS_TABLE(tmpitem))) + { + GtkWidget *eventbox = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "_dw_eventbox"); + + /* NOTE: I left in the ability to pack boxes with a size, + * this eliminates that by forcing the size to 0. + */ + height = width = 0; + + if (eventbox) + { + int boxpad = (int)gtk_object_get_data(GTK_OBJECT(item), "_dw_boxpad"); + gtk_container_add(GTK_CONTAINER(eventbox), item); + gtk_container_border_width(GTK_CONTAINER(eventbox), boxpad); + item = eventbox; + } + } + else + { + /* Only show warning if item is not a box */ + warn = TRUE; + } + + gtk_container_border_width(GTK_CONTAINER(box), pad); + gtk_container_add(GTK_CONTAINER(box), vbox); + gtk_box_pack_end(GTK_BOX(vbox), item, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + gtk_widget_set_usize(item, width, height); + gtk_object_set_user_data(GTK_OBJECT(box), vbox); + } + DW_MUTEX_UNLOCK; + + if (warn) + { + if ( width == 0 && hsize == FALSE ) + dw_messagebox("dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Width and expand Horizonal both unset for box: %x item: %x",box,item); + if ( height == 0 && vsize == FALSE ) + dw_messagebox("dw_box_pack_start()", DW_MB_OK|DW_MB_ERROR, "Height and expand Vertical both unset for box: %x item: %x",box,item); + } } /* @@ -9966,14 +10011,14 @@ */ void dw_window_default(HWND window, HWND defaultitem) { - int _locked_by_me = FALSE; - - if(!window) - return; - - DW_MUTEX_LOCK; - gtk_object_set_data(GTK_OBJECT(window), "_dw_defaultitem", (gpointer)defaultitem); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!window) + return; + + DW_MUTEX_LOCK; + gtk_object_set_data(GTK_OBJECT(window), "_dw_defaultitem", (gpointer)defaultitem); + DW_MUTEX_UNLOCK; } /* @@ -9984,14 +10029,14 @@ */ void dw_window_click_default(HWND window, HWND next) { - int _locked_by_me = FALSE; - - if(!window) - return; - - DW_MUTEX_LOCK; - gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(_default_key_press_event), next); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!window) + return; + + DW_MUTEX_LOCK; + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(_default_key_press_event), next); + DW_MUTEX_UNLOCK; } /* @@ -10001,200 +10046,200 @@ */ void dw_environment_query(DWEnv *env) { - struct utsname name; - char tempbuf[100]; - int len, z; - - uname(&name); - strcpy(env->osName, name.sysname); - strcpy(tempbuf, name.release); - - env->MajorBuild = env->MinorBuild = 0; - - len = strlen(tempbuf); - - strcpy(env->buildDate, __DATE__); - strcpy(env->buildTime, __TIME__); - env->DWMajorVersion = DW_MAJOR_VERSION; - env->DWMinorVersion = DW_MINOR_VERSION; - env->DWSubVersion = DW_SUB_VERSION; - - for(z=1;z<len;z++) - { - if(tempbuf[z] == '.') - { - tempbuf[z] = '\0'; - env->MajorVersion = atoi(&tempbuf[z-1]); - env->MinorVersion = atoi(&tempbuf[z+1]); - return; - } - } - env->MajorVersion = atoi(tempbuf); - env->MinorVersion = 0; + struct utsname name; + char tempbuf[100]; + int len, z; + + uname(&name); + strcpy(env->osName, name.sysname); + strcpy(tempbuf, name.release); + + env->MajorBuild = env->MinorBuild = 0; + + len = strlen(tempbuf); + + strcpy(env->buildDate, __DATE__); + strcpy(env->buildTime, __TIME__); + env->DWMajorVersion = DW_MAJOR_VERSION; + env->DWMinorVersion = DW_MINOR_VERSION; + env->DWSubVersion = DW_SUB_VERSION; + + for(z=1;z<len;z++) + { + if(tempbuf[z] == '.') + { + tempbuf[z] = '\0'; + env->MajorVersion = atoi(&tempbuf[z-1]); + env->MinorVersion = atoi(&tempbuf[z+1]); + return; + } + } + env->MajorVersion = atoi(tempbuf); + env->MinorVersion = 0; } /* Internal function to handle the file OK press */ static gint _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) { #if GTK_MAJOR_VERSION > 1 - const char *tmp; + const char *tmp; #else - char *tmp; -#endif - char *tmpdup=NULL; - - if(!dwwait) - return FALSE; - - if((tmp = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dwwait->data)))) - tmpdup = strdup(tmp); - gtk_widget_destroy(GTK_WIDGET(dwwait->data)); - _dw_file_active = 0; - dw_dialog_dismiss(dwwait, (void *)tmpdup); - return FALSE; + char *tmp; +#endif + char *tmpdup=NULL; + + if(!dwwait) + return FALSE; + + if((tmp = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dwwait->data)))) + tmpdup = strdup(tmp); + gtk_widget_destroy(GTK_WIDGET(dwwait->data)); + _dw_file_active = 0; + dw_dialog_dismiss(dwwait, (void *)tmpdup); + return FALSE; } /* Internal function to handle the file Cancel press */ static gint _gtk_file_cancel(GtkWidget *widget, DWDialog *dwwait) { - if(!dwwait) - return FALSE; - - gtk_widget_destroy(GTK_WIDGET(dwwait->data)); - _dw_file_active = 0; - dw_dialog_dismiss(dwwait, NULL); - return FALSE; + if(!dwwait) + return FALSE; + + gtk_widget_destroy(GTK_WIDGET(dwwait->data)); + _dw_file_active = 0; + dw_dialog_dismiss(dwwait, NULL); + return FALSE; } /* The next few functions are support functions for the UNIX folder browser */ static void _populate_directory(HWND tree, HTREEITEM parent, char *path) { - struct dirent *dent; - HTREEITEM item; - DIR *hdir; - - if((hdir = opendir(path))) - { - while((dent = readdir(hdir))) - { - if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) - { - int len = strlen(path); - char *folder = malloc(len + strlen(dent->d_name) + 2); - struct stat bleah; - HTREEITEM tempitem; - - strcpy(folder, path); - strcpy(&folder[len], dent->d_name); - - stat(folder, &bleah); - - if(S_IFDIR & bleah.st_mode) - { - item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent); - tempitem = dw_tree_insert(tree, "", 0, item, 0); - dw_tree_item_set_data(tree, item, (void *)tempitem); - } - - free(folder); - } - } - closedir(hdir); - } + struct dirent *dent; + HTREEITEM item; + DIR *hdir; + + if((hdir = opendir(path))) + { + while((dent = readdir(hdir))) + { + if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) + { + int len = strlen(path); + char *folder = malloc(len + strlen(dent->d_name) + 2); + struct stat bleah; + HTREEITEM tempitem; + + strcpy(folder, path); + strcpy(&folder[len], dent->d_name); + + stat(folder, &bleah); + + if(S_IFDIR & bleah.st_mode) + { + item = dw_tree_insert(tree, dent->d_name, 0, parent, (void *)parent); + tempitem = dw_tree_insert(tree, "", 0, item, 0); + dw_tree_item_set_data(tree, item, (void *)tempitem); + } + + free(folder); + } + } + closedir(hdir); + } } static int DWSIGNAL _dw_folder_ok_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - void *treedata; - - if(!dwwait) - return FALSE; - - treedata = dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss(dwwait, treedata); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + void *treedata; + + if(!dwwait) + return FALSE; + + treedata = dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss(dwwait, treedata); + return FALSE; } static int DWSIGNAL _dw_folder_cancel_func(HWND window, void *data) { - DWDialog *dwwait = (DWDialog *)data; - - if(!dwwait) - return FALSE; - - dw_window_destroy((HWND)dwwait->data); - dw_dialog_dismiss(dwwait, NULL); - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + + if(!dwwait) + return FALSE; + + dw_window_destroy((HWND)dwwait->data); + dw_dialog_dismiss(dwwait, NULL); + return FALSE; } static char *_tree_folder(HWND tree, HTREEITEM item) { - char *folder=strdup(""); - HTREEITEM parent = item; - - while(parent) - { - char *temp, *text = dw_tree_get_title(tree, parent); - - if(text) - { - temp = malloc(strlen(text) + strlen(folder) + 3); - strcpy(temp, text); - if(strcmp(text, "/")) - strcat(temp, "/"); - strcat(temp, folder); - free(folder); - folder = temp; - } - parent = dw_tree_get_parent(tree, parent); - } - return folder; + char *folder=strdup(""); + HTREEITEM parent = item; + + while(parent) + { + char *temp, *text = dw_tree_get_title(tree, parent); + + if(text) + { + temp = malloc(strlen(text) + strlen(folder) + 3); + strcpy(temp, text); + if(strcmp(text, "/")) + strcat(temp, "/"); + strcat(temp, folder); + free(folder); + folder = temp; + } + parent = dw_tree_get_parent(tree, parent); + } + return folder; } static int DWSIGNAL _item_select(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { - DWDialog *dwwait = (DWDialog *)data; - char *treedata = (char *)dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); - - text = text; itemdata = itemdata; - if(treedata) - free(treedata); - - treedata = _tree_folder(window, item); - dw_window_set_data((HWND)dwwait->data, "_dw_tree_selected", (void *)treedata); - - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + char *treedata = (char *)dw_window_get_data((HWND)dwwait->data, "_dw_tree_selected"); + + text = text; itemdata = itemdata; + if(treedata) + free(treedata); + + treedata = _tree_folder(window, item); + dw_window_set_data((HWND)dwwait->data, "_dw_tree_selected", (void *)treedata); + + return FALSE; } static int DWSIGNAL _tree_expand(HWND window, HTREEITEM item, void *data) { - DWDialog *dwwait = (DWDialog *)data; - HWND tree = (HWND)dw_window_get_data((HWND)dwwait->data, "_dw_tree"); - HTREEITEM tempitem = (HTREEITEM)dw_tree_item_get_data(tree, item); - - if(tempitem) - { - char *folder = _tree_folder(tree, item); - - dw_tree_item_set_data(tree, item, 0); - - if(*folder) - _populate_directory(tree, item, folder); - -#if GTK_MAJOR_VERSION > 1 - /* FIXME: GTK 1.x tree control goes crazy when - * I delete the temporary item. The subtree - * it sits on ceases to be valid and attempts - * to delete or recreate it fail horribly. - */ - dw_tree_item_delete(tree, tempitem); -#endif - free(folder); - } - - return FALSE; + DWDialog *dwwait = (DWDialog *)data; + HWND tree = (HWND)dw_window_get_data((HWND)dwwait->data, "_dw_tree"); + HTREEITEM tempitem = (HTREEITEM)dw_tree_item_get_data(tree, item); + + if(tempitem) + { + char *folder = _tree_folder(tree, item); + + dw_tree_item_set_data(tree, item, 0); + + if(*folder) + _populate_directory(tree, item, folder); + +#if GTK_MAJOR_VERSION > 1 + /* FIXME: GTK 1.x tree control goes crazy when + * I delete the temporary item. The subtree + * it sits on ceases to be valid and attempts + * to delete or recreate it fail horribly. + */ + dw_tree_item_delete(tree, tempitem); +#endif + free(folder); + } + + return FALSE; } /* @@ -10211,80 +10256,80 @@ */ char *dw_file_browse(char *title, char *defpath, char *ext, int flags) { - GtkWidget *filew; - int _locked_by_me = FALSE; - DWDialog *dwwait; - - if(flags == DW_DIRECTORY_OPEN) - { - HWND window, hbox, vbox, tree, button; - HTREEITEM item, tempitem; - - window = dw_window_new( HWND_DESKTOP, title, DW_FCF_SHELLPOSITION | DW_FCF_TITLEBAR | DW_FCF_SIZEBORDER | DW_FCF_MINMAX); - - vbox = dw_box_new(DW_VERT, 5); - - dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); - - tree = dw_tree_new(60); - - dw_box_pack_start(vbox, tree, 1, 1, TRUE, TRUE, 0); - dw_window_set_data(window, "_dw_tree", (void *)tree); - - hbox = dw_box_new(DW_HORZ, 0); - - dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); - - dwwait = dw_dialog_new((void *)window); - - dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_item_select), (void *)dwwait); - dw_signal_connect(tree, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_tree_expand), (void *)dwwait); - - button = dw_button_new("Ok", 1001L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_folder_ok_func), (void *)dwwait); - - button = dw_button_new("Cancel", 1002L); - dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); - dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_folder_cancel_func), (void *)dwwait); - - item = dw_tree_insert(tree, "/", 0, NULL, 0); - tempitem = dw_tree_insert(tree, "", 0, item, 0); - dw_tree_item_set_data(tree, item, (void *)tempitem); - - dw_window_set_size(window, 225, 300); - dw_window_show(window); - } - else - { - DW_MUTEX_LOCK; - - /* The DW mutex should be sufficient for - * insuring no thread changes this unknowingly. - */ - if(_dw_file_active) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - _dw_file_active = 1; - - filew = gtk_file_selection_new(title); - - dwwait = dw_dialog_new((void *)filew); - - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", (GtkSignalFunc) _gtk_file_ok, dwwait); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", (GtkSignalFunc) _gtk_file_cancel, dwwait); - - if(defpath) - gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), defpath); - - gtk_widget_show(filew); - - DW_MUTEX_UNLOCK; - } - return (char *)dw_dialog_wait(dwwait); + GtkWidget *filew; + int _locked_by_me = FALSE; + DWDialog *dwwait; + + if(flags == DW_DIRECTORY_OPEN) + { + HWND window, hbox, vbox, tree, button; + HTREEITEM item, tempitem; + + window = dw_window_new( HWND_DESKTOP, title, DW_FCF_SHELLPOSITION | DW_FCF_TITLEBAR | DW_FCF_SIZEBORDER | DW_FCF_MINMAX); + + vbox = dw_box_new(DW_VERT, 5); + + dw_box_pack_start(window, vbox, 0, 0, TRUE, TRUE, 0); + + tree = dw_tree_new(60); + + dw_box_pack_start(vbox, tree, 1, 1, TRUE, TRUE, 0); + dw_window_set_data(window, "_dw_tree", (void *)tree); + + hbox = dw_box_new(DW_HORZ, 0); + + dw_box_pack_start(vbox, hbox, 0, 0, TRUE, FALSE, 0); + + dwwait = dw_dialog_new((void *)window); + + dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_item_select), (void *)dwwait); + dw_signal_connect(tree, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_tree_expand), (void *)dwwait); + + button = dw_button_new("Ok", 1001L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_folder_ok_func), (void *)dwwait); + + button = dw_button_new("Cancel", 1002L); + dw_box_pack_start(hbox, button, 50, 30, TRUE, FALSE, 3); + dw_signal_connect(button, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_folder_cancel_func), (void *)dwwait); + + item = dw_tree_insert(tree, "/", 0, NULL, 0); + tempitem = dw_tree_insert(tree, "", 0, item, 0); + dw_tree_item_set_data(tree, item, (void *)tempitem); + + dw_window_set_size(window, 225, 300); + dw_window_show(window); + } + else + { + DW_MUTEX_LOCK; + + /* The DW mutex should be sufficient for + * insuring no thread changes this unknowingly. + */ + if(_dw_file_active) + { + DW_MUTEX_UNLOCK; + return NULL; + } + + _dw_file_active = 1; + + filew = gtk_file_selection_new(title); + + dwwait = dw_dialog_new((void *)filew); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", (GtkSignalFunc) _gtk_file_ok, dwwait); + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", (GtkSignalFunc) _gtk_file_cancel, dwwait); + + if(defpath) + gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), defpath); + + gtk_widget_show(filew); + + DW_MUTEX_UNLOCK; + } + return (char *)dw_dialog_wait(dwwait); } @@ -10299,54 +10344,54 @@ */ int dw_exec(char *program, int type, char **params) { - int ret = -1; - - if((ret = fork()) == 0) - { - int i; - - for (i = 3; i < 256; i++) - close(i); - setsid(); - if(type == DW_EXEC_GUI) - { - execvp(program, params); - } - else if(type == DW_EXEC_CON) - { - char **tmpargs; - - if(!params) - { - tmpargs = malloc(sizeof(char *)); - tmpargs[0] = NULL; - } - else - { - int z = 0; - - while(params[z]) - { - z++; - } - tmpargs = malloc(sizeof(char *)*(z+3)); - z=0; - tmpargs[0] = "xterm"; - tmpargs[1] = "-e"; - while(params[z]) - { - tmpargs[z+2] = params[z]; - z++; - } - tmpargs[z+2] = NULL; - } - execvp("xterm", tmpargs); - free(tmpargs); - } - /* If we got here exec failed */ - _exit(-1); - } - return ret; + int ret = -1; + + if((ret = fork()) == 0) + { + int i; + + for (i = 3; i < 256; i++) + close(i); + setsid(); + if(type == DW_EXEC_GUI) + { + execvp(program, params); + } + else if(type == DW_EXEC_CON) + { + char **tmpargs; + + if(!params) + { + tmpargs = malloc(sizeof(char *)); + tmpargs[0] = NULL; + } + else + { + int z = 0; + + while(params[z]) + { + z++; + } + tmpargs = malloc(sizeof(char *)*(z+3)); + z=0; + tmpargs[0] = "xterm"; + tmpargs[1] = "-e"; + while(params[z]) + { + tmpargs[z+2] = params[z]; + z++; + } + tmpargs[z+2] = NULL; + } + execvp("xterm", tmpargs); + free(tmpargs); + } + /* If we got here exec failed */ + _exit(-1); + } + return ret; } /* @@ -10356,16 +10401,16 @@ */ int dw_browse(char *url) { - /* Is there a way to find the webbrowser in Unix? */ - char *execargs[3], *browser = "netscape", *tmp; - - tmp = getenv( "DW_BROWSER" ); - if(tmp) browser = tmp; - execargs[0] = browser; - execargs[1] = url; - execargs[2] = NULL; - - return dw_exec(browser, DW_EXEC_GUI, execargs); + /* Is there a way to find the webbrowser in Unix? */ + char *execargs[3], *browser = "netscape", *tmp; + + tmp = getenv( "DW_BROWSER" ); + if(tmp) browser = tmp; + execargs[0] = browser; + execargs[1] = url; + execargs[2] = NULL; + + return dw_exec(browser, DW_EXEC_GUI, execargs); } /* @@ -10377,31 +10422,31 @@ void dw_html_action(HWND handle, int action) { #ifdef USE_GTKMOZEMBED - int _locked_by_me = FALSE; - - if(!_gtk_moz_embed_new) - return; - - DW_MUTEX_LOCK; - switch(action) - { - case DW_HTML_GOBACK: - _gtk_moz_embed_go_back(GTK_MOZ_EMBED(handle)); - break; - case DW_HTML_GOFORWARD: - _gtk_moz_embed_go_forward(GTK_MOZ_EMBED(handle)); - break; - case DW_HTML_GOHOME: - _gtk_moz_embed_load_url(GTK_MOZ_EMBED(handle), "http://dwindows.netlabs.org"); - break; - case DW_HTML_RELOAD: - _gtk_moz_embed_reload(GTK_MOZ_EMBED(handle), 0); - break; - case DW_HTML_STOP: - _gtk_moz_embed_stop_load(GTK_MOZ_EMBED(handle)); - break; - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!_gtk_moz_embed_new) + return; + + DW_MUTEX_LOCK; + switch(action) + { + case DW_HTML_GOBACK: + _gtk_moz_embed_go_back(GTK_MOZ_EMBED(handle)); + break; + case DW_HTML_GOFORWARD: + _gtk_moz_embed_go_forward(GTK_MOZ_EMBED(handle)); + break; + case DW_HTML_GOHOME: + _gtk_moz_embed_load_url(GTK_MOZ_EMBED(handle), "http://dwindows.netlabs.org"); + break; + case DW_HTML_RELOAD: + _gtk_moz_embed_reload(GTK_MOZ_EMBED(handle), 0); + break; + case DW_HTML_STOP: + _gtk_moz_embed_stop_load(GTK_MOZ_EMBED(handle)); + break; + } + DW_MUTEX_UNLOCK; #endif } @@ -10417,17 +10462,17 @@ int dw_html_raw(HWND handle, char *string) { #ifdef USE_GTKMOZEMBED - int _locked_by_me = FALSE; - - if(!_gtk_moz_embed_new) - return -1; - - DW_MUTEX_LOCK; - _gtk_moz_embed_render_data(GTK_MOZ_EMBED(handle), string, strlen(string), "", ""); - DW_MUTEX_UNLOCK; - return 0; -#endif - return -1; + int _locked_by_me = FALSE; + + if(!_gtk_moz_embed_new) + return -1; + + DW_MUTEX_LOCK; + _gtk_moz_embed_render_data(GTK_MOZ_EMBED(handle), string, strlen(string), "", ""); + DW_MUTEX_UNLOCK; + return 0; +#endif + return -1; } /* @@ -10442,18 +10487,108 @@ int dw_html_url(HWND handle, char *url) { #ifdef USE_GTKMOZEMBED - int _locked_by_me = FALSE; - - if(!_gtk_moz_embed_new) - return -1; - - DW_MUTEX_LOCK; - _gtk_moz_embed_load_url(GTK_MOZ_EMBED(handle), url); - DW_MUTEX_UNLOCK; - return 0; -#endif - return -1; -} + int _locked_by_me = FALSE; + + if (!_gtk_moz_embed_new) + return -1; + + DW_MUTEX_LOCK; + _gtk_moz_embed_load_url( GTK_MOZ_EMBED(handle), url ); + DW_MUTEX_UNLOCK; + return 0; +#endif + return -1; +} + +#ifdef USE_GTKMOZEMBED +/* + * Callback for a HTML widget when the "Forward" menu item is selected + */ +static int _dw_html_forward_callback(HWND window, void *data) +{ + HWND handle=(HWND)data; + dw_html_action( handle, DW_HTML_GOFORWARD ); + return TRUE; +} + +/* + * Callback for a HTML widget when the "Back" menu item is selected + */ +static int _dw_html_backward_callback(HWND window, void *data) +{ + HWND handle=(HWND)data; + dw_html_action( handle, DW_HTML_GOBACK ); + return TRUE; +} + +/* + * Callback for a HTML widget when the "Reload" menu item is selected + */ +static int _dw_html_reload_callback(HWND window, void *data) +{ + HWND handle=(HWND)data; + dw_html_action( handle, DW_HTML_RELOAD ); + return TRUE; +} + +/* + * Callback for a HTML widget when a page has completed loading + * Once the page has finished loading, show the widget. + */ +void _dw_html_net_stop_cb( GtkMozEmbed *embed, gpointer data ) +{ + gtk_widget_show(GTK_WIDGET(data)); +} + +/* + * Callback for a HTML widget when a mouse button is clicked inside the widget + * If the right mouse button is clicked, popup a context menu + */ +static gint _dw_dom_mouse_click_cb (GtkMozEmbed *dummy, gpointer dom_event, gpointer embed) +{ + gint button,rc; + glong x,y; + int flags; + + button = mozilla_get_mouse_event_button( dom_event ); + if ( button == 2 ) + { + HWND menuitem; + HMENUI popup; + /* + * Right mouse button; display context menu + */ + rc = mozilla_get_mouse_location( dom_event, &x, &y); + popup = dw_menu_new( 0 ); + if ( _gtk_moz_embed_can_go_forward(GTK_MOZ_EMBED(embed) ) ) + flags = DW_MIS_ENABLED; + else + flags = DW_MIS_DISABLED; + menuitem = dw_menu_append_item( popup, "Forward", 1, flags, TRUE, FALSE, 0 ); + dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_forward_callback), embed ); + + if ( _gtk_moz_embed_can_go_back(GTK_MOZ_EMBED(embed) ) ) + flags = DW_MIS_ENABLED; + else + flags = DW_MIS_DISABLED; + menuitem = dw_menu_append_item( popup, "Back", 2, flags, TRUE, FALSE, 0 ); + dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_backward_callback), embed ); + + dw_menu_append_item( popup, DW_MENU_SEPARATOR, 99, 0, TRUE, FALSE, 0 ); + + menuitem = dw_menu_append_item( popup, "Reload", 3, 0, TRUE, FALSE, 0 ); + dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_dw_html_reload_callback), embed ); + + dw_menu_popup( &popup, embed, x, y ); + rc = TRUE; + } + else + { + rc = FALSE; + } + return rc; +} +#endif /* * Create a new Entryfield window (widget) to be packed. @@ -10463,20 +10598,33 @@ */ HWND dw_html_new(unsigned long id) { + GtkWidget *widget,*stext; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; #ifdef USE_GTKMOZEMBED - GtkWidget *widget; - int _locked_by_me = FALSE; - - if(!_gtk_moz_embed_new) - return NULL; - - DW_MUTEX_LOCK; - widget = _gtk_moz_embed_new(); - DW_MUTEX_UNLOCK; - return widget; + if (!_gtk_moz_embed_new) + { + widget = dw_box_new(DW_HORZ, 0); + stext = dw_text_new( "HTML widget not available; you do not have access to gtkmozembed.", 0); + dw_box_pack_start(widget, stext, 0, 0, TRUE, TRUE, 10); + } + else + { + widget = _gtk_moz_embed_new(); + /* + * Connect some signals + */ + gtk_signal_connect( GTK_OBJECT(widget), "net-stop", GTK_SIGNAL_FUNC(_dw_html_net_stop_cb), widget ); + gtk_signal_connect( GTK_OBJECT(widget), "dom_mouse_click", GTK_SIGNAL_FUNC(_dw_dom_mouse_click_cb), widget ); + } #else - return dw_box_new(DW_HORZ, 0); -#endif + widget = dw_box_new(DW_HORZ, 0); + stext = dw_text_new( "HTML widget not available; you do not have access to gtkmozembed.", 0); + dw_box_pack_start(widget, stext, 0, 0, TRUE, TRUE, 10); +#endif + DW_MUTEX_UNLOCK; + return widget; } /* @@ -10530,18 +10678,18 @@ */ char *dw_user_dir(void) { - static char _user_dir[1024] = ""; - - if(!_user_dir[0]) - { - char *home = getenv("HOME"); - - if(home) - strcpy(_user_dir, home); - else - strcpy(_user_dir, "/"); - } - return _user_dir; + static char _user_dir[1024] = ""; + + if(!_user_dir[0]) + { + char *home = getenv("HOME"); + + if(home) + strcpy(_user_dir, home); + else + strcpy(_user_dir, "/"); + } + return _user_dir; } /* @@ -10553,12 +10701,12 @@ */ void dw_window_function(HWND handle, void *function, void *data) { - void (* windowfunc)(void *); - - windowfunc = function; - - if(windowfunc) - windowfunc(data); + void (* windowfunc)(void *); + + windowfunc = function; + + if(windowfunc) + windowfunc(data); } /* @@ -10570,26 +10718,26 @@ */ void dw_window_set_data(HWND window, char *dataname, void *data) { - int _locked_by_me = FALSE; - - if(!window) - return; - - DW_MUTEX_LOCK; - if(GTK_IS_OBJECT(window)) - { - if(GTK_IS_SCROLLED_WINDOW(window)) - { - HWND thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); - - if(thiswindow && GTK_IS_OBJECT(thiswindow)) - gtk_object_set_data(GTK_OBJECT(thiswindow), dataname, (gpointer)data); - } - if(GTK_IS_COMBO(window)) - gtk_object_set_data(GTK_OBJECT(GTK_COMBO(window)->entry), dataname, (gpointer)data); - gtk_object_set_data(GTK_OBJECT(window), dataname, (gpointer)data); - } - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + if(!window) + return; + + DW_MUTEX_LOCK; + if(GTK_IS_OBJECT(window)) + { + if(GTK_IS_SCROLLED_WINDOW(window)) + { + HWND thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); + + if(thiswindow && GTK_IS_OBJECT(thiswindow)) + gtk_object_set_data(GTK_OBJECT(thiswindow), dataname, (gpointer)data); + } + if(GTK_IS_COMBO(window)) + gtk_object_set_data(GTK_OBJECT(GTK_COMBO(window)->entry), dataname, (gpointer)data); + gtk_object_set_data(GTK_OBJECT(window), dataname, (gpointer)data); + } + DW_MUTEX_UNLOCK; } /* @@ -10601,17 +10749,17 @@ */ void *dw_window_get_data(HWND window, char *dataname) { - int _locked_by_me = FALSE; - void *ret = NULL; - - if(!window) - return NULL; - - DW_MUTEX_LOCK; + int _locked_by_me = FALSE; + void *ret = NULL; + + if(!window) + return NULL; + + DW_MUTEX_LOCK; if(GTK_IS_OBJECT(window)) - ret = (void *)gtk_object_get_data(GTK_OBJECT(window), dataname); - DW_MUTEX_UNLOCK; - return ret; + ret = (void *)gtk_object_get_data(GTK_OBJECT(window), dataname); + DW_MUTEX_UNLOCK; + return ret; } /* @@ -10625,12 +10773,12 @@ */ int API dw_timer_connect(int interval, void *sigfunc, void *data) { - int tag, _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - tag = gtk_timeout_add(interval, (GtkFunction)sigfunc, data); - DW_MUTEX_UNLOCK; - return tag; + int tag, _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tag = gtk_timeout_add(interval, (GtkFunction)sigfunc, data); + DW_MUTEX_UNLOCK; + return tag; } /* @@ -10640,11 +10788,11 @@ */ void API dw_timer_disconnect(int id) { - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - gtk_timeout_remove(id); - DW_MUTEX_UNLOCK; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + gtk_timeout_remove(id); + DW_MUTEX_UNLOCK; } /* Get the actual signal window handle not the user window handle @@ -10652,22 +10800,22 @@ */ static HWND _find_signal_window(HWND window, char *signame) { - HWND thiswindow = window; - - if(GTK_IS_SCROLLED_WINDOW(thiswindow)) - thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); - else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) - thiswindow = GTK_COMBO(thiswindow)->list; - else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) - thiswindow = GTK_COMBO(thiswindow)->entry; - else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || - GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) - thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); -#if GTK_MAJOR_VERSION > 1 - else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) - thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); -#endif - return thiswindow; + HWND thiswindow = window; + + if(GTK_IS_SCROLLED_WINDOW(thiswindow)) + thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); + else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) + thiswindow = GTK_COMBO(thiswindow)->list; + else if(GTK_IS_COMBO(thiswindow) && signame && strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) + thiswindow = GTK_COMBO(thiswindow)->entry; + else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || + GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) + thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); +#if GTK_MAJOR_VERSION > 1 + else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) + thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); +#endif + return thiswindow; } /* @@ -10680,166 +10828,166 @@ */ void dw_signal_connect(HWND window, char *signame, void *sigfunc, void *data) { - void *thisfunc = _findsigfunc(signame); - char *thisname = signame; - HWND thiswindow = window; - int sigid, _locked_by_me = FALSE; - gint cid; - - DW_MUTEX_LOCK; + void *thisfunc = _findsigfunc(signame); + char *thisname = signame; + HWND thiswindow = window; + int sigid, _locked_by_me = FALSE; + gint cid; + + DW_MUTEX_LOCK; /* * If the window we are setting the signal on is a scrolled window we need to get * the "real" widget type. thiswindow is the "real" widget type */ - if(GTK_IS_SCROLLED_WINDOW(thiswindow)) - { - thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); - } - - if(GTK_IS_MENU_ITEM(thiswindow) && strcmp(signame, DW_SIGNAL_CLICKED) == 0) - { - thisname = "activate"; - thisfunc = _findsigfunc(thisname); - } - else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) - { - thisname = "button_press_event"; - thisfunc = _findsigfunc(DW_SIGNAL_ITEM_CONTEXT); - } -#if GTK_MAJOR_VERSION > 1 - else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) - { - thisfunc = _findsigfunc("tree-context"); - - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); - cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); - _set_signal_handler_id(thiswindow, sigid, cid); + if (GTK_IS_SCROLLED_WINDOW(thiswindow)) + { + thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); + } + + if (GTK_IS_MENU_ITEM(thiswindow) && strcmp(signame, DW_SIGNAL_CLICKED) == 0) + { + thisname = "activate"; + thisfunc = _findsigfunc(thisname); + } + else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) + { + thisname = "button_press_event"; + thisfunc = _findsigfunc(DW_SIGNAL_ITEM_CONTEXT); + } +#if GTK_MAJOR_VERSION > 1 + else if (GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) + { + thisfunc = _findsigfunc("tree-context"); + + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); + cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); + _set_signal_handler_id(thiswindow, sigid, cid); #if 0 - sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); - cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); - _set_signal_handler_id(window, sigid, cid); -#endif - - DW_MUTEX_UNLOCK; - return; - } - else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) - { - GtkWidget *treeview = thiswindow; - - thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); - thisname = "changed"; - - sigid = _set_signal_handler(treeview, window, sigfunc, data, thisfunc); - cid = g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, (gpointer)sigid); - _set_signal_handler_id(treeview, sigid, cid); - DW_MUTEX_UNLOCK; - return; - } - else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) - { - thisname = "row-expanded"; - } + sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); + cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); + _set_signal_handler_id(window, sigid, cid); +#endif + + DW_MUTEX_UNLOCK; + return; + } + else if (GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) + { + GtkWidget *treeview = thiswindow; + + thiswindow = (GtkWidget *)gtk_tree_view_get_selection(GTK_TREE_VIEW(thiswindow)); + thisname = "changed"; + + sigid = _set_signal_handler(treeview, window, sigfunc, data, thisfunc); + cid = g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, (gpointer)sigid); + _set_signal_handler_id(treeview, sigid, cid); + DW_MUTEX_UNLOCK; + return; + } + else if (GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) + { + thisname = "row-expanded"; + } #else - else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) - { - thisfunc = _findsigfunc("tree-context"); - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); - - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", (gpointer)sigid); - cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); - _set_signal_handler_id(thiswindow, sigid, cid); - sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); - cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); - _set_signal_handler_id(window, sigid, cid); - DW_MUTEX_UNLOCK; - return; - } - else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) - { - if(thisfunc) - { - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_func", (gpointer)thisfunc); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_data", (gpointer)sigid); - } - thisname = "select-child"; - } - else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) - { - if(thisfunc) - { - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_func", (gpointer)thisfunc); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_data", (gpointer)sigid); - } - DW_MUTEX_UNLOCK; - return; - } -#endif - else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_ENTER) == 0) - { - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, _container_enter_event); - cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "key_press_event", GTK_SIGNAL_FUNC(_container_enter_event), (gpointer)sigid); - _set_signal_handler_id(thiswindow, sigid, cid); - - thisname = "button_press_event"; - thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); - } - else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) - { - thisname = "select_row"; - thisfunc = (void *)_container_select_row; - } - else if(GTK_IS_COMBO(thiswindow) && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) - { - thisname = "select_child"; - thiswindow = GTK_COMBO(thiswindow)->list; - } - else if(GTK_IS_LIST(thiswindow) && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) - { - thisname = "select_child"; - } - else if(strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) - { - thisname = "focus-in-event"; - if(GTK_IS_COMBO(thiswindow)) - thiswindow = GTK_COMBO(thiswindow)->entry; - } + else if (GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) + { + thisfunc = _findsigfunc("tree-context"); + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); + + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_func", (gpointer)thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_container_context_data", GINT_TO_POINTER(sigid)); + cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); + _set_signal_handler_id(thiswindow, sigid, cid); + sigid = _set_signal_handler(window, window, sigfunc, data, thisfunc); + cid = gtk_signal_connect(GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(thisfunc), (gpointer)sigid); + _set_signal_handler_id(window, sigid, cid); + DW_MUTEX_UNLOCK; + return; + } + else if (GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) + { + if(thisfunc) + { + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_func", (gpointer)thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_select_child_data", GINT_TO_POINTER(sigid)); + } + thisname = "select-child"; + } + else if (GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) + { + if(thisfunc) + { + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_func", (gpointer)thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_tree_item_expand_data", GINT_TO_POINTER(sigid)); + } + DW_MUTEX_UNLOCK; + return; + } +#endif + else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_ENTER) == 0) + { + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, _container_enter_event); + cid = gtk_signal_connect(GTK_OBJECT(thiswindow), "key_press_event", GTK_SIGNAL_FUNC(_container_enter_event), (gpointer)sigid); + _set_signal_handler_id(thiswindow, sigid, cid); + + thisname = "button_press_event"; + thisfunc = _findsigfunc(DW_SIGNAL_ITEM_ENTER); + } + else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_SELECT) == 0) + { + thisname = "select_row"; + thisfunc = (void *)_container_select_row; + } + else if (GTK_IS_COMBO(thiswindow) && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) + { + thisname = "select_child"; + thiswindow = GTK_COMBO(thiswindow)->list; + } + else if (GTK_IS_LIST(thiswindow) && strcmp(signame, DW_SIGNAL_LIST_SELECT) == 0) + { + thisname = "select_child"; + } + else if (strcmp(signame, DW_SIGNAL_SET_FOCUS) == 0) + { + thisname = "focus-in-event"; + if (GTK_IS_COMBO(thiswindow)) + thiswindow = GTK_COMBO(thiswindow)->entry; + } #if 0 - else if(strcmp(signame, DW_SIGNAL_LOSE_FOCUS) == 0) - { - thisname = "focus-out-event"; - if(GTK_IS_COMBO(thiswindow)) - thiswindow = GTK_COMBO(thiswindow)->entry; - } -#endif - else if(GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || - GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) - { - thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); - } - else if(GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0) - { - thisname = "switch-page"; - } - else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_COLUMN_CLICK) == 0) - { - thisname = "click-column"; - } - - if(!thisfunc || !thiswindow) - { - DW_MUTEX_UNLOCK; - return; - } - - sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); - cid = gtk_signal_connect(GTK_OBJECT(thiswindow), thisname, GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); - _set_signal_handler_id(thiswindow, sigid, cid); - DW_MUTEX_UNLOCK; + else if (strcmp(signame, DW_SIGNAL_LOSE_FOCUS) == 0) + { + thisname = "focus-out-event"; + if(GTK_IS_COMBO(thiswindow)) + thiswindow = GTK_COMBO(thiswindow)->entry; + } +#endif + else if (GTK_IS_VSCALE(thiswindow) || GTK_IS_HSCALE(thiswindow) || + GTK_IS_VSCROLLBAR(thiswindow) || GTK_IS_HSCROLLBAR(thiswindow)) + { + thiswindow = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_adjustment"); + } + else if (GTK_IS_NOTEBOOK(thiswindow) && strcmp(signame, DW_SIGNAL_SWITCH_PAGE) == 0) + { + thisname = "switch-page"; + } + else if (GTK_IS_CLIST(thiswindow) && strcmp(signame, DW_SIGNAL_COLUMN_CLICK) == 0) + { + thisname = "click-column"; + } + + if (!thisfunc || !thiswindow) + { + DW_MUTEX_UNLOCK; + return; + } + + sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); + cid = gtk_signal_connect(GTK_OBJECT(thiswindow), thisname, GTK_SIGNAL_FUNC(thisfunc),(gpointer)sigid); + _set_signal_handler_id(thiswindow, sigid, cid); + DW_MUTEX_UNLOCK; } /* @@ -10849,24 +10997,24 @@ */ void dw_signal_disconnect_by_name(HWND window, char *signame) { - HWND thiswindow; - int z, count; - void *thisfunc; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - thiswindow = _find_signal_window(window, signame); - count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); - thisfunc = _findsigfunc(signame); - - for(z=0;z<count;z++) - { - SignalHandler sh = _get_signal_handler(thiswindow, (gpointer)z); - - if(sh.intfunc == thisfunc) - _remove_signal_handler(thiswindow, z); - } - DW_MUTEX_UNLOCK; + HWND thiswindow; + int z, count; + void *thisfunc; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + thiswindow = _find_signal_window(window, signame); + count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); + thisfunc = _findsigfunc(signame); + + for(z=0;z<count;z++) + { + SignalHandler sh = _get_signal_handler(thiswindow, (gpointer)z); + + if(sh.intfunc == thisfunc) + _remove_signal_handler(thiswindow, z); + } + DW_MUTEX_UNLOCK; } /* @@ -10876,18 +11024,18 @@ */ void dw_signal_disconnect_by_window(HWND window) { - HWND thiswindow; - int z, count; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - thiswindow = _find_signal_window(window, NULL); - count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); - - for(z=0;z<count;z++) - _remove_signal_handler(thiswindow, z); - gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_sigcounter", NULL); - DW_MUTEX_UNLOCK; + HWND thiswindow; + int z, count; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + thiswindow = _find_signal_window(window, NULL); + count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); + + for(z=0;z<count;z++) + _remove_signal_handler(thiswindow, z); + gtk_object_set_data(GTK_OBJECT(thiswindow), "_dw_sigcounter", NULL); + DW_MUTEX_UNLOCK; } /* @@ -10898,20 +11046,20 @@ */ void dw_signal_disconnect_by_data(HWND window, void *data) { - HWND thiswindow; - int z, count; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - thiswindow = _find_signal_window(window, NULL); - count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); - - for(z=0;z<count;z++) - { - SignalHandler sh = _get_signal_handler(thiswindow, (gpointer)z); - - if(sh.data == data) - _remove_signal_handler(thiswindow, z); - } - DW_MUTEX_UNLOCK; -} + HWND thiswindow; + int z, count; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + thiswindow = _find_signal_window(window, NULL); + count = (int)gtk_object_get_data(GTK_OBJECT(thiswindow), "_dw_sigcounter"); + + for(z=0;z<count;z++) + { + SignalHandler sh = _get_signal_handler(thiswindow, (gpointer)z); + + if(sh.data == data) + _remove_signal_handler(thiswindow, z); + } + DW_MUTEX_UNLOCK; +}