all repos — openbox @ 8228e90450c147c647465d281fa16caeca07fd10

openbox fork - make it a bit more like ryudo

openbox/action.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-

   action.h for the Openbox window manager
   Copyright (c) 2006        Mikael Magnusson
   Copyright (c) 2003-2007   Dana Jansens

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   See the COPYING file for a copy of the GNU General Public License.
*/

#ifndef __action_h
#define __action_h

#include "misc.h"
#include "frame.h"
#include "parser/parse.h"

struct _ObClient;

typedef struct _ObAction ObAction;

/* These have to all have a Client* at the top even if they don't use it, so
   that I can set it blindly later on. So every function will have a Client*
   available (possibly NULL though) if it wants it.
*/

typedef enum
{
    OB_CLIENT_ACTION_NO,
    OB_CLIENT_ACTION_OPTIONAL,
    OB_CLIENT_ACTION_ALWAYS
} ObClientActionReq;

struct AnyAction {
    ObClientActionReq client_action;
    struct _ObClient *c;
    ObFrameContext context;
    gboolean interactive;
    gint x;
    gint y;
    gint button;
    Time time;
};

struct InteractiveAction {
    struct AnyAction any;
    gboolean final;
    gboolean cancel;
};

struct InterDirectionalAction{
    struct InteractiveAction inter;
    ObDirection direction;
    gboolean dialog;
    gboolean dock_windows;
    gboolean desktop_windows;
};

struct DirectionalAction{
    struct AnyAction any;
    ObDirection direction;
    gboolean hang;
};

struct Debug {
    gchar *string;
};

struct Execute {
    struct AnyAction any;
    gchar *path;
    gboolean startupnotify;
    gchar *name;
    gchar *icon_name;
};

struct ClientAction {
    struct AnyAction any;
};

struct Activate {
    struct AnyAction any;
    gboolean here; /* bring it to the current desktop */
};

struct MoveResizeRelative {
    struct AnyAction any;
    gint deltax;
    gint deltay;
    gint deltaxl;
    gint deltayu;
};

struct SendToDesktop {
    struct AnyAction any;
    guint desk;
    gboolean follow;
};

struct SendToDesktopDirection {
    struct InteractiveAction inter;
    ObDirection dir;
    gboolean wrap;
    gboolean linear;
    gboolean follow;
};

struct Desktop {
    struct AnyAction inter;
    guint desk;
};

struct Layer {
    struct AnyAction any;
    gint layer; /* < 0 = below, 0 = normal, > 0 = above */
};

struct DesktopDirection {
    struct InteractiveAction inter;
    ObDirection dir;
    gboolean wrap;
    gboolean linear;
};

struct MoveResize {
    struct AnyAction any;
    gboolean keyboard;
    guint32 corner;
};

struct ShowMenu {
    struct AnyAction any;
    gchar *name;
};

struct AddRemoveDesktop {
    struct AnyAction any;
    gboolean current;
};

struct CycleWindows {
    struct InteractiveAction inter;
    gboolean linear;
    gboolean forward;
    gboolean dialog;
    gboolean dock_windows;
    gboolean desktop_windows;
    gboolean all_desktops;
};

struct Stacking {
    struct AnyAction any;
};

union ActionData {
    struct AnyAction any;
    struct InteractiveAction inter;
    struct InterDirectionalAction interdiraction;
    struct DirectionalAction diraction;
    struct Debug debug;
    struct Execute execute;
    struct ClientAction client;
    struct Activate activate;
    struct MoveResizeRelative relative;
    struct SendToDesktop sendto;
    struct SendToDesktopDirection sendtodir;
    struct Desktop desktop;
    struct DesktopDirection desktopdir;
    struct MoveResize moveresize;
    struct ShowMenu showmenu;
    struct CycleWindows cycle;
    struct Layer layer;
    struct Stacking stacking;
    struct AddRemoveDesktop addremovedesktop;
};

struct _ObAction {
    guint ref;

    /* The func member acts like an enum to tell which one of the structs in
       the data union are valid.
    */
    void (*func)(union ActionData *data);
    union ActionData data;
};

/* Creates a new Action from the name of the action
   A few action types need data set after making this call still. Check if
   the returned action's "func" is one of these.
   action_debug - the string to print should be set
   action_execute - the path needs to be set
   action_restart - the path can optionally be set
   action_desktop - the destination desktop needs to be set
   action_send_to_desktop - the destination desktop needs to be set
   action_move_relative_horz - the delta
   action_move_relative_vert - the delta
   action_resize_relative_horz - the delta
   action_resize_relative_vert - the delta
   action_move_relative - the deltas
   action_resize_relative - the deltas
*/

ObAction* action_from_string(const gchar *name, ObUserAction uact);
ObAction* action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                       ObUserAction uact);
void action_ref(ObAction *a);
void action_unref(ObAction *a);

ObAction* action_copy(const ObAction *a);

/*! Executes a list of actions.
  @param c The client associated with the action. Can be NULL.
  @param state The keyboard modifiers state at the time the user action occured
  @param button The mouse button used to execute the action.
  @param x The x coord at which the user action occured.
  @param y The y coord at which the user action occured.
  @param cancel If the action is cancelling an interactive action. This only
         affects interactive actions, but should generally always be FALSE.
  @param done If the action is completing an interactive action. This only
         affects interactive actions, but should generally always be FALSE.
*/
void action_run_list(GSList *acts, struct _ObClient *c, ObFrameContext context,
                     guint state, guint button, gint x, gint y, Time time,
                     gboolean cancel, gboolean done);

#define action_run_mouse(a, c, n, s, b, x, y, t) \
    action_run_list(a, c, n, s, b, x, y, t, FALSE, FALSE)

#define action_run_interactive(a, c, s, t, n, d) \
    action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, -1, -1, t, n, d)

#define action_run_key(a, c, s, x, y, t) \
    action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, x, y, t, FALSE, FALSE)

#define action_run(a, c, s, t) \
    action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, -1, -1, t, FALSE, FALSE)

void action_run_string(const gchar *name, struct _ObClient *c, Time time);

/* Debug */
void action_debug(union ActionData *data);
/* Execute */
void action_execute(union ActionData *data);
/* ActivateAction */
void action_activate(union ActionData *data);
/* ClientAction */
void action_focus(union ActionData *data);
/* ClientAction */
void action_unfocus(union ActionData *data);
/* ClientAction */
void action_iconify(union ActionData *data);
/* ClientAction */
void action_focus_order_to_bottom(union ActionData *data);
/* ClientAction */
void action_raiselower(union ActionData *data);
/* ClientAction */
void action_raise(union ActionData *data);
/* ClientAction */
void action_lower(union ActionData *data);
/* ClientAction */
void action_close(union ActionData *data);
/* ClientAction */
void action_kill(union ActionData *data);
/* ClientAction */
void action_shade(union ActionData *data);
/* ClientAction */
void action_shadelower(union ActionData *data);
/* ClientAction */
void action_unshaderaise(union ActionData *data);
/* ClientAction */
void action_unshade(union ActionData *data);
/* ClientAction */
void action_toggle_shade(union ActionData *data);
/* ClientAction */
void action_toggle_omnipresent(union ActionData *data);
/* MoveResizeRelative */
void action_move_relative_horz(union ActionData *data);
/* MoveResizeRelative */
void action_move_relative_vert(union ActionData *data);
/* MoveResizeRelative */
void action_move_relative(union ActionData *data);
/* MoveResizeRelative */
void action_resize_relative(union ActionData *data);
/* ClientAction */
void action_move_to_center(union ActionData *data);
/* MoveResizeRelative */
void action_resize_relative_horz(union ActionData *data);
/* MoveResizeRelative */
void action_resize_relative_vert(union ActionData *data);
/* ClientAction */
void action_maximize_full(union ActionData *data);
/* ClientAction */
void action_unmaximize_full(union ActionData *data);
/* ClientAction */
void action_toggle_maximize_full(union ActionData *data);
/* ClientAction */
void action_maximize_horz(union ActionData *data);
/* ClientAction */
void action_unmaximize_horz(union ActionData *data);
/* ClientAction */
void action_toggle_maximize_horz(union ActionData *data);
/* ClientAction */
void action_maximize_vert(union ActionData *data);
/* ClientAction */
void action_unmaximize_vert(union ActionData *data);
/* ClientAction */
void action_toggle_maximize_vert(union ActionData *data);
/* ClientAction */
void action_toggle_fullscreen(union ActionData *data);
/* SendToDesktop */
void action_send_to_desktop(union ActionData *data);
/* SendToDesktopDirection */
void action_send_to_desktop_dir(union ActionData *data);
/* Desktop */
void action_desktop(union ActionData *data);
/* DesktopDirection */
void action_desktop_dir(union ActionData *data);
/* Any */
void action_desktop_last(union ActionData *data);
/* ClientAction */
void action_toggle_decorations(union ActionData *data);
/* Move */
void action_move(union ActionData *data);
/* Resize */
void action_resize(union ActionData *data);
/* Any */
void action_reconfigure(union ActionData *data);
/* Execute */
void action_restart(union ActionData *data);
/* Any */
void action_exit(union ActionData *data);
/* ShowMenu */
void action_showmenu(union ActionData *data);
/* CycleWindows */
void action_cycle_windows(union ActionData *data);
/* InterDirectionalAction */
void action_directional_focus(union ActionData *data);
/* DirectionalAction */
void action_movetoedge(union ActionData *data);
/* DirectionalAction */
void action_growtoedge(union ActionData *data);
/* Layer */
void action_send_to_layer(union ActionData *data);
/* Layer */
void action_toggle_layer(union ActionData *data);
/* Any */
void action_toggle_dockautohide(union ActionData *data);
/* Any */
void action_toggle_show_desktop(union ActionData *data);
/* Any */
void action_show_desktop(union ActionData *data);
/* Any */
void action_unshow_desktop(union ActionData *data);
/* Any */
void action_break_chroot(union ActionData *data);
/* AddRemoveDesktop */
void action_add_desktop(union ActionData *data);
/* AddRemoveDesktop */
void action_remove_desktop(union ActionData *data);

#endif