Mercurial > dwindows
changeset 636:f6f887d2c5aa
Add _dw_log() internal logging function
Preliminary support for building with GTK+ on Windows with MinGW
Deprecate dw_menu_item_set_check(); use dw_menu_item_set_state()
Support dw_window_set_text() from groupbox
Support transparent bitmaps( GTK+ already did by default)
author | mhessling@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 10 Apr 2009 22:55:56 +0000 |
parents | 6cec85b90635 |
children | 9fa3cb5b3290 |
files | Makefile.in config.h.in configure configure.in dwtest.c gtk/dw.c os2/dw.c |
diffstat | 7 files changed, 251 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile.in Fri Apr 10 10:30:54 2009 +0000 +++ b/Makefile.in Fri Apr 10 22:55:56 2009 +0000 @@ -7,10 +7,11 @@ DW_SRC = @DW_SRC@ INCPATH = -I.. -I. -I$(srcdir) TARGET = dw -SRCS = $(srcdir)/$(DW_SRC)/dw.c -OBJECTS = dw.o browser.o -SRCS2 = $(srcdir)compat.c $(DW_SRC)rel2abs.c -OBJECTS2= compat.o rel2abs.o +SRCS = $(srcdir)/$(DW_SRC)/dw.c $(DW_SRC)rel2abs.c +BROWSER_OBJECT=@BROWSER_OBJECT@ +OBJECTS = dw.o rel2abs.o $(BROWSER_OBJECT) +SRCS2 = $(srcdir)compat.c +OBJECTS2= compat.o TARGET2 = dwcompat VER_MAJ = @DW_MAJOR_VERSION@ VER_MIN = @DW_MINOR_VERSION@
--- a/config.h.in Fri Apr 10 10:30:54 2009 +0000 +++ b/config.h.in Fri Apr 10 22:55:56 2009 +0000 @@ -38,3 +38,7 @@ /* Define if PIXBUF is available. */ #undef USE_PIXBUF + +/* Define if USING GTK (but not on X11). */ +#undef DW_USE_GTK +
--- a/configure Fri Apr 10 10:30:54 2009 +0000 +++ b/configure Fri Apr 10 22:55:56 2009 +0000 @@ -690,6 +690,7 @@ SOSUFFIX DW_SRC DW_DEFINE +BROWSER_OBJECT LIBOBJS LTLIBOBJS' ac_subst_files='' @@ -4968,6 +4969,14 @@ OPSYSTEM=`uname -s` +case "OPSYSTEM" in + MINGW32*) + cat >>confdefs.h <<\_ACEOF +#define DW_USE_GTK 1 +_ACEOF + + ;; +esac if test $OPSYSTEM = "Darwin"; then DW_SRC=mac @@ -6306,9 +6315,11 @@ CFLAGS="$CFLAGS $GTK_CFLAGS $GDK_IMLIB_FLAGS $MOZEMBED_CFLAGS" +BROWSER_OBJECT="" if test x"$MOZEMBED_LIBS" != x; then SAVE_LIBS="$LIBS" LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $MOZEMBED_LIBS" + BROWSER_OBJECT="browser.o" { echo "$as_me:$LINENO: checking for gtk_moz_embed_new in -lgtkembedmoz" >&5 echo $ECHO_N "checking for gtk_moz_embed_new in -lgtkembedmoz... $ECHO_C" >&6; } if test "${ac_cv_lib_gtkembedmoz_gtk_moz_embed_new+set}" = set; then @@ -6375,6 +6386,8 @@ #define USE_GTKMOZEMBED 1 _ACEOF +else + BROWSER_OBJECT="" fi LIBS="$SAVE_LIBS" @@ -6401,6 +6414,7 @@ + ac_config_files="$ac_config_files Makefile dw-config" cat >confcache <<\_ACEOF @@ -7097,11 +7111,12 @@ SOSUFFIX!$SOSUFFIX$ac_delim DW_SRC!$DW_SRC$ac_delim DW_DEFINE!$DW_DEFINE$ac_delim +BROWSER_OBJECT!$BROWSER_OBJECT$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 79; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 80; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
--- a/configure.in Fri Apr 10 10:30:54 2009 +0000 +++ b/configure.in Fri Apr 10 22:55:56 2009 +0000 @@ -55,6 +55,11 @@ AC_CHECK_LIB(resolv, gethostbyname, LIBS="$LIBS -lresolv",) OPSYSTEM=`uname -s` +case "OPSYSTEM" in + MINGW32*) + AC_DEFINE(DW_USE_GTK) + ;; +esac if test $OPSYSTEM = "Darwin"; then DW_SRC=mac @@ -107,10 +112,12 @@ CFLAGS="$CFLAGS $GTK_CFLAGS $GDK_IMLIB_FLAGS $MOZEMBED_CFLAGS" +BROWSER_OBJECT="" if test x"$MOZEMBED_LIBS" != x; then SAVE_LIBS="$LIBS" LIBS="$RPATH $LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS $MOZEMBED_LIBS" - AC_CHECK_LIB(gtkembedmoz,gtk_moz_embed_new,AC_DEFINE(USE_GTKMOZEMBED),) + BROWSER_OBJECT="browser.o" + AC_CHECK_LIB(gtkembedmoz,gtk_moz_embed_new,AC_DEFINE(USE_GTKMOZEMBED),BROWSER_OBJECT="") LIBS="$SAVE_LIBS" fi @@ -134,6 +141,7 @@ AC_SUBST(DW_SRC) AC_SUBST(DW_DEFINE) +AC_SUBST(BROWSER_OBJECT) AC_CONFIG_FILES([ Makefile
--- a/dwtest.c Fri Apr 10 10:30:54 2009 +0000 +++ b/dwtest.c Fri Apr 10 22:55:56 2009 +0000 @@ -489,7 +489,7 @@ dw_window_set_pos_size(filetoolbarbox, x, y, width, height); #else dw_window_enable( window); - dw_menu_delete_item( changeable_menu, NONCHECKABLE_MENUITEMID ); + dw_window_destroy( noncheckable_menuitem ); #endif return 0; } @@ -927,7 +927,6 @@ char **text; /* create a box to pack into the notebook page */ -// buttonsbox = dw_scrollbox_new(BOXVERT, 2); buttonsbox = dw_box_new(BOXVERT, 2); dw_box_pack_start( notebookbox5, buttonsbox, 25, 200, TRUE, TRUE, 0); dw_window_set_color(buttonsbox, DW_CLR_RED, DW_CLR_RED); @@ -1174,6 +1173,7 @@ dw_notebook_pack( notebook, notebookpage7, notebookbox7 ); dw_notebook_page_set_text( notebook, notebookpage7, "html"); +#if 1 rawhtml = dw_html_new(1001); dw_box_pack_start( notebookbox7, rawhtml, 0, 100, TRUE, FALSE, 0); dw_html_raw(rawhtml, "<html><body><center><h1>dwtest</h1></center></body></html>"); @@ -1186,7 +1186,7 @@ * Instead a pure HTML based web page is displayed. MHES 5/4/2008 */ dw_html_url(html, "http://www.rexx.org"); - +#endif dw_signal_connect(mainwindow, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow); timerid = dw_timer_connect(2000, DW_SIGNAL_FUNC(timer_callback), 0); dw_window_set_size(mainwindow, 640, 520);
--- a/gtk/dw.c Fri Apr 10 10:30:54 2009 +0000 +++ b/gtk/dw.c Fri Apr 10 22:55:56 2009 +0000 @@ -7,10 +7,16 @@ * (C) 2003-2004 Mark Hessling <m.hessling@qut.edu.au> * (C) 2002 Nickolay V. Shmyrev <shmyrev@yandex.ru> */ +#include "config.h" #include "dw.h" #include <string.h> #include <stdlib.h> -#include <sys/utsname.h> +#if !defined(GDK_WINDOWING_WIN32) +# include <sys/utsname.h> +# include <sys/socket.h> +# include <sys/un.h> +# include <sys/mman.h> +#endif #include <stdarg.h> #include <stdio.h> #include <unistd.h> @@ -19,12 +25,8 @@ #include <dirent.h> #include <sys/stat.h> #include <signal.h> -#include <sys/socket.h> -#include <sys/un.h> -#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> -#include "config.h" #include <gdk/gdkkeysyms.h> #ifdef USE_IMLIB #include <gdk_imlib.h> @@ -38,6 +40,14 @@ #include <gdk-pixbuf/gdk-pixbuf.h> #endif +#if __STDC_VERSION__ < 199901L +# if __GNUC__ >= 2 +# define __func__ __FUNCTION__ +# else +# define __func__ "<unknown>" +# endif +#endif + #include "gtk/messagebox_error.xpm" #include "gtk/messagebox_warning.xpm" #include "gtk/messagebox_information.xpm" @@ -93,6 +103,8 @@ # define min(a,b) (((a) < (b)) ? (a) : (b)) #endif +FILE *dbgfp = NULL; + DWTID _dw_thread_list[DW_THREAD_LIMIT]; GdkColor _foreground[DW_THREAD_LIMIT]; GdkColor _background[DW_THREAD_LIMIT]; @@ -305,6 +317,18 @@ static GtkMdiChild *get_child(GtkMdi *mdi, GtkWidget * widget); +static void _dw_log( char *format, ... ) +{ + va_list args; + va_start(args, format); + if ( dbgfp != NULL ) + { + vfprintf( dbgfp, format, args ); + fflush( dbgfp ); + } + va_end(args); +} + static GtkType gtk_mdi_get_type(void) { static GType mdi_type = 0; @@ -1211,6 +1235,7 @@ SignalHandler work = _get_signal_handler((GtkWidget *)window, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*setfocusfunc)(HWND, void *) = work.func; @@ -1225,6 +1250,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*buttonfunc)(HWND, int, int, int, void *) = work.func; @@ -1245,6 +1271,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*buttonfunc)(HWND, int, int, int, void *) = work.func; @@ -1265,6 +1292,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*motionfunc)(HWND, int, int, int, void *) = work.func; @@ -1297,6 +1325,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*closefunc)(HWND, void *) = work.func; @@ -1311,6 +1340,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*keypressfunc)(HWND, char, int, int, void *) = work.func; @@ -1326,6 +1356,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*genericfunc)(HWND, void *) = work.func; @@ -1340,11 +1371,13 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window && !_dw_ignore_click) { int (*activatefunc)(HWND, void *) = work.func; retval = activatefunc(popup ? popup : work.window, work.data); + popup = NULL; } return retval; } @@ -1354,6 +1387,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*sizefunc)(HWND, int, int, void *) = work.func; @@ -1368,6 +1402,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { DWExpose exp; @@ -1388,6 +1423,7 @@ static int _dw_recursing = 0; int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(_dw_recursing) return FALSE; @@ -1431,6 +1467,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { if(event->button == 3) @@ -1453,6 +1490,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { if(event->button == 3) @@ -1509,6 +1547,7 @@ GtkWidget *item, *widget = (GtkWidget *)gtk_tree_selection_get_tree_view(sel); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(widget) { SignalHandler work = _get_signal_handler(widget, data); @@ -1536,6 +1575,7 @@ SignalHandler work = _get_signal_handler((GtkWidget *)widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(!_dw_ignore_expand && work.window) { int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; @@ -1550,6 +1590,7 @@ GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(treeroot && GTK_IS_TREE(treeroot)) { GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "_dw_lastselect"); @@ -1573,6 +1614,7 @@ SignalHandler work = _get_signal_handler((GtkWidget *)treeitem, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(!_dw_ignore_expand && work.window) { int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; @@ -1587,6 +1629,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) @@ -1610,6 +1653,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window && event->keyval == VK_RETURN) { int (*contextfunc)(HWND, char *, void *) = work.func; @@ -1645,6 +1689,7 @@ SignalHandler work = _get_signal_handler((GtkWidget *)notebook, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*switchpagefunc)(HWND, unsigned long, void *) = work.func; @@ -1658,6 +1703,7 @@ SignalHandler work = _get_signal_handler(widget, data); int retval = FALSE; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(work.window) { int (*clickcolumnfunc)(HWND, int, void *) = work.func; @@ -1672,6 +1718,7 @@ char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); int (*contextfunc)(HWND, HWND, char *, void *, void *) = work.func; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(!work.window) return TRUE; @@ -1701,6 +1748,7 @@ 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 ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if (slider) { SignalHandler work = _get_signal_handler((GtkWidget *)adjustment, data); @@ -1733,6 +1781,7 @@ { GtkWidget *next = (GtkWidget *)data; + if ( dbgfp != NULL ) _dw_log("%s %d: %s\n",__FILE__,__LINE__,__func__); if(next) { if(event->keyval == GDK_Return) @@ -1831,6 +1880,7 @@ } #endif +#if defined(GDK_WINDOWING_X11) static void _size_allocate(GtkWindow *window) { XSizeHints sizehints; @@ -1849,6 +1899,7 @@ &sizehints); gdk_flush (); } +#endif /* Find the index of a given thread */ static int _find_thread_index(DWTID tid) @@ -1954,6 +2005,7 @@ { int z; char *tmp; + char *fname; if(res) { @@ -1991,6 +2043,13 @@ #ifdef USE_GTKMOZEMBED init_mozembed(); #endif + /* + * Setup logging/debugging + */ + if ( (fname = getenv( "DWINDOWS_DEBUGFILE" ) ) != NULL ) + { + dbgfp = fopen( fname, "w" ); + } return TRUE; } @@ -2974,6 +3033,42 @@ return tmp; } +#ifdef INCOMPLETE +/* + * Create a new scrollable Box to be packed. + * Parameters: + * type: Either DW_VERT (vertical) or DW_HORZ (horizontal). + * pad: Number of pixels to pad around the box. + * This works fine under GTK+, but is incomplete on other platforms + */ +HWND dw_scrollbox_new( int type, int pad ) +{ + GtkWidget *tmp, *box, *eventbox; + 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); + + box = gtk_table_new(1, 1, FALSE); + eventbox = gtk_event_box_new(); + + gtk_widget_show(eventbox); + gtk_object_set_data(GTK_OBJECT(box), "_dw_eventbox", (gpointer)eventbox); + gtk_object_set_data(GTK_OBJECT(box), "_dw_boxtype", GINT_TO_POINTER(type)); + gtk_object_set_data(GTK_OBJECT(box), "_dw_boxpad", GINT_TO_POINTER(pad)); + gtk_object_set_data(GTK_OBJECT(tmp), "_dw_boxhandle", (gpointer)box); + + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp),box); + gtk_object_set_user_data(GTK_OBJECT(tmp), box); + gtk_widget_show(box); + gtk_widget_show(tmp); + + DW_MUTEX_UNLOCK; + return tmp; +} +#endif + /* * Create a new Group Box to be packed. * Parameters: @@ -3320,6 +3415,7 @@ * menu: The handle the the existing menu. * id: Menuitem id. * check: TRUE for checked FALSE for not checked. + * deprecated: use dw_menu_item_set_state() */ void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) { @@ -3449,7 +3545,14 @@ int _locked_by_me = FALSE; DW_MUTEX_LOCK; +#if GTK_CHECK_VERSION(2,8,0) + gdk_display_warp_pointer( gdk_display_get_default(), gdk_screen_get_default(), x, y ); +// gdk_display_warp_pointer( GDK_DISPLAY(), gdk_screen_get_default(), x, y ); +#else +# if GDK_WINDOWING_X11 XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); +# endif +#endif DW_MUTEX_UNLOCK; } @@ -4251,11 +4354,16 @@ } else if(GTK_WIDGET_TOPLEVEL(handle)) gtk_window_set_title(GTK_WINDOW(handle), text); - else if(GTK_IS_FRAME(handle)) - { + else if ( GTK_IS_FRAME(handle) ) + { + /* + * This is a groupbox or status_text + */ GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_label"); - if(tmp && GTK_IS_LABEL(tmp)) + if ( tmp && GTK_IS_LABEL(tmp) ) gtk_label_set_text(GTK_LABEL(tmp), text); + else /* assume groupbox */ + gtk_frame_set_label(GTK_FRAME(handle), text && *text ? text : NULL); } DW_MUTEX_UNLOCK; } @@ -7253,7 +7361,7 @@ int _locked_by_me = FALSE; int i; GdkGC *gc = NULL; - GdkPoint *points; + GdkPoint *points = NULL; DW_MUTEX_LOCK; if ( handle ) @@ -7487,6 +7595,8 @@ * Creates a pixmap with given parameters. * Parameters: * handle: Window handle the pixmap is associated with. + * or zero to enable this pixmap to be written + * off the screen to reduce flicker * width: Width of the pixmap in pixels. * height: Height of the pixmap in pixels. * depth: Color depth of the pixmap. @@ -7509,7 +7619,10 @@ DW_MUTEX_LOCK; pixmap->handle = handle; - pixmap->pixmap = gdk_pixmap_new(handle->window, width, height, depth); + if ( handle ) + pixmap->pixmap = gdk_pixmap_new( handle->window, width, height, depth ); + else + pixmap->pixmap = gdk_pixmap_new( NULL, width, height, depth ); DW_MUTEX_UNLOCK; return pixmap; } @@ -7644,6 +7757,25 @@ } /* + * Sets the transparent color for a pixmap + * Parameters: + * pixmap: Handle to a pixmap returned by + * dw_pixmap_new.. + * color: transparent color + * Note: This does nothing on GTK+ as transparency + * is handled automatically + */ +void dw_pixmap_set_transparent_color(HPIXMAP pixmap, unsigned long color) +{ + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + pixmap = pixmap; + color = color; + DW_MUTEX_UNLOCK; +} + +/* * Creates a pixmap from internal resource graphic specified by id. * Parameters: * handle: Window handle the pixmap is associated with. @@ -8528,6 +8660,10 @@ */ void dw_exit(int exitcode) { + if ( dbgfp != NULL ) + { + fclose( dbgfp ); + } exit(exitcode); } @@ -8699,7 +8835,10 @@ default_width = -1; if ( height == 0 ) default_height = -1; +#if defined(GDK_WINDOWING_X11) + _size_allocate(GTK_WINDOW(handle)); +#endif if(handle->window) gdk_window_resize(handle->window, default_width , default_height ); gtk_window_set_default_size(GTK_WINDOW(handle), default_width , default_height ); @@ -8763,7 +8902,7 @@ * x: X location from the bottom left. * y: Y location from the bottom left. */ -void dw_window_set_pos(HWND handle, unsigned long x, unsigned long y) +void dw_window_set_pos(HWND handle, long x, long y) { int _locked_by_me = FALSE; #if GTK_MAJOR_VERSION > 1 @@ -8794,7 +8933,7 @@ * width: Width of the widget. * height: Height of the widget. */ -void dw_window_set_pos_size(HWND handle, unsigned long x, unsigned long y, unsigned long width, unsigned long height) +void dw_window_set_pos_size(HWND handle, long x, long y, unsigned long width, unsigned long height) { int _locked_by_me = FALSE; #if GTK_MAJOR_VERSION > 1 @@ -8803,7 +8942,6 @@ 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)) @@ -8836,7 +8974,7 @@ * width: Width of the widget. * height: Height of the widget. */ -void dw_window_get_pos_size(HWND handle, ULONG *x, ULONG *y, ULONG *width, ULONG *height) +void dw_window_get_pos_size(HWND handle, long *x, long *y, ULONG *width, ULONG *height) { int _locked_by_me = FALSE; gint gx, gy, gwidth, gheight, gdepth; @@ -9227,6 +9365,9 @@ GtkWidget *handle2 = handle; int _locked_by_me = FALSE; + if ( count == 0 ) + return; + DW_MUTEX_LOCK; if(GTK_IS_SCROLLED_WINDOW(handle)) {
--- a/os2/dw.c Fri Apr 10 10:30:54 2009 +0000 +++ b/os2/dw.c Fri Apr 10 22:55:56 2009 +0000 @@ -7681,6 +7681,65 @@ WinReleasePS(hps); } +/* Draw a polygon on a window (preferably a render window). + * Parameters: + * handle: Handle to the window. + * pixmap: Handle to the pixmap. (choose only one of these) + * fill: Fill box TRUE or FALSE. + * x: X coordinate. + * y: Y coordinate. + * width: Width of rectangle. + * height: Height of rectangle. + */ +void API dw_draw_polygon( HWND handle, HPIXMAP pixmap, int fill, int npoints, int *x, int *y ) +{ + HPS hps; + int thisheight; + POINTL *ptl[2]; + POINTL start; + + if(handle) + { + hps = _set_colors(handle); + thisheight = _get_height(handle); + } + else if(pixmap) + { + hps = _set_hps(pixmap->hps); + thisheight = pixmap->height; + } + else + return; + /* + * For a filled polygon we need to start an area + */ + if ( fill ) + GpiBeginArea( hps, 0L ); + if ( npoints ) + { + /* + * Move to the first point of the polygon + */ + start.x = x[0]; + start.y = y[0]; + GpiMove( hps, &start ); + /* + * Convert the remainder of the x and y points + */ + for ( i = 1; i < npoints; i++ ) + { + ptl[i-1].x = x[i]; + ptl[i-1].y = y[i]; + } + GpiPolyLine( hps, npoints-1, &ptl ); + + if ( fill ) + GpiEndArea( hps ); + } + if ( !pixmap ) + WinReleasePS(hps); +} + /* Draw a rectangle on a window (preferably a render window). * Parameters: * handle: Handle to the window.