all repos — openbox @ 77ee361f5cedb415c1189b0a75bde83a1a275f35

openbox fork - make it a bit more like ryudo

allow warping the mouse pointer when switching desktops by bumping into the edge of the monitor with a window

based on a patch by Nathaniel Gephart <computinchuck@gmail.com>
Dana Jansens danakj@orodu.net
commit

77ee361f5cedb415c1189b0a75bde83a1a275f35

parent

b05ac359b8a5a91cd2a115ba4612e8acfdf1d8d6

5 files changed, 46 insertions(+), 4 deletions(-)

jump to
M data/rc.xmldata/rc.xml

@@ -318,6 +318,9 @@ <screenEdgeWarpTime>400</screenEdgeWarpTime>

<!-- Time before changing desktops when the pointer touches the edge of the screen while moving a window, in milliseconds (1000 = 1 second). Set this to 0 to disable warping --> + <screenEdgeWarpMouse>false</screenEdgeWarpMouse> + <!-- Set this to TRUE to move the mouse pointer across the desktop when + switching due to hitting the edge of the screen --> <context name="Frame"> <mousebind button="A-Left" action="Press">
M data/rc.xsddata/rc.xsd

@@ -210,6 +210,7 @@ <xsd:sequence>

<xsd:element minOccurs="0" name="dragThreshold" type="xsd:integer"/> <xsd:element minOccurs="0" name="doubleClickTime" type="xsd:integer"/> <xsd:element minOccurs="0" name="screenEdgeWarpTime" type="xsd:integer"/> + <xsd:element minOccurs="0" name="screenEdgeWarpMouse" type="ob:bool"/> <xsd:element maxOccurs="unbounded" name="context" type="ob:context"/> </xsd:sequence> </xsd:complexType>
M openbox/config.copenbox/config.c

@@ -86,9 +86,10 @@

guint config_keyboard_reset_keycode; guint config_keyboard_reset_state; -gint config_mouse_threshold; -gint config_mouse_dclicktime; -gint config_mouse_screenedgetime; +gint config_mouse_threshold; +gint config_mouse_dclicktime; +gint config_mouse_screenedgetime; +gboolean config_mouse_screenedgewarp; guint config_menu_hide_delay; gboolean config_menu_middle;

@@ -465,6 +466,8 @@ edge it basically never stops */

if (config_mouse_screenedgetime && config_mouse_screenedgetime < 25) config_mouse_screenedgetime = 25; } + if ((n = obt_xml_find_node(node, "screenEdgeWarpMouse"))) + config_mouse_screenedgewarp = obt_xml_node_bool(n); n = obt_xml_find_node(node, "context"); while (n) {

@@ -1030,6 +1033,7 @@

config_mouse_threshold = 8; config_mouse_dclicktime = 200; config_mouse_screenedgetime = 400; + config_mouse_screenedgewarp = FALSE; bind_default_mouse();
M openbox/config.hopenbox/config.h

@@ -180,6 +180,9 @@ extern gint config_mouse_dclicktime;

/*! Number of milliseconds that the mouse has to be on the screen edge before a screen edge event is triggered */ extern gint config_mouse_screenedgetime; +/*! When TRUE, the mouse is warped to the other side of the desktop after + switching desktops from bumping the screen edge */ +extern gboolean config_mouse_screenedgewarp; /*! Number of pixels to resist while crossing another window's edge */ extern gint config_resist_win;
M openbox/moveresize.copenbox/moveresize.c

@@ -529,6 +529,34 @@ *dw = nw - ow;

*dh = nh - oh; } +static void edge_warp_move_ptr(void) +{ + gint x, y; + const Rect* a; + + screen_pointer_pos(&x, &y); + a = screen_physical_area_all_monitors(); + + switch (edge_warp_dir) { + case OB_DIRECTION_NORTH: + y = a->height - 1; + break; + case OB_DIRECTION_EAST: + x = a->x; + break; + case OB_DIRECTION_SOUTH: + y = a->y; + break; + case OB_DIRECTION_WEST: + x = a->width - 1; + break; + default: + g_assert_not_reached(); + } + + XWarpPointer(obt_display, 0, obt_root(ob_screen), 0, 0, 0, 0, x, y); +} + static gboolean edge_warp_delay_func(gpointer data) { guint d;

@@ -537,7 +565,10 @@ /* only fire every second time. so it's fast the first time, but slower

after that */ if (edge_warp_odd) { d = screen_find_desktop(screen_desktop, edge_warp_dir, TRUE, FALSE); - if (d != screen_desktop) screen_set_desktop(d, TRUE); + if (d != screen_desktop) { + if (config_mouse_screenedgewarp) edge_warp_move_ptr(); + screen_set_desktop(d, TRUE); + } } edge_warp_odd = !edge_warp_odd;