/* save the stacking order on startup! */
PROP_GETA32(ob_root, net_client_list_stacking, window,
- &client_startup_stack_order, &client_startup_stack_size);
+ (guint32**)&client_startup_stack_order,
+ &client_startup_stack_size);
client_set_list();
}
} else
windows = NULL;
- PROP_SETA32(ob_root, net_client_list, window, windows, size);
+ PROP_SETA32(ob_root, net_client_list, window, (guint32*)windows, size);
if (windows)
g_free(windows);
static void client_get_desktop(Client *self)
{
- unsigned int d;
+ guint32 d;
- if (PROP_GET32(self->window, net_wm_desktop, cardinal, d)) {
+ if (PROP_GET32(self->window, net_wm_desktop, cardinal, &d)) {
if (d >= screen_num_desktops && d != DESKTOP_ALL)
d = screen_num_desktops - 1;
self->desktop = d;
static void client_get_state(Client *self)
{
- Atom *state;
+ guint32 *state;
guint num;
self->modal = self->shaded = self->max_horz = self->max_vert =
void client_get_type(Client *self)
{
guint num, i;
- Atom *val;
+ guint32 *val;
self->type = -1;
void client_update_protocols(Client *self)
{
- Atom *proto;
+ guint32 *proto;
guint num_return, i;
self->focus_notify = FALSE;
static void client_change_allowed_actions(Client *self)
{
- Atom actions[9];
+ guint32 actions[9];
int num = 0;
actions[num++] = prop_atoms.net_wm_action_change_desktop;
{
XWMHints *hints;
gboolean ur = FALSE;
+ GSList *it;
/* assume a window takes input if it doesnt specify */
self->can_focus = TRUE;
/* did the group state change? */
if (hints->window_group != (self->group ? self->group->leader : None)){
/* remove from the old group if there was one */
- if (self->group != NULL)
+ if (self->group != NULL) {
+ /* remove transients of the group */
+ for (it = self->group->members; it; it = it->next)
+ if (it->data != self &&
+ ((Client*)it->data)->transient_for == TRAN_GROUP) {
+ self->transients = g_slist_remove(self->transients,
+ it->data);
+ }
group_remove(self->group, self);
+ self->group = NULL;
+ }
if (hints->window_group != None)
self->group = group_add(hints->window_group, self);
+ /* add other transients of the group that are already set up */
+ for (it = self->group->members; it; it = it->next)
+ if (it->data != self &&
+ ((Client*)it->data)->transient_for == TRAN_GROUP)
+ self->transients = g_slist_append(self->transients,
+ it->data);
+
/* because the self->transient flag wont change from this call,
we don't need to update the window's type and such, only its
transient_for, and the transients lists of other windows in the
if (data[1])
self->class = g_strdup(data[1]);
}
+ g_strfreev(data);
}
- g_strfreev(data);
-
if (PROP_GETS(self->window, wm_window_role, locale, &s))
self->role = g_strdup(s);
void client_update_kwm_icon(Client *self)
{
guint num;
- Pixmap *data;
+ guint32 *data;
if (!PROP_GETA32(self->window, kwm_win_icon, kwm_win_icon, &data, &num)) {
self->pixmap_icon = self->pixmap_icon_mask = None;
static void client_change_state(Client *self)
{
- unsigned long state[2];
- Atom netstate[10];
- int num;
+ guint32 state[2];
+ guint32 netstate[10];
+ guint num;
state[0] = self->wmstate;
state[1] = None;
for (it = self->group->members; it; it = it->next)
if (it->data != self &&
((Client*)it->data)->transient_for != TRAN_GROUP) {
- self = self->transient_for;
+ self = it->data;
break;
}
}
x = y = w = h = 0;
} else {
guint num;
- guint32 *dimensions;
+ gint32 *dimensions;
/* pick some fallbacks... */
x = screen_area(self->desktop)->x +
h = screen_area(self->desktop)->height / 2;
if (PROP_GETA32(self->window, openbox_premax, cardinal,
- dimensions, &num)) {
+ (guint32**)&dimensions, &num)) {
if (num == 4) {
x = dimensions[0];
y = dimensions[1];
/* get the property off the window and use it for the dimensions
we are already maxed on */
if (PROP_GETA32(self->window, openbox_premax, cardinal,
- &readdim, &num)) {
+ (guint32**)&readdim, &num)) {
if (num == 4) {
if (self->max_horz) {
dimensions[0] = readdim[0];
}
PROP_SETA32(self->window, openbox_premax, cardinal,
- dimensions, 4);
+ (guint32*)dimensions, 4);
}
} else {
guint num;
}
if (PROP_GETA32(self->window, openbox_premax, cardinal,
- &dimensions, &num)) {
+ (guint32**)&dimensions, &num)) {
if (num == 4) {
if (dir == 0 || dir == 1) { /* horz */
x = dimensions[0];