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 |
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- action.h for the Openbox window manager Copyright (c) 2003 Ben 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; }; struct InteractiveAction { struct AnyAction any; gboolean final; gboolean cancel; }; struct InterDirectionalAction{ struct InteractiveAction inter; ObDirection direction; }; struct DirectionalAction{ struct AnyAction any; ObDirection direction; }; struct Execute { struct AnyAction any; char *path; }; struct ClientAction { struct AnyAction any; }; struct Activate { struct AnyAction any; gboolean here; /* bring it to the current desktop */ }; struct MoveResizeRelative { struct AnyAction any; int delta; }; 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 InteractiveAction inter; guint desk; }; struct Layer { struct AnyAction any; int layer; /* < 0 = below, 0 = normal, > 0 = above */ }; struct DesktopDirection { struct InteractiveAction inter; ObDirection dir; gboolean wrap; gboolean linear; }; struct MoveResize { struct AnyAction any; gboolean move; gboolean keyboard; }; struct ShowMenu { struct AnyAction any; char *name; }; struct CycleWindows { struct InteractiveAction inter; gboolean linear; gboolean forward; }; union ActionData { struct AnyAction any; struct InteractiveAction inter; struct InterDirectionalAction interdiraction; struct DirectionalAction diraction; 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 _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_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 */ 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, gboolean cancel, gboolean done); #define action_run_mouse(a, c, n, s, b, x, y) \ action_run_list(a, c, n, s, b, x, y, FALSE, FALSE) #define action_run_interactive(a, c, s, n, d) \ action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, -1, -1, n, d) #define action_run_key(a, c, s, x, y) \ action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, x, y, FALSE, FALSE) #define action_run(a, c, s) \ action_run_list(a, c, OB_FRAME_CONTEXT_NONE, s, 0, -1, -1, FALSE, FALSE) /* 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_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_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); /* 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); /* MoveResize */ void action_moveresize(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_show_desktop(union ActionData *data); /* Any */ void action_show_desktop(union ActionData *data); /* Any */ void action_unshow_desktop(union ActionData *data); #endif |