~ctwm/ctwm/trunk

« back to all changes in this revision

Viewing changes to functions_workspaces.c

  • Committer: Matthew Fuller
  • Date: 2023-01-28 01:02:55 UTC
  • Revision ID: fullermd@over-yonder.net-20230128010255-7y550i4n37xy9x4k
Bypass BorderedLayout for strut'd windows.

This is a hack, and does the wrong thing.  However, due to the way we
currently handle struts, the previous behavior would force a window to
move outside its own strut, which is nonsense.  A proper implementation
would require evaluating struts individually, not cramming them into
BorderedLayout (which already means something similar but distinct), and
encapsulating those checks in all the places that do window positioning.

That's a major change though; this at least avoids the extra-dumb
behavior, and works no worse than 4.0.3 and pre-r644 code for those
corner cases.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Functions related to window occupation and workspaces.  Not the
 
3
 * workspace manager itself; that's off with the icon managers.
 
4
 */
 
5
 
 
6
#include "ctwm.h"
 
7
 
 
8
#include "functions_internal.h"
 
9
#include "screen.h"
 
10
#include "occupation.h"
 
11
#include "workspace_utils.h"
 
12
 
 
13
 
 
14
 
 
15
/*
 
16
 * Setting occupation on a specific window.
 
17
 */
 
18
DFHANDLER(occupy)
 
19
{
 
20
        Occupy(tmp_win);
 
21
}
 
22
 
 
23
DFHANDLER(occupyall)
 
24
{
 
25
        OccupyAll(tmp_win);
 
26
}
 
27
 
 
28
 
 
29
/*
 
30
 * Selecting a window and passing a specific workspace as the function
 
31
 * arg.
 
32
 */
 
33
DFHANDLER(addtoworkspace)
 
34
{
 
35
        AddToWorkSpace(action, tmp_win);
 
36
}
 
37
 
 
38
DFHANDLER(removefromworkspace)
 
39
{
 
40
        RemoveFromWorkSpace(action, tmp_win);
 
41
}
 
42
 
 
43
DFHANDLER(toggleoccupation)
 
44
{
 
45
        ToggleOccupation(action, tmp_win);
 
46
}
 
47
 
 
48
 
 
49
/*
 
50
 * Pushing a window away from / pulling it to "here".
 
51
 */
 
52
DFHANDLER(vanish)
 
53
{
 
54
        WMgrRemoveFromCurrentWorkSpace(Scr->currentvs, tmp_win);
 
55
}
 
56
 
 
57
DFHANDLER(warphere)
 
58
{
 
59
        WMgrAddToCurrentWorkSpaceAndWarp(Scr->currentvs, action);
 
60
}
 
61
 
 
62
 
 
63
/*
 
64
 * Pushing a window away somewhere and potentially following it.
 
65
 */
 
66
DFHANDLER(movetonextworkspace)
 
67
{
 
68
        MoveToNextWorkSpace(Scr->currentvs, tmp_win);
 
69
}
 
70
 
 
71
DFHANDLER(movetoprevworkspace)
 
72
{
 
73
        MoveToPrevWorkSpace(Scr->currentvs, tmp_win);
 
74
}
 
75
 
 
76
DFHANDLER(movetonextworkspaceandfollow)
 
77
{
 
78
        MoveToNextWorkSpaceAndFollow(Scr->currentvs, tmp_win);
 
79
}
 
80
 
 
81
DFHANDLER(movetoprevworkspaceandfollow)
 
82
{
 
83
        MoveToPrevWorkSpaceAndFollow(Scr->currentvs, tmp_win);
 
84
}
 
85
 
 
86
 
 
87
 
 
88
/*
 
89
 * Switching to other workspaces.
 
90
 */
 
91
DFHANDLER(gotoworkspace)
 
92
{
 
93
        /*
 
94
         * n.b.: referenced in the Developer Manual in doc/devman/; if you
 
95
         * make any changes here be sure to tweak that if necessary.
 
96
         */
 
97
        GotoWorkSpaceByName(Scr->currentvs, action);
 
98
}
 
99
 
 
100
DFHANDLER(prevworkspace)
 
101
{
 
102
        GotoPrevWorkSpace(Scr->currentvs);
 
103
}
 
104
 
 
105
DFHANDLER(nextworkspace)
 
106
{
 
107
        GotoNextWorkSpace(Scr->currentvs);
 
108
}
 
109
 
 
110
DFHANDLER(rightworkspace)
 
111
{
 
112
        GotoRightWorkSpace(Scr->currentvs);
 
113
}
 
114
 
 
115
DFHANDLER(leftworkspace)
 
116
{
 
117
        GotoLeftWorkSpace(Scr->currentvs);
 
118
}
 
119
 
 
120
DFHANDLER(upworkspace)
 
121
{
 
122
        GotoUpWorkSpace(Scr->currentvs);
 
123
}
 
124
 
 
125
DFHANDLER(downworkspace)
 
126
{
 
127
        GotoDownWorkSpace(Scr->currentvs);
 
128
}