On Thu, 11 Aug 2011 at 0:48:51 +0000, Camille d'Alméras wrote: > > -Enforce the NoKeyBindings property (this one appears more as a bug). To > clarify, here is my use case: on the bottom-right corner of my screen sits > xdaliclock (a clock) in a transparent window without decorations nor appicon. > The window is omnipresent and is meant to stays inert: it does not get focus > nor > appears in the widows list. When I want to peek at the clock if it is masked > by > other windows, I minimize them through keyboard shortcuts. All is fine if I do > it active window by active window, but if I miniaturize all windows at once, > xdaliclock gets swallowed as well.
Does the following patch make it work for you? (I tested it lightly and it seems to work). It does not enforce the NoKeyBindings property during minimize decisions, but it makes the existing no_miniaturizable flag be configurable. The patch is already pushed to the branch called 'next' too, in case it makes testing easier. >From 8ba6118c2e84b6b7632c05d8beb565a84bcabc6d Mon Sep 17 00:00:00 2001 From: Carlos R. Mafra <[email protected]> Date: Thu, 11 Aug 2011 13:17:28 +0200 Subject: [PATCH] Make 'no miniaturizable' window property user-configurable The flag to not let windows be minimized was already defined in WM (it's called 'no_miniaturizable') and the minimize functions respect it. However this flag can not currently be set manually. As can be read in the NEWS file "NotMiniaturizable option changed to NoMiniaturizeButton" it seems that the "non miniaturizable" property was a first-class citizen in ancient times and probably configurable (those changes do not appear in the old CVS history). Let's make this property be user-configurable through the "Advanced Options" panel. Signed-off-by: Carlos R. Mafra <[email protected]> --- src/wdefaults.c | 5 +++++ src/winspector.c | 33 ++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/wdefaults.c b/src/wdefaults.c index 94487d0..eba2573 100644 --- a/src/wdefaults.c +++ b/src/wdefaults.c @@ -55,6 +55,7 @@ static char *getString(WMPropList *, WMPropList *); static WMPropList *ANoTitlebar = NULL; static WMPropList *ANoResizebar; static WMPropList *ANoMiniaturizeButton; +static WMPropList *ANoMiniaturizable; static WMPropList *ANoCloseButton; static WMPropList *ANoBorder; static WMPropList *ANoHideOthers; @@ -92,6 +93,7 @@ static void init_wdefaults(WScreen * scr) ANoTitlebar = WMCreatePLString("NoTitlebar"); ANoResizebar = WMCreatePLString("NoResizebar"); ANoMiniaturizeButton = WMCreatePLString("NoMiniaturizeButton"); + ANoMiniaturizable = WMCreatePLString("NoMiniaturizable"); ANoCloseButton = WMCreatePLString("NoCloseButton"); ANoBorder = WMCreatePLString("NoBorder"); ANoHideOthers = WMCreatePLString("NoHideOthers"); @@ -243,6 +245,9 @@ wDefaultFillAttributes(WScreen * scr, char *instance, char *class, value = get_value(dw, dc, dn, da, ANoMiniaturizeButton, No, useGlobalDefault); APPLY_VAL(value, no_miniaturize_button, ANoMiniaturizeButton); + value = get_value(dw, dc, dn, da, ANoMiniaturizable, No, useGlobalDefault); + APPLY_VAL(value, no_miniaturizable, ANoMiniaturizable); + value = get_value(dw, dc, dn, da, ANoCloseButton, No, useGlobalDefault); APPLY_VAL(value, no_close_button, ANoCloseButton); diff --git a/src/winspector.c b/src/winspector.c index 3eb5654..23af4d2 100644 --- a/src/winspector.c +++ b/src/winspector.c @@ -89,9 +89,9 @@ typedef struct InspectorPanel { /* 3rd page. more attributes */ WMFrame *moreFrm; #ifdef XKB_BUTTON_HINT - WMButton *moreChk[11]; + WMButton *moreChk[12]; #else - WMButton *moreChk[10]; + WMButton *moreChk[11]; #endif /* 4th page. icon and workspace */ @@ -146,6 +146,7 @@ static WMPropList *ADontSaveSession; static WMPropList *AEmulateAppIcon; static WMPropList *AFullMaximize; static WMPropList *ASharedAppIcon; +static WMPropList *ANoMiniaturizable; #ifdef XKB_BUTTON_HINT static WMPropList *ANoLanguageButton; #endif @@ -199,6 +200,7 @@ static void make_keys(void) AEmulateAppIcon = WMCreatePLString("EmulateAppIcon"); AFullMaximize = WMCreatePLString("FullMaximize"); ASharedAppIcon = WMCreatePLString("SharedAppIcon"); + ANoMiniaturizable = WMCreatePLString("NoMiniaturizable"); #ifdef XKB_BUTTON_HINT ANoLanguageButton = WMCreatePLString("NoLanguageButton"); #endif @@ -597,8 +599,11 @@ static void saveSettings(WMButton * button, InspectorPanel * panel) value = (WMGetButtonSelected(panel->moreChk[9]) != 0) ? Yes : No; different |= insertAttribute(dict, winDic, AFocusAcrossWorkspace, value, flags); -#ifdef XKB_BUTTON_HINT value = (WMGetButtonSelected(panel->moreChk[10]) != 0) ? Yes : No; + different |= insertAttribute(dict, winDic, ANoMiniaturizable, value, flags); + +#ifdef XKB_BUTTON_HINT + value = (WMGetButtonSelected(panel->moreChk[11]) != 0) ? Yes : No; different |= insertAttribute(dict, winDic, ANoLanguageButton, value, flags); #endif @@ -774,8 +779,9 @@ static void applySettings(WMButton * button, InspectorPanel * panel) WSETUFLAG(wwin, dont_save_session, WMGetButtonSelected(panel->moreChk[7])); WSETUFLAG(wwin, emulate_appicon, WMGetButtonSelected(panel->moreChk[8])); WSETUFLAG(wwin, focus_across_wksp, WMGetButtonSelected(panel->moreChk[9])); + WSETUFLAG(wwin, no_miniaturizable, WMGetButtonSelected(panel->moreChk[10])); #ifdef XKB_BUTTON_HINT - WSETUFLAG(wwin, no_language_button, WMGetButtonSelected(panel->moreChk[10])); + WSETUFLAG(wwin, no_language_button, WMGetButtonSelected(panel->moreChk[11])); #endif WSETUFLAG(wwin, always_user_icon, WMGetButtonSelected(panel->alwChk)); @@ -919,7 +925,7 @@ static void revertSettings(WMButton * button, InspectorPanel * panel) } WMSetButtonSelected(panel->attrChk[i], flag); } - for (i = 0; i < 11; i++) { + for (i = 0; i < 12; i++) { int flag = 0; switch (i) { @@ -953,8 +959,11 @@ static void revertSettings(WMButton * button, InspectorPanel * panel) case 9: flag = WFLAGP(wwin, focus_across_wksp); break; -#ifdef XKB_BUTTON_HINT case 10: + flag = WFLAGP(wwin, no_miniaturizable); + break; +#ifdef XKB_BUTTON_HINT + case 11: flag = WFLAGP(wwin, no_language_button); break; #endif @@ -1329,9 +1338,9 @@ static InspectorPanel *createInspectorForWindow(WWindow * wwin, int xpos, int yp for (i = 0; #ifdef XKB_BUTTON_HINT - i < 11; + i < 12; #else - i < 10; + i < 11; #endif i++) { char *caption = NULL; @@ -1399,8 +1408,14 @@ static InspectorPanel *createInspectorForWindow(WWindow * wwin, int xpos, int yp descr = _("Allow Window Maker to switch workspace to satisfy\n" "a focus request (annoying)."); break; -#ifdef XKB_BUTTON_HINT case 10: + caption = _("Do not let it be minimized"); + flag = WFLAGP(wwin, no_miniaturizable); + descr = _("Do not let the window of this application be\n" + "minimized.\n"); + break; +#ifdef XKB_BUTTON_HINT + case 11: caption = _("Disable language button"); flag = WFLAGP(wwin, no_language_button); descr = _("Remove the `toggle language' button of the window."); -- 1.7.3.4 -- To unsubscribe, send mail to [email protected].
