aboutsummaryrefslogtreecommitdiffstats
path: root/x11-wm
diff options
context:
space:
mode:
authornovel <novel@FreeBSD.org>2018-01-21 17:59:14 +0800
committerKoop Mast <kwm@rainbow-runner.nl>2018-02-04 06:27:14 +0800
commit9abd066f16c7847626da6dbc7952490f1e419e9d (patch)
tree7358ab0ee3ec7d5e6a2a3a2db9302b990c02244c /x11-wm
parent2ca938e3436e2ff6d5e62134d0b3924c989d1abd (diff)
downloadfreebsd-ports-gnome-9abd066f16c7847626da6dbc7952490f1e419e9d.tar.gz
freebsd-ports-gnome-9abd066f16c7847626da6dbc7952490f1e419e9d.tar.zst
freebsd-ports-gnome-9abd066f16c7847626da6dbc7952490f1e419e9d.zip
x11-wm/opebox: include some third party patches
- Include 3rd party patches from https://github.com/dylanaraps/openbox-patched. These include support for rounded corners and some bugfixes. They could be enabled using the new PATCHES option, which is off by default; - Use INSTALL_TARGET=install-strip to strip binaries as detected by stage-qa.
Diffstat (limited to 'x11-wm')
-rw-r--r--x11-wm/openbox/Makefile11
-rw-r--r--x11-wm/openbox/distinfo1
-rw-r--r--x11-wm/openbox/files/openbox-3.5.0-title-matching.patch11
-rw-r--r--x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch11
-rw-r--r--x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch22
-rw-r--r--x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch178
-rw-r--r--x11-wm/openbox/pkg-descr4
7 files changed, 236 insertions, 2 deletions
diff --git a/x11-wm/openbox/Makefile b/x11-wm/openbox/Makefile
index a9c49d64fdea..fc127b7a30ec 100644
--- a/x11-wm/openbox/Makefile
+++ b/x11-wm/openbox/Makefile
@@ -3,7 +3,7 @@
PORTNAME= openbox
PORTVERSION= 3.6
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= x11-wm
MASTER_SITES= http://openbox.org/dist/openbox/
@@ -21,6 +21,7 @@ USE_GNOME= cairo glib20 libxml2
USE_XORG= ice sm x11 xcursor xext xft xinerama xrandr \
xrender xau
USE_LDCONFIG= yes
+INSTALL_TARGET= install-strip
SHEBANG_FILES= data/autostart/openbox-xdg-autostart
CFLAGS+= -I${LOCALBASE}/include
@@ -28,7 +29,7 @@ LDFLAGS+= -L${LOCALBASE}/lib -lXext
PLIST_SUB= VERSION=${PORTVERSION}
-OPTIONS_DEFINE= NLS IMLIB PANGO SVG NOTIFY
+OPTIONS_DEFINE= NLS IMLIB PANGO SVG NOTIFY PATCHES
OPTIONS_DEFAULT= IMLIB PANGO NOTIFY SVG
OPTIONS_SUB= yes
@@ -47,6 +48,12 @@ IMLIB_LIB_DEPENDS= libImlib2.so:graphics/imlib2
SVG_USE= GNOME=librsvg2
SVG_CONFIGURE_ENABLE= librsvg
+PATCHES_DESC= Enable 3rd party patches (such as rounded corners)
+PATCHES_EXTRA_PATCHES= ${PATCHDIR}/openbox-3.5.0-title-matching.patch:-p1 \
+ ${PATCHDIR}/openbox-3.5.0-which-2.20.patch:-p1 \
+ ${PATCHDIR}/openbox-3.6.2-fix-out-of-bounds.patch:-p1 \
+ ${PATCHDIR}/openbox-3.6.2-rounded-corners.patch:-p1
+
post-configure:
@${CHMOD} +x ${WRKSRC}/install-sh
diff --git a/x11-wm/openbox/distinfo b/x11-wm/openbox/distinfo
index 5a366afef13b..60b8b1abc49d 100644
--- a/x11-wm/openbox/distinfo
+++ b/x11-wm/openbox/distinfo
@@ -1,2 +1,3 @@
+TIMESTAMP = 1516419364
SHA256 (openbox-3.6.tar.gz) = 866c0ab8cb1cd15c7ae8022179cb6132a4c0f0476673bd3b834a1ef67a593ba8
SIZE (openbox-3.6.tar.gz) = 963207
diff --git a/x11-wm/openbox/files/openbox-3.5.0-title-matching.patch b/x11-wm/openbox/files/openbox-3.5.0-title-matching.patch
new file mode 100644
index 000000000000..fdfe28af0279
--- /dev/null
+++ b/x11-wm/openbox/files/openbox-3.5.0-title-matching.patch
@@ -0,0 +1,11 @@
+--- openbox-3.5.0/openbox/client.c 2011-08-01 22:14:58.000000000 +0200
++++ openbox-3.5.0/openbox/client.c 2011-10-22 14:59:56.000000000 +0200
+@@ -883,7 +883,7 @@
+ !g_pattern_match(app->role,
+ strlen(self->role), self->role, NULL))
+ match = FALSE;
+- else if (app->title &&
++ else if (app->title && self->title &&
+ !g_pattern_match(app->title,
+ strlen(self->title), self->title, NULL))
+ match = FALSE;
diff --git a/x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch b/x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch
new file mode 100644
index 000000000000..35d6b59065eb
--- /dev/null
+++ b/x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch
@@ -0,0 +1,11 @@
+--- openbox-3.5.0/data/autostart/autostart.in~ 2011-08-02 15:50:01.963531310 +0000
++++ openbox-3.5.0/data/autostart/autostart.in 2011-08-02 15:51:57.277879458 +0000
+@@ -8,7 +8,7 @@
+ #
+ #if test -x @libexecdir@/gnome-settings-daemon >/dev/null; then
+ # @libexecdir@/gnome-settings-daemon &
+-#elif which gnome-settings-daemon >/dev/null; then
++#elif which gnome-settings-daemon >/dev/null 2>&1; then
+ # gnome-settings-daemon &
+ #fi
+
diff --git a/x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch b/x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch
new file mode 100644
index 000000000000..5bf59af644e1
--- /dev/null
+++ b/x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch
@@ -0,0 +1,22 @@
+From b0ed75ee851121ad25491ef6e1dca25be7bc50f3 Mon Sep 17 00:00:00 2001
+From: o9000 <mrovi9000@gmail.com>
+Date: Wed, 5 Apr 2017 12:38:10 +0200
+Subject: [PATCH] Fix out-of-bounds read
+
+---
+ openbox/frame.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/openbox/frame.c b/openbox/frame.c
+index 89669726a..943b6380b 100644
+--- a/openbox/frame.c
++++ b/openbox/frame.c
+@@ -1215,7 +1215,7 @@ static void layout_title(ObFrame *self)
+ }
+
+ /* stop at the end of the string (or the label, which calls break) */
+- for (; *lc != '\0' && lc >= config_title_layout; lc+=i) {
++ for (; lc >= config_title_layout && *lc != '\0'; lc+=i) {
+ if (*lc == 'L') {
+ if (i > 0) {
+ self->label_on = TRUE;
diff --git a/x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch b/x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch
new file mode 100644
index 000000000000..7a4574828981
--- /dev/null
+++ b/x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch
@@ -0,0 +1,178 @@
+diff --git a/openbox/config.c b/openbox/config.c
+index dad5d1bf..a387335c 100644
+--- a/openbox/config.c
++++ b/openbox/config.c
+@@ -48,6 +48,8 @@ StrutPartial config_margins;
+ gchar *config_theme;
+ gboolean config_theme_keepborder;
+ guint config_theme_window_list_icon_size;
++guint config_theme_cornerradius;
++gboolean config_theme_menuradius;
+
+ gchar *config_title_layout;
+
+@@ -719,6 +721,10 @@ static void parse_theme(xmlNodePtr node, gpointer d)
+ else if (config_theme_window_list_icon_size > 96)
+ config_theme_window_list_icon_size = 96;
+ }
++ if ((n = obt_xml_find_node(node, "cornerRadius"))) {
++ config_theme_cornerradius = obt_xml_node_int(n);
++ obt_xml_attr_bool(n, "menu", &config_theme_menuradius);
++ }
+
+ for (n = obt_xml_find_node(node, "font");
+ n;
+@@ -1098,6 +1104,8 @@ void config_startup(ObtXmlInst *i)
+ config_title_layout = g_strdup("NLIMC");
+ config_theme_keepborder = TRUE;
+ config_theme_window_list_icon_size = 36;
++ config_theme_cornerradius = 0;
++ config_theme_menuradius = TRUE;
+
+ config_font_activewindow = NULL;
+ config_font_inactivewindow = NULL;
+diff --git a/openbox/config.h b/openbox/config.h
+index 96a66cf1..5622d059 100644
+--- a/openbox/config.h
++++ b/openbox/config.h
+@@ -152,6 +152,10 @@ extern gchar *config_title_layout;
+ extern gboolean config_animate_iconify;
+ /*! Size of icons in focus switching dialogs */
+ extern guint config_theme_window_list_icon_size;
++/*! Display rounded corners for decorated windows */
++extern guint config_theme_cornerradius;
++/*! Display rounded corners for root and client-list menus */
++extern gboolean config_theme_menuradius;
+
+ /*! The font for the active window's title */
+ extern RrFont *config_font_activewindow;
+diff --git a/openbox/frame.c b/openbox/frame.c
+index 89669726..1539717c 100644
+--- a/openbox/frame.c
++++ b/openbox/frame.c
+@@ -334,6 +334,51 @@ void frame_adjust_shape(ObFrame *self)
+ #endif
+ }
+
++void frame_round_corners(Window window)
++{
++ XWindowAttributes win_attr;
++ XGetWindowAttributes(obt_display, window, &win_attr);
++
++ // If this returns null, the window is invalid.
++ if(!XGetWindowAttributes(obt_display, window, &win_attr))
++ return;
++
++ int width = win_attr.width + win_attr.border_width;
++ int height = win_attr.height + win_attr.border_width;
++ int rad = config_theme_cornerradius;
++ int dia = 2 * rad;
++
++ // do not try to round if the window would be smaller than the corners
++ if(width < dia || height < dia)
++ return;
++
++ Pixmap mask = XCreatePixmap(obt_display, window, width, height, 1);
++ // if this returns null, the mask is not drawable
++ if(!mask)
++ return;
++
++ XGCValues xgcv;
++ GC shape_gc = XCreateGC(obt_display, mask, 0, &xgcv);
++ if(!shape_gc) {
++ XFreePixmap(obt_display, mask);
++ return;
++ }
++
++ XSetForeground(obt_display, shape_gc, 0);
++ XFillRectangle(obt_display, mask, shape_gc, 0, 0, width, height);
++ XSetForeground(obt_display, shape_gc, 1);
++ XFillArc(obt_display, mask, shape_gc, 0, 0, dia, dia, 0, 23040);
++ XFillArc(obt_display, mask, shape_gc, width-dia-1, 0, dia, dia, 0, 23040);
++ XFillArc(obt_display, mask, shape_gc, 0, height-dia-1, dia, dia, 0, 23040);
++ XFillArc(obt_display, mask, shape_gc, width-dia-1, height-dia-1, dia, dia,
++ 0, 23040);
++ XFillRectangle(obt_display, mask, shape_gc, rad, 0, width-dia, height);
++ XFillRectangle(obt_display, mask, shape_gc, 0, rad, width, height-dia);
++ XShapeCombineMask(obt_display, window, ShapeBounding, 0, 0, mask, ShapeSet);
++ XFreePixmap(obt_display, mask);
++ XFreeGC(obt_display, shape_gc);
++}
++
+ void frame_adjust_area(ObFrame *self, gboolean moved,
+ gboolean resized, gboolean fake)
+ {
+@@ -857,7 +902,6 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
+
+ if (resized) {
+ self->need_render = TRUE;
+- framerender_frame(self);
+ frame_adjust_shape(self);
+ }
+
+@@ -884,7 +928,9 @@ void frame_adjust_area(ObFrame *self, gboolean moved,
+ {
+ XResizeWindow(obt_display, self->label, self->label_width,
+ ob_rr_theme->label_height);
++ self->need_render = TRUE;
+ }
++ framerender_frame(self);
+ }
+
+ static void frame_adjust_cursors(ObFrame *self)
+@@ -958,6 +1004,8 @@ void frame_adjust_client_area(ObFrame *self)
+ XMoveResizeWindow(obt_display, self->backfront, 0, 0,
+ self->client->area.width,
+ self->client->area.height);
++ self->need_render = TRUE;
++ framerender_frame(self);
+ }
+
+ void frame_adjust_state(ObFrame *self)
+diff --git a/openbox/framerender.c b/openbox/framerender.c
+index 094d5962..54046580 100644
+--- a/openbox/framerender.c
++++ b/openbox/framerender.c
+@@ -21,6 +21,7 @@
+ #include "openbox.h"
+ #include "screen.h"
+ #include "client.h"
++#include "config.h"
+ #include "framerender.h"
+ #include "obrender/theme.h"
+
+@@ -42,6 +43,12 @@ void framerender_frame(ObFrame *self)
+ return;
+ self->need_render = FALSE;
+
++ if (config_theme_cornerradius &&
++ !self->client->fullscreen &&
++ !self->client->shaped &&
++ !(self->client->type == OB_CLIENT_TYPE_DOCK))
++ frame_round_corners(self->window);
++
+ {
+ gulong px;
+
+diff --git a/openbox/menuframe.c b/openbox/menuframe.c
+index c37fdcc5..f598cf15 100644
+--- a/openbox/menuframe.c
++++ b/openbox/menuframe.c
+@@ -17,6 +17,7 @@
+ See the COPYING file for a copy of the GNU General Public License.
+ */
+
++#include "frame.h"
+ #include "menuframe.h"
+ #include "client.h"
+ #include "menu.h"
+@@ -845,6 +846,9 @@ void menu_frame_render(ObMenuFrame *self)
+
+ RECT_SET_SIZE(self->area, w, h);
+
++ if (config_theme_menuradius)
++ frame_round_corners(self->window);
++
+ XFlush(obt_display);
+ }
+
diff --git a/x11-wm/openbox/pkg-descr b/x11-wm/openbox/pkg-descr
index 24147d52d9b3..5206fa29e040 100644
--- a/x11-wm/openbox/pkg-descr
+++ b/x11-wm/openbox/pkg-descr
@@ -19,4 +19,8 @@ GNOME or K desktop environments, you can combine their ease and
functionality with the power of Openbox. Your desktop becomes cleaner and
faster, and is in your control, when you use Openbox.
+This port also includes optional 3rd party patches for rounder corners
+support and miscellaneous fixes from
+https://github.com/dylanaraps/openbox-patched.
+
WWW: http://openbox.org/