openbox/actions.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 |
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- actions.h for the Openbox window manager Copyright (c) 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. */ #include "misc.h" #include "frame.h" #include "obt/xml.h" #include <glib.h> #include <X11/Xlib.h> typedef struct _ObActionsDefinition ObActionsDefinition; typedef struct _ObActionsAct ObActionsAct; typedef struct _ObActionsData ObActionsData; typedef struct _ObActionsAnyData ObActionsAnyData; typedef struct _ObActionsGlobalData ObActionsGlobalData; typedef struct _ObActionsClientData ObActionsClientData; typedef struct _ObActionsSelectorData ObActionsSelectorData; typedef void (*ObActionsDataFreeFunc)(gpointer options); typedef gboolean (*ObActionsRunFunc)(ObActionsData *data, gpointer options); typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node); /* functions for interactive actions */ /* return TRUE if the action is going to be interactive, or false to change your mind and make it not */ typedef gboolean (*ObActionsIPreFunc)(guint initial_state, gpointer options); typedef void (*ObActionsIPostFunc)(gpointer options); typedef gboolean (*ObActionsIInputFunc)(guint initial_state, XEvent *e, gpointer options, gboolean *used); typedef void (*ObActionsICancelFunc)(gpointer options); typedef gpointer (*ObActionsIDataSetupFunc)(xmlNodePtr node, ObActionsIPreFunc *pre, ObActionsIInputFunc *input, ObActionsICancelFunc *cancel, ObActionsIPostFunc *post); struct _ObActionsData { ObUserAction uact; guint state; gint x; gint y; gint button; struct _ObClient *client; ObFrameContext context; }; void actions_startup(gboolean reconfigure); void actions_shutdown(gboolean reconfigure); /*! Use this if the actions created from this name may be interactive */ gboolean actions_register_i(const gchar *name, ObActionsIDataSetupFunc setup, ObActionsDataFreeFunc free, ObActionsRunFunc run); gboolean actions_register(const gchar *name, ObActionsDataSetupFunc setup, ObActionsDataFreeFunc free, ObActionsRunFunc run); ObActionsAct* actions_parse(xmlNodePtr node); ObActionsAct* actions_parse_string(const gchar *name); gboolean actions_act_is_interactive(ObActionsAct *act); void actions_act_ref(ObActionsAct *act); void actions_act_unref(ObActionsAct *act); /*! When this is true, an XAllowEvents with ReplayPointer will be called if an action is going to maybe try moving windows around on screen (or map/unmap windows) */ void actions_set_need_pointer_replay_before_move(gboolean replay); /*! Returns if a ReplayPointer is still needed. If it was called while running actions then this will be false */ gboolean actions_get_need_pointer_replay_before_move(void); /*! Pass in a GSList of ObActionsAct's to be run. */ void actions_run_acts(GSList *acts, ObUserAction uact, guint state, gint x, gint y, gint button, ObFrameContext con, struct _ObClient *client); gboolean actions_interactive_act_running(void); void actions_interactive_cancel_act(void); gboolean actions_interactive_input_event(XEvent *e); /*! Function for actions to call when they are moving a client around */ void actions_client_move(ObActionsData *data, gboolean start); |