mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
WPrefs.app: Add ability to set behavior when dragging a maximized window.
You can now set the behavior when dragging a maximized window, i.e., the "DragMaximizedWindow" option from ~/GNUstep/Defaults/WindowMaker, from the "Window Handling" tab of WPrefs.app. Note that to make room for the pop-up button required to set this option, the switch button to set the "OpenTransientOnOwnerWorkspace" option has been moved to the "Expert User Preferences" tab and the "Edge Resistance" frame has been made slightly smaller. Signed-off-by: Carlos R. Mafra <crmafra@gmail.com>
This commit is contained in:
committed by
Carlos R. Mafra
parent
9937566ec4
commit
b20a58d592
@@ -84,8 +84,8 @@ static const struct {
|
||||
{ N_("Enable window snapping."),
|
||||
/* default: */ False, OPTION_WMAKER, "WindowSnapping" },
|
||||
|
||||
{ N_("Return maximized windows to original geometry when moved."),
|
||||
/* default: */ False, OPTION_WMAKER, "UnmaximizeOnMove" }
|
||||
{ N_("Open dialogs in the same workspace as their owners."),
|
||||
/* default: */ False, OPTION_WMAKER, "OpenTransientOnOwnerWorkspace" }
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -61,8 +61,8 @@ typedef struct _Panel {
|
||||
WMButton *opaqresizeB;
|
||||
WMButton *opaqkeybB;
|
||||
|
||||
WMFrame *tranF;
|
||||
WMButton *tranB;
|
||||
WMFrame *dragmaxF;
|
||||
WMPopUpButton *dragmaxP;
|
||||
} _Panel;
|
||||
|
||||
#define ICON_FILE "whandling"
|
||||
@@ -77,7 +77,7 @@ typedef struct _Panel {
|
||||
|
||||
#define THUMB_SIZE 16
|
||||
|
||||
static const char *placements[] = {
|
||||
static const char *const placements[] = {
|
||||
"auto",
|
||||
"random",
|
||||
"manual",
|
||||
@@ -86,6 +86,13 @@ static const char *placements[] = {
|
||||
"center"
|
||||
};
|
||||
|
||||
static const char *const dragMaximizedWindowOptions[] = {
|
||||
"Move",
|
||||
"RestoreGeometry",
|
||||
"Unmaximize",
|
||||
"NoMove"
|
||||
};
|
||||
|
||||
static void sliderCallback(WMWidget * w, void *data)
|
||||
{
|
||||
_Panel *panel = (_Panel *) data;
|
||||
@@ -168,6 +175,25 @@ static int getPlacement(const char *str)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getDragMaximizedWindow(const char *str)
|
||||
{
|
||||
if (!str)
|
||||
return 0;
|
||||
|
||||
if (strcasecmp(str, "Move") == 0)
|
||||
return 0;
|
||||
else if (strcasecmp(str, "RestoreGeometry") == 0)
|
||||
return 1;
|
||||
else if (strcasecmp(str, "Unmaximize") == 0)
|
||||
return 2;
|
||||
else if (strcasecmp(str, "NoMove") == 0)
|
||||
return 3;
|
||||
else
|
||||
wwarning(_("bad option value %s in WindowPlacement. Using default value"), str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void showData(_Panel * panel)
|
||||
{
|
||||
char *str;
|
||||
@@ -200,12 +226,13 @@ static void showData(_Panel * panel)
|
||||
WMSetSliderValue(panel->resS, x);
|
||||
resistanceCallback(NULL, panel);
|
||||
|
||||
str = GetStringForKey("DragMaximizedWindow");
|
||||
WMSetPopUpButtonSelectedItem(panel->dragmaxP, getDragMaximizedWindow(str));
|
||||
|
||||
x = GetIntegerForKey("ResizeIncrement");
|
||||
WMSetSliderValue(panel->resizeS, x);
|
||||
resizeCallback(NULL, panel);
|
||||
|
||||
WMSetButtonSelected(panel->tranB, GetBoolForKey("OpenTransientOnOwnerWorkspace"));
|
||||
|
||||
WMSetButtonSelected(panel->opaqB, GetBoolForKey("OpaqueMove"));
|
||||
WMSetButtonSelected(panel->opaqresizeB, GetBoolForKey("OpaqueResize"));
|
||||
WMSetButtonSelected(panel->opaqkeybB, GetBoolForKey("OpaqueMoveResizeKeyboard"));
|
||||
@@ -232,8 +259,6 @@ static void storeData(_Panel * panel)
|
||||
SetBoolForKey(WMGetButtonSelected(panel->opaqresizeB), "OpaqueResize");
|
||||
SetBoolForKey(WMGetButtonSelected(panel->opaqkeybB), "OpaqueMoveResizeKeyboard");
|
||||
|
||||
SetBoolForKey(WMGetButtonSelected(panel->tranB), "OpenTransientOnOwnerWorkspace");
|
||||
|
||||
SetStringForKey(placements[WMGetPopUpButtonSelectedItem(panel->placP)], "WindowPlacement");
|
||||
sprintf(buf, "%i", WMGetSliderValue(panel->hsli));
|
||||
x = WMCreatePLString(buf);
|
||||
@@ -246,6 +271,9 @@ static void storeData(_Panel * panel)
|
||||
|
||||
SetIntegerForKey(WMGetSliderValue(panel->resS), "EdgeResistance");
|
||||
|
||||
SetStringForKey(dragMaximizedWindowOptions[WMGetPopUpButtonSelectedItem(panel->dragmaxP)],
|
||||
"DragMaximizedWindow");
|
||||
|
||||
SetIntegerForKey(WMGetSliderValue(panel->resizeS), "ResizeIncrement");
|
||||
SetBoolForKey(WMGetButtonSelected(panel->resrB), "Attraction");
|
||||
|
||||
@@ -463,7 +491,7 @@ static void createPanel(Panel * p)
|
||||
|
||||
/**************** Edge Resistance ****************/
|
||||
panel->resF = WMCreateFrame(panel->box);
|
||||
WMResizeWidget(panel->resF, 289, 50);
|
||||
WMResizeWidget(panel->resF, 289, 47);
|
||||
WMMoveWidget(panel->resF, 8, 125);
|
||||
WMSetFrameTitle(panel->resF, _("Edge Resistance"));
|
||||
|
||||
@@ -474,7 +502,7 @@ static void createPanel(Panel * p)
|
||||
|
||||
panel->resS = WMCreateSlider(panel->resF);
|
||||
WMResizeWidget(panel->resS, 80, 15);
|
||||
WMMoveWidget(panel->resS, 10, 22);
|
||||
WMMoveWidget(panel->resS, 10, 20);
|
||||
WMSetSliderMinValue(panel->resS, 0);
|
||||
WMSetSliderMaxValue(panel->resS, 80);
|
||||
WMSetSliderAction(panel->resS, resistanceCallback, panel);
|
||||
@@ -496,17 +524,21 @@ static void createPanel(Panel * p)
|
||||
|
||||
WMMapSubwidgets(panel->resF);
|
||||
|
||||
/**************** Transients on Parent Workspace ****************/
|
||||
panel->tranF = WMCreateFrame(panel->box);
|
||||
WMResizeWidget(panel->tranF, 289, 40);
|
||||
WMMoveWidget(panel->tranF, 8, 185);
|
||||
/**************** Dragging a Maximized Window ****************/
|
||||
panel->dragmaxF = WMCreateFrame(panel->box);
|
||||
WMResizeWidget(panel->dragmaxF, 289, 46);
|
||||
WMMoveWidget(panel->dragmaxF, 8, 179);
|
||||
WMSetFrameTitle(panel->dragmaxF, _("When dragging a maximized window..."));
|
||||
|
||||
panel->tranB = WMCreateSwitchButton(panel->tranF);
|
||||
WMMoveWidget(panel->tranB, 10, 5);
|
||||
WMResizeWidget(panel->tranB, 250, 30);
|
||||
WMSetButtonText(panel->tranB, _("Open dialogs in the same workspace as their owners"));
|
||||
panel->dragmaxP = WMCreatePopUpButton(panel->dragmaxF);
|
||||
WMResizeWidget(panel->dragmaxP, 269, 20);
|
||||
WMMoveWidget(panel->dragmaxP, 10, 20);
|
||||
WMAddPopUpButtonItem(panel->dragmaxP, _("...change position (normal behavior)"));
|
||||
WMAddPopUpButtonItem(panel->dragmaxP, _("...restore unmaximized geometry"));
|
||||
WMAddPopUpButtonItem(panel->dragmaxP, _("...consider the window unmaximized"));
|
||||
WMAddPopUpButtonItem(panel->dragmaxP, _("...do not move the window"));
|
||||
|
||||
WMMapSubwidgets(panel->tranF);
|
||||
WMMapSubwidgets(panel->dragmaxF);
|
||||
|
||||
WMRealizeWidget(panel->box);
|
||||
WMMapSubwidgets(panel->box);
|
||||
|
||||
Reference in New Issue
Block a user