changeset 1795:9304241b7b33

Added new dw_window_set_focus() function and attempted to fix... Intial focus after a subsequent dw_window_show() on Mac.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 24 Sep 2012 23:24:25 +0000
parents 97b1edb41d44
children 7f549994b633
files dw.h dwtest.c gtk/dw.c gtk3/dw.c mac/dw.m os2/dw.c os2/dw.def os2/dw.lnk win/dw-mingw.def win/dw.c win/dw.def
diffstat 11 files changed, 100 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);
--- 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)
 {
--- 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)
 {
--- 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)
 {
--- 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)
 {
--- 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
--- 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
--- 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
--- 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)
 {
--- 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