File icewm-mate.patch of Package icewm.14885
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,5 +53,5 @@ add_subdirectory(po)
add_subdirectory(lib)
add_subdirectory(doc)
+install(FILES icewm-set-matewm DESTINATION ${BINDIR} PERMISSIONS WORLD_EXECUTE OWNER_EXECUTE GROUP_EXECUTE WORLD_READ OWNER_READ OWNER_WRITE GROUP_READ)
install(FILES icewm-set-gnomewm DESTINATION ${BINDIR} PERMISSIONS WORLD_EXECUTE OWNER_EXECUTE GROUP_EXECUTE WORLD_READ OWNER_READ OWNER_WRITE GROUP_READ)
-
--- a/configure.ac
+++ b/configure.ac
@@ -344,6 +344,18 @@ fi
AC_SUBST([GNOME1_CFLAGS])
AC_SUBST([GNOME1_LIBS])
+AC_ARG_ENABLE([menus-mate],
+ AC_HELP_STRING([--disable-menus-mate],[Disable display of MATE menus.]))
+if test x$enable_menus_mate != xno; then
+ PKG_CHECK_MODULES([GNOME2],[mate-desktop-2.0],[
+ enable_menus_gnome2=no
+ AC_DEFINE([CONFIG_MATE_MENUS],[1],[Define to make IceWM more MATE-friendly])
+ AC_DEFINE([CONFIG_GNOME_MENUS],[1],[Define to make IceWM more GNOME-friendly])
+ BUILD_MENU_MATE=yes
+ APPLICATIONS="${APPLICATIONS} icewm-menu-mate"],[
+ AC_MSG_WARN([MATE menus not supported.])])
+fi
+
AC_ARG_ENABLE([menus-gnome2],
AC_HELP_STRING([--disable-menus-gnome2],[Disable display of GNOME 2 menus.]))
if test x$enable_menus_gnome2 != xno; then
@@ -383,6 +395,7 @@ AM_CONDITIONAL([BUILD_HELP],[test x$BUIL
AM_CONDITIONAL([BUILD_SOUND],[test x$BUILD_SOUND = xyes])
AM_CONDITIONAL([BUILD_MENU_GNOME1],[test x$BUILD_MENU_GNOME1 = xyes])
AM_CONDITIONAL([BUILD_MENU_GNOME2],[test x$BUILD_MENU_GNOME2 = xyes])
+AM_CONDITIONAL([BUILD_MENU_MATE],[test x$BUILD_MENU_MATE = xyes])
AM_CONDITIONAL([BUILD_MENU_FDO],[test x$BUILD_MENU_FDO = xyes])
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
--- a/icewm.desktop
+++ b/icewm.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Name=IceWM
+Exec=icewm
+NoDisplay=true
+X-MATE-WMName=IceWM
+X-MATE-Autostart-Phase=WindowManager
+X-MATE-Provides=windowmanager
+X-MATE-Autostart-Notify=true
+X-GNOME-WMName=IceWM
+X-GNOME-Autostart-Phase=WindowManager
+X-GNOME-Provides=windowmanager
+X-GNOME-Autostart-Notify=true
--- a/icewm-set-matewm
+++ b/icewm-set-matewm
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+echo -n "Previous window manager: "
+gsettings get org.mate.session.required-components windowmanager
+
+gsettings set org.mate.session.required-components windowmanager "'icewm'"
+
+echo -n "New window manager: "
+gsettings get org.mate.session.required-components windowmanager
--- a/Makefile.am
+++ b/Makefile.am
@@ -106,5 +106,8 @@ icewm.lsm: icewm.lsm.in
sed -r -e 's:%%PACKAGE%%:$(PACKAGE):g;s:%%VERSION%%:$(VERSION):g;s:%%DATE%%:$(DATE):g' $< >$@
dist_bin_SCRIPTS = \
+ icewm-set-matewm \
icewm-set-gnomewm
+desktopdir = $(datadir)/applications
+desktop_DATA = icewm.desktop
--- a/src/gnome2.cc
+++ b/src/gnome2.cc
@@ -25,10 +25,16 @@ char const * ApplicationName = "icewm-menu-gnome2";
#include <dirent.h>
#include <string.h>
-#include <gnome.h>
+#include "yarray.h"
+#ifdef CONFIG_MATE_MENUS
+#include <libmate-desktop/mate-desktop-item.h>
+
+char const * ApplicationName = "icewm-menu-mate";
+#else
#include <libgnome/gnome-desktop-item.h>
#include <libgnomevfs/gnome-vfs-init.h>
-#include "yarray.h"
+
+#endif
class GnomeMenu;
@@ -58,14 +63,16 @@ void dumpMenu(GnomeMenu *menu) {
GnomeMenuItem *item = menu->items.getItem(i);
if (item->dentry && !item->submenu) {
- printf("prog \"%s\" %s icewm-menu-gnome2 --open \"%s\"\n",
+ printf("prog \"%s\" %s %s --open \"%s\"\n",
item->title,
item->icon ? item->icon : "-",
+ ApplicationName,
item->dentry);
} else if (item->dentry && item->submenu) {
- printf("menuprog \"%s\" %s icewm-menu-gnome2 --list \"%s\"\n",
+ printf("menuprog \"%s\" %s %s --list \"%s\"\n",
item->title,
item->icon ? item->icon : "-",
+ ApplicationName,
(!strcmp(my_basename(item->dentry), ".directory") ?
g_dirname(item->dentry) : item->dentry));
}
@@ -101,16 +108,27 @@ void GnomeMenu::addEntry(const char *fPa
GnomeMenuItem *item = new GnomeMenuItem();
item->title = name;
+#ifdef CONFIG_MATE_MENUS
+ MateDesktopItem *ditem =
+ mate_desktop_item_new_from_file(npath,
+ (MateDesktopItemLoadFlags)0,
+#else
GnomeDesktopItem *ditem =
gnome_desktop_item_new_from_file(npath,
(GnomeDesktopItemLoadFlags)0,
+#endif
NULL);
struct stat sb;
const char *type;
bool isDir = (!stat(npath, &sb) && S_ISDIR(sb.st_mode));
+#ifdef CONFIG_MATE_MENUS
+ type = mate_desktop_item_get_string(ditem,
+ MATE_DESKTOP_ITEM_TYPE);
+#else
type = gnome_desktop_item_get_string(ditem,
GNOME_DESKTOP_ITEM_TYPE);
+#endif
if (!isDir && type && strstr(type, "Directory")) {
isDir = 1;
}
@@ -119,7 +137,9 @@ void GnomeMenu::addEntry(const char *fPa
GnomeMenu *submenu = new GnomeMenu();
item->title = g_path_get_basename(npath);
- item->icon = gnome_pixmap_file("gnome-folder.png");
+ item->icon = gtk_icon_info_get_filename(gtk_icon_theme_lookup_icon(
+ gtk_icon_theme_get_default(), "folder",
+ 16, GTK_ICON_LOOKUP_NO_SVG));
item->submenu = submenu;
char *epath = new char[nlen + sizeof("/.directory")];
@@ -130,19 +150,35 @@ void GnomeMenu::addEntry(const char *fPa
strcpy(epath, npath);
}
+#ifdef CONFIG_MATE_MENUS
+ ditem = mate_desktop_item_new_from_file(epath,
+ (MateDesktopItemLoadFlags)0,
+#else
ditem = gnome_desktop_item_new_from_file(epath,
(GnomeDesktopItemLoadFlags)0,
+#endif
NULL);
if (ditem) {
+#ifdef CONFIG_MATE_MENUS
+ item->title = mate_desktop_item_get_localestring(ditem, MATE_DESKTOP_ITEM_NAME); //LXP FX
+ item->icon = mate_desktop_item_get_string(ditem, MATE_DESKTOP_ITEM_ICON);
+#else
item->title = gnome_desktop_item_get_localestring(ditem, GNOME_DESKTOP_ITEM_NAME); //LXP FX
item->icon = gnome_desktop_item_get_string(ditem, GNOME_DESKTOP_ITEM_ICON);
+#endif
}
item->dentry = epath;
} else {
if (type && !strstr(type, "Directory")) {
+#ifdef CONFIG_MATE_MENUS
+ item->title = mate_desktop_item_get_localestring(ditem, MATE_DESKTOP_ITEM_NAME);
+ if (mate_desktop_item_get_string(ditem, MATE_DESKTOP_ITEM_ICON))
+ item->icon = mate_desktop_item_get_string(ditem, MATE_DESKTOP_ITEM_ICON);
+#else
item->title = gnome_desktop_item_get_localestring(ditem, GNOME_DESKTOP_ITEM_NAME);
if (gnome_desktop_item_get_string(ditem, GNOME_DESKTOP_ITEM_ICON))
item->icon = gnome_desktop_item_get_string(ditem, GNOME_DESKTOP_ITEM_ICON);
+#endif
item->dentry = npath;
}
}
@@ -281,13 +281,24 @@ void GnomeMenu::populateMenu(const char *fPath) {
char fullpath[256];
strlcpy(fullpath, dirname, sizeof fullpath);
strlcat(fullpath, file->d_name, sizeof fullpath);
+#ifdef CONFIG_MATE_MENUS
+ MateDesktopItem *ditem =
+ mate_desktop_item_new_from_file(fullpath,
+ (MateDesktopItemLoadFlags)0,
+#else
GnomeDesktopItem *ditem =
gnome_desktop_item_new_from_file(fullpath,
(GnomeDesktopItemLoadFlags)0,
+#endif
NULL);
const char *categories =
+#ifdef CONFIG_MATE_MENUS
+ mate_desktop_item_get_string(ditem,
+ MATE_DESKTOP_ITEM_CATEGORIES);
+#else
gnome_desktop_item_get_string(ditem,
GNOME_DESKTOP_ITEM_CATEGORIES);
+#endif
if (categories && strstr(categories, category)) {
if (*file->d_name != '.') {
@@ -323,9 +370,15 @@ int runFile(const char *dentry_path) {
char arg[32];
int i;
+#ifdef CONFIG_MATE_MENUS
+ MateDesktopItem *ditem =
+ mate_desktop_item_new_from_file(dentry_path,
+ (MateDesktopItemLoadFlags)0,
+#else
GnomeDesktopItem *ditem =
gnome_desktop_item_new_from_file(dentry_path,
(GnomeDesktopItemLoadFlags)0,
+#endif
NULL);
if (ditem == NULL) {
@@ -334,7 +387,11 @@ int runFile(const char *dentry_path) {
// FIXME: leads to segfault for some reason, so using execlp instead
// gnome_desktop_item_launch(ditem, NULL, 0, NULL);
+#ifdef CONFIG_MATE_MENUS
+ const char *app = mate_desktop_item_get_string(ditem, MATE_DESKTOP_ITEM_EXEC);
+#else
const char *app = gnome_desktop_item_get_string(ditem, GNOME_DESKTOP_ITEM_EXEC);
+#endif
if(!app)
return 1;
@@ -351,7 +408,10 @@ int runFile(const char *dentry_path) {
int main(int argc, char **argv) {
+ gtk_init(&argc, &argv);
+#ifndef CONFIG_MATE_MENUS
gnome_vfs_init();
+#endif
for (char ** arg = argv + 1; arg < argv + argc; ++arg) {
if (**arg == '-') {
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,6 +11,7 @@ EXTRA_PROGRAMS = \
icesound \
icewm-menu-gnome1 \
icewm-menu-gnome2 \
+ icewm-menu-mate \
icewm-menu-fdo \
testarray \
testlocale \
@@ -72,6 +73,10 @@ bin_PROGRAMS += icewm-menu-gnome2
AM_INSTALLCHECK_STD_OPTIONS_EXEMPT += icewm-menu-gnome2
endif
+if BUILD_MENU_MATE
+bin_PROGRAMS += icewm-menu-mate
+endif
+
if BUILD_MENU_FDO
bin_PROGRAMS += icewm-menu-fdo
AM_INSTALLCHECK_STD_OPTIONS_EXEMPT += icewm-menu-fdo
@@ -371,6 +376,20 @@ icewm_menu_gnome1_SOURCES = \
ascii.h
icewm_menu_gnome1_LDADD = libice.la $(GNOME1_LIBS) $(CORE_LIBS)
+icewm_menu_mate_SOURCES = \
+ intl.h \
+ debug.h \
+ sysdep.h \
+ base.h \
+ themable.h \
+ default.h \
+ ylib.h \
+ gnome2.cc \
+ ascii.h \
+ ycmdline.cc \
+ ycmdline.h
+icewm_menu_mate_LDADD = libice.la $(GNOME2_LIBS) $(CORE_LIBS)
+
icewm_menu_gnome2_SOURCES = \
intl.h \
debug.h \