Репозитории ALT
S: | 0.96.0-alt1 |
5.1: | 0.92.0-alt6 |
4.1: | 0.92.0-alt2 |
4.0: | 0.92.0-alt2 |
3.0: | 0.91.0-alt1 |
+backports: | 0.92.0-alt0.M30.1 |
Группа :: Графические оболочки/Window Maker
Пакет: WindowMaker
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: WindowMaker-0.92.0-alt-menutrans.patch
Скачать
Скачать
src/WindowMaker.h | 2 ++
src/defaults.c | 3 +++
src/main.c | 8 ++++++--
src/rootmenu.c | 27 +++++++++++++++++++--------
src/workspace.c | 18 +++++++++++++++---
5 files changed, 45 insertions(+), 13 deletions(-)
diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index a4e2f4e..37bfea0 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -466,6 +466,8 @@ typedef struct WPreferences {
/* shading animation */
signed char shade_speed;
+ int translate_menu;
+
int edge_resistance;
char attract;
diff --git a/src/defaults.c b/src/defaults.c
index bd075df..b601aaf 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -556,6 +556,9 @@ WDefaultEntry optionList[] = {
{"SingleClickLaunch", "NO", NULL,
&wPreferences.single_click, getBool, NULL
},
+ {"TranslateMenu", "YES", NULL,
+ &wPreferences.translate_menu, getBool, NULL
+ },
/* style options */
{"MenuStyle", "normal", seMenuStyles,
&wPreferences.menu_style, getEnum, setMenuStyle
diff --git a/src/main.c b/src/main.c
index de63090..102b57d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -791,11 +791,15 @@ real_main(int argc, char **argv)
if (!Locale || strcmp(Locale, "C")==0 || strcmp(Locale, "POSIX")==0)
Locale = NULL;
#ifdef I18N
- if (getenv("NLSPATH"))
+ if (getenv("NLSPATH")) {
bindtextdomain("WindowMaker", getenv("NLSPATH"));
- else
+ bindtextdomain("menu-messages", getenv("NLSPATH"));
+ } else {
bindtextdomain("WindowMaker", LOCALEDIR);
+ bindtextdomain("menu-messages", LOCALEDIR);
+ }
bind_textdomain_codeset("WindowMaker", "UTF-8");
+ bind_textdomain_codeset("menu-messages", "UTF-8");
textdomain("WindowMaker");
if (!XSupportsLocale()) {
diff --git a/src/rootmenu.c b/src/rootmenu.c
index 01a5851..9259311 100644
--- a/src/rootmenu.c
+++ b/src/rootmenu.c
@@ -355,6 +355,17 @@ legalPanelCommand(WMenu *menu, WMenuEntry *entry)
wShowLegalPanel(menu->frame->screen_ptr);
}
+/************ translate menu item on the fly *************/
+#define NOTRANSLATE_PREFIX "notranslate "
+static char*
+translateMenuTitle(char* title)
+{
+ if(!strncmp(NOTRANSLATE_PREFIX, title, strlen(NOTRANSLATE_PREFIX)))
+ return title + strlen(NOTRANSLATE_PREFIX);
+ if(wPreferences.translate_menu)
+ return dgettext("menu-messages", title);
+ return title;
+}
/********************************************************************/
@@ -1146,13 +1157,13 @@ parseCascade(WScreen *scr, WMenu *menu, FILE *file, char *file_name)
/* start submenu */
- cascade = wMenuCreate(scr, title, False);
+ cascade = wMenuCreate(scr, translateMenuTitle(title), False);
cascade->on_destroy = removeShortcutsForMenu;
if (parseCascade(scr, cascade, file, file_name)==NULL) {
wMenuDestroy(cascade, True);
} else {
wMenuEntrySetCascade(menu,
- wMenuAddCallback(menu, title, NULL, NULL),
+ wMenuAddCallback(menu, translateMenuTitle(title), NULL, NULL),
cascade);
}
} else if (strcasecmp(command, "END")==0) {
@@ -1161,7 +1172,7 @@ parseCascade(WScreen *scr, WMenu *menu, FILE *file, char *file_name)
} else {
/* normal items */
- addMenuEntry(menu, title, shortcut[0] ? shortcut : NULL, command,
+ addMenuEntry(menu, translateMenuTitle(title), shortcut[0] ? shortcut : NULL, command,
params[0] ? params : NULL, file_name);
}
}
@@ -1534,7 +1545,7 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command)
strcat(buffer, command);
}
- addMenuEntry(menu, data->name, NULL, "OPEN_MENU", buffer, path[data->index]);
+ addMenuEntry(menu, translateMenuTitle(data->name), NULL, "OPEN_MENU", buffer, path[data->index]);
wfree(buffer);
if (data->name)
@@ -1582,7 +1593,7 @@ readMenuDirectory(WScreen *scr, char *title, char **path, char *command)
if (ptr && ptr!=data->name)
*ptr = 0;
}
- addMenuEntry(menu, data->name, NULL, "SHEXEC", buffer, path[data->index]);
+ addMenuEntry(menu, translateMenuTitle(data->name), NULL, "SHEXEC", buffer, path[data->index]);
wfree(buffer);
if (data->name)
@@ -1701,7 +1712,7 @@ configureMenu(WScreen *scr, WMPropList *definition)
}
mtitle = WMGetFromPLString(elem);
- menu = wMenuCreate(scr, mtitle, False);
+ menu = wMenuCreate(scr, translateMenuTitle(mtitle), False);
menu->on_destroy = removeShortcutsForMenu;
#ifdef GLOBAL_SUBMENU_FILE
@@ -1738,7 +1749,7 @@ configureMenu(WScreen *scr, WMPropList *definition)
/* submenu */
submenu = configureMenu(scr, elem);
if (submenu) {
- mentry = wMenuAddCallback(menu, submenu->frame->title, NULL,
+ mentry = wMenuAddCallback(menu, translateMenuTitle(submenu->frame->title), NULL,
NULL);
wMenuEntrySetCascade(menu, mentry, submenu);
}
@@ -1761,7 +1772,7 @@ configureMenu(WScreen *scr, WMPropList *definition)
if (!title || !command)
goto error;
- addMenuEntry(menu, WMGetFromPLString(title),
+ addMenuEntry(menu, translateMenuTitle(WMGetFromPLString(title)),
shortcut ? WMGetFromPLString(shortcut) : NULL,
WMGetFromPLString(command),
params ? WMGetFromPLString(params) : NULL, "WMRootMenu");
diff --git a/src/workspace.c b/src/workspace.c
index fd27b83..5c872f6 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -1349,7 +1349,10 @@ wWorkspaceMenuMake(WScreen *scr, Bool titled)
{
WMenu *wsmenu;
- wsmenu = wMenuCreate(scr, titled ? _("Workspaces") : NULL, False);
+ if(wPreferences.translate_menu)
+ wsmenu = wMenuCreate(scr, titled ? _("Workspaces") : NULL, False);
+ else
+ wsmenu = wMenuCreate(scr, titled ? "Workspaces" : NULL, False);
if (!wsmenu) {
wwarning(_("could not create Workspace menu"));
return NULL;
@@ -1358,8 +1361,17 @@ wWorkspaceMenuMake(WScreen *scr, Bool titled)
/* callback to be called when an entry is edited */
wsmenu->on_edit = onMenuEntryEdited;
- wMenuAddCallback(wsmenu, _("New"), newWSCommand, NULL);
- wMenuAddCallback(wsmenu, _("Destroy Last"), deleteWSCommand, NULL);
+
+ if(wPreferences.translate_menu)
+ {
+ wMenuAddCallback(wsmenu, _("New"), newWSCommand, NULL);
+ wMenuAddCallback(wsmenu, _("Destroy Last"), deleteWSCommand, NULL);
+ }
+ else
+ {
+ wMenuAddCallback(wsmenu, "New", newWSCommand, NULL);
+ wMenuAddCallback(wsmenu, "Destroy Last", deleteWSCommand, NULL);
+ }
return wsmenu;
}