changeset 954:cfb12bf3bb06

Fixes for some more coordinate system issues on the Mac. Also some changes to the test program to make sure to test for these type issues.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 02 May 2011 01:07:49 +0000
parents 2dfc06afc7d3
children 8b73a45ae424
files dwtest.c mac/dw.m
diffstat 2 files changed, 1075 insertions(+), 990 deletions(-) [+]
line wrap: on
line diff
--- a/dwtest.c	Sun May 01 22:52:38 2011 +0000
+++ b/dwtest.c	Mon May 02 01:07:49 2011 +0000
@@ -30,7 +30,7 @@
 #define MAX_WIDGETS 20
 
 unsigned long flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR |
-   DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER;
+DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER;
 
 unsigned long current_color = DW_RGB(100,100,100);
 
@@ -38,53 +38,55 @@
 void create_button( int);
 
 HWND mainwindow,
-   entryfield,
-   checkable_menuitem,
-   noncheckable_menuitem,
-   cursortogglebutton,
-   colorchoosebutton,
-   okbutton,
-   cancelbutton,
-   lbbox,
-   combox,
-   combobox1,
-   combobox2,
-   spinbutton,
-   slider,
-   notebookbox,
-   notebookbox1,
-   notebookbox2,
-   notebookbox3,
-   notebookbox4,
-   notebookbox5,
-   notebookbox6,
-   notebookbox7,
-   notebookbox8,
-   html,
-   rawhtml,
-   notebook,
-   vscrollbar,
-   hscrollbar,
-   status,
-   container_status,
-   tree_status,
-   stext,
-   tree,
-   container,
-   container_mle,
-   pagebox,
-   treebox,
-   containerbox,
-   textbox1, textbox2, textboxA,
-   gap_box,
-   buttonbox,
-   buttonsbox,
-   buttonboxperm,
-   cal,
-   scrollbox,
-   labelarray[MAX_WIDGETS],
-   entryarray[MAX_WIDGETS],
-   filetoolbarbox;
+    entryfield,
+    checkable_menuitem,
+    noncheckable_menuitem,
+    cursortogglebutton,
+    colorchoosebutton,
+    okbutton,
+    cancelbutton,
+    lbbox,
+    combox,
+    combobox1,
+    combobox2,
+    spinbutton,
+    slider,
+    notebookbox,
+    notebookbox1,
+    notebookbox2,
+    notebookbox3,
+    notebookbox4,
+    notebookbox5,
+    notebookbox6,
+    notebookbox7,
+    notebookbox8,
+    html,
+    rawhtml,
+    notebook,
+    vscrollbar,
+    hscrollbar,
+    status1,
+    status2,
+    rendcombo,
+    container_status,
+    tree_status,
+    stext,
+    tree,
+    container,
+    container_mle,
+    pagebox,
+    treebox,
+    containerbox,
+    textbox1, textbox2, textboxA,
+    gap_box,
+    buttonbox,
+    buttonsbox,
+    buttonboxperm,
+    cal,
+    scrollbox,
+    labelarray[MAX_WIDGETS],
+    entryarray[MAX_WIDGETS],
+    filetoolbarbox;
 
 HMENUI mainmenubar,changeable_menu;
 #define CHECKABLE_MENUITEMID 2001
@@ -108,1039 +110,1132 @@
 int max_linewidth=0;
 int current_row=0,current_col=0;
 int cursor_arrow = 1;
+int render_type = 0;
 
 FILE *fp=NULL;
 char **lp;
 
 char *resolve_keyname( int vk )
 {
-   char *keyname;
-   switch(vk)
-      {
-         case  VK_LBUTTON : keyname =  "VK_LBUTTON"; break;
-         case  VK_RBUTTON : keyname =  "VK_RBUTTON"; break;
-         case  VK_CANCEL  : keyname =  "VK_CANCEL"; break;
-         case  VK_MBUTTON : keyname =  "VK_MBUTTON"; break;
-/*       case  VK_BACK    : keyname =  "VK_BACK"; break;*/
-         case  VK_TAB     : keyname =  "VK_TAB"; break;
-         case  VK_CLEAR   : keyname =  "VK_CLEAR"; break;
-         case  VK_RETURN  : keyname =  "VK_RETURN"; break;
-/*       case  VK_MENU    : keyname =  "VK_MENU"; break;*/
-         case  VK_PAUSE   : keyname =  "VK_PAUSE"; break;
-         case  VK_CAPITAL : keyname =  "VK_CAPITAL"; break;
-         case  VK_ESCAPE  : keyname =  "VK_ESCAPE"; break;
-         case  VK_SPACE   : keyname =  "VK_SPACE"; break;
-         case  VK_PRIOR   : keyname =  "VK_PRIOR"; break;
-         case  VK_NEXT    : keyname =  "VK_NEXT"; break;
-         case  VK_END     : keyname =  "VK_END"; break;
-         case  VK_HOME    : keyname =  "VK_HOME"; break;
-         case  VK_LEFT    : keyname =  "VK_LEFT"; break;
-         case  VK_UP      : keyname =  "VK_UP"; break;
-         case  VK_RIGHT   : keyname =  "VK_RIGHT"; break;
-         case  VK_DOWN    : keyname =  "VK_DOWN"; break;
-         case  VK_SELECT  : keyname =  "VK_SELECT"; break;
-         case  VK_PRINT   : keyname =  "VK_PRINT"; break;
-         case  VK_EXECUTE : keyname =  "VK_EXECUTE"; break;
-         case  VK_SNAPSHOT: keyname =  "VK_SNAPSHOT"; break;
-         case  VK_INSERT  : keyname =  "VK_INSERT"; break;
-         case  VK_DELETE  : keyname =  "VK_DELETE"; break;
-         case  VK_HELP    : keyname =  "VK_HELP"; break;
-         case  VK_LWIN    : keyname =  "VK_LWIN"; break;
-         case  VK_RWIN    : keyname =  "VK_RWIN"; break;
-         case  VK_NUMPAD0 : keyname =  "VK_NUMPAD0"; break;
-         case  VK_NUMPAD1 : keyname =  "VK_NUMPAD1"; break;
-         case  VK_NUMPAD2 : keyname =  "VK_NUMPAD2"; break;
-         case  VK_NUMPAD3 : keyname =  "VK_NUMPAD3"; break;
-         case  VK_NUMPAD4 : keyname =  "VK_NUMPAD4"; break;
-         case  VK_NUMPAD5 : keyname =  "VK_NUMPAD5"; break;
-         case  VK_NUMPAD6 : keyname =  "VK_NUMPAD6"; break;
-         case  VK_NUMPAD7 : keyname =  "VK_NUMPAD7"; break;
-         case  VK_NUMPAD8 : keyname =  "VK_NUMPAD8"; break;
-         case  VK_NUMPAD9 : keyname =  "VK_NUMPAD9"; break;
-         case  VK_MULTIPLY: keyname =  "VK_MULTIPLY"; break;
-         case  VK_ADD     : keyname =  "VK_ADD"; break;
-         case  VK_SEPARATOR: keyname = "VK_SEPARATOR"; break;
-         case  VK_SUBTRACT: keyname =  "VK_SUBTRACT"; break;
-         case  VK_DECIMAL : keyname =  "VK_DECIMAL"; break;
-         case  VK_DIVIDE  : keyname =  "VK_DIVIDE"; break;
-         case  VK_F1      : keyname =  "VK_F1"; break;
-         case  VK_F2      : keyname =  "VK_F2"; break;
-         case  VK_F3      : keyname =  "VK_F3"; break;
-         case  VK_F4      : keyname =  "VK_F4"; break;
-         case  VK_F5      : keyname =  "VK_F5"; break;
-         case  VK_F6      : keyname =  "VK_F6"; break;
-         case  VK_F7      : keyname =  "VK_F7"; break;
-         case  VK_F8      : keyname =  "VK_F8"; break;
-         case  VK_F9      : keyname =  "VK_F9"; break;
-         case  VK_F10     : keyname =  "VK_F10"; break;
-         case  VK_F11     : keyname =  "VK_F11"; break;
-         case  VK_F12     : keyname =  "VK_F12"; break;
-         case  VK_F13     : keyname =  "VK_F13"; break;
-         case  VK_F14     : keyname =  "VK_F14"; break;
-         case  VK_F15     : keyname =  "VK_F15"; break;
-         case  VK_F16     : keyname =  "VK_F16"; break;
-         case  VK_F17     : keyname =  "VK_F17"; break;
-         case  VK_F18     : keyname =  "VK_F18"; break;
-         case  VK_F19     : keyname =  "VK_F19"; break;
-         case  VK_F20     : keyname =  "VK_F20"; break;
-         case  VK_F21     : keyname =  "VK_F21"; break;
-         case  VK_F22     : keyname =  "VK_F22"; break;
-         case  VK_F23     : keyname =  "VK_F23"; break;
-         case  VK_F24     : keyname =  "VK_F24"; break;
-         case  VK_NUMLOCK : keyname =  "VK_NUMLOCK"; break;
-         case  VK_SCROLL  : keyname =  "VK_SCROLL"; break;
-         case  VK_LSHIFT  : keyname =  "VK_LSHIFT"; break;
-         case  VK_RSHIFT  : keyname =  "VK_RSHIFT"; break;
-         case  VK_LCONTROL: keyname =  "VK_LCONTROL"; break;
-         case  VK_RCONTROL: keyname =  "VK_RCONTROL"; break;
-/*       case  VK_LMENU   : keyname =  "VK_LMENU"; break; */
-/*       case  VK_RMENU   : keyname =  "VK_RMENU"; break;*/
-         default: keyname = "<unknown>"; break;
-      }
-   return keyname;
+    char *keyname;
+    switch(vk)
+    {
+        case  VK_LBUTTON : keyname =  "VK_LBUTTON"; break;
+        case  VK_RBUTTON : keyname =  "VK_RBUTTON"; break;
+        case  VK_CANCEL  : keyname =  "VK_CANCEL"; break;
+        case  VK_MBUTTON : keyname =  "VK_MBUTTON"; break;
+            /*       case  VK_BACK    : keyname =  "VK_BACK"; break;*/
+        case  VK_TAB     : keyname =  "VK_TAB"; break;
+        case  VK_CLEAR   : keyname =  "VK_CLEAR"; break;
+        case  VK_RETURN  : keyname =  "VK_RETURN"; break;
+            /*       case  VK_MENU    : keyname =  "VK_MENU"; break;*/
+        case  VK_PAUSE   : keyname =  "VK_PAUSE"; break;
+        case  VK_CAPITAL : keyname =  "VK_CAPITAL"; break;
+        case  VK_ESCAPE  : keyname =  "VK_ESCAPE"; break;
+        case  VK_SPACE   : keyname =  "VK_SPACE"; break;
+        case  VK_PRIOR   : keyname =  "VK_PRIOR"; break;
+        case  VK_NEXT    : keyname =  "VK_NEXT"; break;
+        case  VK_END     : keyname =  "VK_END"; break;
+        case  VK_HOME    : keyname =  "VK_HOME"; break;
+        case  VK_LEFT    : keyname =  "VK_LEFT"; break;
+        case  VK_UP      : keyname =  "VK_UP"; break;
+        case  VK_RIGHT   : keyname =  "VK_RIGHT"; break;
+        case  VK_DOWN    : keyname =  "VK_DOWN"; break;
+        case  VK_SELECT  : keyname =  "VK_SELECT"; break;
+        case  VK_PRINT   : keyname =  "VK_PRINT"; break;
+        case  VK_EXECUTE : keyname =  "VK_EXECUTE"; break;
+        case  VK_SNAPSHOT: keyname =  "VK_SNAPSHOT"; break;
+        case  VK_INSERT  : keyname =  "VK_INSERT"; break;
+        case  VK_DELETE  : keyname =  "VK_DELETE"; break;
+        case  VK_HELP    : keyname =  "VK_HELP"; break;
+        case  VK_LWIN    : keyname =  "VK_LWIN"; break;
+        case  VK_RWIN    : keyname =  "VK_RWIN"; break;
+        case  VK_NUMPAD0 : keyname =  "VK_NUMPAD0"; break;
+        case  VK_NUMPAD1 : keyname =  "VK_NUMPAD1"; break;
+        case  VK_NUMPAD2 : keyname =  "VK_NUMPAD2"; break;
+        case  VK_NUMPAD3 : keyname =  "VK_NUMPAD3"; break;
+        case  VK_NUMPAD4 : keyname =  "VK_NUMPAD4"; break;
+        case  VK_NUMPAD5 : keyname =  "VK_NUMPAD5"; break;
+        case  VK_NUMPAD6 : keyname =  "VK_NUMPAD6"; break;
+        case  VK_NUMPAD7 : keyname =  "VK_NUMPAD7"; break;
+        case  VK_NUMPAD8 : keyname =  "VK_NUMPAD8"; break;
+        case  VK_NUMPAD9 : keyname =  "VK_NUMPAD9"; break;
+        case  VK_MULTIPLY: keyname =  "VK_MULTIPLY"; break;
+        case  VK_ADD     : keyname =  "VK_ADD"; break;
+        case  VK_SEPARATOR: keyname = "VK_SEPARATOR"; break;
+        case  VK_SUBTRACT: keyname =  "VK_SUBTRACT"; break;
+        case  VK_DECIMAL : keyname =  "VK_DECIMAL"; break;
+        case  VK_DIVIDE  : keyname =  "VK_DIVIDE"; break;
+        case  VK_F1      : keyname =  "VK_F1"; break;
+        case  VK_F2      : keyname =  "VK_F2"; break;
+        case  VK_F3      : keyname =  "VK_F3"; break;
+        case  VK_F4      : keyname =  "VK_F4"; break;
+        case  VK_F5      : keyname =  "VK_F5"; break;
+        case  VK_F6      : keyname =  "VK_F6"; break;
+        case  VK_F7      : keyname =  "VK_F7"; break;
+        case  VK_F8      : keyname =  "VK_F8"; break;
+        case  VK_F9      : keyname =  "VK_F9"; break;
+        case  VK_F10     : keyname =  "VK_F10"; break;
+        case  VK_F11     : keyname =  "VK_F11"; break;
+        case  VK_F12     : keyname =  "VK_F12"; break;
+        case  VK_F13     : keyname =  "VK_F13"; break;
+        case  VK_F14     : keyname =  "VK_F14"; break;
+        case  VK_F15     : keyname =  "VK_F15"; break;
+        case  VK_F16     : keyname =  "VK_F16"; break;
+        case  VK_F17     : keyname =  "VK_F17"; break;
+        case  VK_F18     : keyname =  "VK_F18"; break;
+        case  VK_F19     : keyname =  "VK_F19"; break;
+        case  VK_F20     : keyname =  "VK_F20"; break;
+        case  VK_F21     : keyname =  "VK_F21"; break;
+        case  VK_F22     : keyname =  "VK_F22"; break;
+        case  VK_F23     : keyname =  "VK_F23"; break;
+        case  VK_F24     : keyname =  "VK_F24"; break;
+        case  VK_NUMLOCK : keyname =  "VK_NUMLOCK"; break;
+        case  VK_SCROLL  : keyname =  "VK_SCROLL"; break;
+        case  VK_LSHIFT  : keyname =  "VK_LSHIFT"; break;
+        case  VK_RSHIFT  : keyname =  "VK_RSHIFT"; break;
+        case  VK_LCONTROL: keyname =  "VK_LCONTROL"; break;
+        case  VK_RCONTROL: keyname =  "VK_RCONTROL"; break;
+            /*       case  VK_LMENU   : keyname =  "VK_LMENU"; break; */
+            /*       case  VK_RMENU   : keyname =  "VK_RMENU"; break;*/
+        default: keyname = "<unknown>"; break;
+    }
+    return keyname;
 }
 
 char *resolve_keymodifiers( int mask )
 {
-   if ( (mask & KC_CTRL) && (mask & KC_SHIFT) && (mask & KC_ALT) )
-      return "KC_CTRL KC_SHIFT KC_ALT";
-   else if ( (mask & KC_CTRL) && (mask & KC_SHIFT) )
-      return "KC_CTRL KC_SHIFT";
-   else if ( (mask & KC_CTRL) && (mask & KC_ALT) )
-      return "KC_CTRL KC_ALT";
-   else if ( (mask & KC_SHIFT) && (mask & KC_ALT) )
-      return "KC_SHIFT KC_ALT";
-   else if ( (mask & KC_SHIFT) )
-      return "KC_SHIFT";
-   else if ( (mask & KC_CTRL) )
-      return "KC_CTRL";
-   else if ( (mask & KC_ALT) )
-      return "KC_ALT";
-   else return "none";
+    if ( (mask & KC_CTRL) && (mask & KC_SHIFT) && (mask & KC_ALT) )
+        return "KC_CTRL KC_SHIFT KC_ALT";
+    else if ( (mask & KC_CTRL) && (mask & KC_SHIFT) )
+        return "KC_CTRL KC_SHIFT";
+    else if ( (mask & KC_CTRL) && (mask & KC_ALT) )
+        return "KC_CTRL KC_ALT";
+    else if ( (mask & KC_SHIFT) && (mask & KC_ALT) )
+        return "KC_SHIFT KC_ALT";
+    else if ( (mask & KC_SHIFT) )
+        return "KC_SHIFT";
+    else if ( (mask & KC_CTRL) )
+        return "KC_CTRL";
+    else if ( (mask & KC_ALT) )
+        return "KC_ALT";
+    else return "none";
 }
 
+void update_render(void);
+
 /* This gets called when a part of the graph needs to be repainted. */
 int DWSIGNAL text_expose(HWND hwnd, DWExpose *exp, void *data)
 {
-   HPIXMAP hpm;
-   unsigned long width,height;
-
-   if ( hwnd == textbox1 )
-      hpm = text1pm;
-   else if ( hwnd == textbox2 )
-      hpm = text2pm;
-   else
-      return TRUE;
-
-   width = (int)DW_PIXMAP_WIDTH(hpm);
-   height = (int)DW_PIXMAP_HEIGHT(hpm);
-
-   dw_pixmap_bitblt(hwnd, NULL, 0, 0, (int)width, (int)height, 0, hpm, 0, 0 );
-   dw_flush();
-   return TRUE;
+    if(render_type != 1)
+    {
+        HPIXMAP hpm;
+        unsigned long width,height;
+        
+        if ( hwnd == textbox1 )
+            hpm = text1pm;
+        else if ( hwnd == textbox2 )
+            hpm = text2pm;
+        else
+            return TRUE;
+        
+        width = (int)DW_PIXMAP_WIDTH(hpm);
+        height = (int)DW_PIXMAP_HEIGHT(hpm);
+        
+        dw_pixmap_bitblt(hwnd, NULL, 0, 0, (int)width, (int)height, 0, hpm, 0, 0 );
+        dw_flush();
+    }
+    else
+    {
+        update_render();
+    }
+    return TRUE;
 }
 
 void read_file( void )
 {
-   int i,len;
-   fp = fopen( current_file, "r" );
-   lp = (char **)calloc( 1000,sizeof(char *));
-   /* should test for out of memory */
-   max_linewidth=0;
-   for ( i = 0; i < 1000; i++ )
-   {
-      lp[i] = (char *)calloc(1, 1025);
-      if ( fgets( lp[i], 1024, fp ) == NULL )
-         break;
-      len = strlen( lp[i] );
-      if ( len > max_linewidth )
-         max_linewidth = len;
-      if ( lp[i][len - 1] == '\n' )
-         lp[i][len - 1] = '\0';
-   }
-   num_lines = i;
-   fclose( fp );
-   dw_scrollbar_set_range(hscrollbar, max_linewidth, cols);
-   dw_scrollbar_set_pos(hscrollbar, 0);
-   dw_scrollbar_set_range(vscrollbar, num_lines, rows);
-   dw_scrollbar_set_pos(vscrollbar, 0);
+    int i,len;
+    fp = fopen( current_file, "r" );
+    lp = (char **)calloc( 1000,sizeof(char *));
+    /* should test for out of memory */
+    max_linewidth=0;
+    for ( i = 0; i < 1000; i++ )
+    {
+        lp[i] = (char *)calloc(1, 1025);
+        if ( fgets( lp[i], 1024, fp ) == NULL )
+            break;
+        len = (int)strlen( lp[i] );
+        if ( len > max_linewidth )
+            max_linewidth = len;
+        if ( lp[i][len - 1] == '\n' )
+            lp[i][len - 1] = '\0';
+    }
+    num_lines = i;
+    fclose( fp );
+    dw_scrollbar_set_range(hscrollbar, max_linewidth, cols);
+    dw_scrollbar_set_pos(hscrollbar, 0);
+    dw_scrollbar_set_range(vscrollbar, num_lines, rows);
+    dw_scrollbar_set_pos(vscrollbar, 0);
 }
 
 void draw_file( int row, int col )
 {
-   char buf[10];
-   int i,y,fileline;
-   char *pLine;
-
-   if ( current_file )
-   {
-      dw_color_foreground_set(DW_CLR_WHITE);
-      dw_draw_rect(0, text1pm, TRUE, 0, 0, (int)DW_PIXMAP_WIDTH(text1pm), (int)DW_PIXMAP_HEIGHT(text1pm));
-      dw_draw_rect(0, text2pm, TRUE, 0, 0, (int)DW_PIXMAP_WIDTH(text2pm), (int)DW_PIXMAP_HEIGHT(text2pm));
+    char buf[10];
+    int i,y,fileline;
+    char *pLine;
+    
+    if ( current_file )
+    {
+        dw_color_foreground_set(DW_CLR_WHITE);
+        dw_draw_rect(0, text1pm, TRUE, 0, 0, (int)DW_PIXMAP_WIDTH(text1pm), (int)DW_PIXMAP_HEIGHT(text1pm));
+        dw_draw_rect(0, text2pm, TRUE, 0, 0, (int)DW_PIXMAP_WIDTH(text2pm), (int)DW_PIXMAP_HEIGHT(text2pm));
+        
+        for ( i = 0;(i < rows) && (i+row < num_lines); i++)
+        {
+            fileline = i + row - 1;
+            y = i*font_height;
+            dw_color_background_set( 1 + (fileline % 15) );
+            dw_color_foreground_set( fileline < 0 ? DW_CLR_WHITE : fileline % 16 );
+            sprintf( buf, "%6.6d", i+row );
+            dw_draw_text( 0, text1pm, 0, y, buf);
+            pLine = lp[i+row];
+            dw_draw_text( 0, text2pm, 0, y, pLine+col );
+        }
+        text_expose( textbox1, NULL, NULL);
+        text_expose( textbox2, NULL, NULL);
+    }
+}
 
-      for ( i = 0;(i < rows) && (i+row < num_lines); i++)
-      {
-         fileline = i + row - 1;
-         y = i*font_height;
-         dw_color_background_set( 1 + (fileline % 15) );
-         dw_color_foreground_set( fileline < 0 ? DW_CLR_WHITE : fileline % 16 );
-         sprintf( buf, "%6.6d", i+row );
-         dw_draw_text( 0, text1pm, 0, y, buf);
-         pLine = lp[i+row];
-         dw_draw_text( 0, text2pm, 0, y, pLine+col );
-      }
-      text_expose( textbox1, NULL, NULL);
-      text_expose( textbox2, NULL, NULL);
-   }
+void draw_shapes(int direct)
+{
+    int width = (int)DW_PIXMAP_WIDTH(text2pm), height = (int)DW_PIXMAP_HEIGHT(text2pm);
+    HPIXMAP pixmap = direct ? NULL : text2pm;
+    HWND window = direct ? textbox2 : 0;
+    
+    dw_color_foreground_set(DW_CLR_WHITE);
+    dw_draw_rect(window, pixmap, TRUE, 0, 0, width, height);
+    dw_color_foreground_set(DW_CLR_DARKPINK);
+    dw_draw_rect(window, pixmap, TRUE, 10, 10, width - 20, height - 20);
+    dw_color_foreground_set(DW_CLR_GREEN);
+    dw_color_background_set(DW_CLR_DARKRED);
+    dw_draw_text(window, pixmap, 10, 10, "This should be aligned with the edges.");
+    
+    /* If we aren't drawing direct do a bitblt */
+    if(!direct)
+    {
+        text_expose( textbox2, NULL, NULL);
+    }
 }
 
+void update_render(void)
+{
+    switch(render_type)
+    {
+        case 0:
+            draw_shapes(FALSE);
+            break;
+        case 1:
+            draw_shapes(TRUE);
+            break;
+        case 2:
+            draw_file(current_row, current_col);
+            break;
+    }
+}
+
+int DWSIGNAL refresh_callback(HWND window, void *data)
+{
+    update_render();
+    return FALSE;
+}
+
+int DWSIGNAL render_select_event_callback(HWND window, int index)
+{
+    if(index != render_type)
+    {
+        if(index == 2)
+        {
+            dw_scrollbar_set_range(hscrollbar, max_linewidth, cols);
+            dw_scrollbar_set_pos(hscrollbar, 0);
+            dw_scrollbar_set_range(vscrollbar, num_lines, rows);
+            dw_scrollbar_set_pos(vscrollbar, 0);
+            current_col = current_row = 0;
+        }
+        else
+        {
+            dw_scrollbar_set_range(hscrollbar, 0, 0);
+            dw_scrollbar_set_pos(hscrollbar, 0);
+            dw_scrollbar_set_range(vscrollbar, 0, 0);
+            dw_scrollbar_set_pos(vscrollbar, 0);
+        }
+        render_type = index;
+        update_render();
+    }
+    return FALSE;
+}
 
 int DWSIGNAL colorchoose_callback(HWND window, void *data)
 {
-   current_color = dw_color_choose(current_color);
-   return FALSE;
+    current_color = dw_color_choose(current_color);
+    return FALSE;
 }
 
 int DWSIGNAL cursortoggle_callback(HWND window, void *data)
 {
-   if(cursor_arrow)
-   {
-      dw_window_set_text((HWND)cursortogglebutton,"Set Cursor pointer - ARROW");
-      dw_window_set_pointer((HWND)data,DW_POINTER_CLOCK);
-      cursor_arrow = 0;
-   }
-   else
-   {
-      dw_window_set_text((HWND)cursortogglebutton,"Set Cursor pointer - CLOCK");
-      dw_window_set_pointer((HWND)data,DW_POINTER_DEFAULT);
-      cursor_arrow = 1;
-   }
-   return FALSE;
+    if(cursor_arrow)
+    {
+        dw_window_set_text((HWND)cursortogglebutton,"Set Cursor pointer - ARROW");
+        dw_window_set_pointer((HWND)data,DW_POINTER_CLOCK);
+        cursor_arrow = 0;
+    }
+    else
+    {
+        dw_window_set_text((HWND)cursortogglebutton,"Set Cursor pointer - CLOCK");
+        dw_window_set_pointer((HWND)data,DW_POINTER_DEFAULT);
+        cursor_arrow = 1;
+    }
+    return FALSE;
 }
 
 int DWSIGNAL beep_callback(HWND window, void *data)
 {
-   dw_timer_disconnect( timerid );
-   return TRUE;
+    dw_timer_disconnect( timerid );
+    return TRUE;
 }
 
 int DWSIGNAL keypress_callback(HWND window, char ch, int vk, int state, void *data)
 {
-   char tmpbuf[100];
-   if ( ch )
-      sprintf( tmpbuf, "Key: %c(%d) Modifiers: %s(%d)", ch, ch, resolve_keymodifiers(state), state );
-   else
-      sprintf( tmpbuf, "Key: %s(%d) Modifiers: %s(%d)", resolve_keyname(vk), vk, resolve_keymodifiers(state), state );
-   dw_window_set_text( status, tmpbuf);
-   return 0;
+    char tmpbuf[100];
+    if ( ch )
+        sprintf( tmpbuf, "Key: %c(%d) Modifiers: %s(%d)", ch, ch, resolve_keymodifiers(state), state );
+    else
+        sprintf( tmpbuf, "Key: %s(%d) Modifiers: %s(%d)", resolve_keyname(vk), vk, resolve_keymodifiers(state), state );
+    dw_window_set_text( status1, tmpbuf);
+    return 0;
 }
 
 int DWSIGNAL menu_callback(HWND window, void *data)
 {
-   char buf[100];
-
-   sprintf( buf, "%s menu item selected", (char *)data );
-   dw_messagebox( "Menu Item Callback", DW_MB_OK | DW_MB_INFORMATION, buf );
-   return 0;
+    char buf[100];
+    
+    sprintf( buf, "%s menu item selected", (char *)data );
+    dw_messagebox( "Menu Item Callback", DW_MB_OK | DW_MB_INFORMATION, buf );
+    return 0;
 }
 
 int DWSIGNAL menutoggle_callback(HWND window, void *data)
 {
-   if ( menu_enabled )
-   {
-      dw_menu_item_set_state( changeable_menu, CHECKABLE_MENUITEMID, DW_MIS_DISABLED );
-      dw_menu_item_set_state( changeable_menu, NONCHECKABLE_MENUITEMID, DW_MIS_DISABLED );
-      menu_enabled = 0;
-   }
-   else
-   {
-      dw_menu_item_set_state( changeable_menu, CHECKABLE_MENUITEMID, DW_MIS_ENABLED );
-      dw_menu_item_set_state( changeable_menu, NONCHECKABLE_MENUITEMID, DW_MIS_ENABLED );
-      menu_enabled = 1;
-   }
-   return 0;
+    if ( menu_enabled )
+    {
+        dw_menu_item_set_state( changeable_menu, CHECKABLE_MENUITEMID, DW_MIS_DISABLED );
+        dw_menu_item_set_state( changeable_menu, NONCHECKABLE_MENUITEMID, DW_MIS_DISABLED );
+        menu_enabled = 0;
+    }
+    else
+    {
+        dw_menu_item_set_state( changeable_menu, CHECKABLE_MENUITEMID, DW_MIS_ENABLED );
+        dw_menu_item_set_state( changeable_menu, NONCHECKABLE_MENUITEMID, DW_MIS_ENABLED );
+        menu_enabled = 1;
+    }
+    return 0;
 }
 
 int DWSIGNAL helpabout_callback(HWND window, void *data)
 {
-   char buf[100];
-   DWEnv env;
-
-   dw_environment_query(&env);
-   sprintf( buf, "dwindows test\n\nOS: %s %s %s Version: %d.%d.%d.%d\n\ndwindows Version: %d.%d.%d",
+    char buf[100];
+    DWEnv env;
+    
+    dw_environment_query(&env);
+    sprintf( buf, "dwindows test\n\nOS: %s %s %s Version: %d.%d.%d.%d\n\ndwindows Version: %d.%d.%d",
             env.osName, env.buildDate, env.buildTime,
             env.MajorVersion, env.MinorVersion, env.MajorBuild, env.MinorBuild,
             env.DWMajorVersion, env.DWMinorVersion, env.DWSubVersion );
-   dw_messagebox( "About dwindows", DW_MB_OK | DW_MB_INFORMATION, buf );
-   return 0;
+    dw_messagebox( "About dwindows", DW_MB_OK | DW_MB_INFORMATION, buf );
+    return 0;
 }
 
 int DWSIGNAL exit_callback(HWND window, void *data)
 {
-   dw_window_destroy((HWND)data);
-   exit(0);
-   return -1;
+    dw_window_destroy((HWND)data);
+    exit(0);
+    return -1;
 }
 
 int DWSIGNAL test_callback(HWND window, void *data)
 {
-   dw_window_destroy((HWND)data);
-   if ( current_file )
-      dw_free( current_file );
-   exit(0);
-   return -1;
+    dw_window_destroy((HWND)data);
+    if ( current_file )
+        dw_free( current_file );
+    exit(0);
+    return -1;
 }
 
 int DWSIGNAL browse_file_callback(HWND window, void *data)
 {
-   char *tmp;
-   tmp = dw_file_browse("Pick a file", ".", "c", DW_FILE_OPEN );
-   if ( tmp )
-   {
-      if ( current_file )
-      {
-         dw_free( current_file );
-      }
-      current_file = tmp;
-      dw_window_set_text( entryfield, current_file );
-      read_file();
-      draw_file(0,0);
-   }
-   return 0;
+    char *tmp;
+    tmp = dw_file_browse("Pick a file", ".", "c", DW_FILE_OPEN );
+    if ( tmp )
+    {
+        if ( current_file )
+        {
+            dw_free( current_file );
+        }
+        current_file = tmp;
+        dw_window_set_text( entryfield, current_file );
+        read_file();
+        current_col = current_row = 0;
+        update_render();
+    }
+    return 0;
 }
 
 int DWSIGNAL browse_folder_callback(HWND window, void *data)
 {
-   char *tmp = dw_file_browse("Pick a folder", ".", "c", DW_DIRECTORY_OPEN );
-   printf("Folder picked: %s\n", tmp ? tmp : "None");
-   return 0;
+    char *tmp = dw_file_browse("Pick a folder", ".", "c", DW_DIRECTORY_OPEN );
+    printf("Folder picked: %s\n", tmp ? tmp : "None");
+    return 0;
 }
 
 int DWSIGNAL button_callback(HWND window, void *data)
 {
-   unsigned int y,m,d;
-   unsigned int idx;
-   int len;
-   long spvalue;
-   char buf1[100];
-   char buf2[100];
-   char buf3[500];
-
-   idx = dw_listbox_selected( combobox1 );
-   dw_listbox_get_text( combobox1, idx, buf1, 99 );
-   idx = dw_listbox_selected( combobox2 );
-   dw_listbox_get_text( combobox2, idx, buf2, 99 );
-   dw_calendar_get_date( cal, &y, &m, &d );
-   spvalue = dw_spinbutton_get_pos( spinbutton );
-   len = sprintf( buf3, "spinbutton: %ld\ncombobox1: \"%s\"\ncombobox2: \"%s\"\ncalendar: %d-%d-%d",
+    unsigned int y,m,d;
+    unsigned int idx;
+    int len;
+    long spvalue;
+    char buf1[100];
+    char buf2[100];
+    char buf3[500];
+    
+    idx = dw_listbox_selected( combobox1 );
+    dw_listbox_get_text( combobox1, idx, buf1, 99 );
+    idx = dw_listbox_selected( combobox2 );
+    dw_listbox_get_text( combobox2, idx, buf2, 99 );
+    dw_calendar_get_date( cal, &y, &m, &d );
+    spvalue = dw_spinbutton_get_pos( spinbutton );
+    len = sprintf( buf3, "spinbutton: %ld\ncombobox1: \"%s\"\ncombobox2: \"%s\"\ncalendar: %d-%d-%d",
                   spvalue,
                   buf1, buf2,
                   y, m, d );
-   dw_messagebox( "Values", DW_MB_OK | DW_MB_INFORMATION, buf3 );
-   dw_clipboard_set_text( buf3, len );
-   return 0;
+    dw_messagebox( "Values", DW_MB_OK | DW_MB_INFORMATION, buf3 );
+    dw_clipboard_set_text( buf3, len );
+    return 0;
 }
 
 int DWSIGNAL redraw_button_box_callback(HWND window, void *data)
 {
 #if 0
-
-   long x, y, width, height;
-   dw_window_get_pos_size(filetoolbarbox , &x, &y, &width, &height);
-   dw_window_destroy( filetoolbarbox );
-   create_button(1);
-   dw_window_set_pos_size(filetoolbarbox, x, y, width, height);
+    
+    long x, y, width, height;
+    dw_window_get_pos_size(filetoolbarbox , &x, &y, &width, &height);
+    dw_window_destroy( filetoolbarbox );
+    create_button(1);
+    dw_window_set_pos_size(filetoolbarbox, x, y, width, height);
 #else
-   dw_window_enable( window);
-   dw_window_destroy( noncheckable_menuitem );
+    dw_window_enable( window);
+    dw_window_destroy( noncheckable_menuitem );
 #endif
-   return 0;
+    return 0;
 }
 
 int DWSIGNAL change_color_red_callback(HWND window, void *data)
 {
-   dw_window_set_color(buttonsbox, DW_CLR_RED, DW_CLR_RED);
-   return 0;
+    dw_window_set_color(buttonsbox, DW_CLR_RED, DW_CLR_RED);
+    return 0;
 }
 
 int DWSIGNAL change_color_yellow_callback(HWND window, void *data)
 {
-   dw_window_set_color(buttonsbox, DW_CLR_YELLOW, DW_CLR_YELLOW);
-   return 0;
+    dw_window_set_color(buttonsbox, DW_CLR_YELLOW, DW_CLR_YELLOW);
+    return 0;
 }
 
 
 /* Callback to handle user selection of the scrollbar position */
 void DWSIGNAL scrollbar_valuechanged_callback(HWND hwnd, int value, void *data)
 {
-   if(data)
-   {
-      HWND stext = (HWND)data;
-      char tmpbuf[100];
-      if ( hwnd == vscrollbar )
-      {
-         current_row = value;
-      }
-      else
-      {
-         current_col = value;
-      }
-      sprintf(tmpbuf, "Row:%d Col:%d Lines:%d Cols:%d", current_row,current_col,num_lines,max_linewidth);
-      dw_window_set_text(stext, tmpbuf);
-      draw_file( current_row, current_col);
-   }
+    if(data)
+    {
+        HWND stext = (HWND)data;
+        char tmpbuf[100];
+        if ( hwnd == vscrollbar )
+        {
+            current_row = value;
+        }
+        else
+        {
+            current_col = value;
+        }
+        sprintf(tmpbuf, "Row:%d Col:%d Lines:%d Cols:%d", current_row,current_col,num_lines,max_linewidth);
+        dw_window_set_text(stext, tmpbuf);
+        update_render();
+    }
 }
 
 /* Callback to handle user selection of the spinbutton position */
 void DWSIGNAL spinbutton_valuechanged_callback(HWND hwnd, int value, void *data)
 {
-   dw_messagebox("DWTest", DW_MB_OK, "New value from spinbutton: %d\n", value);
+    dw_messagebox("DWTest", DW_MB_OK, "New value from spinbutton: %d\n", value);
 }
 
 /* Callback to handle user selection of the slider position */
 void DWSIGNAL slider_valuechanged_callback(HWND hwnd, int value, void *data)
 {
-   dw_messagebox("DWTest", DW_MB_OK, "New value from slider: %d\n", value);
+    dw_messagebox("DWTest", DW_MB_OK, "New value from slider: %d\n", value);
 }
 
 /* Handle size change of the main render window */
 int DWSIGNAL configure_event(HWND hwnd, int width, int height, void *data)
 {
-   HPIXMAP old1 = text1pm, old2 = text2pm;
-   unsigned long depth = dw_color_depth_get();
-
-   rows = height / font_height;
-   cols = width / font_width;
-
-   /* Create new pixmaps with the current sizes */
-   text1pm = dw_pixmap_new(textbox1, (unsigned long)(font_width*(width1)), (unsigned long)height, (int)depth);
-   text2pm = dw_pixmap_new(textbox2, (unsigned long)width, (unsigned long)height, (int)depth);
-
-   /* Destroy the old pixmaps */
-   dw_pixmap_destroy(old1);
-   dw_pixmap_destroy(old2);
-
-   /* Update scrollbar ranges with new values */
-   dw_scrollbar_set_range(hscrollbar, max_linewidth, cols);
-   dw_scrollbar_set_range(vscrollbar, num_lines, rows);
-
-   /* Redraw the window */
-   draw_file( current_row, current_col);
-   return TRUE;
+    HPIXMAP old1 = text1pm, old2 = text2pm;
+    unsigned long depth = dw_color_depth_get();
+    
+    rows = height / font_height;
+    cols = width / font_width;
+    
+    /* Create new pixmaps with the current sizes */
+    text1pm = dw_pixmap_new(textbox1, (unsigned long)(font_width*(width1)), (unsigned long)height, (int)depth);
+    text2pm = dw_pixmap_new(textbox2, (unsigned long)width, (unsigned long)height, (int)depth);
+    
+    /* Destroy the old pixmaps */
+    dw_pixmap_destroy(old1);
+    dw_pixmap_destroy(old2);
+    
+    /* Update scrollbar ranges with new values */
+    dw_scrollbar_set_range(hscrollbar, max_linewidth, cols);
+    dw_scrollbar_set_range(vscrollbar, num_lines, rows);
+    
+    /* Redraw the window */
+    update_render();
+    return TRUE;
 }
 
 int DWSIGNAL item_enter_cb( HWND window, char *text, void *data )
 {
-   char buf[200];
-   HWND statline = (HWND)data;
-
-   sprintf(buf,"DW_SIGNAL_ITEM_ENTER: Window: %x Text: %s", (unsigned int)window, text );
-   dw_window_set_text( statline, buf);
-   return 0;
+    char buf[200];
+    HWND statline = (HWND)data;
+    
+    sprintf(buf,"DW_SIGNAL_ITEM_ENTER: Window: %x Text: %s", (unsigned int)window, text );
+    dw_window_set_text( statline, buf);
+    return 0;
 }
 
 int DWSIGNAL item_context_cb( HWND window, char *text, int x, int y, void *data, void *itemdata )
 {
-   char buf[200];
-   HWND statline = (HWND)data;
-
-   sprintf(buf,"DW_SIGNAL_ITEM_CONTEXT: Window: %x Text: %s x: %d y: %d Itemdata: %x", (unsigned int)window, text, x, y, (unsigned int)itemdata );
-   dw_window_set_text( statline, buf);
-   return 0;
+    char buf[200];
+    HWND statline = (HWND)data;
+    
+    sprintf(buf,"DW_SIGNAL_ITEM_CONTEXT: Window: %x Text: %s x: %d y: %d Itemdata: %x", (unsigned int)window, text, x, y, (unsigned int)itemdata );
+    dw_window_set_text( statline, buf);
+    return 0;
 }
 
 int DWSIGNAL list_select_cb( HWND window, int item, void *data )
 {
-   char buf[200];
-   HWND statline = (HWND)data;
-
-   sprintf(buf,"DW_SIGNAL_LIST_SELECT: Window: %d Item: %d", (unsigned int)window, item );
-   dw_window_set_text( statline, buf);
-   return 0;
+    char buf[200];
+    HWND statline = (HWND)data;
+    
+    sprintf(buf,"DW_SIGNAL_LIST_SELECT: Window: %d Item: %d", (unsigned int)window, item );
+    dw_window_set_text( statline, buf);
+    return 0;
 }
 
 int DWSIGNAL item_select_cb( HWND window, HTREEITEM item, char *text, void *data, void *itemdata )
 {
-   char buf[200];
-   HWND statline = (HWND)data;
-
-   sprintf(buf,"DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
-   dw_window_set_text( statline, buf);
-   return 0;
+    char buf[200];
+    HWND statline = (HWND)data;
+    
+    sprintf(buf,"DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
+    dw_window_set_text( statline, buf);
+    return 0;
 }
 
 int DWSIGNAL container_select_cb( HWND window, HTREEITEM item, char *text, void *data, void *itemdata )
 {
-   char buf[200];
-   char *str;
-   HWND statline = (HWND)data;
-   unsigned long size;
-
-   sprintf(buf,"DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
-   dw_window_set_text( statline, buf);
-   sprintf(buf,"\r\nDW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x\r\n", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
-   mle_point = dw_mle_import( container_mle, buf, mle_point);
-   str = dw_container_query_start(container, DW_CRA_SELECTED);
-   while(str)
-   {
-      sprintf(buf,"Selected: %s\r\n", str);
-      mle_point = dw_mle_import( container_mle, buf, mle_point);
-      str = dw_container_query_next(container, DW_CRA_SELECTED);
-   }
-   /* Make the last inserted point the cursor location */
-   dw_mle_set_cursor(container_mle, mle_point);
-/* set the details of item 0 to new data */
-fprintf(stderr,"In cb: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)fileicon);
-   dw_filesystem_change_file(container, 0, "new data", fileicon);
-   size = 999;
-fprintf(stderr,"In cb: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)fileicon);
-   dw_filesystem_change_item(container, 1, 0, &size);
-   return 0;
+    char buf[200];
+    char *str;
+    HWND statline = (HWND)data;
+    unsigned long size;
+    
+    sprintf(buf,"DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
+    dw_window_set_text( statline, buf);
+    sprintf(buf,"\r\nDW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x\r\n", (unsigned int)window, (unsigned int)item, text, (unsigned int)itemdata );
+    mle_point = dw_mle_import( container_mle, buf, mle_point);
+    str = dw_container_query_start(container, DW_CRA_SELECTED);
+    while(str)
+    {
+        sprintf(buf,"Selected: %s\r\n", str);
+        mle_point = dw_mle_import( container_mle, buf, mle_point);
+        str = dw_container_query_next(container, DW_CRA_SELECTED);
+    }
+    /* Make the last inserted point the cursor location */
+    dw_mle_set_cursor(container_mle, mle_point);
+    /* set the details of item 0 to new data */
+    fprintf(stderr,"In cb: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)fileicon);
+    dw_filesystem_change_file(container, 0, "new data", fileicon);
+    size = 999;
+    fprintf(stderr,"In cb: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)fileicon);
+    dw_filesystem_change_item(container, 1, 0, &size);
+    return 0;
 }
 
 int DWSIGNAL switch_page_cb( HWND window, unsigned long page_num, void *itemdata )
 {
-   FILE *fp=fopen("log","a");
-   fprintf(fp,"DW_SIGNAL_SWITCH_PAGE: Window: %x PageNum: %u Itemdata: %x\n", (unsigned int)window, (unsigned int)page_num, (unsigned int)itemdata );
-   fclose(fp);
-   return 0;
+    FILE *fp=fopen("log","a");
+    fprintf(fp,"DW_SIGNAL_SWITCH_PAGE: Window: %x PageNum: %u Itemdata: %x\n", (unsigned int)window, (unsigned int)page_num, (unsigned int)itemdata );
+    fclose(fp);
+    return 0;
 }
 
 int DWSIGNAL column_click_cb( HWND window, int column_num, void *data )
 {
-   char buf[200], buf1[100];
-   HWND statline = (HWND)data;
-   int column_type;
-
-   if(column_num == 0)
-      strcpy(buf1,"Filename");
-   else
-   {
-   column_type = dw_filesystem_get_column_type( window, column_num-1 );
-   if( column_type == DW_CFA_STRING)
-      strcpy(buf1,"String");
-   else if( column_type == DW_CFA_ULONG)
-      strcpy(buf1,"ULong");
-   else if( column_type == DW_CFA_DATE)
-      strcpy(buf1,"Date");
-   else if( column_type == DW_CFA_TIME)
-      strcpy(buf1,"Time");
-   else if( column_type == DW_CFA_BITMAPORICON)
-      strcpy(buf1,"BitmapOrIcon");
-   else
-      strcpy(buf1,"Unknown");
-   }
-   sprintf(buf,"DW_SIGNAL_COLUMN_CLICK: Window: %x Column: %d Type: %s Itemdata: %x", (unsigned int)window, column_num, buf1, (unsigned int)data );
-   dw_window_set_text( statline, buf);
-   return 0;
+    char buf[200], buf1[100];
+    HWND statline = (HWND)data;
+    int column_type;
+    
+    if(column_num == 0)
+        strcpy(buf1,"Filename");
+    else
+    {
+        column_type = dw_filesystem_get_column_type( window, column_num-1 );
+        if( column_type == DW_CFA_STRING)
+            strcpy(buf1,"String");
+        else if( column_type == DW_CFA_ULONG)
+            strcpy(buf1,"ULong");
+        else if( column_type == DW_CFA_DATE)
+            strcpy(buf1,"Date");
+        else if( column_type == DW_CFA_TIME)
+            strcpy(buf1,"Time");
+        else if( column_type == DW_CFA_BITMAPORICON)
+            strcpy(buf1,"BitmapOrIcon");
+        else
+            strcpy(buf1,"Unknown");
+    }
+    sprintf(buf,"DW_SIGNAL_COLUMN_CLICK: Window: %x Column: %d Type: %s Itemdata: %x", (unsigned int)window, column_num, buf1, (unsigned int)data );
+    dw_window_set_text( statline, buf);
+    return 0;
 }
 
 int DWSIGNAL combobox_select_event_callback(HWND window, int index)
 {
-   fprintf(stderr,"got combobox_select_event for index: %d, iteration: %d\n", index, iteration++);
-   return FALSE;
+    fprintf(stderr,"got combobox_select_event for index: %d, iteration: %d\n", index, iteration++);
+    return FALSE;
 }
 
 void archive_add(void)
 {
-   HWND browsefilebutton, browsefolderbutton, browsebox;
-
-   lbbox = dw_box_new(BOXVERT, 10);
-
-   dw_box_pack_start(notebookbox1, lbbox, 150, 70, TRUE, TRUE, 0);
-
-   /* Archive Name */
-   stext = dw_text_new("File to browse", 0);
-
-   dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER);
-
-   dw_box_pack_start(lbbox, stext, 130, 15, TRUE, TRUE, 2);
-
-   browsebox = dw_box_new(BOXHORZ, 0);
-
-   dw_box_pack_start(lbbox, browsebox, 0, 0, TRUE, TRUE, 0);
-
-   entryfield = dw_entryfield_new("", 100L);
-
-   dw_entryfield_set_limit(entryfield, 260);
-
-   dw_box_pack_start(browsebox, entryfield, 100, 15, TRUE, TRUE, 4);
-
-   browsefilebutton = dw_button_new("Browse File", 1001L);
-
-   dw_box_pack_start(browsebox, browsefilebutton, 40, 15, TRUE, TRUE, 0);
-
-   browsefolderbutton = dw_button_new("Browse Folder", 1001L);
-
-   dw_box_pack_start(browsebox, browsefolderbutton, 40, 15, TRUE, TRUE, 0);
-
-   dw_window_set_color(browsebox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY);
-   dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY);
-
-   /* Buttons */
-   buttonbox = dw_box_new(BOXHORZ, 10);
-
-   dw_box_pack_start(lbbox, buttonbox, 0, 0, TRUE, TRUE, 0);
-
-   cursortogglebutton = dw_button_new("Set Cursor pointer - CLOCK", 1003L);
-   dw_box_pack_start(buttonbox, cursortogglebutton, 130, 30, TRUE, TRUE, 2);
-
-   colorchoosebutton = dw_button_new("Color Chooser Dialog", 1004L);
-   dw_box_pack_start(buttonbox, colorchoosebutton, 130, 30, TRUE, TRUE, 2);
-
-   okbutton = dw_button_new("Turn Off Annoying Beep!", 1001L);
-   dw_box_pack_start(buttonbox, okbutton, 130, 30, TRUE, TRUE, 2);
-
-   cancelbutton = dw_button_new("Exit", 1002L);
-   dw_box_pack_start(buttonbox, cancelbutton, 130, 30, TRUE, TRUE, 2);
-   dw_window_click_default( mainwindow, cancelbutton );
-
-   /* Set some nice fonts and colors */
-   dw_window_set_color(lbbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
-   dw_window_set_color(buttonbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
-   dw_window_set_color(okbutton, DW_CLR_PALEGRAY, DW_CLR_DARKCYAN);
-
-   dw_signal_connect(browsefilebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(browse_file_callback), (void *)notebookbox1);
-   dw_signal_connect(browsefolderbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(browse_folder_callback), (void *)notebookbox1);
-   dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(beep_callback), (void *)notebookbox1);
-   dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow);
-   dw_signal_connect(cursortogglebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(cursortoggle_callback), (void *)mainwindow);
-   dw_signal_connect(colorchoosebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(colorchoose_callback), (void *)mainwindow);
+    HWND browsefilebutton, browsefolderbutton, browsebox;
+    
+    lbbox = dw_box_new(BOXVERT, 10);
+    
+    dw_box_pack_start(notebookbox1, lbbox, 150, 70, TRUE, TRUE, 0);
+    
+    /* Archive Name */
+    stext = dw_text_new("File to browse", 0);
+    
+    dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER);
+    
+    dw_box_pack_start(lbbox, stext, 130, 15, TRUE, TRUE, 2);
+    
+    browsebox = dw_box_new(BOXHORZ, 0);
+    
+    dw_box_pack_start(lbbox, browsebox, 0, 0, TRUE, TRUE, 0);
+    
+    entryfield = dw_entryfield_new("", 100L);
+    
+    dw_entryfield_set_limit(entryfield, 260);
+    
+    dw_box_pack_start(browsebox, entryfield, 100, 15, TRUE, TRUE, 4);
+    
+    browsefilebutton = dw_button_new("Browse File", 1001L);
+    
+    dw_box_pack_start(browsebox, browsefilebutton, 40, 15, TRUE, TRUE, 0);
+    
+    browsefolderbutton = dw_button_new("Browse Folder", 1001L);
+    
+    dw_box_pack_start(browsebox, browsefolderbutton, 40, 15, TRUE, TRUE, 0);
+    
+    dw_window_set_color(browsebox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY);
+    dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY);
+    
+    /* Buttons */
+    buttonbox = dw_box_new(BOXHORZ, 10);
+    
+    dw_box_pack_start(lbbox, buttonbox, 0, 0, TRUE, TRUE, 0);
+    
+    cursortogglebutton = dw_button_new("Set Cursor pointer - CLOCK", 1003L);
+    dw_box_pack_start(buttonbox, cursortogglebutton, 130, 30, TRUE, TRUE, 2);
+    
+    colorchoosebutton = dw_button_new("Color Chooser Dialog", 1004L);
+    dw_box_pack_start(buttonbox, colorchoosebutton, 130, 30, TRUE, TRUE, 2);
+    
+    okbutton = dw_button_new("Turn Off Annoying Beep!", 1001L);
+    dw_box_pack_start(buttonbox, okbutton, 130, 30, TRUE, TRUE, 2);
+    
+    cancelbutton = dw_button_new("Exit", 1002L);
+    dw_box_pack_start(buttonbox, cancelbutton, 130, 30, TRUE, TRUE, 2);
+    dw_window_click_default( mainwindow, cancelbutton );
+    
+    /* Set some nice fonts and colors */
+    dw_window_set_color(lbbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
+    dw_window_set_color(buttonbox, DW_CLR_DARKCYAN, DW_CLR_PALEGRAY);
+    dw_window_set_color(okbutton, DW_CLR_PALEGRAY, DW_CLR_DARKCYAN);
+    
+    dw_signal_connect(browsefilebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(browse_file_callback), (void *)notebookbox1);
+    dw_signal_connect(browsefolderbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(browse_folder_callback), (void *)notebookbox1);
+    dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(beep_callback), (void *)notebookbox1);
+    dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow);
+    dw_signal_connect(cursortogglebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(cursortoggle_callback), (void *)mainwindow);
+    dw_signal_connect(colorchoosebutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(colorchoose_callback), (void *)mainwindow);
 }
 
+int API motion_notify_event(HWND window, int x, int y, int buttonmask, void *data)
+{
+    char buf[200];
+    sprintf(buf, "%s: %dx%d", data ? "motion_notify" : "button_press", x, y);
+    dw_window_set_text(status2, buf);
+    return 0;
+}
 
 void text_add(void)
 {
-   unsigned long depth = dw_color_depth_get();
-   HWND vscrollbox,hbox,spin1,button1;
-
-   /* create a box to pack into the notebook page */
-   pagebox = dw_box_new(BOXHORZ, 2);
-   dw_box_pack_start( notebookbox2, pagebox, 0, 0, TRUE, TRUE, 0);
-   /* now a status area under this box */
-   status = dw_status_text_new("", 0);
-   dw_box_pack_start( notebookbox2, status, 100, 20, TRUE, FALSE, 1);
-   /* a box with combobox and button */
-   hbox = dw_box_new(BOXHORZ, 1 );
-   dw_box_pack_start( notebookbox2, hbox, 100, 20, TRUE, FALSE, 1);
-   button1 = dw_button_new( "Does nothing", 1223L );
-   dw_box_pack_start( hbox, button1, 100, 20, TRUE, FALSE, 0);
-   spin1 = dw_spinbutton_new( "", 0 );
-   dw_box_pack_start( hbox, spin1, 100, 20, TRUE, FALSE, 0);
-   dw_spinbutton_set_limits( spin1, 100, 1 );
-   dw_spinbutton_set_pos( spin1, 1 );
-
-   /* create render box for number pixmap */
-   textbox1 = dw_render_new( 100 );
-   dw_window_set_font(textbox1, FIXEDFONT);
-   dw_font_text_extents_get(textbox1, NULL, "(g", &font_width, &font_height);
-   font_width = font_width / 2;
-   vscrollbox = dw_box_new(BOXVERT, 0);
-   dw_box_pack_start(vscrollbox, textbox1, font_width*width1, font_height*rows, FALSE, TRUE, 0);
-   dw_box_pack_start(vscrollbox, 0, (font_width*(width1+1)), SCROLLBARWIDTH, FALSE, FALSE, 0);
-   dw_box_pack_start(pagebox, vscrollbox, 0, 0, FALSE, TRUE, 0);
-
-   /* pack empty space 1 character wide */
-   dw_box_pack_start(pagebox, 0, font_width, 0, FALSE, TRUE, 0);
-
-   /* create box for filecontents and horz scrollbar */
-   textboxA = dw_box_new( BOXVERT,0 );
-   dw_box_pack_start( pagebox, textboxA, 0, 0, TRUE, TRUE, 0);
-
-   /* create render box for filecontents pixmap */
-   textbox2 = dw_render_new( 101 );
-   dw_box_pack_start( textboxA, textbox2, 10, 10, TRUE, TRUE, 0);
-   dw_window_set_font(textbox2, FIXEDFONT);
-   /* create horizonal scrollbar */
-   hscrollbar = dw_scrollbar_new(FALSE, 50);
-   dw_box_pack_start( textboxA, hscrollbar, 100, SCROLLBARWIDTH, TRUE, FALSE, 0);
-
-   /* create vertical scrollbar */
-   vscrollbox = dw_box_new(BOXVERT, 0);
-   vscrollbar = dw_scrollbar_new(TRUE, 50);
-   dw_box_pack_start(vscrollbox, vscrollbar, SCROLLBARWIDTH, 100, FALSE, TRUE, 0);
-   /* Pack an area of empty space 14x14 pixels */
-   dw_box_pack_start(vscrollbox, 0, SCROLLBARWIDTH, SCROLLBARWIDTH, FALSE, FALSE, 0);
-   dw_box_pack_start(pagebox, vscrollbox, 0, 0, FALSE, TRUE, 0);
-
-   text1pm = dw_pixmap_new( textbox1, font_width*width1, font_height*rows, depth );
-   text2pm = dw_pixmap_new( textbox2, font_width*cols, font_height*rows, depth );
-
-   dw_messagebox("DWTest", DW_MB_OK|DW_MB_INFORMATION, "Width: %d Height: %d\n", font_width, font_height);
-   dw_draw_rect(0, text1pm, TRUE, 0, 0, font_width*width1, font_height*rows);
-   dw_draw_rect(0, text2pm, TRUE, 0, 0, font_width*cols, font_height*rows);
-   dw_signal_connect(textbox1, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(text_expose), NULL);
-   dw_signal_connect(textbox2, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(text_expose), NULL);
-   dw_signal_connect(textbox2, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(configure_event), text2pm);
-   dw_signal_connect(hscrollbar, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(scrollbar_valuechanged_callback), (void *)status);
-   dw_signal_connect(vscrollbar, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(scrollbar_valuechanged_callback), (void *)status);
-
-   dw_signal_connect(mainwindow, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(keypress_callback), NULL);
+    unsigned long depth = dw_color_depth_get();
+    HWND vscrollbox, hbox, button1;
+    
+    /* create a box to pack into the notebook page */
+    pagebox = dw_box_new(BOXHORZ, 2);
+    dw_box_pack_start( notebookbox2, pagebox, 0, 0, TRUE, TRUE, 0);
+    /* now a status area under this box */
+    hbox = dw_box_new(BOXHORZ, 1 );
+    dw_box_pack_start( notebookbox2, hbox, 100, 20, TRUE, FALSE, 1);
+    status1 = dw_status_text_new("", 0);
+    dw_box_pack_start( hbox, status1, 100, 20, TRUE, FALSE, 1);
+    status2 = dw_status_text_new("", 0);
+    dw_box_pack_start( hbox, status2, 100, 20, TRUE, FALSE, 1);
+    /* a box with combobox and button */
+    hbox = dw_box_new(BOXHORZ, 1 );
+    dw_box_pack_start( notebookbox2, hbox, 100, 25, TRUE, FALSE, 1);
+    rendcombo = dw_combobox_new( "Shapes Double Buffered", 0 );
+    dw_box_pack_start( hbox, rendcombo, 100, 25, TRUE, FALSE, 0);
+    dw_listbox_append(rendcombo, "Shapes Double Buffered");
+    dw_listbox_append(rendcombo, "Shapes Direct");
+    dw_listbox_append(rendcombo, "File Display");
+    button1 = dw_button_new( "Refresh", 1223L );
+    dw_box_pack_start( hbox, button1, 50, 25, TRUE, FALSE, 0);
+    
+    /* create render box for number pixmap */
+    textbox1 = dw_render_new( 100 );
+    dw_window_set_font(textbox1, FIXEDFONT);
+    dw_font_text_extents_get(textbox1, NULL, "(g", &font_width, &font_height);
+    font_width = font_width / 2;
+    vscrollbox = dw_box_new(BOXVERT, 0);
+    dw_box_pack_start(vscrollbox, textbox1, font_width*width1, font_height*rows, FALSE, TRUE, 0);
+    dw_box_pack_start(vscrollbox, 0, (font_width*(width1+1)), SCROLLBARWIDTH, FALSE, FALSE, 0);
+    dw_box_pack_start(pagebox, vscrollbox, 0, 0, FALSE, TRUE, 0);
+    
+    /* pack empty space 1 character wide */
+    dw_box_pack_start(pagebox, 0, font_width, 0, FALSE, TRUE, 0);
+    
+    /* create box for filecontents and horz scrollbar */
+    textboxA = dw_box_new( BOXVERT,0 );
+    dw_box_pack_start( pagebox, textboxA, 0, 0, TRUE, TRUE, 0);
+    
+    /* create render box for filecontents pixmap */
+    textbox2 = dw_render_new( 101 );
+    dw_box_pack_start( textboxA, textbox2, 10, 10, TRUE, TRUE, 0);
+    dw_window_set_font(textbox2, FIXEDFONT);
+    /* create horizonal scrollbar */
+    hscrollbar = dw_scrollbar_new(FALSE, 50);
+    dw_box_pack_start( textboxA, hscrollbar, 100, SCROLLBARWIDTH, TRUE, FALSE, 0);
+    
+    /* create vertical scrollbar */
+    vscrollbox = dw_box_new(BOXVERT, 0);
+    vscrollbar = dw_scrollbar_new(TRUE, 50);
+    dw_box_pack_start(vscrollbox, vscrollbar, SCROLLBARWIDTH, 100, FALSE, TRUE, 0);
+    /* Pack an area of empty space 14x14 pixels */
+    dw_box_pack_start(vscrollbox, 0, SCROLLBARWIDTH, SCROLLBARWIDTH, FALSE, FALSE, 0);
+    dw_box_pack_start(pagebox, vscrollbox, 0, 0, FALSE, TRUE, 0);
+    
+    text1pm = dw_pixmap_new( textbox1, font_width*width1, font_height*rows, (int)depth );
+    text2pm = dw_pixmap_new( textbox2, font_width*cols, font_height*rows, (int)depth );
+    
+    dw_messagebox("DWTest", DW_MB_OK|DW_MB_INFORMATION, "Width: %d Height: %d\n", font_width, font_height);
+    dw_draw_rect(0, text1pm, TRUE, 0, 0, font_width*width1, font_height*rows);
+    dw_draw_rect(0, text2pm, TRUE, 0, 0, font_width*cols, font_height*rows);
+    dw_signal_connect(textbox1, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(text_expose), NULL);
+    dw_signal_connect(textbox2, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(text_expose), NULL);
+    dw_signal_connect(textbox2, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(configure_event), text2pm);
+    dw_signal_connect(textbox2, DW_SIGNAL_MOTION_NOTIFY, DW_SIGNAL_FUNC(motion_notify_event), (void *)1);
+    dw_signal_connect(textbox2, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(motion_notify_event), (void *)0);
+    dw_signal_connect(hscrollbar, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(scrollbar_valuechanged_callback), (void *)status1);
+    dw_signal_connect(vscrollbar, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(scrollbar_valuechanged_callback), (void *)status1);
+    dw_signal_connect(button1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(refresh_callback), NULL);
+    dw_signal_connect(rendcombo, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(render_select_event_callback), NULL );
+    dw_signal_connect(mainwindow, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(keypress_callback), NULL);
 }
 
 void tree_add(void)
 {
-   HTREEITEM t1,t2,t3,t4,t5,t6;
-   HWND listbox;
-
-   /* create a box to pack into the notebook page */
-   listbox = dw_listbox_new(1024, TRUE);
-   dw_box_pack_start( notebookbox3, listbox, 500, 200, TRUE, TRUE, 0);
-   dw_listbox_append(listbox, "Test 1");
-   dw_listbox_append(listbox, "Test 2");
-   dw_listbox_append(listbox, "Test 3");
-   dw_listbox_append(listbox, "Test 4");
-   dw_listbox_append(listbox, "Test 5");
-
-   /* create a box to pack into the notebook page */
-   treebox = dw_box_new(BOXHORZ, 2);
-   dw_box_pack_start( notebookbox3, treebox, 500, 200, TRUE, TRUE, 0);
-
-   /* now a tree area under this box */
-   tree = dw_tree_new(101);
-   dw_box_pack_start( notebookbox3, tree, 500, 200, TRUE, FALSE, 1);
-
-   /* and a status area to see whats going on */
-   tree_status = dw_status_text_new("", 0);
-   dw_box_pack_start( notebookbox3, tree_status, 100, 20, TRUE, FALSE, 1);
-
-   foldericon = dw_icon_load_from_file( FOLDER_ICON_NAME );
-   fileicon = dw_icon_load_from_file( FILE_ICON_NAME  );
-
-   /* set up our signal trappers... */
-   dw_signal_connect(tree, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(item_context_cb), (void *)tree_status);
-   dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(item_select_cb), (void *)tree_status);
-
-   t1 = dw_tree_insert(tree, "tree folder 1", foldericon, NULL, (void *)1 );
-   t2 = dw_tree_insert(tree, "tree folder 2", foldericon, NULL, (void *)2 );
-   t3 = dw_tree_insert(tree, "tree file 1", fileicon, t1, (void *)3 );
-   t4 = dw_tree_insert(tree, "tree file 2", fileicon, t1, (void *)4 );
-   t5 = dw_tree_insert(tree, "tree file 3", fileicon, t2, (void *)5 );
-   t6 = dw_tree_insert(tree, "tree file 4", fileicon, t2, (void *)6 );
-   /* set the folder name and icon again to show error with dw_tree_item_change under GTK 2.0 */
-   dw_tree_item_change(tree, t1, "tree folder 1", foldericon );
-   dw_tree_item_change(tree, t2, "tree folder 2", foldericon );
+    HTREEITEM t1,t2,t3,t4,t5,t6;
+    HWND listbox;
+    
+    /* create a box to pack into the notebook page */
+    listbox = dw_listbox_new(1024, TRUE);
+    dw_box_pack_start( notebookbox3, listbox, 500, 200, TRUE, TRUE, 0);
+    dw_listbox_append(listbox, "Test 1");
+    dw_listbox_append(listbox, "Test 2");
+    dw_listbox_append(listbox, "Test 3");
+    dw_listbox_append(listbox, "Test 4");
+    dw_listbox_append(listbox, "Test 5");
+    
+    /* create a box to pack into the notebook page */
+    treebox = dw_box_new(BOXHORZ, 2);
+    dw_box_pack_start( notebookbox3, treebox, 500, 200, TRUE, TRUE, 0);
+    
+    /* now a tree area under this box */
+    tree = dw_tree_new(101);
+    dw_box_pack_start( notebookbox3, tree, 500, 200, TRUE, FALSE, 1);
+    
+    /* and a status area to see whats going on */
+    tree_status = dw_status_text_new("", 0);
+    dw_box_pack_start( notebookbox3, tree_status, 100, 20, TRUE, FALSE, 1);
+    
+    foldericon = dw_icon_load_from_file( FOLDER_ICON_NAME );
+    fileicon = dw_icon_load_from_file( FILE_ICON_NAME  );
+    
+    /* set up our signal trappers... */
+    dw_signal_connect(tree, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(item_context_cb), (void *)tree_status);
+    dw_signal_connect(tree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(item_select_cb), (void *)tree_status);
+    
+    t1 = dw_tree_insert(tree, "tree folder 1", foldericon, NULL, (void *)1 );
+    t2 = dw_tree_insert(tree, "tree folder 2", foldericon, NULL, (void *)2 );
+    t3 = dw_tree_insert(tree, "tree file 1", fileicon, t1, (void *)3 );
+    t4 = dw_tree_insert(tree, "tree file 2", fileicon, t1, (void *)4 );
+    t5 = dw_tree_insert(tree, "tree file 3", fileicon, t2, (void *)5 );
+    t6 = dw_tree_insert(tree, "tree file 4", fileicon, t2, (void *)6 );
+    /* set the folder name and icon again to show error with dw_tree_item_change under GTK 2.0 */
+    dw_tree_item_change(tree, t1, "tree folder 1", foldericon );
+    dw_tree_item_change(tree, t2, "tree folder 2", foldericon );
 }
 
 void container_add(void)
 {
-   char *titles[4];
-   char *names[3];
-   char buffer[100];
-   unsigned long flags[4] = {   DW_CFA_BITMAPORICON | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
-                                DW_CFA_ULONG | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
-                                DW_CFA_TIME | DW_CFA_CENTER | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
-                                DW_CFA_DATE | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR };
-   int z;
-   CTIME time;
-   CDATE date;
-   unsigned long size;
-   HICN thisicon;
-
-   /* create a box to pack into the notebook page */
-   containerbox = dw_box_new(BOXHORZ, 2);
-   dw_box_pack_start( notebookbox4, containerbox, 500, 200, TRUE, TRUE, 0);
-
-   /* now a container area under this box */
-   container = dw_container_new(100, TRUE);
-   dw_box_pack_start( notebookbox4, container, 500, 200, TRUE, FALSE, 1);
-
-   /* and a status area to see whats going on */
-   container_status = dw_status_text_new("", 0);
-   dw_box_pack_start( notebookbox4, container_status, 100, 20, TRUE, FALSE, 1);
-
-   titles[0] = "Type";
-   titles[1] = "Size";
-   titles[2] = "Time";
-   titles[3] = "Date";
-
-   dw_filesystem_setup(container, flags, titles, 4);
-   containerinfo = dw_container_alloc(container, 3);
-
-   for(z=0;z<3;z++)
-   {
-      names[z] = (char *)malloc( 100 );
-      /* yes, there is a memory leak here */
-      sprintf(names[z],"Don't allocate from stack: Item: %d",z);
-      size = z*100;
-      sprintf(buffer, "Filename %d",z+1);
-      if (z == 0 ) thisicon = foldericon;
-      else thisicon = fileicon;
-fprintf(stderr,"Initial: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)thisicon);
-      dw_filesystem_set_file(container, containerinfo, z, buffer, thisicon);
-      dw_filesystem_set_item(container, containerinfo, 0, z, &thisicon);
-      dw_filesystem_set_item(container, containerinfo, 1, z, &size);
-
-      time.seconds = z+10;
-      time.minutes = z+10;
-      time.hours = z+10;
-      dw_filesystem_set_item(container, containerinfo, 2, z, &time);
-
-      date.day = z+10;
-      date.month = z+10;
-      date.year = z+2000;
-      dw_filesystem_set_item(container, containerinfo, 3, z, &date);
-
-      dw_container_set_row_title(containerinfo, z, names[z]);
-   }
-
-   dw_container_insert(container, containerinfo, 3);
-
-   containerinfo = dw_container_alloc(container, 1);
-   dw_filesystem_set_file(container, containerinfo, 0, strdup("Yikes"), foldericon);
-   size = 324;
-   dw_filesystem_set_item(container, containerinfo, 0, 0, &foldericon);
-   dw_filesystem_set_item(container, containerinfo, 1, 0, &size);
-   dw_filesystem_set_item(container, containerinfo, 2, 0, &time);
-   dw_filesystem_set_item(container, containerinfo, 3, 0, &date);
-   dw_container_set_row_title(containerinfo, 0, strdup("Extra"));
-
-   dw_container_insert(container, containerinfo, 1);
-   dw_container_optimize(container);
-
-   container_mle = dw_mle_new( 111 );
-   dw_box_pack_start( containerbox, container_mle, 500, 200, TRUE, TRUE, 0);
-
-   /* connect our event trappers... */
-   dw_signal_connect(container, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(item_enter_cb), (void *)container_status);
-   dw_signal_connect(container, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(item_context_cb), (void *)container_status);
-   dw_signal_connect(container, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(container_select_cb), (void *)container_status);
-   dw_signal_connect(container, DW_SIGNAL_COLUMN_CLICK, DW_SIGNAL_FUNC(column_click_cb), (void *)container_status);
+    char *titles[4];
+    char *names[3];
+    char buffer[100];
+    unsigned long flags[4] = {   DW_CFA_BITMAPORICON | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
+        DW_CFA_ULONG | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
+        DW_CFA_TIME | DW_CFA_CENTER | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR,
+        DW_CFA_DATE | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR };
+    int z;
+    CTIME time;
+    CDATE date;
+    unsigned long size;
+    HICN thisicon;
+    
+    /* create a box to pack into the notebook page */
+    containerbox = dw_box_new(BOXHORZ, 2);
+    dw_box_pack_start( notebookbox4, containerbox, 500, 200, TRUE, TRUE, 0);
+    
+    /* now a container area under this box */
+    container = dw_container_new(100, TRUE);
+    dw_box_pack_start( notebookbox4, container, 500, 200, TRUE, FALSE, 1);
+    
+    /* and a status area to see whats going on */
+    container_status = dw_status_text_new("", 0);
+    dw_box_pack_start( notebookbox4, container_status, 100, 20, TRUE, FALSE, 1);
+    
+    titles[0] = "Type";
+    titles[1] = "Size";
+    titles[2] = "Time";
+    titles[3] = "Date";
+    
+    dw_filesystem_setup(container, flags, titles, 4);
+    containerinfo = dw_container_alloc(container, 3);
+    
+    for(z=0;z<3;z++)
+    {
+        names[z] = (char *)malloc( 100 );
+        /* yes, there is a memory leak here */
+        sprintf(names[z],"Don't allocate from stack: Item: %d",z);
+        size = z*100;
+        sprintf(buffer, "Filename %d",z+1);
+        if (z == 0 ) thisicon = foldericon;
+        else thisicon = fileicon;
+        fprintf(stderr,"Initial: container: %x containerinfo: %x icon: %x\n", (int)container, (int)containerinfo, (int)thisicon);
+        dw_filesystem_set_file(container, containerinfo, z, buffer, thisicon);
+        dw_filesystem_set_item(container, containerinfo, 0, z, &thisicon);
+        dw_filesystem_set_item(container, containerinfo, 1, z, &size);
+        
+        time.seconds = z+10;
+        time.minutes = z+10;
+        time.hours = z+10;
+        dw_filesystem_set_item(container, containerinfo, 2, z, &time);
+        
+        date.day = z+10;
+        date.month = z+10;
+        date.year = z+2000;
+        dw_filesystem_set_item(container, containerinfo, 3, z, &date);
+        
+        dw_container_set_row_title(containerinfo, z, names[z]);
+    }
+    
+    dw_container_insert(container, containerinfo, 3);
+    
+    containerinfo = dw_container_alloc(container, 1);
+    dw_filesystem_set_file(container, containerinfo, 0, strdup("Yikes"), foldericon);
+    size = 324;
+    dw_filesystem_set_item(container, containerinfo, 0, 0, &foldericon);
+    dw_filesystem_set_item(container, containerinfo, 1, 0, &size);
+    dw_filesystem_set_item(container, containerinfo, 2, 0, &time);
+    dw_filesystem_set_item(container, containerinfo, 3, 0, &date);
+    dw_container_set_row_title(containerinfo, 0, strdup("Extra"));
+    
+    dw_container_insert(container, containerinfo, 1);
+    dw_container_optimize(container);
+    
+    container_mle = dw_mle_new( 111 );
+    dw_box_pack_start( containerbox, container_mle, 500, 200, TRUE, TRUE, 0);
+    
+    /* connect our event trappers... */
+    dw_signal_connect(container, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(item_enter_cb), (void *)container_status);
+    dw_signal_connect(container, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(item_context_cb), (void *)container_status);
+    dw_signal_connect(container, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(container_select_cb), (void *)container_status);
+    dw_signal_connect(container, DW_SIGNAL_COLUMN_CLICK, DW_SIGNAL_FUNC(column_click_cb), (void *)container_status);
 }
 
 /* Beep every second */
 int DWSIGNAL timer_callback(void *data)
 {
-   dw_beep(200, 200);
-
-   /* Return TRUE so we get called again */
-   return TRUE;
+    dw_beep(200, 200);
+    
+    /* Return TRUE so we get called again */
+    return TRUE;
 }
 
 
 void buttons_add(void)
 {
-   HWND abutton1,abutton2,calbox;
-   int i;
-   char **text;
-
-   /* create a box to pack into the notebook page */
-   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);
-
-   calbox = dw_box_new(DW_HORZ, 0);
-   dw_box_pack_start(notebookbox5, calbox, 500, 200, TRUE, TRUE, 1);
-   cal = dw_calendar_new(100);
-   dw_box_pack_start(calbox, cal, 180, 160, TRUE, TRUE, 0);
-/*
-   dw_calendar_set_date(cal, 2001, 1, 1);
-*/
-/*
- * Create our file toolbar boxes...
- */
-   buttonboxperm = dw_box_new( BOXVERT, 0 );
-   dw_box_pack_start( buttonsbox, buttonboxperm, 25, 0, FALSE, TRUE, 2 );
-   dw_window_set_color(buttonboxperm, DW_CLR_WHITE, DW_CLR_WHITE);
-//   abutton1 = dw_bitmapbutton_new_from_file( "Top Button", 0, FILE_ICON_NAME );
-   abutton1 = dw_bitmapbutton_new_from_file( "Top Button", 0, "z:\\projects\\RexxGd\\regina\\tile_up.png" );
-   dw_box_pack_start( buttonboxperm, abutton1, 100, 30, FALSE, FALSE, 0 );
-   dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(button_callback), NULL );
-   dw_box_pack_start( buttonboxperm, 0, 25, 5, FALSE, FALSE, 0 );
-   abutton2 = dw_bitmapbutton_new_from_file( "Bottom", 0, FOLDER_ICON_NAME );
-   dw_box_pack_start( buttonsbox, abutton2, 25, 25, FALSE, FALSE, 0 );
-   dw_signal_connect( abutton2, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(button_callback), NULL );
-
-   create_button(0);
-/* make a combobox */
-   combox = dw_box_new(BOXVERT, 2);
-   dw_box_pack_start( notebookbox5, combox, 25, 200, TRUE, TRUE, 0);
-   combobox1 = dw_combobox_new( "fred", 0 ); /* no point in specifying an initial value */
-   dw_listbox_append( combobox1, "fred" );
-   dw_box_pack_start( combox, combobox1, 200, 20, TRUE, FALSE, 0);
-/*
-   dw_window_set_text( combobox, "initial value");
-*/
-   dw_signal_connect( combobox1, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(combobox_select_event_callback), NULL );
+    HWND abutton1,abutton2,calbox;
+    int i;
+    char **text;
+    
+    /* create a box to pack into the notebook page */
+    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);
+    
+    calbox = dw_box_new(DW_HORZ, 0);
+    dw_box_pack_start(notebookbox5, calbox, 500, 200, TRUE, TRUE, 1);
+    cal = dw_calendar_new(100);
+    dw_box_pack_start(calbox, cal, 180, 160, TRUE, TRUE, 0);
+    /*
+     dw_calendar_set_date(cal, 2001, 1, 1);
+     */
+    /*
+     * Create our file toolbar boxes...
+     */
+    buttonboxperm = dw_box_new( BOXVERT, 0 );
+    dw_box_pack_start( buttonsbox, buttonboxperm, 25, 0, FALSE, TRUE, 2 );
+    dw_window_set_color(buttonboxperm, DW_CLR_WHITE, DW_CLR_WHITE);
+    //   abutton1 = dw_bitmapbutton_new_from_file( "Top Button", 0, FILE_ICON_NAME );
+    abutton1 = dw_bitmapbutton_new_from_file( "Top Button", 0, "z:\\projects\\RexxGd\\regina\\tile_up.png" );
+    dw_box_pack_start( buttonboxperm, abutton1, 100, 30, FALSE, FALSE, 0 );
+    dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(button_callback), NULL );
+    dw_box_pack_start( buttonboxperm, 0, 25, 5, FALSE, FALSE, 0 );
+    abutton2 = dw_bitmapbutton_new_from_file( "Bottom", 0, FOLDER_ICON_NAME );
+    dw_box_pack_start( buttonsbox, abutton2, 25, 25, FALSE, FALSE, 0 );
+    dw_signal_connect( abutton2, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(button_callback), NULL );
+    
+    create_button(0);
+    /* make a combobox */
+    combox = dw_box_new(BOXVERT, 2);
+    dw_box_pack_start( notebookbox5, combox, 25, 200, TRUE, TRUE, 0);
+    combobox1 = dw_combobox_new( "fred", 0 ); /* no point in specifying an initial value */
+    dw_listbox_append( combobox1, "fred" );
+    dw_box_pack_start( combox, combobox1, 200, 20, TRUE, FALSE, 0);
+    /*
+     dw_window_set_text( combobox, "initial value");
+     */
+    dw_signal_connect( combobox1, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(combobox_select_event_callback), NULL );
 #if 0
-   /* add LOTS of items */
-   fprintf(stderr,"before appending 100 items to combobox using dw_listbox_append()\n");
-   for( i = 0; i < 100; i++ )
-   {
-      sprintf( buf, "item %d", i);
-      dw_listbox_append( combobox1, buf );
-   }
-   fprintf(stderr,"after appending 100 items to combobox\n");
+    /* add LOTS of items */
+    fprintf(stderr,"before appending 100 items to combobox using dw_listbox_append()\n");
+    for( i = 0; i < 100; i++ )
+    {
+        sprintf( buf, "item %d", i);
+        dw_listbox_append( combobox1, buf );
+    }
+    fprintf(stderr,"after appending 100 items to combobox\n");
 #endif
-
-   combobox2 = dw_combobox_new( "joe", 0 ); /* no point in specifying an initial value */
-   dw_box_pack_start( combox, combobox2, 200, 20, TRUE, FALSE, 0);
-/*
-   dw_window_set_text( combobox, "initial value");
-*/
-   dw_signal_connect( combobox2, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(combobox_select_event_callback), NULL );
-   /* add LOTS of items */
-   fprintf(stderr,"before appending 500 items to combobox using dw_listbox_list_append()\n");
-   text = (char **)malloc(500*sizeof(char *));
-   for( i = 0; i < 500; i++ )
-   {
-      text[i] = (char *)malloc( 50 );
-      sprintf( text[i], "item %d", i);
-   }
-   dw_listbox_list_append( combobox2, text, 500 );
-   fprintf(stderr,"after appending 500 items to combobox\n");
-   for( i = 0; i < 500; i++ )
-   {
-      free(text[i]);
-   }
-   free(text);
-   /* now insert a couple of items */
-   dw_listbox_insert( combobox2, "inserted item 2", 2 );
-   dw_listbox_insert( combobox2, "inserted item 5", 5 );
-   /* make a spinbutton */
-   spinbutton = dw_spinbutton_new( "", 0 ); /* no point in specifying text */
-   dw_box_pack_start( combox, spinbutton, 200, 20, TRUE, FALSE, 0);
-   dw_spinbutton_set_limits( spinbutton, 100, 1 );
-   dw_spinbutton_set_pos( spinbutton, 30 );
-   dw_signal_connect( spinbutton, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(spinbutton_valuechanged_callback), NULL );
-   /* make a slider */
-   slider = dw_slider_new( FALSE, 10, 0 ); /* no point in specifying text */
-   dw_box_pack_start( combox, slider, 200, 20, TRUE, FALSE, 0);
-   dw_signal_connect( slider, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(slider_valuechanged_callback), NULL );
+    
+    combobox2 = dw_combobox_new( "joe", 0 ); /* no point in specifying an initial value */
+    dw_box_pack_start( combox, combobox2, 200, 20, TRUE, FALSE, 0);
+    /*
+     dw_window_set_text( combobox, "initial value");
+     */
+    dw_signal_connect( combobox2, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(combobox_select_event_callback), NULL );
+    /* add LOTS of items */
+    fprintf(stderr,"before appending 500 items to combobox using dw_listbox_list_append()\n");
+    text = (char **)malloc(500*sizeof(char *));
+    for( i = 0; i < 500; i++ )
+    {
+        text[i] = (char *)malloc( 50 );
+        sprintf( text[i], "item %d", i);
+    }
+    dw_listbox_list_append( combobox2, text, 500 );
+    fprintf(stderr,"after appending 500 items to combobox\n");
+    for( i = 0; i < 500; i++ )
+    {
+        free(text[i]);
+    }
+    free(text);
+    /* now insert a couple of items */
+    dw_listbox_insert( combobox2, "inserted item 2", 2 );
+    dw_listbox_insert( combobox2, "inserted item 5", 5 );
+    /* make a spinbutton */
+    spinbutton = dw_spinbutton_new( "", 0 ); /* no point in specifying text */
+    dw_box_pack_start( combox, spinbutton, 200, 20, TRUE, FALSE, 0);
+    dw_spinbutton_set_limits( spinbutton, 100, 1 );
+    dw_spinbutton_set_pos( spinbutton, 30 );
+    dw_signal_connect( spinbutton, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(spinbutton_valuechanged_callback), NULL );
+    /* make a slider */
+    slider = dw_slider_new( FALSE, 10, 0 ); /* no point in specifying text */
+    dw_box_pack_start( combox, slider, 200, 20, TRUE, FALSE, 0);
+    dw_signal_connect( slider, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(slider_valuechanged_callback), NULL );
 }
 
 void create_button( int redraw)
 {
-   HWND abutton1;
-   filetoolbarbox = dw_box_new( BOXVERT, 0 );
-   dw_box_pack_start( buttonboxperm, filetoolbarbox, 0, 0, TRUE, TRUE, 0 );
-
-   abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
-   dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
-   dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(change_color_red_callback), NULL );
-   dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
-
-   abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
-   dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
-   dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(change_color_yellow_callback), NULL );
-   dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
-
-   abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
-   dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
-   dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(redraw_button_box_callback), NULL );
-   dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
-   if ( redraw )
-   {
-      dw_window_redraw( filetoolbarbox );
-      dw_window_redraw( mainwindow );
-   }
+    HWND abutton1;
+    filetoolbarbox = dw_box_new( BOXVERT, 0 );
+    dw_box_pack_start( buttonboxperm, filetoolbarbox, 0, 0, TRUE, TRUE, 0 );
+    
+    abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
+    dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
+    dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(change_color_red_callback), NULL );
+    dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
+    
+    abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
+    dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
+    dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(change_color_yellow_callback), NULL );
+    dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
+    
+    abutton1 = dw_bitmapbutton_new_from_file( "Should be under Top button", 0, "junk" );
+    dw_box_pack_start( filetoolbarbox, abutton1, 25, 25, FALSE, FALSE, 0);
+    dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(redraw_button_box_callback), NULL );
+    dw_box_pack_start( filetoolbarbox, 0, 25, 5, FALSE, FALSE, 0 );
+    if ( redraw )
+    {
+        dw_window_redraw( filetoolbarbox );
+        dw_window_redraw( mainwindow );
+    }
 }
 
 void mdi_add(void)
 {
-   HWND mdibox, mdi, mdi1w, mdi1box, ef, mdi2w, mdi2box, bb;
-
-   /* create a box to pack into the notebook page */
-   mdibox = dw_box_new(DW_HORZ, 0);
-
-   dw_box_pack_start(notebookbox6, mdibox, 500, 200, TRUE, TRUE, 1);
-
-   /* now a mdi under this box */
-   mdi = dw_mdi_new(333);
-   dw_box_pack_start(mdibox, mdi, 500, 200, TRUE, TRUE, 2);
-
-   mdi1w = dw_window_new(mdi, "MDI1", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
-   mdi1box = dw_box_new(DW_HORZ, 0);
-   dw_box_pack_start(mdi1w, mdi1box, 0, 0, TRUE, TRUE, 0);
-   ef = dw_entryfield_new("", 0);
-   dw_box_pack_start(mdi1box, ef, 100, 20, FALSE, FALSE, 4);
-   dw_window_set_size(mdi1w, 200, 100);
-   dw_window_show(mdi1w);
-
-   mdi2w = dw_window_new(mdi, "MDI2", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
-   mdi2box = dw_box_new(DW_HORZ, 0);
-   dw_box_pack_start(mdi2w, mdi2box, 0, 0, TRUE, TRUE, 0);
-   ef = dw_entryfield_new( "", 0);
-   dw_box_pack_start(mdi2box, ef, 150, 30, FALSE, FALSE, 4);
-   bb = dw_button_new("Browse", 0);
-   dw_box_pack_start(mdi2box, bb, 60, 30, FALSE, FALSE, 4);
-   dw_window_set_size(mdi2w, 200, 200);
-   dw_window_show(mdi2w);
+    HWND mdibox, mdi, mdi1w, mdi1box, ef, mdi2w, mdi2box, bb;
+    
+    /* create a box to pack into the notebook page */
+    mdibox = dw_box_new(DW_HORZ, 0);
+    
+    dw_box_pack_start(notebookbox6, mdibox, 500, 200, TRUE, TRUE, 1);
+    
+    /* now a mdi under this box */
+    mdi = dw_mdi_new(333);
+    dw_box_pack_start(mdibox, mdi, 500, 200, TRUE, TRUE, 2);
+    
+    mdi1w = dw_window_new(mdi, "MDI1", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
+    mdi1box = dw_box_new(DW_HORZ, 0);
+    dw_box_pack_start(mdi1w, mdi1box, 0, 0, TRUE, TRUE, 0);
+    ef = dw_entryfield_new("", 0);
+    dw_box_pack_start(mdi1box, ef, 100, 20, FALSE, FALSE, 4);
+    dw_window_set_size(mdi1w, 200, 100);
+    dw_window_show(mdi1w);
+    
+    mdi2w = dw_window_new(mdi, "MDI2", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
+    mdi2box = dw_box_new(DW_HORZ, 0);
+    dw_box_pack_start(mdi2w, mdi2box, 0, 0, TRUE, TRUE, 0);
+    ef = dw_entryfield_new( "", 0);
+    dw_box_pack_start(mdi2box, ef, 150, 30, FALSE, FALSE, 4);
+    bb = dw_button_new("Browse", 0);
+    dw_box_pack_start(mdi2box, bb, 60, 30, FALSE, FALSE, 4);
+    dw_window_set_size(mdi2w, 200, 200);
+    dw_window_show(mdi2w);
 }
 
 void menu_add(void)
 {
-   HMENUI menuitem,menu;
-
-   mainmenubar = dw_menubar_new( mainwindow );
-   /* add menus to the menubar */
-   menu = dw_menu_new( 0 );
-   menuitem = dw_menu_append_item( menu, "~Quit", 1019, 0, TRUE, FALSE, 0 );
-   dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow);
-   /*
-    * Add the "File" menu to the menubar...
-    */
-   dw_menu_append_item( mainmenubar, "~File", 1010, 0, TRUE, FALSE, menu );
-
-   changeable_menu = dw_menu_new( 0 );
-   checkable_menuitem = dw_menu_append_item( changeable_menu, "~Checkable Menu Item", CHECKABLE_MENUITEMID, 0, TRUE, TRUE, 0 );
-   dw_signal_connect( checkable_menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menu_callback), (void *)"checkable");
-   noncheckable_menuitem = dw_menu_append_item( changeable_menu, "~Non-checkable Menu Item", NONCHECKABLE_MENUITEMID, 0, TRUE, FALSE, 0 );
-   dw_signal_connect( noncheckable_menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menu_callback), (void *)"non-checkable");
-   menuitem = dw_menu_append_item( changeable_menu, "~Disabled menu Item", 2003, DW_MIS_DISABLED|DW_MIS_CHECKED, TRUE, TRUE, 0 );
-   /* seperator */
-   dw_menu_append_item( changeable_menu, DW_MENU_SEPARATOR, 3999, 0, TRUE, FALSE, 0 );
-   menuitem = dw_menu_append_item( changeable_menu, "~Menu Items Disabled", 2009, 0, TRUE, TRUE, 0 );
-   dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menutoggle_callback), (void *)NULL);
-   /*
-    * Add the "Menu" menu to the menubar...
-    */
-   dw_menu_append_item( mainmenubar, "~Menu", 1020, 0, TRUE, FALSE, changeable_menu );
-
-   menu = dw_menu_new( 0 );
-   menuitem = dw_menu_append_item( menu, "~About", 1091, 0, TRUE, FALSE, 0 );
-   dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(helpabout_callback), (void *)mainwindow);
-   /*
-    * Add the "Help" menu to the menubar...
-    */
-   dw_menu_append_item( mainmenubar, "~Help", 1090, 0, TRUE, FALSE, menu );
+    HMENUI menuitem,menu;
+    
+    mainmenubar = dw_menubar_new( mainwindow );
+    /* add menus to the menubar */
+    menu = dw_menu_new( 0 );
+    menuitem = dw_menu_append_item( menu, "~Quit", 1019, 0, TRUE, FALSE, 0 );
+    dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(exit_callback), (void *)mainwindow);
+    /*
+     * Add the "File" menu to the menubar...
+     */
+    dw_menu_append_item( mainmenubar, "~File", 1010, 0, TRUE, FALSE, menu );
+    
+    changeable_menu = dw_menu_new( 0 );
+    checkable_menuitem = dw_menu_append_item( changeable_menu, "~Checkable Menu Item", CHECKABLE_MENUITEMID, 0, TRUE, TRUE, 0 );
+    dw_signal_connect( checkable_menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menu_callback), (void *)"checkable");
+    noncheckable_menuitem = dw_menu_append_item( changeable_menu, "~Non-checkable Menu Item", NONCHECKABLE_MENUITEMID, 0, TRUE, FALSE, 0 );
+    dw_signal_connect( noncheckable_menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menu_callback), (void *)"non-checkable");
+    menuitem = dw_menu_append_item( changeable_menu, "~Disabled menu Item", 2003, DW_MIS_DISABLED|DW_MIS_CHECKED, TRUE, TRUE, 0 );
+    /* seperator */
+    dw_menu_append_item( changeable_menu, DW_MENU_SEPARATOR, 3999, 0, TRUE, FALSE, 0 );
+    menuitem = dw_menu_append_item( changeable_menu, "~Menu Items Disabled", 2009, 0, TRUE, TRUE, 0 );
+    dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(menutoggle_callback), (void *)NULL);
+    /*
+     * Add the "Menu" menu to the menubar...
+     */
+    dw_menu_append_item( mainmenubar, "~Menu", 1020, 0, TRUE, FALSE, changeable_menu );
+    
+    menu = dw_menu_new( 0 );
+    menuitem = dw_menu_append_item( menu, "~About", 1091, 0, TRUE, FALSE, 0 );
+    dw_signal_connect( menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(helpabout_callback), (void *)mainwindow);
+    /*
+     * Add the "Help" menu to the menubar...
+     */
+    dw_menu_append_item( mainmenubar, "~Help", 1090, 0, TRUE, FALSE, menu );
 }
 
 int DWSIGNAL scrollbox_button_callback(HWND window, void *data)
 {
-   int pos, range;
-
-   pos = dw_scrollbox_get_pos( scrollbox, DW_VERT );
-   range = dw_scrollbox_get_range( scrollbox, DW_VERT );
-   fprintf( stderr, "Pos %d Range %d\n", pos, range );
-   return 0;
+    int pos, range;
+    
+    pos = dw_scrollbox_get_pos( scrollbox, DW_VERT );
+    range = dw_scrollbox_get_range( scrollbox, DW_VERT );
+    fprintf( stderr, "Pos %d Range %d\n", pos, range );
+    return 0;
 }
 
 void scrollbox_add(void)
 {
-   HWND tmpbox,abutton1;
-   char buf[100];
-   int i;
-
-   /* create a box to pack into the notebook page */
-   scrollbox = dw_scrollbox_new(DW_VERT, 0);
-   dw_box_pack_start(notebookbox8, scrollbox, 0, 0, TRUE, TRUE, 1);
-
-   abutton1 = dw_button_new( "Show Adjustments", 0 );
-   dw_box_pack_start( scrollbox, abutton1, 100, 30, FALSE, FALSE, 0 );
-   dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(scrollbox_button_callback), NULL );
-
-   for ( i = 0; i < MAX_WIDGETS; i++ )
-   {
-      tmpbox = dw_box_new( DW_HORZ, 0 );
-      dw_box_pack_start( scrollbox, tmpbox, 0, 24, TRUE, FALSE, 2);
-      sprintf( buf, "Label %d", i );
-      labelarray[i] = dw_text_new( buf , 0 );
-      dw_box_pack_start( tmpbox, labelarray[i], 0, 20, TRUE, FALSE, 0);
-      sprintf( buf, "Entry %d", i );
-      entryarray[i] = dw_entryfield_new( buf , i );
-      dw_box_pack_start( tmpbox, entryarray[i], 0, 20, TRUE, FALSE, 0);
-   }
+    HWND tmpbox,abutton1;
+    char buf[100];
+    int i;
+    
+    /* create a box to pack into the notebook page */
+    scrollbox = dw_scrollbox_new(DW_VERT, 0);
+    dw_box_pack_start(notebookbox8, scrollbox, 0, 0, TRUE, TRUE, 1);
+    
+    abutton1 = dw_button_new( "Show Adjustments", 0 );
+    dw_box_pack_start( scrollbox, abutton1, 100, 30, FALSE, FALSE, 0 );
+    dw_signal_connect( abutton1, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(scrollbox_button_callback), NULL );
+    
+    for ( i = 0; i < MAX_WIDGETS; i++ )
+    {
+        tmpbox = dw_box_new( DW_HORZ, 0 );
+        dw_box_pack_start( scrollbox, tmpbox, 0, 24, TRUE, FALSE, 2);
+        sprintf( buf, "Label %d", i );
+        labelarray[i] = dw_text_new( buf , 0 );
+        dw_box_pack_start( tmpbox, labelarray[i], 0, 20, TRUE, FALSE, 0);
+        sprintf( buf, "Entry %d", i );
+        entryarray[i] = dw_entryfield_new( buf , i );
+        dw_box_pack_start( tmpbox, entryarray[i], 0, 20, TRUE, FALSE, 0);
+    }
 }
 
 /*
@@ -1148,97 +1243,98 @@
  */
 int main(int argc, char *argv[])
 {
-   ULONG notebookpage1;
-   ULONG notebookpage2;
-   ULONG notebookpage3;
-   ULONG notebookpage4;
-   ULONG notebookpage5;
-   ULONG notebookpage6;
-   ULONG notebookpage7;
-   ULONG notebookpage8;
-
-   dw_init(TRUE, argc, argv);
-
-   mainwindow = dw_window_new( HWND_DESKTOP, "dwindows test", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
-   dw_window_set_icon(mainwindow, fileicon);
-
-   notebookbox = dw_box_new( BOXVERT, 5 );
-   dw_box_pack_start( mainwindow, notebookbox, 0, 0, TRUE, TRUE, 0);
-   /* MUST pack a box into the mainwindow BEFORE adding menus */
-   menu_add();
-
-   notebook = dw_notebook_new( 1, TRUE );
-   dw_box_pack_start( notebookbox, notebook, 100, 100, TRUE, TRUE, 0);
-   dw_signal_connect(notebook, DW_SIGNAL_SWITCH_PAGE, DW_SIGNAL_FUNC(switch_page_cb), NULL);
-
-   notebookbox1 = dw_box_new( BOXVERT, 5 );
-   notebookpage1 = dw_notebook_page_new( notebook, 0, TRUE );
-   dw_notebook_pack( notebook, notebookpage1, notebookbox1 );
-   dw_notebook_page_set_text( notebook, notebookpage1, "buttons and entry");
-   archive_add();
-
-   notebookbox2 = dw_box_new( BOXVERT, 5 );
-   notebookpage2 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage2, notebookbox2 );
-   dw_notebook_page_set_text( notebook, notebookpage2, "render");
-   text_add();
-
-   notebookbox3 = dw_box_new( BOXVERT, 5 );
-   notebookpage3 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage3, notebookbox3 );
-   dw_notebook_page_set_text( notebook, notebookpage3, "tree");
-   tree_add();
-
-   notebookbox4 = dw_box_new( BOXVERT, 5 );
-   notebookpage4 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage4, notebookbox4 );
-   dw_notebook_page_set_text( notebook, notebookpage4, "container");
-   container_add();
-
-   notebookbox5 = dw_box_new( BOXVERT, 5 );
-   notebookpage5 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage5, notebookbox5 );
-   dw_notebook_page_set_text( notebook, notebookpage5, "buttons");
-   buttons_add();
-
-   notebookbox6 = dw_box_new( BOXVERT, 5 );
-   notebookpage6 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage6, notebookbox6 );
-   dw_notebook_page_set_text( notebook, notebookpage6, "mdi");
-   mdi_add();
-
-   notebookbox7 = dw_box_new( BOXVERT, 6 );
-   notebookpage7 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage7, notebookbox7 );
-   dw_notebook_page_set_text( notebook, notebookpage7, "html");
-
+    ULONG notebookpage1;
+    ULONG notebookpage2;
+    ULONG notebookpage3;
+    ULONG notebookpage4;
+    ULONG notebookpage5;
+    ULONG notebookpage6;
+    ULONG notebookpage7;
+    ULONG notebookpage8;
+    
+    dw_init(TRUE, argc, argv);
+    
+    mainwindow = dw_window_new( HWND_DESKTOP, "dwindows test", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX);
+    dw_window_set_icon(mainwindow, fileicon);
+    
+    notebookbox = dw_box_new( BOXVERT, 5 );
+    dw_box_pack_start( mainwindow, notebookbox, 0, 0, TRUE, TRUE, 0);
+    /* MUST pack a box into the mainwindow BEFORE adding menus */
+    menu_add();
+    
+    notebook = dw_notebook_new( 1, TRUE );
+    dw_box_pack_start( notebookbox, notebook, 100, 100, TRUE, TRUE, 0);
+    dw_signal_connect(notebook, DW_SIGNAL_SWITCH_PAGE, DW_SIGNAL_FUNC(switch_page_cb), NULL);
+    
+    notebookbox1 = dw_box_new( BOXVERT, 5 );
+    notebookpage1 = dw_notebook_page_new( notebook, 0, TRUE );
+    dw_notebook_pack( notebook, notebookpage1, notebookbox1 );
+    dw_notebook_page_set_text( notebook, notebookpage1, "buttons and entry");
+    archive_add();
+    
+    notebookbox2 = dw_box_new( BOXVERT, 5 );
+    notebookpage2 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage2, notebookbox2 );
+    dw_notebook_page_set_text( notebook, notebookpage2, "render");
+    text_add();
+    
+    notebookbox3 = dw_box_new( BOXVERT, 5 );
+    notebookpage3 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage3, notebookbox3 );
+    dw_notebook_page_set_text( notebook, notebookpage3, "tree");
+    tree_add();
+    
+    notebookbox4 = dw_box_new( BOXVERT, 5 );
+    notebookpage4 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage4, notebookbox4 );
+    dw_notebook_page_set_text( notebook, notebookpage4, "container");
+    container_add();
+    
+    notebookbox5 = dw_box_new( BOXVERT, 5 );
+    notebookpage5 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage5, notebookbox5 );
+    dw_notebook_page_set_text( notebook, notebookpage5, "buttons");
+    buttons_add();
+    
+    notebookbox6 = dw_box_new( BOXVERT, 5 );
+    notebookpage6 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage6, notebookbox6 );
+    dw_notebook_page_set_text( notebook, notebookpage6, "mdi");
+    mdi_add();
+    
+    notebookbox7 = dw_box_new( BOXVERT, 6 );
+    notebookpage7 = dw_notebook_page_new( notebook, 1, FALSE );
+    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>");
-   html = dw_html_new(1002);
-   dw_box_pack_start( notebookbox7, html, 0, 100, TRUE, TRUE, 0);
-   /*
-    * This originally had:
-      dw_html_url(html, "http://dwindows.netlabs.org");
-    * but as the base file is XML, the Windows browser instance can't display it.
-    * Instead a pure HTML based web page is displayed. MHES 5/4/2008
-    */
-   dw_html_url(html, "http://www.rexx.org");
+    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>");
+    html = dw_html_new(1002);
+    dw_box_pack_start( notebookbox7, html, 0, 100, TRUE, TRUE, 0);
+    /*
+     * This originally had:
+     dw_html_url(html, "http://dwindows.netlabs.org");
+     * but as the base file is XML, the Windows browser instance can't display it.
+     * Instead a pure HTML based web page is displayed. MHES 5/4/2008
+     */
+    dw_html_url(html, "http://www.rexx.org");
 #endif
-
-   notebookbox8 = dw_box_new( BOXVERT, 7 );
-   notebookpage8 = dw_notebook_page_new( notebook, 1, FALSE );
-   dw_notebook_pack( notebook, notebookpage8, notebookbox8 );
-   dw_notebook_page_set_text( notebook, notebookpage8, "scrollbox");
-   scrollbox_add();
-
-   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);
-   dw_window_show(mainwindow);
-
-   dw_main();
-
-   return 0;
+    
+    notebookbox8 = dw_box_new( BOXVERT, 7 );
+    notebookpage8 = dw_notebook_page_new( notebook, 1, FALSE );
+    dw_notebook_pack( notebook, notebookpage8, notebookbox8 );
+    dw_notebook_page_set_text( notebook, notebookpage8, "scrollbox");
+    scrollbox_add();
+    
+    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);
+    dw_window_show(mainwindow);
+    dw_window_capture(textbox2);
+    
+    dw_main();
+    
+    return 0;
 }
--- a/mac/dw.m	Sun May 01 22:52:38 2011 +0000
+++ b/mac/dw.m	Mon May 02 01:07:49 2011 +0000
@@ -275,7 +275,7 @@
                     button = 3;
                 }
 
-                return buttonfunc(object, (int)p.x, (int)[object frame].size.height - p.y, button, handler->data);
+                return buttonfunc(object, (int)p.x, (int)p.y, button, handler->data);
             }
             /* Motion notify event */
             case 5:
@@ -290,7 +290,7 @@
                     buttonmask = (1 << [event buttonNumber]);
                 }
 
-                return motionfunc(object, (int)p.x, (int)[object frame].size.height - p.y, buttonmask, handler->data);
+                return motionfunc(object, (int)p.x, (int)p.y, buttonmask, handler->data);
             }
             /* Window close event */
             case 6:
@@ -503,17 +503,6 @@
             image = [[NSImage alloc] initWithSize:[rep size]];
             [image addRepresentation:rep];
         }
-        // make a new transform:
-        NSAffineTransform *t = [NSAffineTransform transform];
-
-        // by scaling Y negatively, we effectively flip the image:
-        [t scaleXBy:1.0 yBy:-1.0];
-
-        // but we also have to translate it back by its height:
-        [t translateXBy:0.0 yBy:-[rep size].height];
-
-        // apply the transform:
-        [t concat];
         [image drawAtPoint:NSMakePoint(bltinfo->xdest, bltinfo->ydest) fromRect:NSMakeRect(bltinfo->xsrc, bltinfo->ysrc, bltinfo->width, bltinfo->height)
                         operation:NSCompositeSourceOver fraction:1.0];
         [bltsrc release];
@@ -734,7 +723,7 @@
 -(void)mouseDragged:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
 -(void)drawRect:(NSRect)rect { _event_handler(self, nil, 7); }
 -(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
--(BOOL)isFlipped { return NO; }
+-(BOOL)isFlipped { return YES; }
 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [font release]; [super dealloc]; }
 -(BOOL)acceptsFirstResponder { return YES; }
 @end