# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1620343186 0 # Node ID fa976a5bc7bd78b8fb6c4fbb51f25114c60c72e8 # Parent a149dabf6a1fa4374874a1c9e627824f22b97945 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. diff -r a149dabf6a1f -r fa976a5bc7bd dw.h --- 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; diff -r a149dabf6a1f -r fa976a5bc7bd dwtest.c --- 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 }; /* diff -r a149dabf6a1f -r fa976a5bc7bd gtk/dw.c --- 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: diff -r a149dabf6a1f -r fa976a5bc7bd gtk3/dw.c --- 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; diff -r a149dabf6a1f -r fa976a5bc7bd gtk4/dw.c --- 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; diff -r a149dabf6a1f -r fa976a5bc7bd mac/dw.m --- 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 diff -r a149dabf6a1f -r fa976a5bc7bd os2/dw.c --- 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: { diff -r a149dabf6a1f -r fa976a5bc7bd template/dw.c --- 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 */ diff -r a149dabf6a1f -r fa976a5bc7bd win/dw.c --- 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: