indenting

This commit is contained in:
Dana Jansens 2003-10-10 08:28:18 +00:00
parent 1be38a0418
commit c8678108eb

View file

@ -1,19 +1,19 @@
/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
client.c for the Openbox window manager client.c for the Openbox window manager
Copyright (c) 2003 Ben Jansens Copyright (c) 2003 Ben Jansens
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
See the COPYING file for a copy of the GNU General Public License. See the COPYING file for a copy of the GNU General Public License.
*/ */
#include "client.h" #include "client.h"
@ -117,51 +117,51 @@ void client_set_list()
/* create an array of the window ids */ /* create an array of the window ids */
if (size > 0) { if (size > 0) {
windows = g_new(Window, size); windows = g_new(Window, size);
win_it = windows; win_it = windows;
for (it = client_list; it != NULL; it = it->next, ++win_it) for (it = client_list; it != NULL; it = it->next, ++win_it)
*win_it = ((ObClient*)it->data)->window; *win_it = ((ObClient*)it->data)->window;
} else } else
windows = NULL; windows = NULL;
PROP_SETA32(RootWindow(ob_display, ob_screen), PROP_SETA32(RootWindow(ob_display, ob_screen),
net_client_list, window, (guint32*)windows, size); net_client_list, window, (guint32*)windows, size);
if (windows) if (windows)
g_free(windows); g_free(windows);
stacking_set_list(); stacking_set_list();
} }
/* /*
void client_foreach_transient(ObClient *self, ObClientForeachFunc func, void *data) void client_foreach_transient(ObClient *self, ObClientForeachFunc func, void *data)
{ {
GSList *it; GSList *it;
for (it = self->transients; it; it = it->next) { for (it = self->transients; it; it = it->next) {
if (!func(it->data, data)) return; if (!func(it->data, data)) return;
client_foreach_transient(it->data, func, data); client_foreach_transient(it->data, func, data);
} }
} }
void client_foreach_ancestor(ObClient *self, ObClientForeachFunc func, void *data) void client_foreach_ancestor(ObClient *self, ObClientForeachFunc func, void *data)
{ {
if (self->transient_for) { if (self->transient_for) {
if (self->transient_for != OB_TRAN_GROUP) { if (self->transient_for != OB_TRAN_GROUP) {
if (!func(self->transient_for, data)) return; if (!func(self->transient_for, data)) return;
client_foreach_ancestor(self->transient_for, func, data); client_foreach_ancestor(self->transient_for, func, data);
} else { } else {
GSList *it; GSList *it;
for (it = self->group->members; it; it = it->next) for (it = self->group->members; it; it = it->next)
if (it->data != self && if (it->data != self &&
!((ObClient*)it->data)->transient_for) { !((ObClient*)it->data)->transient_for) {
if (!func(it->data, data)) return; if (!func(it->data, data)) return;
client_foreach_ancestor(it->data, func, data); client_foreach_ancestor(it->data, func, data);
} }
} }
} }
} }
*/ */
void client_manage_all() void client_manage_all()
@ -176,29 +176,29 @@ void client_manage_all()
/* remove all icon windows from the list */ /* remove all icon windows from the list */
for (i = 0; i < nchild; i++) { for (i = 0; i < nchild; i++) {
if (children[i] == None) continue; if (children[i] == None) continue;
wmhints = XGetWMHints(ob_display, children[i]); wmhints = XGetWMHints(ob_display, children[i]);
if (wmhints) { if (wmhints) {
if ((wmhints->flags & IconWindowHint) && if ((wmhints->flags & IconWindowHint) &&
(wmhints->icon_window != children[i])) (wmhints->icon_window != children[i]))
for (j = 0; j < nchild; j++) for (j = 0; j < nchild; j++)
if (children[j] == wmhints->icon_window) { if (children[j] == wmhints->icon_window) {
children[j] = None; children[j] = None;
break; break;
} }
XFree(wmhints); XFree(wmhints);
} }
} }
for (i = 0; i < nchild; ++i) { for (i = 0; i < nchild; ++i) {
if (children[i] == None) if (children[i] == None)
continue; continue;
if (XGetWindowAttributes(ob_display, children[i], &attrib)) { if (XGetWindowAttributes(ob_display, children[i], &attrib)) {
if (attrib.override_redirect) continue; if (attrib.override_redirect) continue;
if (attrib.map_state != IsUnmapped) if (attrib.map_state != IsUnmapped)
client_manage(children[i]); client_manage(children[i]);
} }
} }
XFree(children); XFree(children);
} }
@ -217,30 +217,30 @@ void client_manage(Window window)
/* check if it has already been unmapped by the time we started mapping /* check if it has already been unmapped by the time we started mapping
the grab does a sync so we don't have to here */ the grab does a sync so we don't have to here */
if (XCheckTypedWindowEvent(ob_display, window, DestroyNotify, &e) || if (XCheckTypedWindowEvent(ob_display, window, DestroyNotify, &e) ||
XCheckTypedWindowEvent(ob_display, window, UnmapNotify, &e)) { XCheckTypedWindowEvent(ob_display, window, UnmapNotify, &e)) {
XPutBackEvent(ob_display, &e); XPutBackEvent(ob_display, &e);
grab_server(FALSE); grab_server(FALSE);
return; /* don't manage it */ return; /* don't manage it */
} }
/* make sure it isn't an override-redirect window */ /* make sure it isn't an override-redirect window */
if (!XGetWindowAttributes(ob_display, window, &attrib) || if (!XGetWindowAttributes(ob_display, window, &attrib) ||
attrib.override_redirect) { attrib.override_redirect) {
grab_server(FALSE); grab_server(FALSE);
return; /* don't manage it */ return; /* don't manage it */
} }
/* is the window a docking app */ /* is the window a docking app */
if ((wmhint = XGetWMHints(ob_display, window))) { if ((wmhint = XGetWMHints(ob_display, window))) {
if ((wmhint->flags & StateHint) && if ((wmhint->flags & StateHint) &&
wmhint->initial_state == WithdrawnState) { wmhint->initial_state == WithdrawnState) {
dock_add(window, wmhint); dock_add(window, wmhint);
grab_server(FALSE); grab_server(FALSE);
XFree(wmhint); XFree(wmhint);
return; return;
} }
XFree(wmhint); XFree(wmhint);
} }
ob_debug("Managing window: %lx\n", window); ob_debug("Managing window: %lx\n", window);
@ -249,7 +249,7 @@ void client_manage(Window window)
attrib_set.event_mask = CLIENT_EVENTMASK; attrib_set.event_mask = CLIENT_EVENTMASK;
attrib_set.do_not_propagate_mask = CLIENT_NOPROPAGATEMASK; attrib_set.do_not_propagate_mask = CLIENT_NOPROPAGATEMASK;
XChangeWindowAttributes(ob_display, window, XChangeWindowAttributes(ob_display, window,
CWEventMask|CWDontPropagate, &attrib_set); CWEventMask|CWDontPropagate, &attrib_set);
/* create the ObClient struct, and populate it from the hints on the /* create the ObClient struct, and populate it from the hints on the
@ -395,7 +395,7 @@ void client_manage(Window window)
void client_unmanage_all() void client_unmanage_all()
{ {
while (client_list != NULL) while (client_list != NULL)
client_unmanage(client_list->data); client_unmanage(client_list->data);
} }
void client_unmanage(ObClient *self) void client_unmanage(ObClient *self)
@ -483,16 +483,16 @@ void client_unmanage(ObClient *self)
self->frame = NULL; self->frame = NULL;
if (ob_state() != OB_STATE_EXITING) { if (ob_state() != OB_STATE_EXITING) {
/* these values should not be persisted across a window /* these values should not be persisted across a window
unmapping/mapping */ unmapping/mapping */
PROP_ERASE(self->window, net_wm_desktop); PROP_ERASE(self->window, net_wm_desktop);
PROP_ERASE(self->window, net_wm_state); PROP_ERASE(self->window, net_wm_state);
PROP_ERASE(self->window, wm_state); PROP_ERASE(self->window, wm_state);
} else { } else {
/* if we're left in an iconic state, the client wont be mapped. this is /* if we're left in an iconic state, the client wont be mapped. this is
bad, since we will no longer be managing the window on restart */ bad, since we will no longer be managing the window on restart */
if (self->iconic) if (self->iconic)
XMapWindow(ob_display, self->window); XMapWindow(ob_display, self->window);
} }
@ -650,55 +650,55 @@ static void client_toggle_border(ObClient *self, gboolean show)
case NorthWestGravity: case NorthWestGravity:
case WestGravity: case WestGravity:
case SouthWestGravity: case SouthWestGravity:
break; break;
case NorthEastGravity: case NorthEastGravity:
case EastGravity: case EastGravity:
case SouthEastGravity: case SouthEastGravity:
if (show) x -= self->border_width * 2; if (show) x -= self->border_width * 2;
else x += self->border_width * 2; else x += self->border_width * 2;
break; break;
case NorthGravity: case NorthGravity:
case SouthGravity: case SouthGravity:
case CenterGravity: case CenterGravity:
case ForgetGravity: case ForgetGravity:
case StaticGravity: case StaticGravity:
if (show) x -= self->border_width; if (show) x -= self->border_width;
else x += self->border_width; else x += self->border_width;
break; break;
} }
switch(self->gravity) { switch(self->gravity) {
default: default:
case NorthWestGravity: case NorthWestGravity:
case NorthGravity: case NorthGravity:
case NorthEastGravity: case NorthEastGravity:
break; break;
case SouthWestGravity: case SouthWestGravity:
case SouthGravity: case SouthGravity:
case SouthEastGravity: case SouthEastGravity:
if (show) y -= self->border_width * 2; if (show) y -= self->border_width * 2;
else y += self->border_width * 2; else y += self->border_width * 2;
break; break;
case WestGravity: case WestGravity:
case EastGravity: case EastGravity:
case CenterGravity: case CenterGravity:
case ForgetGravity: case ForgetGravity:
case StaticGravity: case StaticGravity:
if (show) y -= self->border_width; if (show) y -= self->border_width;
else y += self->border_width; else y += self->border_width;
break; break;
} }
self->area.x = x; self->area.x = x;
self->area.y = y; self->area.y = y;
if (show) { if (show) {
XSetWindowBorderWidth(ob_display, self->window, self->border_width); XSetWindowBorderWidth(ob_display, self->window, self->border_width);
/* move the client so it is back it the right spot _with_ its /* move the client so it is back it the right spot _with_ its
border! */ border! */
if (x != oldx || y != oldy) if (x != oldx || y != oldy)
XMoveWindow(ob_display, self->window, x, y); XMoveWindow(ob_display, self->window, x, y);
} else } else
XSetWindowBorderWidth(ob_display, self->window, 0); XSetWindowBorderWidth(ob_display, self->window, 0);
} }
@ -731,7 +731,7 @@ static void client_get_all(ObClient *self)
client_get_gravity(self); /* get the attribute gravity */ client_get_gravity(self); /* get the attribute gravity */
client_update_normal_hints(self); /* this may override the attribute client_update_normal_hints(self); /* this may override the attribute
gravity */ gravity */
/* got the type, the mwmhints, the protocols, and the normal hints /* got the type, the mwmhints, the protocols, and the normal hints
(min/max sizes), so we're ready to set up the decorations/functions */ (min/max sizes), so we're ready to set up the decorations/functions */
@ -769,15 +769,15 @@ static void client_get_desktop(ObClient *self)
guint32 d = screen_num_desktops; /* an always-invalid value */ guint32 d = screen_num_desktops; /* an always-invalid value */
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) if (d >= screen_num_desktops && d != DESKTOP_ALL)
self->desktop = screen_num_desktops - 1; self->desktop = screen_num_desktops - 1;
else else
self->desktop = d; self->desktop = d;
} else { } else {
gboolean trdesk = FALSE; gboolean trdesk = FALSE;
if (self->transient_for) { if (self->transient_for) {
if (self->transient_for != OB_TRAN_GROUP) { if (self->transient_for != OB_TRAN_GROUP) {
self->desktop = self->transient_for->desktop; self->desktop = self->transient_for->desktop;
trdesk = TRUE; trdesk = TRUE;
} else { } else {
@ -791,17 +791,17 @@ static void client_get_desktop(ObClient *self)
break; break;
} }
} }
} }
if (!trdesk) { if (!trdesk) {
/* try get from the startup-notification protocol */ /* try get from the startup-notification protocol */
if (sn_get_desktop(self->startup_id, &self->desktop)) { if (sn_get_desktop(self->startup_id, &self->desktop)) {
if (self->desktop >= screen_num_desktops && if (self->desktop >= screen_num_desktops &&
self->desktop != DESKTOP_ALL) self->desktop != DESKTOP_ALL)
self->desktop = screen_num_desktops - 1; self->desktop = screen_num_desktops - 1;
} else } else
/* defaults to the current desktop */ /* defaults to the current desktop */
self->desktop = screen_desktop; self->desktop = screen_desktop;
} }
} }
if (self->desktop != d) { if (self->desktop != d) {
/* set the desktop hint, to make sure that it always exists */ /* set the desktop hint, to make sure that it always exists */
@ -850,16 +850,16 @@ static void client_get_shaped(ObClient *self)
self->shaped = FALSE; self->shaped = FALSE;
#ifdef SHAPE #ifdef SHAPE
if (extensions_shape) { if (extensions_shape) {
int foo; int foo;
guint ufoo; guint ufoo;
int s; int s;
XShapeSelectInput(ob_display, self->window, ShapeNotifyMask); XShapeSelectInput(ob_display, self->window, ShapeNotifyMask);
XShapeQueryExtents(ob_display, self->window, &s, &foo, XShapeQueryExtents(ob_display, self->window, &s, &foo,
&foo, &ufoo, &ufoo, &foo, &foo, &foo, &ufoo, &foo, &ufoo, &ufoo, &foo, &foo, &foo, &ufoo,
&ufoo); &ufoo);
self->shaped = (s != 0); self->shaped = (s != 0);
} }
#endif #endif
} }
@ -898,25 +898,25 @@ void client_update_transient_for(ObClient *self)
/* if anything has changed... */ /* if anything has changed... */
if (target != self->transient_for) { if (target != self->transient_for) {
if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */ if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */
GSList *it; GSList *it;
/* remove from old parents */ /* remove from old parents */
for (it = self->group->members; it; it = g_slist_next(it)) { for (it = self->group->members; it; it = g_slist_next(it)) {
ObClient *c = it->data; ObClient *c = it->data;
if (c != self && !c->transient_for) if (c != self && !c->transient_for)
c->transients = g_slist_remove(c->transients, self); c->transients = g_slist_remove(c->transients, self);
} }
} else if (self->transient_for != NULL) { /* transient of window */ } else if (self->transient_for != NULL) { /* transient of window */
/* remove from old parent */ /* remove from old parent */
self->transient_for->transients = self->transient_for->transients =
g_slist_remove(self->transient_for->transients, self); g_slist_remove(self->transient_for->transients, self);
} }
self->transient_for = target; self->transient_for = target;
if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */ if (self->transient_for == OB_TRAN_GROUP) { /* transient of group */
GSList *it; GSList *it;
/* add to new parents */ /* add to new parents */
for (it = self->group->members; it; it = g_slist_next(it)) { for (it = self->group->members; it; it = g_slist_next(it)) {
ObClient *c = it->data; ObClient *c = it->data;
if (c != self && !c->transient_for) if (c != self && !c->transient_for)
@ -935,8 +935,8 @@ void client_update_transient_for(ObClient *self)
} }
} }
} else if (self->transient_for != NULL) { /* transient of window */ } else if (self->transient_for != NULL) { /* transient of window */
/* add to new parent */ /* add to new parent */
self->transient_for->transients = self->transient_for->transients =
g_slist_append(self->transient_for->transients, self); g_slist_append(self->transient_for->transients, self);
} }
} }
@ -951,12 +951,12 @@ static void client_get_mwm_hints(ObClient *self)
if (PROP_GETA32(self->window, motif_wm_hints, motif_wm_hints, if (PROP_GETA32(self->window, motif_wm_hints, motif_wm_hints,
&hints, &num)) { &hints, &num)) {
if (num >= OB_MWM_ELEMENTS) { if (num >= OB_MWM_ELEMENTS) {
self->mwmhints.flags = hints[0]; self->mwmhints.flags = hints[0];
self->mwmhints.functions = hints[1]; self->mwmhints.functions = hints[1];
self->mwmhints.decorations = hints[2]; self->mwmhints.decorations = hints[2];
} }
g_free(hints); g_free(hints);
} }
} }
@ -1001,13 +1001,13 @@ void client_get_type(ObClient *self)
} }
if (self->type == (ObClientType) -1) { if (self->type == (ObClientType) -1) {
/*the window type hint was not set, which means we either classify /*the window type hint was not set, which means we either classify
ourself as a normal window or a dialog, depending on if we are a ourself as a normal window or a dialog, depending on if we are a
transient. */ transient. */
if (self->transient) if (self->transient)
self->type = OB_CLIENT_TYPE_DIALOG; self->type = OB_CLIENT_TYPE_DIALOG;
else else
self->type = OB_CLIENT_TYPE_NORMAL; self->type = OB_CLIENT_TYPE_NORMAL;
} }
} }
@ -1020,16 +1020,16 @@ void client_update_protocols(ObClient *self)
self->delete_window = FALSE; self->delete_window = FALSE;
if (PROP_GETA32(self->window, wm_protocols, atom, &proto, &num_return)) { if (PROP_GETA32(self->window, wm_protocols, atom, &proto, &num_return)) {
for (i = 0; i < num_return; ++i) { for (i = 0; i < num_return; ++i) {
if (proto[i] == prop_atoms.wm_delete_window) { if (proto[i] == prop_atoms.wm_delete_window) {
/* this means we can request the window to close */ /* this means we can request the window to close */
self->delete_window = TRUE; self->delete_window = TRUE;
} else if (proto[i] == prop_atoms.wm_take_focus) } else if (proto[i] == prop_atoms.wm_take_focus)
/* if this protocol is requested, then the window will be /* if this protocol is requested, then the window will be
notified whenever we want it to receive focus */ notified whenever we want it to receive focus */
self->focus_notify = TRUE; self->focus_notify = TRUE;
} }
g_free(proto); g_free(proto);
} }
} }
@ -1061,38 +1061,38 @@ void client_update_normal_hints(ObClient *self)
if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) { if (XGetWMNormalHints(ob_display, self->window, &size, &ret)) {
self->positioned = !!(size.flags & (PPosition|USPosition)); self->positioned = !!(size.flags & (PPosition|USPosition));
if (size.flags & PWinGravity) { if (size.flags & PWinGravity) {
self->gravity = size.win_gravity; self->gravity = size.win_gravity;
/* if the client has a frame, i.e. has already been mapped and /* if the client has a frame, i.e. has already been mapped and
is changing its gravity */ is changing its gravity */
if (self->frame && self->gravity != oldgravity) { if (self->frame && self->gravity != oldgravity) {
/* move our idea of the client's position based on its new /* move our idea of the client's position based on its new
gravity */ gravity */
self->area.x = self->frame->area.x; self->area.x = self->frame->area.x;
self->area.y = self->frame->area.y; self->area.y = self->frame->area.y;
frame_frame_gravity(self->frame, &self->area.x, &self->area.y); frame_frame_gravity(self->frame, &self->area.x, &self->area.y);
} }
} }
if (size.flags & PAspect) { if (size.flags & PAspect) {
if (size.min_aspect.y) if (size.min_aspect.y)
self->min_ratio = (float)size.min_aspect.x / size.min_aspect.y; self->min_ratio = (float)size.min_aspect.x / size.min_aspect.y;
if (size.max_aspect.y) if (size.max_aspect.y)
self->max_ratio = (float)size.max_aspect.x / size.max_aspect.y; self->max_ratio = (float)size.max_aspect.x / size.max_aspect.y;
} }
if (size.flags & PMinSize) if (size.flags & PMinSize)
SIZE_SET(self->min_size, size.min_width, size.min_height); SIZE_SET(self->min_size, size.min_width, size.min_height);
if (size.flags & PMaxSize) if (size.flags & PMaxSize)
SIZE_SET(self->max_size, size.max_width, size.max_height); SIZE_SET(self->max_size, size.max_width, size.max_height);
if (size.flags & PBaseSize) if (size.flags & PBaseSize)
SIZE_SET(self->base_size, size.base_width, size.base_height); SIZE_SET(self->base_size, size.base_width, size.base_height);
if (size.flags & PResizeInc) if (size.flags & PResizeInc)
SIZE_SET(self->size_inc, size.width_inc, size.height_inc); SIZE_SET(self->size_inc, size.width_inc, size.height_inc);
} }
} }
@ -1191,7 +1191,7 @@ void client_setup_decor_and_functions(ObClient *self)
if (!((self->functions & OB_CLIENT_FUNC_MAXIMIZE) && if (!((self->functions & OB_CLIENT_FUNC_MAXIMIZE) &&
(self->functions & OB_CLIENT_FUNC_MOVE) && (self->functions & OB_CLIENT_FUNC_MOVE) &&
(self->functions & OB_CLIENT_FUNC_RESIZE))) { (self->functions & OB_CLIENT_FUNC_RESIZE))) {
self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE; self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE;
self->decorations &= ~OB_FRAME_DECOR_MAXIMIZE; self->decorations &= ~OB_FRAME_DECOR_MAXIMIZE;
} }
@ -1292,19 +1292,19 @@ void client_update_wmhints(ObClient *self)
self->can_focus = TRUE; self->can_focus = TRUE;
if ((hints = XGetWMHints(ob_display, self->window)) != NULL) { if ((hints = XGetWMHints(ob_display, self->window)) != NULL) {
if (hints->flags & InputHint) if (hints->flags & InputHint)
self->can_focus = hints->input; self->can_focus = hints->input;
/* only do this when first managing the window *AND* when we aren't /* only do this when first managing the window *AND* when we aren't
starting up! */ starting up! */
if (ob_state() != OB_STATE_STARTING && self->frame == NULL) if (ob_state() != OB_STATE_STARTING && self->frame == NULL)
if (hints->flags & StateHint) if (hints->flags & StateHint)
self->iconic = hints->initial_state == IconicState; self->iconic = hints->initial_state == IconicState;
if (hints->flags & XUrgencyHint) if (hints->flags & XUrgencyHint)
ur = TRUE; ur = TRUE;
if (!(hints->flags & WindowGroupHint)) if (!(hints->flags & WindowGroupHint))
hints->window_group = None; hints->window_group = None;
/* did the group state change? */ /* did the group state change? */
@ -1430,8 +1430,8 @@ void client_update_title(ObClient *self)
read_title = TRUE; read_title = TRUE;
/* try netwm */ /* try netwm */
if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data)) if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data))
/* try old x stuff */ /* try old x stuff */
if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) { if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) {
data = g_strdup(self->title); data = g_strdup(self->title);
read_title = FALSE; read_title = FALSE;
} }
@ -1464,7 +1464,7 @@ void client_update_class(ObClient *self)
if (PROP_GETSS(self->window, wm_class, locale, &data)) { if (PROP_GETSS(self->window, wm_class, locale, &data)) {
if (data[0]) { if (data[0]) {
self->name = g_strdup(data[0]); self->name = g_strdup(data[0]);
if (data[1]) if (data[1])
self->class = g_strdup(data[1]); self->class = g_strdup(data[1]);
} }
@ -1472,7 +1472,7 @@ void client_update_class(ObClient *self)
} }
if (PROP_GETS(self->window, wm_window_role, locale, &s)) if (PROP_GETS(self->window, wm_window_role, locale, &s))
self->role = s; self->role = s;
if (self->name == NULL) self->name = g_strdup(""); if (self->name == NULL) self->name = g_strdup("");
if (self->class == NULL) self->class = g_strdup(""); if (self->class == NULL) self->class = g_strdup("");
@ -1666,8 +1666,8 @@ ObClient *client_search_focus_tree(ObClient *self)
ObClient *ret; ObClient *ret;
for (it = self->transients; it != NULL; it = it->next) { for (it = self->transients; it != NULL; it = it->next) {
if (client_focused(it->data)) return it->data; if (client_focused(it->data)) return it->data;
if ((ret = client_search_focus_tree(it->data))) return ret; if ((ret = client_search_focus_tree(it->data))) return ret;
} }
return NULL; return NULL;
} }
@ -1689,14 +1689,14 @@ ObClient *client_search_focus_tree_full(ObClient *self)
recursed = TRUE; recursed = TRUE;
} }
if (recursed) if (recursed)
return NULL; return NULL;
} }
} }
/* this function checks the whole tree, the client_search_focus_tree~ /* this function checks the whole tree, the client_search_focus_tree~
does not, so we need to check this window */ does not, so we need to check this window */
if (client_focused(self)) if (client_focused(self))
return self; return self;
return client_search_focus_tree(self); return client_search_focus_tree(self);
} }
@ -1736,7 +1736,7 @@ static void client_calc_layer_recursive(ObClient *self, ObClient *orig,
l, raised ? raised : l != old); l, raised ? raised : l != old);
if (!raised && l != old) if (!raised && l != old)
if (orig->frame) { /* only restack if the original window is managed */ if (orig->frame) { /* only restack if the original window is managed */
/* XXX add_non_intrusive ever? */ /* XXX add_non_intrusive ever? */
stacking_remove(CLIENT_AS_WINDOW(self)); stacking_remove(CLIENT_AS_WINDOW(self));
stacking_add(CLIENT_AS_WINDOW(self)); stacking_add(CLIENT_AS_WINDOW(self));
@ -2071,7 +2071,7 @@ void client_fullscreen(ObClient *self, gboolean fs, gboolean savearea)
int x, y, w, h; int x, y, w, h;
if (!(self->functions & OB_CLIENT_FUNC_FULLSCREEN) || /* can't */ if (!(self->functions & OB_CLIENT_FUNC_FULLSCREEN) || /* can't */
self->fullscreen == fs) return; /* already done */ self->fullscreen == fs) return; /* already done */
self->fullscreen = fs; self->fullscreen = fs;
client_change_state(self); /* change the state hints on the client, client_change_state(self); /* change the state hints on the client,
@ -2283,7 +2283,7 @@ void client_shade(ObClient *self, gboolean shade)
{ {
if ((!(self->functions & OB_CLIENT_FUNC_SHADE) && if ((!(self->functions & OB_CLIENT_FUNC_SHADE) &&
shade) || /* can't shade */ shade) || /* can't shade */
self->shaded == shade) return; /* already done */ self->shaded == shade) return; /* already done */
/* when we're iconic, don't change the wmstate */ /* when we're iconic, don't change the wmstate */
if (!self->iconic) { if (!self->iconic) {
@ -2392,9 +2392,9 @@ ObClient *client_search_modal_child(ObClient *self)
ObClient *ret; ObClient *ret;
for (it = self->transients; it != NULL; it = it->next) { for (it = self->transients; it != NULL; it = it->next) {
ObClient *c = it->data; ObClient *c = it->data;
if ((ret = client_search_modal_child(c))) return ret; if ((ret = client_search_modal_child(c))) return ret;
if (c->modal) return c; if (c->modal) return c;
} }
return NULL; return NULL;
} }
@ -2406,9 +2406,9 @@ gboolean client_validate(ObClient *self)
XSync(ob_display, FALSE); /* get all events on the server */ XSync(ob_display, FALSE); /* get all events on the server */
if (XCheckTypedWindowEvent(ob_display, self->window, DestroyNotify, &e) || if (XCheckTypedWindowEvent(ob_display, self->window, DestroyNotify, &e) ||
XCheckTypedWindowEvent(ob_display, self->window, UnmapNotify, &e)) { XCheckTypedWindowEvent(ob_display, self->window, UnmapNotify, &e)) {
XPutBackEvent(ob_display, &e); XPutBackEvent(ob_display, &e);
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -2420,11 +2420,11 @@ void client_set_wm_state(ObClient *self, long state)
switch (state) { switch (state) {
case IconicState: case IconicState:
client_iconify(self, TRUE, TRUE); client_iconify(self, TRUE, TRUE);
break; break;
case NormalState: case NormalState:
client_iconify(self, FALSE, TRUE); client_iconify(self, FALSE, TRUE);
break; break;
} }
} }
@ -2627,23 +2627,23 @@ gboolean client_focus(ObClient *self)
Update: Changing this to RevertToNone fixed a bug with mozilla (bug Update: Changing this to RevertToNone fixed a bug with mozilla (bug
#799. So now it is RevertToNone again. #799. So now it is RevertToNone again.
*/ */
XSetInputFocus(ob_display, self->window, RevertToNone, XSetInputFocus(ob_display, self->window, RevertToNone,
event_lasttime); event_lasttime);
} }
if (self->focus_notify) { if (self->focus_notify) {
XEvent ce; XEvent ce;
ce.xclient.type = ClientMessage; ce.xclient.type = ClientMessage;
ce.xclient.message_type = prop_atoms.wm_protocols; ce.xclient.message_type = prop_atoms.wm_protocols;
ce.xclient.display = ob_display; ce.xclient.display = ob_display;
ce.xclient.window = self->window; ce.xclient.window = self->window;
ce.xclient.format = 32; ce.xclient.format = 32;
ce.xclient.data.l[0] = prop_atoms.wm_take_focus; ce.xclient.data.l[0] = prop_atoms.wm_take_focus;
ce.xclient.data.l[1] = event_lasttime; ce.xclient.data.l[1] = event_lasttime;
ce.xclient.data.l[2] = 0l; ce.xclient.data.l[2] = 0l;
ce.xclient.data.l[3] = 0l; ce.xclient.data.l[3] = 0l;
ce.xclient.data.l[4] = 0l; ce.xclient.data.l[4] = 0l;
XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce); XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
} }
#ifdef DEBUG_FOCUS #ifdef DEBUG_FOCUS
@ -2802,7 +2802,7 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir)
continue; continue;
if(cur->iconic) if(cur->iconic)
continue; continue;
if(client_focus_target(cur) == cur && if(client_focus_target(cur) == cur &&
!(cur->can_focus || cur->focus_notify)) !(cur->can_focus || cur->focus_notify))
continue; continue;
@ -2833,7 +2833,7 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir)
case OB_DIRECTION_SOUTHWEST: case OB_DIRECTION_SOUTHWEST:
offset = (his_cx < 0) ? -his_cx : his_cx; offset = (his_cx < 0) ? -his_cx : his_cx;
distance = ((dir == OB_DIRECTION_NORTH || distance = ((dir == OB_DIRECTION_NORTH ||
dir == OB_DIRECTION_NORTHEAST) ? dir == OB_DIRECTION_NORTHEAST) ?
-his_cy : his_cy); -his_cy : his_cy);
break; break;
case OB_DIRECTION_EAST: case OB_DIRECTION_EAST:
@ -2842,7 +2842,7 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir)
case OB_DIRECTION_NORTHWEST: case OB_DIRECTION_NORTHWEST:
offset = (his_cy < 0) ? -his_cy : his_cy; offset = (his_cy < 0) ? -his_cy : his_cy;
distance = ((dir == OB_DIRECTION_WEST || distance = ((dir == OB_DIRECTION_WEST ||
dir == OB_DIRECTION_NORTHWEST) ? dir == OB_DIRECTION_NORTHWEST) ?
-his_cx : his_cx); -his_cx : his_cx);
break; break;
} }
@ -3024,7 +3024,8 @@ int client_directional_edge_search(ObClient *c, ObDirection dir)
my_edge_end = c->frame->area.x + c->frame->area.width; my_edge_end = c->frame->area.x + c->frame->area.width;
my_offset = c->frame->area.y; my_offset = c->frame->area.y;
dest = a->y; /* default: top of screen */ /* default: top of screen */
dest = a->y;
for(it = g_list_first(client_list); it; it = it->next) { for(it = g_list_first(client_list); it; it = it->next) {
int his_edge_start, his_edge_end, his_offset; int his_edge_start, his_edge_end, his_offset;
@ -3063,8 +3064,9 @@ int client_directional_edge_search(ObClient *c, ObDirection dir)
my_edge_start = c->frame->area.x; my_edge_start = c->frame->area.x;
my_edge_end = c->frame->area.x + c->frame->area.width; my_edge_end = c->frame->area.x + c->frame->area.width;
my_offset = c->frame->area.y + c->frame->area.height; my_offset = c->frame->area.y + c->frame->area.height;
dest = a->y + a->height; /* default: bottom of screen */ /* default: bottom of screen */
dest = a->y + a->height;
for(it = g_list_first(client_list); it; it = it->next) { for(it = g_list_first(client_list); it; it = it->next) {
int his_edge_start, his_edge_end, his_offset; int his_edge_start, his_edge_end, his_offset;
@ -3105,7 +3107,8 @@ int client_directional_edge_search(ObClient *c, ObDirection dir)
my_edge_end = c->frame->area.y + c->frame->area.height; my_edge_end = c->frame->area.y + c->frame->area.height;
my_offset = c->frame->area.x; my_offset = c->frame->area.x;
dest = a->x; /* default: leftmost egde of screen */ /* default: leftmost egde of screen */
dest = a->x;
for(it = g_list_first(client_list); it; it = it->next) { for(it = g_list_first(client_list); it; it = it->next) {
int his_edge_start, his_edge_end, his_offset; int his_edge_start, his_edge_end, his_offset;
@ -3146,7 +3149,8 @@ int client_directional_edge_search(ObClient *c, ObDirection dir)
my_edge_end = c->frame->area.y + c->frame->area.height; my_edge_end = c->frame->area.y + c->frame->area.height;
my_offset = c->frame->area.x + c->frame->area.width; my_offset = c->frame->area.x + c->frame->area.width;
dest = a->x + a->width; /* default: rightmost edge of screen */ /* default: rightmost edge of screen */
dest = a->x + a->width;
for(it = g_list_first(client_list); it; it = it->next) { for(it = g_list_first(client_list); it; it = it->next) {
int his_edge_start, his_edge_end, his_offset; int his_edge_start, his_edge_end, his_offset;