]> git.mdlowis.com Git - proto/labwc.git/commitdiff
feat: add "AutoPlace" action
authorAndrew J. Hesford <ajh@sideband.org>
Thu, 28 Dec 2023 21:47:21 +0000 (16:47 -0500)
committerJohan Malm <johanmalm@users.noreply.github.com>
Thu, 28 Dec 2023 22:09:44 +0000 (22:09 +0000)
The AutoPlace action will apply placement_find_best() to an active view,
moving it to a position on its output that will minimize overlap with
other views.

docs/labwc-actions.5.scd
docs/rc.xml.all
src/action.c

index f639c4905bff419a507d6ad4802efab4a531ab92..6558d0fc01c2b74b02f33f6d40333ce113cd1c03 100644 (file)
@@ -219,6 +219,10 @@ Actions are used in menus and keyboard/mouse bindings.
        *output_name* The name of virtual output. If not supplied, will remove the
        last virtual output added.
 
+*<action name="AutoPlace" />*
+       Use the automatic placement policy to move the active window to a
+       position on its output that will minimize overlap with other windows.
+
 *<action name="None" />*
        If used as the only action for a binding: clear an earlier defined binding.
 
index c5ef69cf09086970dfea2102953c7e5e241fd113..316586d9022505887ba2a4669bff3306af8bce0f 100644 (file)
       <windowRule title="pcmanfm-desktop*">
         <skipTaskbar>yes</skipTaskbar>
         <skipWindowSwitcher>yes</skipWindowSwitcher>
-       <fixedPosition>yes</fixedPosition>
+        <fixedPosition>yes</fixedPosition>
         <action name="MoveTo" x="0" y="0" />
         <action name="ToggleAlwaysOnBottom"/>
       </windowRule>
+      <windowRule identifier="org.qutebrowser.qutebrowser">
+        <action name="ResizeTo" width="1024" y="800" />
+        <action name="AutoPlace"/>
+      </windowRule>
     </windowRules>
   -->
 
index fb442ac6e5694e88d5798e9ca8835ca261b31c5d..2259ba7d22b089a7fe35605e17add6de9f4d94cb 100644 (file)
@@ -16,6 +16,7 @@
 #include "debug.h"
 #include "labwc.h"
 #include "menu/menu.h"
+#include "placement.h"
 #include "regions.h"
 #include "ssd.h"
 #include "view.h"
@@ -100,6 +101,7 @@ enum action_type {
        ACTION_TYPE_FOR_EACH,
        ACTION_TYPE_VIRTUAL_OUTPUT_ADD,
        ACTION_TYPE_VIRTUAL_OUTPUT_REMOVE,
+       ACTION_TYPE_AUTO_PLACE,
 };
 
 const char *action_names[] = {
@@ -146,6 +148,7 @@ const char *action_names[] = {
        "ForEach",
        "VirtualOutputAdd",
        "VirtualOutputRemove",
+       "AutoPlace",
        NULL
 };
 
@@ -940,6 +943,14 @@ actions_run(struct view *activator, struct server *server,
                                output_remove_virtual(server, output_name);
                        }
                        break;
+               case ACTION_TYPE_AUTO_PLACE:
+                       if (view) {
+                               int x = 0, y = 0;
+                               if (placement_find_best(view, &x, &y)) {
+                                       view_move(view, x, y);
+                               }
+                       }
+                       break;
                case ACTION_TYPE_INVALID:
                        wlr_log(WLR_ERROR, "Not executing unknown action");
                        break;