Merge branch 'backport' into work
Conflicts: openbox/popup.c
This commit is contained in:
commit
4bf6b1b551
6 changed files with 56 additions and 30 deletions
|
@ -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);
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in a new issue