X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.c;h=59af202a6d426a9b28d14eb41da3c36026161ad7;hb=3a607fad9df628ab16e0f7436dfbfc9b22634003;hp=4ac234d73315a9d3137078f70c0643e3a99f4249;hpb=5e38ae49ce5ceb5b983ee7d486439238a42c8431;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 4ac234d7..59af202a 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -461,6 +461,7 @@ void client_unmanage(ObClient *self) g_free(self->name); g_free(self->class); g_free(self->role); + g_free(self->sm_client_id); g_free(self); /* update the list hints */ @@ -551,14 +552,16 @@ gboolean client_find_onscreen(ObClient *self, int *x, int *y, int w, int h, /* XXX watch for xinerama dead areas */ a = screen_area(self->desktop); - if (!self->strut.right && *x >= a->x + a->width - 1) - *x = a->x + a->width - self->frame->area.width; - if (!self->strut.bottom && *y >= a->y + a->height - 1) - *y = a->y + a->height - self->frame->area.height; - if (!self->strut.left && *x + self->frame->area.width - 1 < a->x) - *x = a->x; - if (!self->strut.top && *y + self->frame->area.height - 1 < a->y) - *y = a->y; + if (client_normal(self)) { + if (!self->strut.right && *x >= a->x + a->width - 1) + *x = a->x + a->width - self->frame->area.width; + if (!self->strut.bottom && *y >= a->y + a->height - 1) + *y = a->y + a->height - self->frame->area.height; + if (!self->strut.left && *x + self->frame->area.width - 1 < a->x) + *x = a->x; + if (!self->strut.top && *y + self->frame->area.height - 1 < a->y) + *y = a->y; + } if (rude) { /* this is my MOZILLA BITCHSLAP. oh ya it fucking feels good. @@ -675,6 +678,7 @@ static void client_get_all(ObClient *self) client_update_title(self); client_update_class(self); + client_update_sm_client_id(self); client_update_strut(self); client_update_icons(self); } @@ -1403,7 +1407,7 @@ void client_update_class(ObClient *self) } if (PROP_GETS(self->window, wm_window_role, locale, &s)) - self->role = g_strdup(s); + self->role = s; if (self->name == NULL) self->name = g_strdup(""); if (self->class == NULL) self->class = g_strdup(""); @@ -1546,6 +1550,16 @@ void client_update_icons(ObClient *self) } } + if (!self->nicons) { + self->nicons++; + self->icons = g_new(ObClientIcon, self->nicons); + self->icons[self->nicons-1].width = 48; + self->icons[self->nicons-1].height = 48; + self->icons[self->nicons-1].data = g_memdup(ob_rr_theme->def_win_icon, + sizeof(RrPixel32) + * 48 * 48); + } + if (self->frame) frame_adjust_icon(self->frame); } @@ -2603,8 +2617,6 @@ ObClientIcon *client_icon(ObClient *self, int w, int h) /* li is the largest image < req */ unsigned long size, smallest = 0xffffffff, largest = 0, si = 0, li = 0; - if (!self->nicons) return NULL; - for (i = 0; i < self->nicons; ++i) { size = self->icons[i].width * self->icons[i].height; if (size < smallest && size >= (unsigned)(w * h)) { @@ -2785,13 +2797,15 @@ ObClient *client_search_transient(ObClient *self, ObClient *search) return NULL; } -gchar* client_get_sm_client_id(ObClient *self) +void client_update_sm_client_id(ObClient *self) { - gchar *id = NULL; + g_free(self->sm_client_id); + self->sm_client_id = NULL; - if (!PROP_GETS(self->window, sm_client_id, locale, &id) && self->group) - PROP_GETS(self->group->leader, sm_client_id, locale, &id); - return id; + if (!PROP_GETS(self->window, sm_client_id, locale, &self->sm_client_id) && + self->group) + PROP_GETS(self->group->leader, sm_client_id, locale, + &self->sm_client_id); } /* finds the nearest edge in the given direction from the current client