Merge branch 'backport' into work

Conflicts:
	openbox/popup.c
This commit is contained in:
Dana Jansens 2009-11-21 16:56:07 -05:00
commit 4bf6b1b551
6 changed files with 56 additions and 30 deletions

View file

@ -112,16 +112,24 @@ static gboolean run_func(ObActionsData *data, gpointer options)
if (data->client) {
Rect *area, *carea;
ObClient *c;
gint mon, cmon;
guint mon, cmon;
gint x, y, lw, lh, w, h;
c = data->client;
mon = o->monitor;
cmon = client_monitor(c);
if (mon == CURRENT_MONITOR) mon = cmon;
else if (mon == ALL_MONITORS) mon = SCREEN_AREA_ALL_MONITORS;
else if (mon == NEXT_MONITOR) mon = (cmon + 1 > screen_num_monitors - 1) ? 0 : (cmon + 1);
else if (mon == PREV_MONITOR) mon = (cmon == 0) ? (screen_num_monitors - 1) : (cmon - 1);
switch (mon) {
case CURRENT_MONITOR:
mon = cmon; break;
case ALL_MONITORS:
mon = SCREEN_AREA_ALL_MONITORS; break;
case NEXT_MONITOR:
mon = (cmon + 1 > screen_num_monitors - 1) ? 0 : (cmon + 1); break;
case PREV_MONITOR:
mon = (cmon == 0) ? (screen_num_monitors - 1) : (cmon - 1); break;
default:
g_assert_not_reached();
}
area = screen_area(c->desktop, mon, NULL);
carea = screen_area(c->desktop, cmon, NULL);

View file

@ -1752,7 +1752,8 @@ void client_setup_decor_and_functions(ObClient *self, gboolean reconfig)
/* 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 = 0;
self->decorations &= (config_theme_keepborder ?
OB_FRAME_DECOR_BORDER : 0);
/* if we don't have a titlebar, then we cannot shade! */
if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR))

View file

@ -338,14 +338,14 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
self->max_vert = self->client->max_vert;
self->shaded = self->client->shaded;
if (self->decorations & OB_FRAME_DECOR_BORDER ||
(self->client->undecorated && config_theme_keepborder
&& !self->client->fullscreen))
if (self->decorations & OB_FRAME_DECOR_BORDER)
self->bwidth = ob_rr_theme->fbwidth;
else
self->bwidth = 0;
if (self->decorations & OB_FRAME_DECOR_BORDER) {
if (self->decorations & OB_FRAME_DECOR_BORDER &&
!self->client->undecorated)
{
self->cbwidth_l = self->cbwidth_r = ob_rr_theme->cbwidthx;
self->cbwidth_t = self->cbwidth_b = ob_rr_theme->cbwidthy;
} else
@ -369,8 +369,7 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
STRUT_SET(self->size,
self->cbwidth_l + (!self->max_horz ? self->bwidth : 0),
self->cbwidth_t +
(!self->max_horz || !self->max_vert ||
!self->client->undecorated ? self->bwidth : 0),
(!self->max_horz || !self->max_vert ? self->bwidth : 0),
self->cbwidth_r + (!self->max_horz ? self->bwidth : 0),
self->cbwidth_b +
(!self->max_horz || !self->max_vert ? self->bwidth : 0));

View file

@ -64,6 +64,8 @@ ObPopup *popup_new(void)
void popup_free(ObPopup *self)
{
if (self) {
popup_hide(self); /* make sure it's not showing or is being delayed and
will be shown */
XDestroyWindow(obt_display, self->bg);
XDestroyWindow(obt_display, self->text);
RrAppearanceFree(self->a_bg);

View file

@ -56,7 +56,7 @@ static void screen_tell_ksplash(void);
static void screen_fallback_focus(void);
guint screen_num_desktops;
guint screen_num_monitors;
guint screen_num_monitors = 0;
guint screen_desktop;
guint screen_last_desktop;
gboolean screen_showing_desktop;
@ -76,7 +76,7 @@ static GSList *struts_left = NULL;
static GSList *struts_right = NULL;
static GSList *struts_bottom = NULL;
static ObPagerPopup **desktop_popup;
static ObPagerPopup **desktop_popup = NULL;
/*! The number of microseconds that you need to be on a desktop before it will
replace the remembered "last desktop" */
@ -345,20 +345,19 @@ void screen_startup(gboolean reconfig)
if (reconfig) {
guint i;
/* recreate the pager popups to use any new theme stuff. it was
freed in screen_shutdown() already. */
desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
for (i = 0; i < screen_num_monitors; i++) {
desktop_popup[i] = pager_popup_new();
pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
/* update the pager popup's width */
pager_popup_text_width_to_strings(desktop_popup[i],
screen_desktop_names,
screen_num_desktops);
}
return;
} else {
desktop_popup = NULL;
}
/* get the initial size */
@ -449,10 +448,10 @@ void screen_shutdown(gboolean reconfig)
{
guint i;
for (i = 0; i < screen_num_monitors; i++) {
for (i = 0; i < screen_num_monitors; i++)
pager_popup_free(desktop_popup[i]);
}
g_free(desktop_popup);
desktop_popup = NULL;
if (reconfig)
return;
@ -498,6 +497,7 @@ void screen_resize(void)
screen_update_areas();
dock_configure();
/* make sure all windows are visible */
for (it = client_list; it; it = g_list_next(it))
client_move_onscreen(it->data, FALSE);
}
@ -1372,22 +1372,32 @@ static void get_xinerama_screens(Rect **xin_areas, guint *nxin)
void screen_update_areas(void)
{
guint i, j;
guint i, j, onum;
gulong *dims;
GList *it;
GSList *sit;
onum = screen_num_monitors;
g_free(monitor_area);
get_xinerama_screens(&monitor_area, &screen_num_monitors);
if (!desktop_popup) {
desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
for (i = 0; i < screen_num_monitors; i++) {
if (screen_num_monitors < onum) {
/* free some of the pager popups */
for (i = screen_num_monitors; i < onum; ++i)
pager_popup_free(desktop_popup[i]);
desktop_popup = g_renew(ObPagerPopup*, desktop_popup,
screen_num_monitors);
}
else {
/* add some more pager popups */
desktop_popup = g_renew(ObPagerPopup*, desktop_popup,
screen_num_monitors);
for (i = onum; i < screen_num_monitors; ++i) {
desktop_popup[i] = pager_popup_new();
pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
if (screen_desktop_names)
/* update the pager popup's width */
if (screen_desktop_names) /* the areas are initialized before the
desktop names */
pager_popup_text_width_to_strings(desktop_popup[i],
screen_desktop_names,
screen_num_desktops);
@ -1491,6 +1501,9 @@ void screen_update_areas(void)
b = MAX(b, s->strut->bottom);
}
/* if the monitor is not against the edge of the root window,
the struts will include the distance from the root window's edge
to the monitor, so add that back into the monitor's work area */
if (l) l += RECT_LEFT (monitor_area[screen_num_monitors])
- RECT_LEFT (monitor_area[i]);
if (t) t += RECT_TOP (monitor_area[screen_num_monitors])

View file

@ -46,7 +46,8 @@ static int parse_inline_number(const char *p);
static RrPixel32* read_c_image(gint width, gint height, const guint8 *data);
static void set_default_appearance(RrAppearance *a);
static RrFont *get_font(RrFont *target, RrFont **default_font, const RrInstance *inst)
static RrFont *get_font(RrFont *target, RrFont **default_font,
const RrInstance *inst)
{
if (target) {
RrFontRef(target);
@ -147,8 +148,10 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
theme->osd_unhilite_fg = RrAppearanceNew(inst, 0);
/* load the font stuff */
theme->win_font_focused = get_font(active_window_font, &default_font, inst);
theme->win_font_unfocused = get_font(inactive_window_font, &default_font, inst);
theme->win_font_focused = get_font(active_window_font,
&default_font, inst);
theme->win_font_unfocused = get_font(inactive_window_font,
&default_font, inst);
winjust = RR_JUSTIFY_LEFT;
if (read_string(db, "window.label.text.justify", &str)) {