#include "config.h"
#include "framerender.h"
#include "mainloop.h"
-#include "focus.h"
+#include "focus_cycle.h"
+#include "focus_cycle_indicator.h"
#include "moveresize.h"
#include "screen.h"
#include "render/theme.h"
#define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \
f->cbwidth_y)
-/* the offsets for the titlebar elements from the edge of the titlebar.
- negative means from the right edge. */
-gint icon_off;
-gint label_off;
-gint iconify_off;
-gint desk_off;
-gint shade_off;
-gint max_off;
-gint close_off;
-
-
static void flash_done(gpointer data);
static gboolean flash_timeout(gpointer data);
self->title = createWindow(self->window, NULL, mask, &attrib);
mask |= CWCursor;
+ attrib.cursor = ob_cursor(OB_CURSOR_NORTH);
+ self->topresize = createWindow(self->title, NULL, mask, &attrib);
attrib.cursor = ob_cursor(OB_CURSOR_NORTHWEST);
self->tltresize = createWindow(self->title, NULL, mask, &attrib);
self->tllresize = createWindow(self->title, NULL, mask, &attrib);
self->shade = createWindow(self->title, NULL, mask, &attrib);
self->icon = createWindow(self->title, NULL, mask, &attrib);
self->iconify = createWindow(self->title, NULL, mask, &attrib);
- self->handle = createWindow(self->window, NULL, mask, &attrib);
mask |= CWCursor;
+ attrib.cursor = ob_cursor(OB_CURSOR_SOUTH);
+ self->handle = createWindow(self->window, NULL, mask, &attrib);
attrib.cursor = ob_cursor(OB_CURSOR_SOUTHWEST);
self->lgrip = createWindow(self->handle, NULL, mask, &attrib);
attrib.cursor = ob_cursor(OB_CURSOR_SOUTHEAST);
static void set_theme_statics(ObFrame *self)
{
/* set colors/appearance/sizes for stuff that doesn't change */
- XSetWindowBorder(ob_display, self->window,
- RrColorPixel(ob_rr_theme->frame_b_color));
- XSetWindowBorder(ob_display, self->inner,
- RrColorPixel(ob_rr_theme->frame_b_color));
- XSetWindowBorder(ob_display, self->title,
- RrColorPixel(ob_rr_theme->frame_b_color));
- XSetWindowBorder(ob_display, self->handle,
- RrColorPixel(ob_rr_theme->frame_b_color));
- XSetWindowBorder(ob_display, self->rgrip,
- RrColorPixel(ob_rr_theme->frame_b_color));
- XSetWindowBorder(ob_display, self->lgrip,
- RrColorPixel(ob_rr_theme->frame_b_color));
-
XResizeWindow(ob_display, self->max,
ob_rr_theme->button_size, ob_rr_theme->button_size);
XResizeWindow(ob_display, self->iconify,
XMapWindow(ob_display, self->title);
if (self->decorations & OB_FRAME_DECOR_GRIPS) {
+ XMoveResizeWindow(ob_display, self->topresize,
+ ob_rr_theme->grip_width + self->bwidth,
+ 0,
+ self->width - (ob_rr_theme->grip_width +
+ self->bwidth) * 2,
+ ob_rr_theme->paddingy + 1);
+
XMoveWindow(ob_display, self->tltresize, 0, 0);
XMoveWindow(ob_display, self->tllresize, 0, 0);
XMoveWindow(ob_display, self->trtresize,
self->width - ob_rr_theme->grip_width, 0);
XMoveWindow(ob_display, self->trrresize,
self->width - ob_rr_theme->paddingx - 1, 0);
+
+ XMapWindow(ob_display, self->topresize);
XMapWindow(ob_display, self->tltresize);
XMapWindow(ob_display, self->tllresize);
XMapWindow(ob_display, self->trtresize);
XMapWindow(ob_display, self->trrresize);
} else {
+ XUnmapWindow(ob_display, self->topresize);
XUnmapWindow(ob_display, self->tltresize);
XUnmapWindow(ob_display, self->tllresize);
XUnmapWindow(ob_display, self->trtresize);
/* if this occurs while we are focus cycling, the indicator needs to
match the changes */
if (focus_cycle_target == self->client)
- focus_cycle_draw_indicator();
+ focus_cycle_draw_indicator(self->client);
}
if (resized && (self->decorations & OB_FRAME_DECOR_TITLEBAR))
XResizeWindow(ob_display, self->label, self->label_width,
/* map the client so it maps when the frame does */
XMapWindow(ob_display, self->client->window);
- /* adjust the frame to the client's size */
- frame_adjust_area(self, FALSE, TRUE, FALSE);
-
/* set all the windows for the frame in the window_map */
g_hash_table_insert(window_map, &self->window, self->client);
g_hash_table_insert(window_map, &self->plate, self->client);
g_hash_table_insert(window_map, &self->handle, self->client);
g_hash_table_insert(window_map, &self->lgrip, self->client);
g_hash_table_insert(window_map, &self->rgrip, self->client);
+ g_hash_table_insert(window_map, &self->topresize, self->client);
g_hash_table_insert(window_map, &self->tltresize, self->client);
g_hash_table_insert(window_map, &self->tllresize, self->client);
g_hash_table_insert(window_map, &self->trtresize, self->client);
g_hash_table_remove(window_map, &self->handle);
g_hash_table_remove(window_map, &self->lgrip);
g_hash_table_remove(window_map, &self->rgrip);
+ g_hash_table_remove(window_map, &self->topresize);
g_hash_table_remove(window_map, &self->tltresize);
g_hash_table_remove(window_map, &self->tllresize);
g_hash_table_remove(window_map, &self->trtresize);
return OB_FRAME_CONTEXT_CLIENT;
else if (!g_ascii_strcasecmp("Titlebar", name))
return OB_FRAME_CONTEXT_TITLEBAR;
- else if (!g_ascii_strcasecmp("Handle", name))
- return OB_FRAME_CONTEXT_HANDLE;
else if (!g_ascii_strcasecmp("Frame", name))
return OB_FRAME_CONTEXT_FRAME;
else if (!g_ascii_strcasecmp("TLCorner", name))
return OB_FRAME_CONTEXT_BLCORNER;
else if (!g_ascii_strcasecmp("BRCorner", name))
return OB_FRAME_CONTEXT_BRCORNER;
+ else if (!g_ascii_strcasecmp("Top", name))
+ return OB_FRAME_CONTEXT_TOP;
+ else if (!g_ascii_strcasecmp("Bottom", name))
+ return OB_FRAME_CONTEXT_BOTTOM;
else if (!g_ascii_strcasecmp("Maximize", name))
return OB_FRAME_CONTEXT_MAXIMIZE;
else if (!g_ascii_strcasecmp("AllDesktops", name))
if (win == self->window) return OB_FRAME_CONTEXT_FRAME;
if (win == self->label) return OB_FRAME_CONTEXT_TITLEBAR;
- if (win == self->handle) return OB_FRAME_CONTEXT_HANDLE;
+ if (win == self->handle) return OB_FRAME_CONTEXT_BOTTOM;
if (win == self->lgrip) return OB_FRAME_CONTEXT_BLCORNER;
if (win == self->rgrip) return OB_FRAME_CONTEXT_BRCORNER;
+ if (win == self->topresize) return OB_FRAME_CONTEXT_TOP;
if (win == self->tltresize) return OB_FRAME_CONTEXT_TLCORNER;
if (win == self->tllresize) return OB_FRAME_CONTEXT_TLCORNER;
if (win == self->trtresize) return OB_FRAME_CONTEXT_TRCORNER;
if (!self->visible)
XUnmapWindow(ob_display, self->window);
+ else
+ /* Send a ConfigureNotify when the animation is done, this fixes
+ KDE's pager showing the window in the wrong place. */
+ client_reconfigure(self->client);
/* we're not animating any more ! */
self->iconify_animation_going = 0;