all repos — openbox @ 4bf6b1b551be744be4fbe4d1faab5be12d051378

openbox fork - make it a bit more like ryudo

Merge branch 'backport' into work

Conflicts:
	openbox/popup.c
Dana Jansens danakj@orodu.net
commit

4bf6b1b551be744be4fbe4d1faab5be12d051378

parent

c02c825cb8f18f0170b312ea8d4b3f4d491bff40

M openbox/actions/moveresizeto.copenbox/actions/moveresizeto.c

@@ -112,16 +112,24 @@

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);
M openbox/client.copenbox/client.c

@@ -1752,7 +1752,8 @@

/* 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))
M openbox/frame.copenbox/frame.c

@@ -338,14 +338,14 @@ self->max_horz = self->client->max_horz;

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 @@

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));
M openbox/popup.copenbox/popup.c

@@ -64,6 +64,8 @@

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);
M openbox/screen.copenbox/screen.c

@@ -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 @@ gboolean namesexist = FALSE;

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 @@

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 @@ }

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 @@ STRUT_BOTTOM_ON_MONITOR(s->strut, i))

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])
M render/theme.crender/theme.c

@@ -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 @@ theme->osd_hilite_fg = RrAppearanceNew(inst, 0);

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)) {