changeset 2506:fa976a5bc7bd

Add DW_FEATURE_WINDOW_PLACEMENT for platforms supporting arbitrary window placement. Several of the new platforms supported do not allow arbitrary window placement. GTK3/4 with Wayland does not allow you to specify the location, just the size. iOS and Android by default the window is the full screen, or fraction of it. GTK2/3/4 with X11, Windows, OS/2 and MacOS support arbitrary window placement.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 06 May 2021 23:19:46 +0000
parents a149dabf6a1f
children 4b45e888eb10
files dw.h dwtest.c gtk/dw.c gtk3/dw.c gtk4/dw.c mac/dw.m os2/dw.c template/dw.c win/dw.c
diffstat 9 files changed, 65 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dw.h	Thu May 06 22:02:49 2021 +0000
+++ b/dw.h	Thu May 06 23:19:46 2021 +0000
@@ -1763,6 +1763,7 @@
     DW_FEATURE_MLE_RICH_EDIT,           /* Supports Rich Edit based MLE control (Windows) */
     DW_FEATURE_TASK_BAR,                /* Supports icons in the taskbar or similar system widget */
     DW_FEATURE_TREE,                    /* Supports the Tree Widget */
+    DW_FEATURE_WINDOW_PLACEMENT         /* Supports arbitrary window placement */
     DW_FEATURE_MAX
 } DWFEATURE;
 
--- a/dwtest.c	Thu May 06 22:02:49 2021 +0000
+++ b/dwtest.c	Thu May 06 23:19:46 2021 +0000
@@ -2131,6 +2131,7 @@
     "Supports Rich Edit based MLE control (Windows)",
     "Supports icons in the taskbar or similar system widget",
     "Supports the Tree Widget",
+    "Supports arbitrary window placement",
     NULL };
 
 /*
--- a/gtk/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/gtk/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -14008,6 +14008,7 @@
         case DW_FEATURE_UTF8_UNICODE:
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_FEATURE_ENABLED;
         default:
             return DW_FEATURE_UNSUPPORTED;
@@ -14048,6 +14049,7 @@
         case DW_FEATURE_UTF8_UNICODE:
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_ERROR_GENERAL;
         /* These features are supported and configurable */
         default:
--- a/gtk3/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/gtk3/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -12640,6 +12640,21 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
             return DW_FEATURE_ENABLED;
+#ifdef GDK_WINDOWING_X11
+        case DW_FEATURE_WINDOW_PLACEMENT:
+        {
+            int _locked_by_me = FALSE, retval = DW_FEATURE_UNSUPPORTED;
+            GdkDisplay *display;
+
+            DW_MUTEX_LOCK;
+            display = gdk_display_get_default();
+           
+            if(display && GDK_IS_X11_DISPLAY(display))
+                retval = DW_ERROR_ENABLED;
+            DW_MUTEX_UNLOCK;
+            return retval;
+        }
+#endif
         default:
             return DW_FEATURE_UNSUPPORTED;
     }
@@ -12683,6 +12698,21 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
             return DW_ERROR_GENERAL;
+#ifdef GDK_WINDOWING_X11
+        case DW_FEATURE_WINDOW_PLACEMENT:
+        {
+            int _locked_by_me = FALSE, retval = DW_FEATURE_UNSUPPORTED;
+            GdkDisplay *display;
+
+            DW_MUTEX_LOCK;
+            display = gdk_display_get_default();
+           
+            if(display && GDK_IS_X11_DISPLAY(display))
+                retval = DW_ERROR_GENERAL;
+            DW_MUTEX_UNLOCK;
+            return retval;
+        }
+#endif
         /* These features are supported and configurable */
         default:
             return DW_FEATURE_UNSUPPORTED;
--- a/gtk4/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/gtk4/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -11057,6 +11057,23 @@
    return retval;
 }
 
+DW_FUNCTION_DEFINITION(dw_x11_check, int, int trueresult, int falseresult)
+DW_FUNCTION_ADD_PARAM1(handle)
+DW_FUNCTION_RETURN(dw_window_raise, int)
+DW_FUNCTION_RESTORE_PARAM1(trueresult, int, falseresult, int)
+{
+   int retval = falseresult;
+#ifdef GDK_WINDOWING_X11
+   GdkDisplay *display = gdk_display_get_default();
+
+   if(display && GDK_IS_X11_DISPLAY(display))
+   {
+      retval = trueresult;
+   }
+#endif
+   DW_FUNCTION_RETURN_THIS(retval);
+}
+
 /*
  * Gets the state of the requested library feature.
  * Parameters:
@@ -11080,6 +11097,8 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
             return DW_FEATURE_ENABLED;
+        case DW_FEATURE_WINDOW_PLACEMENT:
+            return dw_x11_check(DW_FEATURE_ENABLED, DW_FEATURE_UNSUPPORTED);
         default:
             return DW_FEATURE_UNSUPPORTED;
     }
@@ -11112,6 +11131,8 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_TREE:
             return DW_ERROR_GENERAL;
+        case DW_FEATURE_WINDOW_PLACEMENT:
+            return dw_x11_check(DW_ERROR_GENERAL, DW_FEATURE_UNSUPPORTED);
         /* These features are supported and configurable */
         default:
             return DW_FEATURE_UNSUPPORTED;
--- a/mac/dw.m	Thu May 06 22:02:49 2021 +0000
+++ b/mac/dw.m	Thu May 06 23:19:46 2021 +0000
@@ -13179,6 +13179,7 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_UTF8_UNICODE:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_FEATURE_ENABLED;
 #ifdef BUILDING_FOR_MOJAVE
         case DW_FEATURE_DARK_MODE:
@@ -13249,6 +13250,7 @@
         case DW_FEATURE_MLE_WORD_WRAP:
         case DW_FEATURE_UTF8_UNICODE:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_ERROR_GENERAL;
         /* These features are supported and configurable */
 #ifdef BUILDING_FOR_MOJAVE
--- a/os2/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/os2/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -13868,6 +13868,7 @@
         case DW_FEATURE_NOTEBOOK_STATUS_TEXT:
         case DW_FEATURE_MDI:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_FEATURE_ENABLED;
         case DW_FEATURE_TASK_BAR:
         {
@@ -13906,6 +13907,7 @@
         case DW_FEATURE_NOTEBOOK_STATUS_TEXT:
         case DW_FEATURE_MDI:
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_ERROR_GENERAL;
         case DW_FEATURE_TASK_BAR:
         {
--- a/template/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/template/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -3695,7 +3695,8 @@
         case DW_FEATURE_UTF8_UNICODE:            /* Supports UTF8 encoded Unicode text */
         case DW_FEATURE_MLE_RICH_EDIT:           /* Supports Rich Edit based MLE control (Windows) */
         case DW_FEATURE_TASK_BAR:                /* Supports icons in the taskbar or similar system widget */
-        case DW_FEATURE_TREE:                    .* Supports the Tree Widget */
+        case DW_FEATURE_TREE:                    /* Supports the Tree Widget */
+        case DW_FEATURE_WINDOW_PLACEMENT:        /* Supports arbitrary window placement */
             return DW_FEATURE_ENABLED;
 #endif
         default:
@@ -3736,7 +3737,8 @@
         case DW_FEATURE_UTF8_UNICODE:            /* Supports UTF8 encoded Unicode text */
         case DW_FEATURE_MLE_RICH_EDIT:           /* Supports Rich Edit based MLE control (Windows) */
         case DW_FEATURE_TASK_BAR:                /* Supports icons in the taskbar or similar system widget */
-        case DW_FEATURE_TREE:                    .* Supports the Tree Widget */
+        case DW_FEATURE_TREE:                    /* Supports the Tree Widget */
+        case DW_FEATURE_WINDOW_PLACEMENT:        /* Supports arbitrary window placement */
             return DW_ERROR_GENERAL;
 #endif
         /* These features are supported and configurable */
--- a/win/dw.c	Thu May 06 22:02:49 2021 +0000
+++ b/win/dw.c	Thu May 06 23:19:46 2021 +0000
@@ -13855,6 +13855,7 @@
         case DW_FEATURE_MDI:
         case DW_FEATURE_TASK_BAR:  
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_FEATURE_ENABLED;
 #ifdef BUILD_TOAST
         case DW_FEATURE_NOTIFICATION:
@@ -13940,6 +13941,7 @@
         case DW_FEATURE_MDI:
         case DW_FEATURE_TASK_BAR:  
         case DW_FEATURE_TREE:
+        case DW_FEATURE_WINDOW_PLACEMENT:
             return DW_ERROR_GENERAL;
 #ifdef BUILD_TOAST
         case DW_FEATURE_NOTIFICATION: