.\" Copyright (c) 2009-2012 Marco Peereboom <marco@peereboom.us>
.\" Copyright (c) 2009 Darrin Chandler <dwchandler@stilyagin.com>
-.\" Copyright (c) 2011-2014 Reginald Kennedy <rk@rejii.com>
+.\" Copyright (c) 2011-2015 Reginald Kennedy <rk@rejii.com>
.\" Copyright (c) 2011-2012 Lawrence Teo <lteo@lteo.net>
.\" Copyright (c) 2011-2012 Tiago Cunha <tcunha@gmx.com>
.\" Copyright (c) 2012 David Hill <dhill@mindcry.org>
and
.Ar stack_dec
for more information.
-.It Ic visible_noswap
-Do not swap on already visible workspace, useful on multi screen setup.
+.It Ic workspace_clamp
+Prevents workspaces from being swapped when attempting to switch to a workspace
+that is mapped to another region.
Use
+.Ar warp_focus
+if you want to focus on the region containing the workspace and
.Ar warp_pointer
-if you want to send pointer in that region.
+if you want to also send the pointer.
Enable by setting to 1.
.It Ic window_class_enabled
Enable or disable displaying the window class name (from WM_CLASS) in the
See the
.Ic bar_format
option for more details.
+.It Ic warp_focus
+Focus on the target window/workspace/region when clamped.
+For example, when attempting to switch to a workspace that is mapped on another
+region and
+.Ar workspace_clamp
+is enabled, focus on the region with the target workspace.
+Enable by setting to 1.
.It Ic warp_pointer
Centers the mouse pointer on the focused window when using key bindings to
change focus, switch workspaces, change regions, etc.
int term_width = 0;
int font_adjusted = 0;
unsigned int mod_key = MODKEY;
+bool warp_focus = false;
bool warp_pointer = false;
-bool visible_noswap = false;
+bool workspace_clamp = false;
/* dmenu search */
struct swm_region *search_r;
if (new_ws == old_ws)
return;
+ other_r = new_ws->r;
+ if (other_r && workspace_clamp) {
+ DNPRINTF(SWM_D_WS, "switchws: ws clamped.\n");
+
+ if (warp_focus) {
+ DNPRINTF(SWM_D_WS, "switchws: warping focus to region "
+ "with ws %d.\n", wsid);
+ focus_region(other_r);
+ center_pointer(other_r);
+ focus_flush();
+ }
+ return;
+ }
+
if ((win = old_ws->focus) != NULL) {
update_window_color(win);
&none);
}
- other_r = new_ws->r;
- if (other_r == NULL) {
- /* the other workspace is hidden, hide this one */
- old_ws->r = NULL;
- unmap_old = true;
- } else {
- if (visible_noswap) {
- center_pointer(other_r);
- return;
- }
-
+ if (other_r) {
/* the other ws is visible in another region, exchange them */
other_r->ws_prior = new_ws;
other_r->ws = old_ws;
old_ws->r = other_r;
+ } else {
+ /* the other workspace is hidden, hide this one */
+ old_ws->r = NULL;
+ unmap_old = true;
}
+
this_r->ws_prior = old_ws;
this_r->ws = new_ws;
new_ws->r = this_r;
SWM_S_URGENT_COLLAPSE,
SWM_S_URGENT_ENABLED,
SWM_S_VERBOSE_LAYOUT,
- SWM_S_VISIBLE_NOSWAP,
+ SWM_S_WARP_FOCUS,
SWM_S_WARP_POINTER,
SWM_S_WINDOW_CLASS_ENABLED,
SWM_S_WINDOW_INSTANCE_ENABLED,
SWM_S_WINDOW_NAME_ENABLED,
+ SWM_S_WORKSPACE_CLAMP,
SWM_S_WORKSPACE_LIMIT,
SWM_S_WORKSPACE_NAME,
};
layouts[i].l_string = plain_stacker;
}
break;
- case SWM_S_VISIBLE_NOSWAP:
- visible_noswap = (atoi(value) != 0);
+ case SWM_S_WARP_FOCUS:
+ warp_focus = (atoi(value) != 0);
break;
case SWM_S_WARP_POINTER:
warp_pointer = (atoi(value) != 0);
case SWM_S_WINDOW_NAME_ENABLED:
window_name_enabled = (atoi(value) != 0);
break;
+ case SWM_S_WORKSPACE_CLAMP:
+ workspace_clamp = (atoi(value) != 0);
+ break;
case SWM_S_WORKSPACE_LIMIT:
workspace_limit = atoi(value);
if (workspace_limit > SWM_WS_MAX)
{ "urgent_collapse", setconfvalue, SWM_S_URGENT_COLLAPSE },
{ "urgent_enabled", setconfvalue, SWM_S_URGENT_ENABLED },
{ "verbose_layout", setconfvalue, SWM_S_VERBOSE_LAYOUT },
- { "visible_noswap", setconfvalue, SWM_S_VISIBLE_NOSWAP },
+ { "warp_focus", setconfvalue, SWM_S_WARP_FOCUS },
{ "warp_pointer", setconfvalue, SWM_S_WARP_POINTER },
{ "window_class_enabled", setconfvalue, SWM_S_WINDOW_CLASS_ENABLED },
{ "window_instance_enabled", setconfvalue, SWM_S_WINDOW_INSTANCE_ENABLED },
{ "window_name_enabled", setconfvalue, SWM_S_WINDOW_NAME_ENABLED },
+ { "workspace_clamp", setconfvalue, SWM_S_WORKSPACE_CLAMP },
{ "workspace_limit", setconfvalue, SWM_S_WORKSPACE_LIMIT },
{ "name", setconfvalue, SWM_S_WORKSPACE_NAME },
};