*/
if (ob_state() == OB_STATE_RUNNING &&
(transient ||
- (!(self->sized & USSize) &&
+ (!(self->sized & USSize || self->positioned & USPosition) &&
client_normal(self) &&
!self->session)))
{
/* set the default icon onto the window
in theory, this could be a race, but if a window doesn't set an icon
or removes it entirely, it's not very likely it is going to set one
- right away afterwards */
- if (self->nicons == 0) {
+ right away afterwards
+
+ if it has parents, then one of them will have an icon already
+ */
+ if (self->nicons == 0 && !self->parents) {
RrPixel32 *icon = ob_rr_theme->def_win_icon;
gulong *data;
in this case (if force_reply is true)
When user = TRUE, then the request is coming from "us", like when we
- maximize a window or sometihng. In this case we are more lenient. We
+ maximize a window or something. In this case we are more lenient. We
used to follow the same rules as above, but _Java_ Swing can't handle
this. So just to appease Swing, when user = TRUE, we always send
a synthetic ConfigureNotify to give the window its root coordinates.
*/
- if ((!user && !resized && (rootmoved || force_reply)) || (user && final))
+ if ((!user && !resized && (rootmoved || force_reply)) ||
+ (user && final && rootmoved))
{
XEvent event;
frame_adjust_state(self->frame);
/* 'move' the window to the new desktop */
if (!donthide)
- client_showhide(self);
+ client_hide(self);
+ client_show(self);
/* raise if it was not already on the desktop */
if (old != DESKTOP_ALL && !dontraise)
stacking_raise(CLIENT_AS_WINDOW(self));
{
return self->group && self->group->members->next;
}
+
+ObClientIcon *client_thumbnail(ObClient *self, gint wantw, gint wanth)
+{
+ ObClientIcon *ret;
+ RrPixel32 *data;
+ gint w, h;
+
+ if (!self->frame->pixmap) return NULL;
+ if (!RrPixmapToRGBA(ob_rr_inst, self->frame->pixmap, None, &w, &h, &data))
+ return NULL;
+
+ /* resize the thumbnail (within aspect ratio) to the given sizes */
+
+ ret = g_new(ObClientIcon, 1);
+ ret->data = data;
+ ret->width = w;
+ ret->height = h;
+ return ret;
+}
+
+void clienticon_free(ObClientIcon *ci)
+{
+ if (ci) {
+ g_free(ci->data);
+ g_free(ci);
+ }
+}