]> git.sur5r.net Git - i3/i3/commitdiff
Implement the configuration option floating_modifier and document it
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 24 Jun 2009 18:31:00 +0000 (20:31 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 24 Jun 2009 18:31:00 +0000 (20:31 +0200)
docs/userguide
i3.config
include/config.h
src/config.c
src/handlers.c

index 8cde2939c5c31b6b33a63830080f573dbef40163..36c30d62f843bf1416256eff9977ba3a1e84dde8 100644 (file)
@@ -206,6 +206,26 @@ umlauts or special characters 'and' having some comfortably reachable key
 bindings. For example, when typing, capslock+1 or capslock+2 for switching
 workspaces is totally convenient. Try it :-).
 
+=== The floating modifier
+
+To move floating windows with your mouse, you can either grab their titlebar
+or configure the so called floating modifier which you can then press and
+click anywhere in the window itself. The most common setup is to configure
+it as the same one you use for managing windows (Mod1 for example). Afterwards,
+you can press Mod1, click into a window using your left mouse button and drag
+it to the position you want it at.
+
+*Syntax*:
+--------------------------------
+floating_modifier <Modifiers>
+--------------------------------
+
+*Examples*:
+--------------------------------
+floating_modifier Mod1
+--------------------------------
+
+
 === Variables
 
 As you learned in the previous section about keyboard bindings, you will have
index 19f3caee50cdd3ddfb135b42202797dc60191a1c..816b364cd7dfa892abd52821de58b888227ac12d 100644 (file)
--- a/i3.config
+++ b/i3.config
@@ -9,6 +9,9 @@ terminal /usr/bin/urxvt
 # ISO 10646 = Unicode
 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
 
+# Use Mouse+Mod1 to drag floating windows to their wanted position
+floating_modifier Mod1
+
 # Fullscreen (Mod1+f)
 bind Mod1+41 f
 
index 330b194cd3feadb503d145a0cb46a84b7591b2a6..1e85d4712dbea43b907d08adcd3bbd7a2b4ba22c 100644 (file)
@@ -3,7 +3,7 @@
  *
  * i3 - an improved dynamic tiling window manager
  *
- * (c) 2009 Michael Stapelberg and contributors
+ * © 2009 Michael Stapelberg and contributors
  *
  * See file LICENSE for license information.
  *
@@ -37,6 +37,10 @@ struct Config {
         const char *terminal;
         const char *font;
 
+        /** The modifier which needs to be pressed in combination with your mouse
+         * buttons to do things with floating windows (move, resize) */
+        uint32_t floating_modifier;
+
         /* Color codes are stored here */
         struct config_client {
                 struct Colortriple focused;
index 197fd4e1f08335f4171a4bb456080ba09973f7a2..d55c2a75542a93f393c398d19c3cf60bbe4624c4 100644 (file)
@@ -215,6 +215,30 @@ void load_configuration(xcb_connection_t *conn, const char *override_configpath)
                         continue;
                 }
 
+                if (strcasecmp(key, "floating_modifier") == 0) {
+                        char *walk = value;
+                        uint32_t modifiers = 0;
+
+                        while (*walk != '\0') {
+                                /* Need to check for Mod1-5, Ctrl, Shift, Mode_switch */
+                                CHECK_MODIFIER(SHIFT);
+                                CHECK_MODIFIER(CONTROL);
+                                CHECK_MODIFIER(MODE_SWITCH);
+                                CHECK_MODIFIER(MOD1);
+                                CHECK_MODIFIER(MOD2);
+                                CHECK_MODIFIER(MOD3);
+                                CHECK_MODIFIER(MOD4);
+                                CHECK_MODIFIER(MOD5);
+
+                                /* No modifier found? Then we’re done with this step */
+                                break;
+                        }
+
+                        LOG("Floating modifiers = %d\n", modifiers);
+                        config.floating_modifier = modifiers;
+                        continue;
+                }
+
                 /* assign window class[/window title] → workspace */
                 if (strcasecmp(key, "assign") == 0) {
                         LOG("assign: \"%s\"\n", value);
index 3930e1e75d0bb827f00f6952fab071c7a0ce77ff..11c8e576258e3a8f6762c4c7955b4b9ed3607517 100644 (file)
@@ -302,9 +302,11 @@ int handle_button_press(void *ignored, xcb_connection_t *conn, xcb_button_press_
                 client = table_get(&by_parent, event->event);
                 border_click = true;
         }
-        /* See if this was a click with Mod1. If so, we need to move around
-         * the client if it was floating. if not, we just process as usual. */
-        if ((event->state & XCB_MOD_MASK_1) != 0) {
+        /* See if this was a click with the configured modifier. If so, we need
+         * to move around the client if it was floating. if not, we just process
+         * as usual. */
+        if (config.floating_modifier != 0 &&
+            (event->state & config.floating_modifier) != 0) {
                 if (client == NULL) {
                         LOG("Not handling, Mod1 was pressed and no client found\n");
                         return 1;