mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 17:59:20 -04:00
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.
This commit is contained in:
parent
79e7c4bc45
commit
05f788b987
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=459581
7 changed files with 236 additions and 2 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
TIMESTAMP = 1516419364
|
||||
SHA256 (openbox-3.6.tar.gz) = 866c0ab8cb1cd15c7ae8022179cb6132a4c0f0476673bd3b834a1ef67a593ba8
|
||||
SIZE (openbox-3.6.tar.gz) = 963207
|
||||
|
|
11
x11-wm/openbox/files/openbox-3.5.0-title-matching.patch
Normal file
11
x11-wm/openbox/files/openbox-3.5.0-title-matching.patch
Normal file
|
@ -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;
|
11
x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch
Normal file
11
x11-wm/openbox/files/openbox-3.5.0-which-2.20.patch
Normal file
|
@ -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
|
||||
|
22
x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch
Normal file
22
x11-wm/openbox/files/openbox-3.6.2-fix-out-of-bounds.patch
Normal file
|
@ -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;
|
178
x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch
Normal file
178
x11-wm/openbox/files/openbox-3.6.2-rounded-corners.patch
Normal file
|
@ -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);
|
||||
}
|
||||
|
|
@ -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/
|
||||
|
|
Loading…
Add table
Reference in a new issue