X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=bc1ccc0e6ca2483747a16d9303d3a32a114a2c21;hb=90c81dfff01c2d6766d9baa3e2b807793b7ba171;hp=538cfbeda95e3112c6e6c5fff6252cd7c264b968;hpb=d50f4917169e8d354f62dd639afde0efe807760c;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 538cfbed..bc1ccc0e 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1,19 +1,20 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- - -client.c 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. + + client.c for the Openbox window manager + Copyright (c) 2004 Mikael Magnusson + 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. */ #include "client.h" @@ -45,10 +46,10 @@ See the COPYING file for a copy of the GNU General Public License. /*! The event mask to grab on client windows */ #define CLIENT_EVENTMASK (PropertyChangeMask | FocusChangeMask | \ - StructureNotifyMask) + StructureNotifyMask) #define CLIENT_NOPROPAGATEMASK (ButtonPressMask | ButtonReleaseMask | \ - ButtonMotionMask) + ButtonMotionMask) typedef struct { @@ -1232,7 +1233,7 @@ void client_setup_decor_and_functions(ObClient *self) /* dont let mwm hints kill the close button if (! (self->mwmhints.functions & MwmFunc_Close)) self->functions &= ~OB_CLIENT_FUNC_CLOSE; */ - } + } } if (!(self->functions & OB_CLIENT_FUNC_SHADE)) @@ -1256,8 +1257,12 @@ void client_setup_decor_and_functions(ObClient *self) /* finally, the user can have requested no decorations, which overrides everything (but doesnt give it a border if it doesnt have one) */ - if (self->undecorated) - self->decorations &= OB_FRAME_DECOR_BORDER; + if (self->undecorated) { + if (config_theme_keepborder) + self->decorations &= OB_FRAME_DECOR_BORDER; + else + self->decorations = 0; + } /* if we don't have a titlebar, then we cannot shade! */ if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR)) @@ -1444,7 +1449,12 @@ void client_update_title(ObClient *self) if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) /* try old x stuff */ if (!PROP_GETS(self->window, wm_name, locale, &data)) - data = g_strdup("Unnamed Window"); + // http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html + if (self->transient) { + data = g_strdup(""); + goto no_number; + } else + data = g_strdup("Unnamed Window"); /* did the title change? then reset the title_count */ if (old_title && 0 != strncmp(old_title, data, strlen(data))) @@ -1474,7 +1484,7 @@ void client_update_title(ObClient *self) } PROP_SETS(self->window, net_wm_visible_name, data); - +no_number: self->title = data; if (self->frame) @@ -2053,26 +2063,28 @@ void client_configure_full(ObClient *self, ObCorner anchor, w -= self->base_size.width; h -= self->base_size.height; - if (self->min_ratio) - if (h * self->min_ratio > w) { - h = (gint)(w / self->min_ratio); + if (!self->fullscreen) { + if (self->min_ratio) + if (h * self->min_ratio > w) { + h = (gint)(w / self->min_ratio); - /* you cannot resize to nothing */ - if (h < 1) { - h = 1; - w = (gint)(h * self->min_ratio); + /* you cannot resize to nothing */ + if (h < 1) { + h = 1; + w = (gint)(h * self->min_ratio); + } } - } - if (self->max_ratio) - if (h * self->max_ratio < w) { - h = (gint)(w / self->max_ratio); - - /* you cannot resize to nothing */ - if (h < 1) { - h = 1; - w = (gint)(h * self->min_ratio); + if (self->max_ratio) + if (h * self->max_ratio < w) { + h = (gint)(w / self->max_ratio); + + /* you cannot resize to nothing */ + if (h < 1) { + h = 1; + w = (gint)(h * self->min_ratio); + } } - } + } w += self->base_size.width; h += self->base_size.height; @@ -2108,9 +2120,9 @@ void client_configure_full(ObClient *self, ObCorner anchor, resizing in redraw mode */ send_resize_client = ((!user && resized) || (user && (final || - (resized && config_redraw_resize)))); + (resized && config_resize_redraw)))); - /* if the client is enlarging, the resize the client before the frame */ + /* if the client is enlarging, then resize the client before the frame */ if (send_resize_client && user && (w > oldw || h > oldh)) XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh)); @@ -2885,7 +2897,10 @@ ObClient *client_find_directional(ObClient *c, ObDirection dir) continue; if (!client_normal(cur)) continue; - if(c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL) + /* using c->desktop instead of screen_desktop doesn't work if the + * current window was omnipresent, hope this doesn't have any other + * side effects */ + if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) continue; @@ -3132,10 +3147,12 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir) continue; if(!client_normal(cur)) continue; - if(c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL) + if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.x; his_edge_end = cur->frame->area.x + cur->frame->area.width; @@ -3173,10 +3190,12 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir) continue; if(!client_normal(cur)) continue; - if(c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL) + if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.x; his_edge_end = cur->frame->area.x + cur->frame->area.width; @@ -3215,10 +3234,12 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir) continue; if(!client_normal(cur)) continue; - if(c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL) + if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.y; his_edge_end = cur->frame->area.y + cur->frame->area.height; @@ -3257,10 +3278,12 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir) continue; if(!client_normal(cur)) continue; - if(c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL) + if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.y; his_edge_end = cur->frame->area.y + cur->frame->area.height;