diff --git a/src/frame.c b/src/frame.c index ca0d5115..c8bdb81d 100644 --- a/src/frame.c +++ b/src/frame.c @@ -82,6 +82,22 @@ frameDecorationBottom (ScreenInfo *screen_info) } int +frameCropTop (Client * c) +{ + g_return_val_if_fail (c != NULL, 0); + TRACE ("client \"%s\" (0x%lx)", c->name, c->window); + + if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER) + && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN) + && FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED) + && (c->screen_info->params->borderless_maximize)) + { + return c->screen_info->params->frame_border_top; + } + return 0; +} + +int frameLeft (Client * c) { TRACE ("entering frameLeft"); @@ -121,7 +137,7 @@ frameTop (Client * c) g_return_val_if_fail (c != NULL, 0); if (CLIENT_HAS_FRAME (c)) { - return c->screen_info->title[TITLE_3][ACTIVE].height; + return frameDecorationTop(c->screen_info) - frameCropTop (c); } return 0; } @@ -378,7 +394,7 @@ frameFillTitlePixmap (Client * c, int state, int part, int x, int w, int h, xfwm { xfwmPixmapFill (&screen_info->title[part][state], top_pm, x, 0, w, h); } - xfwmPixmapFill (&screen_info->title[part][state], title_pm, x, 0, w, frameTop (c)); + xfwmPixmapFill (&screen_info->title[part][state], title_pm, x, 0, w, frameDecorationTop(screen_info)); } static void @@ -455,10 +471,10 @@ frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * */ title_height = logical_rect.height; } - title_y = voffset + (frameTop (c) - title_height) / 2; - if (title_y + title_height > frameTop (c)) + title_y = voffset + (frameDecorationTop(screen_info) - title_height) / 2; + if (title_y + title_height > frameDecorationTop(screen_info)) { - title_y = MAX (0, frameTop (c) - title_height); + title_y = MAX (0, frameDecorationTop(screen_info) - title_height); } if (!xfwmPixmapNone(&screen_info->top[3][ACTIVE])) @@ -467,7 +483,7 @@ frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * } else { - top_height = frameTop (c) / 10 + 1; + top_height = frameDecorationTop(screen_info) / 10 + 1; if (top_height > title_y - 1) { top_height = MAX (title_y - 1, 0); @@ -535,7 +551,7 @@ frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * } xfwmPixmapCreate (screen_info, top_pm, width, top_height); - xfwmPixmapCreate (screen_info, title_pm, width, frameTop (c)); + xfwmPixmapCreate (screen_info, title_pm, width, frameDecorationTop(screen_info)); gpixmap = gdk_pixmap_foreign_new (title_pm->pixmap); gdk_drawable_set_colormap (gpixmap, gdk_screen_get_system_colormap (screen_info->gscr)); gc = gdk_gc_new (gpixmap); @@ -1094,7 +1110,7 @@ frameDrawWin (Client * c) xfwmWindowSetBG (&c->buttons[button], my_pixmap); } xfwmWindowShow (&c->buttons[button], x, - (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2, + ((frameDecorationTop(screen_info) - screen_info->buttons[button][state].height + 1) / 2) - frameCropTop (c), screen_info->buttons[button][state].width, screen_info->buttons[button][state].height, TRUE); button_x[button] = x; @@ -1131,7 +1147,7 @@ frameDrawWin (Client * c) x = x - screen_info->buttons[button][state].width - screen_info->params->button_spacing; xfwmWindowShow (&c->buttons[button], x, - (frameTop (c) - screen_info->buttons[button][state].height + 1) / 2, + ((frameDecorationTop(screen_info) - screen_info->buttons[button][state].height + 1) / 2) - frameCropTop (c), screen_info->buttons[button][state].width, screen_info->buttons[button][state].height, TRUE); button_x[button] = x; @@ -1164,8 +1180,8 @@ frameDrawWin (Client * c) frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title, &frame_pix.pm_sides[SIDE_TOP]); xfwmWindowSetBG (&c->title, &frame_pix.pm_title); xfwmWindowShow (&c->title, - frameTopLeftWidth (c, state), 0, top_width, - frameTop (c), (requires_clearing | width_changed)); + frameTopLeftWidth (c, state), 0 - frameCropTop (c), top_width, + frameDecorationTop(screen_info), (requires_clearing | width_changed)); /* Corners are never resized, we need to update them separately */ if (requires_clearing) diff --git a/src/frame.h b/src/frame.h index 6f34304f..9e2fd1e0 100644 --- a/src/frame.h +++ b/src/frame.h @@ -36,6 +36,7 @@ int frameDecorationLeft (ScreenInfo *); int frameDecorationRight (ScreenInfo *); int frameDecorationTop (ScreenInfo *); int frameDecorationBottom (ScreenInfo *); +int frameCropTop (Client *); int frameLeft (Client *); int frameRight (Client *); int frameTop (Client *); diff --git a/src/settings.c b/src/settings.c index ce2f8c04..cd23c860 100644 --- a/src/settings.c +++ b/src/settings.c @@ -588,6 +588,7 @@ loadTheme (ScreenInfo *screen_info, Settings *rc) strncpy (screen_info->params->button_layout, getStringValue ("button_layout", rc), BUTTON_STRING_COUNT); screen_info->params->button_spacing = getIntValue ("button_spacing", rc); screen_info->params->button_offset = getIntValue ("button_offset", rc); + screen_info->params->frame_border_top = getIntValue ("frame_border_top", rc); screen_info->params->maximized_offset = getIntValue ("maximized_offset", rc); screen_info->params->title_vertical_offset_active = getIntValue ("title_vertical_offset_active", rc); @@ -732,6 +733,7 @@ loadSettings (ScreenInfo *screen_info) {"focus_hint", NULL, G_TYPE_BOOLEAN, TRUE}, {"focus_new", NULL, G_TYPE_BOOLEAN,TRUE}, {"frame_opacity", NULL, G_TYPE_INT, TRUE}, + {"frame_border_top", NULL, G_TYPE_INT, TRUE}, {"full_width_title", NULL, G_TYPE_BOOLEAN, TRUE}, {"horiz_scroll_opacity", NULL, G_TYPE_BOOLEAN, FALSE}, {"inactive_opacity", NULL, G_TYPE_INT, TRUE}, @@ -1250,6 +1252,7 @@ cb_xfwm4_channel_property_changed(XfconfChannel *channel, const gchar *property_ || (!strcmp (name, "button_spacing")) || (!strcmp (name, "double_click_time")) || (!strcmp (name, "double_DOUBLE_CLICKclick_distance")) + || (!strcmp (name, "frame_border_top")) || (!strcmp (name, "maximized_offset")) || (!strcmp (name, "shadow_delta_height")) || (!strcmp (name, "shadow_delta_width")) diff --git a/src/settings.h b/src/settings.h index b1467b98..7e9a7229 100644 --- a/src/settings.h +++ b/src/settings.h @@ -183,6 +183,7 @@ struct _XfwmParams guint easy_click; int focus_delay; int frame_opacity; + int frame_border_top; int inactive_opacity; int maximized_offset; int move_opacity;