changeset 1429:fbaec6e5df63

Added dw_window_get_preferred_size() which attempts to determine the size the system wants for the widget. This is useful when creating nice looking layouts.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 04 Dec 2011 20:11:38 +0000
parents 7826031d48ce
children cfc7af97c295
files gtk/dw.c gtk3/dw.c mac/dw.m os2/dw.c os2/dw.def os2/dw.lnk os2/dwcompat.lnk readme template/dw.c win/dw-mingw.def win/dw.c win/dw.def
diffstat 12 files changed, 363 insertions(+), 270 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Sun Dec 04 19:13:10 2011 +0000
+++ b/gtk/dw.c	Sun Dec 04 20:11:38 2011 +0000
@@ -10152,6 +10152,27 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window handle of the item to be back.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+   GtkRequisition req;
+   int _locked_by_me = FALSE;
+
+   DW_MUTEX_LOCK;
+   gtk_widget_get_requisition(handle, &req);
+   if(width)
+      *width = req.width;
+   if(height)
+      *height = req.height;
+   DW_MUTEX_UNLOCK;
+}
+
+/*
  * Returns the width of the screen.
  */
 int dw_screen_width(void)
--- a/gtk3/dw.c	Sun Dec 04 19:13:10 2011 +0000
+++ b/gtk3/dw.c	Sun Dec 04 20:11:38 2011 +0000
@@ -8558,6 +8558,25 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window handle of the item to be back.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+   int _locked_by_me = FALSE;
+
+   DW_MUTEX_LOCK;
+   if(width)
+      gtk_widget_get_preferred_width(handle, NULL, width);
+   if(height)
+      gtk_widget_get_preferred_height(handle, NULL, height);
+   DW_MUTEX_UNLOCK;
+}
+
+/*
  * Returns the width of the screen.
  */
 int dw_screen_width(void)
--- a/mac/dw.m	Sun Dec 04 19:13:10 2011 +0000
+++ b/mac/dw.m	Sun Dec 04 20:11:38 2011 +0000
@@ -8613,6 +8613,18 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window handle of the item to be back.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+    _control_size(handle, width, height);
+}
+
+/*
  * Sets the position of a given window (widget).
  * Parameters:
  *          handle: Window (widget) handle.
--- a/os2/dw.c	Sun Dec 04 19:13:10 2011 +0000
+++ b/os2/dw.c	Sun Dec 04 20:11:38 2011 +0000
@@ -7003,6 +7003,18 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window handle of the item to be back.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+    _control_size(handle, width, height);
+}
+
+/*
  * Returns the width of the screen.
  */
 int API dw_screen_width(void)
--- a/os2/dw.def	Sun Dec 04 19:13:10 2011 +0000
+++ b/os2/dw.def	Sun Dec 04 20:11:38 2011 +0000
@@ -68,6 +68,7 @@
   dw_window_set_bitmap_from_data         @81
   dw_window_get_font                     @82
   dw_window_set_tooltip                  @83
+  dw_window_get_preferred_size           @84
 
   dw_button_new                          @90
   dw_bitmapbutton_new                    @91
--- a/os2/dw.lnk	Sun Dec 04 19:13:10 2011 +0000
+++ b/os2/dw.lnk	Sun Dec 04 20:11:38 2011 +0000
@@ -1,298 +1,299 @@
 option DESCRIPTION 'Dynamic Windows for OS/2'
 segment type DATA NONSHARED LOADONCALL
 
-export dw_init.10=dw_init
-export dw_main.11=dw_main
-export dw_exit.12=dw_exit
-export dw_beep.13=dw_beep
-export dw_messagebox.14=dw_messagebox
-export dw_debug.15=dw_debug
+export dw_init.10
+export dw_main.11
+export dw_exit.12
+export dw_beep.13
+export dw_messagebox.14
+export dw_debug.15
 
-export dw_environment_query.16=dw_environment_query
-export dw_exec.17=dw_exec
-export dw_browse.18=dw_browse
-export dw_file_browse.19=dw_file_browse
-export dw_user_dir.20=dw_user_dir
-export dw_flush.21=dw_flush
-export dw_free.22=dw_free
-export dw_main_sleep.23=dw_main_sleep
-export dw_main_iteration.24=dw_main_iteration
-export dw_app_dir.25=dw_app_dir
+export dw_environment_query.16
+export dw_exec.17
+export dw_browse.18
+export dw_file_browse.19
+export dw_user_dir.20
+export dw_flush.21
+export dw_free.22
+export dw_main_sleep.23
+export dw_main_iteration.24
+export dw_app_dir.25
 
-export dw_box_new.40=dw_box_new
-export dw_groupbox_new.41=dw_groupbox_new
-export dw_box_pack_start.42=dw_box_pack_start
-export dw_box_pack_end.43=dw_box_pack_end
-export dw_box_pack_at_index.44=dw_box_pack_at_index
+export dw_box_new.40
+export dw_groupbox_new.41
+export dw_box_pack_start.42
+export dw_box_pack_end.43
+export dw_box_pack_at_index.44
 
-export dw_mdi_new.46=dw_mdi_new
+export dw_mdi_new.46
 
-export dw_window_new.50=dw_window_new
-export dw_window_show.51=dw_window_show
-export dw_window_hide.52=dw_window_hide
-export dw_window_destroy.53=dw_window_destroy
-export dw_window_set_font.54=dw_window_set_font
-export dw_window_set_color.55=dw_window_set_color
-export dw_window_set_pos.56=dw_window_set_pos
-export dw_window_set_size.57=dw_window_set_size
-export dw_window_set_pos_size.58=dw_window_set_pos_size
-export dw_window_get_pos_size.59=dw_window_get_pos_size
-export dw_window_set_style.60=dw_window_set_style
-export dw_window_set_icon.61=dw_window_set_icon
-export dw_window_set_bitmap.62=dw_window_set_bitmap
-export dw_window_get_text.63=dw_window_get_text
-export dw_window_set_text.64=dw_window_set_text
-export dw_window_disable.65=dw_window_disable
-export dw_window_enable.66=dw_window_enable
-export dw_window_capture.67=dw_window_capture
-export dw_window_release.68=dw_window_release
-export dw_window_reparent.69=dw_window_reparent
-export dw_window_function.70=dw_window_function
-export dw_window_from_id.71=dw_window_from_id
-export dw_window_set_border.72=dw_window_set_border
-export dw_window_minimize.73=dw_window_minimize
-export dw_window_set_pointer.74=dw_window_set_pointer
-export dw_window_default.75=dw_window_default
-export dw_window_raise.76=dw_window_raise
-export dw_window_lower.77=dw_window_lower
-export dw_window_click_default.78=dw_window_click_default
-export dw_window_redraw.79=dw_window_redraw
-export dw_bitmap_new.80=dw_bitmap_new
-export dw_window_set_bitmap_from_data.81=dw_window_set_bitmap_from_data
-export dw_window_get_font.82=dw_window_get_font
-export dw_window_set_tooltip.83=dw_window_set_tooltip
+export dw_window_new.50
+export dw_window_show.51
+export dw_window_hide.52
+export dw_window_destroy.53
+export dw_window_set_font.54
+export dw_window_set_color.55
+export dw_window_set_pos.56
+export dw_window_set_size.57
+export dw_window_set_pos_size.58
+export dw_window_get_pos_size.59
+export dw_window_set_style.60
+export dw_window_set_icon.61
+export dw_window_set_bitmap.62
+export dw_window_get_text.63
+export dw_window_set_text.64
+export dw_window_disable.65
+export dw_window_enable.66
+export dw_window_capture.67
+export dw_window_release.68
+export dw_window_reparent.69
+export dw_window_function.70
+export dw_window_from_id.71
+export dw_window_set_border.72
+export dw_window_minimize.73
+export dw_window_set_pointer.74
+export dw_window_default.75
+export dw_window_raise.76
+export dw_window_lower.77
+export dw_window_click_default.78
+export dw_window_redraw.79
+export dw_bitmap_new.80
+export dw_window_set_bitmap_from_data.81
+export dw_window_get_font.82
+export dw_window_set_tooltip.83
+export dw_window_get_preferred_size.84
 
-export dw_button_new.90=dw_button_new
-export dw_bitmapbutton_new.91=dw_bitmapbutton_new
-export dw_bitmapbutton_new_from_file.92=dw_bitmapbutton_new_from_file
-export dw_bitmapbutton_new_from_data.93=dw_bitmapbutton_new_from_data
+export dw_button_new.90
+export dw_bitmapbutton_new.91
+export dw_bitmapbutton_new_from_file.92
+export dw_bitmapbutton_new_from_data.93
 
-export dw_text_new.100=dw_text_new
-export dw_status_text_new.101=dw_status_text_new
+export dw_text_new.100
+export dw_status_text_new.101
 
-export dw_entryfield_new.110=dw_entryfield_new
-export dw_entryfield_password_new.111=dw_entryfield_password_new
+export dw_entryfield_new.110
+export dw_entryfield_password_new.111
 
-export dw_combobox_new.120=dw_combobox_new
+export dw_combobox_new.120
 
-export dw_radiobutton_new.130=dw_radiobutton_new
+export dw_radiobutton_new.130
 
-export dw_listbox_new.140=dw_listbox_new
-export dw_listbox_append.141=dw_listbox_append
-export dw_listbox_clear.142=dw_listbox_clear
-export dw_listbox_count.143=dw_listbox_count
-export dw_listbox_set_top.144=dw_listbox_set_top
-export dw_listbox_select.145=dw_listbox_select
-export dw_listbox_delete.146=dw_listbox_delete
-export dw_listbox_get_text.147=dw_listbox_get_text
-export dw_listbox_set_text.148=dw_listbox_set_text
-export dw_listbox_selected.149=dw_listbox_selected
-export dw_listbox_selected_multi.150=dw_listbox_selected_multi
-export dw_listbox_list_append.151=dw_listbox_list_append
-export dw_listbox_insert.152=dw_listbox_insert
+export dw_listbox_new.140
+export dw_listbox_append.141
+export dw_listbox_clear.142
+export dw_listbox_count.143
+export dw_listbox_set_top.144
+export dw_listbox_select.145
+export dw_listbox_delete.146
+export dw_listbox_get_text.147
+export dw_listbox_set_text.148
+export dw_listbox_selected.149
+export dw_listbox_selected_multi.150
+export dw_listbox_list_append.151
+export dw_listbox_insert.152
 
-export dw_percent_new.160=dw_percent_new
-export dw_percent_set_pos.162=dw_percent_set_pos
+export dw_percent_new.160
+export dw_percent_set_pos.162
 
-export dw_mle_new.170=dw_mle_new
-export dw_mle_import.171=dw_mle_import
-export dw_mle_export.172=dw_mle_export
-export dw_mle_get_size.173=dw_mle_get_size
-export dw_mle_delete.174=dw_mle_delete
-export dw_mle_clear.175=dw_mle_clear
-export dw_mle_freeze.176=dw_mle_freeze
-export dw_mle_thaw.177=dw_mle_thaw
-export dw_mle_set_cursor.178=dw_mle_set_cursor
-export dw_mle_set_visible.179=dw_mle_set_visible
-export dw_mle_search.180=dw_mle_search
-export dw_mle_set_editable.181=dw_mle_set_editable
-export dw_mle_set_word_wrap.182=dw_mle_set_word_wrap
+export dw_mle_new.170
+export dw_mle_import.171
+export dw_mle_export.172
+export dw_mle_get_size.173
+export dw_mle_delete.174
+export dw_mle_clear.175
+export dw_mle_freeze.176
+export dw_mle_thaw.177
+export dw_mle_set_cursor.178
+export dw_mle_set_visible.179
+export dw_mle_search.180
+export dw_mle_set_editable.181
+export dw_mle_set_word_wrap.182
 
-export dw_spinbutton_new.190=dw_spinbutton_new
-export dw_spinbutton_set_pos.191=dw_spinbutton_set_pos
-export dw_spinbutton_set_limits.192=dw_spinbutton_set_limits
-export dw_entryfield_set_limit.193=dw_entryfield_set_limit
-export dw_spinbutton_get_pos.194=dw_spinbutton_get_pos
+export dw_spinbutton_new.190
+export dw_spinbutton_set_pos.191
+export dw_spinbutton_set_limits.192
+export dw_entryfield_set_limit.193
+export dw_spinbutton_get_pos.194
 
-export dw_checkbox_new.200=dw_checkbox_new
-export dw_checkbox_get.201=dw_checkbox_get
-export dw_checkbox_set.202=dw_checkbox_set
+export dw_checkbox_new.200
+export dw_checkbox_get.201
+export dw_checkbox_set.202
 
-export dw_icon_load.210=dw_icon_load
-export dw_icon_free.211=dw_icon_free
-export dw_icon_load_from_file.212=dw_icon_load_from_file
-export dw_icon_load_from_data.213=dw_icon_load_from_data
+export dw_icon_load.210
+export dw_icon_free.211
+export dw_icon_load_from_file.212
+export dw_icon_load_from_data.213
 
-export dw_container_new.220=dw_container_new
-export dw_container_setup.221=dw_container_setup
-export dw_container_alloc.222=dw_container_alloc
-export dw_container_set_item.223=dw_container_set_item
-export dw_container_set_row_title.224=dw_container_set_row_title
-export dw_container_insert.225=dw_container_insert
-export dw_container_clear.226=dw_container_clear
-export dw_container_query_start.228=dw_container_query_start
-export dw_container_query_next.229=dw_container_query_next
-export dw_container_delete.230=dw_container_delete
-export dw_container_scroll.231=dw_container_scroll
-export dw_container_set_column_width.232=dw_container_set_column_width
-export dw_container_cursor.233=dw_container_cursor
-export dw_container_optimize.234=dw_container_optimize
-export dw_container_delete_row.235=dw_container_delete_row
-export dw_container_change_item.236=dw_container_change_item
-export dw_container_get_column_type.237=dw_container_get_column_type
-export dw_container_change_row_title.238=dw_container_change_row_title
-export dw_container_set_stripe.239=dw_container_set_stripe
+export dw_container_new.220
+export dw_container_setup.221
+export dw_container_alloc.222
+export dw_container_set_item.223
+export dw_container_set_row_title.224
+export dw_container_insert.225
+export dw_container_clear.226
+export dw_container_query_start.228
+export dw_container_query_next.229
+export dw_container_delete.230
+export dw_container_scroll.231
+export dw_container_set_column_width.232
+export dw_container_cursor.233
+export dw_container_optimize.234
+export dw_container_delete_row.235
+export dw_container_change_item.236
+export dw_container_get_column_type.237
+export dw_container_change_row_title.238
+export dw_container_set_stripe.239
 
-export dw_filesystem_setup.240=dw_filesystem_setup
-export dw_filesystem_set_item.241=dw_filesystem_set_item
-export dw_filesystem_set_file.242=dw_filesystem_set_file
-export dw_filesystem_change_item.243=dw_filesystem_change_item
-export dw_filesystem_change_file.244=dw_filesystem_change_file
-export dw_filesystem_get_column_type.245=dw_filesystem_get_column_type
+export dw_filesystem_setup.240
+export dw_filesystem_set_item.241
+export dw_filesystem_set_file.242
+export dw_filesystem_change_item.243
+export dw_filesystem_change_file.244
+export dw_filesystem_get_column_type.245
 
-export dw_screen_width.250=dw_screen_width
-export dw_screen_height.251=dw_screen_height
+export dw_screen_width.250
+export dw_screen_height.251
 
-export dw_color_depth_get.260=dw_color_depth_get
-export dw_color_foreground_set.261=dw_color_foreground_set
-export dw_color_background_set.262=dw_color_background_set
-export dw_color_choose.263=dw_color_choose
+export dw_color_depth_get.260
+export dw_color_foreground_set.261
+export dw_color_background_set.262
+export dw_color_choose.263
 
-export dw_notebook_new.270=dw_notebook_new
-export dw_notebook_page_new.271=dw_notebook_page_new
-export dw_notebook_page_destroy.272=dw_notebook_page_destroy
-export dw_notebook_page_set_text.273=dw_notebook_page_set_text
-export dw_notebook_page_set_status_text.274=dw_notebook_page_set_status_text
-export dw_notebook_page_set.275=dw_notebook_page_set
-export dw_notebook_page_get.276=dw_notebook_page_get
-export dw_notebook_pack.277=dw_notebook_pack
+export dw_notebook_new.270
+export dw_notebook_page_new.271
+export dw_notebook_page_destroy.272
+export dw_notebook_page_set_text.273
+export dw_notebook_page_set_status_text.274
+export dw_notebook_page_set.275
+export dw_notebook_page_get.276
+export dw_notebook_pack.277
 
-export dw_menu_new.280=dw_menu_new
-export dw_menubar_new.281=dw_menubar_new
-export dw_menu_append_item.282=dw_menu_append_item
-export dw_menu_item_set_check.283=dw_menu_item_set_check
-export dw_menu_popup.284=dw_menu_popup
-export dw_menu_destroy.285=dw_menu_destroy
-export dw_menu_item_set_state.286=dw_menu_item_set_state
+export dw_menu_new.280
+export dw_menubar_new.281
+export dw_menu_append_item.282
+export dw_menu_item_set_check.283
+export dw_menu_popup.284
+export dw_menu_destroy.285
+export dw_menu_item_set_state.286
 
-export dw_pointer_query_pos.290=dw_pointer_query_pos
-export dw_pointer_set_pos.291=dw_pointer_set_pos
+export dw_pointer_query_pos.290
+export dw_pointer_set_pos.291
 
-export dw_mutex_new.300=dw_mutex_new
-export dw_mutex_close.301=dw_mutex_close
-export dw_mutex_lock.302=dw_mutex_lock
-export dw_mutex_unlock.303=dw_mutex_unlock
-export dw_mutex_trylock.304=dw_mutex_trylock
+export dw_mutex_new.300
+export dw_mutex_close.301
+export dw_mutex_lock.302
+export dw_mutex_unlock.303
+export dw_mutex_trylock.304
 
-export dw_event_new.310=dw_event_new
-export dw_event_reset.311=dw_event_reset
-export dw_event_post.312=dw_event_post
-export dw_event_wait.313=dw_event_wait
-export dw_event_close.314=dw_event_close
+export dw_event_new.310
+export dw_event_reset.311
+export dw_event_post.312
+export dw_event_wait.313
+export dw_event_close.314
 
-export dw_thread_new.320=dw_thread_new
-export dw_thread_end.321=dw_thread_end
-export dw_thread_id.322=dw_thread_id
+export dw_thread_new.320
+export dw_thread_end.321
+export dw_thread_id.322
 
-export dw_render_new.330=dw_render_new
-export dw_draw_point.331=dw_draw_point
-export dw_draw_line.332=dw_draw_line
-export dw_draw_rect.333=dw_draw_rect
-export dw_draw_text.334=dw_draw_text
-export dw_draw_polygon.335=dw_draw_polygon
-export dw_draw_arc.336=dw_draw_arc
+export dw_render_new.330
+export dw_draw_point.331
+export dw_draw_line.332
+export dw_draw_rect.333
+export dw_draw_text.334
+export dw_draw_polygon.335
+export dw_draw_arc.336
 
-export dw_pixmap_bitblt.340=dw_pixmap_bitblt
-export dw_pixmap_new.341=dw_pixmap_new
-export dw_pixmap_grab.342=dw_pixmap_grab
-export dw_pixmap_destroy.343=dw_pixmap_destroy
-export dw_pixmap_new_from_file.344=dw_pixmap_new_from_file
-export dw_pixmap_new_from_data.345=dw_pixmap_new_from_data
-export dw_pixmap_set_transparent_color.346=dw_pixmap_set_transparent_color
-export dw_pixmap_set_font.347=dw_pixmap_set_font
-export dw_pixmap_stretch_bitblt.348=dw_pixmap_stretch_bitblt
+export dw_pixmap_bitblt.340
+export dw_pixmap_new.341
+export dw_pixmap_grab.342
+export dw_pixmap_destroy.343
+export dw_pixmap_new_from_file.344
+export dw_pixmap_new_from_data.345
+export dw_pixmap_set_transparent_color.346
+export dw_pixmap_set_font.347
+export dw_pixmap_stretch_bitblt.348
 
-export dw_dialog_new.350=dw_dialog_new
-export dw_dialog_dismiss.351=dw_dialog_dismiss
-export dw_dialog_wait.352=dw_dialog_wait
+export dw_dialog_new.350
+export dw_dialog_dismiss.351
+export dw_dialog_wait.352
 
-export dw_signal_connect.360=dw_signal_connect
-export dw_signal_disconnect_by_window.361=dw_signal_disconnect_by_window
-export dw_signal_disconnect_by_data.362=dw_signal_disconnect_by_data
-export dw_signal_disconnect_by_name.363=dw_signal_disconnect_by_name
+export dw_signal_connect.360
+export dw_signal_disconnect_by_window.361
+export dw_signal_disconnect_by_data.362
+export dw_signal_disconnect_by_name.363
 
-export dw_timer_connect.365=dw_timer_connect
-export dw_timer_disconnect.366=dw_timer_disconnect
+export dw_timer_connect.365
+export dw_timer_disconnect.366
 
-export dw_tree_new.370=dw_tree_new
-export dw_tree_insert.371=dw_tree_insert
-export dw_tree_clear.372=dw_tree_clear
-export dw_tree_item_delete.373=dw_tree_item_delete
-export dw_tree_item_change.374=dw_tree_item_change
-export dw_tree_item_expand.375=dw_tree_item_expand
-export dw_tree_item_collapse.376=dw_tree_item_collapse
-export dw_tree_item_select.377=dw_tree_item_select
-export dw_tree_item_set_data.378=dw_tree_item_set_data
-export dw_tree_insert_after.379=dw_tree_insert_after
-export dw_tree_item_get_data.380=dw_tree_item_get_data
-export dw_tree_get_title.381=dw_tree_get_title
-export dw_tree_get_parent.382=dw_tree_get_parent
+export dw_tree_new.370
+export dw_tree_insert.371
+export dw_tree_clear.372
+export dw_tree_item_delete.373
+export dw_tree_item_change.374
+export dw_tree_item_expand.375
+export dw_tree_item_collapse.376
+export dw_tree_item_select.377
+export dw_tree_item_set_data.378
+export dw_tree_insert_after.379
+export dw_tree_item_get_data.380
+export dw_tree_get_title.381
+export dw_tree_get_parent.382
 
-export dw_font_text_extents_get.385=dw_font_text_extents_get
-export dw_font_choose.386=dw_font_choose
-export dw_font_set_default.387=dw_font_set_default
+export dw_font_text_extents_get.385
+export dw_font_choose.386
+export dw_font_set_default.387
 
-export dw_slider_new.390=dw_slider_new
-export dw_slider_get_pos.391=dw_slider_get_pos
-export dw_slider_set_pos.392=dw_slider_set_pos
+export dw_slider_new.390
+export dw_slider_get_pos.391
+export dw_slider_set_pos.392
 
-export dw_window_set_data.400=dw_window_set_data
-export dw_window_get_data.401=dw_window_get_data
+export dw_window_set_data.400
+export dw_window_get_data.401
 
-export dw_splitbar_new.410=dw_splitbar_new
-export dw_splitbar_set.411=dw_splitbar_set
-export dw_splitbar_get.412=dw_splitbar_get
+export dw_splitbar_new.410
+export dw_splitbar_set.411
+export dw_splitbar_get.412
 
-export dw_module_load.420=dw_module_load
-export dw_module_symbol.421=dw_module_symbol
-export dw_module_close.422=dw_module_close
+export dw_module_load.420
+export dw_module_symbol.421
+export dw_module_close.422
 
-export dw_scrollbar_new.430=dw_scrollbar_new
-export dw_scrollbar_get_pos.431=dw_scrollbar_get_pos
-export dw_scrollbar_set_pos.432=dw_scrollbar_set_pos
-export dw_scrollbar_set_range.433=dw_scrollbar_set_range
+export dw_scrollbar_new.430
+export dw_scrollbar_get_pos.431
+export dw_scrollbar_set_pos.432
+export dw_scrollbar_set_range.433
 
-export dw_taskbar_insert.440=dw_taskbar_insert
-export dw_taskbar_delete.441=dw_taskbar_delete
+export dw_taskbar_insert.440
+export dw_taskbar_delete.441
 
-export dw_named_memory_new.450=dw_named_memory_new
-export dw_named_memory_get.451=dw_named_memory_get
-export dw_named_memory_free.452=dw_named_memory_free
+export dw_named_memory_new.450
+export dw_named_memory_get.451
+export dw_named_memory_free.452
 
-export dw_named_event_new.460=dw_named_event_new
-export dw_named_event_get.461=dw_named_event_get
-export dw_named_event_reset.462=dw_named_event_reset
-export dw_named_event_post.463=dw_named_event_post
-export dw_named_event_wait.464=dw_named_event_wait
-export dw_named_event_close.465=dw_named_event_close
+export dw_named_event_new.460
+export dw_named_event_get.461
+export dw_named_event_reset.462
+export dw_named_event_post.463
+export dw_named_event_wait.464
+export dw_named_event_close.465
 
-export dw_html_new.470=dw_html_new
-export dw_html_action.471=dw_html_action
-export dw_html_raw.472=dw_html_raw
-export dw_html_url.473=dw_html_url
+export dw_html_new.470
+export dw_html_action.471
+export dw_html_raw.472
+export dw_html_url.473
 
-export dw_calendar_new.480=dw_calendar_new
-export dw_calendar_set_date.481=dw_calendar_set_date
-export dw_calendar_get_date.482=dw_calendar_get_date
+export dw_calendar_new.480
+export dw_calendar_set_date.481
+export dw_calendar_get_date.482
 
-export dw_clipboard_get_text.490=dw_clipboard_get_text
-export dw_clipboard_set_text.491=dw_clipboard_set_text
+export dw_clipboard_get_text.490
+export dw_clipboard_set_text.491
 
-export dw_scrollbox_new.500=dw_scrollbox_new
-export dw_scrollbox_get_pos.501=dw_scrollbox_get_pos
-export dw_scrollbox_get_range.502=dw_scrollbox_get_range
+export dw_scrollbox_new.500
+export dw_scrollbox_get_pos.501
+export dw_scrollbox_get_range.502
 
-export dw_print_new.510=dw_print_new
-export dw_print_run.511=dw_print_run
-export dw_print_cancel.512=dw_print_cancel
+export dw_print_new.510
+export dw_print_run.511
+export dw_print_cancel.512
 
--- a/os2/dwcompat.lnk	Sun Dec 04 19:13:10 2011 +0000
+++ b/os2/dwcompat.lnk	Sun Dec 04 20:11:38 2011 +0000
@@ -1,28 +1,28 @@
 option DESCRIPTION 'Dynamic Windows Compatibility Module for OS/2'
 segment type DATA NONSHARED LOADONCALL
 
-export makedir.20=makedir
-export vargs.21=vargs
-export setfileinfo.22=setfileinfo
-export drivefree.23=drivefree
-export isdrive.24=isdrive
-export drivesize.25=drivesize
-export getfsname.26=getfsname
+export makedir.20
+export vargs.21
+export setfileinfo.22
+export drivefree.23
+export isdrive.24
+export drivesize.25
+export getfsname.26
 
-export _opendir.30=_opendir
-export _openxdir.31=_openxdir
-export _readdir.32=_readdir
-export _seekdir.33=_seekdir
-export _telldir.34=_telldir
-export _closedir.35=_closedir
+export _opendir.30
+export _openxdir.31
+export _readdir.32
+export _seekdir.33
+export _telldir.34
+export _closedir.35
 
-export fsopen.40=fsopen
-export fsclose.41=fsclose
-export fsgets.42=fsgets
-export fsseek.43=fsseek
+export fsopen.40
+export fsclose.41
+export fsgets.42
+export fsseek.43
 
-export locale_init.50=locale_init
-export locale_string.51=locale_string
+export locale_init.50
+export locale_string.51
 
-export nice_strformat.60=nice_strformat
-export initdir.61=initdir
+export nice_strformat.60
+export initdir.61
--- a/readme	Sun Dec 04 19:13:10 2011 +0000
+++ b/readme	Sun Dec 04 20:11:38 2011 +0000
@@ -37,6 +37,8 @@
 Added dw_app_dir() which attempts to locate private application data
     for the current platform.
 Added dw_window_set_tooltip() for adding tooltips to most widgets.
+Added dw_window_get_preferred_size() for getting the size the system
+    thinks the widget should be, to aid in creating layouts.
 Added support for -1 size parameter to the dw_box_pack*() functions to 
     automatically figure out a suggested size for many controls.
 Added automatic window redraw support for OS/2, Windows and Mac.
--- a/template/dw.c	Sun Dec 04 19:13:10 2011 +0000
+++ b/template/dw.c	Sun Dec 04 20:11:38 2011 +0000
@@ -2942,6 +2942,17 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window (widget) handle of the item to query.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+}
+
+/*
  * Sets the position of a given window (widget).
  * Parameters:
  *          handle: Window (widget) handle.
--- a/win/dw-mingw.def	Sun Dec 04 19:13:10 2011 +0000
+++ b/win/dw-mingw.def	Sun Dec 04 20:11:38 2011 +0000
@@ -65,6 +65,7 @@
   dw_window_set_bitmap_from_data         @81
   dw_window_get_font                     @82
   dw_window_set_tooltip                  @83
+  dw_window_get_preferred_size           @84
 
   dw_button_new                          @90
   dw_bitmapbutton_new                    @91
--- a/win/dw.c	Sun Dec 04 19:13:10 2011 +0000
+++ b/win/dw.c	Sun Dec 04 20:11:38 2011 +0000
@@ -6729,6 +6729,18 @@
 }
 
 /*
+ * Gets the size the system thinks the widget should be.
+ * Parameters:
+ *       handle: Window handle of the item to be back.
+ *       width: Width in pixels of the item or NULL if not needed.
+ *       height: Height in pixels of the item or NULL if not needed.
+ */
+void API dw_window_get_preferred_size(HWND handle, int *width, int *height)
+{
+    _control_size(handle, width, height);
+}
+
+/*
  * Returns the width of the screen.
  */
 int API dw_screen_width(void)
--- a/win/dw.def	Sun Dec 04 19:13:10 2011 +0000
+++ b/win/dw.def	Sun Dec 04 20:11:38 2011 +0000
@@ -65,6 +65,7 @@
   dw_window_set_bitmap_from_data         @81
   dw_window_get_font                     @82
   dw_window_set_tooltip                  @83
+  dw_window_get_preferred_size           @84
 
   dw_button_new                          @90
   dw_bitmapbutton_new                    @91