kwo pushed a commit to branch master. http://git.enlightenment.org/e16/e16.git/commit/?id=0a6b8e177c140dd9c7413e78c4936ce28e1b051c
commit 0a6b8e177c140dd9c7413e78c4936ce28e1b051c Author: Kim Woelders <[email protected]> Date: Tue Jun 23 20:01:41 2020 +0200 Add option to allow only the primary mouse button to raise windows Patch by Simon Kesenci --- docs/e16.xml | 2 ++ src/E.h | 1 + src/focus.c | 17 +++++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/e16.xml b/docs/e16.xml index 01647de2..442bc91e 100644 --- a/docs/e16.xml +++ b/docs/e16.xml @@ -1069,6 +1069,8 @@ effects.waves.enabled = 0 focus.mode = 1 # [bool] Raise window when clicked focus.clickraises = 1 +# [bool] Only primary mouse button can raise window +focus.only_button1_can_raise = 0 # [bool] Transients are placed where leader is focus.transientsfollowleader = 1 # [bool] When a transient is mapped the desk/area is switched to where the transient appears diff --git a/src/E.h b/src/E.h index 99bedd65..bb3c9650 100644 --- a/src/E.h +++ b/src/E.h @@ -186,6 +186,7 @@ typedef struct { struct { int mode; char clickraises; + char only_button1_can_raise; char transientsfollowleader; char switchfortransientmap; char all_new_windows_get_focus; diff --git a/src/focus.c b/src/focus.c index 81116056..d974d125 100644 --- a/src/focus.c +++ b/src/focus.c @@ -225,6 +225,10 @@ static void ClickGrabsSet(EWin * ewin) { int set = 0; + unsigned int raise_button = AnyButton; + + if (Conf.focus.only_button1_can_raise) + raise_button = Button1; if ((Conf.focus.clickraises && !EwinListStackIsRaised(ewin)) || (!ewin->state.active && !ewin->state.inhibit_focus)) @@ -234,7 +238,7 @@ ClickGrabsSet(EWin * ewin) { if (!ewin->state.click_grab_isset) { - GrabButtonSet(AnyButton, AnyModifier, EwinGetClientConWin(ewin), + GrabButtonSet(raise_button, AnyModifier, EwinGetClientConWin(ewin), ButtonPressMask, ECSR_PGRAB, 1); if (EDebug(EDBUG_TYPE_GRABS)) Eprintf("%s: %#x set %s\n", __func__, @@ -246,7 +250,7 @@ ClickGrabsSet(EWin * ewin) { if (ewin->state.click_grab_isset) { - GrabButtonRelease(AnyButton, AnyModifier, + GrabButtonRelease(raise_button, AnyModifier, EwinGetClientConWin(ewin)); if (EDebug(EDBUG_TYPE_GRABS)) Eprintf("%s: %#x unset %s\n", __func__, @@ -736,6 +740,7 @@ typedef struct { struct { int mode; char clickalways; + char button1_raises; char new_focus; char new_focus_if_group; char popup_focus; @@ -771,6 +776,7 @@ _DlgApplyFocus(Dialog * d, int val __UNUSED__, void *data __UNUSED__) Conf.focus.mode = dd->focus.mode; Conf.focus.clickraises = dd->focus.clickalways; + Conf.focus.only_button1_can_raise = dd->focus.button1_raises; Conf.focus.all_new_windows_get_focus = dd->focus.new_focus; Conf.focus.new_windows_get_focus_if_group_focused = dd->focus.new_focus_if_group; @@ -808,6 +814,7 @@ _DlgFillFocus(Dialog * d, DItem * table, void *data __UNUSED__) dd->focus.mode = Conf.focus.mode; dd->focus.clickalways = Conf.focus.clickraises; + dd->focus.button1_raises = Conf.focus.only_button1_can_raise; dd->focus.new_focus = Conf.focus.all_new_windows_get_focus; dd->focus.new_focus_if_group = Conf.focus.new_windows_get_focus_if_group_focused; @@ -861,6 +868,11 @@ _DlgFillFocus(Dialog * d, DItem * table, void *data __UNUSED__) DialogItemSetText(di, _("Clicking in a window always raises it")); DialogItemCheckButtonSetPtr(di, &dd->focus.clickalways); + di = DialogAddItem(table, DITEM_CHECKBUTTON); + DialogItemSetColSpan(di, 2); + DialogItemSetText(di, _("Only primary mouse button can raise window")); + DialogItemCheckButtonSetPtr(di, &dd->focus.button1_raises); + di = DialogAddItem(table, DITEM_SEPARATOR); DialogItemSetColSpan(di, 2); @@ -1168,6 +1180,7 @@ static const IpcItem FocusIpcArray[] = { static const CfgItem FocusCfgItems[] = { CFG_ITEM_INT(Conf.focus, mode, MODE_FOCUS_SLOPPY), CFG_ITEM_BOOL(Conf.focus, clickraises, 1), + CFG_ITEM_BOOL(Conf.focus, only_button1_can_raise, 0), CFG_ITEM_BOOL(Conf.focus, transientsfollowleader, 1), CFG_ITEM_BOOL(Conf.focus, switchfortransientmap, 1), CFG_ITEM_BOOL(Conf.focus, all_new_windows_get_focus, 0), --
