Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37048563
en ru br
Репозитории 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
www.altlinux.org/Changes

Группа :: Графические оболочки/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;
 }
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin