From 00cb161ec62830cfb3be0e77177452d60aad6545 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Nov 2009 15:12:40 -0500 Subject: Keep things in 80 columns --- render/theme.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/render/theme.c b/render/theme.c index 0882637a..aa9cb3f9 100644 --- a/render/theme.c +++ b/render/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 @@ 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)) { -- cgit v1.2.3 From 056295a8ad05f58efc90a7874362d19cd6c42538 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Nov 2009 15:16:37 -0500 Subject: Fix some signed/unsigned warnings (and keep stuff within 80 columns). --- openbox/actions/moveresizeto.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/openbox/actions/moveresizeto.c b/openbox/actions/moveresizeto.c index acad73b5..29780c49 100644 --- a/openbox/actions/moveresizeto.c +++ b/openbox/actions/moveresizeto.c @@ -119,16 +119,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); -- cgit v1.2.3 From 33328583a143677d27eb3d081ce66532c3aaca1c Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Nov 2009 16:05:27 -0500 Subject: Some fixes for the pager popups, and avoid a crash if you destroy a popup while it is going to be shown later by a delay. --- openbox/popup.c | 2 ++ openbox/screen.c | 40 +++++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/openbox/popup.c b/openbox/popup.c index 2a0d5960..5cbe0347 100644 --- a/openbox/popup.c +++ b/openbox/popup.c @@ -65,6 +65,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(ob_display, self->bg); XDestroyWindow(ob_display, self->text); RrAppearanceFree(self->a_bg); diff --git a/openbox/screen.c b/openbox/screen.c index 1bcda980..5ca0832c 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -57,7 +57,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; @@ -77,7 +77,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" */ @@ -355,20 +355,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 */ @@ -460,10 +459,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; @@ -510,6 +509,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); } @@ -1340,22 +1340,32 @@ typedef struct { 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); extensions_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); -- cgit v1.2.3 From ac6cd2344f2afda023ac08017e0d2b19b0f66df8 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Nov 2009 16:33:35 -0500 Subject: Add a comment for commit ec9fbf05df3ac807d60ae6af36236ffc6567bbdc regarding struts with multiple monitors. --- openbox/screen.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openbox/screen.c b/openbox/screen.c index 5ca0832c..3e27903f 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -1469,6 +1469,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]) -- cgit v1.2.3 From ada5de28f71efaa5584709673cc49cdb3b703299 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Nov 2009 16:43:00 -0500 Subject: Don't ever give borders to windows that didnt have them before by making them "undecorated" with the keepborder config option on. This fixes what commit 85f39cd27e7ea0eec8bc78f6139092b44fda2dad fixed for the fullscreen window case, but also fixes bug #4344. --- openbox/client.c | 3 ++- openbox/frame.c | 11 +++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openbox/client.c b/openbox/client.c index fe342f65..efb815e7 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1826,7 +1826,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)) diff --git a/openbox/frame.c b/openbox/frame.c index e4a64bd3..c1b31570 100644 --- a/openbox/frame.c +++ b/openbox/frame.c @@ -340,14 +340,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 @@ -371,8 +371,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)); -- cgit v1.2.3