diff --git a/.gitignore b/.gitignore index 2f587a6..65d1291 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /setlayout.c -/openbox-3.5.2.tar.gz +/openbox-3.6.1.tar.xz diff --git a/openbox-calc-layer.patch b/openbox-calc-layer.patch new file mode 100644 index 0000000..9f00bbb --- /dev/null +++ b/openbox-calc-layer.patch @@ -0,0 +1,36 @@ +From https://bugzilla.icculus.org/show_bug.cgi?id=6669#c2 + +diff --git a/openbox/client.c b/openbox/client.c +index 3ff278ae..ac4ff827 100644 +--- a/openbox/client.c ++++ b/openbox/client.c +@@ -2702,9 +2702,10 @@ static void client_calc_layer_internal(ObClient *self) + void client_calc_layer(ObClient *self) + { + GList *it; ++ GList *list = g_list_copy(stacking_list); + + /* skip over stuff above fullscreen layer */ +- for (it = stacking_list; it; it = g_list_next(it)) ++ for (it = list; it; it = g_list_next(it)) + if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break; + + /* find the windows in the fullscreen layer, and mark them not-visited */ +@@ -2717,7 +2718,7 @@ void client_calc_layer(ObClient *self) + client_calc_layer_internal(self); + + /* skip over stuff above fullscreen layer */ +- for (it = stacking_list; it; it = g_list_next(it)) ++ for (it = list; it; it = g_list_next(it)) + if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break; + + /* now recalc any windows in the fullscreen layer which have not +@@ -2728,6 +2729,8 @@ void client_calc_layer(ObClient *self) + !WINDOW_AS_CLIENT(it->data)->visited) + client_calc_layer_internal(it->data); + } ++ ++ g_list_free(it); + } + + gboolean client_should_show(ObClient *self) diff --git a/openbox-kf5menu.patch b/openbox-kf5menu.patch new file mode 100644 index 0000000..1c3c9e5 --- /dev/null +++ b/openbox-kf5menu.patch @@ -0,0 +1,12 @@ +diff -up openbox-3.6.1/data/xsession/openbox-kde-session.in.kf5menu openbox-3.6.1/data/xsession/openbox-kde-session.in +--- openbox-3.6.1/data/xsession/openbox-kde-session.in.kf5menu 2011-10-16 18:13:18.000000000 +0200 ++++ openbox-3.6.1/data/xsession/openbox-kde-session.in 2020-11-09 10:42:43.755217411 +0100 +@@ -8,7 +8,7 @@ if test -n "$1"; then + fi + + # Set the prefix for the menu layout to use +-export XDG_MENU_PREFIX="kde-4-" ++export XDG_MENU_PREFIX="kf5-" + + # Clean up after GDM + xprop -root -remove _NET_NUMBER_OF_DESKTOPS \ diff --git a/openbox-python3.patch b/openbox-python3.patch new file mode 100644 index 0000000..f17bef3 --- /dev/null +++ b/openbox-python3.patch @@ -0,0 +1,113 @@ +diff -up openbox-3.6.1/data/autostart/openbox-xdg-autostart.python3 openbox-3.6.1/data/autostart/openbox-xdg-autostart +--- openbox-3.6.1/data/autostart/openbox-xdg-autostart.python3 2013-04-17 14:27:27.000000000 +0200 ++++ openbox-3.6.1/data/autostart/openbox-xdg-autostart 2018-04-17 15:52:23.849765020 +0200 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/python3 + + # openbox-xdg-autostart runs things based on the XDG autostart specification + # Copyright (C) 2008 Dana Jansens +@@ -28,9 +28,9 @@ try: + from xdg.DesktopEntry import DesktopEntry + from xdg.Exceptions import ParsingError + except ImportError: +- print +- print >>sys.stderr, "ERROR:", ME, "requires PyXDG to be installed" +- print ++ print() ++ print("ERROR:", ME, "requires PyXDG to be installed", file=sys.stderr) ++ print() + sys.exit(1) + + def main(argv=sys.argv): +@@ -51,7 +51,7 @@ def main(argv=sys.argv): + try: + autofile = AutostartFile(path) + except ParsingError: +- print "Invalid .desktop file: " + path ++ print("Invalid .desktop file: " + path) + else: + if not autofile in files: + files.append(autofile) +@@ -99,9 +99,9 @@ class AutostartFile: + + def _alert(self, str, info=False): + if info: +- print "\t ", str ++ print("\t ", str) + else: +- print "\t*", str ++ print("\t*", str) + + def _showInEnvironment(self, envs, verbose=False): + default = not self.de.getOnlyShowIn() +@@ -146,9 +146,9 @@ class AutostartFile: + + def display(self, envs): + if self._shouldRun(envs): +- print "[*] " + self.de.getName() ++ print("[*] " + self.de.getName()) + else: +- print "[ ] " + self.de.getName() ++ print("[ ] " + self.de.getName()) + self._alert("File: " + self.path, info=True) + if self.de.getExec(): + self._alert("Executes: " + self.de.getExec(), info=True) +@@ -165,33 +165,33 @@ class AutostartFile: + os.chdir(here) + + def show_help(): +- print "Usage:", ME, "[OPTION]... [ENVIRONMENT]..." +- print +- print "This tool will run xdg autostart .desktop files" +- print +- print "OPTIONS" +- print " --list Show a list of the files which would be run" +- print " Files which would be run are marked with an asterix" +- print " symbol [*]. For files which would not be run," +- print " information is given for why they are excluded" +- print " --help Show this help and exit" +- print " --version Show version and copyright information" +- print +- print "ENVIRONMENT specifies a list of environments for which to run autostart" +- print "applications. If none are specified, only applications which do not " +- print "limit themselves to certain environments will be run." +- print +- print "ENVIRONMENT can be one or more of:" +- print " GNOME Gnome Desktop" +- print " KDE KDE Desktop" +- print " ROX ROX Desktop" +- print " XFCE XFCE Desktop" +- print " Old Legacy systems" ++ print("Usage:", ME, "[OPTION]... [ENVIRONMENT]...") ++ print() ++ print("This tool will run xdg autostart .desktop files") ++ print() ++ print("OPTIONS") ++ print(" --list Show a list of the files which would be run") ++ print(" Files which would be run are marked with an asterix") ++ print(" symbol [*]. For files which would not be run,") ++ print(" information is given for why they are excluded") ++ print(" --help Show this help and exit") ++ print(" --version Show version and copyright information") ++ print() ++ print("ENVIRONMENT specifies a list of environments for which to run autostart") ++ print("applications. If none are specified, only applications which do not ") ++ print("limit themselves to certain environments will be run.") ++ print ++ print("ENVIRONMENT can be one or more of:") ++ print(" GNOME Gnome Desktop") ++ print(" KDE KDE Desktop") ++ print(" ROX ROX Desktop") ++ print(" XFCE XFCE Desktop") ++ print(" Old Legacy systems") + print + + def show_version(): +- print ME, VERSION +- print "Copyright (c) 2008 Dana Jansens" ++ print(ME, VERSION) ++ print("Copyright (c) 2008 Dana Jansens") + print + + if __name__ == "__main__": diff --git a/openbox.spec b/openbox.spec index fb62392..9e1d7f4 100644 --- a/openbox.spec +++ b/openbox.spec @@ -1,24 +1,30 @@ Name: openbox -Version: 3.5.2 -Release: 2%{?dist} +Version: 3.6.1 +Release: 31%{?dist} Summary: A highly configurable and standards-compliant X11 window manager -Group: User Interface/Desktops -License: GPLv2+ +License: GPL-2.0-or-later URL: http://openbox.org -Source0: http://openbox.org/releases/%{name}-%{version}.tar.gz +Source0: http://openbox.org/dist/%{name}/%{name}-%{version}.tar.xz Source1: http://icculus.org/openbox/tools/setlayout.c Source2: xdg-menu Source3: menu.xml Source4: terminals.menu +Patch1: openbox-python3.patch +Patch2: openbox-kf5menu.patch +Patch3: openbox-calc-layer.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} # required by xdg-menu and xdg-autostart scripts -Requires: pyxdg +Requires: python3-pyxdg +# used by xdg-menu for icon support (optional) +Suggests: python3-gobject # as discussed in https://bugzilla.redhat.com/860997 Requires: redhat-menus +BuildRequires: make +BuildRequires: gcc BuildRequires: gettext BuildRequires: desktop-file-utils BuildRequires: pango-devel @@ -33,6 +39,11 @@ BuildRequires: imlib2-devel BuildRequires: libpng-devel Provides: firstboot(windowmanager) +# gdm-control, gnome-control-center and openbox-gnome were removed in 3.5.2-5 +Obsoletes: gdm-control < 3.5.2-5 +Obsoletes: gnome-panel-control < 3.5.2-5 +Obsoletes: %{name}-gnome < 3.5.2-5 + %description Openbox is a window manager designed explicity for standards-compliance and speed. It is fast, lightweight, and heavily configurable (using XML for its @@ -43,13 +54,11 @@ actions, multi-head/Xinerama support, and dynamically generated "pipe menus." For a full list of the FreeDesktop.org standards with which it is compliant, please see the COMPLIANCE file in the included documentation of this package. For a graphical configuration editor, you'll need to install the obconf -package. For a graphical menu editor, you'll need to install the obmenu package. %package devel Summary: Development files for %{name} -Group: Development/Libraries Requires: %{name}-libs%{?_isa} = %{version}-%{release} Requires: pkgconfig Requires: pango-devel @@ -63,56 +72,15 @@ developing applications that use %{name}. %package libs Summary: Shared libraries for %{name} -Group: Development/Libraries %description libs The %{name}-libs package contains shared libraries used by %{name}. -%package gnome -Summary: GNOME integration for %{name} -Group: User Interface/Desktops -Requires: %{name} = %{version}-%{release} -Requires: gnome-session -Requires: gnome-panel-control -Requires: gdm-control -BuildArch: noarch - -%description gnome -The %{name}-gnome package contains the files needed for using %{name} inside a -GNOME session. - - -%package -n gnome-panel-control -Summary: Command line utility to control the GNOME panel -Group: User Interface/Desktops -Requires: %{name} = %{version}-%{release} -Requires: gnome-panel - -%description -n gnome-panel-control -gnome-panel-control can be used to invoke the GNOME panel run or main menu from -the command line. It is originally a helper utility of openbox since -gnome-panel is no longer managing its own key bindings. - - -%package -n gdm-control -Summary: Command line utility to control the GNOME Display Manager -Group: User Interface/Desktops -Requires: %{name} = %{version}-%{release} -Requires: gnome-panel - -%description -n gdm-control -gdm-control can be used to control the GNOME Display Manager. It can invoke -it's power management functions, shut down and reboot a machine or switch users. -It is originally a helper utility of openbox since gdm lacks control over these -features. - - %package kde Summary: KDE integration for %{name} -Group: User Interface/Desktops Requires: %{name} = %{version}-%{release} -Requires: kdebase-workspace +Requires: plasma-workspace BuildArch: noarch %description kde @@ -122,6 +90,9 @@ KDE session. %prep %setup -q +%patch -P1 -p1 -b .python3 +%patch -P2 -p1 -b .kf5menu +%patch -P3 -p1 -b .calc-layer %build @@ -130,12 +101,12 @@ KDE session. ## Fix RPATH hardcoding. sed -ie 's|^hardcode_libdir_flag_spec=.*$|hardcode_libdir_flag_spec=""|g' libtool sed -ie 's|^runpath_var=LD_RUN_PATH$|runpath_var=DIE_RPATH_DIE|g' libtool -make %{?_smp_mflags} +%make_build -gcc %{optflags} -o setlayout %{SOURCE1} -lX11 +gcc $RPM_OPT_FLAGS $RPM_LD_FLAGS -o setlayout %{SOURCE1} -lX11 %install -make install DESTDIR=%{buildroot} +%make_install install setlayout %{buildroot}%{_bindir} install -p %{SOURCE2} %{buildroot}%{_libexecdir}/openbox-xdg-menu @@ -150,6 +121,14 @@ install -m644 -D data/gnome-session/openbox-gnome.session \ install -m644 -D data/gnome-session/openbox-gnome-fallback.session \ %{buildroot}%{_datadir}/gnome-session/sessions/openbox-gnome-fallback.session +# remove unpackaged files +pushd %{buildroot} +rm ./%{_bindir}/{gdm-control,gnome-panel-control,%{name}-gnome-session} +rm ./%{_datadir}/xsessions/%{name}-gnome.desktop +rm ./%{_datadir}/gnome/wm-properties/openbox.desktop +rm ./%{_datadir}/gnome-session/sessions/openbox-gnome*.session +rm ./%{_mandir}/man1/%{name}-gnome-session*.1* +popd %find_lang %{name} @@ -186,32 +165,135 @@ rm -rf %{buildroot}%{_datadir}/doc/%{name} %{_libdir}/libobt.so %{_libdir}/pkgconfig/*.pc -%files gnome -%{_bindir}/%{name}-gnome-session -%{_datadir}/xsessions/%{name}-gnome.desktop -%{_datadir}/gnome/wm-properties/openbox.desktop -%{_datadir}/gnome-session/sessions/openbox-gnome*.session -%{_mandir}/man1/%{name}-gnome-session*.1* - -%files -n gnome-panel-control -%{_bindir}/gnome-panel-control - -%files -n gdm-control -%{_bindir}/gdm-control - %files kde %{_bindir}/%{name}-kde-session %{_datadir}/xsessions/%{name}-kde.desktop %{_mandir}/man1/%{name}-kde-session*.1* - -%post libs -p /sbin/ldconfig - - -%postun libs -p /sbin/ldconfig - +%ldconfig_scriptlets libs %changelog +* Thu Jul 16 2026 Fedora Release Engineering - 3.6.1-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Fri Jan 16 2026 Fedora Release Engineering - 3.6.1-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Thu Jul 24 2025 Fedora Release Engineering - 3.6.1-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jan 17 2025 Fedora Release Engineering - 3.6.1-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jul 18 2024 Fedora Release Engineering - 3.6.1-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Thu Jan 25 2024 Fedora Release Engineering - 3.6.1-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 3.6.1-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jul 20 2023 Fedora Release Engineering - 3.6.1-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Leigh Scott - 3.6.1-23 +- Rebuild fo new imlib2 + +* Thu Apr 27 2023 Miroslav Lichvar - 3.6.1-22 +- fix crash with new glib (#2178299) + +* Thu Jan 19 2023 Fedora Release Engineering - 3.6.1-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Jul 22 2022 Fedora Release Engineering - 3.6.1-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jan 20 2022 Fedora Release Engineering - 3.6.1-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Thu Jul 22 2021 Fedora Release Engineering - 3.6.1-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 3.6.1-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Nov 09 2020 Miroslav Lichvar - 3.6.1-16 +- update XDG menu prefix in KDE session script (#1851755) +- drop obsolete KDE4 requirement + +* Tue Jul 28 2020 Fedora Release Engineering - 3.6.1-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 3.6.1-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Oct 09 2019 Miroslav Lichvar - 3.6.1-13 +- remove obmenu from description + +* Thu Jul 25 2019 Fedora Release Engineering - 3.6.1-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 3.6.1-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 3.6.1-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Apr 17 2018 Miroslav Lichvar - 3.6.1-9 +- fix pyxdg requirement + +* Tue Apr 17 2018 Miroslav Lichvar - 3.6.1-8 +- switch packaged python scripts to python3 + +* Mon Feb 26 2018 Miroslav Lichvar - 3.6.1-7 +- build setlayout with hardening LDFLAGS (#1548830) +- use macro for ldconfig scriptlets +- add gcc to build requirements + +* Thu Feb 08 2018 Fedora Release Engineering - 3.6.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 3.6.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 3.6.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 3.6.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 3.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jul 02 2015 Miroslav Lichvar - 3.6.1-1 +- update to 3.6.1 + +* Thu Jun 25 2015 Miroslav Lichvar - 3.6-3 +- restore libobrender compatibility (#1231693) + +* Wed Jun 17 2015 Fedora Release Engineering - 3.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon Jun 01 2015 Miroslav Lichvar - 3.6-1 +- update to 3.6 + +* Thu Mar 05 2015 Rex Dieter 3.5.2-7 +- -kde: fix deps for plasma5 + +* Sun Aug 17 2014 Fedora Release Engineering - 3.5.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Jul 07 2014 Miroslav Lichvar - 3.5.2-5 +- drop gnome subpackages (#964977) +- fix typo in description (#1064959) + +* Sat Jun 07 2014 Fedora Release Engineering - 3.5.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue Dec 10 2013 Christoph Wickert - 3.5.2-3 +- gdm-control depends on gdm, not on gnome-panel (#964977) + * Thu Aug 15 2013 Miroslav Lichvar - 3.5.2-2 - Add workaround for yum to install correct libpng-devel in build diff --git a/sources b/sources index 2a16dd4..34cf0c4 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 16ca0d290cae2f4c16a35e9cdfb6f503 setlayout.c -93df606606053b7e8578a5c116afb8ec openbox-3.5.2.tar.gz +46bf5f1edda0eda0d9e824b585988be9 openbox-3.6.1.tar.xz diff --git a/xdg-menu b/xdg-menu index b3e5da0..ccd0efd 100644 --- a/xdg-menu +++ b/xdg-menu @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 # # Copyright (C) 2008 Red Hat, Inc. # @@ -26,6 +26,8 @@ from xml.sax.saxutils import escape icons = True try: + import gi + gi.require_version('Gtk', '3.0') from gi.repository import Gtk except ImportError: icons = False @@ -54,7 +56,7 @@ def icon_attr(entry): return '' def escape_utf8(s): - if isinstance(s, unicode): + if sys.version_info[0] < 3 and isinstance(s, unicode): s = s.encode('utf-8', 'xmlcharrefreplace') return escape(s) @@ -63,25 +65,25 @@ def entry_name(entry): def walk_menu(entry): if isinstance(entry, xdg.Menu.Menu) and entry.Show is True: - print '' \ + print('' \ % (entry_name(entry), entry_name(entry), - escape_utf8(icon_attr(entry))) - map(walk_menu, entry.getEntries()) - print '' + escape_utf8(icon_attr(entry)))) + list(map(walk_menu, entry.getEntries())) + print('') elif isinstance(entry, xdg.Menu.MenuEntry) and entry.Show is True: name = entry_name(entry.DesktopEntry) - print ' ' % (name.replace('"', ''), - escape_utf8(icon_attr(entry.DesktopEntry))) + print(' ' % (name.replace('"', ''), + escape_utf8(icon_attr(entry.DesktopEntry)))) command = re.sub(' -caption "%c"| -caption %c', ' -caption "%s"' % name, escape_utf8(entry.DesktopEntry.getExec())) command = re.sub(' [^ ]*%[fFuUdDnNickvm]', '', command) if entry.DesktopEntry.getTerminal(): command = 'xterm -title "%s" -e %s' % (name, command) - print ' ' + \ - '%s' % command - print ' ' + print(' ' + \ + '%s' % command) + print(' ') if len(sys.argv) > 1: menufile = sys.argv[1] + '.menu' @@ -100,7 +102,7 @@ if icons: menu = xdg.Menu.parse(menufile) -print '' -print '' -map(walk_menu, menu.getEntries()) -print '' +print('') +print('') +list(map(walk_menu, menu.getEntries())) +print('')