# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1348529065 0 # Node ID 9304241b7b3308539ac316b9df35078bbfa00c2e # Parent 97b1edb41d4404ee8ae65360e1474a94bd41fd75 Added new dw_window_set_focus() function and attempted to fix... Intial focus after a subsequent dw_window_show() on Mac. diff -r 97b1edb41d44 -r 9304241b7b33 dw.h --- a/dw.h Mon Aug 13 06:18:30 2012 +0000 +++ b/dw.h Mon Sep 24 23:24:25 2012 +0000 @@ -1554,6 +1554,7 @@ void API dw_window_release(void); void API dw_window_reparent(HWND handle, HWND newparent); void API dw_window_set_pointer(HWND handle, int pointertype); +void API dw_window_set_focus(HWND handle); void API dw_window_default(HWND window, HWND defaultitem); void API dw_window_click_default(HWND window, HWND next); unsigned int API dw_mle_import(HWND handle, char *buffer, int startpoint); diff -r 97b1edb41d44 -r 9304241b7b33 dwtest.c --- a/dwtest.c Mon Aug 13 06:18:30 2012 +0000 +++ b/dwtest.c Mon Sep 24 23:24:25 2012 +0000 @@ -1766,6 +1766,9 @@ dw_notebook_page_set_text( notebook, notebookpage9, "thread/event"); thread_add(); + /* Set the default field */ + dw_window_default(mainwindow, copypastefield); + dw_signal_connect(mainwindow, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(exit_callback), DW_POINTER(mainwindow)); timerid = dw_timer_connect(2000, DW_SIGNAL_FUNC(timer_callback), 0); dw_window_set_size(mainwindow, 640, 550); diff -r 97b1edb41d44 -r 9304241b7b33 gtk/dw.c --- a/gtk/dw.c Mon Aug 13 06:18:30 2012 +0000 +++ b/gtk/dw.c Mon Sep 24 23:24:25 2012 +0000 @@ -12160,10 +12160,31 @@ } /* + * Sets the current focus item for a window/dialog. + * Parameters: + * handle: Handle to the dialog item to be focused. + * Remarks: + * This is for use after showing the window/dialog. + */ +void API dw_window_set_focus(HWND handle) +{ + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + gtk_widget_grab_focus(handle); + DW_MUTEX_UNLOCK; +} + +/* * Sets the default focus item for a window/dialog. * Parameters: * window: Toplevel window or dialog. * defaultitem: Handle to the dialog item to be default. + * Remarks: + * This is for use before showing the window/dialog. */ void dw_window_default(HWND window, HWND defaultitem) { diff -r 97b1edb41d44 -r 9304241b7b33 gtk3/dw.c --- a/gtk3/dw.c Mon Aug 13 06:18:30 2012 +0000 +++ b/gtk3/dw.c Mon Sep 24 23:24:25 2012 +0000 @@ -10376,10 +10376,31 @@ } /* + * Sets the current focus item for a window/dialog. + * Parameters: + * handle: Handle to the dialog item to be focused. + * Remarks: + * This is for use after showing the window/dialog. + */ +void API dw_window_set_focus(HWND handle) +{ + int _locked_by_me = FALSE; + + if(!handle) + return; + + DW_MUTEX_LOCK; + gtk_widget_grab_focus(handle); + DW_MUTEX_UNLOCK; +} + +/* * Sets the default focus item for a window/dialog. * Parameters: * window: Toplevel window or dialog. * defaultitem: Handle to the dialog item to be default. + * Remarks: + * This is for use before showing the window/dialog. */ void dw_window_default(HWND window, HWND defaultitem) { diff -r 97b1edb41d44 -r 9304241b7b33 mac/dw.m --- a/mac/dw.m Mon Aug 13 06:18:30 2012 +0000 +++ b/mac/dw.m Mon Sep 24 23:24:25 2012 +0000 @@ -8240,6 +8240,7 @@ { DWWindow *window = handle; NSRect rect = [[window contentView] frame]; + id defaultitem = [window initialFirstResponder]; if([window isMiniaturized]) { @@ -8286,6 +8287,11 @@ [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; [window setContentBorderThickness:0.0 forEdge:NSMinYEdge]; } + if(defaultitem) + { + /* If there is a default item set, make it first responder */ + [window makeFirstResponder:defaultitem]; + } } return 0; } @@ -8487,10 +8493,26 @@ } /* + * Sets the current focus item for a window/dialog. + * Parameters: + * handle: Handle to the dialog item to be focused. + * Remarks: + * This is for use after showing the window/dialog. + */ +void API dw_window_set_focus(HWND handle) +{ + id object = handle; + + [[object window] makeFirstResponder:object]; +} + +/* * Sets the default focus item for a window/dialog. * Parameters: * window: Toplevel window or dialog. * defaultitem: Handle to the dialog item to be default. + * Remarks: + * This is for use before showing the window/dialog. */ void API dw_window_default(HWND handle, HWND defaultitem) { diff -r 97b1edb41d44 -r 9304241b7b33 os2/dw.c --- a/os2/dw.c Mon Aug 13 06:18:30 2012 +0000 +++ b/os2/dw.c Mon Sep 24 23:24:25 2012 +0000 @@ -11894,10 +11894,24 @@ } /* + * Sets the current focus item for a window/dialog. + * Parameters: + * handle: Handle to the dialog item to be focused. + * Remarks: + * This is for use after showing the window/dialog. + */ +void API dw_window_set_focus(HWND handle) +{ + WinSetFocus(HWND_DESKTOP, handle); +} + +/* * Sets the default focus item for a window/dialog. * Parameters: * window: Toplevel window or dialog. * defaultitem: Handle to the dialog item to be default. + * Remarks: + * This is for use before showing the window/dialog. */ void API dw_window_default(HWND window, HWND defaultitem) { diff -r 97b1edb41d44 -r 9304241b7b33 os2/dw.def --- a/os2/dw.def Mon Aug 13 06:18:30 2012 +0000 +++ b/os2/dw.def Mon Sep 24 23:24:25 2012 +0000 @@ -72,6 +72,7 @@ dw_window_set_tooltip @83 dw_window_get_preferred_size @84 dw_window_set_gravity @85 + dw_window_set_focus @86 dw_button_new @90 dw_bitmapbutton_new @91 diff -r 97b1edb41d44 -r 9304241b7b33 os2/dw.lnk --- a/os2/dw.lnk Mon Aug 13 06:18:30 2012 +0000 +++ b/os2/dw.lnk Mon Sep 24 23:24:25 2012 +0000 @@ -67,6 +67,7 @@ export dw_window_set_tooltip.83 export dw_window_get_preferred_size.84 export dw_window_set_gravity.85 +export dw_window_set_focus.86 export dw_button_new.90 export dw_bitmapbutton_new.91 diff -r 97b1edb41d44 -r 9304241b7b33 win/dw-mingw.def --- a/win/dw-mingw.def Mon Aug 13 06:18:30 2012 +0000 +++ b/win/dw-mingw.def Mon Sep 24 23:24:25 2012 +0000 @@ -71,6 +71,7 @@ dw_window_set_tooltip @83 dw_window_get_preferred_size @84 dw_window_set_gravity @85 + dw_window_set_focus @86 dw_button_new @90 dw_bitmapbutton_new @91 diff -r 97b1edb41d44 -r 9304241b7b33 win/dw.c --- a/win/dw.c Mon Aug 13 06:18:30 2012 +0000 +++ b/win/dw.c Mon Sep 24 23:24:25 2012 +0000 @@ -11596,10 +11596,24 @@ } /* + * Sets the current focus item for a window/dialog. + * Parameters: + * handle: Handle to the dialog item to be focused. + * Remarks: + * This is for use after showing the window/dialog. + */ +void API dw_window_set_focus(HWND handle) +{ + SetFocus(handle); +} + +/* * Sets the default focus item for a window/dialog. * Parameters: * window: Toplevel window or dialog. * defaultitem: Handle to the dialog item to be default. + * Remarks: + * This is for use before showing the window/dialog. */ void API dw_window_default(HWND window, HWND defaultitem) { diff -r 97b1edb41d44 -r 9304241b7b33 win/dw.def --- a/win/dw.def Mon Aug 13 06:18:30 2012 +0000 +++ b/win/dw.def Mon Sep 24 23:24:25 2012 +0000 @@ -71,6 +71,7 @@ dw_window_set_tooltip @83 dw_window_get_preferred_size @84 dw_window_set_gravity @85 + dw_window_set_focus @86 dw_button_new @90 dw_bitmapbutton_new @91