void frame_startup()
{
- RECT_SET(theme_a_focused_pressed_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_set_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_unpressed_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_set_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_desk->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_set_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_unpressed_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_set_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_shade->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_iconify->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_unpressed_iconify->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_iconify->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_iconify->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_iconify->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_set_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_unpressed_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_set_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_max->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_pressed_close->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_focused_unpressed_close->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_pressed_close->area, 0, 0,
- theme_button_size, theme_button_size);
- RECT_SET(theme_a_unfocused_unpressed_close->area, 0, 0,
- theme_button_size, theme_button_size);
-
- RECT_SET(theme_a_focused_grip->area, 0, 0,
- theme_grip_width, theme_handle_height);
- RECT_SET(theme_a_unfocused_grip->area, 0, 0,
- theme_grip_width, theme_handle_height);
}
void frame_shutdown()
XSetWindowAttributes *attrib)
{
return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
- render_depth, InputOutput, render_visual,
- mask, attrib);
+ RrDepth(ob_rr_inst), InputOutput,
+ RrVisual(ob_rr_inst), mask, attrib);
}
attrib.cursor = ob_cursors.br;
self->rgrip = createWindow(self->handle, mask, &attrib);
+ self->focused = FALSE;
+
/* the other stuff is shown based on decor settings */
XMapWindow(ob_display, self->plate);
XMapWindow(ob_display, self->lgrip);
XResizeWindow(ob_display, self->iconify,
theme_button_size, theme_button_size);
XResizeWindow(ob_display, self->icon,
- theme_button_size, theme_button_size);
+ theme_button_size + 2, theme_button_size + 2);
XResizeWindow(ob_display, self->close,
theme_button_size, theme_button_size);
XResizeWindow(ob_display, self->desk,
theme_grip_width, theme_handle_height);
/* set up the dynamic appearances */
- self->a_unfocused_title = appearance_copy(theme_a_unfocused_title);
- self->a_focused_title = appearance_copy(theme_a_focused_title);
- self->a_unfocused_label = appearance_copy(theme_a_unfocused_label);
- self->a_focused_label = appearance_copy(theme_a_focused_label);
- self->a_unfocused_handle = appearance_copy(theme_a_unfocused_handle);
- self->a_focused_handle = appearance_copy(theme_a_focused_handle);
- self->a_icon = appearance_copy(theme_a_icon);
+ self->a_unfocused_title = RrAppearanceCopy(theme_a_unfocused_title);
+ self->a_focused_title = RrAppearanceCopy(theme_a_focused_title);
+ self->a_unfocused_label = RrAppearanceCopy(theme_a_unfocused_label);
+ self->a_focused_label = RrAppearanceCopy(theme_a_focused_label);
+ self->a_unfocused_handle = RrAppearanceCopy(theme_a_unfocused_handle);
+ self->a_focused_handle = RrAppearanceCopy(theme_a_focused_handle);
+ self->a_icon = RrAppearanceCopy(theme_a_icon);
self->max_press = self->close_press = self->desk_press =
self->iconify_press = self->shade_press = FALSE;
static void frame_free(Frame *self)
{
- appearance_free(self->a_unfocused_title);
- appearance_free(self->a_focused_title);
- appearance_free(self->a_unfocused_label);
- appearance_free(self->a_focused_label);
- appearance_free(self->a_unfocused_handle);
- appearance_free(self->a_focused_handle);
- appearance_free(self->a_icon);
+ RrAppearanceFree(self->a_unfocused_title);
+ RrAppearanceFree(self->a_focused_title);
+ RrAppearanceFree(self->a_unfocused_label);
+ RrAppearanceFree(self->a_focused_label);
+ RrAppearanceFree(self->a_unfocused_handle);
+ RrAppearanceFree(self->a_focused_handle);
+ RrAppearanceFree(self->a_icon);
XDestroyWindow(ob_display, self->window);
self->innersize.top += theme_title_height + self->bwidth;
XMapWindow(ob_display, self->title);
- RECT_SET(self->a_focused_title->area, 0, 0,
- self->width, theme_title_height);
- RECT_SET(self->a_unfocused_title->area, 0, 0,
- self->width, theme_title_height);
-
/* layout the title bar elements */
layout_title(self);
} else
self->bwidth;
XMapWindow(ob_display, self->handle);
- if (theme_a_focused_grip->surface.data.planar.grad ==
- Background_ParentRelative)
- RECT_SET(self->a_focused_handle->area, 0, 0,
- self->width, theme_handle_height);
- else
- RECT_SET(self->a_focused_handle->area,
- theme_grip_width + self->bwidth, 0,
- self->width - (theme_grip_width + self->bwidth) * 2,
- theme_handle_height);
- if (theme_a_unfocused_grip->surface.data.planar.grad ==
- Background_ParentRelative)
- RECT_SET(self->a_unfocused_handle->area, 0, 0,
- self->width, theme_handle_height);
- else
- RECT_SET(self->a_unfocused_handle->area,
- theme_grip_width + self->bwidth, 0,
- self->width - (theme_grip_width + self->bwidth) * 2,
- theme_handle_height);
-
+ /* XXX make a subwindow with these dimentions?
+ theme_grip_width + self->bwidth, 0,
+ self->width - (theme_grip_width + self->bwidth) * 2,
+ theme_handle_height);
+ */
} else
XUnmapWindow(ob_display, self->handle);
}
framerender_frame(self);
}
-void frame_adjust_focus(Frame *self)
+void frame_adjust_focus(Frame *self, gboolean hilite)
{
+ self->focused = hilite;
framerender_frame(self);
}
frame_adjust_area(self, TRUE, TRUE);
- /* set all the windows for the frame in the client_map */
- g_hash_table_insert(client_map, &self->window, client);
- g_hash_table_insert(client_map, &self->plate, client);
- g_hash_table_insert(client_map, &self->title, client);
- g_hash_table_insert(client_map, &self->label, client);
- g_hash_table_insert(client_map, &self->max, client);
- g_hash_table_insert(client_map, &self->close, client);
- g_hash_table_insert(client_map, &self->desk, client);
- g_hash_table_insert(client_map, &self->shade, client);
- g_hash_table_insert(client_map, &self->icon, client);
- g_hash_table_insert(client_map, &self->iconify, client);
- g_hash_table_insert(client_map, &self->handle, client);
- g_hash_table_insert(client_map, &self->lgrip, client);
- g_hash_table_insert(client_map, &self->rgrip, client);
+ /* set all the windows for the frame in the window_map */
+ g_hash_table_insert(window_map, &self->window, client);
+ g_hash_table_insert(window_map, &self->plate, client);
+ g_hash_table_insert(window_map, &self->title, client);
+ g_hash_table_insert(window_map, &self->label, client);
+ g_hash_table_insert(window_map, &self->max, client);
+ g_hash_table_insert(window_map, &self->close, client);
+ g_hash_table_insert(window_map, &self->desk, client);
+ g_hash_table_insert(window_map, &self->shade, client);
+ g_hash_table_insert(window_map, &self->icon, client);
+ g_hash_table_insert(window_map, &self->iconify, client);
+ g_hash_table_insert(window_map, &self->handle, client);
+ g_hash_table_insert(window_map, &self->lgrip, client);
+ g_hash_table_insert(window_map, &self->rgrip, client);
}
void frame_release_client(Frame *self, Client *client)
if (XCheckTypedWindowEvent(ob_display, client->window,
ReparentNotify, &ev)) {
XPutBackEvent(ob_display, &ev);
+
/* re-map the window since the unmanaging process unmaps it */
- XMapWindow(ob_display, client->window);
+
+ /* XXX ... um no it doesnt it unmaps its parent, the window itself
+ retains its mapped state, no?! XXX
+ XMapWindow(ob_display, client->window); */
} else {
/* according to the ICCCM - if the client doesn't reparent itself,
then we will reparent the window to root for them */
client->area.y);
}
- /* remove all the windows for the frame from the client_map */
- g_hash_table_remove(client_map, &self->window);
- g_hash_table_remove(client_map, &self->plate);
- g_hash_table_remove(client_map, &self->title);
- g_hash_table_remove(client_map, &self->label);
- g_hash_table_remove(client_map, &self->max);
- g_hash_table_remove(client_map, &self->close);
- g_hash_table_remove(client_map, &self->desk);
- g_hash_table_remove(client_map, &self->shade);
- g_hash_table_remove(client_map, &self->icon);
- g_hash_table_remove(client_map, &self->iconify);
- g_hash_table_remove(client_map, &self->handle);
- g_hash_table_remove(client_map, &self->lgrip);
- g_hash_table_remove(client_map, &self->rgrip);
+ /* remove all the windows for the frame from the window_map */
+ g_hash_table_remove(window_map, &self->window);
+ g_hash_table_remove(window_map, &self->plate);
+ g_hash_table_remove(window_map, &self->title);
+ g_hash_table_remove(window_map, &self->label);
+ g_hash_table_remove(window_map, &self->max);
+ g_hash_table_remove(window_map, &self->close);
+ g_hash_table_remove(window_map, &self->desk);
+ g_hash_table_remove(window_map, &self->shade);
+ g_hash_table_remove(window_map, &self->icon);
+ g_hash_table_remove(window_map, &self->iconify);
+ g_hash_table_remove(window_map, &self->handle);
+ g_hash_table_remove(window_map, &self->lgrip);
+ g_hash_table_remove(window_map, &self->rgrip);
frame_free(self);
}
if (!(self->client->decorations & Decor_Icon)) break;
if (n) { *lc = ' '; break; } /* rm duplicates */
n = TRUE;
- self->label_width -= theme_button_size + theme_bevel + 1;
+ self->label_width -= theme_button_size + 2 + theme_bevel + 1;
break;
case 'D':
if (!(self->client->decorations & Decor_AllDesktops)) break;
case 'N':
if (!n) break;
self->icon_x = x;
- RECT_SET(self->a_icon->area, 0, 0,
- theme_button_size, theme_button_size);
XMapWindow(ob_display, self->icon);
- XMoveWindow(ob_display, self->icon, x, theme_bevel + 1);
- x += theme_button_size + theme_bevel + 1;
+ XMoveWindow(ob_display, self->icon, x, theme_bevel);
+ x += theme_button_size + 2 + theme_bevel + 1;
break;
case 'D':
if (!d) break;
break;
}
}
-
- RECT_SET(self->a_focused_label->area, 0, 0,
- self->label_width, theme_label_height);
- RECT_SET(self->a_unfocused_label->area, 0, 0,
- self->label_width, theme_label_height);
}
Context frame_context_from_string(char *name)