2 * common/xembed.h - XEMBED functions header
4 * Copyright © 2007-2008 Julien Danjou <julien@danjou.info>
5 * Copyright © 2004 Matthew Reppert
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #ifndef AWESOME_COMMON_XEMBED_H
24 #define AWESOME_COMMON_XEMBED_H
30 #include "common/array.h"
31 #include "common/util.h"
33 /** XEMBED information for a window.
37 unsigned long version
;
41 typedef struct xembed_window xembed_window_t
;
48 DO_ARRAY(xembed_window_t
, xembed_window
, DO_NOTHING
)
50 /** The version of the XEMBED protocol that this library supports. */
51 #define XEMBED_VERSION 0
53 /** Flags for _XEMBED_INFO */
54 #define XEMBED_MAPPED (1 << 0)
55 #define XEMBED_INFO_FLAGS_ALL 1
57 /** XEMBED messages */
58 #define XEMBED_EMBEDDED_NOTIFY 0
59 #define XEMBED_WINDOW_ACTIVATE 1
60 #define XEMBED_WINDOW_DEACTIVATE 2
61 #define XEMBED_REQUEST_FOCUS 3
62 #define XEMBED_FOCUS_IN 4
63 #define XEMBED_FOCUS_OUT 5
64 #define XEMBED_FOCUS_NEXT 6
65 #define XEMBED_FOCUS_PREV 7
66 /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
67 #define XEMBED_MODALITY_ON 10
68 #define XEMBED_MODALITY_OFF 11
69 #define XEMBED_REGISTER_ACCELERATOR 12
70 #define XEMBED_UNREGISTER_ACCELERATOR 13
71 #define XEMBED_ACTIVATE_ACCELERATOR 14
73 /** Details for XEMBED_FOCUS_IN */
74 #define XEMBED_FOCUS_CURRENT 0
75 #define XEMBED_FOCUS_FIRST 1
76 #define XEMBED_FOCUS_LAST 2
79 /** Modifiers field for XEMBED_REGISTER_ACCELERATOR */
80 #define XEMBED_MODIFIER_SHIFT (1 << 0)
81 #define XEMBED_MODIFIER_CONTROL (1 << 1)
82 #define XEMBED_MODIFIER_ALT (1 << 2)
83 #define XEMBED_MODIFIER_SUPER (1 << 3)
84 #define XEMBED_MODIFIER_HYPER (1 << 4)
87 /** Flags for XEMBED_ACTIVATE_ACCELERATOR */
88 #define XEMBED_ACCELERATOR_OVERLOADED (1 << 0)
91 void xembed_message_send(xcb_connection_t
*, xcb_window_t
, long, long, long, long);
92 xembed_window_t
* xembed_getbywin(xembed_window_array_t
*, xcb_window_t
);
93 void xembed_property_update(xcb_connection_t
*, xembed_window_t
*, xcb_get_property_reply_t
*);
94 xcb_get_property_cookie_t
xembed_info_get_unchecked(xcb_connection_t
*,
96 bool xembed_info_get_reply(xcb_connection_t
*connection
,
97 xcb_get_property_cookie_t cookie
,
101 /** Indicate to an embedded window that it has focus.
102 * \param c The X connection.
103 * \param client The client.
104 * \param focus_type The type of focus.
107 xembed_focus_in(xcb_connection_t
*c
, xcb_window_t client
, long focus_type
)
109 xembed_message_send(c
, client
, XEMBED_FOCUS_IN
, focus_type
, 0, 0);
112 /** Notify a window that it has become active.
113 * \param c The X connection.
114 * \param client The window to notify.
117 xembed_window_activate(xcb_connection_t
*c
, xcb_window_t client
)
119 xembed_message_send(c
, client
, XEMBED_WINDOW_ACTIVATE
, 0, 0, 0);
122 /** Notify a window that it has become inactive.
123 * \param c The X connection.
124 * \param client The window to notify.
127 void xembed_window_deactivate(xcb_connection_t
*c
, xcb_window_t client
)
129 xembed_message_send(c
, client
, XEMBED_WINDOW_DEACTIVATE
, 0, 0, 0);
132 /** Notify a window that its embed request has been received and accepted.
133 * \param c The X connection.
134 * \param client The client to send message to.
135 * \param embedder The embedder window.
136 * \param version The version.
139 xembed_embedded_notify(xcb_connection_t
*c
,
140 xcb_window_t client
, xcb_window_t embedder
,
143 xembed_message_send(c
, client
, XEMBED_EMBEDDED_NOTIFY
, 0, embedder
, version
);
146 /** Have the embedder end XEMBED protocol communication with a child.
147 * \param connection The X connection.
148 * \param child The window to unembed.
149 * \param root The root window to reparent to.
152 xembed_window_unembed(xcb_connection_t
*connection
, xcb_window_t child
, xcb_window_t root
)
154 xcb_reparent_window(connection
, child
, root
, 0, 0);
157 /** Indicate to an embedded window that it has lost focus.
158 * \param c The X connection.
159 * \param client The client to send message to.
162 xembed_focus_out(xcb_connection_t
*c
, xcb_window_t client
)
164 xembed_message_send(c
, client
, XEMBED_FOCUS_OUT
, 0, 0, 0);
169 // vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80