mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-21 13:28:05 +01:00
Added runtime option that lets one to set a small border around the
workspace that will not be covered by windows when maximizing, and thus allowing easy access to the clip or menus using the mouse in this border area, even when the screen is covered by windows maximized in both horizontal and vertical directions. A make clean is needed in src/ because new members were added to the WPreferences structure in WindowMaker.h
This commit is contained in:
@@ -49,6 +49,12 @@ typedef struct _Panel {
|
||||
WMButton *modeB;
|
||||
#endif /* XKB_MODELOCK */
|
||||
|
||||
WMFrame *borderF;
|
||||
WMSlider *borderS;
|
||||
WMLabel *borderL;
|
||||
WMButton *lrB;
|
||||
WMButton *tbB;
|
||||
|
||||
} _Panel;
|
||||
|
||||
|
||||
@@ -56,11 +62,30 @@ typedef struct _Panel {
|
||||
#define ICON_FILE "ergonomic"
|
||||
|
||||
|
||||
static void
|
||||
borderCallback(WMWidget *w, void *data)
|
||||
{
|
||||
_Panel *panel = (_Panel*)data;
|
||||
char buffer[64];
|
||||
int i;
|
||||
|
||||
i = WMGetSliderValue(panel->borderS);
|
||||
|
||||
if (i == 0)
|
||||
WMSetLabelText(panel->borderL, "OFF");
|
||||
else {
|
||||
sprintf(buffer, "%i pixel%s", i, i>1 ? "s" : "");
|
||||
WMSetLabelText(panel->borderL, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
showData(_Panel *panel)
|
||||
{
|
||||
char *str;
|
||||
|
||||
int x;
|
||||
|
||||
str = GetStringForKey("ResizeDisplay");
|
||||
if (!str)
|
||||
str = "corner";
|
||||
@@ -82,7 +107,24 @@ showData(_Panel *panel)
|
||||
WMSetPopUpButtonSelectedItem(panel->posiP, 1);
|
||||
else if (strcasecmp(str, "floating")==0)
|
||||
WMSetPopUpButtonSelectedItem(panel->posiP, 2);
|
||||
|
||||
|
||||
x = GetIntegerForKey("WorkspaceBorderSize");
|
||||
x = x<0 ? 0 : x;
|
||||
x = x>5 ? 5 : x;
|
||||
WMSetSliderValue(panel->borderS, x);
|
||||
borderCallback(NULL, panel);
|
||||
|
||||
str = GetStringForKey("WorkspaceBorder");
|
||||
if (!str)
|
||||
str = "none";
|
||||
if (strcasecmp(str, "LeftRight")==0) {
|
||||
WMSetButtonSelected(panel->lrB, True);
|
||||
} else if (strcasecmp(str, "TopBottom")==0) {
|
||||
WMSetButtonSelected(panel->tbB, True);
|
||||
} else if (strcasecmp(str, "AllDirections")==0) {
|
||||
WMSetButtonSelected(panel->tbB, True);
|
||||
WMSetButtonSelected(panel->lrB, True);
|
||||
}
|
||||
|
||||
WMSetButtonSelected(panel->raisB, GetBoolForKey("CirculateRaise"));
|
||||
#ifdef XKB_MODELOCK
|
||||
@@ -100,7 +142,8 @@ static void
|
||||
storeData(_Panel *panel)
|
||||
{
|
||||
char *str;
|
||||
|
||||
Bool lr, tb;
|
||||
|
||||
switch (WMGetPopUpButtonSelectedItem(panel->sizeP)) {
|
||||
case 0:
|
||||
str = "corner";
|
||||
@@ -130,6 +173,19 @@ storeData(_Panel *panel)
|
||||
}
|
||||
SetStringForKey(str, "MoveDisplay");
|
||||
|
||||
lr = WMGetButtonSelected(panel->lrB);
|
||||
tb = WMGetButtonSelected(panel->tbB);
|
||||
if (lr && tb)
|
||||
str = "AllDirections";
|
||||
else if (lr)
|
||||
str = "LeftRight";
|
||||
else if (tb)
|
||||
str = "TopBottom";
|
||||
else
|
||||
str = "None";
|
||||
SetStringForKey(str, "WorkspaceBorder");
|
||||
SetIntegerForKey(WMGetSliderValue(panel->borderS), "WorkspaceBorderSize");
|
||||
|
||||
SetBoolForKey(WMGetButtonSelected(panel->raisB), "CirculateRaise");
|
||||
#ifdef XKB_MODELOCK
|
||||
SetBoolForKey(WMGetButtonSelected(panel->modeB), "KbdModeLock");
|
||||
@@ -211,23 +267,53 @@ createPanel(Panel *p)
|
||||
|
||||
/***************** Options ****************/
|
||||
panel->optF = WMCreateFrame(panel->frame);
|
||||
WMResizeWidget(panel->optF, 485, 75);
|
||||
WMMoveWidget(panel->optF, 20, 145);
|
||||
WMResizeWidget(panel->optF, 235, 75);
|
||||
WMMoveWidget(panel->optF, 270, 145);
|
||||
|
||||
panel->raisB = WMCreateSwitchButton(panel->optF);
|
||||
WMResizeWidget(panel->raisB, 440, 20);
|
||||
WMMoveWidget(panel->raisB, 20, 15);
|
||||
WMSetButtonText(panel->raisB, _("Raise window when switching focus with keyboard (CirculateRaise)."));
|
||||
WMResizeWidget(panel->raisB, 210, 30);
|
||||
WMMoveWidget(panel->raisB, 15, 7);
|
||||
WMSetButtonText(panel->raisB, _("Raise window when switching focus with keyboard."));
|
||||
|
||||
#ifdef XKB_MODELOCK
|
||||
panel->modeB = WMCreateSwitchButton(panel->optF);
|
||||
WMResizeWidget(panel->modeB, 440, 20);
|
||||
WMMoveWidget(panel->modeB, 20, 40);
|
||||
WMSetButtonText(panel->modeB, _("Keep keyboard language status for each window."));
|
||||
WMResizeWidget(panel->modeB, 210, 30);
|
||||
WMMoveWidget(panel->modeB, 15, 40);
|
||||
WMSetButtonText(panel->modeB, _("Enable keyboard language switch button in window titlebars."));
|
||||
#endif
|
||||
|
||||
WMMapSubwidgets(panel->optF);
|
||||
|
||||
/***************** Workspace border ****************/
|
||||
panel->borderF = WMCreateFrame(panel->frame);
|
||||
WMResizeWidget(panel->borderF, 240, 75);
|
||||
WMMoveWidget(panel->borderF, 20, 145);
|
||||
WMSetFrameTitle(panel->borderF, _("Workspace border"));
|
||||
|
||||
panel->borderS = WMCreateSlider(panel->borderF);
|
||||
WMResizeWidget(panel->borderS, 80, 15);
|
||||
WMMoveWidget(panel->borderS, 20, 20);
|
||||
WMSetSliderMinValue(panel->borderS, 0);
|
||||
WMSetSliderMaxValue(panel->borderS, 5);
|
||||
WMSetSliderAction(panel->borderS, borderCallback, panel);
|
||||
|
||||
panel->borderL = WMCreateLabel(panel->borderF);
|
||||
WMResizeWidget(panel->borderL, 50, 15);
|
||||
WMMoveWidget(panel->borderL, 105, 20);
|
||||
|
||||
panel->lrB = WMCreateSwitchButton(panel->borderF);
|
||||
WMMoveWidget(panel->lrB, 20, 40);
|
||||
WMResizeWidget(panel->lrB, 90, 30);
|
||||
WMSetButtonText(panel->lrB, _("Left/Right"));
|
||||
|
||||
panel->tbB = WMCreateSwitchButton(panel->borderF);
|
||||
WMMoveWidget(panel->tbB, 120, 40);
|
||||
WMResizeWidget(panel->tbB, 90, 30);
|
||||
WMSetButtonText(panel->tbB, _("Top/Bottom"));
|
||||
|
||||
|
||||
WMMapSubwidgets(panel->borderF);
|
||||
|
||||
WMRealizeWidget(panel->frame);
|
||||
WMMapSubwidgets(panel->frame);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user